diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index 7ece54886..000000000 --- a/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory" : "src/DebugBar/Resources/vendor" -} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..56b1781c0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 + +# 4 space indentation +[{*.php,*.js}] +indent_style = space +indent_size = 4 + +[{*.yml,*.neon}] +indent_style = space +indent_size = 4 \ No newline at end of file diff --git a/.gitattributes b/.gitattributes index dfd71db96..00611dfed 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,15 +1,25 @@ * text=auto +/.github export-ignore /docs export-ignore /demo export-ignore /tests export-ignore /build export-ignore +/.editorconfig export-ignore /.bowerrc export-ignore /.gitattributes export-ignore /.gitignore export-ignore +/.nvmrc export-ignore +/.php-cs-fixer.dist.php export-ignore /.travis.yml export-ignore /bower.json export-ignore /phpunit.xml.dist export-ignore /CHANGELOG.md export-ignore /CONTRIBUTING.md export-ignore /README.md export-ignore +/mkdocs.yml export-ignore +/eslint.config.js export-ignore +/package.json export-ignore +/package-lock.json export-ignore +/phpstan.neon export-ignore +/UPGRADE.md export-ignore diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..4d29bc6e1 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms +github: barryvdh +custom: ['https://fruitcake.nl'] diff --git a/.github/workflows/build-assets.yml b/.github/workflows/build-assets.yml new file mode 100644 index 000000000..223e946c6 --- /dev/null +++ b/.github/workflows/build-assets.yml @@ -0,0 +1,58 @@ +name: Check Minified Files + +on: + push: + branches: + - master + paths: + - 'resources/**' + pull_request: + branches: + - "*" + paths: + - 'resources/**' + +permissions: + contents: write + +jobs: + build-assets: + runs-on: ubuntu-24.04 + timeout-minutes: 15 + + name: Build Minified Files + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.4 + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: composer update --prefer-dist --no-progress + + - name: Build all files + run: npm run lint:fix + + - name: Build all files + run: npm run build + + - name: Commit Compiled Files + uses: stefanzweifel/git-auto-commit-action@v7 + continue-on-error: true + with: + commit_message: Update Assets diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml new file mode 100644 index 000000000..0e258f413 --- /dev/null +++ b/.github/workflows/build-docs.yml @@ -0,0 +1,58 @@ +name: Build docs +on: + workflow_dispatch: + push: + branches: + - master + paths: + - 'resources/**' + - 'docs/**' + - 'demo/**' + +permissions: + contents: write +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + coverage: none + tools: composer:v2 + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: composer update --prefer-dist --no-progress + + - name: Run Tests for Docs + run: vendor/bin/phpunit --filter=testDocs + + - name: Run build script + run: php build/build-docs.php + + - uses: actions/setup-python@v6 + with: + python-version: 3.x + + - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + + - uses: actions/cache@v5 + with: + key: mkdocs-material-${{ env.cache_id }} + path: .cache + restore-keys: | + mkdocs-material- + + - run: pip install mkdocs-material + + - run: mkdocs gh-deploy --force diff --git a/.github/workflows/check-code-style.yml b/.github/workflows/check-code-style.yml new file mode 100644 index 000000000..5f308ce4c --- /dev/null +++ b/.github/workflows/check-code-style.yml @@ -0,0 +1,37 @@ +name: Check Code Style + +on: + pull_request: + branches: + - "*" + paths: + - '**.php' + +jobs: + cs-check: + runs-on: ubuntu-24.04 + timeout-minutes: 15 + env: + COMPOSER_NO_INTERACTION: 1 + + name: Check Code Style + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + coverage: none + tools: composer:v2 + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: composer update --prefer-dist --no-progress + + - name: Fix Code Style + run: vendor/bin/php-cs-fixer check -v --diff + continue-on-error: true diff --git a/.github/workflows/coverage-report.yml b/.github/workflows/coverage-report.yml new file mode 100644 index 000000000..ed1fb9224 --- /dev/null +++ b/.github/workflows/coverage-report.yml @@ -0,0 +1,45 @@ +name: Code Coverage + +on: + push: + branches: + - master + pull_request: + branches: + - "*" + +jobs: + coverage-report: + runs-on: ubuntu-24.04 + + name: PHP Code Coverage + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + tools: composer:v2 + extensions: mbstring + coverage: pcov + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: | + composer update --prefer-dist --no-interaction --no-suggest --with-all-dependencies + + - name: Check Code Coverage + uses: nick-fields/retry@v3 + with: + max_attempts: 3 + timeout_seconds: 60 + command: vendor/bin/phpunit --coverage-text --coverage-clover=clover.xml + + - uses: actions/upload-artifact@v6 + with: + name: coverage + path: clover.xml diff --git a/.github/workflows/fix-code-style.yml b/.github/workflows/fix-code-style.yml new file mode 100644 index 000000000..0cf47c1ea --- /dev/null +++ b/.github/workflows/fix-code-style.yml @@ -0,0 +1,44 @@ +name: Fix Code Style + +on: + push: + branches: + - master + paths: + - '**.php' + +permissions: + contents: write + +jobs: + cs-fix: + runs-on: ubuntu-24.04 + timeout-minutes: 15 + env: + COMPOSER_NO_INTERACTION: 1 + + name: Check Code Style + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + coverage: none + tools: composer:v2 + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: composer update --prefer-dist --no-progress + + - name: Fix Code Style + run: vendor/bin/php-cs-fixer fix -v --diff + + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v7 + with: + commit_message: Fix CS diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml new file mode 100644 index 000000000..dd9c0fb99 --- /dev/null +++ b/.github/workflows/integration-tests.yml @@ -0,0 +1,61 @@ +name: Integration + +on: + push: + branches: + - master + pull_request: + branches: + - "*" + +jobs: + integration-tests: + runs-on: ubuntu-24.04 + timeout-minutes: 15 + env: + COMPOSER_NO_INTERACTION: 1 + + strategy: + matrix: + php: [8.5, 8.4, 8.3, 8.2] + symfony: ['*'] + include: + - php: 8.2 + symfony: ^5.4 + - php: 8.2 + symfony: ^6.4 + - php: 8.2 + symfony: ^7.3 + - php: 8.4 + symfony: ^7.3 + + name: Integration PHP${{ matrix.php }} Symfony${{ matrix.symfony }} + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: none + tools: composer:v2 + extensions: pdo_sqlite + + - name: Require specific Symfony version + if: matrix.symfony != '*' + run: composer require "symfony/var-dumper:${{ matrix.symfony }}" --no-interaction --no-update + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: | + composer update --prefer-dist --no-progress + + - name: Execute Unit Tests + uses: nick-fields/retry@v3 + with: + max_attempts: 3 + timeout_seconds: 30 + command: vendor/bin/phpunit --testsuite=Browser diff --git a/.github/workflows/screenshots.yml b/.github/workflows/screenshots.yml new file mode 100644 index 000000000..6187fd779 --- /dev/null +++ b/.github/workflows/screenshots.yml @@ -0,0 +1,53 @@ +name: Screenshots + +on: + push: + branches: + - master + pull_request: + branches: + - "*" + +jobs: + screenshots: + runs-on: ubuntu-24.04 + timeout-minutes: 15 + env: + COMPOSER_NO_INTERACTION: 1 + + strategy: + matrix: + php: [8.4] + + name: PHP${{ matrix.php }} + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: none + tools: composer:v2 + extensions: pdo_sqlite + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: | + composer update --prefer-dist --no-progress + + - name: Execute Unit Tests + uses: nick-fields/retry@v3 + with: + max_attempts: 3 + timeout_seconds: 30 + command: vendor/bin/phpunit --testsuite=Browser + + - name: Upload screenshots + uses: actions/upload-artifact@v6 + with: + name: debugbar-screenshots + path: tests/screenshots diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml new file mode 100644 index 000000000..5e0920fb3 --- /dev/null +++ b/.github/workflows/static-analysis.yml @@ -0,0 +1,37 @@ +name: Code Analysis + +on: + push: + branches: + - master + pull_request: + branches: + - "*" + +jobs: + static-analysis: + runs-on: ubuntu-24.04 + timeout-minutes: 15 + env: + COMPOSER_NO_INTERACTION: 1 + + name: PHPStan Analysis + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + tools: composer:v2 + coverage: none + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: composer update --prefer-stable --prefer-dist --no-interaction --no-progress + + - name: Analyse with PHPStan + run: vendor/bin/phpstan --no-progress --error-format=github diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml new file mode 100644 index 000000000..6cfb0600a --- /dev/null +++ b/.github/workflows/unit-tests.yml @@ -0,0 +1,64 @@ +name: Tests + +on: + push: + branches: + - master + pull_request: + branches: + - "*" + +jobs: + unit-tests: + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + env: + COMPOSER_NO_INTERACTION: 1 + + strategy: + matrix: + os: [ubuntu-24.04] + php: [8.5, 8.4, 8.3, 8.2] + symfony: ['*'] + include: + - php: 8.2 + symfony: ^5.4 + os: ubuntu-latest + - php: 8.2 + symfony: ^6 + os: ubuntu-latest + - php: 8.2 + symfony: ^7 + os: ubuntu-latest + - php: 8.4 + symfony: ^7 + os: ubuntu-latest + - php: 8.4 + symfony: ^7 + os: windows-latest + + name: Unit PHP${{ matrix.php }} Symfony${{ matrix.symfony }} ${{ matrix.os }} + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: none + tools: composer:v2 + extensions: pdo_sqlite, zip + + - name: Require specific Symfony version + if: matrix.symfony != '*' + run: composer require "symfony/var-dumper:${{ matrix.symfony }}" --no-interaction --no-update + + - name: Install dependencies + env: + COMPOSER_ROOT_VERSION: dev-master + run: composer update --prefer-dist --no-progress + + - name: Execute Unit Tests + run: vendor/bin/phpunit --testsuite=Unit diff --git a/.gitignore b/.gitignore index 6494aeb9e..1ca86c47a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,20 @@ composer.lock /vendor -/src/DebugBar/Resources/vendor \ No newline at end of file +/demo/bridge/*/vendor +/demo/bridge/doctrine/db.sqlite +/demo/profiles +/src/DebugBar/Resources/vendor +.phpunit.result.cache +/drivers +/chromedriver +.phpunit.cache/ +/tests/screenshots +/node_modules +.DS_Store +.php-cs-fixer.cache +clover.xml +/docs/overrides/__pycache__/ +/docs/assets/dist/ +/site +/build/docs +debugbar.sqlite \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..a45fd52cc --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24 diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 000000000..e8c21eb02 --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,66 @@ +setParallelConfig(ParallelConfigFactory::detect()) // @TODO 4.0 no need to call this manually + ->setRiskyAllowed(true) + ->setRules([ + '@auto' => true, + '@PER-CS' => true, + '@PHP8x2Migration' => true, + '@PHPUnit10x0Migration:risky' => true, + //Modernize code + 'array_push' => true, + 'modernize_strpos' => true, + 'modernize_types_casting' => true, + //Align arrays + 'trim_array_spaces' => true, + //Casting + 'no_short_bool_cast' => true, + 'cast_spaces' => true, + + // Class names + 'no_leading_namespace_whitespace' => true, + 'no_unused_imports' => true, + 'single_space_around_construct' => true, + + //Remove unneeded code + 'no_unneeded_braces' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_extra_blank_lines' => true, + + //PHPdocs + 'no_superfluous_phpdoc_tags' => true, + 'no_empty_phpdoc' => true, + 'phpdoc_align' => true, + 'phpdoc_separation' => true, + 'phpdoc_to_param_type' => true, + 'phpdoc_to_return_type' => true, + + // Strict + 'declare_strict_types' => true, + 'return_type_declaration' => true, + 'nullable_type_declaration_for_default_null_value' => true, + ]) + // πŸ’‘ by default, Fixer looks for `*.php` files excluding `./vendor/` - here, you can groom this config + ->setFinder( + (new Finder()) + // πŸ’‘ root folder to check + ->in([__DIR__ . '/src', __DIR__ . '/tests', __DIR__ . '/demo']) + // πŸ’‘ additional files, eg bin entry file + // ->append([__DIR__.'/bin-entry-file']) + // πŸ’‘ folders to exclude, if any + // ->exclude([/* ... */]) + // πŸ’‘ path patterns to exclude, if any + // ->notPath([/* ... */]) + // πŸ’‘ extra configs + // ->ignoreDotFiles(false) // true by default in v3, false in v4 or future mode + // ->ignoreVCS(true) // true by default + ) +; diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index ceecd9090..000000000 --- a/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -language: php - -php: - - 5.6 - - 7.0 - - 7.1 - - 7.2 - -sudo: false - -## Cache composer -cache: - directories: - - $HOME/.composer/cache - -before_script: - - travis_retry composer install --no-interaction --prefer-dist - -script: - - vendor/bin/phpunit diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e51a580c..acc75d1d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,43 +1,62 @@ # Changelog +2025-11-25 + + - Add Antigravity editor link template + +2025-06-26 + + - Add Windsurf editor link template + +2023-09-08 + + - Add SymfonyMailCollector (#554) + +2021-12-21 + + - Add support for `symfony/var-dumper^6` package + +2019-05 (1.10.3) + +- New implementation for `dump()` in SwiftLogCollector (#265) 2014-12 (1.10.2): - Use Symfony VarDumper instead of kintLite as DataFormatter (#179) - Better resize handling (#185) - + 2014-11 (1.10.1): - Add disableVendor() option to JavascriptRenderer to remove a specific vendor (#182) - Fix macros in Twig Collector (#167, #177) - - Update Font Awesome to 4.2.0 + - Update Font Awesome to 4.2.0 2014-10 (1.10.0): - Add bindToXHR() as alternative to jQuery ajax handling. - Extend TemplateWidget to show more information + parameters - Extend TimeDataCollector to show parameters + collector source - + 2014-08: - Replace image files with inline data in css - Tweak OpenHandler display - + 2014-06-10: - Add LocalizationCollector - + 2014-03-29: - Add hasMeasure() method to TimeDataCollector - + 2014-03-25: - Duplicate SQL detection - + 2014-03-23: - Add syntax highlighting - + 2014-03-22: - added AssetProvider interface diff --git a/README.md b/README.md index af5de688b..ae992f07f 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,68 @@ # PHP Debug Bar -[![Latest Stable Version](https://poser.pugx.org/maximebf/debugbar/v/stable.png)](https://packagist.org/packages/maximebf/debugbar) [![Total Downloads](https://poser.pugx.org/maximebf/debugbar/downloads.svg)](https://packagist.org/packages/maximebf/debugbar) [![License](https://poser.pugx.org/maximebf/debugbar/license.svg)](https://packagist.org/packages/maximebf/debugbar) [![Build Status](https://travis-ci.org/maximebf/php-debugbar.png?branch=master)](https://travis-ci.org/maximebf/php-debugbar) +[![Latest Stable Version](https://img.shields.io/packagist/v/php-debugbar/php-debugbar?label=Stable)](https://packagist.org/packages/php-debugbar/php-debugbar) [![Total Downloads](https://img.shields.io/packagist/dt/maximebf/debugbar?label=Downloads)](https://packagist.org/packages/php-debugbar/php-debugbar) [![License](https://img.shields.io/badge/Licence-MIT-4d9283)](https://packagist.org/packages/php-debugbar/php-debugbar) [![Tests](https://github.com/php-debugbar/php-debugbar/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/php-debugbar/php-debugbar/actions/workflows/run-tests.yml) Displays a debug bar in the browser with information from php. No more `var_dump()` in your code! -![Screenshot](https://raw.github.com/maximebf/php-debugbar/master/docs/screenshot.png) +> **Note: Debug Bar is for development use only. Never install this on websites that are publicly accessible.** + +> Debugbar has had significant updates in 3.x (January 2026). +> See the [Release Notes](https://php-debugbar.com/docs/release-notes/) for more information and breaking changes. + +![Screenshot](https://raw.github.com/php-debugbar/php-debugbar/master/docs/screenshot.png) **Features:** - - Generic debug bar + - Generic Debug Bar for PHP projects - Easy to integrate with any project - Clean, fast and easy to use interface - Handles AJAX request - Includes generic data collectors and collectors for well known libraries - - The client side bar is 100% coded in javascript + - The client side bar is 100% coded in plain javascript - Easily create your own collectors and their associated view in the bar - Save and re-open previous requests - - [Very well documented](http://phpdebugbar.com/docs) + - [Very well documented](http://php-debugbar.com/docs/) Includes collectors for: - + - Messages + - Config + - Time + - Memory + - Exceptions + - PHP Info + - Request Data + - Templates + - Object Count - [PDO](http://php.net/manual/en/book.pdo.php) - - [CacheCache](http://maximebf.github.io/CacheCache/) - - [Doctrine](http://doctrine-project.org) - [Monolog](https://github.com/Seldaek/monolog) - - [Propel](http://propelorm.org/) - - [Slim](http://slimframework.com) - - [Swift Mailer](http://swiftmailer.org/) - - [Twig](http://twig.sensiolabs.org/) + - [Symfony Mailer](https://symfony.com/doc/current/mailer.html) + - [Symfony HttpFoundation](https://symfony.com/doc/current/components/http_foundation.html) -Checkout the [demo](https://github.com/maximebf/php-debugbar/tree/master/demo) for -examples and [phpdebugbar.com](http://phpdebugbar.com) for a live example. +Checkout the [demo](https://github.com/php-debugbar/php-debugbar/tree/master/demo) for +examples and [php-debugbar.com](http://php-debugbar.com) for a live example. + +Additional collectors are available here: + - [Twig](https://github.com/php-debugbar/twig-bridge) + - [Doctrine](https://github.com/php-debugbar/doctrine-bridge) + - [Monolog](https://github.com/php-debugbar/monolog-bridge) + - [Symfony](https://github.com/php-debugbar/symfony-bridge) Integrations with other frameworks: - [Laravel](https://github.com/barryvdh/laravel-debugbar) - - [Atomik](http://atomikframework.com/docs/error-log-debug.html#debug-bar) - - [XOOPS](http://xoops.org/modules/news/article.php?storyid=6538) - [Zend Framework 2](https://github.com/snapshotpl/ZfSnapPhpDebugBar) - [Phalcon](https://github.com/snowair/phalcon-debugbar) - [SilverStripe](https://github.com/lekoala/silverstripe-debugbar) - [Grav CMS](https://getgrav.org) - [TYPO3](https://github.com/Konafets/typo3_debugbar) - - Framework-agnostic middleware and PSR-7 with [php-middleware/phpdebugbar](https://github.com/php-middleware/phpdebugbar). + - [Joomla](https://github.com/joomla/joomla-cms/blob/4.0-dev/plugins/system/debug/debug.php) + - [Drupal](https://www.drupal.org/project/debugbar) + - [October CMS](https://github.com/rainlab/debugbar-plugin) + - [Winter CMS](https://packagist.org/packages/winter/wn-debugbar-plugin) + - [ZubZet Framework (From v1.2.0+)](https://zubzet.com/) + - Framework-agnostic middleware and PSR-7 with [php-middleware/phpdebugbar](https://github.com/php-middleware/phpdebugbar) + - [Dotkernel Frontend Application](https://github.com/dotkernel/dot-debugbar) *(drop me a message or submit a PR to add your DebugBar related project here)* @@ -52,7 +71,9 @@ Integrations with other frameworks: The best way to install DebugBar is using [Composer](http://getcomposer.org) with the following command: -```composer require maximebf/debugbar``` +```bash +composer require --dev php-debugbar/php-debugbar +``` ## Quick start @@ -100,4 +121,33 @@ $debugbar["messages"]->addMessage("hello world!"); - `TimeDataCollector` (*time*) - `ExceptionsCollector` (*exceptions*) -Learn more about DebugBar in the [docs](http://phpdebugbar.com/docs). +Learn more about DebugBar in the [docs](http://php-debugbar.com/docs/). + +## Demo + +To run the demo, clone this repository and start the Built-In PHP webserver from the demo folder: + +``` +composer run demo +``` + +Then visit http://localhost:8000/ + +## Testing + +To test, run `php vendor/bin/phpunit`. +To debug Browser tests, you can run `PANTHER_NO_HEADLESS=1 vendor/bin/phpunit --debug`. Run `vendor/bin/bdi detect drivers` to download the latest drivers. + +## Contributing +When contributing to the JavaScript codebase: + +1. Run `npm run lint` and `npm run build` before committing +2. Fix any errors (warnings are acceptable but should be minimized) +3. Use `npm run lint:fix` for automatic fixes where possible +4. Follow the ES6+ patterns established in the codebase + +When contributing to the PHP codebase: + +1. Run `composer check-style` and `composer analyse` before committing. +2. Make sure the tests pass (see above) +3. Verify that the demo works correctly (`php -S localhost:8000 demo/`) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..9426c818b --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,3 @@ +# Security Policy + +If you find a security issue, please report it to barryvdh [at] gmail [dot] com. \ No newline at end of file diff --git a/UPGRADE.md b/UPGRADE.md new file mode 100644 index 000000000..43a534add --- /dev/null +++ b/UPGRADE.md @@ -0,0 +1,42 @@ +# Upgrade Guide + +## 2.x to 3.x + +### Removed Bridge collectors + +Version 3.x removes all bridge collectors (Twig, Doctrine, Propel, CacheCache and Slim. +Doctrine can be installed with: https://github.com/php-debugbar/doctrine-bridge +Twig Bridge can be installed with: https://github.com/php-debugbar/twig-bridge +Monolog Bridge can be installed with: https://github.com/php-debugbar/monolog-bridge +Symfony Bridge can be installed with: https://github.com/php-debugbar/symfony-bridge + +This makes it easier to updates these collectors for specific versions. Other bridges have not been ported, but community contributions are welcome. + +### Changes to widgets + - jQuery is removed, and widgets are now Javascript classes. Custom widgets should be updated. + - FontAwesome is removed, and replaced by SVG icons from Tabler, included in CSS. Only the icons used by the default widgets are included, so packages extending the debugbar should add their own icons. + - Typehints are added to all widgets, so you might need to update your widgets. + - Widgets are rendered when opening a tab, not when loading the page. + +### Changes to DataCollectors +- TimeDataCollector is removed from the constructors, but a setTimeDataCollector method is added. +- useHtmlVarDumper is removed. The HtmlDataFormatter is used by default. To use plain-text, the the default formatter to DataFormatter. + +### Remove obsolete methods + - Removed get/setBindAjaxHandlerToJquery (Use bind to fetch/xhr instead) + - Removed Assetic collection (use getAssets() directly if needed) + - Removed RequireJS support + - Removed captureVar and renderCapturedVar from DebugBarVarDumper + +### Breaking changes to methods/interfaces +- All code is typehinted, so you might need to update your code for custom collectors. +- getAssets() removed the `$type` parameter and always returns all assets. +- OpenHandler requires the `op` parameter to be always set. +- The DataFormatterInterface has a 2nd 'deep' parameter to formatVar. +- The StorageInterface has a new 'prune' method + +### Other changes + - Storage now uses json instead of serialize, so old data cannot be read. + - StorageInterface now has a prune() method + - ReuqestIdGenerator now returns a Lexicographically Sortable string. Other generators should also do this, to improve storage performance. + - PDO now quotes using the PDO connection when available. The quotation char is now always `'`. Methods have moved to the QueryFormatter instead of TracedStatement. diff --git a/bower.json b/bower.json deleted file mode 100644 index 821e1d3bc..000000000 --- a/bower.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "maximebf/php-debugbar", - "dependencies": { - "jquery": "^3.3", - "font-awesome": "^4.7" - } -} diff --git a/build/build-assets.php b/build/build-assets.php new file mode 100644 index 000000000..da7074a39 --- /dev/null +++ b/build/build-assets.php @@ -0,0 +1,21 @@ +getJavascriptRenderer(); + +$assets = $debugbarRenderer->getDistIncludedAssets(); +$debugbarRenderer->dumpAssets(files: $assets['css'], targetFilename: __DIR__ . '/../resources/dist/debugbar.css'); +$debugbarRenderer->dumpAssets(files: $assets['js'], targetFilename: __DIR__ . '/../resources/dist/debugbar.js'); diff --git a/build/build-docs.php b/build/build-docs.php new file mode 100644 index 000000000..bc2d130e9 --- /dev/null +++ b/build/build-docs.php @@ -0,0 +1,135 @@ +', ''); +// Remove first style/script +$generatedScripts = explode('', $generatedScripts, 2)[1]; + +// Read the main.html template +$templatePath = __DIR__ . '/../docs/overrides/main.html'; +$template = file_get_contents($templatePath); + +// Replace the scripts block content between specific markers +$startMarker = ""; +$endMarker = ""; + +// Find the positions +$startPos = strpos($template, $startMarker); +$endPos = strpos($template, $endMarker); + +if ($startPos !== false && $endPos !== false) { + $startPos += strlen($startMarker); + + // Replace the content between markers + $newTemplate = substr($template, 0, $startPos) + . "\n{% raw %}\n" . $generatedScripts . "\n{% endraw %}\n" + . substr($template, $endPos); + + // Write back to the file + file_put_contents($templatePath, $newTemplate); + + echo "βœ“ Updated docs/overrides/main.html with generated debugbar scripts\n"; +} else { + echo "βœ— Could not find script markers in main.html\n"; + exit(1); +} + +// Copy dist folder to docs/assets/dist +$distSource = __DIR__ . '/../resources/dist'; +$distDest = __DIR__ . '/../docs/assets/dist'; + +if (!is_dir($distSource)) { + echo "βœ— dist folder not found at $distSource\n"; + exit(1); +} + +// Create docs/assets directory if it doesn't exist +if (!is_dir(__DIR__ . '/../docs/assets')) { + mkdir(__DIR__ . '/../docs/assets', 0755, true); +} + +// Remove existing dist folder if it exists +if (is_dir($distDest)) { + deleteDirectory($distDest); +} + +// Copy dist folder +copyDirectory($distSource, $distDest); + +echo "βœ“ Copied dist folder to docs/assets/dist\n"; + +// Update mkdocs.yml with current timestamp +$mkdocsPath = __DIR__ . '/../mkdocs.yml'; +$mkdocsContent = file_get_contents($mkdocsPath); +$timestamp = time(); + +$mkdocsContent = preg_replace( + '/debugbar\.min\.css\?v=\d+/', + 'debugbar.min.css?v=' . $timestamp, + $mkdocsContent +); + +$mkdocsContent = preg_replace( + '/debugbar\.min\.js\?v=\d+/', + 'debugbar.min.js?v=' . $timestamp, + $mkdocsContent +); + +file_put_contents($mkdocsPath, $mkdocsContent); + +echo "βœ“ Updated mkdocs.yml with timestamp: $timestamp\n"; + +function copyDirectory($source, $dest) { + mkdir($dest, 0755, true); + + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::SELF_FIRST + ); + + foreach ($iterator as $item) { + $destPath = $dest . DIRECTORY_SEPARATOR . $iterator->getSubPathname(); + if ($item->isDir()) { + mkdir($destPath, 0755, true); + } else { + copy($item, $destPath); + } + } +} + +function deleteDirectory($dir) { + if (!is_dir($dir)) { + return; + } + + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::CHILD_FIRST + ); + + foreach ($iterator as $item) { + if ($item->isDir()) { + rmdir($item); + } else { + unlink($item); + } + } + + rmdir($dir); +} diff --git a/build/build-hljs.js b/build/build-hljs.js new file mode 100644 index 000000000..a68ed9e6b --- /dev/null +++ b/build/build-hljs.js @@ -0,0 +1,39 @@ +// Build custom highlight.js bundle with specific languages +import hljs from 'highlight.js/lib/core'; +import php from 'highlight.js/lib/languages/php'; +import phpTemplate from 'highlight.js/lib/languages/php-template'; +import javascript from 'highlight.js/lib/languages/javascript'; +import sql from 'highlight.js/lib/languages/sql'; +import shell from 'highlight.js/lib/languages/shell'; +import css from 'highlight.js/lib/languages/css'; +import plaintext from 'highlight.js/lib/languages/plaintext'; +import xml from 'highlight.js/lib/languages/xml'; +import yaml from 'highlight.js/lib/languages/yaml'; + +hljs.registerLanguage('php', php); +hljs.registerLanguage('php-template', phpTemplate); +hljs.registerLanguage('javascript', javascript); +hljs.registerLanguage('sql', sql); +hljs.registerLanguage('shell', shell); +hljs.registerLanguage('css', css); +hljs.registerLanguage('plaintext', plaintext); +hljs.registerLanguage('xml', xml); +hljs.registerLanguage('yaml', yaml); + + +const sqlLang = hljs.getLanguage('sql'); + +//Extend sql keywords +sqlLang.keywords.keyword = Array.from(new Set([ + ...sqlLang.keywords.keyword, + 'if','ifnull','limit','aes_decrypt','aes_encrypt','ascii','bin','bit_and','bit_count','bit_length','bit_or','bit_xor','coercibility','concat','group_concat','concat_ws','connection_id','conv','curdate','curtime','database','date_add','date_format','date_sub','dayname','dayofmonth','dayofweek','dayofyear','elt','export_set','field','find_in_set','format','from_base64','from_days','from_unixtime','get_lock','greatest','hex','ifnull','inet_aton','inet_ntoa','instr','isnull','last_insert_id','least','lpad','ltrim','make_set','md5','monthname','now','oct','ord','password','quote','release_lock','repeat','replace','reverse','rpad','rtrim','sec_to_time','sha1','sha2','sleep','soundex','space','straight_join','strcmp','str_to_date','substr','sysdate','time_format','time_to_sec','to_base64','to_days','unix_timestamp','updatexml','version','week','weekday','yearweek','length','substring_index','json_unquote','json_extract','json_contains' +])); +sqlLang.keywords.type = Array.from(new Set([ + ...sqlLang.keywords.type, + 'longtext', +])); + +// Configure to use custom CSS class prefix +hljs.configure({ classPrefix: 'phpdebugbar-hljs-' }); + +globalThis.phpdebugbar_hljs = hljs.default; diff --git a/build/build-icons.js b/build/build-icons.js new file mode 100644 index 000000000..90aac6e1c --- /dev/null +++ b/build/build-icons.js @@ -0,0 +1,128 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// Tabler icons to include +const icons = [ + // Data collector icons + 'adjustments', + 'adjustments-horizontal', + 'arrow-right', + 'arrows-left-right', + 'bolt', + 'bookmark', + 'box', + 'briefcase', + 'bug', + 'calendar', + 'chart-infographic', + 'clock', + 'code', + 'database', + 'file-code', + 'flag', + 'history', + 'inbox', + 'leaf', + 'list', + 'logs', + 'mobiledata', + 'search', + 'server-cog', + 'share-3', + 'tags', + 'x', + + // UI control icons + 'arrows-maximize', + 'arrows-minimize', + 'chevron-down', + 'chevron-up', + 'folder-open', + 'brand-php', + 'refresh', + + // Widget-specific icons + 'cpu', // memory/performance + 'table', // row count + 'link', // statement ID + 'copy', // copy to clipboard + 'circle-check', // copy success confirmation + 'external-link', // editor link +]; + +const svgDir = path.join(__dirname, '../node_modules/@tabler/icons/icons/outline'); +const outputFile = path.join(__dirname, '../resources/icons.css'); +const defaultStrokeWidth = 2; // Tabler default stroke width +const brandStrokeWidth = 1.5; // For brands, use 1.5 + +function svgToDataUri(svgContent, strokeWidth) { + // Remove XML comments + svgContent = svgContent.replace(//g, ''); + + // Ensure consistent stroke-width + svgContent = svgContent.replace(/stroke-width="[^"]*"/g, `stroke-width="${strokeWidth}"`); + + // Remove unnecessary attributes for mask usage (but not stroke-width!) + svgContent = svgContent.replace(/\s+class="[^"]*"/g, ''); + svgContent = svgContent.replace(/\s+width="[^"]*"/g, ''); + svgContent = svgContent.replace(/\s+height="[^"]*"/g, ''); + + // Minify: remove newlines and extra spaces + svgContent = svgContent.replace(/\s+/g, ' ').trim(); + + // URL encode for data URI + const encoded = encodeURIComponent(svgContent) + .replace(/'/g, '%27') + .replace(/"/g, '%22'); + return `data:image/svg+xml,${encoded}`; +} + +function generateIconsCSS() { + let css = `/* Generated file - do not edit manually */\n/* Generated from Tabler Icons */\n\n`; + + // First, define all CSS variables with the SVG data URIs + css += `:root {\n`; + for (const icon of icons) { + const svgPath = path.join(svgDir, `${icon}.svg`); + + if (!fs.existsSync(svgPath)) { + console.warn(`Warning: SVG file not found for icon "${icon}" at ${svgPath}`); + continue; + } + + const svgContent = fs.readFileSync(svgPath, 'utf8'); + let strokeWidth = icon.indexOf('brand-') === 0 ? brandStrokeWidth : defaultStrokeWidth + const dataUri = svgToDataUri(svgContent, strokeWidth); + + css += ` --debugbar-icon-${icon}: url('${dataUri}');\n`; + } + css += `}\n\n`; + + // Then, apply the variables to the icon classes + for (const icon of icons) { + const svgPath = path.join(svgDir, `${icon}.svg`); + + if (!fs.existsSync(svgPath)) { + continue; + } + + css += `.phpdebugbar-icon-${icon}::before {\n`; + css += ` -webkit-mask-image: var(--debugbar-icon-${icon});\n`; + css += ` mask-image: var(--debugbar-icon-${icon});\n`; + css += `}\n\n`; + } + + fs.writeFileSync(outputFile, css, 'utf8'); + console.log(`βœ“ Generated ${outputFile} with ${icons.length} icons`); +} + +try { + generateIconsCSS(); +} catch (error) { + console.error('Error generating icons:', error); + process.exit(1); +} diff --git a/build/build-minify.js b/build/build-minify.js new file mode 100644 index 000000000..936618cad --- /dev/null +++ b/build/build-minify.js @@ -0,0 +1,72 @@ +// Build minified debugbar.min.js and debugbar.min.css +import * as esbuild from 'esbuild'; +import * as fs from 'fs'; +import * as path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const distDir = path.join(__dirname, '../resources/dist'); + +// Minify JavaScript files +async function minifyJS() { + console.log('Building debugbar.min.js...'); + + const tempFile = path.join(distDir, 'debugbar.js'); + + try { + // Minify using esbuild + await esbuild.build({ + entryPoints: [path.join(distDir, 'debugbar.js')], + outfile: path.join(distDir, 'debugbar.min.js'), + minify: true, + target: 'es2015', + format: 'iife', + bundle: false + }); + + console.log('βœ“ debugbar.min.js created successfully'); + } finally { + // Clean up temp file + fs.unlinkSync(tempFile); + } +} + +// Minify CSS files +async function minifyCSS() { + console.log('Building debugbar.min.css...'); + + const tempFile = path.join(distDir, 'debugbar.css'); + + try { + // Minify using esbuild + await esbuild.build({ + entryPoints: [tempFile], + outfile: path.join(distDir, 'debugbar.min.css'), + minify: true, + loader: { + '.css': 'css' + } + }); + + console.log('βœ“ debugbar.min.css created successfully'); + } finally { + // Clean up temp file + fs.unlinkSync(tempFile); + } +} + +// Run both builds +async function build() { + try { + await minifyJS(); + await minifyCSS(); + console.log('\nβœ“ All builds completed successfully!'); + } catch (error) { + console.error('Build failed:', error); + process.exit(1); + } +} + +build(); diff --git a/build/build-sqlformatter.js b/build/build-sqlformatter.js new file mode 100644 index 000000000..fcbd07278 --- /dev/null +++ b/build/build-sqlformatter.js @@ -0,0 +1,4 @@ +// Build sql-formatter bundle +import sqlFormatter from '@sqltools/formatter'; + +globalThis.phpdebugbar_sqlformatter = sqlFormatter.default; diff --git a/build/namespaceFontAwesome.php b/build/namespaceFontAwesome.php deleted file mode 100644 index ed252204d..000000000 --- a/build/namespaceFontAwesome.php +++ /dev/null @@ -1,19 +0,0 @@ -=5.6", - "psr/log": "^1.0", - "symfony/var-dumper": "^2.6|^3|^4" + "php": "^8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6|^7|^8" + }, + "suggest": { + "php-debugbar/doctrine-bridge": "To integrate Doctrine with php-debugbar.", + "php-debugbar/monolog-bridge": "To integrate Monolog with php-debugbar.", + "php-debugbar/symfony-bridge": "To integrate Symfony with php-debugbar.", + "php-debugbar/twig-bridge": "To integrate Twig with php-debugbar." + }, + "replace": { + "maximebf/debugbar": "self.version" }, "require-dev": { - "phpunit/phpunit": "^5" + "dbrekelmans/bdi": "^1.4", + "friendsofphp/php-cs-fixer": "^3.92", + "monolog/monolog": "^3.9", + "php-debugbar/doctrine-bridge": "^3@dev", + "php-debugbar/monolog-bridge": "^1@dev", + "php-debugbar/symfony-bridge": "^1@dev", + "php-debugbar/twig-bridge": "^2@dev", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^10", + "predis/predis": "^3.3", + "shipmonk/phpstan-rules": "^4.3", + "symfony/browser-kit": "^6.4|7.0", + "symfony/dom-crawler": "^6.4|^7", + "symfony/event-dispatcher": "^5.4|^6.4|^7.3|^8.0", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8.0", + "symfony/mailer": "^5.4|^6.4|^7.3|^8.0", + "symfony/panther": "^1|^2.1", + "twig/twig": "^3.11.2" }, "autoload": { "psr-4": { - "DebugBar\\": "src/DebugBar/" + "DebugBar\\": "src/" } }, - "suggest": { - "kriswallsmith/assetic": "The best way to manage assets", - "monolog/monolog": "Log using Monolog", - "predis/predis": "Redis storage" + "autoload-dev": { + "psr-4": { + "DebugBar\\Tests\\": "tests/Tests" + } + }, + "scripts": { + "analyse": "@php vendor/bin/phpstan analyse --memory-limit=1G", + "demo": [ + "Composer\\Config::disableProcessTimeout", + "@php -t demo -S localhost:8000" + ], + "unit-test": "@php vendor/bin/phpunit --testsuite=Unit", + "browser-test": "@php vendor/bin/phpunit --testsuite=Browser", + "check-style": "vendor/bin/php-cs-fixer check -v --diff", + "fix-style": "vendor/bin/php-cs-fixer fix -v --diff", + "browser-debug": [ + "@putenv PANTHER_NO_HEADLESS=1", + "@php vendor/bin/phpunit --testsuite=Browser --debug" + ] }, "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "3.8-dev" } + }, + "config": { + "sort-packages": true } } diff --git a/demo/ajax_exception.php b/demo/ajax_exception.php index 31b623a6d..b8c1543e2 100644 --- a/demo/ajax_exception.php +++ b/demo/ajax_exception.php @@ -2,14 +2,22 @@ include 'bootstrap.php'; -try { +function doSomething() +{ throw new Exception('Something failed!'); +} +try { + doSomething(); } catch (Exception $e) { $debugbar['exceptions']->addException($e); } +try { + doSomething(); +} catch (Exception $e) { + $debugbar['exceptions']->addException($e); +} +http_response_code(500); +$debugbar->sendDataInHeaders(true); ?> error from AJAX -render(false); -?> diff --git a/demo/ajax_render.php b/demo/ajax_render.php new file mode 100644 index 000000000..4b029feee --- /dev/null +++ b/demo/ajax_render.php @@ -0,0 +1,12 @@ +addMessage('hello from rendered ajax'); + +?> +hello from AJAX + +getJavascriptRenderer()->render(false); ?> diff --git a/demo/ajax_stack.php b/demo/ajax_stack.php new file mode 100644 index 000000000..01d734a29 --- /dev/null +++ b/demo/ajax_stack.php @@ -0,0 +1,15 @@ +addMessage('Hello from redirected AJAX'); + +$debugbar->stackData(); + +header('Location: ajax.php'); diff --git a/demo/assets.php b/demo/assets.php new file mode 100644 index 000000000..4867e40db --- /dev/null +++ b/demo/assets.php @@ -0,0 +1,14 @@ +handle($_GET); diff --git a/demo/bootstrap.php b/demo/bootstrap.php index 3af47052a..c0947aed2 100644 --- a/demo/bootstrap.php +++ b/demo/bootstrap.php @@ -1,39 +1,141 @@ addCollector(new PdoCollector()); +$debugbar->addCollector(new TemplateCollector()); +$debugbar->addCollector(new HttpCollector()); +$debugbar->addCollector(new SymfonyMailCollector()); + +// Apply TimeCollector to available collectors +foreach ($debugbar->getCollectors() as $collector) { + if (method_exists($collector, 'setTimeDataCollector')) { + $collector->setTimeDataCollector($timeCollector); + } +} + $debugbarRenderer = $debugbar->getJavascriptRenderer() - ->setBaseUrl('../src/DebugBar/Resources') - ->setEnableJqueryNoConflict(false); + ->setAssetHandlerUrl('assets.php') + ->setAjaxHandlerEnableTab(true) + ->setHideEmptyTabs(true) + ->setUseDistFiles(false) + ->setIncludeVendors(true) + ->setCspNonce('demo') + ->setTheme($_GET['theme'] ?? 'auto'); // // create a writable profiles folder in the demo directory to uncomment the following lines // -// $debugbar->setStorage(new DebugBar\Storage\FileStorage(__DIR__ . '/profiles')); +$debugbar->setStorage(new DebugBar\Storage\FileStorage(__DIR__ . '/profiles')); + // $debugbar->setStorage(new DebugBar\Storage\RedisStorage(new Predis\Client())); -// $debugbarRenderer->setOpenHandlerUrl('open.php'); -function render_demo_page(Closure $callback = null) +//$debugbar->setStorage($storage = new SQliteStorage( +// filepath: __DIR__ . '/../debugbar.sqlite', +// tableName: 'phpdebugbar', +//)); + +$debugbarRenderer->setOpenHandlerUrl('open.php'); + +// configs +if (isset($_GET['formatter'])) { + $formatter = $_GET['formatter']; + $_SESSION['formatter'] = $formatter; +} + +$formatter = $_SESSION['formatter'] ?? 'json'; + +$dataFormatter = match ($formatter) { + 'json' => new \DebugBar\DataFormatter\JsonDataFormatter(), + 'html' => new \DebugBar\DataFormatter\HtmlDataFormatter(), + 'base' => new \DebugBar\DataFormatter\DataFormatter(), +}; +\DebugBar\DataCollector\DataCollector::setDefaultDataFormatter($dataFormatter); +// $debugbar->setEditor('vscode'); +// $debugbar->setEditor('vscode'); +// $debugbar->setRemoteReplacements(['/remote/demo/' => '/home/demo/']); +// $debugbar['messages']->collectFileTrace(); +// $debugbar['time']->showMemoryUsage(); + +function render_demo_page(?Closure $callback = null) { global $debugbarRenderer; -?> + ?> - renderHead() ?> - @@ -41,10 +143,15 @@ function render_demo_page(Closure $callback = null)

DebugBar Demo

DebugBar at the bottom of the page

- + + render(); - ?> + echo $debugbarRenderer->renderHead(); + echo $debugbarRenderer->render(); + ?> + setBaseUrl('../../../src/DebugBar/Resources'); - -$cache = new CacheCache\Cache(new CacheCache\Backends\Memory()); - -$debugbar->addCollector(new DebugBar\Bridge\CacheCacheCollector($cache)); - -$cache->set('foo', 'bar'); -$cache->get('foo'); -$cache->get('bar'); - -render_demo_page(); diff --git a/demo/bridge/doctrine/bootstrap.php b/demo/bridge/doctrine/bootstrap.php deleted file mode 100644 index 17f7ce6f2..000000000 --- a/demo/bridge/doctrine/bootstrap.php +++ /dev/null @@ -1,22 +0,0 @@ - 'pdo_sqlite', - 'path' => __DIR__ . '/db.sqlite', -); - -// obtaining the entity manager -$entityManager = EntityManager::create($conn, $config); diff --git a/demo/bridge/doctrine/build.sh b/demo/bridge/doctrine/build.sh deleted file mode 100755 index d8932a06d..000000000 --- a/demo/bridge/doctrine/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -php vendor/bin/doctrine orm:schema-tool:update --force diff --git a/demo/bridge/doctrine/cli-config.php b/demo/bridge/doctrine/cli-config.php deleted file mode 100644 index 546dba5cb..000000000 --- a/demo/bridge/doctrine/cli-config.php +++ /dev/null @@ -1,9 +0,0 @@ - new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()), - 'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em) -)); diff --git a/demo/bridge/doctrine/composer.json b/demo/bridge/doctrine/composer.json deleted file mode 100644 index 1e9beade4..000000000 --- a/demo/bridge/doctrine/composer.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "require": { - "doctrine/orm": "2.*", - "symfony/yaml": "2.*" - }, - "autoload": { - "psr-0": {"": "src/"} - } -} diff --git a/demo/bridge/doctrine/index.php b/demo/bridge/doctrine/index.php deleted file mode 100644 index 183d9ae46..000000000 --- a/demo/bridge/doctrine/index.php +++ /dev/null @@ -1,18 +0,0 @@ -setBaseUrl('../../../src/DebugBar/Resources'); - -$debugStack = new Doctrine\DBAL\Logging\DebugStack(); -$entityManager->getConnection()->getConfiguration()->setSQLLogger($debugStack); -$debugbar->addCollector(new DebugBar\Bridge\DoctrineCollector($debugStack)); - -$product = new Demo\Product(); -$product->setName("foobar"); - -$entityManager->persist($product); -$entityManager->flush(); - -render_demo_page(); diff --git a/demo/bridge/doctrine/src/Demo/Product.php b/demo/bridge/doctrine/src/Demo/Product.php deleted file mode 100644 index c7d8f08d5..000000000 --- a/demo/bridge/doctrine/src/Demo/Product.php +++ /dev/null @@ -1,29 +0,0 @@ -id; - } - - public function getName() - { - return $this->name; - } - - public function setName($name) - { - $this->name = $name; - } -} diff --git a/demo/bridge/monolog/composer.json b/demo/bridge/monolog/composer.json deleted file mode 100644 index e7e55ef45..000000000 --- a/demo/bridge/monolog/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "require": { - "monolog/monolog": "*" - } -} diff --git a/demo/bridge/monolog/index.php b/demo/bridge/monolog/index.php deleted file mode 100644 index 1fec6b09a..000000000 --- a/demo/bridge/monolog/index.php +++ /dev/null @@ -1,14 +0,0 @@ -setBaseUrl('../../../src/DebugBar/Resources'); - -$logger = new Monolog\Logger('demo'); - -$debugbar->addCollector(new DebugBar\Bridge\MonologCollector($logger)); - -$logger->info('hello world'); - -render_demo_page(); diff --git a/demo/bridge/propel/build.properties b/demo/bridge/propel/build.properties deleted file mode 100644 index 3b346fa07..000000000 --- a/demo/bridge/propel/build.properties +++ /dev/null @@ -1,7 +0,0 @@ -# Database driver -propel.database = sqlite - -# Project name -propel.project = demo - -propel.database.url = sqlite:demo.db diff --git a/demo/bridge/propel/build.sh b/demo/bridge/propel/build.sh deleted file mode 100755 index 39489ca34..000000000 --- a/demo/bridge/propel/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -vendor/bin/propel-gen -sqlite3 demo.db < build/sql/schema.sql diff --git a/demo/bridge/propel/composer.json b/demo/bridge/propel/composer.json deleted file mode 100644 index 7095dd2a1..000000000 --- a/demo/bridge/propel/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "require": { - "propel/propel1": "*" - } -} diff --git a/demo/bridge/propel/index.php b/demo/bridge/propel/index.php deleted file mode 100644 index e0ee6aff6..000000000 --- a/demo/bridge/propel/index.php +++ /dev/null @@ -1,23 +0,0 @@ -setBaseUrl('../../../src/DebugBar/Resources'); - -use DebugBar\Bridge\PropelCollector; - -$debugbar->addCollector(new PropelCollector()); - -Propel::init('build/conf/demo-conf.php'); -set_include_path("build/classes" . PATH_SEPARATOR . get_include_path()); - -PropelCollector::enablePropelProfiling(); - -$user = new User(); -$user->setName('foo'); -$user->save(); - -$firstUser = UserQuery::create()->findPK(1); - -render_demo_page(); diff --git a/demo/bridge/propel/runtime-conf.xml b/demo/bridge/propel/runtime-conf.xml deleted file mode 100644 index 671d05192..000000000 --- a/demo/bridge/propel/runtime-conf.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - sqlite - - DebugPDO - sqlite:demo.db - - - - - diff --git a/demo/bridge/propel/schema.xml b/demo/bridge/propel/schema.xml deleted file mode 100644 index fa42ffb84..000000000 --- a/demo/bridge/propel/schema.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - -
-
diff --git a/demo/bridge/slim/composer.json b/demo/bridge/slim/composer.json deleted file mode 100644 index 77a6eea07..000000000 --- a/demo/bridge/slim/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "require": { - "slim/slim": "*" - } -} diff --git a/demo/bridge/slim/index.php b/demo/bridge/slim/index.php deleted file mode 100644 index 11f409fd7..000000000 --- a/demo/bridge/slim/index.php +++ /dev/null @@ -1,16 +0,0 @@ -setBaseUrl('../../../src/DebugBar/Resources'); - -$app = new \Slim\Slim(); -$app->get('/', function () use ($app) { - $app->getLog()->info('hello world'); - render_demo_page(); -}); - -$debugbar->addCollector(new DebugBar\Bridge\SlimCollector($app)); - -$app->run(); diff --git a/demo/bridge/swiftmailer/composer.json b/demo/bridge/swiftmailer/composer.json deleted file mode 100644 index 33f0b390e..000000000 --- a/demo/bridge/swiftmailer/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "require": { - "swiftmailer/swiftmailer": "*" - } -} diff --git a/demo/bridge/swiftmailer/index.php b/demo/bridge/swiftmailer/index.php deleted file mode 100644 index 8dc78ec41..000000000 --- a/demo/bridge/swiftmailer/index.php +++ /dev/null @@ -1,24 +0,0 @@ -setBaseUrl('../../../src/DebugBar/Resources'); - -use DebugBar\Bridge\SwiftMailer\SwiftLogCollector; -use DebugBar\Bridge\SwiftMailer\SwiftMailCollector; - -$mailer = Swift_Mailer::newInstance(Swift_NullTransport::newInstance()); - -$debugbar['messages']->aggregate(new SwiftLogCollector($mailer)); -$debugbar->addCollector(new SwiftMailCollector($mailer)); - -$message = Swift_Message::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) - ->setBody('Here is the message itself'); - -$mailer->send($message); - - -render_demo_page(); diff --git a/demo/bridge/twig/composer.json b/demo/bridge/twig/composer.json deleted file mode 100644 index 02dc3a087..000000000 --- a/demo/bridge/twig/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "require": { - "twig/twig": "*" - } -} diff --git a/demo/bridge/twig/foobar.html b/demo/bridge/twig/foobar.html deleted file mode 100644 index 323fae03f..000000000 --- a/demo/bridge/twig/foobar.html +++ /dev/null @@ -1 +0,0 @@ -foobar diff --git a/demo/bridge/twig/hello.html b/demo/bridge/twig/hello.html deleted file mode 100644 index 296b3f631..000000000 --- a/demo/bridge/twig/hello.html +++ /dev/null @@ -1,2 +0,0 @@ -Hello {{ name }} -{% include "foobar.html" %} diff --git a/demo/bridge/twig/index.php b/demo/bridge/twig/index.php deleted file mode 100644 index af483d883..000000000 --- a/demo/bridge/twig/index.php +++ /dev/null @@ -1,15 +0,0 @@ -setBaseUrl('../../../src/DebugBar/Resources'); - -$loader = new Twig_Loader_Filesystem('.'); -$twig = new DebugBar\Bridge\Twig\TraceableTwigEnvironment(new Twig_Environment($loader), $debugbar['time']); - -$debugbar->addCollector(new DebugBar\Bridge\Twig\TwigCollector($twig)); - -render_demo_page(function() use ($twig) { - echo $twig->render('hello.html', array('name' => 'peter pan')); -}); diff --git a/demo/collectors/counter.php b/demo/collectors/counter.php new file mode 100644 index 000000000..445665146 --- /dev/null +++ b/demo/collectors/counter.php @@ -0,0 +1,14 @@ +addCollector(new \DebugBar\DataCollector\ObjectCountCollector()); +$debugbar['counter']->collectCountSummary(true); +$debugbar['counter']->setKeyMap($classEvent); +for ($i = 0; $i <= 20; $i++) { + $debugbar['counter']->countClass($classDemo[rand(0, 2)], 1, $classEvent[rand(0, 2)]); +} diff --git a/demo/collectors/http.php b/demo/collectors/http.php new file mode 100644 index 000000000..bb4faaf81 --- /dev/null +++ b/demo/collectors/http.php @@ -0,0 +1,27 @@ +addRequest( + 'GET', + 'https://packagist.org/packages/php-debugbar/php-debugbar/stats.json', + 200, + 0.00684, + [ + 'response' => $data, + 'headers' => [ + 'Data' => 'Mon, 05 Jan 2026 21:07:36 GMT', + 'Content-Type' => 'application/json', + ], + ] +); diff --git a/demo/collectors/monolog.php b/demo/collectors/monolog.php new file mode 100644 index 000000000..0b8317264 --- /dev/null +++ b/demo/collectors/monolog.php @@ -0,0 +1,11 @@ +addCollector(new DebugBar\Bridge\Monolog\MonologCollector($logger)); + +$logger->info('hello world'); diff --git a/demo/collectors/pdo.php b/demo/collectors/pdo.php new file mode 100644 index 000000000..7b40c9e22 --- /dev/null +++ b/demo/collectors/pdo.php @@ -0,0 +1,39 @@ +addConnection($pdo, 'write'); +$pdoCollector->enableBacktrace(); +$pdoCollector->setDurationBackground(true); +$pdoCollector->setRenderSqlWithParams(); +$pdoCollector->addConnection($pdoRead, 'read'); + +$pdo->exec('create table users (id integer, name varchar, email varchar)'); +$pdoRead->exec('create table users (id integer, name varchar, email varchar)'); + +$stmt = $pdo->prepare('insert into users (name) values (?)'); +$stmt->execute(['foo']); +$stmt->execute(['bar']); + +$users = $pdo->query('select * from users')->fetchAll(); +$stmt = $pdo->prepare('select * from users where name=?'); +$stmt->execute(['foo']); +$stmt->execute(['foo']); +$foo = $stmt->fetch(); + +$stmt = $pdoRead->prepare('select * from users where name=:name and email=:email'); +$stmt->execute(['name' => 'Barry', ':email' => '']); +$foo = $stmt->fetch(); + +$pdo->exec('delete from users'); diff --git a/demo/collectors/symfony_mailer.php b/demo/collectors/symfony_mailer.php new file mode 100644 index 000000000..1fec5b95b --- /dev/null +++ b/demo/collectors/symfony_mailer.php @@ -0,0 +1,50 @@ +showMessageBody(); +$logger = new MessagesCollector('mails'); +$debugbar['messages']->aggregate($logger); + +// Add even listener for SentMessageEvent +$dispatcher = new EventDispatcher(); +$dispatcher->addListener(SentMessageEvent::class, function (SentMessageEvent $event) use ($mailCollector): void { + $mailCollector->addSymfonyMessage($event->getMessage()); +}); + +// Creates NullTransport Mailer for testing +$mailer = new Mailer(new class ($dispatcher, $logger) extends AbstractTransport { + protected function doSend(\Symfony\Component\Mailer\SentMessage $message): void + { + $this->getLogger()->debug('Sending message "' . $message->getOriginalMessage()->getSubject() . '"', ['message' => $message]); + } + public function __toString(): string + { + return 'null://'; + } +}); + +$email = (new Email()) + ->from('john@doe.com') + ->to('you@example.com') + //->cc('cc@example.com') + //->bcc('bcc@example.com') + //->replyTo('fabien@example.com') + //->priority(Email::PRIORITY_HIGH) + ->subject('Wonderful Subject') + ->html('
Here is the message itself
'); + +$mailer->send($email); diff --git a/demo/collectors/templates.php b/demo/collectors/templates.php new file mode 100644 index 000000000..a48fb2fb6 --- /dev/null +++ b/demo/collectors/templates.php @@ -0,0 +1,13 @@ +addTemplate('index.php', ['foo' => 'bar', 'items' => ['a' => 1, 'b' => 2]], 'php', __FILE__); +$templateCollector->addTemplate('docs.php', ['demo' => 'true'], 'php', __FILE__); diff --git a/demo/dump_assets.php b/demo/dump_assets.php deleted file mode 100644 index cee79ad55..000000000 --- a/demo/dump_assets.php +++ /dev/null @@ -1,15 +0,0 @@ -dumpCssAssets(); -} else if ($_GET['type'] == 'js') { - header('content-type', 'text/javascript'); - $debugbarRenderer->dumpJsAssets(); -} diff --git a/demo/iframes/iframe1.php b/demo/iframes/iframe1.php new file mode 100644 index 000000000..182a17574 --- /dev/null +++ b/demo/iframes/iframe1.php @@ -0,0 +1,17 @@ +setAssetHandlerUrl('../assets.php') + ->setOpenHandlerUrl('../open.php'); + +$debugbar['messages']->addMessage('I\'m a IFRAME'); + +render_demo_page(function () { + ?> + +setAssetHandlerUrl('../assets.php') + ->setOpenHandlerUrl('../open.php'); + +$debugbar['messages']->addMessage('I\'m a Deeper Hidden Iframe'); + +render_demo_page(function () { + ?> + +setAssetHandlerUrl('../assets.php') + ->setOpenHandlerUrl('../open.php'); + +$debugbar['messages']->addMessage('Top Page(Main debugbar)'); + +render_demo_page(function () { + ?> + +addMessage('hello'); +// PSR Interpolation +$debugbar['messages']->log('info', 'Hello {name}!', ['name' => 'World', 'location' => 'Earth']); +$debugbar['messages']->addLink('Checkout the documentation on phpdebugbar.com', 'https://phpdebugbar.com'); $debugbar['time']->startMeasure('op1', 'sleep 500'); usleep(300); $debugbar['time']->startMeasure('op2', 'sleep 400'); usleep(200); -$debugbar['time']->stopMeasure('op1'); +$debugbar['time']->stopMeasure('op1', ['foo' => 'bar']); usleep(200); $debugbar['time']->stopMeasure('op2'); -$debugbar['messages']->addMessage('world', 'warning'); -$debugbar['messages']->addMessage(array('toto' => array('titi', 'tata'))); -$debugbar['messages']->addMessage('oups', 'error'); +$debugbar['messages']->addMessage('This is a demo', 'warning'); + +// Object with extra context +$debugbar['messages']->addMessage(['toto' => ['titi']], 'debug', ['foo' => 'bar']); + +$debugbar['messages']->addMessage($debugbar); +$debugbar['messages']->addMessage('welcome!', 'success'); +$debugbar['messages']->addMessage('panic!', 'critical'); +$debugbar["messages"]->addMessage(" +{% block extrahead %} +{{ super() }} + +{% if page.is_homepage %} + +{% elif page.meta and page.meta.title %} + +{% elif page.title and not page.is_homepage %} + +{% else %} + +{% endif %} + +{% if page.meta and page.meta.description %} + +{% elif config.site_description %} + +{% endif %} + + +{% if page.canonical_url %} + +{% endif %} + +{% if page.meta and page.meta.preview_image %} + +{% else %} + +{% endif %} + +{% endblock %} + +{% block scripts %} + +{{ super() }} + + +{% raw %} + + + +{% endraw %} + + + +{% endblock %} \ No newline at end of file diff --git a/docs/overrides/shortcodes.py b/docs/overrides/shortcodes.py new file mode 100644 index 000000000..f440cc700 --- /dev/null +++ b/docs/overrides/shortcodes.py @@ -0,0 +1,271 @@ +# Copyright (c) 2016-2024 Martin Donath +# Copy from https://github.com/squidfunk/mkdocs-material/blob/master/src/overrides/hooks/shortcodes.py + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from __future__ import annotations + +import posixpath +import re + +from mkdocs.config.defaults import MkDocsConfig +from mkdocs.structure.files import File, Files +from mkdocs.structure.pages import Page +from re import Match + +# ----------------------------------------------------------------------------- +# Hooks +# ----------------------------------------------------------------------------- + +# @todo +def on_page_markdown( + markdown: str, *, page: Page, config: MkDocsConfig, files: Files +): + + # Replace callback + def replace(match: Match): + type, args = match.groups() + args = args.strip() + if type == "version": + if args.startswith("insiders-"): + return _badge_for_version_insiders(args, page, files) + else: + return _badge_for_version(args, page, files) + elif type == "sponsors": return _badge_for_sponsors(page, files) + elif type == "flag": return flag(args, page, files) + elif type == "option": return option(args) + elif type == "setting": return setting(args) + elif type == "feature": return _badge_for_feature(args, page, files) + elif type == "plugin": return _badge_for_plugin(args, page, files) + elif type == "extension": return _badge_for_extension(args, page, files) + elif type == "utility": return _badge_for_utility(args, page, files) + elif type == "example": return _badge_for_example(args, page, files) + elif type == "default": + if args == "none": return _badge_for_default_none(page, files) + elif args == "computed": return _badge_for_default_computed(page, files) + else: return _badge_for_default(args, page, files) + + # Otherwise, raise an error + raise RuntimeError(f"Unknown shortcode: {type}") + + # Find and replace all external asset URLs in current page + return re.sub( + r"", + replace, markdown, flags = re.I | re.M + ) + +# ----------------------------------------------------------------------------- +# Helper functions +# ----------------------------------------------------------------------------- + +# Create a flag of a specific type +def flag(args: str, page: Page, files: Files): + type, *_ = args.split(" ", 1) + if type == "experimental": return _badge_for_experimental(page, files) + elif type == "required": return _badge_for_required(page, files) + elif type == "customization": return _badge_for_customization(page, files) + elif type == "metadata": return _badge_for_metadata(page, files) + elif type == "multiple": return _badge_for_multiple(page, files) + raise RuntimeError(f"Unknown type: {type}") + +# Create a linkable option +def option(type: str): + _, *_, name = re.split(r"[.:]", type) + return f"[`{name}`](#+{type}){{ #+{type} }}\n\n" + +# Create a linkable setting - @todo append them to the bottom of the page +def setting(type: str): + _, *_, name = re.split(r"[.*]", type) + return f"`{name}` {{ #{type} }}\n\n[{type}]: #{type}\n\n" + +# ----------------------------------------------------------------------------- + +# Resolve path of file relative to given page - the posixpath always includes +# one additional level of `..` which we need to remove +def _resolve_path(path: str, page: Page, files: Files): + path, anchor, *_ = f"{path}#".split("#") + path = _resolve(files.get_file_from_path(path), page) + return "#".join([path, anchor]) if anchor else path + +# Resolve path of file relative to given page - the posixpath always includes +# one additional level of `..` which we need to remove +def _resolve(file: File, page: Page): + path = posixpath.relpath(file.src_uri, page.file.src_uri) + return posixpath.sep.join(path.split(posixpath.sep)[1:]) + +# ----------------------------------------------------------------------------- + +# Create badge +def _badge(icon: str, text: str = "", type: str = ""): + classes = f"mdx-badge mdx-badge--{type}" if type else "mdx-badge" + return "".join([ + f"", + *([f"{icon}"] if icon else []), + *([f"{text}"] if text else []), + f"", + ]) + +# Create sponsors badge +def _badge_for_sponsors(page: Page, files: Files): + icon = "material-heart" + href = _resolve_path("features.md", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Sponsors only')", + type = "heart" + ) + +# Create badge for version +def _badge_for_version(text: str, page: Page, files: Files): + spec = text + path = f"https://github.com/barryvdh/laravel-debugbar/releases/tag/{spec}" + + # Return badge + icon = "material-tag-outline" + href = f"{path}" + return _badge( + icon = f"[:{icon}:]({href} 'Minimum version')", + text = f"[{text}]({path})" if spec else "" + ) + +# Create badge for feature +def _badge_for_feature(text: str, page: Page, files: Files): + icon = "material-toggle-switch" + href = _resolve_path("features.md#config", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Configurable feature')", + text = text + ) + +# Create badge for plugin +def _badge_for_plugin(text: str, page: Page, files: Files): + icon = "material-floppy" + href = _resolve_path("features.md#plugin", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Plugin')", + text = text + ) + +# Create badge for extension +def _badge_for_extension(text: str, page: Page, files: Files): + icon = "material-language-markdown" + href = _resolve_path("features.md#extension", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Markdown extension')", + text = text + ) + +# Create badge for utility +def _badge_for_utility(text: str, page: Page, files: Files): + icon = "material-package-variant" + href = _resolve_path("features.md#utility", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Third-party utility')", + text = text + ) + +# Create badge for example +def _badge_for_example(text: str, page: Page, files: Files): + return "\n".join([ + _badge_for_example_download(text, page, files), + _badge_for_example_view(text, page, files) + ]) + +# Create badge for example view +def _badge_for_example_view(text: str, page: Page, files: Files): + icon = "material-folder-eye" + href = f"https://mkdocs-material.github.io/examples/{text}/" + return _badge( + icon = f"[:{icon}:]({href} 'View example')", + type = "right" + ) + +# Create badge for example download +def _badge_for_example_download(text: str, page: Page, files: Files): + icon = "material-folder-download" + href = f"https://mkdocs-material.github.io/examples/{text}.zip" + return _badge( + icon = f"[:{icon}:]({href} 'Download example')", + text = f"[`.zip`]({href})", + type = "right" + ) + +# Create badge for default value +def _badge_for_default(text: str, page: Page, files: Files): + icon = "material-water" + href = _resolve_path("features.md#config", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Default value')", + text = text + ) + +# Create badge for empty default value +def _badge_for_default_none(page: Page, files: Files): + icon = "material-water-outline" + href = _resolve_path("features.md#config", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Default value is empty')" + ) + +# Create badge for computed default value +def _badge_for_default_computed(page: Page, files: Files): + icon = "material-water-check" + href = _resolve_path("features.md#default", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Default value is computed')" + ) + +# Create badge for metadata property flag +def _badge_for_metadata(page: Page, files: Files): + icon = "material-list-box-outline" + href = _resolve_path("features.md#metadata", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Metadata property')" + ) + +# Create badge for required value flag +def _badge_for_required(page: Page, files: Files): + icon = "material-alert" + href = _resolve_path("features.md#required", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Required value')" + ) + +# Create badge for customization flag +def _badge_for_customization(page: Page, files: Files): + icon = "material-brush-variant" + href = _resolve_path("features.md#custom", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Customization')" + ) + +# Create badge for multiple instance flag +def _badge_for_multiple(page: Page, files: Files): + icon = "material-inbox-multiple" + href = _resolve_path("features.md#multiple", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Multiple instances')" + ) + +# Create badge for experimental flag +def _badge_for_experimental(page: Page, files: Files): + icon = "material-flask-outline" + href = _resolve_path("features.md#experimental", page, files) + return _badge( + icon = f"[:{icon}:]({href} 'Experimental')" + ) \ No newline at end of file diff --git a/docs/screenshot.png b/docs/screenshot.png index adddef193..ca8b676d2 100644 Binary files a/docs/screenshot.png and b/docs/screenshot.png differ diff --git a/docs/storage.md b/docs/storage.md deleted file mode 100644 index 8f84cfd53..000000000 --- a/docs/storage.md +++ /dev/null @@ -1,45 +0,0 @@ -# Storage - -DebugBar supports storing collected data for later analysis. -You'll need to set a storage handler using `setStorage()` on your `DebugBar` instance. - - $debugbar->setStorage(new DebugBar\Storage\FileStorage('/path/to/dir')); - -Each time `DebugBar::collect()` is called, the data will be persisted. - -## Available storage - -### File - -It will collect data as json files under the specified directory -(which has to be writable). - - $storage = new DebugBar\Storage\FileStorage($directory); - -### Redis - -Stores data inside a Redis hash. Uses [Predis](http://github.com/nrk/predis). - - $storage = new DebugBar\Storage\RedisStorage($client); - -### PDO - -Stores data inside a database. - - $storage = new DebugBar\Storage\PdoStorage($pdo); - -The table name can be changed using the second argument and sql queries -can be changed using `setSqlQueries()`. - -## Creating your own storage - -You can easily create your own storage handler by implementing the -`DebugBar\Storage\StorageInterface`. - -## Request ID generator - -For each request, the debug bar will generate a unique id under which to store the -collected data. This is perform using a `DebugBar\RequestIdGeneratorInterface` object. - -If none are defined, the debug bar will automatically use `DebugBar\RequestIdGenerator` -which uses the `$_SERVER` array to generate the id. diff --git a/docs/style.css b/docs/style.css deleted file mode 100644 index 35f9149d8..000000000 --- a/docs/style.css +++ /dev/null @@ -1,28 +0,0 @@ -#page { - width: 1000px; - margin: 0 auto; -} - -#header { - background: none; - border: 0; - padding: 30px 0 50px; - height: auto; -} - -#sidebar { - padding: 0; - padding-right: 20px; -} - -#content { - width: 729px; - padding: 0; - padding-left: 20px; -} - -#header h1 a { - color: #4ad7ff; - text-decoration: none; - text-shadow: none; -} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..6dd20b7c8 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,93 @@ +import antfu from '@antfu/eslint-config'; +import globals from 'globals'; + +export default antfu( + { + type: 'app', + + // Disable TypeScript, Vue, etc. since this is vanilla JS + typescript: false, + vue: false, + react: false, + jsonc: false, + yaml: false, + markdown: false, + + ignores: [ + 'vendor/**', + 'tests/**', + 'docs/**', + 'resources/vendor/**' + ], + + // Stylistic formatting rules + stylistic: { + indent: 4, + quotes: 'single', + semi: true + } + }, + + // Custom rules for the project + { + rules: { + // Allow console in debug library + 'no-console': 'off', + + // Allow unused vars with _ prefix or Widget suffix + 'unused-imports/no-unused-vars': ['error', { + args: 'none', + varsIgnorePattern: '^(_|.*Widget)$', + caughtErrors: 'none' + }], + 'no-unused-vars': ['error', { + args: 'none', + varsIgnorePattern: '^(_|.*Widget)$', + caughtErrors: 'none' + }], + + // Code style + 'style/brace-style': ['error', '1tbs'], + 'style/comma-dangle': ['error', 'never'], + 'style/no-mixed-operators': 'off', + 'style/max-statements-per-line': 'off', + + // Relax some rules for legacy patterns + 'no-prototype-builtins': 'off', + 'no-sequences': 'off', + 'no-unused-expressions': 'off', + 'no-use-before-define': ['error', { functions: false, classes: true, variables: true }], + 'unicorn/no-array-for-each': 'off', + + // JSDoc relaxed rules + 'jsdoc/require-returns-description': 'off', + 'jsdoc/check-param-names': 'off', + + // Allow function expressions (for Widget.extend pattern) + 'func-style': 'off', + 'antfu/consistent-list-newline': 'off', + + // Modern JavaScript requirements + 'prefer-const': 'error', + 'no-var': 'error', + 'prefer-arrow-callback': 'warn', + 'prefer-template': 'warn', + 'object-shorthand': 'warn' + } + }, + + // Custom config for resources folder + { + files: ['resources/**/*.js'], + languageOptions: { + ecmaVersion: 2020, + sourceType: 'script', + globals: { + ...globals.browser, + PhpDebugBar: 'writable', + phpdebugbar_hljs: 'readonly', + phpdebugbar_sqlformatter: 'readonly' + } + } + } +); diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 000000000..fddb4b680 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,93 @@ +site_name: PHP Debug Bar +site_author: Barry vd. Heuvel +site_description: PHP Debug Bar +site_url: https://php-debugbar.com +repo_url: https://github.com/php-debugbar/php-debugbar +copyright: Copyright © Barry vd. Heuvel & Maxime Bouroumeau-Fuseau + +nav: + - DebugBar: index.md + - Documentation: + - Getting started: docs/index.md + - docs/release-notes.md + - docs/data-collectors.md + - docs/rendering.md + - docs/ajax-and-stack.md + - docs/data-formatter.md + - docs/storage.md + - docs/openhandler.md + - docs/http-drivers.md + - docs/javascript-bar.md + - Collectors: + - collectors/base.md + - collectors/bridge.md + +theme: + name: material + custom_dir: docs/overrides + logo: assets/logo_white.png + favicon: assets/favicon.png + palette: + - primary: custom + accent: custom + scheme: default + features: + - navigation.tabs + - navigation.tabs.sticky +# - navigation.instant + - navigation.tracking +# - navigation.indexes + - navigation.top + - navigation.footer + - navigation.sections + - navigation.expand + - content.tooltips + - content.code.copy + - toc.follow + - toc.integrate + - search.highlight + - meta +extra_css: + - assets/dist/debugbar.min.css?v=1772714179 + - assets/extra.css +extra_javascript: + - assets/dist/debugbar.min.js?v=1772714179 +markdown_extensions: + - admonition + - abbr + - attr_list + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + - pymdownx.highlight: + use_pygments: true + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + extend_pygments_lang: + - name: php + lang: php + options: + startinline: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.details + - toc: + permalink: true + - pymdownx.magiclink: + normalize_issue_symbols: true + repo_url_shorthand: true + user: php-debugbar + repo: php-debugbar + +extra: + analytics: + provider: google + property: G-RRZHNXY76R + social: + - icon: fontawesome/brands/github + link: https://github.com/php-debugbar/php-debugbar + +hooks: + - docs/overrides/shortcodes.py diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..edcc5ec0a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5351 @@ +{ + "name": "php-debugbar", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "php-debugbar", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "@tabler/icons": "^3.36.0", + "highlight.js": "^11.11.1" + }, + "devDependencies": { + "@antfu/eslint-config": "^6.7.1", + "@eslint/js": "^9.39.2", + "esbuild": "^0.27.2", + "eslint": "^9.39.2", + "eslint-plugin-jquery": "^1.5.1", + "globals": "^16.5.0" + } + }, + "node_modules/@antfu/eslint-config": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-6.7.3.tgz", + "integrity": "sha512-0tYYzY59uLnxWgbP9xpuxpvodTcWDacj439kTAJZB3sn7O0BnPfVxTnRvleGYaKCEALBZkzdC/wCho9FD7ICLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@clack/prompts": "^0.11.0", + "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0", + "@eslint/markdown": "^7.5.1", + "@stylistic/eslint-plugin": "^5.6.1", + "@typescript-eslint/eslint-plugin": "^8.50.0", + "@typescript-eslint/parser": "^8.50.0", + "@vitest/eslint-plugin": "^1.5.4", + "ansis": "^4.2.0", + "cac": "^6.7.14", + "eslint-config-flat-gitignore": "^2.1.0", + "eslint-flat-config-utils": "^2.1.4", + "eslint-merge-processors": "^2.0.0", + "eslint-plugin-antfu": "^3.1.1", + "eslint-plugin-command": "^3.4.0", + "eslint-plugin-import-lite": "^0.4.0", + "eslint-plugin-jsdoc": "^61.5.0", + "eslint-plugin-jsonc": "^2.21.0", + "eslint-plugin-n": "^17.23.1", + "eslint-plugin-no-only-tests": "^3.3.0", + "eslint-plugin-perfectionist": "^4.15.1", + "eslint-plugin-pnpm": "^1.4.3", + "eslint-plugin-regexp": "^2.10.0", + "eslint-plugin-toml": "^0.12.0", + "eslint-plugin-unicorn": "^62.0.0", + "eslint-plugin-unused-imports": "^4.3.0", + "eslint-plugin-vue": "^10.6.2", + "eslint-plugin-yml": "^1.19.1", + "eslint-processor-vue-blocks": "^2.0.0", + "globals": "^16.5.0", + "jsonc-eslint-parser": "^2.4.2", + "local-pkg": "^1.1.2", + "parse-gitignore": "^2.0.0", + "toml-eslint-parser": "^0.10.1", + "vue-eslint-parser": "^10.2.0", + "yaml-eslint-parser": "^1.3.2" + }, + "bin": { + "eslint-config": "bin/index.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@eslint-react/eslint-plugin": "^2.0.1", + "@next/eslint-plugin-next": ">=15.0.0", + "@prettier/plugin-xml": "^3.4.1", + "@unocss/eslint-plugin": ">=0.50.0", + "astro-eslint-parser": "^1.0.2", + "eslint": "^9.10.0", + "eslint-plugin-astro": "^1.2.0", + "eslint-plugin-format": ">=0.1.0", + "eslint-plugin-jsx-a11y": ">=6.10.2", + "eslint-plugin-react-hooks": "^7.0.0", + "eslint-plugin-react-refresh": "^0.4.19", + "eslint-plugin-solid": "^0.14.3", + "eslint-plugin-svelte": ">=2.35.1", + "eslint-plugin-vuejs-accessibility": "^2.4.1", + "prettier-plugin-astro": "^0.14.0", + "prettier-plugin-slidev": "^1.0.5", + "svelte-eslint-parser": ">=0.37.0" + }, + "peerDependenciesMeta": { + "@eslint-react/eslint-plugin": { + "optional": true + }, + "@next/eslint-plugin-next": { + "optional": true + }, + "@prettier/plugin-xml": { + "optional": true + }, + "@unocss/eslint-plugin": { + "optional": true + }, + "astro-eslint-parser": { + "optional": true + }, + "eslint-plugin-astro": { + "optional": true + }, + "eslint-plugin-format": { + "optional": true + }, + "eslint-plugin-jsx-a11y": { + "optional": true + }, + "eslint-plugin-react-hooks": { + "optional": true + }, + "eslint-plugin-react-refresh": { + "optional": true + }, + "eslint-plugin-solid": { + "optional": true + }, + "eslint-plugin-svelte": { + "optional": true + }, + "eslint-plugin-vuejs-accessibility": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-slidev": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + } + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@clack/core": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz", + "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz", + "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@clack/core": "0.5.0", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.84.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.84.0.tgz", + "integrity": "sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.54.0", + "comment-parser": "1.4.5", + "esquery": "^1.7.0", + "jsdoc-type-pratt-parser": "~7.1.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@es-joy/resolve.exports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", + "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-plugin-eslint-comments": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.7.1.tgz", + "integrity": "sha512-Ql2nJFwA8wUGpILYGOQaT1glPsmvEwE0d+a+l7AALLzQvInqdbXJdx7aSu0DpUX9dB1wMVBMhm99/++S3MdEtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "ignore": "^7.0.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/compat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.3.tgz", + "integrity": "sha512-SjIJhGigp8hmd1YGIBwh7Ovri7Kisl42GYFjrOyHhtfYGGoLW6teYi/5p8W50KSsawUPpuLOSmsq1bD0NGQLBw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.1.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "peerDependencies": { + "eslint": "^8.40 || 9 || 10" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/compat/node_modules/@eslint/core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz", + "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/markdown": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-7.5.1.tgz", + "integrity": "sha512-R8uZemG9dKTbru/DQRPblbJyXpObwKzo8rv1KYGGuPUPtjM4LXBYM9q5CIZAComzZupws3tWbDwam5AFpPLyJQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "examples/*" + ], + "dependencies": { + "@eslint/core": "^0.17.0", + "@eslint/plugin-kit": "^0.4.1", + "github-slugger": "^2.0.0", + "mdast-util-from-markdown": "^2.0.2", + "mdast-util-frontmatter": "^2.0.1", + "mdast-util-gfm": "^3.1.0", + "micromark-extension-frontmatter": "^2.0.0", + "micromark-extension-gfm": "^3.0.0", + "micromark-util-normalize-identifier": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@sindresorhus/base62": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", + "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", + "license": "MIT" + }, + "node_modules/@stylistic/eslint-plugin": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/types": "^8.56.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.0.0 || ^10.0.0" + } + }, + "node_modules/@tabler/icons": { + "version": "3.41.1", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.41.1.tgz", + "integrity": "sha512-OaRnVbRmH2nHtFeg+RmMJ/7m2oBIF9XCJAUD5gQnMrpK9f05ydj8MZrAf3NZQqOXyxGN1UBL0D5IKLLEUfr74Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.0.tgz", + "integrity": "sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/type-utils": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.58.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.0.tgz", + "integrity": "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.0.tgz", + "integrity": "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.58.0", + "@typescript-eslint/types": "^8.58.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/rule-tester": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/rule-tester/-/rule-tester-8.58.0.tgz", + "integrity": "sha512-a/J72Cxeo5ug5sbey7+Dcna6tMBc4Z4eYwBEKM6MVuBqbxnROpLm8yn/j00lPZc75joPZJVR5oiTZxbK95zp+w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/parser": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "ajv": "^6.12.6", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "4.6.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.0.tgz", + "integrity": "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.0.tgz", + "integrity": "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.0.tgz", + "integrity": "sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.0.tgz", + "integrity": "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.0.tgz", + "integrity": "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/project-service": "8.58.0", + "@typescript-eslint/tsconfig-utils": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.0.tgz", + "integrity": "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.0.tgz", + "integrity": "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitest/eslint-plugin": { + "version": "1.6.14", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.6.14.tgz", + "integrity": "sha512-PXZ5ysw4eHU9h8nDtBvVcGC7Z2C/T9CFdheqSw1NNXFYqViojub0V9bgdYI67iBTOcra2mwD0EYldlY9bGPf2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "^8.58.0", + "@typescript-eslint/utils": "^8.58.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "*", + "eslint": ">=8.57.0", + "typescript": ">=5.0.0", + "vitest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.31.tgz", + "integrity": "sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.31", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.31.tgz", + "integrity": "sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.31", + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.31.tgz", + "integrity": "sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.31", + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.31.tgz", + "integrity": "sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.31", + "@vue/shared": "3.5.31" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.31.tgz", + "integrity": "sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.13", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.13.tgz", + "integrity": "sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/builtin-modules": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.0.0.tgz", + "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001784", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001784.tgz", + "integrity": "sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/comment-parser": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.5.tgz", + "integrity": "sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.331", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz", + "integrity": "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", + "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-flat-gitignore": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-2.3.0.tgz", + "integrity": "sha512-bg4ZLGgoARg1naWfsINUUb/52Ksw/K22K+T16D38Y8v+/sGwwIYrGvH/JBjOin+RQtxxC9tzNNiy4shnGtGyyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^2.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "^9.5.0 || ^10.0.0" + } + }, + "node_modules/eslint-flat-config-utils": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/eslint-flat-config-utils/-/eslint-flat-config-utils-2.1.4.tgz", + "integrity": "sha512-bEnmU5gqzS+4O+id9vrbP43vByjF+8KOs+QuuV4OlqAuXmnRW2zfI/Rza1fQvdihQ5h4DUo0NqFAiViD4mSrzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/eslint-json-compat-utils": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/eslint-json-compat-utils/-/eslint-json-compat-utils-0.2.3.tgz", + "integrity": "sha512-RbBmDFyu7FqnjE8F0ZxPNzx5UaptdeS9Uu50r7A+D7s/+FCX+ybiyViYEgFUaFIFqSWJgZRTpL5d8Kanxxl2lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esquery": "^1.6.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": "*", + "jsonc-eslint-parser": "^2.4.0 || ^3.0.0" + }, + "peerDependenciesMeta": { + "@eslint/json": { + "optional": true + } + } + }, + "node_modules/eslint-merge-processors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-merge-processors/-/eslint-merge-processors-2.0.0.tgz", + "integrity": "sha512-sUuhSf3IrJdGooquEUB5TNpGNpBoQccbnaLHsb1XkBLUPPqCNivCpY05ZcpCOiV9uHwO2yxXEWVczVclzMxYlA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/eslint-plugin-antfu": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-3.2.2.tgz", + "integrity": "sha512-Qzixht2Dmd/pMbb5EnKqw2V8TiWHbotPlsORO8a+IzCLFwE0RxK8a9k4DCTFPzBwyxJzH+0m2Mn8IUGeGQkyUw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/eslint-plugin-command": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-command/-/eslint-plugin-command-3.5.2.tgz", + "integrity": "sha512-PA59QAkQDwvcCMEt5lYLJLI3zDGVKJeC4id/pcRY2XdRYhSGW7iyYT1VC1N3bmpuvu6Qb/9QptiS3GJMjeGTJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@es-joy/jsdoccomment": "^0.84.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@typescript-eslint/rule-tester": "*", + "@typescript-eslint/typescript-estree": "*", + "@typescript-eslint/utils": "*", + "eslint": "*" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-es-x/node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-import-lite": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-lite/-/eslint-plugin-import-lite-0.4.0.tgz", + "integrity": "sha512-My0ReAg8WbHXYECIHVJkWB8UxrinZn3m72yonOYH6MFj40ZN1vHYQj16iq2Fd8Wrt/vRZJwDX2xm/BzDk1FzTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0", + "typescript": ">=4.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jquery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jquery/-/eslint-plugin-jquery-1.5.1.tgz", + "integrity": "sha512-L7v1eaK5t80C0lvUXPFP9MKnBOqPSKhCOYyzy4LZ0+iK+TJwN8S9gAkzzP1AOhypRIwA88HF6phQ9C7jnOpW8w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.4.0" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "61.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-61.7.1.tgz", + "integrity": "sha512-36DpldF95MlTX//n3/naULFVt8d1cV4jmSkx7ZKrE9ikkKHAgMLesuWp1SmwpVwAs5ndIM6abKd6PeOYZUgdWg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@es-joy/jsdoccomment": "~0.78.0", + "@es-joy/resolve.exports": "1.2.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.4.3", + "escape-string-regexp": "^4.0.0", + "espree": "^11.0.0", + "esquery": "^1.7.0", + "html-entities": "^2.6.0", + "object-deep-merge": "^2.0.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.3", + "spdx-expression-parse": "^4.0.0", + "to-valid-identifier": "^1.0.0" + }, + "engines": { + "node": ">=20.11.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/@es-joy/jsdoccomment": { + "version": "0.78.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.78.0.tgz", + "integrity": "sha512-rQkU5u8hNAq2NVRzHnIUUvR6arbO0b6AOlvpTNS48CkiKSn/xtNfOzBK23JE4SiW89DgvU7GtxLVgV4Vn2HBAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.46.4", + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~7.0.0" + }, + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/jsdoc-type-pratt-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.0.0.tgz", + "integrity": "sha512-c7YbokssPOSHmqTbSAmTtnVgAVa/7lumWNYqomgd5KOMyPrRve2anx6lonfOsXEQacqF9FKVUj7bLg4vRSvdYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/eslint-plugin-jsonc": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.21.1.tgz", + "integrity": "sha512-dbNR5iEnQeORwsK2WZzr3QaMtFCY3kKJVMRHPzUpKzMhmVy2zIpVgFDpX8MNoIdoqz6KCpCfOJavhfiSbZbN+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.5.1", + "diff-sequences": "^27.5.1", + "eslint-compat-utils": "^0.6.4", + "eslint-json-compat-utils": "^0.2.1", + "espree": "^9.6.1 || ^10.3.0", + "graphemer": "^1.4.0", + "jsonc-eslint-parser": "^2.4.0", + "natural-compare": "^1.4.0", + "synckit": "^0.6.2 || ^0.7.3 || ^0.11.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-n": { + "version": "17.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz", + "integrity": "sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.5.0", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "globrex": "^0.1.2", + "ignore": "^5.3.2", + "semver": "^7.6.3", + "ts-declaration-location": "^1.0.6" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": ">=8.23.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-n/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-no-only-tests": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz", + "integrity": "sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-perfectionist": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.1.tgz", + "integrity": "sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "^8.38.0", + "@typescript-eslint/utils": "^8.38.0", + "natural-orderby": "^5.0.0" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "eslint": ">=8.45.0" + } + }, + "node_modules/eslint-plugin-pnpm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-pnpm/-/eslint-plugin-pnpm-1.6.0.tgz", + "integrity": "sha512-dxmt9r3zvPaft6IugS4i0k16xag3fTbOvm/road5uV9Y8qUCQT0xzheSh3gMlYAlC6vXRpfArBDsTZ7H7JKCbg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT", + "dependencies": { + "empathic": "^2.0.0", + "jsonc-eslint-parser": "^3.1.0", + "pathe": "^2.0.3", + "pnpm-workspace-yaml": "1.6.0", + "tinyglobby": "^0.2.15", + "yaml": "^2.8.2", + "yaml-eslint-parser": "^2.0.0" + }, + "peerDependencies": { + "eslint": "^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-pnpm/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-pnpm/node_modules/jsonc-eslint-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-3.1.0.tgz", + "integrity": "sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^5.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/eslint-plugin-pnpm/node_modules/yaml-eslint-parser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-2.0.0.tgz", + "integrity": "sha512-h0uDm97wvT2bokfwwTmY6kJ1hp6YDFL0nRHwNKz8s/VD1FH/vvZjAKoMUE+un0eaYBSG7/c6h+lJTP+31tjgTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^5.0.0", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/eslint-plugin-regexp": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.10.0.tgz", + "integrity": "sha512-ovzQT8ESVn5oOe5a7gIDPD5v9bCSjIFJu57sVPDqgPRXicQzOnYfFN21WoQBQF18vrhT5o7UMKFwJQVVjyJ0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "comment-parser": "^1.4.0", + "jsdoc-type-pratt-parser": "^4.0.0", + "refa": "^0.12.1", + "regexp-ast-analysis": "^0.7.1", + "scslre": "^0.3.0" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "eslint": ">=8.44.0" + } + }, + "node_modules/eslint-plugin-regexp/node_modules/jsdoc-type-pratt-parser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.8.0.tgz", + "integrity": "sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/eslint-plugin-toml": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-toml/-/eslint-plugin-toml-0.12.0.tgz", + "integrity": "sha512-+/wVObA9DVhwZB1nG83D2OAQRrcQZXy+drqUnFJKymqnmbnbfg/UPmEMCKrJNcEboUGxUjYrJlgy+/Y930mURQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "eslint-compat-utils": "^0.6.0", + "lodash": "^4.17.19", + "toml-eslint-parser": "^0.10.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-unicorn": { + "version": "62.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-62.0.0.tgz", + "integrity": "sha512-HIlIkGLkvf29YEiS/ImuDZQbP12gWyx5i3C6XrRxMvVdqMroCI9qoVYCoIl17ChN+U89pn9sVwLxhIWj5nEc7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "@eslint-community/eslint-utils": "^4.9.0", + "@eslint/plugin-kit": "^0.4.0", + "change-case": "^5.4.4", + "ci-info": "^4.3.1", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.46.0", + "esquery": "^1.6.0", + "find-up-simple": "^1.0.1", + "globals": "^16.4.0", + "indent-string": "^5.0.0", + "is-builtin-module": "^5.0.0", + "jsesc": "^3.1.0", + "pluralize": "^8.0.0", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.13.0", + "semver": "^7.7.3", + "strip-indent": "^4.1.1" + }, + "engines": { + "node": "^20.10.0 || >=21.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=9.38.0" + } + }, + "node_modules/eslint-plugin-unused-imports": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz", + "integrity": "sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^10.0.0 || ^9.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.8.0.tgz", + "integrity": "sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^7.1.0", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "vue-eslint-parser": "^10.0.0" + }, + "peerDependenciesMeta": { + "@stylistic/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-yml": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.19.1.tgz", + "integrity": "sha512-bYkOxyEiXh9WxUhVYPELdSHxGG5pOjCSeJOVkfdIyj6tuiHDxrES2WAW1dBxn3iaZQey57XflwLtCYRcNPOiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.2", + "diff-sequences": "^27.5.1", + "escape-string-regexp": "4.0.0", + "eslint-compat-utils": "^0.6.0", + "natural-compare": "^1.4.0", + "yaml-eslint-parser": "^1.2.1" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-processor-vue-blocks": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-processor-vue-blocks/-/eslint-processor-vue-blocks-2.0.0.tgz", + "integrity": "sha512-u4W0CJwGoWY3bjXAuFpc/b6eK3NQEI8MoeW7ritKj3G3z/WtHrKjkqf+wk8mPEy5rlMGS+k6AZYOw2XBoN/02Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.3.0", + "eslint": ">=9.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.7", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", + "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true, + "license": "ISC" + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-builtin-module": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", + "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^5.0.0" + }, + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.1.1.tgz", + "integrity": "sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", + "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-orderby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", + "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/node-releases": { + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "dev": true, + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-deep-merge": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz", + "integrity": "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-gitignore": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz", + "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/parse-imports-exports": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", + "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-statements": "1.0.11" + } + }, + "node_modules/parse-statements": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", + "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pnpm-workspace-yaml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pnpm-workspace-yaml/-/pnpm-workspace-yaml-1.6.0.tgz", + "integrity": "sha512-uUy4dK3E11sp7nK+hnT7uAWfkBMe00KaUw8OG3NuNlYQoTk4sc9pcdIy1+XIP85v9Tvr02mK3JPaNNrP0QyRaw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT", + "dependencies": { + "yaml": "^2.8.2" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/refa": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz", + "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/regexp-ast-analysis": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz", + "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.1" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/reserved-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/scslre": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz", + "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.0", + "regexp-ast-analysis": "^0.7.0" + }, + "engines": { + "node": "^14.0.0 || >=16.0.0" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/strip-indent": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", + "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tapable": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-valid-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", + "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/base62": "^1.0.0", + "reserved-identifiers": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/toml-eslint-parser": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/toml-eslint-parser/-/toml-eslint-parser-0.10.1.tgz", + "integrity": "sha512-9mjy3frhioGIVGcwamlVlUyJ9x+WHw/TXiz9R4YOlmsIuBN43r9Dp8HZ35SF9EKjHrn3BUZj04CF+YqZ2oJ+7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/toml-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-declaration-location": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz", + "integrity": "sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==", + "dev": true, + "funding": [ + { + "type": "ko-fi", + "url": "https://ko-fi.com/rebeccastevens" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/ts-declaration-location" + } + ], + "license": "BSD-3-Clause", + "dependencies": { + "picomatch": "^4.0.2" + }, + "peerDependencies": { + "typescript": ">=4.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-eslint-parser": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.4.0.tgz", + "integrity": "sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0 || ^9.0.0", + "eslint-visitor-keys": "^4.2.0 || ^5.0.0", + "espree": "^10.3.0 || ^11.0.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.2.tgz", + "integrity": "sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..e36d5b710 --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "php-debugbar", + "version": "1.0.0", + "description": "[![Latest Stable Version](https://img.shields.io/packagist/v/php-debugbar/php-debugbar?label=Stable)](https://packagist.org/packages/php-debugbar/php-debugbar) [![Total Downloads](https://img.shields.io/packagist/dt/maximebf/debugbar?label=Downloads)](https://packagist.org/packages/php-debugbar/php-debugbar) [![License](https://img.shields.io/badge/Licence-MIT-4d9283)](https://packagist.org/packages/php-debugbar/php-debugbar) [![Tests](https://github.com/maximebf/php-debugbar/actions/workflows/run-tests.yml/badge.svg)](https://github.com/php-debugbar/php-debugbar/actions/workflows/run-tests.yml)", + "main": "index.js", + "directories": { + "doc": "docs", + "test": "tests" + }, + "type": "module", + "scripts": { + "build": "npm run build:hljs && npm run build:sqlformatter && npm run build:icons && npm run build:assets && npm run build:minify", + "build:assets": "php build/build-assets.php", + "build:hljs": "esbuild build/build-hljs.js --bundle --minify --format=iife --outfile=resources/vendor/highlightjs/highlight.pack.js", + "build:sqlformatter": "esbuild build/build-sqlformatter.js --bundle --minify --format=iife --outfile=resources/vendor/sql-formatter/sql-formatter.min.js", + "build:icons": "node build/build-icons.js", + "build:minify": "php build/build-assets.php && node build/build-minify.js", + "docs": "npm run build && php vendor/bin/phpunit --filter=testDocs && php build/build-docs.php && mkdocs build", + "lint": "eslint resources/**/*.js", + "lint:fix": "eslint resources/**/*.js --fix", + "lint:report": "eslint resources/**/*.js --output-file eslint-report.txt --format unix", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@antfu/eslint-config": "^6.7.1", + "@eslint/js": "^9.39.2", + "esbuild": "^0.27.2", + "eslint": "^9.39.2", + "eslint-plugin-jquery": "^1.5.1", + "globals": "^16.5.0" + }, + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "@tabler/icons": "^3.36.0", + "highlight.js": "^11.11.1" + } +} diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 000000000..ccec565a5 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,31 @@ +parameters: + level: 6 +# treatPhpDocTypesAsCertain: false + paths: + - src + - tests + bootstrapFiles: + - tests/phpstan-stubs.php + strictRules: + dynamicCallOnStaticMethod: false + booleansInConditions: false + disallowedShortTernary: false + noVariableVariables: false + strictArrayFilter: false + shipmonkRules: + enableAllRules: false + enforceNativeReturnTypehint: + enabled: true + ignoreErrors: + - + identifier: missingType.iterableValue + - + identifier: cast.useless + - + identifier: missingType.parameter + path: src/DataFormatter/VarDumper/DebugBarJsonDumper.php +includes: + - vendor/phpstan/phpstan-phpunit/extension.neon + - vendor/phpstan/phpstan-strict-rules/rules.neon + - vendor/shipmonk/phpstan-rules/rules.neon + diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 77d237350..d04f9da49 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,25 +1,27 @@ - - - - ./tests/DebugBar/ - - - - - - ./src/DebugBar/ - - + + + ./tests/Tests + ./tests/Tests/Browser + + + ./tests/Tests/Browser + + + + + + + + + ./src/ + + diff --git a/resources/debugbar.css b/resources/debugbar.css new file mode 100644 index 000000000..b993e41c0 --- /dev/null +++ b/resources/debugbar.css @@ -0,0 +1,731 @@ +/* Hide debugbar when printing a page */ +@media print { + div.phpdebugbar { + display: none; + } +} + +div.phpdebugbar, +div.phpdebugbar-openhandler, +div.phpdebugbar-widgets-datasets-panel { + --debugbar-background: #F7F7F7; + --debugbar-background-alt: #EFEFEF; + --debugbar-text: #222; + --debugbar-text-muted: #888; + --debugbar-border: #eee; + + --debugbar-header: #efefef; + --debugbar-header-text: #555; + --debugbar-header-border: #ddd; + + --debugbar-active: #ccc; + --debugbar-active-text: #666; + + --debugbar-icons: #555; + --debugbar-badge: #ccc; + --debugbar-badge-text: #555; + + --debugbar-badge-active: #477e96; + --debugbar-badge-active-text: #fff; + + --debugbar-link: #888; + --debugbar-hover: #aaa; + + --debugbar-accent: #6BB7D8; + --debugbar-accent-border: #477e96; + + --debugbar-font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --debugbar-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --debugbar-icon-brand: var(--debugbar-icon-brand-php); +} + +div.phpdebugbar[data-theme='dark'], +div.phpdebugbar-openhandler[data-theme='dark'], +div.phpdebugbar-widgets-datasets-panel[data-theme='dark'] { + --debugbar-background: #2a2a2a; + --debugbar-background-alt: #333333; + --debugbar-text: #e0e0e0; + --debugbar-text-muted: #aaaaaa; + --debugbar-border: #3a3a3a; + + --debugbar-header: #1e1e1e; + --debugbar-header-text: #cccccc; + --debugbar-header-border: #444; + + --debugbar-active: #444; + --debugbar-active-text: #e0e0e0; + + --debugbar-icons: #cccccc; + --debugbar-badge: #444; + --debugbar-badge-text: #cccccc; + + --debugbar-badge-active: #4F8FB3; + --debugbar-badge-active-text: #1e1e1e; + + --debugbar-accent: #4F8FB3; + --debugbar-accent-border: #3F7A94; + + --debugbar-link: #aaaaaa; + --debugbar-hover: #888888; +} + + +div.phpdebugbar { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + border-top: 0; + font-family: var(--debugbar-font-sans); + background: var(--debugbar-background); + z-index: 100000000; + font-size: 13px; + color: var(--debugbar-text); + text-align: left; + line-height: 1.2em; + letter-spacing: normal; + direction: ltr; +} + +div.phpdebugbar.phpdebugbar-fullscreen, +div.phpdebugbar.phpdebugbar-fullscreen[data-toolbarPosition="top"] { + top: 0; + bottom: 0; + display: flex; + flex-direction: column; +} + +div.phpdebugbar.phpdebugbar-fullscreen .phpdebugbar-body { + flex: 1; + height: calc(100% - 32px) !important +} + +div.phpdebugbar.phpdebugbar-fullscreen .phpdebugbar-resize-handle { + display: none; +} + +.phpdebugbar [hidden] { + display: none !important; +} + +div.phpdebugbar[data-openBtnPosition="bottomRight"].phpdebugbar-closed, +div.phpdebugbar[data-openBtnPosition="topRight"].phpdebugbar-closed { + left:auto; + right: 0; +} + +div.phpdebugbar[data-openBtnPosition="topRight"].phpdebugbar-closed, +div.phpdebugbar[data-openBtnPosition="topLeft"].phpdebugbar-closed { + bottom:auto; + top: 0; + border-bottom: 1px solid var(--debugbar-header-border); +} + +div.phpdebugbar[data-openBtnPosition="bottomRight"].phpdebugbar-closed, +div.phpdebugbar[data-openBtnPosition="bottomLeft"].phpdebugbar-closed { + border-top: 1px solid var(--debugbar-header-border); +} + +.phpdebugbar-closed[data-openBtnPosition="bottomLeft"], +.phpdebugbar-closed[data-openBtnPosition="topLeft"] { + border-right: 1px solid var(--debugbar-header-border); +} +.phpdebugbar-closed[data-openBtnPosition="bottomRight"], +.phpdebugbar-closed[data-openBtnPosition="topRight"] { + border-left: 1px solid var(--debugbar-header-border); +} + +div.phpdebugbar a, +div.phpdebugbar-openhandler { + cursor: pointer; +} + +div.phpdebugbar-drag-capture { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 100000001; + background: none; + display: none; + cursor: row-resize; +} + +div.phpdebugbar-closed { + width: auto; +} + +div.phpdebugbar * { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + text-decoration: none; + clear: initial; + width: auto; + direction: ltr; + text-align: left; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +div.phpdebugbar select, div.phpdebugbar input { + appearance: auto; +} + +div.phpdebugbar ol, div.phpdebugbar ul { + list-style: none; +} + +div.phpdebugbar ul li, div.phpdebugbar ol li, div.phpdebugbar dl li { + line-height: normal; +} + +div.phpdebugbar table, .phpdebugbar-openhandler table { + border-collapse: collapse; + border-spacing: 0; + color: inherit; +} + +div.phpdebugbar input[type='text'], div.phpdebugbar input[type='password'], div.phpdebugbar select { + font-family: var(--debugbar-font-sans); + background: var(--debugbar-background); + font-size: 14px; + color: var(--debugbar-text); + padding: 0; + border: 1px solid var(--debugbar-border); + border-radius: 0.25rem; + margin: 0; +} + +div.phpdebugbar code, div.phpdebugbar pre, div.phpdebugbar samp { + background: none; + font-family: var(--debugbar-font-mono); + font-size: 1em; + border: 0 !important; + padding: 0; + margin: 0; +} + +div.phpdebugbar code, div.phpdebugbar pre { + color: var(--debugbar-text); +} + +div.phpdebugbar pre.sf-dump { + background: none !important; + z-index: 0 !important; + display: block !important; + color: #a0a000; + outline: 0; +} + +div.phpdebugbar pre.sf-dump .sf-dump-private { + color: grey; +} + +div.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-public { + color: #ffcc00; +} + +div.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-protected { + color: #a0a000; +} + +div.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-private { + color: #9d9266; +} + +a.phpdebugbar-restore-btn { + float: left; + padding: 4px 4px; + font-size: 14px; + color: var(--debugbar-icons); + text-decoration: none; + width: 24px; + height: 24px; +} + +div.phpdebugbar-resize-handle { + height: 4px; + margin-top: -4px; + width: 100%; + background: none; + border-bottom: 1px solid var(--debugbar-header-border); + cursor: row-resize; +} +div.phpdebugbar-minimized div.phpdebugbar-resize-handle { + cursor: auto; +} + +div.phpdebugbar-resize-handle.phpdebugbar-resize-handle-bottom { + margin-top: 4px; +} + +div.phpdebugbar-minimized{ + border-top: 1px solid var(--debugbar-header-border); +} + +div.phpdebugbar-minimized[data-toolbarPosition="top"]{ + border-top: 0; + border-bottom: 1px solid var(--debugbar-header-border); +} + + +div.phpdebugbar[data-toolbarPosition="top"] { + bottom: auto; + top: 0; +} + +div.phpdebugbar[data-toolbarPosition="top"] div.phpdebugbar-resize-handle-top { + height:0; + display: none; +} +div.phpdebugbar[data-toolbarPosition="top"] div.phpdebugbar-resize-handle-bottom { + margin-top: 0; +} +div.phpdebugbar[data-toolbarPosition="bottom"] div.phpdebugbar-resize-handle-bottom { + height:0; + margin-top: 0; +} + + +/* -------------------------------------- */ + +a.phpdebugbar-restore-btn:after { + -webkit-mask-image: var(--debugbar-icon-brand); + mask-image: var(--debugbar-icon-brand); + -webkit-mask-size: 20px 20px; + mask-size: 20px 20px; + background-color: var(--debugbar-icons); +} +div.phpdebugbar-header { + background-color: var(--debugbar-header); + min-height: 32px; + line-height: 16px; +} +div.phpdebugbar-header:before, div.phpdebugbar-header:after { + display: table; + line-height: 0; + content: ""; +} +div.phpdebugbar-header:after { + clear: both; +} +div.phpdebugbar-header-left { + float: left; +} +div.phpdebugbar-header-right { + float: right; +} +div.phpdebugbar-header > div > * { + padding: 5px; + font-size: 13px; + height: 22px; + color: var(--debugbar-header-text); + text-decoration: none; +} +div.phpdebugbar-header-left > *, +div.phpdebugbar-header-right > * { + line-height: 0; + display: flex; + align-items: center; +} +div.phpdebugbar-header-left > * { + float: left; +} +div.phpdebugbar-header-right > * { + float: right; +} +div.phpdebugbar-header-right select { + padding: 0; + line-height: 1em; + background-color: var(--debugbar-header); + color: var(--debugbar-header-text); +} + +/* -------------------------------------- */ + +span.phpdebugbar-indicator, +a.phpdebugbar-indicator +{ + border-right: 1px solid var(--debugbar-header-border); +} + +.phpdebugbar[data-hideEmptyTabs=true] .phpdebugbar-tab[data-empty=true]:not(.phpdebugbar-active) { + display: none; +} + +a.phpdebugbar-tab.phpdebugbar-active { + background: var(--debugbar-active); + color: var(--debugbar-active-text); +} + a.phpdebugbar-tab .phpdebugbar-text { + font-size: 14px; + } + a.phpdebugbar-tab span.phpdebugbar-badge { + display: none; + margin-left: 5px; + font-size: 11px; + line-height: 14px; + padding: 0 6px; + background: var(--debugbar-badge); + border-radius: 4px; + color: var(--debugbar-badge-text); + font-weight: normal; + text-shadow: none; + } + a.phpdebugbar-tab.phpdebugbar-active span.phpdebugbar-badge { + background: var(--debugbar-badge-active); + color: var(--debugbar-badge-active-text); + } + + a.phpdebugbar-tab i { + display: none; + vertical-align: middle; + } + +.phpdebugbar-icon, +i.phpdebugbar-icon { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +/* Icon base styles */ +.phpdebugbar-icon::before, +i.phpdebugbar-icon::before { + content: ""; + display: block; + justify-content: center; + flex-shrink: 0; + width: 1.3em; + height: 1.3em; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + vertical-align: middle; + /* Use mask to allow currentColor to work */ + -webkit-mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-size: contain; + mask-repeat: no-repeat; + mask-position: center; + background-color: currentColor; +} + +.phpdebugbar-icon-brand::before { + -webkit-mask-image: var(--debugbar-icon-brand); + mask-image: var(--debugbar-icon-brand); +} + + a.phpdebugbar-tab span.phpdebugbar-badge.phpdebugbar-visible { + display: inline; + } + a.phpdebugbar-tab span.phpdebugbar-badge.phpdebugbar-important { + background: #ed6868; + color: white; + } + +a.phpdebugbar-close-btn, +a.phpdebugbar-open-btn, +a.phpdebugbar-fullscreen-btn, +a.phpdebugbar-minimize-btn, +a.phpdebugbar-maximize-btn, +a.phpdebugbar-tab.phpdebugbar-tab-history, +a.phpdebugbar-tab.phpdebugbar-tab-settings { + width: 16px; + height: 22px; + position: relative; +} + +a.phpdebugbar-close-btn:after, +a.phpdebugbar-open-btn:after, +a.phpdebugbar-restore-btn:after, +a.phpdebugbar-fullscreen-btn:after, +a.phpdebugbar-minimize-btn:after, +a.phpdebugbar-maximize-btn:after { + content: " "; + display: block; + left: 0; + position: absolute; + top: 0; + width: 100%; + height: 100%; + background-color: var(--debugbar-icons); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; + -webkit-mask-size: 18px 18px; + mask-size: 18px 18px; +} + +a.phpdebugbar-restore-btn:after { + -webkit-mask-size: 24px 24px; + mask-size: 24px 24px; + mask-repeat: no-repeat; + mask-position: center; + position: relative; +} + +a.phpdebugbar-minimize-btn:after { + -webkit-mask-image: var(--debugbar-icon-chevron-down); + mask-image: var(--debugbar-icon-chevron-down); +} + +a.phpdebugbar-maximize-btn:after { + -webkit-mask-image: var(--debugbar-icon-chevron-up); + mask-image: var(--debugbar-icon-chevron-up); +} + +div.phpdebugbar[data-toolbarPosition="top"] a.phpdebugbar-minimize-btn:after { + -webkit-mask-image: var(--debugbar-icon-chevron-up); + mask-image: var(--debugbar-icon-chevron-up); +} + +div.phpdebugbar[data-toolbarPosition="top"] a.phpdebugbar-maximize-btn:after { + -webkit-mask-image: var(--debugbar-icon-chevron-down); + mask-image: var(--debugbar-icon-chevron-down); +} + +a.phpdebugbar-close-btn:after { + -webkit-mask-image: var(--debugbar-icon-x); + mask-image: var(--debugbar-icon-x); +} + +a.phpdebugbar-fullscreen-btn:after { + -webkit-mask-image: var(--debugbar-icon-arrows-maximize); + mask-image: var(--debugbar-icon-arrows-maximize); +} + +div.phpdebugbar.phpdebugbar-fullscreen a.phpdebugbar-fullscreen-btn:after { + -webkit-mask-image: var(--debugbar-icon-arrows-minimize); + mask-image: var(--debugbar-icon-arrows-minimize); +} + +a.phpdebugbar-open-btn:after { + -webkit-mask-image: var(--debugbar-icon-folder-open); + mask-image: var(--debugbar-icon-folder-open); +} + +.phpdebugbar-indicator { + position: relative; + cursor: pointer; +} + .phpdebugbar-indicator span.phpdebugbar-text { + margin-left: 5px; + } + .phpdebugbar-indicator span.phpdebugbar-tooltip { + display: none; + position: absolute; + bottom: 38px; + background: var(--debugbar-header); + border: 1px solid var(--debugbar-header-border); + color: var(--debugbar-header-text); + font-size: 11px; + padding: 2px 6px; + z-index: 100000001; + text-align: center; + white-space: nowrap; + right: 0; + line-height: 1.5; + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + } + .phpdebugbar-indicator:hover span.phpdebugbar-tooltip:not(.phpdebugbar-disabled) { + display: block; + } + .phpdebugbar-indicator span.phpdebugbar-tooltip dl { + display: grid; + grid-gap: 4px 10px; + grid-template-columns: max-content; + } + .phpdebugbar-indicator span.phpdebugbar-tooltip dl dt { + font-weight: bold; + text-align: left; + } + .phpdebugbar-indicator span.phpdebugbar-tooltip dl dd { + margin: 0; + grid-column-start: 2; + text-align: left; + } + +.phpdebugbar .phpdebugbar-datasets-switcher { + float: right; +} + +.phpdebugbar .phpdebugbar-datasets-switcher select { + max-width: 200px; + height: 22px; + padding: 4px 0; + border: none; +} + +.phpdebugbar button, +.phpdebugbar-openhandler button { + color: var(--debugbar-header-text); + background-color: var(--debugbar-header); + border: 1px solid var(--debugbar-header-border); + border-radius: 0.25rem; + margin: 0 5px; + padding: 0 12px; + height: 20px; + line-height: normal; + cursor: pointer; +} + +/* -------------------------------------- */ + +div.phpdebugbar-body { + border-top: 1px solid var(--debugbar-header-border); + position: relative; + height: 300px; +} + +/* -------------------------------------- */ + +div.phpdebugbar-panel { + height: 100%; + overflow: auto; + width: 100%; +} +div.phpdebugbar-panel.phpdebugbar-active { + display: block; +} + +/* -------------------------------------- */ + +div.phpdebugbar-mini-design a.phpdebugbar-tab { + position: relative; + border-right: 1px solid var(--debugbar-header-border); +} + div.phpdebugbar-mini-design a.phpdebugbar-tab span.phpdebugbar-text { + display: none; + } + div.phpdebugbar-mini-design a.phpdebugbar-tab:hover span.phpdebugbar-text { + display: block; + position: absolute; + top: -30px; + background: var(--debugbar-background); + opacity: 1; + border: 1px solid var(--debugbar-header-border); + color: var(--debugbar-header-text); + font-size: 11px; + padding: 2px 6px; + z-index: 100000001; + text-align: center; + right: 0; + line-height: 1.5; + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + } + div.phpdebugbar-mini-design a.phpdebugbar-tab i { + display:inline-block; + } + +/* -------------------------------------- */ + + a.phpdebugbar-tab.phpdebugbar-tab-history { + width: auto; + min-width: 22px; + } + a.phpdebugbar-tab.phpdebugbar-tab-history, + a.phpdebugbar-tab.phpdebugbar-tab-settings { + display: flex; + justify-content: center; + align-items: center; + } + + a.phpdebugbar-tab.phpdebugbar-tab-history .phpdebugbar-text, + a.phpdebugbar-tab.phpdebugbar-tab-settings .phpdebugbar-text { + display: none; + white-space: nowrap; + } + a.phpdebugbar-tab.phpdebugbar-tab-history i, + a.phpdebugbar-tab.phpdebugbar-tab-settings i{ + display:inline-block; + } + .phpdebugbar-widgets-dataset-history table { + width: 100%; + table-layout: fixed; + } + .phpdebugbar-widgets-dataset-history table th { + font-weight: bold; + } + .phpdebugbar-widgets-dataset-history table td, .phpdebugbar-widgets-dataset-history table th { + padding: 6px 3px; + border-bottom: 1px solid var(--debugbar-border); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .phpdebugbar-widgets-dataset-history table td a{ + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .phpdebugbar-widgets-dataset-history table tr.phpdebugbar-widgets-active { + background: var(--debugbar-active); + color: var(--debugbar-active-text); + } + .phpdebugbar-widgets-dataset-history span.phpdebugbar-badge { + margin: 0 5px 0 2px; + font-size: 11px; + line-height: 14px; + padding: 0 6px; + background: var(--debugbar-badge); + border-radius: 4px; + color: var(--debugbar-badge-text); + font-weight: normal; + text-shadow: none; + vertical-align: middle; + } + .phpdebugbar-widgets-dataset-history .phpdebugbar-widgets-dataset-actions { + text-align: center; + padding: 7px 0; + position: sticky; + top: 0; + background: var(--debugbar-background); + } + .phpdebugbar-widgets-dataset-history .phpdebugbar-widgets-dataset-actions a { + margin: 0 10px; + } + .phpdebugbar-widgets-dataset-history .phpdebugbar-widgets-dataset-actions input { + margin: 5px; + } + + +/* -------------------------------------- */ + + +.phpdebugbar-settings .phpdebugbar-form-row { + display: block; + border-top: 1px solid var(--debugbar-border); + min-height: 17px; + padding: 5px 10px; +} +.phpdebugbar-settings .phpdebugbar-form-label { + width: 200px; + font-weight: bold; + display: inline-block; + clear: none; +} +.phpdebugbar-settings .phpdebugbar-form-input { + font-weight: bold; + display: inline-block; + clear: none; +} +.phpdebugbar-settings input[type="text"], +.phpdebugbar-settings select +{ + margin: 0 5px; + min-width: 200px; +} + +.phpdebugbar-settings input[type="checkbox"] +{ + margin: 0 5px; +} + diff --git a/resources/debugbar.js b/resources/debugbar.js new file mode 100644 index 000000000..23919ae47 --- /dev/null +++ b/resources/debugbar.js @@ -0,0 +1,1978 @@ +window.PhpDebugBar = window.PhpDebugBar || {}; + +(function () { + const PhpDebugBar = window.PhpDebugBar; + PhpDebugBar.utils = PhpDebugBar.utils || {}; + + /** + * Returns the value from an object property. + * Using dots in the key, it is possible to retrieve nested property values. + * + * Note: This returns `defaultValue` only when the path is missing (null/undefined), + * not when the value is falsy (0/false/""). + * + * @param {Record} dict + * @param {string} key + * @param {any} [defaultValue] + * @returns {any} + */ + const getDictValue = PhpDebugBar.utils.getDictValue = function (dict, key, defaultValue) { + if (dict === null || dict === undefined) { + return defaultValue; + } + + const parts = String(key).split('.'); + let d = dict; + + for (const part of parts) { + if (d === null || d === undefined) { + return defaultValue; + } + d = d[part]; + if (d === undefined) { + return defaultValue; + } + } + + return d; + }; + + /** + * Returns a prefixed CSS class name (or selector). + * + * If `cls` contains spaces, each class is prefixed. + * If `cls` starts with ".", the dot is preserved (selector form). + * + * @param {string} cls + * @param {string} prefix + * @returns {string} + */ + PhpDebugBar.utils.csscls = function (cls, prefix) { + const s = String(cls).trim(); + + if (s.includes(' ')) { + return s + .split(/\s+/) + .filter(Boolean) + .map(c => PhpDebugBar.utils.csscls(c, prefix)) + .join(' '); + } + + if (s.startsWith('.')) { + return `.${prefix}${s.slice(1)}`; + } + + return prefix + s; + }; + + /** + * Creates a partial function of csscls where the second + * argument is already defined + * + * @param {string} prefix + * @return {Function} + */ + PhpDebugBar.utils.makecsscls = function (prefix) { + return cls => PhpDebugBar.utils.csscls(cls, prefix); + }; + + const csscls = PhpDebugBar.utils.makecsscls('phpdebugbar-'); + + PhpDebugBar.utils.sfDump = function (el) { + if (typeof window.Sfdump == 'function') { + el.querySelectorAll('pre.sf-dump[id]').forEach((pre) => { + window.Sfdump(pre.id, { maxDepth: 0 }); + }); + } + }; + + PhpDebugBar.utils.schedule = function (cb) { + if (window.requestIdleCallback) { + return window.requestIdleCallback(cb, { timeout: 1000 }); + } + + return setTimeout(cb, 0); + }; + + // ------------------------------------------------------------------ + + /** + * Base class for all elements with a visual component + */ + class Widget { + get tagName() { + return 'div'; + } + + constructor(options = {}) { + this._attributes = { ...this.defaults }; + this._boundAttributes = {}; + this.el = document.createElement(this.tagName); + if (this.className) { + this.el.classList.add(...this.className.split(' ')); + } + this.initialize(options); + this.render(); + } + + /** + * Called after the constructor + * + * @param {object} options + */ + initialize(options) { + this.set(options); + } + + /** + * Called after the constructor to render the element + */ + render() {} + + /** + * Sets the value of an attribute + * + * @param {string | object} attr Attribute name or object with multiple attributes + * @param {*} [value] Attribute value (optional if attr is an object) + */ + set(attr, value) { + const attrs = typeof attr === 'string' ? { [attr]: value } : attr; + + const callbacks = []; + for (const attr in attrs) { + value = attrs[attr]; + this._attributes[attr] = value; + if (this._boundAttributes[attr]) { + for (const callback of this._boundAttributes[attr]) { + // Make sure to run the callback only once per attribute change + if (!callbacks.includes(callback)) { + callback.call(this, value); + callbacks.push(callback); + } + } + } + } + } + + /** + * Checks if an attribute exists and is not null + * + * @param {string} attr + * @return {boolean} + */ + has(attr) { + return this._attributes[attr] !== undefined && this._attributes[attr] !== null; + } + + /** + * Returns the value of an attribute + * + * @param {string} attr + * @return {*} + */ + get(attr) { + return this._attributes[attr]; + } + + /** + * Registers a callback function that will be called whenever the value of the attribute changes + * + * If cb is a HTMLElement element, textContent will be used to fill the element + * + * @param {string | Array} attr + * @param {Function | HTMLElement} cb + */ + bindAttr(attr, cb) { + if (Array.isArray(attr)) { + for (const a of attr) { + this.bindAttr(a, cb); + } + return; + } + + if (!this._boundAttributes[attr]) { + this._boundAttributes[attr] = []; + } + if (cb instanceof HTMLElement) { + const el = cb; + cb = value => el.textContent = value || ''; + } + this._boundAttributes[attr].push(cb); + if (this.has(attr)) { + cb.call(this, this._attributes[attr]); + } + } + + /** + * Creates a subclass + * + * Code from Backbone.js + * + * @param {object} props Prototype properties + * @return {Function} + */ + static extend(props) { + const Parent = this; + class Child extends Parent {} + + // Use defineProperties to handle getters/setters properly + for (const key in props) { + const descriptor = Object.getOwnPropertyDescriptor(props, key); + if (descriptor) { + Object.defineProperty(Child.prototype, key, descriptor); + } + } + Object.assign(Child, Parent); + Child.__super__ = Parent.prototype; + + return Child; + } + } + Widget.prototype.defaults = {}; + + PhpDebugBar.Widget = Widget; + + // ------------------------------------------------------------------ + + /** + * Tab + * + * A tab is composed of a tab label which is always visible and + * a tab panel which is visible only when the tab is active. + * + * The panel must contain a widget. A widget is an object which has + * an element property containing something appendable to a HTMLElement object. + * + * Options: + * - title + * - badge + * - widget + * - data: forward data to widget data + */ + class Tab extends Widget { + get className() { + return csscls('panel'); + } + + render() { + this.active = false; + this.tab = document.createElement('a'); + this.tab.classList.add(csscls('tab')); + + this.icon = document.createElement('i'); + this.tab.append(this.icon); + this.bindAttr('icon', function (icon) { + if (icon) { + this.icon.className = `phpdebugbar-icon phpdebugbar-icon-${icon}`; + } else { + this.icon.className = ''; + } + }); + + const title = document.createElement('span'); + title.classList.add(csscls('text')); + this.tab.append(title); + this.bindAttr('title', title); + + this.badge = document.createElement('span'); + this.badge.classList.add(csscls('badge')); + this.tab.append(this.badge); + + this.bindAttr('badge', function (value) { + if (value !== null) { + this.badge.textContent = value; + this.badge.classList.add(csscls('visible')); + } else { + this.badge.classList.remove(csscls('visible')); + } + }); + + this.bindAttr('widget', function (widget) { + this.el.innerHTML = ''; + this.el.append(widget.el); + }); + + this.widgetRendered = false; + this.bindAttr('data', function (data) { + if (this.has('widget')) { + this.tab.setAttribute('data-empty', Object.keys(data).length === 0 || data.count === 0); + if (!this.widgetRendered && this.active && data != null) { + this.renderWidgetData(); + } else { + this.widgetRendered = false; + } + } + }); + } + + renderWidgetData() { + const data = this.get('data'); + const widget = this.get('widget'); + if (data == null || !widget) { + return; + } + + widget.set('data', data); + PhpDebugBar.utils.schedule(() => { + PhpDebugBar.utils.sfDump(widget.el); + }); + + this.widgetRendered = true; + } + + show() { + const activeClass = csscls('active'); + this.tab.classList.add(activeClass); + this.tab.hidden = false; + this.el.classList.add(activeClass); + this.el.hidden = false; + this.active = true; + + if (!this.widgetRendered) { + this.renderWidgetData(); + } + } + + hide() { + const activeClass = csscls('active'); + this.tab.classList.remove(activeClass); + this.el.classList.remove(activeClass); + this.el.hidden = true; + this.active = false; + } + } + + // ------------------------------------------------------------------ + + /** + * Indicator + * + * An indicator is a text and an icon to display single value information + * right inside the always visible part of the debug bar + * + * Options: + * - icon + * - title + * - tooltip + * - data: alias of title + */ + class Indicator extends Widget { + get tagName() { + return 'span'; + } + + get className() { + return csscls('indicator'); + } + + render() { + this.icon = document.createElement('i'); + this.el.append(this.icon); + this.bindAttr('icon', function (icon) { + if (icon) { + this.icon.className = `phpdebugbar-icon phpdebugbar-icon-${icon}`; + } else { + this.icon.className = ''; + } + }); + + this.bindAttr('link', function (link) { + if (link) { + this.el.addEventListener('click', () => { + this.get('debugbar').showTab(link); + }); + this.el.style.cursor = 'pointer'; + } else { + this.el.style.cursor = ''; + } + }); + + const textSpan = document.createElement('span'); + textSpan.classList.add(csscls('text')); + this.el.append(textSpan); + this.bindAttr(['title', 'data'], textSpan); + + this.tooltip = document.createElement('span'); + this.tooltip.classList.add(csscls('tooltip'), csscls('disabled')); + this.el.append(this.tooltip); + this.bindAttr('tooltip', function (tooltip) { + if (tooltip) { + if (Array.isArray(tooltip) || typeof tooltip === 'object') { + const dl = document.createElement('dl'); + for (const [key, value] of Object.entries(tooltip)) { + const dt = document.createElement('dt'); + dt.textContent = key; + dl.append(dt); + + const dd = document.createElement('dd'); + dd.textContent = value; + dl.append(dd); + } + this.tooltip.innerHTML = ''; + this.tooltip.append(dl); + this.tooltip.classList.remove(csscls('disabled')); + } else { + this.tooltip.textContent = tooltip; + this.tooltip.classList.remove(csscls('disabled')); + } + } else { + this.tooltip.classList.add(csscls('disabled')); + } + }); + } + } + + /** + * Displays datasets in a table + * + */ + class Settings extends Widget { + get tagName() { + return 'form'; + } + + get className() { + return csscls('settings'); + } + + initialize(options) { + this.set(options); + + const debugbar = this.get('debugbar'); + this.settings = JSON.parse(localStorage.getItem('phpdebugbar-settings')) || {}; + + for (const key in debugbar.options) { + if (key in this.settings) { + debugbar.options[key] = this.settings[key]; + } + + // Theme requires dark/light mode detection + if (key === 'theme') { + debugbar.setTheme(debugbar.options[key]); + } else { + debugbar.el.setAttribute(`data-${key}`, debugbar.options[key]); + } + } + } + + clearSettings() { + const debugbar = this.get('debugbar'); + + // Remove item from storage + localStorage.removeItem('phpdebugbar-settings'); + localStorage.removeItem('phpdebugbar-ajaxhandler-autoshow'); + this.settings = {}; + + // Reset options + debugbar.options = { ...debugbar.defaultOptions }; + + // Reset ajax handler + if (debugbar.ajaxHandler) { + const autoshow = debugbar.ajaxHandler.defaultAutoShow; + debugbar.ajaxHandler.setAutoShow(autoshow); + this.set('autoshow', autoshow); + if (debugbar.controls.__datasets) { + debugbar.controls.__datasets.get('widget').set('autoshow', this.autoshow.checked); + } + } + + this.initialize(debugbar.options); + } + + storeSetting(key, value) { + this.settings[key] = value; + + const debugbar = this.get('debugbar'); + debugbar.options[key] = value; + if (key !== 'theme') { + debugbar.el.setAttribute(`data-${key}`, value); + } + + localStorage.setItem('phpdebugbar-settings', JSON.stringify(this.settings)); + } + + render() { + this.el.innerHTML = ''; + + const debugbar = this.get('debugbar'); + const self = this; + + const fields = {}; + + // Set Theme + const themeSelect = document.createElement('select'); + themeSelect.innerHTML = '' + + '' + + ''; + themeSelect.value = debugbar.options.theme; + themeSelect.addEventListener('change', function () { + self.storeSetting('theme', this.value); + debugbar.setTheme(this.value); + }); + fields.Theme = themeSelect; + + // Open Button Position + const positionSelect = document.createElement('select'); + positionSelect.innerHTML = '' + + '' + + '' + + ''; + positionSelect.value = debugbar.options.openBtnPosition; + positionSelect.addEventListener('change', function () { + self.storeSetting('openBtnPosition', this.value); + if (this.value === 'topLeft' || this.value === 'topRight') { + self.storeSetting('toolbarPosition', 'top'); + } else { + self.storeSetting('toolbarPosition', 'bottom'); + } + self.get('debugbar').recomputeBottomOffset(); + }); + fields['Toolbar Position'] = positionSelect; + + // Hide Empty Tabs + this.hideEmptyTabs = document.createElement('input'); + this.hideEmptyTabs.type = 'checkbox'; + this.hideEmptyTabs.checked = debugbar.options.hideEmptyTabs; + this.hideEmptyTabs.addEventListener('click', function () { + self.storeSetting('hideEmptyTabs', this.checked); + // Reset button size + self.get('debugbar').respCSSSize = 0; + self.get('debugbar').resize(); + }); + + const hideEmptyTabsLabel = document.createElement('label'); + hideEmptyTabsLabel.append(this.hideEmptyTabs, 'Hide empty tabs until they have data'); + fields['Hide Empty Tabs'] = hideEmptyTabsLabel; + + // Fullscreen button + const fullscreenCheck = document.createElement('input'); + fullscreenCheck.type = 'checkbox'; + fullscreenCheck.checked = debugbar.options.showFullscreenBtn; + fullscreenCheck.addEventListener('click', function () { + self.storeSetting('showFullscreenBtn', this.checked); + debugbar.toggleFullscreenBtn(this.checked); + }); + const fullscreenLabel = document.createElement('label'); + fullscreenLabel.append(fullscreenCheck, 'Show fullscreen button in toolbar'); + fields.Fullscreen = fullscreenLabel; + + // Autoshow + this.autoshow = document.createElement('input'); + this.autoshow.type = 'checkbox'; + this.autoshow.checked = debugbar.ajaxHandler && debugbar.ajaxHandler.autoShow; + this.autoshow.addEventListener('click', function () { + if (debugbar.ajaxHandler) { + debugbar.ajaxHandler.setAutoShow(this.checked); + } + if (debugbar.controls.__datasets) { + debugbar.controls.__datasets.get('widget').set('autoshow', this.checked); + } + // Update dataset switcher widget + if (debugbar.datasetSwitcherWidget) { + debugbar.datasetSwitcherWidget.set('autoshow', this.checked); + } + }); + + this.bindAttr('autoshow', function () { + this.autoshow.checked = this.get('autoshow'); + const row = this.autoshow.closest(`.${csscls('form-row')}`); + if (row) { + row.style.display = ''; + } + }); + + const autoshowLabel = document.createElement('label'); + autoshowLabel.append(this.autoshow, 'Automatically show new incoming Ajax requests'); + fields.Autoshow = autoshowLabel; + + // Reset button + const resetButton = document.createElement('button'); + resetButton.textContent = 'Reset settings'; + resetButton.addEventListener('click', (e) => { + e.preventDefault(); + self.clearSettings(); + self.render(); + }); + fields['Reset to defaults'] = resetButton; + + for (const [key, value] of Object.entries(fields)) { + const formRow = document.createElement('div'); + formRow.classList.add(csscls('form-row')); + + const formLabel = document.createElement('div'); + formLabel.classList.add(csscls('form-label')); + formLabel.textContent = key; + formRow.append(formLabel); + + const formInput = document.createElement('div'); + formInput.classList.add(csscls('form-input')); + if (value instanceof HTMLElement) { + formInput.append(value); + } else { + formInput.innerHTML = value; + } + formRow.append(formInput); + + self.el.append(formRow); + } + + if (!debugbar.ajaxHandler) { + this.autoshow.closest(`.${csscls('form-row')}`).style.display = 'none'; + } + } + } + + // ------------------------------------------------------------------ + + /** + * Dataset title formater + * + * Formats the title of a dataset for the select box + */ + class DatasetTitleFormater { + constructor(debugbar) { + this.debugbar = debugbar; + } + + /** + * Formats the title of a dataset + * + * @param {string} id + * @param {object} data + * @param {string} suffix + * @param {number} nb + * @return {string} + */ + format(id, data, suffix, nb) { + suffix = suffix ? ` ${suffix}` : ''; + nb = nb || Object.keys(this.debugbar.datasets).length; + + if (data.__meta === undefined) { + return `#${nb}${suffix}`; + } + + const uri = data.__meta.uri.split('/'); + let filename = uri.pop(); + + // URI ends in a trailing /, avoid returning an empty string + if (!filename) { + filename = `${uri.pop() || ''}/`; // add the trailing '/' back + } + + // filename is a number, path could be like /action/{id} + if (uri.length && !Number.isNaN(filename)) { + filename = `${uri.pop()}/${filename}`; + } + + // truncate the filename in the label, if it's too long + const maxLength = 150; + if (filename.length > maxLength) { + filename = `${filename.substr(0, maxLength)}...`; + } + + const label = `#${nb} ${filename}${suffix} (${data.__meta.datetime.split(' ')[1]})`; + return label; + } + } + + PhpDebugBar.DatasetTitleFormater = DatasetTitleFormater; + + // ------------------------------------------------------------------ + + /** + * DebugBar + * + * Creates a bar that appends itself to the body of your page + * and sticks to the bottom. + * + * The bar can be customized by adding tabs and indicators. + * A data map is used to fill those controls with data provided + * from datasets. + */ + class DebugBar extends Widget { + get className() { + return `phpdebugbar`; + } + + initialize(options = {}) { + this.options = Object.assign({ + bodyBottomInset: true, + theme: 'auto', + toolbarPosition: 'bottom', + openBtnPosition: 'bottomLeft', + hideEmptyTabs: false, + showFullscreenBtn: false, + spaNavigationEvents: [] + }, options); + this.defaultOptions = { ...this.options }; + this.controls = {}; + this.dataMap = {}; + this.datasets = {}; + this.firstTabName = null; + this.activePanelName = null; + this.activeDatasetId = null; + this.pendingDataSetId = null; + this.datesetTitleFormater = new DatasetTitleFormater(this); + const bodyStyles = window.getComputedStyle(document.body); + this.bodyPaddingBottomHeight = Number.parseInt(bodyStyles.paddingBottom); + this.bodyPaddingTopHeight = Number.parseInt(bodyStyles.paddingTop); + + try { + this.isIframe = window.self !== window.top && window.top.PhpDebugBar && window.top.PhpDebugBar; + } catch (_error) { + this.isIframe = false; + } + this.registerResizeHandler(); + this.registerMediaListener(); + this.registerNavigationListener(); + + // Attach settings + this.settingsControl = new PhpDebugBar.DebugBar.Tab({ icon: 'adjustments-horizontal', title: 'Settings', widget: new Settings({ + debugbar: this + }) }); + } + + /** + * Register resize event, for resize debugbar with reponsive css. + * + * @this {DebugBar} + */ + registerResizeHandler() { + if (this.resize.bind === undefined || this.isIframe) { + return; + } + + const f = this.resize.bind(this); + this.respCSSSize = 0; + window.addEventListener('resize', f); + setTimeout(f, 20); + } + + registerMediaListener() { + const mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)'); + mediaQueryList.addEventListener('change', (event) => { + if (this.options.theme === 'auto') { + this.setTheme('auto'); + } + }); + } + + /** + * Register navigation event listeners for SPA frameworks. + * + * Listens for events configured via the `spaNavigationEvents` option + * and recalculates body padding after navigation completes. + */ + registerNavigationListener() { + const events = this.options.spaNavigationEvents; + if (!events || !events.length) { + return; + } + + for (const eventName of events) { + document.addEventListener(eventName, () => { + this.recalculateBodyPadding(); + }); + } + } + + /** + * Recalculates and caches the body's original padding values. + */ + recalculateBodyPadding() { + if (!this.options.bodyBottomInset) { + return; + } + + // Clear inline styles to read the page's actual CSS values + document.body.style.paddingTop = ''; + document.body.style.paddingBottom = ''; + + // Read the new page's padding values + const bodyStyles = window.getComputedStyle(document.body); + this.bodyPaddingTopHeight = Number.parseFloat(bodyStyles.paddingTop); + this.bodyPaddingBottomHeight = Number.parseFloat(bodyStyles.paddingBottom); + + // Reapply the debugbar offset with the new values + this.recomputeBottomOffset(); + } + + setTheme(theme) { + this.options.theme = theme; + + if (theme === 'auto') { + const mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)'); + theme = mediaQueryList.matches ? 'dark' : 'light'; + } + + this.el.setAttribute('data-theme', theme); + if (this.openHandler) { + this.openHandler.el.setAttribute('data-theme', theme); + } + if (this.datasetSwitcherWidget && this.datasetSwitcherWidget.panel) { + this.datasetSwitcherWidget.panel.setAttribute('data-theme', theme); + } + } + + /** + * Resizes the debugbar to fit the current browser window + */ + resize() { + if (this.isIframe) { + return; + } + + let contentSize = this.respCSSSize; + if (this.respCSSSize === 0) { + const visibleChildren = Array.from(this.header.children).filter((el) => { + return el.offsetParent !== null; + }); + for (const child of visibleChildren) { + const styles = window.getComputedStyle(child); + contentSize += child.offsetWidth + + Number.parseFloat(styles.marginLeft) + + Number.parseFloat(styles.marginRight); + } + } + + const currentSize = this.header.offsetWidth; + const cssClass = csscls('mini-design'); + const bool = this.header.classList.contains(cssClass); + + if (currentSize <= contentSize && !bool) { + this.respCSSSize = contentSize; + this.header.classList.add(cssClass); + } else if (contentSize < currentSize && bool) { + this.respCSSSize = 0; + this.header.classList.remove(cssClass); + } + + // Reset height to ensure bar is still visible + const currentHeight = this.body.clientHeight || Number.parseInt(localStorage.getItem('phpdebugbar-height'), 10) || 300; + this.setHeight(currentHeight); + } + + /** + * Initialiazes the UI + * + * @this {DebugBar} + */ + render() { + if (this.isIframe) { + this.el.hidden = true; + } + + const self = this; + document.body.append(this.el); + + this.dragCapture = document.createElement('div'); + this.dragCapture.classList.add(csscls('drag-capture')); + this.el.append(this.dragCapture); + + this.resizeHandle = document.createElement('div'); + this.resizeHandle.classList.add(csscls('resize-handle')); + this.resizeHandle.classList.add(csscls('resize-handle-top')); + this.el.append(this.resizeHandle); + + this.header = document.createElement('div'); + this.header.classList.add(csscls('header')); + this.el.append(this.header); + + this.headerBtn = document.createElement('a'); + this.headerBtn.classList.add(csscls('restore-btn')); + this.header.append(this.headerBtn); + this.headerBtn.addEventListener('click', () => { + self.close(); + }); + + this.headerLeft = document.createElement('div'); + this.headerLeft.classList.add(csscls('header-left')); + this.header.append(this.headerLeft); + + this.headerRight = document.createElement('div'); + this.headerRight.classList.add(csscls('header-right')); + this.header.append(this.headerRight); + + this.body = document.createElement('div'); + this.body.classList.add(csscls('body')); + this.el.append(this.body); + this.recomputeBottomOffset(); + + this.resizeHandleBottom = document.createElement('div'); + this.resizeHandleBottom.classList.add(csscls('resize-handle')); + this.resizeHandleBottom.classList.add(csscls('resize-handle-bottom')); + this.el.append(this.resizeHandleBottom); + + // dragging of resize handle + let pos_y, orig_h; + const mousemove = (e) => { + const h = orig_h + (pos_y - e.pageY); + self.setHeight(h); + }; + const mousemoveBottom = (e) => { + const h = orig_h - (pos_y - e.pageY); + self.setHeight(h); + }; + const mouseup = () => { + document.removeEventListener('mousemove', mousemove); + document.removeEventListener('mousemove', mousemoveBottom); + document.removeEventListener('mouseup', mouseup); + self.dragCapture.style.display = 'none'; + }; + this.resizeHandle.addEventListener('mousedown', (e) => { + orig_h = self.body.offsetHeight; + pos_y = e.pageY; + document.addEventListener('mousemove', mousemove); + document.addEventListener('mouseup', mouseup); + self.dragCapture.style.display = ''; + e.preventDefault(); + }); + this.resizeHandleBottom.addEventListener('mousedown', (e) => { + orig_h = self.body.offsetHeight; + pos_y = e.pageY; + document.addEventListener('mousemove', mousemoveBottom); + document.addEventListener('mouseup', mouseup); + self.dragCapture.style.display = ''; + e.preventDefault(); + }); + + // close button + this.closebtn = document.createElement('a'); + this.closebtn.classList.add(csscls('close-btn')); + this.headerRight.append(this.closebtn); + this.closebtn.addEventListener('click', () => { + self.close(); + }); + + // fullscreen button (visually left of close) + this.fullscreenbtn = document.createElement('a'); + this.fullscreenbtn.classList.add(csscls('fullscreen-btn')); + this.fullscreenbtn.hidden = !this.options.showFullscreenBtn; + this.headerRight.append(this.fullscreenbtn); + this.fullscreenbtn.addEventListener('click', () => { + self.toggleFullscreen(); + }); + + // minimize button + this.minimizebtn = document.createElement('a'); + this.minimizebtn.classList.add(csscls('minimize-btn')); + this.minimizebtn.hidden = !this.isMinimized(); + this.headerRight.append(this.minimizebtn); + this.minimizebtn.addEventListener('click', () => { + self.minimize(); + }); + + // maximize button + this.maximizebtn = document.createElement('a'); + this.maximizebtn.classList.add(csscls('maximize-btn')); + this.maximizebtn.hidden = this.isMinimized(); + this.headerRight.append(this.maximizebtn); + this.maximizebtn.addEventListener('click', () => { + self.restore(); + }); + + // restore button + this.restorebtn = document.createElement('a'); + this.restorebtn.classList.add(csscls('restore-btn')); + this.restorebtn.hidden = true; + this.el.append(this.restorebtn); + this.restorebtn.addEventListener('click', () => { + self.restore(); + }); + + // open button + this.openbtn = document.createElement('a'); + this.openbtn.classList.add(csscls('open-btn')); + this.openbtn.hidden = true; + this.headerRight.append(this.openbtn); + this.openbtn.addEventListener('click', () => { + self.openHandler.show((id, dataset) => { + self.addDataSet(dataset, id, '(opened)'); + }); + }); + + // select box for data sets (only if AJAX handler is not used) + this.datasetsSelectSpan = document.createElement('span'); + this.datasetsSelectSpan.classList.add(csscls('datasets-switcher')); + this.datasetsSelectSpan.setAttribute('name', 'datasets-switcher'); + this.datasetsSelect = document.createElement('select'); + this.datasetsSelect.hidden = true; + + this.datasetsSelectSpan.append(this.datasetsSelect); + + this.headerRight.append(this.datasetsSelectSpan); + this.datasetsSelect.addEventListener('change', function () { + self.showDataSet(this.value); + }); + + this.controls.__settings = this.settingsControl; + this.settingsControl.tab.classList.add(csscls('tab-settings')); + this.settingsControl.tab.setAttribute('data-collector', '__settings'); + this.settingsControl.el.setAttribute('data-collector', '__settings'); + this.settingsControl.el.hidden = true; + + this.maximizebtn.after(this.settingsControl.tab); + this.settingsControl.tab.hidden = false; + this.settingsControl.tab.addEventListener('click', () => { + if (!this.isMinimized() && this.activePanelName === '__settings' && !this.isFullscreen()) { + this.minimize(); + } else { + this.showTab('__settings'); + this.settingsControl.get('widget').render(); + } + }); + this.body.append(this.settingsControl.el); + } + + /** + * Sets the height of the debugbar body section + * Forces the height to lie within a reasonable range + * Stores the height in local storage so it can be restored + * Resets the document body bottom offset + * + * @this {DebugBar} + */ + setHeight(height) { + if (this.isFullscreen()) return; + const min_h = 40; + const max_h = window.innerHeight - this.header.offsetHeight - 10; + height = Math.min(height, max_h); + height = Math.max(height, min_h); + this.body.style.height = `${height}px`; + localStorage.setItem('phpdebugbar-height', height); + this.recomputeBottomOffset(); + } + + /** + * Restores the state of the DebugBar using localStorage + * This is not called by default in the constructor and + * needs to be called by subclasses in their init() method + * + * @this {DebugBar} + */ + restoreState() { + if (this.isIframe) { + return; + } + // bar height + const height = localStorage.getItem('phpdebugbar-height'); + this.setHeight(Number.parseInt(height) || this.body.offsetHeight); + + // bar visibility + const open = localStorage.getItem('phpdebugbar-open'); + if (open && open === '0') { + this.close(); + } else { + const visible = localStorage.getItem('phpdebugbar-visible'); + if (visible && visible === '1') { + const tab = localStorage.getItem('phpdebugbar-tab'); + if (this.isTab(tab)) { + this.showTab(tab); + } else { + this.showTab(); + } + } else { + this.minimize(); + } + } + + // Restore fullscreen if it was active this session + if (this.options.showFullscreenBtn && sessionStorage.getItem('phpdebugbar-fullscreen') === '1') { + this.toggleFullscreen(); + } + } + + /** + * Creates and adds a new tab + * + * @this {DebugBar} + * @param {string} name Internal name + * @param {object} widget A widget object with an element property + * @param {string} title The text in the tab, if not specified, name will be used + * @return {Tab} + */ + createTab(name, widget, title) { + const tab = new Tab({ + title: title || (name.replace(/[_-]/g, ' ').charAt(0).toUpperCase() + name.slice(1)), + widget + }); + return this.addTab(name, tab); + } + + /** + * Adds a new tab + * + * @this {DebugBar} + * @param {string} name Internal name + * @param {Tab} tab Tab object + * @return {Tab} + */ + addTab(name, tab) { + if (this.isControl(name)) { + throw new Error(`${name} already exists`); + } + + const self = this; + this.headerLeft.append(tab.tab); + tab.tab.addEventListener('click', () => { + if (!self.isMinimized() && self.activePanelName === name && !self.isFullscreen()) { + self.minimize(); + } else { + self.restore(); + self.showTab(name); + } + }); + tab.tab.setAttribute('data-empty', true); + tab.tab.setAttribute('data-collector', name); + tab.el.setAttribute('data-collector', name); + this.body.append(tab.el); + + this.controls[name] = tab; + if (this.firstTabName === null) { + this.firstTabName = name; + } + return tab; + } + + /** + * Creates and adds an indicator + * + * @this {DebugBar} + * @param {string} name Internal name + * @param {string} icon + * @param {string | object} tooltip + * @param {string} position "right" or "left", default is "right" + * @return {Indicator} + */ + createIndicator(name, icon, tooltip, position) { + const indicator = new Indicator({ + icon, + tooltip + }); + return this.addIndicator(name, indicator, position); + } + + /** + * Adds an indicator + * + * @this {DebugBar} + * @param {string} name Internal name + * @param {Indicator} indicator Indicator object + * @return {Indicator} + */ + addIndicator(name, indicator, position) { + if (this.isControl(name)) { + throw new Error(`${name} already exists`); + } + + indicator.set('debugbar', this); + + if (position === 'left') { + this.headerLeft.prepend(indicator.el); + } else { + this.headerRight.append(indicator.el); + } + + this.controls[name] = indicator; + return indicator; + } + + /** + * Returns a control + * + * @param {string} name + * @return {object} + */ + getControl(name) { + if (this.isControl(name)) { + return this.controls[name]; + } + } + + /** + * Checks if there's a control under the specified name + * + * @this {DebugBar} + * @param {string} name + * @return {boolean} + */ + isControl(name) { + return this.controls[name] !== undefined; + } + + /** + * Checks if a tab with the specified name exists + * + * @this {DebugBar} + * @param {string} name + * @return {boolean} + */ + isTab(name) { + return this.isControl(name) && this.controls[name] instanceof Tab; + } + + /** + * Checks if an indicator with the specified name exists + * + * @this {DebugBar} + * @param {string} name + * @return {boolean} + */ + isIndicator(name) { + return this.isControl(name) && this.controls[name] instanceof Indicator; + } + + /** + * Removes all tabs and indicators from the debug bar and hides it + * + * @this {DebugBar} + */ + reset() { + this.minimize(); + for (const [name, control] of Object.entries(this.controls)) { + if (this.isTab(name)) { + control.tab.remove(); + } + control.el.remove(); + } + this.controls = {}; + } + + /** + * Open the debug bar and display the specified tab + * + * @this {DebugBar} + * @param {string} name If not specified, display the first tab + */ + showTab(name) { + if (!name) { + if (this.activePanelName) { + name = this.activePanelName; + } else { + name = this.firstTabName; + } + } + + if (!this.isTab(name)) { + throw new Error(`Unknown tab '${name}'`); + } + + this.body.hidden = false; + + this.recomputeBottomOffset(); + + for (const [controleName, control] of Object.entries(this.controls)) { + if (control instanceof Tab) { + if (controleName === name) { + control.show(); + } else { + control.hide(); + } + } + } + + this.activePanelName = name; + + this.el.classList.remove(csscls('minimized')); + localStorage.setItem('phpdebugbar-visible', '1'); + localStorage.setItem('phpdebugbar-tab', name); + + this.maximize(); + } + + /** + * Hide panels and minimize the debug bar + * + * @this {DebugBar} + */ + minimize() { + this.exitFullscreen(); + const activeClass = csscls('active'); + const headerActives = this.header.querySelectorAll(`:scope > div > .${activeClass}`); + for (const el of headerActives) { + el.classList.remove(activeClass); + } + this.body.hidden = true; + this.minimizebtn.hidden = true; + this.maximizebtn.hidden = false; + + this.recomputeBottomOffset(); + localStorage.setItem('phpdebugbar-visible', '0'); + this.el.classList.add(csscls('minimized')); + this.resize(); + } + + /** + * Show panels and maxime the debug bar + * + * @this {DebugBar} + */ + maximize() { + this.header.hidden = false; + this.restorebtn.hidden = true; + this.body.hidden = false; + this.minimizebtn.hidden = false; + this.maximizebtn.hidden = true; + + this.recomputeBottomOffset(); + localStorage.setItem('phpdebugbar-visible', '1'); + localStorage.setItem('phpdebugbar-open', '1'); + this.el.classList.remove(csscls('minimized')); + this.el.classList.remove(csscls('closed')); + + this.resize(); + } + + /** + * Checks if the panel is minimized + * + * @return {boolean} + */ + isMinimized() { + return this.el.classList.contains(csscls('minimized')); + } + + /** + * Toggle fullscreen mode β€” debugbar fills the entire browser viewport + */ + toggleFullscreen() { + if (this.isFullscreen()) { + this.exitFullscreen(); + } else { + this._preFullscreenHeight = this.body.offsetHeight; + this.el.classList.add(csscls('fullscreen')); + this.body.style.height = ''; + sessionStorage.setItem('phpdebugbar-fullscreen', '1'); + this.recomputeBottomOffset(); + } + } + + exitFullscreen() { + if (!this.isFullscreen()) return; + this.el.classList.remove(csscls('fullscreen')); + if (this._preFullscreenHeight) { + this.body.style.height = `${this._preFullscreenHeight}px`; + } + sessionStorage.removeItem('phpdebugbar-fullscreen'); + this.recomputeBottomOffset(); + } + + isFullscreen() { + return this.el.classList.contains(csscls('fullscreen')); + } + + toggleFullscreenBtn(show) { + this.fullscreenbtn.hidden = !show; + if (!show) this.exitFullscreen(); + } + + /** + * Close the debug bar + * + * @this {DebugBar} + */ + close() { + this.exitFullscreen(); + this.header.hidden = true; + this.body.hidden = true; + this.restorebtn.hidden = false; + localStorage.setItem('phpdebugbar-open', '0'); + this.el.classList.add(csscls('closed')); + this.recomputeBottomOffset(); + } + + /** + * Checks if the panel is closed + * + * @return {boolean} + */ + isClosed() { + return this.el.classList.contains(csscls('closed')); + } + + /** + * Restore the debug bar + * + * @this {DebugBar} + */ + restore() { + const tab = localStorage.getItem('phpdebugbar-tab'); + if (this.pendingDataSetId) { + this.dataChangeHandler(this.datasets[this.pendingDataSetId]); + this.pendingDataSetId = null; + } + if (this.isTab(tab)) { + this.showTab(tab); + } else { + this.showTab(); + } + } + + /** + * Recomputes the margin-bottom css property of the body so + * that the debug bar never hides any content + */ + recomputeBottomOffset() { + if (this.options.bodyBottomInset) { + if (this.isClosed()) { + document.body.style.paddingBottom = this.bodyPaddingBottomHeight ? `${this.bodyPaddingBottomHeight}px` : ''; + document.body.style.paddingTop = this.bodyPaddingTopHeight ? `${this.bodyPaddingTopHeight}px` : ''; + return; + } + + if (this.options.toolbarPosition === 'top') { + const offset = this.el.offsetHeight + (this.bodyPaddingTopHeight || 0); + document.body.style.paddingTop = `${offset}px`; + document.body.style.paddingBottom = this.bodyPaddingBottomHeight ? `${this.bodyPaddingBottomHeight}px` : ''; + } else { + const offset = this.el.offsetHeight + (this.bodyPaddingBottomHeight || 0); + document.body.style.paddingBottom = `${offset}px`; + document.body.style.paddingTop = this.bodyPaddingTopHeight ? `${this.bodyPaddingTopHeight}px` : ''; + } + } + } + + /** + * Sets the data map used by dataChangeHandler to populate + * indicators and widgets + * + * A data map is an object where properties are control names. + * The value of each property should be an array where the first + * item is the name of a property from the data object (nested properties + * can be specified) and the second item the default value. + * + * Example: + * {"memory": ["memory.peak_usage_str", "0B"]} + * + * @this {DebugBar} + * @param {object} map + */ + setDataMap(map) { + this.dataMap = map; + } + + /** + * Same as setDataMap() but appends to the existing map + * rather than replacing it + * + * @this {DebugBar} + * @param {object} map + */ + addDataMap(map) { + Object.assign(this.dataMap, map); + } + + /** + * Resets datasets and add one set of data + * + * For this method to be usefull, you need to specify + * a dataMap using setDataMap() + * + * @this {DebugBar} + * @param {object} data + * @return {string} Dataset's id + */ + setData(data) { + this.datasets = {}; + return this.addDataSet(data); + } + + /** + * Adds a dataset + * + * If more than one dataset are added, the dataset selector + * will be displayed. + * + * For this method to be usefull, you need to specify + * a dataMap using setDataMap() + * + * @this {DebugBar} + * @param {object} data + * @param {string} id The name of this set, optional + * @param {string} suffix + * @param {Bool} show Whether to show the new dataset, optional (default: true) + * @return {string} Dataset's id + */ + addDataSet(data, id, suffix, show) { + if (!data || !data.__meta) { + return; + } + if (this.isIframe && window.top.PhpDebugBar && window.top.PhpDebugBar.instance) { + window.top.PhpDebugBar.instance.addDataSet(data, id, `(iframe)${suffix || ''}`, show); + return; + } + + const nb = Object.keys(this.datasets).length + 1; + id = id || nb; + data.__meta.nb = nb; + data.__meta.suffix = suffix; + this.datasets[id] = data; + + const label = this.datesetTitleFormater.format(id, this.datasets[id], suffix, nb); + + // Update dataset switcher widget (if AJAX handler is enabled) + if (this.datasetSwitcherWidget) { + this.datasetSwitcherWidget.set('data', this.datasets); + } else { + // Use old dropdown (if AJAX handler is not enabled) + const option = document.createElement('option'); + option.value = id; + option.textContent = label; + this.datasetsSelect.append(option); + this.datasetsSelect.hidden = false; + } + + if (show === undefined || show) { + this.showDataSet(id); + } + + this.resize(); + + return id; + } + + /** + * Loads a dataset using the open handler + * + * @param {string} id + * @param {Bool} show Whether to show the new dataset, optional (default: true) + */ + loadDataSet(id, suffix, callback, show) { + if (!this.openHandler) { + throw new Error('loadDataSet() needs an open handler'); + } + const self = this; + this.openHandler.load(id, (data) => { + self.addDataSet(data, id, suffix, show); + self.resize(); + callback && callback(data); + }); + } + + /** + * Returns the data from a dataset + * + * @this {DebugBar} + * @param {string} id + * @return {object} + */ + getDataSet(id) { + return this.datasets[id]; + } + + /** + * Switch the currently displayed dataset + * + * @this {DebugBar} + * @param {string} id + */ + showDataSet(id) { + this.activeDatasetId = id; + if (this.isClosed()) { + this.pendingDataSetId = id; + } else { + this.dataChangeHandler(this.datasets[id]); + this.pendingDataSetId = null; + } + + // Update dataset switcher widget to reflect current dataset + if (this.datasetSwitcherWidget) { + this.datasetSwitcherWidget.set('activeId', id); + } else { + // Update old dropdown + this.datasetsSelect.value = id; + } + } + + /** + * Called when the current dataset is modified. + * + * @this {DebugBar} + * @param {object} data + */ + dataChangeHandler(data) { + for (const [key, def] of Object.entries(this.dataMap)) { + const d = getDictValue(data, def[0], def[1]); + if (key.includes(':')) { + const parts = key.split(':'); + this.getControl(parts[0]).set(parts[1], d); + } else { + this.getControl(key).set('data', d); + } + } + + if (!this.isMinimized()) { + this.showTab(); + } + + this.resize(); + } + + /** + * Sets the handler to open past dataset + * + * @this {DebugBar} + * @param {object} handler + */ + setOpenHandler(handler) { + this.openHandler = handler; + this.openHandler.el.setAttribute('data-theme', this.el.getAttribute('data-theme')); + this.openbtn.hidden = handler == null; + } + + /** + * Returns the handler to open past dataset + * + * @this {DebugBar} + * @return {object} + */ + getOpenHandler() { + return this.openHandler; + } + + enableAjaxHandlerTab() { + // Hide the old dropdown + if (this.datasetsSelectSpan) { + this.datasetsSelectSpan.hidden = true; + } + + // Create dataset switcher widget in header (after open button) + this.datasetSwitcherWidget = new PhpDebugBar.Widgets.DatasetWidget({ + debugbar: this + }); + this.openbtn.after(this.datasetSwitcherWidget.el); + } + } + + PhpDebugBar.DebugBar = DebugBar; + DebugBar.Tab = Tab; + DebugBar.Indicator = Indicator; + + // ------------------------------------------------------------------ + + /** + * AjaxHandler + * + * Extract data from headers of an XMLHttpRequest and adds a new dataset + * + * @param {Bool} autoShow Whether to immediately show new datasets, optional (default: true) + */ + class AjaxHandler { + constructor(debugbar, headerName, autoShow) { + this.debugbar = debugbar; + this.headerName = headerName || 'phpdebugbar'; + this.captureStreamed = false; + // Response Content-Types treated as streamed for the rid fallback. + // Set to null/[] to fall back on any response missing the id header. + this.streamedContentTypes = ['text/event-stream']; + this.autoShow = autoShow === undefined ? true : autoShow; + this.defaultAutoShow = this.autoShow; + if (localStorage.getItem('phpdebugbar-ajaxhandler-autoshow') !== null) { + this.autoShow = localStorage.getItem('phpdebugbar-ajaxhandler-autoshow') === '1'; + } + if (debugbar.controls.__settings) { + debugbar.controls.__settings.get('widget').set('autoshow', this.autoShow); + } + } + + /** + * Handles a Fetch API Response or an XMLHttpRequest + * + * @param {Response|XMLHttpRequest} response + * @param {string} [rid] Correlation id used as a fallback lookup when no response header is present + * @return {boolean} + */ + handle(response, rid) { + const stack = this.getHeader(response, `${this.headerName}-stack`); + if (stack) { + const stackIds = JSON.parse(stack); + stackIds.forEach((id) => { + this.debugbar.loadDataSet(id, ' (stacked)', null, false); + }); + } + + if (this.loadFromId(response)) { + return true; + } + + if (this.loadFromData(response)) { + return true; + } + + if (rid && this.debugbar.openHandler && this.isStreamedResponse(response)) { + this.loadFromRequestId(rid); + return true; + } + + return false; + } + + /** + * Whether a response should use the rid fallback lookup. + * + * Gated on the response Content-Type so we only query the open handler + * for responses that actually look streamed (by default SSE). Override + * `streamedContentTypes` to broaden this; set it to null/[] to fall back + * on any response missing the id header. + * + * @param {Response|XMLHttpRequest} response + * @return {boolean} + */ + isStreamedResponse(response) { + const types = this.streamedContentTypes; + if (!types || !types.length) { + return true; + } + // Compare the base media type, ignoring any parameters such as + // "; charset=utf-8" (e.g. "text/event-stream; charset=utf-8"). + const contentType = (this.getHeader(response, 'content-type') || '').split(';')[0].trim().toLowerCase(); + return types.some(type => type.trim().toLowerCase() === contentType); + } + + /** + * Checks whether a url is same-origin as the current page. + * + * @param {string} url + * @return {boolean} + */ + sameOrigin(url) { + try { + return new URL(url, location.href).origin === location.origin; + } catch (e) { + return false; + } + } + + /** + * Whether a request may receive a correlation id. + * + * Excludes the open handler's own requests: injecting a rid there would + * make handle() fall back to loadFromRequestId() and re-query the open + * handler on every lookup, recursing indefinitely. + * + * @param {string} url + * @return {boolean} + */ + canInjectRequestId(url) { + const oh = this.debugbar.openHandler; + if (oh && typeof oh.get === 'function') { + try { + const ohUrl = oh.get('url'); + if (ohUrl && new URL(url, location.href).pathname === new URL(ohUrl, location.href).pathname) { + return false; + } + } catch (e) {} + } + return true; + } + + /** + * Generates a new correlation id for a request. + * + * @return {string} + */ + newRequestId() { + return (globalThis.crypto && typeof globalThis.crypto.randomUUID === 'function' && globalThis.crypto.randomUUID()) || (String(Date.now()) + Math.random().toString(16).slice(2)); + } + + /** + * Looks up a stored dataset by its correlation id via the open handler. + * + * Used as a fallback for streamed responses where the phpdebugbar-id + * response header is lost. Retries because the dataset may be persisted + * after the response is flushed (e.g. fastcgi_finish_request). + * + * @param {string} rid + * @param {number} [tries] + */ + loadFromRequestId(rid, tries = 5) { + this.debugbar.openHandler.find({ rid }, 0, (data) => { + const match = Array.isArray(data) ? data.find(m => m && m.rid === rid && m.id) : null; + if (match) { + this.debugbar.loadDataSet(match.id, '(ajax)', undefined, this.autoShow); + } else if (tries > 0) { + setTimeout(() => this.loadFromRequestId(rid, tries - 1), 150); + } + }); + } + + /** + * Retrieves a response header from either a Fetch Response or XMLHttpRequest + * + * @param {Response|XMLHttpRequest} response - The response object from either fetch() or XHR + * @param {string} header - The name of the header to retrieve + * @returns {string|null} The header value, or null if not found + */ + getHeader(response, header) { + if (response instanceof Response) { + return response.headers.get(header); + } else if (response instanceof XMLHttpRequest) { + return response.getResponseHeader(header); + } + return null; + } + + setAutoShow(autoshow) { + this.autoShow = autoshow; + localStorage.setItem('phpdebugbar-ajaxhandler-autoshow', autoshow ? '1' : '0'); + } + + /** + * Checks if the HEADER-id exists and loads the dataset using the open handler + * + * @param {Response|XMLHttpRequest} response + * @return {boolean} + */ + loadFromId(response) { + const id = this.extractIdFromHeaders(response); + if (id && this.debugbar.openHandler) { + this.debugbar.loadDataSet(id, '(ajax)', undefined, this.autoShow); + return true; + } + return false; + } + + /** + * Extracts the id from the HEADER-id + * + * @param {Response|XMLHttpRequest} response + * @return {string} + */ + extractIdFromHeaders(response) { + return this.getHeader(response, `${this.headerName}-id`); + } + + /** + * Checks if the HEADER exists and loads the dataset + * + * @param {Response|XMLHttpRequest} response + * @return {boolean} + */ + loadFromData(response) { + const raw = this.extractDataFromHeaders(response); + if (!raw) { + return false; + } + + const data = this.parseHeaders(raw); + if (data.error) { + throw new Error(`Error loading debugbar data: ${data.error}`); + } else if (data.data) { + this.debugbar.addDataSet(data.data, data.id, '(ajax)', this.autoShow); + } + return true; + } + + /** + * Extract the data as a string from headers of an XMLHttpRequest + * + * @param {Response|XMLHttpRequest} response + * @return {string} + */ + extractDataFromHeaders(response) { + let data = this.getHeader(response, this.headerName); + if (!data) { + return; + } + for (let i = 1; ; i++) { + const header = this.getHeader(response, `${this.headerName}-${i}`); + if (!header) { + break; + } + data += header; + } + return decodeURIComponent(data); + } + + /** + * Parses the string data into an object + * + * @param {string} data + * @return {object} + */ + parseHeaders(data) { + return JSON.parse(data); + } + + /** + * Attaches an event listener to fetch + */ + bindToFetch() { + const self = this; + + const proxied = window.fetch.__debugbar_original || window.fetch; + const original = proxied.bind(window); + + function wrappedFetch(resource, init) { + let rid = null; + const url = resource instanceof Request ? resource.url : resource; + if (self.captureStreamed && self.sameOrigin(url) && self.canInjectRequestId(url)) { + rid = self.newRequestId(); + const h = `${self.headerName}-request-id`; + if (resource instanceof Request) { + init = { ...(init || {}) }; + const headers = new Headers(resource.headers); + new Headers(init.headers || {}).forEach((value, key) => headers.set(key, value)); + headers.set(h, rid); + resource = new Request(resource, { ...init, headers }); + init = undefined; + } else { + init = { ...(init || {}) }; + const headers = new Headers(init.headers || {}); + headers.set(h, rid); + init.headers = headers; + } + } + const p = original(resource, init); + p?.then?.(r => self.handle(r, rid)).catch(() => {}); + return p; + } + + wrappedFetch.__debugbar_wrapped = true; + wrappedFetch.__debugbar_original = proxied; + + window.fetch = wrappedFetch; + } + + /** + * Attaches an event listener to XMLHttpRequest + */ + bindToXHR() { + const self = this; + const proto = XMLHttpRequest.prototype; + + const proxied = (proto.open || {}).__debugbar_original || proto.open; + if (typeof proxied !== 'function') { + return; + } + + function wrappedOpen(method, url, async = true, user = null, pass = null) { + if (!this.__debugbar_listener_attached) { + this.__debugbar_listener_attached = true; + + this.addEventListener('readystatechange', () => { + if (this.readyState === 4) { + self.handle(this, this.__debugbar_rid); + } + }); + } + + const r = proxied.call(this, method, url, async, user, pass); + if (self.captureStreamed && self.sameOrigin(url) && self.canInjectRequestId(url)) { + this.__debugbar_rid = self.newRequestId(); + try { + this.setRequestHeader(`${self.headerName}-request-id`, this.__debugbar_rid); + } catch (e) {} + } + return r; + } + + wrappedOpen.__debugbar_wrapped = true; + wrappedOpen.__debugbar_original = proxied; + + proto.open = wrappedOpen; + } + } + + PhpDebugBar.AjaxHandler = AjaxHandler; +})(); diff --git a/resources/dist/debugbar.min.css b/resources/dist/debugbar.min.css new file mode 100644 index 000000000..b1efa9ef5 --- /dev/null +++ b/resources/dist/debugbar.min.css @@ -0,0 +1,19 @@ +:root{--debugbar-icon-adjustments: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2010a2%202%200%201%200%204%200a2%202%200%200%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M6%204v4%22%20%2F%3E%20%3Cpath%20d%3D%22M6%2012v8%22%20%2F%3E%20%3Cpath%20d%3D%22M10%2016a2%202%200%201%200%204%200a2%202%200%200%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M12%204v10%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2018v2%22%20%2F%3E%20%3Cpath%20d%3D%22M16%207a2%202%200%201%200%204%200a2%202%200%200%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M18%204v1%22%20%2F%3E%20%3Cpath%20d%3D%22M18%209v11%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-adjustments-horizontal: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M12%206a2%202%200%201%200%204%200a2%202%200%201%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206l8%200%22%20%2F%3E%20%3Cpath%20d%3D%22M16%206l4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M6%2012a2%202%200%201%200%204%200a2%202%200%201%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2012l2%200%22%20%2F%3E%20%3Cpath%20d%3D%22M10%2012l10%200%22%20%2F%3E%20%3Cpath%20d%3D%22M15%2018a2%202%200%201%200%204%200a2%202%200%201%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2018l11%200%22%20%2F%3E%20%3Cpath%20d%3D%22M19%2018l1%200%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-arrow-right: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2012l14%200%22%20%2F%3E%20%3Cpath%20d%3D%22M13%2018l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M13%206l6%206%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-arrows-left-right: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2017l-18%200%22%20%2F%3E%20%3Cpath%20d%3D%22M6%2010l-3%20-3l3%20-3%22%20%2F%3E%20%3Cpath%20d%3D%22M3%207l18%200%22%20%2F%3E%20%3Cpath%20d%3D%22M18%2020l3%20-3l-3%20-3%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-bolt: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M13%203l0%207l6%200l-8%2011l0%20-7l-6%200l8%20-11%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-bookmark: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M18%207v14l-6%20-4l-6%204v-14a4%204%200%200%201%204%20-4h4a4%204%200%200%201%204%204%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-box: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M12%203l8%204.5l0%209l-8%204.5l-8%20-4.5l0%20-9l8%20-4.5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2012l8%20-4.5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2012l0%209%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2012l-8%20-4.5%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-briefcase: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%209a2%202%200%200%201%202%20-2h14a2%202%200%200%201%202%202v9a2%202%200%200%201%20-2%202h-14a2%202%200%200%201%20-2%20-2l0%20-9%22%20%2F%3E%20%3Cpath%20d%3D%22M8%207v-2a2%202%200%200%201%202%20-2h4a2%202%200%200%201%202%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2012l0%20.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2013a20%2020%200%200%200%2018%200%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-bug: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M9%209v-1a3%203%200%200%201%206%200v1%22%20%2F%3E%20%3Cpath%20d%3D%22M8%209h8a6%206%200%200%201%201%203v3a5%205%200%200%201%20-10%200v-3a6%206%200%200%201%201%20-3%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2013l4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2013l4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2020l0%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2019l3.35%20-2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2019l-3.35%20-2%22%20%2F%3E%20%3Cpath%20d%3D%22M4%207l3.75%202.4%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207l-3.75%202.4%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-calendar: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%207a2%202%200%200%201%202%20-2h12a2%202%200%200%201%202%202v12a2%202%200%200%201%20-2%202h-12a2%202%200%200%201%20-2%20-2v-12%22%20%2F%3E%20%3Cpath%20d%3D%22M16%203v4%22%20%2F%3E%20%3Cpath%20d%3D%22M8%203v4%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2011h16%22%20%2F%3E%20%3Cpath%20d%3D%22M11%2015h1%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2015v3%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-chart-infographic: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%207a4%204%200%201%200%208%200a4%204%200%201%200%20-8%200%22%20%2F%3E%20%3Cpath%20d%3D%22M7%203v4h4%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2017l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2014l0%207%22%20%2F%3E%20%3Cpath%20d%3D%22M13%2013l0%208%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2012l0%209%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-clock: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%2018%200a9%209%200%200%200%20-18%200%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l3%203%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-code: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M7%208l-4%204l4%204%22%20%2F%3E%20%3Cpath%20d%3D%22M17%208l4%204l-4%204%22%20%2F%3E%20%3Cpath%20d%3D%22M14%204l-4%2016%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-database: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206a8%203%200%201%200%2016%200a8%203%200%201%200%20-16%200%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206v6a8%203%200%200%200%2016%200v-6%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2012v6a8%203%200%200%200%2016%200v-6%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-file-code: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M14%203v4a1%201%200%200%200%201%201h4%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2021h-10a2%202%200%200%201%20-2%20-2v-14a2%202%200%200%201%202%20-2h7l5%205v11a2%202%200%200%201%20-2%202%22%20%2F%3E%20%3Cpath%20d%3D%22M10%2013l-1%202l1%202%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2013l1%202l-1%202%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-flag: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%205a5%205%200%200%201%207%200a5%205%200%200%200%207%200v9a5%205%200%200%201%20-7%200a5%205%200%200%200%20-7%200v-9%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2021v-7%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-history: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M12%208l0%204l2%202%22%20%2F%3E%20%3Cpath%20d%3D%22M3.05%2011a9%209%200%201%201%20.5%204m-.5%205v-5h5%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-inbox: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206a2%202%200%200%201%202%20-2h12a2%202%200%200%201%202%202v12a2%202%200%200%201%20-2%202h-12a2%202%200%200%201%20-2%20-2l0%20-12%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2013h3l3%203h4l3%20-3h3%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-leaf: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2021c.5%20-4.5%202.5%20-8%207%20-10%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2018c6.218%200%2010.5%20-3.288%2011%20-12v-2h-4.014c-9%200%20-11.986%204%20-12%209c0%201%200%203%202%205h3l.014%200%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-list: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M9%206l11%200%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012l11%200%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2018l11%200%22%20%2F%3E%20%3Cpath%20d%3D%22M5%206l0%20.01%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2012l0%20.01%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2018l0%20.01%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-logs: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2018h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2018h2%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M8%206h2%22%20%2F%3E%20%3Cpath%20d%3D%22M14%206h6%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2012h6%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2018h6%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-mobiledata: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2012v-8%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2020v-8%22%20%2F%3E%20%3Cpath%20d%3D%22M13%207l3%20-3l3%203%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2017l3%203l3%20-3%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-search: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2010a7%207%200%201%200%2014%200a7%207%200%201%200%20-14%200%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2021l-6%20-6%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-server-cog: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%207a3%203%200%200%201%203%20-3h12a3%203%200%200%201%203%203v2a3%203%200%200%201%20-3%203h-12a3%203%200%200%201%20-3%20-3v-2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2020h-6a3%203%200%200%201%20-3%20-3v-2a3%203%200%200%201%203%20-3h10.5%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2018a2%202%200%201%200%204%200a2%202%200%201%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M18%2014.5v1.5%22%20%2F%3E%20%3Cpath%20d%3D%22M18%2020v1.5%22%20%2F%3E%20%3Cpath%20d%3D%22M21.032%2016.25l-1.299%20.75%22%20%2F%3E%20%3Cpath%20d%3D%22M16.27%2019l-1.3%20.75%22%20%2F%3E%20%3Cpath%20d%3D%22M14.97%2016.25l1.3%20.75%22%20%2F%3E%20%3Cpath%20d%3D%22M19.733%2019l1.3%20.75%22%20%2F%3E%20%3Cpath%20d%3D%22M7%208v.01%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2016v.01%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-share-3: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M13%204v4c-6.575%201.028%20-9.02%206.788%20-10%2012c-.037%20.206%205.384%20-5.962%2010%20-6v4l8%20-7l-8%20-7%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-tags: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%208v4.172a2%202%200%200%200%20.586%201.414l5.71%205.71a2.41%202.41%200%200%200%203.408%200l3.592%20-3.592a2.41%202.41%200%200%200%200%20-3.408l-5.71%20-5.71a2%202%200%200%200%20-1.414%20-.586h-4.172a2%202%200%200%200%20-2%202%22%20%2F%3E%20%3Cpath%20d%3D%22M18%2019l1.592%20-1.592a4.82%204.82%200%200%200%200%20-6.816l-4.592%20-4.592%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2010h-.01%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-x: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M18%206l-12%2012%22%20%2F%3E%20%3Cpath%20d%3D%22M6%206l12%2012%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-arrows-maximize: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M16%204l4%200l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2010l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2020l-4%200l0%20-4%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2020l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2020l4%200l0%20-4%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2014l6%206%22%20%2F%3E%20%3Cpath%20d%3D%22M8%204l-4%200l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M4%204l6%206%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-arrows-minimize: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%209l4%200l0%20-4%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203l6%206%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2015l4%200l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2021l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M19%209l-4%200l0%20-4%22%20%2F%3E%20%3Cpath%20d%3D%22M15%209l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M19%2015l-4%200l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M15%2015l6%206%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-chevron-down: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M6%209l6%206l6%20-6%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-chevron-up: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M6%2015l6%20-6l6%206%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-folder-open: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2019l2.757%20-7.351a1%201%200%200%201%20.936%20-.649h12.307a1%201%200%200%201%20.986%201.164l-.996%205.211a2%202%200%200%201%20-1.964%201.625h-14.026a2%202%200%200%201%20-2%20-2v-11a2%202%200%200%201%202%20-2h4l3%203h7a2%202%200%200%201%202%202v2%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-brand-php: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012a10%209%200%201%200%2020%200a10%209%200%201%200%20-20%200%22%20%2F%3E%20%3Cpath%20d%3D%22M5.5%2015l.395%20-1.974l.605%20-3.026h1.32a1%201%200%200%201%20.986%201.164l-.167%201a1%201%200%200%201%20-.986%20.836h-1.653%22%20%2F%3E%20%3Cpath%20d%3D%22M15.5%2015l.395%20-1.974l.605%20-3.026h1.32a1%201%200%200%201%20.986%201.164l-.167%201a1%201%200%200%201%20-.986%20.836h-1.653%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207.5l-1%205.5%22%20%2F%3E%20%3Cpath%20d%3D%22M11.6%2010h2.4l-.5%203%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-refresh: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2011a8.1%208.1%200%200%200%20-15.5%20-2m-.5%20-4v4h4%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2013a8.1%208.1%200%200%200%2015.5%202m.5%204v-4h-4%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-cpu: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%206a1%201%200%200%201%201%20-1h12a1%201%200%200%201%201%201v12a1%201%200%200%201%20-1%201h-12a1%201%200%200%201%20-1%20-1l0%20-12%22%20%2F%3E%20%3Cpath%20d%3D%22M9%209h6v6h-6l0%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2010h2%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2014h2%22%20%2F%3E%20%3Cpath%20d%3D%22M10%203v2%22%20%2F%3E%20%3Cpath%20d%3D%22M14%203v2%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2010h-2%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2014h-2%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2021v-2%22%20%2F%3E%20%3Cpath%20d%3D%22M10%2021v-2%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-table: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%205a2%202%200%200%201%202%20-2h14a2%202%200%200%201%202%202v14a2%202%200%200%201%20-2%202h-14a2%202%200%200%201%20-2%20-2v-14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2010h18%22%20%2F%3E%20%3Cpath%20d%3D%22M10%203v18%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-link: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2015l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M11%206l.463%20-.536a5%205%200%200%201%207.071%207.072l-.534%20.464%22%20%2F%3E%20%3Cpath%20d%3D%22M13%2018l-.397%20.534a5.068%205.068%200%200%201%20-7.127%200a4.972%204.972%200%200%201%200%20-7.071l.524%20-.463%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-copy: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M7%209.667a2.667%202.667%200%200%201%202.667%20-2.667h8.666a2.667%202.667%200%200%201%202.667%202.667v8.666a2.667%202.667%200%200%201%20-2.667%202.667h-8.666a2.667%202.667%200%200%201%20-2.667%20-2.667l0%20-8.666%22%20%2F%3E%20%3Cpath%20d%3D%22M4.012%2016.737a2.005%202.005%200%200%201%20-1.012%20-1.737v-10c0%20-1.1%20.9%20-2%202%20-2h10c.75%200%201.158%20.385%201.5%201%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-circle-check: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%2018%200a9%209%200%201%200%20-18%200%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012l2%202l4%20-4%22%20%2F%3E%20%3C%2Fsvg%3E);--debugbar-icon-external-link: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M12%206h-6a2%202%200%200%200%20-2%202v10a2%202%200%200%200%202%202h10a2%202%200%200%200%202%20-2v-6%22%20%2F%3E%20%3Cpath%20d%3D%22M11%2013l9%20-9%22%20%2F%3E%20%3Cpath%20d%3D%22M15%204h5v5%22%20%2F%3E%20%3C%2Fsvg%3E)}.phpdebugbar-icon-adjustments:before{-webkit-mask-image:var(--debugbar-icon-adjustments);mask-image:var(--debugbar-icon-adjustments)}.phpdebugbar-icon-adjustments-horizontal:before{-webkit-mask-image:var(--debugbar-icon-adjustments-horizontal);mask-image:var(--debugbar-icon-adjustments-horizontal)}.phpdebugbar-icon-arrow-right:before{-webkit-mask-image:var(--debugbar-icon-arrow-right);mask-image:var(--debugbar-icon-arrow-right)}.phpdebugbar-icon-arrows-left-right:before{-webkit-mask-image:var(--debugbar-icon-arrows-left-right);mask-image:var(--debugbar-icon-arrows-left-right)}.phpdebugbar-icon-bolt:before{-webkit-mask-image:var(--debugbar-icon-bolt);mask-image:var(--debugbar-icon-bolt)}.phpdebugbar-icon-bookmark:before{-webkit-mask-image:var(--debugbar-icon-bookmark);mask-image:var(--debugbar-icon-bookmark)}.phpdebugbar-icon-box:before{-webkit-mask-image:var(--debugbar-icon-box);mask-image:var(--debugbar-icon-box)}.phpdebugbar-icon-briefcase:before{-webkit-mask-image:var(--debugbar-icon-briefcase);mask-image:var(--debugbar-icon-briefcase)}.phpdebugbar-icon-bug:before{-webkit-mask-image:var(--debugbar-icon-bug);mask-image:var(--debugbar-icon-bug)}.phpdebugbar-icon-calendar:before{-webkit-mask-image:var(--debugbar-icon-calendar);mask-image:var(--debugbar-icon-calendar)}.phpdebugbar-icon-chart-infographic:before{-webkit-mask-image:var(--debugbar-icon-chart-infographic);mask-image:var(--debugbar-icon-chart-infographic)}.phpdebugbar-icon-clock:before{-webkit-mask-image:var(--debugbar-icon-clock);mask-image:var(--debugbar-icon-clock)}.phpdebugbar-icon-code:before{-webkit-mask-image:var(--debugbar-icon-code);mask-image:var(--debugbar-icon-code)}.phpdebugbar-icon-database:before{-webkit-mask-image:var(--debugbar-icon-database);mask-image:var(--debugbar-icon-database)}.phpdebugbar-icon-file-code:before{-webkit-mask-image:var(--debugbar-icon-file-code);mask-image:var(--debugbar-icon-file-code)}.phpdebugbar-icon-flag:before{-webkit-mask-image:var(--debugbar-icon-flag);mask-image:var(--debugbar-icon-flag)}.phpdebugbar-icon-history:before{-webkit-mask-image:var(--debugbar-icon-history);mask-image:var(--debugbar-icon-history)}.phpdebugbar-icon-inbox:before{-webkit-mask-image:var(--debugbar-icon-inbox);mask-image:var(--debugbar-icon-inbox)}.phpdebugbar-icon-leaf:before{-webkit-mask-image:var(--debugbar-icon-leaf);mask-image:var(--debugbar-icon-leaf)}.phpdebugbar-icon-list:before{-webkit-mask-image:var(--debugbar-icon-list);mask-image:var(--debugbar-icon-list)}.phpdebugbar-icon-logs:before{-webkit-mask-image:var(--debugbar-icon-logs);mask-image:var(--debugbar-icon-logs)}.phpdebugbar-icon-mobiledata:before{-webkit-mask-image:var(--debugbar-icon-mobiledata);mask-image:var(--debugbar-icon-mobiledata)}.phpdebugbar-icon-search:before{-webkit-mask-image:var(--debugbar-icon-search);mask-image:var(--debugbar-icon-search)}.phpdebugbar-icon-server-cog:before{-webkit-mask-image:var(--debugbar-icon-server-cog);mask-image:var(--debugbar-icon-server-cog)}.phpdebugbar-icon-share-3:before{-webkit-mask-image:var(--debugbar-icon-share-3);mask-image:var(--debugbar-icon-share-3)}.phpdebugbar-icon-tags:before{-webkit-mask-image:var(--debugbar-icon-tags);mask-image:var(--debugbar-icon-tags)}.phpdebugbar-icon-x:before{-webkit-mask-image:var(--debugbar-icon-x);mask-image:var(--debugbar-icon-x)}.phpdebugbar-icon-arrows-maximize:before{-webkit-mask-image:var(--debugbar-icon-arrows-maximize);mask-image:var(--debugbar-icon-arrows-maximize)}.phpdebugbar-icon-arrows-minimize:before{-webkit-mask-image:var(--debugbar-icon-arrows-minimize);mask-image:var(--debugbar-icon-arrows-minimize)}.phpdebugbar-icon-chevron-down:before{-webkit-mask-image:var(--debugbar-icon-chevron-down);mask-image:var(--debugbar-icon-chevron-down)}.phpdebugbar-icon-chevron-up:before{-webkit-mask-image:var(--debugbar-icon-chevron-up);mask-image:var(--debugbar-icon-chevron-up)}.phpdebugbar-icon-folder-open:before{-webkit-mask-image:var(--debugbar-icon-folder-open);mask-image:var(--debugbar-icon-folder-open)}.phpdebugbar-icon-brand-php:before{-webkit-mask-image:var(--debugbar-icon-brand-php);mask-image:var(--debugbar-icon-brand-php)}.phpdebugbar-icon-refresh:before{-webkit-mask-image:var(--debugbar-icon-refresh);mask-image:var(--debugbar-icon-refresh)}.phpdebugbar-icon-cpu:before{-webkit-mask-image:var(--debugbar-icon-cpu);mask-image:var(--debugbar-icon-cpu)}.phpdebugbar-icon-table:before{-webkit-mask-image:var(--debugbar-icon-table);mask-image:var(--debugbar-icon-table)}.phpdebugbar-icon-link:before{-webkit-mask-image:var(--debugbar-icon-link);mask-image:var(--debugbar-icon-link)}.phpdebugbar-icon-copy:before{-webkit-mask-image:var(--debugbar-icon-copy);mask-image:var(--debugbar-icon-copy)}.phpdebugbar-icon-circle-check:before{-webkit-mask-image:var(--debugbar-icon-circle-check);mask-image:var(--debugbar-icon-circle-check)}.phpdebugbar-icon-external-link:before{-webkit-mask-image:var(--debugbar-icon-external-link);mask-image:var(--debugbar-icon-external-link)}@media print{div.phpdebugbar{display:none}}div.phpdebugbar,div.phpdebugbar-openhandler,div.phpdebugbar-widgets-datasets-panel{--debugbar-background: #F7F7F7;--debugbar-background-alt: #EFEFEF;--debugbar-text: #222;--debugbar-text-muted: #888;--debugbar-border: #eee;--debugbar-header: #efefef;--debugbar-header-text: #555;--debugbar-header-border: #ddd;--debugbar-active: #ccc;--debugbar-active-text: #666;--debugbar-icons: #555;--debugbar-badge: #ccc;--debugbar-badge-text: #555;--debugbar-badge-active: #477e96;--debugbar-badge-active-text: #fff;--debugbar-link: #888;--debugbar-hover: #aaa;--debugbar-accent: #6BB7D8;--debugbar-accent-border: #477e96;--debugbar-font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--debugbar-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--debugbar-icon-brand: var(--debugbar-icon-brand-php)}div.phpdebugbar[data-theme=dark],div.phpdebugbar-openhandler[data-theme=dark],div.phpdebugbar-widgets-datasets-panel[data-theme=dark]{--debugbar-background: #2a2a2a;--debugbar-background-alt: #333333;--debugbar-text: #e0e0e0;--debugbar-text-muted: #aaaaaa;--debugbar-border: #3a3a3a;--debugbar-header: #1e1e1e;--debugbar-header-text: #cccccc;--debugbar-header-border: #444;--debugbar-active: #444;--debugbar-active-text: #e0e0e0;--debugbar-icons: #cccccc;--debugbar-badge: #444;--debugbar-badge-text: #cccccc;--debugbar-badge-active: #4F8FB3;--debugbar-badge-active-text: #1e1e1e;--debugbar-accent: #4F8FB3;--debugbar-accent-border: #3F7A94;--debugbar-link: #aaaaaa;--debugbar-hover: #888888}div.phpdebugbar{position:fixed;bottom:0;left:0;width:100%;border-top:0;font-family:var(--debugbar-font-sans);background:var(--debugbar-background);z-index:100000000;font-size:13px;color:var(--debugbar-text);text-align:left;line-height:1.2em;letter-spacing:normal;direction:ltr}div.phpdebugbar.phpdebugbar-fullscreen,div.phpdebugbar.phpdebugbar-fullscreen[data-toolbarPosition=top]{top:0;bottom:0;display:flex;flex-direction:column}div.phpdebugbar.phpdebugbar-fullscreen .phpdebugbar-body{flex:1;height:calc(100% - 32px)!important}div.phpdebugbar.phpdebugbar-fullscreen .phpdebugbar-resize-handle{display:none}.phpdebugbar [hidden]{display:none!important}div.phpdebugbar[data-openBtnPosition=bottomRight].phpdebugbar-closed,div.phpdebugbar[data-openBtnPosition=topRight].phpdebugbar-closed{left:auto;right:0}div.phpdebugbar[data-openBtnPosition=topRight].phpdebugbar-closed,div.phpdebugbar[data-openBtnPosition=topLeft].phpdebugbar-closed{bottom:auto;top:0;border-bottom:1px solid var(--debugbar-header-border)}div.phpdebugbar[data-openBtnPosition=bottomRight].phpdebugbar-closed,div.phpdebugbar[data-openBtnPosition=bottomLeft].phpdebugbar-closed{border-top:1px solid var(--debugbar-header-border)}.phpdebugbar-closed[data-openBtnPosition=bottomLeft],.phpdebugbar-closed[data-openBtnPosition=topLeft]{border-right:1px solid var(--debugbar-header-border)}.phpdebugbar-closed[data-openBtnPosition=bottomRight],.phpdebugbar-closed[data-openBtnPosition=topRight]{border-left:1px solid var(--debugbar-header-border)}div.phpdebugbar a,div.phpdebugbar-openhandler{cursor:pointer}div.phpdebugbar-drag-capture{position:fixed;inset:0;z-index:100000001;background:none;display:none;cursor:row-resize}div.phpdebugbar-closed{width:auto}div.phpdebugbar *{margin:0;padding:0;border:0;font-weight:400;text-decoration:none;clear:initial;width:auto;direction:ltr;text-align:left;-moz-box-sizing:content-box;box-sizing:content-box}div.phpdebugbar select,div.phpdebugbar input{appearance:auto}div.phpdebugbar ol,div.phpdebugbar ul{list-style:none}div.phpdebugbar ul li,div.phpdebugbar ol li,div.phpdebugbar dl li{line-height:normal}div.phpdebugbar table,.phpdebugbar-openhandler table{border-collapse:collapse;border-spacing:0;color:inherit}div.phpdebugbar input[type=text],div.phpdebugbar input[type=password],div.phpdebugbar select{font-family:var(--debugbar-font-sans);background:var(--debugbar-background);font-size:14px;color:var(--debugbar-text);padding:0;border:1px solid var(--debugbar-border);border-radius:.25rem;margin:0}div.phpdebugbar code,div.phpdebugbar pre,div.phpdebugbar samp{background:none;font-family:var(--debugbar-font-mono);font-size:1em;border:0!important;padding:0;margin:0}div.phpdebugbar code,div.phpdebugbar pre{color:var(--debugbar-text)}div.phpdebugbar pre.sf-dump{background:none!important;z-index:0!important;display:block!important;color:#a0a000;outline:0}div.phpdebugbar pre.sf-dump .sf-dump-private{color:gray}div.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-public{color:#fc0}div.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-protected{color:#a0a000}div.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-private{color:#9d9266}a.phpdebugbar-restore-btn{float:left;padding:4px;font-size:14px;color:var(--debugbar-icons);text-decoration:none;width:24px;height:24px}div.phpdebugbar-resize-handle{height:4px;margin-top:-4px;width:100%;background:none;border-bottom:1px solid var(--debugbar-header-border);cursor:row-resize}div.phpdebugbar-minimized div.phpdebugbar-resize-handle{cursor:auto}div.phpdebugbar-resize-handle.phpdebugbar-resize-handle-bottom{margin-top:4px}div.phpdebugbar-minimized{border-top:1px solid var(--debugbar-header-border)}div.phpdebugbar-minimized[data-toolbarPosition=top]{border-top:0;border-bottom:1px solid var(--debugbar-header-border)}div.phpdebugbar[data-toolbarPosition=top]{bottom:auto;top:0}div.phpdebugbar[data-toolbarPosition=top] div.phpdebugbar-resize-handle-top{height:0;display:none}div.phpdebugbar[data-toolbarPosition=top] div.phpdebugbar-resize-handle-bottom{margin-top:0}div.phpdebugbar[data-toolbarPosition=bottom] div.phpdebugbar-resize-handle-bottom{height:0;margin-top:0}a.phpdebugbar-restore-btn:after{-webkit-mask-image:var(--debugbar-icon-brand);mask-image:var(--debugbar-icon-brand);-webkit-mask-size:20px 20px;mask-size:20px 20px;background-color:var(--debugbar-icons)}div.phpdebugbar-header{background-color:var(--debugbar-header);min-height:32px;line-height:16px}div.phpdebugbar-header:before,div.phpdebugbar-header:after{display:table;line-height:0;content:""}div.phpdebugbar-header:after{clear:both}div.phpdebugbar-header-left{float:left}div.phpdebugbar-header-right{float:right}div.phpdebugbar-header>div>*{padding:5px;font-size:13px;height:22px;color:var(--debugbar-header-text);text-decoration:none}div.phpdebugbar-header-left>*,div.phpdebugbar-header-right>*{line-height:0;display:flex;align-items:center}div.phpdebugbar-header-left>*{float:left}div.phpdebugbar-header-right>*{float:right}div.phpdebugbar-header-right select{padding:0;line-height:1em;background-color:var(--debugbar-header);color:var(--debugbar-header-text)}span.phpdebugbar-indicator,a.phpdebugbar-indicator{border-right:1px solid var(--debugbar-header-border)}.phpdebugbar[data-hideEmptyTabs=true] .phpdebugbar-tab[data-empty=true]:not(.phpdebugbar-active){display:none}a.phpdebugbar-tab.phpdebugbar-active{background:var(--debugbar-active);color:var(--debugbar-active-text)}a.phpdebugbar-tab .phpdebugbar-text{font-size:14px}a.phpdebugbar-tab span.phpdebugbar-badge{display:none;margin-left:5px;font-size:11px;line-height:14px;padding:0 6px;background:var(--debugbar-badge);border-radius:4px;color:var(--debugbar-badge-text);font-weight:400;text-shadow:none}a.phpdebugbar-tab.phpdebugbar-active span.phpdebugbar-badge{background:var(--debugbar-badge-active);color:var(--debugbar-badge-active-text)}a.phpdebugbar-tab i{display:none;vertical-align:middle}.phpdebugbar-icon,i.phpdebugbar-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.phpdebugbar-icon:before,i.phpdebugbar-icon:before{content:"";display:block;justify-content:center;flex-shrink:0;width:1.3em;height:1.3em;background-size:contain;background-repeat:no-repeat;background-position:center;vertical-align:middle;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-size:contain;mask-repeat:no-repeat;mask-position:center;background-color:currentColor}.phpdebugbar-icon-brand:before{-webkit-mask-image:var(--debugbar-icon-brand);mask-image:var(--debugbar-icon-brand)}a.phpdebugbar-tab span.phpdebugbar-badge.phpdebugbar-visible{display:inline}a.phpdebugbar-tab span.phpdebugbar-badge.phpdebugbar-important{background:#ed6868;color:#fff}a.phpdebugbar-close-btn,a.phpdebugbar-open-btn,a.phpdebugbar-fullscreen-btn,a.phpdebugbar-minimize-btn,a.phpdebugbar-maximize-btn,a.phpdebugbar-tab.phpdebugbar-tab-history,a.phpdebugbar-tab.phpdebugbar-tab-settings{width:16px;height:22px;position:relative}a.phpdebugbar-close-btn:after,a.phpdebugbar-open-btn:after,a.phpdebugbar-restore-btn:after,a.phpdebugbar-fullscreen-btn:after,a.phpdebugbar-minimize-btn:after,a.phpdebugbar-maximize-btn:after{content:" ";display:block;left:0;position:absolute;top:0;width:100%;height:100%;background-color:var(--debugbar-icons);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:18px 18px;mask-size:18px 18px}a.phpdebugbar-restore-btn:after{-webkit-mask-size:24px 24px;mask-size:24px 24px;mask-repeat:no-repeat;mask-position:center;position:relative}a.phpdebugbar-minimize-btn:after{-webkit-mask-image:var(--debugbar-icon-chevron-down);mask-image:var(--debugbar-icon-chevron-down)}a.phpdebugbar-maximize-btn:after{-webkit-mask-image:var(--debugbar-icon-chevron-up);mask-image:var(--debugbar-icon-chevron-up)}div.phpdebugbar[data-toolbarPosition=top] a.phpdebugbar-minimize-btn:after{-webkit-mask-image:var(--debugbar-icon-chevron-up);mask-image:var(--debugbar-icon-chevron-up)}div.phpdebugbar[data-toolbarPosition=top] a.phpdebugbar-maximize-btn:after{-webkit-mask-image:var(--debugbar-icon-chevron-down);mask-image:var(--debugbar-icon-chevron-down)}a.phpdebugbar-close-btn:after{-webkit-mask-image:var(--debugbar-icon-x);mask-image:var(--debugbar-icon-x)}a.phpdebugbar-fullscreen-btn:after{-webkit-mask-image:var(--debugbar-icon-arrows-maximize);mask-image:var(--debugbar-icon-arrows-maximize)}div.phpdebugbar.phpdebugbar-fullscreen a.phpdebugbar-fullscreen-btn:after{-webkit-mask-image:var(--debugbar-icon-arrows-minimize);mask-image:var(--debugbar-icon-arrows-minimize)}a.phpdebugbar-open-btn:after{-webkit-mask-image:var(--debugbar-icon-folder-open);mask-image:var(--debugbar-icon-folder-open)}.phpdebugbar-indicator{position:relative;cursor:pointer}.phpdebugbar-indicator span.phpdebugbar-text{margin-left:5px}.phpdebugbar-indicator span.phpdebugbar-tooltip{display:none;position:absolute;bottom:38px;background:var(--debugbar-header);border:1px solid var(--debugbar-header-border);color:var(--debugbar-header-text);font-size:11px;padding:2px 6px;z-index:100000001;text-align:center;white-space:nowrap;right:0;line-height:1.5;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.phpdebugbar-indicator:hover span.phpdebugbar-tooltip:not(.phpdebugbar-disabled){display:block}.phpdebugbar-indicator span.phpdebugbar-tooltip dl{display:grid;grid-gap:4px 10px;grid-template-columns:max-content}.phpdebugbar-indicator span.phpdebugbar-tooltip dl dt{font-weight:700;text-align:left}.phpdebugbar-indicator span.phpdebugbar-tooltip dl dd{margin:0;grid-column-start:2;text-align:left}.phpdebugbar .phpdebugbar-datasets-switcher{float:right}.phpdebugbar .phpdebugbar-datasets-switcher select{max-width:200px;height:22px;padding:4px 0;border:none}.phpdebugbar button,.phpdebugbar-openhandler button{color:var(--debugbar-header-text);background-color:var(--debugbar-header);border:1px solid var(--debugbar-header-border);border-radius:.25rem;margin:0 5px;padding:0 12px;height:20px;line-height:normal;cursor:pointer}div.phpdebugbar-body{border-top:1px solid var(--debugbar-header-border);position:relative;height:300px}div.phpdebugbar-panel{height:100%;overflow:auto;width:100%}div.phpdebugbar-panel.phpdebugbar-active{display:block}div.phpdebugbar-mini-design a.phpdebugbar-tab{position:relative;border-right:1px solid var(--debugbar-header-border)}div.phpdebugbar-mini-design a.phpdebugbar-tab span.phpdebugbar-text{display:none}div.phpdebugbar-mini-design a.phpdebugbar-tab:hover span.phpdebugbar-text{display:block;position:absolute;top:-30px;background:var(--debugbar-background);opacity:1;border:1px solid var(--debugbar-header-border);color:var(--debugbar-header-text);font-size:11px;padding:2px 6px;z-index:100000001;text-align:center;right:0;line-height:1.5;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}div.phpdebugbar-mini-design a.phpdebugbar-tab i{display:inline-block}a.phpdebugbar-tab.phpdebugbar-tab-history{width:auto;min-width:22px}a.phpdebugbar-tab.phpdebugbar-tab-history,a.phpdebugbar-tab.phpdebugbar-tab-settings{display:flex;justify-content:center;align-items:center}a.phpdebugbar-tab.phpdebugbar-tab-history .phpdebugbar-text,a.phpdebugbar-tab.phpdebugbar-tab-settings .phpdebugbar-text{display:none;white-space:nowrap}a.phpdebugbar-tab.phpdebugbar-tab-history i,a.phpdebugbar-tab.phpdebugbar-tab-settings i{display:inline-block}.phpdebugbar-widgets-dataset-history table{width:100%;table-layout:fixed}.phpdebugbar-widgets-dataset-history table th{font-weight:700}.phpdebugbar-widgets-dataset-history table td,.phpdebugbar-widgets-dataset-history table th{padding:6px 3px;border-bottom:1px solid var(--debugbar-border);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.phpdebugbar-widgets-dataset-history table td a{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.phpdebugbar-widgets-dataset-history table tr.phpdebugbar-widgets-active{background:var(--debugbar-active);color:var(--debugbar-active-text)}.phpdebugbar-widgets-dataset-history span.phpdebugbar-badge{margin:0 5px 0 2px;font-size:11px;line-height:14px;padding:0 6px;background:var(--debugbar-badge);border-radius:4px;color:var(--debugbar-badge-text);font-weight:400;text-shadow:none;vertical-align:middle}.phpdebugbar-widgets-dataset-history .phpdebugbar-widgets-dataset-actions{text-align:center;padding:7px 0;position:sticky;top:0;background:var(--debugbar-background)}.phpdebugbar-widgets-dataset-history .phpdebugbar-widgets-dataset-actions a{margin:0 10px}.phpdebugbar-widgets-dataset-history .phpdebugbar-widgets-dataset-actions input{margin:5px}.phpdebugbar-settings .phpdebugbar-form-row{display:block;border-top:1px solid var(--debugbar-border);min-height:17px;padding:5px 10px}.phpdebugbar-settings .phpdebugbar-form-label{width:200px;font-weight:700;display:inline-block;clear:none}.phpdebugbar-settings .phpdebugbar-form-input{font-weight:700;display:inline-block;clear:none}.phpdebugbar-settings input[type=text],.phpdebugbar-settings select{margin:0 5px;min-width:200px}.phpdebugbar-settings input[type=checkbox]{margin:0 5px}pre.phpdebugbar-widgets-code-block{white-space:pre;word-wrap:normal;overflow:hidden}pre.phpdebugbar-widgets-code-block code{display:block;overflow-x:auto;overflow-y:hidden}pre.phpdebugbar-widgets-code-block code.phpdebugbar-widgets-numbered-code{padding:5px;line-height:normal}pre.phpdebugbar-widgets-code-block ul li.phpdebugbar-widgets-highlighted-line{font-weight:bolder;text-decoration:underline}pre.phpdebugbar-widgets-code-block ul li.phpdebugbar-widgets-highlighted-line span{position:absolute;background:var(--debugbar-text);min-width:calc(100% - 85px);margin-left:10px;opacity:.15}pre.phpdebugbar-widgets-code-block ul{position:static;float:left;padding:5px;border-right:1px solid var(--debugbar-header-border);text-align:right}.phpdebugbar-widgets-kvlist span.phpdebugbar-widgets-filename,li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-filename,table.phpdebugbar-widgets-tablevar span.phpdebugbar-widgets-filename{display:block;font-style:italic;float:right;margin-left:8px;color:var(--debugbar-link)}a.phpdebugbar-widgets-editor-link,a.phpdebugbar-widgets-external-link{color:var(--debugbar-link)}.phpdebugbar-widgets-kvlist span.phpdebugbar-widgets-filename:hover,li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-filename:hover,a.phpdebugbar-widgets-editor-link:hover,a.phpdebugbar-widgets-external-link:hover{color:var(--debugbar-hover)}a.phpdebugbar-widgets-editor-link:before,a.phpdebugbar-widgets-copy-clipboard-check:before,a.phpdebugbar-widgets-external-link:after{content:"";display:inline-block;width:1em;height:1em;margin-left:4px;vertical-align:middle;-webkit-mask-image:var(--debugbar-icon-external-link);mask-image:var(--debugbar-icon-external-link);-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-size:contain;mask-repeat:no-repeat;mask-position:center;background-color:currentColor}a.phpdebugbar-widgets-copy-clipboard-check:before{margin-left:0;margin-right:4px;-webkit-mask-image:var(--debugbar-icon-circle-check);mask-image:var(--debugbar-icon-circle-check)}table.phpdebugbar-widgets-params{width:70%;margin:10px;border:1px solid var(--debugbar-border);font-family:var(--debugbar-font-mono);font-size:13px;border-collapse:collapse}table.phpdebugbar-widgets-params th{font-weight:700}table.phpdebugbar-widgets-params td{border:1px solid var(--debugbar-border);border-left:none;border-right:none;padding:0 5px}table.phpdebugbar-widgets-params .phpdebugbar-widgets-name{width:20%;font-weight:700;vertical-align:top}.phpdebugbar-widgets-truncated{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}ul.phpdebugbar-widgets-list{margin:0;padding:0;list-style:none;font-family:var(--debugbar-font-mono)}ul.phpdebugbar-widgets-list li.phpdebugbar-widgets-list-item{padding:7px 10px;border-bottom:1px solid var(--debugbar-border);position:relative;overflow:hidden}div.phpdebugbar-widgets-messages{position:relative;height:100%;overflow:hidden;display:flex;flex-direction:column}div.phpdebugbar-widgets-messages ul.phpdebugbar-widgets-list{padding-bottom:45px;flex:1;overflow-y:auto}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value{display:flex;align-items:center}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value:before{margin-right:8px;font-family:system-ui,sans-serif;font-size:1.25em;line-height:1;display:inline-flex;align-items:center}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-success{color:#28a745}.phpdebugbar[data-theme=dark] div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-success{color:#56db3a}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-success:before{content:"\2713"}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-alert:before{content:"\2139";color:#cbcf38}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-debug:before{color:#78d79a}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-warning:before,div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-emergency:before,div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-notice:before{content:"\26a0";color:#ecb03d}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-error,div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-critical{color:red}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-error:before,div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-critical:before{content:"\2716"}.phpdebugbar-widgets-params .phpdebugbar-widgets-value pre.sf-dump,dl.phpdebugbar-widgets-kvlist dd.phpdebugbar-widgets-value pre.sf-dump,div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item pre.sf-dump{display:inline-block!important;padding-top:0;padding-left:0;padding-bottom:0}dl.phpdebugbar-widgets-kvlist dd.phpdebugbar-widgets-value pre.sf-dump{max-width:calc(100% - 5px)}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-collector,div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-label{float:right;font-size:12px;padding:2px 4px;color:#888;margin:0 2px;text-decoration:none;text-shadow:none;background:none;font-weight:400}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-context-count{float:right;font-size:12px;padding:2px 4px;color:#888;margin:0 2px;text-decoration:none;text-shadow:none;background:none;font-weight:400;display:inline-flex;align-items:center}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-context-count:before{content:"";display:inline-block;width:1em;height:1em;margin-right:4px;-webkit-mask-image:var(--debugbar-icon-table);mask-image:var(--debugbar-icon-table);-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-size:contain;mask-repeat:no-repeat;mask-position:center;background-color:currentColor}div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-collector{color:#555;font-style:italic}div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar{position:relative;flex-shrink:0;width:100%;background:var(--debugbar-header);color:var(--debugbar-text);border-top:1px solid var(--debugbar-border);border-bottom:0px;height:20px;padding:4px 0}div.phpdebugbar-widgets-messages li .phpdebugbar-widgets-label-called-from{float:right;color:var(--debugbar-text-muted);padding-left:5px;border-bottom:1px dotted var(--debugbar-border)}div.phpdebugbar-widgets-messages li .phpdebugbar-widgets-label-called-from:before{content:"";display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:middle;-webkit-mask-image:var(--debugbar-icon-link);mask-image:var(--debugbar-icon-link);-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-size:contain;mask-repeat:no-repeat;mask-position:center;background-color:currentColor}div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar input{border:0;margin:0 0 0 7px;width:30%;box-shadow:none;border-radius:3px;padding:2px 6px;height:15px}div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar input:focus{outline:none}div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter{float:right;font-size:12px;padding:2px 4px;background:#7cacd5;margin:0 2px;border-radius:4px;color:var(--debugbar-background);text-decoration:none}div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter.phpdebugbar-widgets-excluded{background:var(--debugbar-active);color:var(--debugbar-text-muted)}dl.phpdebugbar-widgets-kvlist{margin:0;display:grid;grid-template-columns:minmax(160px,15%) minmax(0,1fr)}dl.phpdebugbar-widgets-kvlist dt{grid-column:1;min-width:0;padding:5px 10px;border-top:1px solid var(--debugbar-border);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}dl.phpdebugbar-widgets-kvlist dd{grid-column:2;margin:0;padding:5px 10px;border-top:1px solid var(--debugbar-border);cursor:pointer;min-height:17px;overflow-wrap:anywhere;overflow-x:auto}dl.phpdebugbar-widgets-varlist,dl.phpdebugbar-widgets-jsonvarlist,dl.phpdebugbar-widgets-htmlvarlist{font-family:var(--debugbar-font-mono)}dl.phpdebugbar-widgets-jsonvarlist dd,dl.phpdebugbar-widgets-htmlvarlist dd{cursor:initial}ul.phpdebugbar-widgets-timeline{margin:0;padding:0;list-style:none}ul.phpdebugbar-widgets-timeline .phpdebugbar-widgets-measure{height:20px;position:relative;border:none;display:block}ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-label,ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-collector{position:absolute;font-size:12px;font-family:var(--debugbar-font-mono);color:var(--debugbar-text);top:4px;left:5px;background:none;text-shadow:none;font-weight:400;white-space:pre}ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-collector{left:initial;right:5px}ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-value{display:block;position:absolute;height:calc(100% - 4px);background-color:var(--debugbar-accent);border-bottom:2px solid var(--debugbar-accent-border);top:2px;border-radius:3px;min-width:2px}div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item{cursor:pointer}div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-message{display:block;color:red}div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-type{display:block;position:absolute;right:4px;top:4px;font-weight:700}div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item pre.phpdebugbar-widgets-file{margin:10px;padding:5px;border:1px solid var(--debugbar-border);font-family:var(--debugbar-font-mono)}div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-filename{float:none}div.phpdebugbar[data-theme=dark] code.phpdebugbar-widgets-sql,div.phpdebugbar[data-theme=dark] .phpdebugbar-widgets-name,div.phpdebugbar[data-theme=dark] .phpdebugbar-widgets-key,div.phpdebugbar[data-theme=dark] .phpdebugbar-widgets-success>pre.sf-dump>.sf-dump-note{color:#fdfd96}table.phpdebugbar-widgets-tablevar{width:100%;table-layout:auto;font-size:1em}table.phpdebugbar-widgets-tablevar td:first-child{width:150px;white-space:nowrap;font-family:var(--debugbar-font-mono)}table.phpdebugbar-widgets-tablevar td.phpdebugbar-widgets-editor{width:5%;white-space:nowrap;text-align:right}table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-header td,table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-summary td{font-weight:700}table.phpdebugbar-widgets-tablevar td{padding:2px 4px;border-bottom:1px solid var(--debugbar-border);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400}table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-header td,table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-summary td{position:sticky;inset-inline-start:0px;background:var(--debugbar-background);border-bottom:none;z-index:1;top:0;bottom:0}table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-header td:after,table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-summary td:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:var(--debugbar-border)}table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-summary td:after{bottom:auto;top:0}div.phpdebugbar span.phpdebugbar-widgets-badge{margin:0 5px 0 8px;font-size:11px;line-height:14px;padding:0 6px;background:var(--debugbar-badge-active);border-radius:4px;color:var(--debugbar-badge-active-text);font-weight:400;text-shadow:none;vertical-align:middle}.phpdebugbar .phpdebugbar-widgets-datasets-switcher-widget{position:relative;float:right;display:flex;padding:0!important;margin:0!important;height:32px;align-items:center}.phpdebugbar .phpdebugbar-widgets-datasets-badge{position:relative;display:flex;align-items:center;gap:6px;padding:0 10px;height:32px;background:var(--debugbar-header);color:var(--debugbar-header-text);cursor:pointer;font-size:12px;line-height:normal;transition:background-color .15s;font-family:var(--debugbar-font-sans);border-right:1px solid var(--debugbar-header-border)}.phpdebugbar .phpdebugbar-widgets-datasets-badge:hover{background:var(--debugbar-active)}.phpdebugbar .phpdebugbar-widgets-datasets-badge-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;background:var(--debugbar-badge);color:var(--debugbar-badge-text);border-radius:9px;font-weight:600;font-size:11px}.phpdebugbar .phpdebugbar-widgets-datasets-badge-count[hidden]{display:none}.phpdebugbar .phpdebugbar-widgets-datasets-badge-url{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--debugbar-font-mono)}.phpdebugbar-widgets-datasets-panel{position:fixed;width:600px;background:var(--debugbar-background);border:1px solid var(--debugbar-border);box-shadow:0 2px 8px #0000001a;overflow:hidden;z-index:100000001}.phpdebugbar-widgets-datasets-panel-toolbar{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--debugbar-background-alt);border-bottom:1px solid var(--debugbar-border);font-size:12px;font-family:var(--debugbar-font-sans)}.phpdebugbar-widgets-datasets-autoshow{display:flex;align-items:center;gap:4px;cursor:pointer;color:var(--debugbar-text);white-space:nowrap;font-family:var(--debugbar-font-sans)}.phpdebugbar-widgets-datasets-autoshow input[type=checkbox]{cursor:pointer;margin:0}.phpdebugbar-widgets-datasets-clear-btn,.phpdebugbar-widgets-datasets-showall-btn{color:var(--debugbar-link);text-decoration:none;cursor:pointer;white-space:nowrap;font-family:var(--debugbar-font-sans)}.phpdebugbar-widgets-datasets-clear-btn:hover,.phpdebugbar-widgets-datasets-showall-btn:hover{color:var(--debugbar-hover);text-decoration:underline}.phpdebugbar-widgets-datasets-refresh-btn{color:var(--debugbar-text-muted);text-decoration:none;cursor:pointer;white-space:nowrap;font-size:14px;display:inline-flex;align-items:center}.phpdebugbar-widgets-datasets-refresh-btn[hidden]{display:none}.phpdebugbar-widgets-datasets-refresh-btn:hover,.phpdebugbar-widgets-datasets-refresh-btn.phpdebugbar-widgets-active{color:var(--debugbar-text)}.phpdebugbar-widgets-datasets-refresh-btn.phpdebugbar-widgets-active i{animation:phpdebugbar-spin 2s linear infinite}@keyframes phpdebugbar-spin{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.phpdebugbar-widgets-datasets-search{flex:1;padding:3px 8px;font-size:11px;min-width:120px;border:1px solid var(--debugbar-border);background:var(--debugbar-background);color:var(--debugbar-text);border-radius:2px;font-family:var(--debugbar-font-sans)}.phpdebugbar-widgets-datasets-list{max-height:300px;overflow-y:auto}.phpdebugbar-widgets-datasets-list-item{display:grid;grid-template-columns:45px 50px 1fr auto auto auto;gap:6px;padding:5px 10px;border-bottom:1px solid var(--debugbar-border);cursor:pointer;transition:background-color .1s;align-items:center;font-size:11px}.phpdebugbar-widgets-datasets-list-item[hidden]{display:none}.phpdebugbar-widgets-datasets-list-item:hover{background:var(--debugbar-background-alt)}.phpdebugbar-widgets-datasets-list-item.phpdebugbar-widgets-active{background:var(--debugbar-active);font-weight:500}.phpdebugbar-widgets-datasets-item-nb{color:var(--debugbar-text-muted);font-weight:600;font-family:var(--debugbar-font-mono)}.phpdebugbar-widgets-datasets-item-copy-id{cursor:pointer;color:var(--debugbar-text-muted);display:inline-flex;align-items:center;margin-right:-4px;position:relative}.phpdebugbar-widgets-datasets-item-copy-id i{font-size:12px}.phpdebugbar-widgets-datasets-item-copy-id:hover{color:var(--debugbar-text)}.phpdebugbar-widgets-datasets-item-copy-id.phpdebugbar-widgets-copied{color:var(--debugbar-success, #28a745)}.phpdebugbar-widgets-datasets-item-time{color:var(--debugbar-text-muted);font-family:var(--debugbar-font-mono)}.phpdebugbar-widgets-datasets-item-request{display:flex;gap:6px;align-items:center;overflow:hidden}.phpdebugbar-widgets-datasets-item-method{padding:1px 5px;background:var(--debugbar-badge);color:var(--debugbar-badge-text);border-radius:2px;font-weight:600;font-family:var(--debugbar-font-mono);flex-shrink:0}.phpdebugbar-widgets-datasets-item-url{color:var(--debugbar-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--debugbar-font-mono)}.phpdebugbar-widgets-datasets-item-suffix{color:var(--debugbar-text-muted);font-family:var(--debugbar-font-mono);flex-shrink:0}.phpdebugbar-widgets-datasets-item-badges{display:inline-flex;gap:4px;align-items:center;flex-wrap:wrap}.phpdebugbar-widgets-datasets-item-badge{display:inline-flex;align-items:center;gap:2px;padding:1px 4px;background:var(--debugbar-badge);color:var(--debugbar-badge-text);border-radius:2px;font-size:10px;font-weight:600;cursor:pointer;transition:background-color .1s}.phpdebugbar-widgets-datasets-item-badge:hover{background:var(--debugbar-badge-active);color:var(--debugbar-badge-active-text)}.phpdebugbar-widgets-datasets-item-badge i{width:12px;height:12px}div.phpdebugbar-openhandler-overlay{position:fixed;left:0;top:0;width:100%;height:100%;background:#000;opacity:.3;z-index:100000002}div.phpdebugbar-openhandler{position:fixed;margin:auto;inset:0;width:80%;height:70%;background:var(--debugbar-background);color:var(--debugbar-text);border:2px solid var(--debugbar-header-border);overflow:auto;z-index:100000003;font-family:var(--debugbar-font-sans);font-size:14px;padding:0}div.phpdebugbar-openhandler select,div.phpdebugbar-openhandler input{appearance:auto}div.phpdebugbar-openhandler input,div.phpdebugbar-openhandler select{color:var(--debugbar-header-text);background-color:var(--debugbar-header);border:1px solid var(--debugbar-header-border);border-radius:.25rem;height:20px;margin:0 5px;padding:0}div.phpdebugbar-openhandler .phpdebugbar-openhandler-actions input[name=uri]{width:200px}div.phpdebugbar-openhandler .phpdebugbar-openhandler-actions input[name=ip]{width:90px}div.phpdebugbar-openhandler a{color:var(--debugbar-header-text)}div.phpdebugbar-openhandler .phpdebugbar-openhandler-header{background:var(--debugbar-header) no-repeat 5px 4px;color:var(--debugbar-header-text);margin-bottom:10px;display:flex;align-items:center;padding:5px 8px}div.phpdebugbar-openhandler .phpdebugbar-openhandler-header .phpdebugbar-openhandler-closebtn,div.phpdebugbar-openhandler .phpdebugbar-openhandler-header .phpdebugbar-openhandler-brand{font-size:14px;color:var(--debugbar-header-text);text-decoration:none;padding-right:5px;line-height:1;align-items:center}div.phpdebugbar-openhandler .phpdebugbar-openhandler-header .phpdebugbar-openhandler-closebtn{margin-left:auto}div.phpdebugbar-openhandler table{width:100%;table-layout:fixed;font-size:14px}div.phpdebugbar-openhandler table td,div.phpdebugbar-openhandler table th{border:0px solid var(--debugbar-border);padding:2px 8px}div.phpdebugbar-openhandler table th,div.phpdebugbar-openhandler table tr:nth-child(2n){background-color:var(--debugbar-background-alt)}div.phpdebugbar-openhandler table th:nth-child(3),div.phpdebugbar-openhandler table td:nth-child(3),div.phpdebugbar-openhandler table th:nth-child(5),div.phpdebugbar-openhandler table td:nth-child(5),div.phpdebugbar-openhandler table th:nth-child(6),div.phpdebugbar-openhandler table td:nth-child(6){text-align:center}div.phpdebugbar-openhandler table td{padding:6px 3px;border-bottom:1px solid var(--debugbar-border)}div.phpdebugbar-openhandler table td a{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.phpdebugbar-openhandler-id-cell{display:flex;align-items:center;gap:4px}.phpdebugbar-openhandler-id-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:55px;display:inline-block;font-family:var(--debugbar-font-mono);font-size:12px}.phpdebugbar-openhandler-copy-id{cursor:pointer;color:var(--debugbar-text-muted);display:inline-flex;align-items:center;position:relative;flex-shrink:0}.phpdebugbar-openhandler-copy-id i{font-size:12px}.phpdebugbar-openhandler-copy-id:hover{color:var(--debugbar-text)}.phpdebugbar-openhandler-copy-id.phpdebugbar-openhandler-copied{color:var(--debugbar-success, #28a745)}div.phpdebugbar-openhandler .phpdebugbar-openhandler-actions{text-align:center;padding:7px 0}div.phpdebugbar-openhandler .phpdebugbar-openhandler-actions a{color:var(--debugbar-header-text);background-color:var(--debugbar-header);border:1px solid var(--debugbar-header-border);border-radius:.25rem;margin:5px;padding:4px 12px}div.phpdebugbar-widgets-mails span.phpdebugbar-widgets-subject{display:block}div.phpdebugbar-widgets-mails li.phpdebugbar-widgets-list-item pre.phpdebugbar-widgets-headers{margin:10px;padding:5px;border:1px solid var(--debugbar-border);font-family:var(--debugbar-font-mono)}div.phpdebugbar-widgets-sqlqueries{position:relative;height:100%;overflow:hidden;display:flex;flex-direction:column}div.phpdebugbar-widgets-sqlqueries .phpdebugbar-widgets-status{font-family:var(--debugbar-font-mono);padding:6px;border-bottom:1px solid var(--debugbar-border);font-weight:700;color:var(--debugbar-text);background-color:var(--debugbar-background-alt);flex-shrink:0;order:1}div.phpdebugbar-widgets-sqlqueries ul.phpdebugbar-widgets-list{flex:1;overflow-y:auto;order:2}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-error{color:red}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id{float:right;margin-left:8px;color:var(--debugbar-text-muted)}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-database,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-duration,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-memory,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-row-count,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-copy-clipboard,div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-status span.phpdebugbar-widgets-stmt-id{color:var(--debugbar-text)}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard-check:before,div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before{content:"";display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:middle;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-size:contain;mask-repeat:no-repeat;mask-position:center;background-color:currentColor}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-database:before{-webkit-mask-image:var(--debugbar-icon-database);mask-image:var(--debugbar-icon-database)}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-duration:before{-webkit-mask-image:var(--debugbar-icon-clock);mask-image:var(--debugbar-icon-clock)}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-memory:before{-webkit-mask-image:var(--debugbar-icon-cpu);mask-image:var(--debugbar-icon-cpu)}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-row-count:before{-webkit-mask-image:var(--debugbar-icon-table);mask-image:var(--debugbar-icon-table)}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-stmt-id:before{-webkit-mask-image:var(--debugbar-icon-link);mask-image:var(--debugbar-icon-link)}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard:before{-webkit-mask-image:var(--debugbar-icon-copy);mask-image:var(--debugbar-icon-copy)}div.phpdebugbar-widgets-sqlqueries span.phpdebugbar-widgets-copy-clipboard-check:before{-webkit-mask-image:var(--debugbar-icon-circle-check);mask-image:var(--debugbar-icon-circle-check)}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-error{display:block;font-weight:700}code.phpdebugbar-widgets-sql{white-space:pre-wrap;overflow-wrap:break-word;word-wrap:break-word}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-sql-slow{background-color:#ffe4e4}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-sql-duplicate{background-color:#fdfdcd}div.phpdebugbar[data-theme=dark] div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-sql-slow{background-color:#623100}div.phpdebugbar[data-theme=dark] div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item.phpdebugbar-widgets-sql-duplicate{background-color:#565602}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar{position:relative;flex-shrink:0;width:100%;z-index:1;order:3}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter{float:right;font-size:12px;padding:2px 4px;background:#7cacd5;margin:0 2px;border-radius:4px;color:#fff;text-decoration:none}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter.phpdebugbar-widgets-excluded{background:var(--debugbar-background);color:var(--debugbar-text)}div.phpdebugbar-widgets-sqlqueries a.phpdebugbar-widgets-duplicates{font-weight:700;text-decoration:underline}div.phpdebugbar-widgets-sqlqueries li.phpdebugbar-widgets-list-item div.phpdebugbar-widgets-bg-measure{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;pointer-events:none}div.phpdebugbar-widgets-sqlqueries div.phpdebugbar-widgets-bg-measure div.phpdebugbar-widgets-value{position:absolute;bottom:0;height:1px;opacity:1;background:var(--debugbar-accent-border)}div.phpdebugbar-widgets-sqlqueries td.phpdebugbar-widgets-value li.phpdebugbar-widgets-table-list-item{text-align:left;padding-left:6px}div.phpdebugbar-widgets-sqlqueries .phpdebugbar-text-muted{color:var(--debugbar-text-muted)}div.phpdebugbar-widgets-sqlqueries .phpdebugbar-widgets-transaction,div.phpdebugbar-widgets-sqlqueries .phpdebugbar-widgets-message,div.phpdebugbar-widgets-sqlqueries .phpdebugbar-widgets-info{font-weight:bolder}div.phpdebugbar-widgets-sqlqueries .phpdebugbar-widgets-transaction{color:#d73a49}[data-theme=dark] div.phpdebugbar-widgets-sqlqueries .phpdebugbar-widgets-transaction{color:#ff7b72}div.phpdebugbar-widgets-templates div.phpdebugbar-widgets-status{font-family:var(--debugbar-font-mono);padding:6px;border-bottom:1px solid var(--debugbar-border);font-weight:700;color:var(--debugbar-text);background-color:var(--debugbar-background-alt)}div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-render-time,div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-memory,div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-param-count,div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-type{float:right;margin-left:8px;color:var(--debugbar-text)}div.phpdebugbar-widgets-templates div.phpdebugbar-widgets-status span.phpdebugbar-widgets-render-time,div.phpdebugbar-widgets-templates div.phpdebugbar-widgets-status span.phpdebugbar-widgets-memory,div.phpdebugbar-widgets-templates div.phpdebugbar-widgets-status span.phpdebugbar-widgets-param-count,div.phpdebugbar-widgets-templates div.phpdebugbar-widgets-status a.phpdebugbar-widgets-editor-link,div.phpdebugbar-widgets-templates div.phpdebugbar-widgets-status span.phpdebugbar-widgets-type{color:var(--debugbar-text)}div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-render-time:before,div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-memory:before,div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-param-count:before,div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-type:before{content:"";display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:middle;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-size:contain;mask-repeat:no-repeat;mask-position:center;background-color:currentColor}div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-render-time:before{-webkit-mask-image:var(--debugbar-icon-clock);mask-image:var(--debugbar-icon-clock)}div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-memory:before{-webkit-mask-image:var(--debugbar-icon-cpu);mask-image:var(--debugbar-icon-cpu)}div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-param-count:before{-webkit-mask-image:var(--debugbar-icon-table);mask-image:var(--debugbar-icon-table)}div.phpdebugbar-widgets-templates span.phpdebugbar-widgets-type:before{-webkit-mask-image:var(--debugbar-icon-code);mask-image:var(--debugbar-icon-code)}div.phpdebugbar[data-theme=dark] div.phpdebugbar-widgets-templates div.phpdebugbar-widgets-callgraph>pre *{background-color:inherit!important}pre code.phpdebugbar-hljs{display:block;overflow-x:auto;padding:1em}code.phpdebugbar-hljs{padding:3px 5px}/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/.phpdebugbar-hljs{color:var(--debugbar-text)}.phpdebugbar-hljs-doctag,.phpdebugbar-hljs-keyword,.phpdebugbar-hljs-meta .phpdebugbar-hljs-keyword,.phpdebugbar-hljs-template-tag,.phpdebugbar-hljs-template-variable,.phpdebugbar-hljs-type,.phpdebugbar-hljs-variable.language_{color:#d73a49}.phpdebugbar-hljs-title,.phpdebugbar-hljs-title.class_,.phpdebugbar-hljs-title.class_.inherited__,.phpdebugbar-hljs-title.function_{color:#6f42c1}.phpdebugbar-hljs-attr,.phpdebugbar-hljs-attribute,.phpdebugbar-hljs-literal,.phpdebugbar-hljs-meta,.phpdebugbar-hljs-number,.phpdebugbar-hljs-operator,.phpdebugbar-hljs-variable,.phpdebugbar-hljs-selector-attr,.phpdebugbar-hljs-selector-class,.phpdebugbar-hljs-selector-id{color:#005cc5}.phpdebugbar-hljs-regexp,.phpdebugbar-hljs-string,.phpdebugbar-hljs-meta .phpdebugbar-hljs-string{color:#032f62}.phpdebugbar-hljs-built_in,.phpdebugbar-hljs-symbol{color:#e36209}.phpdebugbar-hljs-comment,.phpdebugbar-hljs-code,.phpdebugbar-hljs-formula{color:#6a737d}.phpdebugbar-hljs-name,.phpdebugbar-hljs-quote,.phpdebugbar-hljs-selector-tag,.phpdebugbar-hljs-selector-pseudo{color:#22863a}.phpdebugbar-hljs-subst{color:#24292e}.phpdebugbar-hljs-section{color:#005cc5;font-weight:700}.phpdebugbar-hljs-bullet{color:#735c0f}.phpdebugbar-hljs-emphasis{color:#24292e;font-style:italic}.phpdebugbar-hljs-strong{color:#24292e;font-weight:700}.phpdebugbar-hljs-addition{color:#22863a;background-color:#f0fff4}.phpdebugbar-hljs-deletion{color:#b31d28;background-color:#ffeef0}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/[data-theme=dark] .phpdebugbar-hljs-doctag,[data-theme=dark] .phpdebugbar-hljs-keyword,[data-theme=dark] .phpdebugbar-hljs-meta [data-theme=dark] .phpdebugbar-hljs-keyword,[data-theme=dark] .phpdebugbar-hljs-template-tag,[data-theme=dark] .phpdebugbar-hljs-template-variable,[data-theme=dark] .phpdebugbar-hljs-type,[data-theme=dark] .phpdebugbar-hljs-variable.language_{color:#ff7b72}[data-theme=dark] .phpdebugbar-hljs-title,[data-theme=dark] .phpdebugbar-hljs-title.class_,[data-theme=dark] .phpdebugbar-hljs-title.class_.inherited__,[data-theme=dark] .phpdebugbar-hljs-title.function_{color:#d2a8ff}[data-theme=dark] .phpdebugbar-hljs-attr,[data-theme=dark] .phpdebugbar-hljs-attribute,[data-theme=dark] .phpdebugbar-hljs-literal,[data-theme=dark] .phpdebugbar-hljs-meta,[data-theme=dark] .phpdebugbar-hljs-number,[data-theme=dark] .phpdebugbar-hljs-operator,[data-theme=dark] .phpdebugbar-hljs-variable,[data-theme=dark] .phpdebugbar-hljs-selector-attr,[data-theme=dark] .phpdebugbar-hljs-selector-class,[data-theme=dark] .phpdebugbar-hljs-selector-id{color:#79c0ff}[data-theme=dark] .phpdebugbar-hljs-regexp,[data-theme=dark] .phpdebugbar-hljs-string,[data-theme=dark] .phpdebugbar-hljs-meta [data-theme=dark] .phpdebugbar-hljs-string{color:#a5d6ff}[data-theme=dark] .phpdebugbar-hljs-built_in,[data-theme=dark] .phpdebugbar-hljs-symbol{color:#ffa657}[data-theme=dark] .phpdebugbar-hljs-comment,[data-theme=dark] .phpdebugbar-hljs-code,[data-theme=dark] .phpdebugbar-hljs-formula{color:#8b949e}[data-theme=dark] .phpdebugbar-hljs-name,[data-theme=dark] .phpdebugbar-hljs-quote,[data-theme=dark] .phpdebugbar-hljs-selector-tag,[data-theme=dark] .phpdebugbar-hljs-selector-pseudo{color:#7ee787}[data-theme=dark] .phpdebugbar-hljs-subst{color:#c9d1d9}[data-theme=dark] .phpdebugbar-hljs-section{color:#1f6feb;font-weight:700}[data-theme=dark] .phpdebugbar-hljs-bullet{color:#f2cc60}[data-theme=dark] .phpdebugbar-hljs-emphasis{color:#c9d1d9;font-style:italic}[data-theme=dark] .phpdebugbar-hljs-strong{color:#c9d1d9;font-weight:700}[data-theme=dark] .phpdebugbar-hljs-addition{color:#aff5b4;background-color:#033a16}[data-theme=dark] .phpdebugbar-hljs-deletion{color:#ffdcd7;background-color:#67060c}.phpdebugbar pre.sf-dump .sf-dump-compact{display:none}.phpdebugbar pre.sf-dump{display:block;white-space:pre;padding:5px;overflow:initial!important}.phpdebugbar pre.sf-dump a{text-decoration:none;cursor:pointer;border:0;outline:none;color:inherit}.phpdebugbar pre.sf-dump,.phpdebugbar pre.sf-dump .sf-dump-default{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.phpdebugbar pre.sf-dump .sf-dump-num{font-weight:700;color:#1299da}.phpdebugbar pre.sf-dump .sf-dump-const{font-weight:700}.phpdebugbar pre.sf-dump .sf-dump-str{font-weight:700;color:#3a9b26}.phpdebugbar pre.sf-dump .sf-dump-note{color:#1299da}.phpdebugbar pre.sf-dump .sf-dump-ref{color:#7b7b7b}.phpdebugbar pre.sf-dump .sf-dump-public,.phpdebugbar pre.sf-dump .sf-dump-protected,.phpdebugbar pre.sf-dump .sf-dump-private{color:#000}.phpdebugbar pre.sf-dump .sf-dump-meta{color:#b729d9}.phpdebugbar pre.sf-dump .sf-dump-key{color:#3a9b26}.phpdebugbar pre.sf-dump .sf-dump-index{color:#1299da}.phpdebugbar[data-theme=dark] pre.sf-dump,pre.sf-dump .sf-dump-default{background-color:#18171b;color:#ff8400;line-height:1.2em;font:12px Menlo,Monaco,Consolas,monospace;word-wrap:break-word;white-space:pre-wrap;position:relative;z-index:99999;word-break:break-all}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-num{font-weight:700;color:#1299da}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-const{font-weight:700}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-str{font-weight:700;color:#56db3a}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-note{color:#1299da}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-ref{color:#a0a0a0}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-public,.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-protected,.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-private{color:#fff}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-meta{color:#b729d9}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-key{color:#56db3a}.phpdebugbar[data-theme=dark] pre.sf-dump .sf-dump-index{color:#1299da}.phpdebugbar pre.sf-dump samp{display:block;padding-left:2ch}.phpdebugbar pre.sf-dump .sf-dump-preview{opacity:.6;cursor:pointer;display:inline-block;max-width:80%;vertical-align:top;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-left:.4em}.phpdebugbar pre.sf-dump .sf-dump-hidden{display:none!important} diff --git a/resources/dist/debugbar.min.js b/resources/dist/debugbar.min.js new file mode 100644 index 000000000..5078e1883 --- /dev/null +++ b/resources/dist/debugbar.min.js @@ -0,0 +1,22 @@ +(()=>{var Pn=Object.defineProperty,Un=Object.defineProperties;var Bn=Object.getOwnPropertyDescriptors;var Pt=Object.getOwnPropertySymbols;var Hn=Object.prototype.hasOwnProperty,Wn=Object.prototype.propertyIsEnumerable;var Bt=Math.pow,Ut=(s,W,S)=>W in s?Pn(s,W,{enumerable:!0,configurable:!0,writable:!0,value:S}):s[W]=S,et=(s,W)=>{for(var S in W||(W={}))Hn.call(W,S)&&Ut(s,S,W[S]);if(Pt)for(var S of Pt(W))Wn.call(W,S)&&Ut(s,S,W[S]);return s},Ht=(s,W)=>Un(s,Bn(W));var Wt=(s,W,S)=>new Promise((g,d)=>{var w=M=>{try{B(S.next(M))}catch(U){d(U)}},c=M=>{try{B(S.throw(M))}catch(U){d(U)}},B=M=>M.done?g(M.value):Promise.resolve(M.value).then(w,c);B((S=S.apply(s,W)).next())});(()=>{var s=Object.create,W=Object.defineProperty,S=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,d=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,c=(L,k)=>()=>(k||L((k={exports:{}}).exports,k),k.exports),B=(L,k,q,ee)=>{if(k&&typeof k=="object"||typeof k=="function")for(let ne of g(k))!w.call(L,ne)&&ne!==q&&W(L,ne,{get:()=>k[ne],enumerable:!(ee=S(k,ne))||ee.enumerable});return L},M=(L,k,q)=>(q=L!=null?s(d(L)):{},B(k||!L||!L.__esModule?W(q,"default",{value:L,enumerable:!0}):q,L)),U=c((L,k)=>{function q(n){return n instanceof Map?n.clear=n.delete=n.set=function(){throw new Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=function(){throw new Error("set is read-only")}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach(x=>{let j=n[x],Z=typeof j;(Z==="object"||Z==="function")&&!Object.isFrozen(j)&&q(j)}),n}var ee=class{constructor(n){n.data===void 0&&(n.data={}),this.data=n.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}};function ne(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function le(n,...x){let j=Object.create(null);for(let Z in n)j[Z]=n[Z];return x.forEach(function(Z){for(let de in Z)j[de]=Z[de]}),j}var ae="",se=n=>!!n.scope,ge=(n,{prefix:x})=>{if(n.startsWith("language:"))return n.replace("language:","language-");if(n.includes(".")){let j=n.split(".");return[`${x}${j.shift()}`,...j.map((Z,de)=>`${Z}${"_".repeat(de+1)}`)].join(" ")}return`${x}${n}`},ce=class{constructor(n,x){this.buffer="",this.classPrefix=x.classPrefix,n.walk(this)}addText(n){this.buffer+=ne(n)}openNode(n){if(!se(n))return;let x=ge(n.scope,{prefix:this.classPrefix});this.span(x)}closeNode(n){se(n)&&(this.buffer+=ae)}value(){return this.buffer}span(n){this.buffer+=``}},Ie=(n={})=>{let x={children:[]};return Object.assign(x,n),x},Me=class Ft{constructor(){this.rootNode=Ie(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(x){this.top.children.push(x)}openNode(x){let j=Ie({scope:x});this.add(j),this.stack.push(j)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(x){return this.constructor._walk(x,this.rootNode)}static _walk(x,j){return typeof j=="string"?x.addText(j):j.children&&(x.openNode(j),j.children.forEach(Z=>this._walk(x,Z)),x.closeNode(j)),x}static _collapse(x){typeof x!="string"&&x.children&&(x.children.every(j=>typeof j=="string")?x.children=[x.children.join("")]:x.children.forEach(j=>{Ft._collapse(j)}))}},Le=class extends Me{constructor(n){super(),this.options=n}addText(n){n!==""&&this.add(n)}startScope(n){this.openNode(n)}endScope(){this.closeNode()}__addSublanguage(n,x){let j=n.root;x&&(j.scope=`language:${x}`),this.add(j)}toHTML(){return new ce(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}};function me(n){return n?typeof n=="string"?n:n.source:null}function Ce(n){return Te("(?=",n,")")}function De(n){return Te("(?:",n,")*")}function Pe(n){return Te("(?:",n,")?")}function Te(...n){return n.map(x=>me(x)).join("")}function ke(n){let x=n[n.length-1];return typeof x=="object"&&x.constructor===Object?(n.splice(n.length-1,1),x):{}}function ve(...n){return"("+(ke(n).capture?"":"?:")+n.map(x=>me(x)).join("|")+")"}function xe(n){return new RegExp(n.toString()+"|").exec("").length-1}function he(n,x){let j=n&&n.exec(x);return j&&j.index===0}var we=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function ye(n,{joinWith:x}){let j=0;return n.map(Z=>{j+=1;let de=j,ue=me(Z),$="";for(;ue.length>0;){let V=we.exec(ue);if(!V){$+=ue;break}$+=ue.substring(0,V.index),ue=ue.substring(V.index+V[0].length),V[0][0]==="\\"&&V[1]?$+="\\"+String(Number(V[1])+de):($+=V[0],V[0]==="("&&j++)}return $}).map(Z=>`(${Z})`).join(x)}var Ge=/\b\B/,_e="[a-zA-Z]\\w*",je="[a-zA-Z_]\\w*",Xe="\\b\\d+(\\.\\d+)?",Ke="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Ae="\\b(0b[01]+)",Ne="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Ue=(n={})=>{let x=/^#![ ]*\//;return n.binary&&(n.begin=Te(x,/.*\b/,n.binary,/\b.*/)),le({scope:"meta",begin:x,end:/$/,relevance:0,"on:begin":(j,Z)=>{j.index!==0&&Z.ignoreMatch()}},n)},qe={begin:"\\\\[\\s\\S]",relevance:0},Se={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[qe]},Ve={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[qe]},Qe={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},$e=function(n,x,j={}){let Z=le({scope:"comment",begin:n,end:x,contains:[]},j);Z.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});let de=ve("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return Z.contains.push({begin:Te(/[ ]+/,"(",de,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),Z},st=$e("//","$"),at=$e("/\\*","\\*/"),Gt=$e("#","$"),jt={scope:"number",begin:Xe,relevance:0},Vt={scope:"number",begin:Ke,relevance:0},$t={scope:"number",begin:Ae,relevance:0},zt={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[qe,{begin:/\[/,end:/\]/,relevance:0,contains:[qe]}]},Yt={scope:"title",begin:_e,relevance:0},Xt={scope:"title",begin:je,relevance:0},Kt={begin:"\\.\\s*"+je,relevance:0},qt=function(n){return Object.assign(n,{"on:begin":(x,j)=>{j.data._beginMatch=x[1]},"on:end":(x,j)=>{j.data._beginMatch!==x[1]&&j.ignoreMatch()}})},rt=Object.freeze({__proto__:null,APOS_STRING_MODE:Se,BACKSLASH_ESCAPE:qe,BINARY_NUMBER_MODE:$t,BINARY_NUMBER_RE:Ae,COMMENT:$e,C_BLOCK_COMMENT_MODE:at,C_LINE_COMMENT_MODE:st,C_NUMBER_MODE:Vt,C_NUMBER_RE:Ke,END_SAME_AS_BEGIN:qt,HASH_COMMENT_MODE:Gt,IDENT_RE:_e,MATCH_NOTHING_RE:Ge,METHOD_GUARD:Kt,NUMBER_MODE:jt,NUMBER_RE:Xe,PHRASAL_WORDS_MODE:Qe,QUOTE_STRING_MODE:Ve,REGEXP_MODE:zt,RE_STARTERS_RE:Ne,SHEBANG:Ue,TITLE_MODE:Yt,UNDERSCORE_IDENT_RE:je,UNDERSCORE_TITLE_MODE:Xt});function Qt(n,x){n.input[n.index-1]==="."&&x.ignoreMatch()}function Zt(n,x){n.className!==void 0&&(n.scope=n.className,delete n.className)}function Jt(n,x){x&&n.beginKeywords&&(n.begin="\\b("+n.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",n.__beforeBegin=Qt,n.keywords=n.keywords||n.beginKeywords,delete n.beginKeywords,n.relevance===void 0&&(n.relevance=0))}function en(n,x){Array.isArray(n.illegal)&&(n.illegal=ve(...n.illegal))}function tn(n,x){if(n.match){if(n.begin||n.end)throw new Error("begin & end are not supported with match");n.begin=n.match,delete n.match}}function nn(n,x){n.relevance===void 0&&(n.relevance=1)}var sn=(n,x)=>{if(!n.beforeMatch)return;if(n.starts)throw new Error("beforeMatch cannot be used with starts");let j=Object.assign({},n);Object.keys(n).forEach(Z=>{delete n[Z]}),n.keywords=j.keywords,n.begin=Te(j.beforeMatch,Ce(j.begin)),n.starts={relevance:0,contains:[Object.assign(j,{endsParent:!0})]},n.relevance=0,delete j.beforeMatch},an=["of","and","for","in","not","or","if","then","parent","list","value"],rn="keyword";function Rt(n,x,j=rn){let Z=Object.create(null);return typeof n=="string"?de(j,n.split(" ")):Array.isArray(n)?de(j,n):Object.keys(n).forEach(function(ue){Object.assign(Z,Rt(n[ue],x,ue))}),Z;function de(ue,$){x&&($=$.map(V=>V.toLowerCase())),$.forEach(function(V){let K=V.split("|");Z[K[0]]=[ue,on(K[0],K[1])]})}}function on(n,x){return x?Number(x):ln(n)?0:1}function ln(n){return an.includes(n.toLowerCase())}var Lt={},Ze=n=>{console.error(n)},Nt=(n,...x)=>{console.log(`WARN: ${n}`,...x)},tt=(n,x)=>{Lt[`${n}/${x}`]||(console.log(`Deprecated as of ${n}. ${x}`),Lt[`${n}/${x}`]=!0)},ot=new Error;function _t(n,x,{key:j}){let Z=0,de=n[j],ue={},$={};for(let V=1;V<=x.length;V++)$[V+Z]=de[V],ue[V+Z]=!0,Z+=xe(x[V-1]);n[j]=$,n[j]._emit=ue,n[j]._multi=!0}function cn(n){if(Array.isArray(n.begin)){if(n.skip||n.excludeBegin||n.returnBegin)throw Ze("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),ot;if(typeof n.beginScope!="object"||n.beginScope===null)throw Ze("beginScope must be object"),ot;_t(n,n.begin,{key:"beginScope"}),n.begin=ye(n.begin,{joinWith:""})}}function dn(n){if(Array.isArray(n.end)){if(n.skip||n.excludeEnd||n.returnEnd)throw Ze("skip, excludeEnd, returnEnd not compatible with endScope: {}"),ot;if(typeof n.endScope!="object"||n.endScope===null)throw Ze("endScope must be object"),ot;_t(n,n.end,{key:"endScope"}),n.end=ye(n.end,{joinWith:""})}}function un(n){n.scope&&typeof n.scope=="object"&&n.scope!==null&&(n.beginScope=n.scope,delete n.scope)}function pn(n){un(n),typeof n.beginScope=="string"&&(n.beginScope={_wrap:n.beginScope}),typeof n.endScope=="string"&&(n.endScope={_wrap:n.endScope}),cn(n),dn(n)}function hn(n){function x($,V){return new RegExp(me($),"m"+(n.case_insensitive?"i":"")+(n.unicodeRegex?"u":"")+(V?"g":""))}class j{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(V,K){K.position=this.position++,this.matchIndexes[this.matchAt]=K,this.regexes.push([K,V]),this.matchAt+=xe(V)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);let V=this.regexes.map(K=>K[1]);this.matcherRe=x(ye(V,{joinWith:"|"}),!0),this.lastIndex=0}exec(V){this.matcherRe.lastIndex=this.lastIndex;let K=this.matcherRe.exec(V);if(!K)return null;let fe=K.findIndex((it,Et)=>Et>0&&it!==void 0),pe=this.matchIndexes[fe];return K.splice(0,fe),Object.assign(K,pe)}}class Z{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(V){if(this.multiRegexes[V])return this.multiRegexes[V];let K=new j;return this.rules.slice(V).forEach(([fe,pe])=>K.addRule(fe,pe)),K.compile(),this.multiRegexes[V]=K,K}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(V,K){this.rules.push([V,K]),K.type==="begin"&&this.count++}exec(V){let K=this.getMatcher(this.regexIndex);K.lastIndex=this.lastIndex;let fe=K.exec(V);if(this.resumingScanAtSamePosition()&&!(fe&&fe.index===this.lastIndex)){let pe=this.getMatcher(0);pe.lastIndex=this.lastIndex+1,fe=pe.exec(V)}return fe&&(this.regexIndex+=fe.position+1,this.regexIndex===this.count&&this.considerAll()),fe}}function de($){let V=new Z;return $.contains.forEach(K=>V.addRule(K.begin,{rule:K,type:"begin"})),$.terminatorEnd&&V.addRule($.terminatorEnd,{type:"end"}),$.illegal&&V.addRule($.illegal,{type:"illegal"}),V}function ue($,V){let K=$;if($.isCompiled)return K;[Zt,tn,pn,sn].forEach(pe=>pe($,V)),n.compilerExtensions.forEach(pe=>pe($,V)),$.__beforeBegin=null,[Jt,en,nn].forEach(pe=>pe($,V)),$.isCompiled=!0;let fe=null;return typeof $.keywords=="object"&&$.keywords.$pattern&&($.keywords=Object.assign({},$.keywords),fe=$.keywords.$pattern,delete $.keywords.$pattern),fe=fe||/\w+/,$.keywords&&($.keywords=Rt($.keywords,n.case_insensitive)),K.keywordPatternRe=x(fe,!0),V&&($.begin||($.begin=/\B|\b/),K.beginRe=x(K.begin),!$.end&&!$.endsWithParent&&($.end=/\B|\b/),$.end&&(K.endRe=x(K.end)),K.terminatorEnd=me(K.end)||"",$.endsWithParent&&V.terminatorEnd&&(K.terminatorEnd+=($.end?"|":"")+V.terminatorEnd)),$.illegal&&(K.illegalRe=x($.illegal)),$.contains||($.contains=[]),$.contains=[].concat(...$.contains.map(function(pe){return En(pe==="self"?$:pe)})),$.contains.forEach(function(pe){ue(pe,K)}),$.starts&&ue($.starts,V),K.matcher=de(K),K}if(n.compilerExtensions||(n.compilerExtensions=[]),n.contains&&n.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return n.classNameAliases=le(n.classNameAliases||{}),ue(n)}function St(n){return n?n.endsWithParent||St(n.starts):!1}function En(n){return n.variants&&!n.cachedVariants&&(n.cachedVariants=n.variants.map(function(x){return le(n,{variants:null},x)})),n.cachedVariants?n.cachedVariants:St(n)?le(n,{starts:n.starts?le(n.starts):null}):Object.isFrozen(n)?le(n):n}var gn="11.11.1",mn=class extends Error{constructor(n,x){super(n),this.name="HTMLInjectionError",this.html=x}},ht=ne,yt=le,At=Symbol("nomatch"),fn=7,Ot=function(n){let x=Object.create(null),j=Object.create(null),Z=[],de=!0,ue="Could not find the language '{}', did you forget to load/include a language module?",$={disableAutodetect:!0,name:"Plain text",contains:[]},V={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:Le};function K(D){return V.noHighlightRe.test(D)}function fe(D){let Y=D.className+" ";Y+=D.parentNode?D.parentNode.className:"";let te=V.languageDetectRe.exec(Y);if(te){let re=ze(te[1]);return re||(Nt(ue.replace("{}",te[1])),Nt("Falling back to no-highlight mode for this block.",D)),re?te[1]:"no-highlight"}return Y.split(/\s+/).find(re=>K(re)||ze(re))}function pe(D,Y,te){let re="",Ee="";typeof Y=="object"?(re=D,te=Y.ignoreIllegals,Ee=Y.language):(tt("10.7.0","highlight(lang, code, ...args) has been deprecated."),tt("10.7.0",`Please use highlight(code, options) instead. +https://github.com/highlightjs/highlight.js/issues/2277`),Ee=D,re=Y),te===void 0&&(te=!0);let Be={code:re,language:Ee};ct("before:highlight",Be);let Ye=Be.result?Be.result:it(Be.language,Be.code,te);return Ye.code=Be.code,ct("after:highlight",Ye),Ye}function it(D,Y,te,re){let Ee=Object.create(null);function Be(F,z){return F.keywords[z]}function Ye(){if(!Q.keywords){be.addText(oe);return}let F=0;Q.keywordPatternRe.lastIndex=0;let z=Q.keywordPatternRe.exec(oe),J="";for(;z;){J+=oe.substring(F,z.index);let ie=We.case_insensitive?z[0].toLowerCase():z[0],Re=Be(Q,ie);if(Re){let[Fe,kn]=Re;if(be.addText(J),J="",Ee[ie]=(Ee[ie]||0)+1,Ee[ie]<=fn&&(pt+=kn),Fe.startsWith("_"))J+=z[0];else{let Mn=We.classNameAliases[Fe]||Fe;He(z[0],Mn)}}else J+=z[0];F=Q.keywordPatternRe.lastIndex,z=Q.keywordPatternRe.exec(oe)}J+=oe.substring(F),be.addText(J)}function dt(){if(oe==="")return;let F=null;if(typeof Q.subLanguage=="string"){if(!x[Q.subLanguage]){be.addText(oe);return}F=it(Q.subLanguage,oe,!0,Mt[Q.subLanguage]),Mt[Q.subLanguage]=F._top}else F=gt(oe,Q.subLanguage.length?Q.subLanguage:null);Q.relevance>0&&(pt+=F.relevance),be.__addSublanguage(F._emitter,F.language)}function Oe(){Q.subLanguage!=null?dt():Ye(),oe=""}function He(F,z){F!==""&&(be.startScope(z),be.addText(F),be.endScope())}function xt(F,z){let J=1,ie=z.length-1;for(;J<=ie;){if(!F._emit[J]){J++;continue}let Re=We.classNameAliases[F[J]]||F[J],Fe=z[J];Re?He(Fe,Re):(oe=Fe,Ye(),oe=""),J++}}function wt(F,z){return F.scope&&typeof F.scope=="string"&&be.openNode(We.classNameAliases[F.scope]||F.scope),F.beginScope&&(F.beginScope._wrap?(He(oe,We.classNameAliases[F.beginScope._wrap]||F.beginScope._wrap),oe=""):F.beginScope._multi&&(xt(F.beginScope,z),oe="")),Q=Object.create(F,{parent:{value:Q}}),Q}function Dt(F,z,J){let ie=he(F.endRe,J);if(ie){if(F["on:end"]){let Re=new ee(F);F["on:end"](z,Re),Re.isMatchIgnored&&(ie=!1)}if(ie){for(;F.endsParent&&F.parent;)F=F.parent;return F}}if(F.endsWithParent)return Dt(F.parent,z,J)}function Cn(F){return Q.matcher.regexIndex===0?(oe+=F[0],1):(Tt=!0,0)}function vn(F){let z=F[0],J=F.rule,ie=new ee(J),Re=[J.__beforeBegin,J["on:begin"]];for(let Fe of Re)if(Fe&&(Fe(F,ie),ie.isMatchIgnored))return Cn(z);return J.skip?oe+=z:(J.excludeBegin&&(oe+=z),Oe(),!J.returnBegin&&!J.excludeBegin&&(oe=z)),wt(J,F),J.returnBegin?0:z.length}function xn(F){let z=F[0],J=Y.substring(F.index),ie=Dt(Q,F,J);if(!ie)return At;let Re=Q;Q.endScope&&Q.endScope._wrap?(Oe(),He(z,Q.endScope._wrap)):Q.endScope&&Q.endScope._multi?(Oe(),xt(Q.endScope,F)):Re.skip?oe+=z:(Re.returnEnd||Re.excludeEnd||(oe+=z),Oe(),Re.excludeEnd&&(oe=z));do Q.scope&&be.closeNode(),!Q.skip&&!Q.subLanguage&&(pt+=Q.relevance),Q=Q.parent;while(Q!==ie.parent);return ie.starts&&wt(ie.starts,F),Re.returnEnd?0:z.length}function wn(){let F=[];for(let z=Q;z!==We;z=z.parent)z.scope&&F.unshift(z.scope);F.forEach(z=>be.openNode(z))}let ut={};function kt(F,z){let J=z&&z[0];if(oe+=F,J==null)return Oe(),0;if(ut.type==="begin"&&z.type==="end"&&ut.index===z.index&&J===""){if(oe+=Y.slice(z.index,z.index+1),!de){let ie=new Error(`0 width match regex (${D})`);throw ie.languageName=D,ie.badRule=ut.rule,ie}return 1}if(ut=z,z.type==="begin")return vn(z);if(z.type==="illegal"&&!te){let ie=new Error('Illegal lexeme "'+J+'" for mode "'+(Q.scope||"")+'"');throw ie.mode=Q,ie}else if(z.type==="end"){let ie=xn(z);if(ie!==At)return ie}if(z.type==="illegal"&&J==="")return oe+=` +`,1;if(bt>1e5&&bt>z.index*3)throw new Error("potential infinite loop, way more iterations than matches");return oe+=J,J.length}let We=ze(D);if(!We)throw Ze(ue.replace("{}",D)),new Error('Unknown language: "'+D+'"');let Dn=hn(We),ft="",Q=re||Dn,Mt={},be=new V.__emitter(V);wn();let oe="",pt=0,Je=0,bt=0,Tt=!1;try{if(We.__emitTokens)We.__emitTokens(Y,be);else{for(Q.matcher.considerAll();;){bt++,Tt?Tt=!1:Q.matcher.considerAll(),Q.matcher.lastIndex=Je;let F=Q.matcher.exec(Y);if(!F)break;let z=Y.substring(Je,F.index),J=kt(z,F);Je=F.index+J}kt(Y.substring(Je))}return be.finalize(),ft=be.toHTML(),{language:D,value:ft,relevance:pt,illegal:!1,_emitter:be,_top:Q}}catch(F){if(F.message&&F.message.includes("Illegal"))return{language:D,value:ht(Y),illegal:!0,relevance:0,_illegalBy:{message:F.message,index:Je,context:Y.slice(Je-100,Je+100),mode:F.mode,resultSoFar:ft},_emitter:be};if(de)return{language:D,value:ht(Y),illegal:!1,relevance:0,errorRaised:F,_emitter:be,_top:Q};throw F}}function Et(D){let Y={value:ht(D),illegal:!1,relevance:0,_top:$,_emitter:new V.__emitter(V)};return Y._emitter.addText(D),Y}function gt(D,Y){Y=Y||V.languages||Object.keys(x);let te=Et(D),re=Y.filter(ze).filter(vt).map(Oe=>it(Oe,D,!1));re.unshift(te);let Ee=re.sort((Oe,He)=>{if(Oe.relevance!==He.relevance)return He.relevance-Oe.relevance;if(Oe.language&&He.language){if(ze(Oe.language).supersetOf===He.language)return 1;if(ze(He.language).supersetOf===Oe.language)return-1}return 0}),[Be,Ye]=Ee,dt=Be;return dt.secondBest=Ye,dt}function bn(D,Y,te){let re=Y&&j[Y]||te;D.classList.add("hljs"),D.classList.add(`language-${re}`)}function mt(D){let Y=null,te=fe(D);if(K(te))return;if(ct("before:highlightElement",{el:D,language:te}),D.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",D);return}if(D.children.length>0&&(V.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(D)),V.throwUnescapedHTML))throw new mn("One of your code blocks includes unescaped HTML.",D.innerHTML);Y=D;let re=Y.textContent,Ee=te?pe(re,{language:te,ignoreIllegals:!0}):gt(re);D.innerHTML=Ee.value,D.dataset.highlighted="yes",bn(D,te,Ee.language),D.result={language:Ee.language,re:Ee.relevance,relevance:Ee.relevance},Ee.secondBest&&(D.secondBest={language:Ee.secondBest.language,relevance:Ee.secondBest.relevance}),ct("after:highlightElement",{el:D,result:Ee,text:re})}function Tn(D){V=yt(V,D)}let Rn=()=>{lt(),tt("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Ln(){lt(),tt("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let It=!1;function lt(){function D(){lt()}if(document.readyState==="loading"){It||window.addEventListener("DOMContentLoaded",D,!1),It=!0;return}document.querySelectorAll(V.cssSelector).forEach(mt)}function Nn(D,Y){let te=null;try{te=Y(n)}catch(re){if(Ze("Language definition for '{}' could not be registered.".replace("{}",D)),de)Ze(re);else throw re;te=$}te.name||(te.name=D),x[D]=te,te.rawDefinition=Y.bind(null,n),te.aliases&&Ct(te.aliases,{languageName:D})}function _n(D){delete x[D];for(let Y of Object.keys(j))j[Y]===D&&delete j[Y]}function Sn(){return Object.keys(x)}function ze(D){return D=(D||"").toLowerCase(),x[D]||x[j[D]]}function Ct(D,{languageName:Y}){typeof D=="string"&&(D=[D]),D.forEach(te=>{j[te.toLowerCase()]=Y})}function vt(D){let Y=ze(D);return Y&&!Y.disableAutodetect}function yn(D){D["before:highlightBlock"]&&!D["before:highlightElement"]&&(D["before:highlightElement"]=Y=>{D["before:highlightBlock"](Object.assign({block:Y.el},Y))}),D["after:highlightBlock"]&&!D["after:highlightElement"]&&(D["after:highlightElement"]=Y=>{D["after:highlightBlock"](Object.assign({block:Y.el},Y))})}function An(D){yn(D),Z.push(D)}function On(D){let Y=Z.indexOf(D);Y!==-1&&Z.splice(Y,1)}function ct(D,Y){let te=D;Z.forEach(function(re){re[te]&&re[te](Y)})}function In(D){return tt("10.7.0","highlightBlock will be removed entirely in v12.0"),tt("10.7.0","Please use highlightElement now."),mt(D)}Object.assign(n,{highlight:pe,highlightAuto:gt,highlightAll:lt,highlightElement:mt,highlightBlock:In,configure:Tn,initHighlighting:Rn,initHighlightingOnLoad:Ln,registerLanguage:Nn,unregisterLanguage:_n,listLanguages:Sn,getLanguage:ze,registerAliases:Ct,autoDetection:vt,inherit:yt,addPlugin:An,removePlugin:On}),n.debugMode=function(){de=!1},n.safeMode=function(){de=!0},n.versionString=gn,n.regex={concat:Te,lookahead:Ce,either:ve,optional:Pe,anyNumberOfTimes:De};for(let D in rt)typeof rt[D]=="object"&&q(rt[D]);return Object.assign(n,rt),n},nt=Ot({});nt.newInstance=()=>Ot({}),k.exports=nt,nt.HighlightJS=nt,nt.default=nt}),p=M(U(),1),e=p.default;function t(L){let k=L.regex,q=/(?![A-Za-z0-9])(?![$])/,ee=k.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,q),ne=k.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,q),le=k.concat(/[A-Z]+/,q),ae={scope:"variable",match:"\\$+"+ee},se={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},ge={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},ce=L.inherit(L.APOS_STRING_MODE,{illegal:null}),Ie=L.inherit(L.QUOTE_STRING_MODE,{illegal:null,contains:L.QUOTE_STRING_MODE.contains.concat(ge)}),Me={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:L.QUOTE_STRING_MODE.contains.concat(ge),"on:begin":(Ae,Ne)=>{Ne.data._beginMatch=Ae[1]||Ae[2]},"on:end":(Ae,Ne)=>{Ne.data._beginMatch!==Ae[1]&&Ne.ignoreMatch()}},Le=L.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),me=`[ +]`,Ce={scope:"string",variants:[Ie,ce,Me,Le]},De={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},Pe=["false","null","true"],Te=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],ke=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],ve={keyword:Te,literal:(Ae=>{let Ne=[];return Ae.forEach(Ue=>{Ne.push(Ue),Ue.toLowerCase()===Ue?Ne.push(Ue.toUpperCase()):Ne.push(Ue.toLowerCase())}),Ne})(Pe),built_in:ke},xe=Ae=>Ae.map(Ne=>Ne.replace(/\|\d+$/,"")),he={variants:[{match:[/new/,k.concat(me,"+"),k.concat("(?!",xe(ke).join("\\b|"),"\\b)"),ne],scope:{1:"keyword",4:"title.class"}}]},we=k.concat(ee,"\\b(?!\\()"),ye={variants:[{match:[k.concat(/::/,k.lookahead(/(?!class\b)/)),we],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[ne,k.concat(/::/,k.lookahead(/(?!class\b)/)),we],scope:{1:"title.class",3:"variable.constant"}},{match:[ne,k.concat("::",k.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[ne,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},Ge={scope:"attr",match:k.concat(ee,k.lookahead(":"),k.lookahead(/(?!::)/))},_e={relevance:0,begin:/\(/,end:/\)/,keywords:ve,contains:[Ge,ae,ye,L.C_BLOCK_COMMENT_MODE,Ce,De,he]},je={relevance:0,match:[/\b/,k.concat("(?!fn\\b|function\\b|",xe(Te).join("\\b|"),"|",xe(ke).join("\\b|"),"\\b)"),ee,k.concat(me,"*"),k.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[_e]};_e.contains.push(je);let Xe=[Ge,ye,L.C_BLOCK_COMMENT_MODE,Ce,De,he],Ke={begin:k.concat(/#\[\s*\\?/,k.either(ne,le)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:Pe,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:Pe,keyword:["new","array"]},contains:["self",...Xe]},...Xe,{scope:"meta",variants:[{match:ne},{match:le}]}]};return{case_insensitive:!1,keywords:ve,contains:[Ke,L.HASH_COMMENT_MODE,L.COMMENT("//","$"),L.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:L.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},se,{scope:"variable.language",match:/\$this\b/},ae,je,ye,{match:[/const/,/\s/,ee],scope:{1:"keyword",3:"variable.constant"}},he,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},L.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:ve,contains:["self",Ke,ae,ye,L.C_BLOCK_COMMENT_MODE,Ce,De]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},L.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[L.inherit(L.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},L.UNDERSCORE_TITLE_MODE]},Ce,De]}}function r(L){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},L.inherit(L.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),L.inherit(L.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}var y="[A-Za-z$_][0-9A-Za-z$_]*",_=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],O=["true","false","null","undefined","NaN","Infinity"],v=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],G=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],P=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],A=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],f=[].concat(P,v,G);function R(L){let k=L.regex,q=(Se,{after:Ve})=>{let Qe="",end:""},le=/<[A-Za-z0-9\\._:-]+\s*\/>/,ae={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(Se,Ve)=>{let Qe=Se[0].length+Se.index,$e=Se.input[Qe];if($e==="<"||$e===","){Ve.ignoreMatch();return}$e===">"&&(q(Se,{after:Qe})||Ve.ignoreMatch());let st,at=Se.input.substring(Qe);if(st=at.match(/^\s*=/)){Ve.ignoreMatch();return}if((st=at.match(/^\s+extends\s+/))&&st.index===0){Ve.ignoreMatch();return}}},se={$pattern:y,keyword:_,literal:O,built_in:f,"variable.language":A},ge="[0-9](_?[0-9])*",ce=`\\.(${ge})`,Ie="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",Me={className:"number",variants:[{begin:`(\\b(${Ie})((${ce})|\\.)?|(${ce}))[eE][+-]?(${ge})\\b`},{begin:`\\b(${Ie})\\b((${ce})\\b|\\.)?|(${ce})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},Le={className:"subst",begin:"\\$\\{",end:"\\}",keywords:se,contains:[]},me={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[L.BACKSLASH_ESCAPE,Le],subLanguage:"xml"}},Ce={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[L.BACKSLASH_ESCAPE,Le],subLanguage:"css"}},De={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[L.BACKSLASH_ESCAPE,Le],subLanguage:"graphql"}},Pe={className:"string",begin:"`",end:"`",contains:[L.BACKSLASH_ESCAPE,Le]},Te={className:"comment",variants:[L.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:ee+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),L.C_BLOCK_COMMENT_MODE,L.C_LINE_COMMENT_MODE]},ke=[L.APOS_STRING_MODE,L.QUOTE_STRING_MODE,me,Ce,De,Pe,{match:/\$\d+/},Me];Le.contains=ke.concat({begin:/\{/,end:/\}/,keywords:se,contains:["self"].concat(ke)});let ve=[].concat(Te,Le.contains),xe=ve.concat([{begin:/(\s*)\(/,end:/\)/,keywords:se,contains:["self"].concat(ve)}]),he={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:se,contains:xe},we={variants:[{match:[/class/,/\s+/,ee,/\s+/,/extends/,/\s+/,k.concat(ee,"(",k.concat(/\./,ee),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,ee],scope:{1:"keyword",3:"title.class"}}]},ye={relevance:0,match:k.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...v,...G]}},Ge={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},_e={variants:[{match:[/function/,/\s+/,ee,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[he],illegal:/%/},je={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Xe(Se){return k.concat("(?!",Se.join("|"),")")}let Ke={match:k.concat(/\b/,Xe([...P,"super","import"].map(Se=>`${Se}\\s*\\(`)),ee,k.lookahead(/\s*\(/)),className:"title.function",relevance:0},Ae={begin:k.concat(/\./,k.lookahead(k.concat(ee,/(?![0-9A-Za-z$_(])/))),end:ee,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Ne={match:[/get|set/,/\s+/,ee,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},he]},Ue="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+L.UNDERSCORE_IDENT_RE+")\\s*=>",qe={match:[/const|var|let/,/\s+/,ee,/\s*/,/=\s*/,/(async\s*)?/,k.lookahead(Ue)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[he]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:se,exports:{PARAMS_CONTAINS:xe,CLASS_REFERENCE:ye},illegal:/#(?![$_A-z])/,contains:[L.SHEBANG({label:"shebang",binary:"node",relevance:5}),Ge,L.APOS_STRING_MODE,L.QUOTE_STRING_MODE,me,Ce,De,Pe,Te,{match:/\$\d+/},Me,ye,{scope:"attr",match:ee+k.lookahead(":"),relevance:0},qe,{begin:"("+L.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[Te,L.REGEXP_MODE,{className:"function",begin:Ue,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:L.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:se,contains:xe}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:ne.begin,end:ne.end},{match:le},{begin:ae.begin,"on:begin":ae.isTrulyOpeningTag,end:ae.end}],subLanguage:"xml",contains:[{begin:ae.begin,end:ae.end,skip:!0,contains:["self"]}]}]},_e,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+L.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[he,L.inherit(L.TITLE_MODE,{begin:ee,className:"title.function"})]},{match:/\.\.\./,relevance:0},Ae,{match:"\\$"+ee,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[he]},Ke,je,we,Ne,{match:/\$[(.]/}]}}function E(L){let k=L.regex,q=L.COMMENT("--","$"),ee={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},ne={begin:/"/,end:/"/,contains:[{match:/""/}]},le=["true","false","unknown"],ae=["double precision","large object","with timezone","without timezone"],se=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],ge=["add","asc","collation","desc","final","first","last","view"],ce=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],Ie=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],Me=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],Le=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],me=Ie,Ce=[...ce,...ge].filter(he=>!Ie.includes(he)),De={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},Pe={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},Te={match:k.concat(/\b/,k.either(...me),/\s*\(/),relevance:0,keywords:{built_in:me}};function ke(he){return k.concat(/\b/,k.either(...he.map(we=>we.replace(/\s+/,"\\s+"))),/\b/)}let ve={scope:"keyword",match:ke(Le),relevance:0};function xe(he,{exceptions:we,when:ye}={}){let Ge=ye;return we=we||[],he.map(_e=>_e.match(/\|\d+$/)||we.includes(_e)?_e:Ge(_e)?`${_e}|0`:_e)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:xe(Ce,{when:he=>he.length<3}),literal:le,type:se,built_in:Me},contains:[{scope:"type",match:ke(ae)},ve,Te,De,ee,ne,L.C_NUMBER_MODE,L.C_BLOCK_COMMENT_MODE,q,Pe]}}function i(L){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}var h=L=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:L.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[L.APOS_STRING_MODE,L.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:L.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),l=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],N=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],T=[...l,...N],b=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),I=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),H=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function m(L){let k=L.regex,q=h(L),ee={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},ne="and or not only",le=/@-?\w[\w]*(-\w+)*/,ae="[a-zA-Z-][a-zA-Z0-9_-]*",se=[L.APOS_STRING_MODE,L.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[q.BLOCK_COMMENT,ee,q.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+ae,relevance:0},q.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+a.join("|")+")"},{begin:":(:)?("+I.join("|")+")"}]},q.CSS_VARIABLE,{className:"attribute",begin:"\\b("+H.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[q.BLOCK_COMMENT,q.HEXCOLOR,q.IMPORTANT,q.CSS_NUMBER_MODE,...se,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...se,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},q.FUNCTION_DISPATCH]},{begin:k.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:le},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:ne,attribute:b.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...se,q.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+T.join("|")+")\\b"}]}}function o(L){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}function u(L){let k=L.regex,q=k.concat(/[\p{L}_]/u,k.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),ee=/[\p{L}0-9._:-]+/u,ne={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},le={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},ae=L.inherit(le,{begin:/\(/,end:/\)/}),se=L.inherit(L.APOS_STRING_MODE,{className:"string"}),ge=L.inherit(L.QUOTE_STRING_MODE,{className:"string"}),ce={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[le,ge,se,ae,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[le,ae,ge,se]}]}]},L.COMMENT(//,{relevance:10}),{begin://,relevance:10},ne,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[ge]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[ce],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[ce],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:k.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:q,relevance:0,starts:ce}]},{className:"tag",begin:k.concat(/<\//,k.lookahead(k.concat(q,/>/))),contains:[{className:"name",begin:q,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function C(L){let k="true false yes no null",q="[\\w#;/?:@&=+$,.~*'()[\\]]+",ee={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},ne={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},le={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},ae={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[L.BACKSLASH_ESCAPE,ne]},se=L.inherit(ae,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),ge={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},ce={end:",",endsWithParent:!0,excludeEnd:!0,keywords:k,relevance:0},Ie={begin:/\{/,end:/\}/,contains:[ce],illegal:"\\n",relevance:0},Me={begin:"\\[",end:"\\]",contains:[ce],illegal:"\\n",relevance:0},Le=[ee,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+q},{className:"type",begin:"!<"+q+">"},{className:"type",begin:"!"+q},{className:"type",begin:"!!"+q},{className:"meta",begin:"&"+L.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+L.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},L.HASH_COMMENT_MODE,{beginKeywords:k,keywords:{literal:k}},ge,{className:"number",begin:L.C_NUMBER_RE+"\\b",relevance:0},Ie,Me,le,ae],me=[...Le];return me.pop(),me.push(se),ce.contains=me,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:Le}}e.registerLanguage("php",t),e.registerLanguage("php-template",r),e.registerLanguage("javascript",R),e.registerLanguage("sql",E),e.registerLanguage("shell",i),e.registerLanguage("css",m),e.registerLanguage("plaintext",o),e.registerLanguage("xml",u),e.registerLanguage("yaml",C);var X=e.getLanguage("sql");X.keywords.keyword=Array.from(new Set([...X.keywords.keyword,"if","ifnull","limit","aes_decrypt","aes_encrypt","ascii","bin","bit_and","bit_count","bit_length","bit_or","bit_xor","coercibility","concat","group_concat","concat_ws","connection_id","conv","curdate","curtime","database","date_add","date_format","date_sub","dayname","dayofmonth","dayofweek","dayofyear","elt","export_set","field","find_in_set","format","from_base64","from_days","from_unixtime","get_lock","greatest","hex","ifnull","inet_aton","inet_ntoa","instr","isnull","last_insert_id","least","lpad","ltrim","make_set","md5","monthname","now","oct","ord","password","quote","release_lock","repeat","replace","reverse","rpad","rtrim","sec_to_time","sha1","sha2","sleep","soundex","space","straight_join","strcmp","str_to_date","substr","sysdate","time_format","time_to_sec","to_base64","to_days","unix_timestamp","updatexml","version","week","weekday","yearweek","length","substring_index","json_unquote","json_extract","json_contains"])),X.keywords.type=Array.from(new Set([...X.keywords.type,"longtext"])),e.configure({classPrefix:"phpdebugbar-hljs-"}),globalThis.phpdebugbar_hljs=e.default})();(()=>{var s=Object.create,W=Object.defineProperty,S=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,d=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,c=(i,h)=>()=>(h||i((h={exports:{}}).exports,h),h.exports),B=(i,h,l,N)=>{if(h&&typeof h=="object"||typeof h=="function")for(let T of g(h))!w.call(i,T)&&T!==l&&W(i,T,{get:()=>h[T],enumerable:!(N=S(h,T))||N.enumerable});return i},M=(i,h,l)=>(l=i!=null?s(d(i)):{},B(h||!i||!i.__esModule?W(l,"default",{value:i,enumerable:!0}):l,i)),U=c(i=>{"use strict";i.__esModule=!0;var h=/[\\^$.*+?()[\]{}|]/g,l=RegExp(h.source);function N(T){return T&&l.test(T)?T.replace(h,"\\$&"):T||""}i.default=N}),p=c(i=>{"use strict";i.__esModule=!0,i.TokenTypes=void 0;var h;(function(l){l.WHITESPACE="whitespace",l.WORD="word",l.STRING="string",l.RESERVED="reserved",l.RESERVED_TOP_LEVEL="reserved-top-level",l.RESERVED_TOP_LEVEL_NO_INDENT="reserved-top-level-no-indent",l.RESERVED_NEWLINE="reserved-newline",l.OPERATOR="operator",l.NO_SPACE_OPERATOR="no-space-operator",l.OPEN_PAREN="open-paren",l.CLOSE_PAREN="close-paren",l.LINE_COMMENT="line-comment",l.BLOCK_COMMENT="block-comment",l.NUMBER="number",l.PLACEHOLDER="placeholder",l.SERVERVARIABLE="servervariable"})(h=i.TokenTypes||(i.TokenTypes={}))}),e=c(i=>{"use strict";var h=i&&i.__importDefault||function(b){return b&&b.__esModule?b:{default:b}};i.__esModule=!0;var l=h(U()),N=p(),T=(function(){function b(a){this.WHITESPACE_REGEX=/^(\s+)/u,this.NUMBER_REGEX=/^((-\s*)?[0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+|([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}))\b/u,this.AMBIGUOS_OPERATOR_REGEX=/^(\?\||\?&)/u,this.OPERATOR_REGEX=/^(!=|<>|>>|<<|==|<=|>=|!<|!>|\|\|\/|\|\/|\|\||~~\*|~~|!~~\*|!~~|~\*|!~\*|!~|:=|=>|&&|@>|<@|#-|@@|@|.)/u,this.NO_SPACE_OPERATOR_REGEX=/^(::|->>|->|#>>|#>)/u,this.BLOCK_COMMENT_REGEX=/^(\/\*[^]*?(?:\*\/|$))/u,this.LINE_COMMENT_REGEX=this.createLineCommentRegex(a.lineCommentTypes),this.RESERVED_TOP_LEVEL_REGEX=this.createReservedWordRegex(a.reservedTopLevelWords),this.RESERVED_TOP_LEVEL_NO_INDENT_REGEX=this.createReservedWordRegex(a.reservedTopLevelWordsNoIndent),this.RESERVED_NEWLINE_REGEX=this.createReservedWordRegex(a.reservedNewlineWords),this.RESERVED_PLAIN_REGEX=this.createReservedWordRegex(a.reservedWords),this.WORD_REGEX=this.createWordRegex(a.specialWordChars),this.STRING_REGEX=this.createStringRegex(a.stringTypes),this.OPEN_PAREN_REGEX=this.createParenRegex(a.openParens),this.CLOSE_PAREN_REGEX=this.createParenRegex(a.closeParens),this.INDEXED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(a.indexedPlaceholderTypes,"[0-9]*"),this.IDENT_NAMED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(a.namedPlaceholderTypes,"[a-zA-Z0-9._$]+"),this.STRING_NAMED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(a.namedPlaceholderTypes,this.createStringPattern(a.stringTypes))}return b.prototype.createLineCommentRegex=function(a){var I="((?|(?:[^>]))";return new RegExp("^((?:".concat(a.map(function(H){return(0,l.default)(H)}).join("|"),")").concat(I,`.*?(?:\r +|\r| +|$))`),"u")},b.prototype.createReservedWordRegex=function(a){var I=a.join("|").replace(/ /gu,"\\s+");return new RegExp("^(".concat(I,")\\b"),"iu")},b.prototype.createWordRegex=function(a){return new RegExp("^([\\p{Alphabetic}\\p{Mark}\\p{Decimal_Number}\\p{Connector_Punctuation}\\p{Join_Control}".concat(a.join(""),"]+)"),"u")},b.prototype.createStringRegex=function(a){return new RegExp("^("+this.createStringPattern(a)+")","u")},b.prototype.createStringPattern=function(a){var I={"``":"((`[^`]*($|`))+)","[]":"((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)",'""':'(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',"''":"(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)","N''":"((N'[^N'\\\\]*(?:\\\\.[^N'\\\\]*)*('|$))+)","E''":"(((E|e)'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)"};return a.map(function(H){return I[H]}).join("|")},b.prototype.createParenRegex=function(a){var I=this;return new RegExp("^("+a.map(function(H){return I.escapeParen(H)}).join("|")+")","iu")},b.prototype.escapeParen=function(a){return a.length===1?(0,l.default)(a):"\\b"+a+"\\b"},b.prototype.createPlaceholderRegex=function(a,I){if(!a||a.length===0)return null;var H=a.map(l.default).join("|");return new RegExp("^((?:".concat(H,")(?:").concat(I,"))"),"u")},b.prototype.tokenize=function(a){if(!a)return[];for(var I=[],H;a.length;)H=this.getNextToken(a,H),a=a.substring(H.value.length),I.push(H);return I},b.prototype.getNextToken=function(a,I){return this.getWhitespaceToken(a)||this.getCommentToken(a)||this.getStringToken(a)||this.getOpenParenToken(a)||this.getCloseParenToken(a)||this.getAmbiguosOperatorToken(a)||this.getNoSpaceOperatorToken(a)||this.getServerVariableToken(a)||this.getPlaceholderToken(a)||this.getNumberToken(a)||this.getReservedWordToken(a,I)||this.getWordToken(a)||this.getOperatorToken(a)},b.prototype.getWhitespaceToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.WHITESPACE,regex:this.WHITESPACE_REGEX})},b.prototype.getCommentToken=function(a){return this.getLineCommentToken(a)||this.getBlockCommentToken(a)},b.prototype.getLineCommentToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.LINE_COMMENT,regex:this.LINE_COMMENT_REGEX})},b.prototype.getBlockCommentToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.BLOCK_COMMENT,regex:this.BLOCK_COMMENT_REGEX})},b.prototype.getStringToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.STRING,regex:this.STRING_REGEX})},b.prototype.getOpenParenToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.OPEN_PAREN,regex:this.OPEN_PAREN_REGEX})},b.prototype.getCloseParenToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.CLOSE_PAREN,regex:this.CLOSE_PAREN_REGEX})},b.prototype.getPlaceholderToken=function(a){return this.getIdentNamedPlaceholderToken(a)||this.getStringNamedPlaceholderToken(a)||this.getIndexedPlaceholderToken(a)},b.prototype.getServerVariableToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.SERVERVARIABLE,regex:/(^@@\w+)/iu})},b.prototype.getIdentNamedPlaceholderToken=function(a){return this.getPlaceholderTokenWithKey({input:a,regex:this.IDENT_NAMED_PLACEHOLDER_REGEX,parseKey:function(I){return I.slice(1)}})},b.prototype.getStringNamedPlaceholderToken=function(a){var I=this;return this.getPlaceholderTokenWithKey({input:a,regex:this.STRING_NAMED_PLACEHOLDER_REGEX,parseKey:function(H){return I.getEscapedPlaceholderKey({key:H.slice(2,-1),quoteChar:H.slice(-1)})}})},b.prototype.getIndexedPlaceholderToken=function(a){return this.getPlaceholderTokenWithKey({input:a,regex:this.INDEXED_PLACEHOLDER_REGEX,parseKey:function(I){return I.slice(1)}})},b.prototype.getPlaceholderTokenWithKey=function(a){var I=a.input,H=a.regex,m=a.parseKey,o=this.getTokenOnFirstMatch({input:I,regex:H,type:N.TokenTypes.PLACEHOLDER});return o&&(o.key=m(o.value)),o},b.prototype.getEscapedPlaceholderKey=function(a){var I=a.key,H=a.quoteChar;return I.replace(new RegExp((0,l.default)("\\"+H),"gu"),H)},b.prototype.getNumberToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.NUMBER,regex:this.NUMBER_REGEX})},b.prototype.getOperatorToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.OPERATOR,regex:this.OPERATOR_REGEX})},b.prototype.getAmbiguosOperatorToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.OPERATOR,regex:this.AMBIGUOS_OPERATOR_REGEX})},b.prototype.getNoSpaceOperatorToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.NO_SPACE_OPERATOR,regex:this.NO_SPACE_OPERATOR_REGEX})},b.prototype.getReservedWordToken=function(a,I){if(!(I&&I.value&&I.value==="."))return this.getToplevelReservedToken(a)||this.getNewlineReservedToken(a)||this.getTopLevelReservedTokenNoIndent(a)||this.getPlainReservedToken(a)},b.prototype.getToplevelReservedToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.RESERVED_TOP_LEVEL,regex:this.RESERVED_TOP_LEVEL_REGEX})},b.prototype.getNewlineReservedToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.RESERVED_NEWLINE,regex:this.RESERVED_NEWLINE_REGEX})},b.prototype.getPlainReservedToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.RESERVED,regex:this.RESERVED_PLAIN_REGEX})},b.prototype.getTopLevelReservedTokenNoIndent=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.RESERVED_TOP_LEVEL_NO_INDENT,regex:this.RESERVED_TOP_LEVEL_NO_INDENT_REGEX})},b.prototype.getWordToken=function(a){return this.getTokenOnFirstMatch({input:a,type:N.TokenTypes.WORD,regex:this.WORD_REGEX})},b.prototype.getTokenOnFirstMatch=function(a){var I=a.input,H=a.type,m=a.regex,o=I.match(m);if(o)return{type:H,value:o[1]}},b})();i.default=T}),t=c(i=>{"use strict";i.__esModule=!0;var h=function(l){return l===void 0&&(l=[]),l[l.length-1]};i.default=h}),r=c(i=>{"use strict";var h=i&&i.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};i.__esModule=!0;var l=h(t()),N="top-level",T="block-level",b=(function(){function a(I){this.indent=I,this.indentTypes=[],this.indent=I||" "}return a.prototype.getIndent=function(){return new Array(this.indentTypes.length).fill(this.indent).join("")},a.prototype.increaseTopLevel=function(){this.indentTypes.push(N)},a.prototype.increaseBlockLevel=function(){this.indentTypes.push(T)},a.prototype.decreaseTopLevel=function(){(0,l.default)(this.indentTypes)===N&&this.indentTypes.pop()},a.prototype.decreaseBlockLevel=function(){for(;this.indentTypes.length>0;){var I=this.indentTypes.pop();if(I!==N)break}},a.prototype.resetIndentation=function(){this.indentTypes=[]},a})();i.default=b}),y=c(i=>{"use strict";i.__esModule=!0;var h=p(),l=50,N=(function(){function T(){this.level=0}return T.prototype.beginIfPossible=function(b,a){this.level===0&&this.isInlineBlock(b,a)?this.level=1:this.level>0?this.level++:this.level=0},T.prototype.end=function(){this.level--},T.prototype.isActive=function(){return this.level>0},T.prototype.isInlineBlock=function(b,a){for(var I=0,H=0,m=a;ml)return!1;if(o.type===h.TokenTypes.OPEN_PAREN)H++;else if(o.type===h.TokenTypes.CLOSE_PAREN&&(H--,H===0))return!0;if(this.isForbiddenToken(o))return!1}return!1},T.prototype.isForbiddenToken=function(b){var a=b.type,I=b.value;return a===h.TokenTypes.RESERVED_TOP_LEVEL||a===h.TokenTypes.RESERVED_NEWLINE||a===h.TokenTypes.LINE_COMMENT||a===h.TokenTypes.BLOCK_COMMENT||I===";"},T})();i.default=N}),_=c(i=>{"use strict";i.__esModule=!0;var h=(function(){function l(N){this.params=N,this.index=0,this.params=N}return l.prototype.get=function(N){var T=N.key,b=N.value;return this.params?T?this.params[T]:this.params[this.index++]:b},l})();i.default=h}),O=c(i=>{"use strict";var h=i&&i.__importDefault||function(m){return m&&m.__esModule?m:{default:m}};i.__esModule=!0;var l=p(),N=h(r()),T=h(y()),b=h(_()),a=[" "," "],I=function(m){for(var o=m.length-1;o>=0&&a.includes(m[o]);)o--;return m.substring(0,o+1)},H=(function(){function m(o,u,C){this.cfg=o,this.tokenizer=u,this.tokenOverride=C,this.tokens=[],this.previousReservedWord={type:null,value:null},this.previousNonWhiteSpace={type:null,value:null},this.index=0,this.indentation=new N.default(this.cfg.indent),this.inlineBlock=new T.default,this.params=new b.default(this.cfg.params)}return m.prototype.format=function(o){this.tokens=this.tokenizer.tokenize(o);var u=this.getFormattedQueryFromTokens();return u.trim()},m.prototype.getFormattedQueryFromTokens=function(){var o=this,u="";return this.tokens.forEach(function(C,X){o.index=X,o.tokenOverride&&(C=o.tokenOverride(C,o.previousReservedWord)||C),C.type===l.TokenTypes.WHITESPACE?u=o.formatWhitespace(C,u):C.type===l.TokenTypes.LINE_COMMENT?u=o.formatLineComment(C,u):C.type===l.TokenTypes.BLOCK_COMMENT?u=o.formatBlockComment(C,u):C.type===l.TokenTypes.RESERVED_TOP_LEVEL||C.type===l.TokenTypes.RESERVED_TOP_LEVEL_NO_INDENT||C.type===l.TokenTypes.RESERVED_NEWLINE||C.type===l.TokenTypes.RESERVED?u=o.formatReserved(C,u):C.type===l.TokenTypes.OPEN_PAREN?u=o.formatOpeningParentheses(C,u):C.type===l.TokenTypes.CLOSE_PAREN?u=o.formatClosingParentheses(C,u):C.type===l.TokenTypes.NO_SPACE_OPERATOR?u=o.formatWithoutSpaces(C,u):C.type===l.TokenTypes.PLACEHOLDER||C.type===l.TokenTypes.SERVERVARIABLE?u=o.formatPlaceholder(C,u):C.value===","?u=o.formatComma(C,u):C.value===":"?u=o.formatWithSpaceAfter(C,u):C.value==="."?u=o.formatWithoutSpaces(C,u):C.value===";"?u=o.formatQuerySeparator(C,u):u=o.formatWithSpaces(C,u),C.type!==l.TokenTypes.WHITESPACE&&(o.previousNonWhiteSpace=C)}),u},m.prototype.formatWhitespace=function(o,u){return this.cfg.linesBetweenQueries==="preserve"&&/((\r\n|\n)(\r\n|\n)+)/u.test(o.value)&&this.previousToken().value===";"?u.replace(/(\n|\r\n)$/u,"")+o.value:u},m.prototype.formatReserved=function(o,u){return o.type===l.TokenTypes.RESERVED_NEWLINE&&this.previousReservedWord&&this.previousReservedWord.value&&o.value.toUpperCase()==="AND"&&this.previousReservedWord.value.toUpperCase()==="BETWEEN"&&(o.type=l.TokenTypes.RESERVED),o.type===l.TokenTypes.RESERVED_TOP_LEVEL?u=this.formatTopLevelReservedWord(o,u):o.type===l.TokenTypes.RESERVED_TOP_LEVEL_NO_INDENT?u=this.formatTopLevelReservedWordNoIndent(o,u):o.type===l.TokenTypes.RESERVED_NEWLINE?u=this.formatNewlineReservedWord(o,u):u=this.formatWithSpaces(o,u),this.previousReservedWord=o,u},m.prototype.formatLineComment=function(o,u){return this.addNewline(u+o.value)},m.prototype.formatBlockComment=function(o,u){return this.addNewline(this.addNewline(u)+this.indentComment(o.value))},m.prototype.indentComment=function(o){return o.replace(/\n[ \t]*/gu,` +`+this.indentation.getIndent()+" ")},m.prototype.formatTopLevelReservedWordNoIndent=function(o,u){return this.indentation.decreaseTopLevel(),u=this.addNewline(u)+this.equalizeWhitespace(this.formatReservedWord(o.value)),this.addNewline(u)},m.prototype.formatTopLevelReservedWord=function(o,u){var C=this.previousNonWhiteSpace.value!==","&&!["GRANT"].includes("".concat(this.previousNonWhiteSpace.value).toUpperCase());return C&&(this.indentation.decreaseTopLevel(),u=this.addNewline(u)),u=u+this.equalizeWhitespace(this.formatReservedWord(o.value))+" ",C&&this.indentation.increaseTopLevel(),u},m.prototype.formatNewlineReservedWord=function(o,u){return this.addNewline(u)+this.equalizeWhitespace(this.formatReservedWord(o.value))+" "},m.prototype.equalizeWhitespace=function(o){return o.replace(/\s+/gu," ")},m.prototype.formatOpeningParentheses=function(o,u){o.value=this.formatCase(o.value);var C=this.previousToken().type;return C!==l.TokenTypes.WHITESPACE&&C!==l.TokenTypes.OPEN_PAREN&&C!==l.TokenTypes.LINE_COMMENT&&(u=I(u)),u+=o.value,this.inlineBlock.beginIfPossible(this.tokens,this.index),this.inlineBlock.isActive()||(this.indentation.increaseBlockLevel(),u=this.addNewline(u)),u},m.prototype.formatClosingParentheses=function(o,u){return o.value=this.formatCase(o.value),this.inlineBlock.isActive()?(this.inlineBlock.end(),this.formatWithSpaceAfter(o,u)):(this.indentation.decreaseBlockLevel(),this.formatWithSpaces(o,this.addNewline(u)))},m.prototype.formatPlaceholder=function(o,u){return u+this.params.get(o)+" "},m.prototype.formatComma=function(o,u){return u=I(u)+o.value+" ",this.inlineBlock.isActive()||/^LIMIT$/iu.test(this.previousReservedWord.value)?u:this.addNewline(u)},m.prototype.formatWithSpaceAfter=function(o,u){return I(u)+o.value+" "},m.prototype.formatWithoutSpaces=function(o,u){return I(u)+o.value},m.prototype.formatWithSpaces=function(o,u){var C=o.type===l.TokenTypes.RESERVED?this.formatReservedWord(o.value):o.value;return u+C+" "},m.prototype.formatReservedWord=function(o){return this.formatCase(o)},m.prototype.formatQuerySeparator=function(o,u){this.indentation.resetIndentation();var C=` +`;return this.cfg.linesBetweenQueries!=="preserve"&&(C=` +`.repeat(this.cfg.linesBetweenQueries||1)),I(u)+o.value+C},m.prototype.addNewline=function(o){return o=I(o),o.endsWith(` +`)||(o+=` +`),o+this.indentation.getIndent()},m.prototype.previousToken=function(){return this.tokens[this.index-1]||{type:null,value:null}},m.prototype.formatCase=function(o){return this.cfg.reservedWordCase==="upper"?o.toUpperCase():this.cfg.reservedWordCase==="lower"?o.toLowerCase():o},m})();i.default=H}),v=c(i=>{"use strict";var h=i&&i.__importDefault||function(b){return b&&b.__esModule?b:{default:b}};i.__esModule=!0;var l=h(e()),N=h(O()),T=(function(){function b(a){this.cfg=a}return b.prototype.format=function(a){return new N.default(this.cfg,this.tokenizer(),this.tokenOverride).format(a)},b.prototype.tokenize=function(a){return this.tokenizer().tokenize(a)},b.prototype.tokenizer=function(){return new l.default(this.getTokenizerConfig())},b})();i.default=T}),G=c(i=>{"use strict";var h=i&&i.__extends||(function(){var m=function(o,u){return m=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(C,X){C.__proto__=X}||function(C,X){for(var L in X)Object.prototype.hasOwnProperty.call(X,L)&&(C[L]=X[L])},m(o,u)};return function(o,u){if(typeof u!="function"&&u!==null)throw new TypeError("Class extends value "+String(u)+" is not a constructor or null");m(o,u);function C(){this.constructor=o}o.prototype=u===null?Object.create(u):(C.prototype=u.prototype,new C)}})(),l=i&&i.__importDefault||function(m){return m&&m.__esModule?m:{default:m}};i.__esModule=!0;var N=l(v()),T=(function(m){h(o,m);function o(){return m!==null&&m.apply(this,arguments)||this}return o.prototype.getTokenizerConfig=function(){return{reservedWords:b,reservedTopLevelWords:a,reservedNewlineWords:H,reservedTopLevelWordsNoIndent:I,stringTypes:['""',"''","``","[]"],openParens:["("],closeParens:[")"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:[":"],lineCommentTypes:["--"],specialWordChars:["#","@"]}},o})(N.default);i.default=T;var b=["ABS","ACTIVATE","ALIAS","ALL","ALLOCATE","ALLOW","ALTER","ANY","ARE","ARRAY","AS","ASC","ASENSITIVE","ASSOCIATE","ASUTIME","ASYMMETRIC","AT","ATOMIC","ATTRIBUTES","AUDIT","AUTHORIZATION","AUX","AUXILIARY","AVG","BEFORE","BEGIN","BETWEEN","BIGINT","BINARY","BLOB","BOOLEAN","BOTH","BUFFERPOOL","BY","CACHE","CALL","CALLED","CAPTURE","CARDINALITY","CASCADED","CASE","CAST","CCSID","CEIL","CEILING","CHAR","CHARACTER","CHARACTER_LENGTH","CHAR_LENGTH","CHECK","CLOB","CLONE","CLOSE","CLUSTER","COALESCE","COLLATE","COLLECT","COLLECTION","COLLID","COLUMN","COMMENT","COMMIT","CONCAT","CONDITION","CONNECT","CONNECTION","CONSTRAINT","CONTAINS","CONTINUE","CONVERT","CORR","CORRESPONDING","COUNT","COUNT_BIG","COVAR_POP","COVAR_SAMP","CREATE","CROSS","CUBE","CUME_DIST","CURRENT","CURRENT_DATE","CURRENT_DEFAULT_TRANSFORM_GROUP","CURRENT_LC_CTYPE","CURRENT_PATH","CURRENT_ROLE","CURRENT_SCHEMA","CURRENT_SERVER","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_TIMEZONE","CURRENT_TRANSFORM_GROUP_FOR_TYPE","CURRENT_USER","CURSOR","CYCLE","DATA","DATABASE","DATAPARTITIONNAME","DATAPARTITIONNUM","DATE","DAY","DAYS","DB2GENERAL","DB2GENRL","DB2SQL","DBINFO","DBPARTITIONNAME","DBPARTITIONNUM","DEALLOCATE","DEC","DECIMAL","DECLARE","DEFAULT","DEFAULTS","DEFINITION","DELETE","DENSERANK","DENSE_RANK","DEREF","DESCRIBE","DESCRIPTOR","DETERMINISTIC","DIAGNOSTICS","DISABLE","DISALLOW","DISCONNECT","DISTINCT","DO","DOCUMENT","DOUBLE","DROP","DSSIZE","DYNAMIC","EACH","EDITPROC","ELEMENT","ELSE","ELSEIF","ENABLE","ENCODING","ENCRYPTION","END","END-EXEC","ENDING","ERASE","ESCAPE","EVERY","EXCEPTION","EXCLUDING","EXCLUSIVE","EXEC","EXECUTE","EXISTS","EXIT","EXP","EXPLAIN","EXTENDED","EXTERNAL","EXTRACT","FALSE","FENCED","FETCH","FIELDPROC","FILE","FILTER","FINAL","FIRST","FLOAT","FLOOR","FOR","FOREIGN","FREE","FULL","FUNCTION","FUSION","GENERAL","GENERATED","GET","GLOBAL","GOTO","GRANT","GRAPHIC","GROUP","GROUPING","HANDLER","HASH","HASHED_VALUE","HINT","HOLD","HOUR","HOURS","IDENTITY","IF","IMMEDIATE","IN","INCLUDING","INCLUSIVE","INCREMENT","INDEX","INDICATOR","INDICATORS","INF","INFINITY","INHERIT","INNER","INOUT","INSENSITIVE","INSERT","INT","INTEGER","INTEGRITY","INTERSECTION","INTERVAL","INTO","IS","ISOBID","ISOLATION","ITERATE","JAR","JAVA","KEEP","KEY","LABEL","LANGUAGE","LARGE","LATERAL","LC_CTYPE","LEADING","LEAVE","LEFT","LIKE","LINKTYPE","LN","LOCAL","LOCALDATE","LOCALE","LOCALTIME","LOCALTIMESTAMP","LOCATOR","LOCATORS","LOCK","LOCKMAX","LOCKSIZE","LONG","LOOP","LOWER","MAINTAINED","MATCH","MATERIALIZED","MAX","MAXVALUE","MEMBER","MERGE","METHOD","MICROSECOND","MICROSECONDS","MIN","MINUTE","MINUTES","MINVALUE","MOD","MODE","MODIFIES","MODULE","MONTH","MONTHS","MULTISET","NAN","NATIONAL","NATURAL","NCHAR","NCLOB","NEW","NEW_TABLE","NEXTVAL","NO","NOCACHE","NOCYCLE","NODENAME","NODENUMBER","NOMAXVALUE","NOMINVALUE","NONE","NOORDER","NORMALIZE","NORMALIZED","NOT","NULL","NULLIF","NULLS","NUMERIC","NUMPARTS","OBID","OCTET_LENGTH","OF","OFFSET","OLD","OLD_TABLE","ON","ONLY","OPEN","OPTIMIZATION","OPTIMIZE","OPTION","ORDER","OUT","OUTER","OVER","OVERLAPS","OVERLAY","OVERRIDING","PACKAGE","PADDED","PAGESIZE","PARAMETER","PART","PARTITION","PARTITIONED","PARTITIONING","PARTITIONS","PASSWORD","PATH","PERCENTILE_CONT","PERCENTILE_DISC","PERCENT_RANK","PIECESIZE","PLAN","POSITION","POWER","PRECISION","PREPARE","PREVVAL","PRIMARY","PRIQTY","PRIVILEGES","PROCEDURE","PROGRAM","PSID","PUBLIC","QUERY","QUERYNO","RANGE","RANK","READ","READS","REAL","RECOVERY","RECURSIVE","REF","REFERENCES","REFERENCING","REFRESH","REGR_AVGX","REGR_AVGY","REGR_COUNT","REGR_INTERCEPT","REGR_R2","REGR_SLOPE","REGR_SXX","REGR_SXY","REGR_SYY","RELEASE","RENAME","REPEAT","RESET","RESIGNAL","RESTART","RESTRICT","RESULT","RESULT_SET_LOCATOR","RETURN","RETURNS","REVOKE","RIGHT","ROLE","ROLLBACK","ROLLUP","ROUND_CEILING","ROUND_DOWN","ROUND_FLOOR","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_UP","ROUND_UP","ROUTINE","ROW","ROWNUMBER","ROWS","ROWSET","ROW_NUMBER","RRN","RUN","SAVEPOINT","SCHEMA","SCOPE","SCRATCHPAD","SCROLL","SEARCH","SECOND","SECONDS","SECQTY","SECURITY","SENSITIVE","SEQUENCE","SESSION","SESSION_USER","SIGNAL","SIMILAR","SIMPLE","SMALLINT","SNAN","SOME","SOURCE","SPECIFIC","SPECIFICTYPE","SQL","SQLEXCEPTION","SQLID","SQLSTATE","SQLWARNING","SQRT","STACKED","STANDARD","START","STARTING","STATEMENT","STATIC","STATMENT","STAY","STDDEV_POP","STDDEV_SAMP","STOGROUP","STORES","STYLE","SUBMULTISET","SUBSTRING","SUM","SUMMARY","SYMMETRIC","SYNONYM","SYSFUN","SYSIBM","SYSPROC","SYSTEM","SYSTEM_USER","TABLE","TABLESAMPLE","TABLESPACE","THEN","TIME","TIMESTAMP","TIMEZONE_HOUR","TIMEZONE_MINUTE","TO","TRAILING","TRANSACTION","TRANSLATE","TRANSLATION","TREAT","TRIGGER","TRIM","TRUE","TRUNCATE","TYPE","UESCAPE","UNDO","UNIQUE","UNKNOWN","UNNEST","UNTIL","UPPER","USAGE","USER","USING","VALIDPROC","VALUE","VARCHAR","VARIABLE","VARIANT","VARYING","VAR_POP","VAR_SAMP","VCAT","VERSION","VIEW","VOLATILE","VOLUMES","WHEN","WHENEVER","WHILE","WIDTH_BUCKET","WINDOW","WITH","WITHIN","WITHOUT","WLM","WRITE","XMLELEMENT","XMLEXISTS","XMLNAMESPACES","YEAR","YEARS"],a=["ADD","AFTER","ALTER COLUMN","ALTER TABLE","DELETE FROM","EXCEPT","FETCH FIRST","FROM","GROUP BY","GO","HAVING","INSERT INTO","INTERSECT","LIMIT","ORDER BY","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UPDATE","VALUES","WHERE"],I=["INTERSECT","INTERSECT ALL","MINUS","UNION","UNION ALL"],H=["AND","CROSS JOIN","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN"]}),P=c(i=>{"use strict";var h=i&&i.__extends||(function(){var m=function(o,u){return m=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(C,X){C.__proto__=X}||function(C,X){for(var L in X)Object.prototype.hasOwnProperty.call(X,L)&&(C[L]=X[L])},m(o,u)};return function(o,u){if(typeof u!="function"&&u!==null)throw new TypeError("Class extends value "+String(u)+" is not a constructor or null");m(o,u);function C(){this.constructor=o}o.prototype=u===null?Object.create(u):(C.prototype=u.prototype,new C)}})(),l=i&&i.__importDefault||function(m){return m&&m.__esModule?m:{default:m}};i.__esModule=!0;var N=l(v()),T=(function(m){h(o,m);function o(){return m!==null&&m.apply(this,arguments)||this}return o.prototype.getTokenizerConfig=function(){return{reservedWords:b,reservedTopLevelWords:a,reservedNewlineWords:H,reservedTopLevelWordsNoIndent:I,stringTypes:['""',"''","``"],openParens:["(","[","{"],closeParens:[")","]","}"],namedPlaceholderTypes:["$"],lineCommentTypes:["#","--"],specialWordChars:[]}},o})(N.default);i.default=T;var b=["ALL","ALTER","ANALYZE","AND","ANY","ARRAY","AS","ASC","BEGIN","BETWEEN","BINARY","BOOLEAN","BREAK","BUCKET","BUILD","BY","CALL","CASE","CAST","CLUSTER","COLLATE","COLLECTION","COMMIT","CONNECT","CONTINUE","CORRELATE","COVER","CREATE","DATABASE","DATASET","DATASTORE","DECLARE","DECREMENT","DELETE","DERIVED","DESC","DESCRIBE","DISTINCT","DO","DROP","EACH","ELEMENT","ELSE","END","EVERY","EXCEPT","EXCLUDE","EXECUTE","EXISTS","EXPLAIN","FALSE","FETCH","FIRST","FLATTEN","FOR","FORCE","FROM","FUNCTION","GRANT","GROUP","GSI","HAVING","IF","IGNORE","ILIKE","IN","INCLUDE","INCREMENT","INDEX","INFER","INLINE","INNER","INSERT","INTERSECT","INTO","IS","JOIN","KEY","KEYS","KEYSPACE","KNOWN","LAST","LEFT","LET","LETTING","LIKE","LIMIT","LSM","MAP","MAPPING","MATCHED","MATERIALIZED","MERGE","MISSING","NAMESPACE","NEST","NOT","NULL","NUMBER","OBJECT","OFFSET","ON","OPTION","OR","ORDER","OUTER","OVER","PARSE","PARTITION","PASSWORD","PATH","POOL","PREPARE","PRIMARY","PRIVATE","PRIVILEGE","PROCEDURE","PUBLIC","RAW","REALM","REDUCE","RENAME","RETURN","RETURNING","REVOKE","RIGHT","ROLE","ROLLBACK","SATISFIES","SCHEMA","SELECT","SELF","SEMI","SET","SHOW","SOME","START","STATISTICS","STRING","SYSTEM","THEN","TO","TRANSACTION","TRIGGER","TRUE","TRUNCATE","UNDER","UNION","UNIQUE","UNKNOWN","UNNEST","UNSET","UPDATE","UPSERT","USE","USER","USING","VALIDATE","VALUE","VALUED","VALUES","VIA","VIEW","WHEN","WHERE","WHILE","WITH","WITHIN","WORK","XOR"],a=["DELETE FROM","EXCEPT ALL","EXCEPT","EXPLAIN DELETE FROM","EXPLAIN UPDATE","EXPLAIN UPSERT","FROM","GROUP BY","HAVING","INFER","INSERT INTO","LET","LIMIT","MERGE","NEST","ORDER BY","PREPARE","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UNNEST","UPDATE","UPSERT","USE KEYS","VALUES","WHERE"],I=["INTERSECT","INTERSECT ALL","MINUS","UNION","UNION ALL"],H=["AND","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN","XOR"]}),A=c(i=>{"use strict";var h=i&&i.__extends||(function(){var o=function(u,C){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(X,L){X.__proto__=L}||function(X,L){for(var k in L)Object.prototype.hasOwnProperty.call(L,k)&&(X[k]=L[k])},o(u,C)};return function(u,C){if(typeof C!="function"&&C!==null)throw new TypeError("Class extends value "+String(C)+" is not a constructor or null");o(u,C);function X(){this.constructor=u}u.prototype=C===null?Object.create(C):(X.prototype=C.prototype,new X)}})(),l=i&&i.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};i.__esModule=!0;var N=l(v()),T=p(),b=(function(o){h(u,o);function u(){var C=o!==null&&o.apply(this,arguments)||this;return C.tokenOverride=function(X,L){if(X.type===T.TokenTypes.RESERVED_TOP_LEVEL&&L.value&&X.value.toUpperCase()==="SET"&&L.value.toUpperCase()==="BY")return X.type=T.TokenTypes.RESERVED,X},C}return u.prototype.getTokenizerConfig=function(){return{reservedWords:a,reservedTopLevelWords:I,reservedNewlineWords:m,reservedTopLevelWordsNoIndent:H,stringTypes:['""',"N''","''","``"],openParens:["(","CASE"],closeParens:[")","END"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:[":"],lineCommentTypes:["--"],specialWordChars:["_","$","#",".","@"]}},u})(N.default);i.default=b;var a=["A","ACCESSIBLE","AGENT","AGGREGATE","ALL","ALTER","ANY","ARRAY","AS","ASC","AT","ATTRIBUTE","AUTHID","AVG","BETWEEN","BFILE_BASE","BINARY_INTEGER","BINARY","BLOB_BASE","BLOCK","BODY","BOOLEAN","BOTH","BOUND","BREADTH","BULK","BY","BYTE","C","CALL","CALLING","CASCADE","CASE","CHAR_BASE","CHAR","CHARACTER","CHARSET","CHARSETFORM","CHARSETID","CHECK","CLOB_BASE","CLONE","CLOSE","CLUSTER","CLUSTERS","COALESCE","COLAUTH","COLLECT","COLUMNS","COMMENT","COMMIT","COMMITTED","COMPILED","COMPRESS","CONNECT","CONSTANT","CONSTRUCTOR","CONTEXT","CONTINUE","CONVERT","COUNT","CRASH","CREATE","CREDENTIAL","CURRENT","CURRVAL","CURSOR","CUSTOMDATUM","DANGLING","DATA","DATE_BASE","DATE","DAY","DECIMAL","DEFAULT","DEFINE","DELETE","DEPTH","DESC","DETERMINISTIC","DIRECTORY","DISTINCT","DO","DOUBLE","DROP","DURATION","ELEMENT","ELSIF","EMPTY","END","ESCAPE","EXCEPTIONS","EXCLUSIVE","EXECUTE","EXISTS","EXIT","EXTENDS","EXTERNAL","EXTRACT","FALSE","FETCH","FINAL","FIRST","FIXED","FLOAT","FOR","FORALL","FORCE","FROM","FUNCTION","GENERAL","GOTO","GRANT","GROUP","HASH","HEAP","HIDDEN","HOUR","IDENTIFIED","IF","IMMEDIATE","IN","INCLUDING","INDEX","INDEXES","INDICATOR","INDICES","INFINITE","INSTANTIABLE","INT","INTEGER","INTERFACE","INTERVAL","INTO","INVALIDATE","IS","ISOLATION","JAVA","LANGUAGE","LARGE","LEADING","LENGTH","LEVEL","LIBRARY","LIKE","LIKE2","LIKE4","LIKEC","LIMITED","LOCAL","LOCK","LONG","MAP","MAX","MAXLEN","MEMBER","MERGE","MIN","MINUTE","MLSLABEL","MOD","MODE","MONTH","MULTISET","NAME","NAN","NATIONAL","NATIVE","NATURAL","NATURALN","NCHAR","NEW","NEXTVAL","NOCOMPRESS","NOCOPY","NOT","NOWAIT","NULL","NULLIF","NUMBER_BASE","NUMBER","OBJECT","OCICOLL","OCIDATE","OCIDATETIME","OCIDURATION","OCIINTERVAL","OCILOBLOCATOR","OCINUMBER","OCIRAW","OCIREF","OCIREFCURSOR","OCIROWID","OCISTRING","OCITYPE","OF","OLD","ON","ONLY","OPAQUE","OPEN","OPERATOR","OPTION","ORACLE","ORADATA","ORDER","ORGANIZATION","ORLANY","ORLVARY","OTHERS","OUT","OVERLAPS","OVERRIDING","PACKAGE","PARALLEL_ENABLE","PARAMETER","PARAMETERS","PARENT","PARTITION","PASCAL","PCTFREE","PIPE","PIPELINED","PLS_INTEGER","PLUGGABLE","POSITIVE","POSITIVEN","PRAGMA","PRECISION","PRIOR","PRIVATE","PROCEDURE","PUBLIC","RAISE","RANGE","RAW","READ","REAL","RECORD","REF","REFERENCE","RELEASE","RELIES_ON","REM","REMAINDER","RENAME","RESOURCE","RESULT_CACHE","RESULT","RETURN","RETURNING","REVERSE","REVOKE","ROLLBACK","ROW","ROWID","ROWNUM","ROWTYPE","SAMPLE","SAVE","SAVEPOINT","SB1","SB2","SB4","SEARCH","SECOND","SEGMENT","SELF","SEPARATE","SEQUENCE","SERIALIZABLE","SHARE","SHORT","SIZE_T","SIZE","SMALLINT","SOME","SPACE","SPARSE","SQL","SQLCODE","SQLDATA","SQLERRM","SQLNAME","SQLSTATE","STANDARD","START","STATIC","STDDEV","STORED","STRING","STRUCT","STYLE","SUBMULTISET","SUBPARTITION","SUBSTITUTABLE","SUBTYPE","SUCCESSFUL","SUM","SYNONYM","SYSDATE","TABAUTH","TABLE","TDO","THE","THEN","TIME","TIMESTAMP","TIMEZONE_ABBR","TIMEZONE_HOUR","TIMEZONE_MINUTE","TIMEZONE_REGION","TO","TRAILING","TRANSACTION","TRANSACTIONAL","TRIGGER","TRUE","TRUSTED","TYPE","UB1","UB2","UB4","UID","UNDER","UNIQUE","UNPLUG","UNSIGNED","UNTRUSTED","USE","USER","USING","VALIDATE","VALIST","VALUE","VARCHAR","VARCHAR2","VARIABLE","VARIANCE","VARRAY","VARYING","VIEW","VIEWS","VOID","WHENEVER","WHILE","WITH","WORK","WRAPPED","WRITE","YEAR","ZONE"],I=["ADD","ALTER COLUMN","ALTER TABLE","BEGIN","CONNECT BY","DECLARE","DELETE FROM","DELETE","END","EXCEPT","EXCEPTION","FETCH FIRST","FROM","GROUP BY","HAVING","INSERT INTO","INSERT","LIMIT","LOOP","MODIFY","ORDER BY","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","START WITH","UPDATE","VALUES","WHERE"],H=["INTERSECT","INTERSECT ALL","MINUS","UNION","UNION ALL"],m=["AND","CROSS APPLY","CROSS JOIN","ELSE","END","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER APPLY","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN","WHEN","XOR"]}),f=c(i=>{"use strict";var h=i&&i.__extends||(function(){var m=function(o,u){return m=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(C,X){C.__proto__=X}||function(C,X){for(var L in X)Object.prototype.hasOwnProperty.call(X,L)&&(C[L]=X[L])},m(o,u)};return function(o,u){if(typeof u!="function"&&u!==null)throw new TypeError("Class extends value "+String(u)+" is not a constructor or null");m(o,u);function C(){this.constructor=o}o.prototype=u===null?Object.create(u):(C.prototype=u.prototype,new C)}})(),l=i&&i.__importDefault||function(m){return m&&m.__esModule?m:{default:m}};i.__esModule=!0;var N=l(v()),T=(function(m){h(o,m);function o(){return m!==null&&m.apply(this,arguments)||this}return o.prototype.getTokenizerConfig=function(){return{reservedWords:b,reservedTopLevelWords:a,reservedNewlineWords:H,reservedTopLevelWordsNoIndent:I,stringTypes:['""',"N''","''","``","[]","E''"],openParens:["(","CASE"],closeParens:[")","END"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:["@",":","%","$"],lineCommentTypes:["#","--"],specialWordChars:[]}},o})(N.default);i.default=T;var b=["ACCESSIBLE","ACTION","AGAINST","AGGREGATE","ALGORITHM","ALL","ALTER","ANALYSE","ANALYZE","AS","ASC","AUTOCOMMIT","AUTO_INCREMENT","BACKUP","BEGIN","BETWEEN","BINLOG","BOTH","CASCADE","CASE","CHANGE","CHANGED","CHARACTER SET","CHARSET","CHECK","CHECKSUM","COLLATE","COLLATION","COLUMN","COLUMNS","COMMENT","COMMIT","COMMITTED","COMPRESSED","CONCURRENT","CONSTRAINT","CONTAINS","CONVERT","COUNT","CREATE","CROSS","CURRENT_TIMESTAMP","DATABASE","DATABASES","DAY_HOUR","DAY_MINUTE","DAY_SECOND","DAY","DEFAULT","DEFINER","DELAYED","DELETE","DESC","DESCRIBE","DETERMINISTIC","DISTINCT","DISTINCTROW","DIV","DO","DROP","DUMPFILE","DUPLICATE","DYNAMIC","ELSE","ENCLOSED","END","ENGINE","ENGINES","ENGINE_TYPE","ESCAPE","ESCAPED","EVENTS","EXEC","EXECUTE","EXISTS","EXPLAIN","EXTENDED","FAST","FETCH","FIELDS","FILE","FIRST","FIXED","FLUSH","FOR","FORCE","FOREIGN","FULL","FULLTEXT","FUNCTION","GLOBAL","GRANTS","GROUP_CONCAT","HEAP","HIGH_PRIORITY","HOSTS","HOUR","HOUR_MINUTE","HOUR_SECOND","IDENTIFIED","IF","IFNULL","IGNORE","IN","INDEX","INDEXES","INFILE","INSERT","INSERT_ID","INSERT_METHOD","INTERVAL","INTO","INVOKER","IS","ISOLATION","KEY","KEYS","KILL","LAST_INSERT_ID","LEADING","LEVEL","LIKE","LINEAR","LINES","LOAD","LOCAL","LOCK","LOCKS","LOGS","LOW_PRIORITY","MARIA","MASTER","MASTER_CONNECT_RETRY","MASTER_HOST","MASTER_LOG_FILE","MATCH","MAX_CONNECTIONS_PER_HOUR","MAX_QUERIES_PER_HOUR","MAX_ROWS","MAX_UPDATES_PER_HOUR","MAX_USER_CONNECTIONS","MEDIUM","MERGE","MINUTE","MINUTE_SECOND","MIN_ROWS","MODE","MONTH","MRG_MYISAM","MYISAM","NAMES","NATURAL","NOT","NOW()","NULL","OFFSET","ON DELETE","ON UPDATE","ON","ONLY","OPEN","OPTIMIZE","OPTION","OPTIONALLY","OUTFILE","PACK_KEYS","PAGE","PARTIAL","PARTITION","PARTITIONS","PASSWORD","PRIMARY","PRIVILEGES","PROCEDURE","PROCESS","PROCESSLIST","PURGE","QUICK","RAID0","RAID_CHUNKS","RAID_CHUNKSIZE","RAID_TYPE","RANGE","READ","READ_ONLY","READ_WRITE","REFERENCES","REGEXP","RELOAD","RENAME","REPAIR","REPEATABLE","REPLACE","REPLICATION","RESET","RESTORE","RESTRICT","RETURN","RETURNS","REVOKE","RLIKE","ROLLBACK","ROW","ROWS","ROW_FORMAT","SECOND","SECURITY","SEPARATOR","SERIALIZABLE","SESSION","SHARE","SHOW","SHUTDOWN","SLAVE","SONAME","SOUNDS","SQL","SQL_AUTO_IS_NULL","SQL_BIG_RESULT","SQL_BIG_SELECTS","SQL_BIG_TABLES","SQL_BUFFER_RESULT","SQL_CACHE","SQL_CALC_FOUND_ROWS","SQL_LOG_BIN","SQL_LOG_OFF","SQL_LOG_UPDATE","SQL_LOW_PRIORITY_UPDATES","SQL_MAX_JOIN_SIZE","SQL_NO_CACHE","SQL_QUOTE_SHOW_CREATE","SQL_SAFE_UPDATES","SQL_SELECT_LIMIT","SQL_SLAVE_SKIP_COUNTER","SQL_SMALL_RESULT","SQL_WARNINGS","START","STARTING","STATUS","STOP","STORAGE","STRAIGHT_JOIN","STRING","STRIPED","SUPER","TABLE","TABLES","TEMPORARY","TERMINATED","THEN","TO","TRAILING","TRANSACTIONAL","TRIGGER","TRUE","TRUNCATE","TYPE","TYPES","UNCOMMITTED","UNIQUE","UNLOCK","UNSIGNED","USAGE","USE","USING","VARIABLES","VIEW","WHEN","WITH","WORK","WRITE","YEAR_MONTH"],a=["ADD","AFTER","ALTER COLUMN","ALTER TABLE","CREATE OR REPLACE","DECLARE","DELETE FROM","EXCEPT","FETCH FIRST","FROM","GO","GRANT","GROUP BY","HAVING","INSERT INTO","INSERT","LIMIT","MODIFY","ORDER BY","RETURNING","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UPDATE","VALUES","WHERE"],I=["INTERSECT ALL","INTERSECT","MINUS","UNION ALL","UNION"],H=["AND","CROSS APPLY","CROSS JOIN","ELSE","INNER JOIN","FULL JOIN","FULL OUTER JOIN","LEFT JOIN","LEFT OUTER JOIN","NATURAL JOIN","OR","OUTER APPLY","OUTER JOIN","RENAME","RIGHT JOIN","RIGHT OUTER JOIN","JOIN","WHEN","XOR"]}),R=c(i=>{"use strict";var h=i&&i.__importDefault||function(H){return H&&H.__esModule?H:{default:H}};i.__esModule=!0,i.tokenize=i.format=void 0;var l=h(G()),N=h(P()),T=h(A()),b=h(f()),a=function(H,m){switch(m===void 0&&(m={}),m.language){case"db2":return new l.default(m).format(H);case"n1ql":return new N.default(m).format(H);case"pl/sql":return new T.default(m).format(H);default:return new b.default(m).format(H)}};i.format=a;var I=function(H,m){return m===void 0&&(m={}),new b.default(m).tokenize(H)};i.tokenize=I,i.default={format:i.format,tokenize:i.tokenize}}),E=M(R(),1);globalThis.phpdebugbar_sqlformatter=E.default.default})();window.PhpDebugBar=window.PhpDebugBar||{};(function(){const s=window.PhpDebugBar;s.utils=s.utils||{};const W=s.utils.getDictValue=function(p,e,t){if(p==null)return t;const r=String(e).split(".");let y=p;for(const _ of r)if(y==null||(y=y[_],y===void 0))return t;return y};s.utils.csscls=function(p,e){const t=String(p).trim();return t.includes(" ")?t.split(/\s+/).filter(Boolean).map(r=>s.utils.csscls(r,e)).join(" "):t.startsWith(".")?`.${e}${t.slice(1)}`:e+t},s.utils.makecsscls=function(p){return e=>s.utils.csscls(e,p)};const S=s.utils.makecsscls("phpdebugbar-");s.utils.sfDump=function(p){typeof window.Sfdump=="function"&&p.querySelectorAll("pre.sf-dump[id]").forEach(e=>{window.Sfdump(e.id,{maxDepth:0})})},s.utils.schedule=function(p){return window.requestIdleCallback?window.requestIdleCallback(p,{timeout:1e3}):setTimeout(p,0)};class g{get tagName(){return"div"}constructor(e={}){this._attributes=et({},this.defaults),this._boundAttributes={},this.el=document.createElement(this.tagName),this.className&&this.el.classList.add(...this.className.split(" ")),this.initialize(e),this.render()}initialize(e){this.set(e)}render(){}set(e,t){const r=typeof e=="string"?{[e]:t}:e,y=[];for(const _ in r)if(t=r[_],this._attributes[_]=t,this._boundAttributes[_])for(const O of this._boundAttributes[_])y.includes(O)||(O.call(this,t),y.push(O))}has(e){return this._attributes[e]!==void 0&&this._attributes[e]!==null}get(e){return this._attributes[e]}bindAttr(e,t){if(Array.isArray(e)){for(const r of e)this.bindAttr(r,t);return}if(this._boundAttributes[e]||(this._boundAttributes[e]=[]),t instanceof HTMLElement){const r=t;t=y=>r.textContent=y||""}this._boundAttributes[e].push(t),this.has(e)&&t.call(this,this._attributes[e])}static extend(e){const t=this;class r extends t{}for(const y in e){const _=Object.getOwnPropertyDescriptor(e,y);_&&Object.defineProperty(r.prototype,y,_)}return Object.assign(r,t),r.__super__=t.prototype,r}}g.prototype.defaults={},s.Widget=g;class d extends g{get className(){return S("panel")}render(){this.active=!1,this.tab=document.createElement("a"),this.tab.classList.add(S("tab")),this.icon=document.createElement("i"),this.tab.append(this.icon),this.bindAttr("icon",function(t){t?this.icon.className=`phpdebugbar-icon phpdebugbar-icon-${t}`:this.icon.className=""});const e=document.createElement("span");e.classList.add(S("text")),this.tab.append(e),this.bindAttr("title",e),this.badge=document.createElement("span"),this.badge.classList.add(S("badge")),this.tab.append(this.badge),this.bindAttr("badge",function(t){t!==null?(this.badge.textContent=t,this.badge.classList.add(S("visible"))):this.badge.classList.remove(S("visible"))}),this.bindAttr("widget",function(t){this.el.innerHTML="",this.el.append(t.el)}),this.widgetRendered=!1,this.bindAttr("data",function(t){this.has("widget")&&(this.tab.setAttribute("data-empty",Object.keys(t).length===0||t.count===0),!this.widgetRendered&&this.active&&t!=null?this.renderWidgetData():this.widgetRendered=!1)})}renderWidgetData(){const e=this.get("data"),t=this.get("widget");e==null||!t||(t.set("data",e),s.utils.schedule(()=>{s.utils.sfDump(t.el)}),this.widgetRendered=!0)}show(){const e=S("active");this.tab.classList.add(e),this.tab.hidden=!1,this.el.classList.add(e),this.el.hidden=!1,this.active=!0,this.widgetRendered||this.renderWidgetData()}hide(){const e=S("active");this.tab.classList.remove(e),this.el.classList.remove(e),this.el.hidden=!0,this.active=!1}}class w extends g{get tagName(){return"span"}get className(){return S("indicator")}render(){this.icon=document.createElement("i"),this.el.append(this.icon),this.bindAttr("icon",function(t){t?this.icon.className=`phpdebugbar-icon phpdebugbar-icon-${t}`:this.icon.className=""}),this.bindAttr("link",function(t){t?(this.el.addEventListener("click",()=>{this.get("debugbar").showTab(t)}),this.el.style.cursor="pointer"):this.el.style.cursor=""});const e=document.createElement("span");e.classList.add(S("text")),this.el.append(e),this.bindAttr(["title","data"],e),this.tooltip=document.createElement("span"),this.tooltip.classList.add(S("tooltip"),S("disabled")),this.el.append(this.tooltip),this.bindAttr("tooltip",function(t){if(t)if(Array.isArray(t)||typeof t=="object"){const r=document.createElement("dl");for(const[y,_]of Object.entries(t)){const O=document.createElement("dt");O.textContent=y,r.append(O);const v=document.createElement("dd");v.textContent=_,r.append(v)}this.tooltip.innerHTML="",this.tooltip.append(r),this.tooltip.classList.remove(S("disabled"))}else this.tooltip.textContent=t,this.tooltip.classList.remove(S("disabled"));else this.tooltip.classList.add(S("disabled"))})}}class c extends g{get tagName(){return"form"}get className(){return S("settings")}initialize(e){this.set(e);const t=this.get("debugbar");this.settings=JSON.parse(localStorage.getItem("phpdebugbar-settings"))||{};for(const r in t.options)r in this.settings&&(t.options[r]=this.settings[r]),r==="theme"?t.setTheme(t.options[r]):t.el.setAttribute(`data-${r}`,t.options[r])}clearSettings(){const e=this.get("debugbar");if(localStorage.removeItem("phpdebugbar-settings"),localStorage.removeItem("phpdebugbar-ajaxhandler-autoshow"),this.settings={},e.options=et({},e.defaultOptions),e.ajaxHandler){const t=e.ajaxHandler.defaultAutoShow;e.ajaxHandler.setAutoShow(t),this.set("autoshow",t),e.controls.__datasets&&e.controls.__datasets.get("widget").set("autoshow",this.autoshow.checked)}this.initialize(e.options)}storeSetting(e,t){this.settings[e]=t;const r=this.get("debugbar");r.options[e]=t,e!=="theme"&&r.el.setAttribute(`data-${e}`,t),localStorage.setItem("phpdebugbar-settings",JSON.stringify(this.settings))}render(){this.el.innerHTML="";const e=this.get("debugbar"),t=this,r={},y=document.createElement("select");y.innerHTML='',y.value=e.options.theme,y.addEventListener("change",function(){t.storeSetting("theme",this.value),e.setTheme(this.value)}),r.Theme=y;const _=document.createElement("select");_.innerHTML='',_.value=e.options.openBtnPosition,_.addEventListener("change",function(){t.storeSetting("openBtnPosition",this.value),this.value==="topLeft"||this.value==="topRight"?t.storeSetting("toolbarPosition","top"):t.storeSetting("toolbarPosition","bottom"),t.get("debugbar").recomputeBottomOffset()}),r["Toolbar Position"]=_,this.hideEmptyTabs=document.createElement("input"),this.hideEmptyTabs.type="checkbox",this.hideEmptyTabs.checked=e.options.hideEmptyTabs,this.hideEmptyTabs.addEventListener("click",function(){t.storeSetting("hideEmptyTabs",this.checked),t.get("debugbar").respCSSSize=0,t.get("debugbar").resize()});const O=document.createElement("label");O.append(this.hideEmptyTabs,"Hide empty tabs until they have data"),r["Hide Empty Tabs"]=O;const v=document.createElement("input");v.type="checkbox",v.checked=e.options.showFullscreenBtn,v.addEventListener("click",function(){t.storeSetting("showFullscreenBtn",this.checked),e.toggleFullscreenBtn(this.checked)});const G=document.createElement("label");G.append(v,"Show fullscreen button in toolbar"),r.Fullscreen=G,this.autoshow=document.createElement("input"),this.autoshow.type="checkbox",this.autoshow.checked=e.ajaxHandler&&e.ajaxHandler.autoShow,this.autoshow.addEventListener("click",function(){e.ajaxHandler&&e.ajaxHandler.setAutoShow(this.checked),e.controls.__datasets&&e.controls.__datasets.get("widget").set("autoshow",this.checked),e.datasetSwitcherWidget&&e.datasetSwitcherWidget.set("autoshow",this.checked)}),this.bindAttr("autoshow",function(){this.autoshow.checked=this.get("autoshow");const f=this.autoshow.closest(`.${S("form-row")}`);f&&(f.style.display="")});const P=document.createElement("label");P.append(this.autoshow,"Automatically show new incoming Ajax requests"),r.Autoshow=P;const A=document.createElement("button");A.textContent="Reset settings",A.addEventListener("click",f=>{f.preventDefault(),t.clearSettings(),t.render()}),r["Reset to defaults"]=A;for(const[f,R]of Object.entries(r)){const E=document.createElement("div");E.classList.add(S("form-row"));const i=document.createElement("div");i.classList.add(S("form-label")),i.textContent=f,E.append(i);const h=document.createElement("div");h.classList.add(S("form-input")),R instanceof HTMLElement?h.append(R):h.innerHTML=R,E.append(h),t.el.append(E)}e.ajaxHandler||(this.autoshow.closest(`.${S("form-row")}`).style.display="none")}}class B{constructor(e){this.debugbar=e}format(e,t,r,y){if(r=r?` ${r}`:"",y=y||Object.keys(this.debugbar.datasets).length,t.__meta===void 0)return`#${y}${r}`;const _=t.__meta.uri.split("/");let O=_.pop();O||(O=`${_.pop()||""}/`),_.length&&!Number.isNaN(O)&&(O=`${_.pop()}/${O}`);const v=150;return O.length>v&&(O=`${O.substr(0,v)}...`),`#${y} ${O}${r} (${t.__meta.datetime.split(" ")[1]})`}}s.DatasetTitleFormater=B;class M extends g{get className(){return"phpdebugbar"}initialize(e={}){this.options=Object.assign({bodyBottomInset:!0,theme:"auto",toolbarPosition:"bottom",openBtnPosition:"bottomLeft",hideEmptyTabs:!1,showFullscreenBtn:!1,spaNavigationEvents:[]},e),this.defaultOptions=et({},this.options),this.controls={},this.dataMap={},this.datasets={},this.firstTabName=null,this.activePanelName=null,this.activeDatasetId=null,this.pendingDataSetId=null,this.datesetTitleFormater=new B(this);const t=window.getComputedStyle(document.body);this.bodyPaddingBottomHeight=Number.parseInt(t.paddingBottom),this.bodyPaddingTopHeight=Number.parseInt(t.paddingTop);try{this.isIframe=window.self!==window.top&&window.top.PhpDebugBar&&window.top.PhpDebugBar}catch(r){this.isIframe=!1}this.registerResizeHandler(),this.registerMediaListener(),this.registerNavigationListener(),this.settingsControl=new s.DebugBar.Tab({icon:"adjustments-horizontal",title:"Settings",widget:new c({debugbar:this})})}registerResizeHandler(){if(this.resize.bind===void 0||this.isIframe)return;const e=this.resize.bind(this);this.respCSSSize=0,window.addEventListener("resize",e),setTimeout(e,20)}registerMediaListener(){window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",t=>{this.options.theme==="auto"&&this.setTheme("auto")})}registerNavigationListener(){const e=this.options.spaNavigationEvents;if(!(!e||!e.length))for(const t of e)document.addEventListener(t,()=>{this.recalculateBodyPadding()})}recalculateBodyPadding(){if(!this.options.bodyBottomInset)return;document.body.style.paddingTop="",document.body.style.paddingBottom="";const e=window.getComputedStyle(document.body);this.bodyPaddingTopHeight=Number.parseFloat(e.paddingTop),this.bodyPaddingBottomHeight=Number.parseFloat(e.paddingBottom),this.recomputeBottomOffset()}setTheme(e){this.options.theme=e,e==="auto"&&(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),this.el.setAttribute("data-theme",e),this.openHandler&&this.openHandler.el.setAttribute("data-theme",e),this.datasetSwitcherWidget&&this.datasetSwitcherWidget.panel&&this.datasetSwitcherWidget.panel.setAttribute("data-theme",e)}resize(){if(this.isIframe)return;let e=this.respCSSSize;if(this.respCSSSize===0){const O=Array.from(this.header.children).filter(v=>v.offsetParent!==null);for(const v of O){const G=window.getComputedStyle(v);e+=v.offsetWidth+Number.parseFloat(G.marginLeft)+Number.parseFloat(G.marginRight)}}const t=this.header.offsetWidth,r=S("mini-design"),y=this.header.classList.contains(r);t<=e&&!y?(this.respCSSSize=e,this.header.classList.add(r)):e{e.close()}),this.headerLeft=document.createElement("div"),this.headerLeft.classList.add(S("header-left")),this.header.append(this.headerLeft),this.headerRight=document.createElement("div"),this.headerRight.classList.add(S("header-right")),this.header.append(this.headerRight),this.body=document.createElement("div"),this.body.classList.add(S("body")),this.el.append(this.body),this.recomputeBottomOffset(),this.resizeHandleBottom=document.createElement("div"),this.resizeHandleBottom.classList.add(S("resize-handle")),this.resizeHandleBottom.classList.add(S("resize-handle-bottom")),this.el.append(this.resizeHandleBottom);let t,r;const y=v=>{const G=r+(t-v.pageY);e.setHeight(G)},_=v=>{const G=r-(t-v.pageY);e.setHeight(G)},O=()=>{document.removeEventListener("mousemove",y),document.removeEventListener("mousemove",_),document.removeEventListener("mouseup",O),e.dragCapture.style.display="none"};this.resizeHandle.addEventListener("mousedown",v=>{r=e.body.offsetHeight,t=v.pageY,document.addEventListener("mousemove",y),document.addEventListener("mouseup",O),e.dragCapture.style.display="",v.preventDefault()}),this.resizeHandleBottom.addEventListener("mousedown",v=>{r=e.body.offsetHeight,t=v.pageY,document.addEventListener("mousemove",_),document.addEventListener("mouseup",O),e.dragCapture.style.display="",v.preventDefault()}),this.closebtn=document.createElement("a"),this.closebtn.classList.add(S("close-btn")),this.headerRight.append(this.closebtn),this.closebtn.addEventListener("click",()=>{e.close()}),this.fullscreenbtn=document.createElement("a"),this.fullscreenbtn.classList.add(S("fullscreen-btn")),this.fullscreenbtn.hidden=!this.options.showFullscreenBtn,this.headerRight.append(this.fullscreenbtn),this.fullscreenbtn.addEventListener("click",()=>{e.toggleFullscreen()}),this.minimizebtn=document.createElement("a"),this.minimizebtn.classList.add(S("minimize-btn")),this.minimizebtn.hidden=!this.isMinimized(),this.headerRight.append(this.minimizebtn),this.minimizebtn.addEventListener("click",()=>{e.minimize()}),this.maximizebtn=document.createElement("a"),this.maximizebtn.classList.add(S("maximize-btn")),this.maximizebtn.hidden=this.isMinimized(),this.headerRight.append(this.maximizebtn),this.maximizebtn.addEventListener("click",()=>{e.restore()}),this.restorebtn=document.createElement("a"),this.restorebtn.classList.add(S("restore-btn")),this.restorebtn.hidden=!0,this.el.append(this.restorebtn),this.restorebtn.addEventListener("click",()=>{e.restore()}),this.openbtn=document.createElement("a"),this.openbtn.classList.add(S("open-btn")),this.openbtn.hidden=!0,this.headerRight.append(this.openbtn),this.openbtn.addEventListener("click",()=>{e.openHandler.show((v,G)=>{e.addDataSet(G,v,"(opened)")})}),this.datasetsSelectSpan=document.createElement("span"),this.datasetsSelectSpan.classList.add(S("datasets-switcher")),this.datasetsSelectSpan.setAttribute("name","datasets-switcher"),this.datasetsSelect=document.createElement("select"),this.datasetsSelect.hidden=!0,this.datasetsSelectSpan.append(this.datasetsSelect),this.headerRight.append(this.datasetsSelectSpan),this.datasetsSelect.addEventListener("change",function(){e.showDataSet(this.value)}),this.controls.__settings=this.settingsControl,this.settingsControl.tab.classList.add(S("tab-settings")),this.settingsControl.tab.setAttribute("data-collector","__settings"),this.settingsControl.el.setAttribute("data-collector","__settings"),this.settingsControl.el.hidden=!0,this.maximizebtn.after(this.settingsControl.tab),this.settingsControl.tab.hidden=!1,this.settingsControl.tab.addEventListener("click",()=>{!this.isMinimized()&&this.activePanelName==="__settings"&&!this.isFullscreen()?this.minimize():(this.showTab("__settings"),this.settingsControl.get("widget").render())}),this.body.append(this.settingsControl.el)}setHeight(e){if(this.isFullscreen())return;const t=40,r=window.innerHeight-this.header.offsetHeight-10;e=Math.min(e,r),e=Math.max(e,t),this.body.style.height=`${e}px`,localStorage.setItem("phpdebugbar-height",e),this.recomputeBottomOffset()}restoreState(){if(this.isIframe)return;const e=localStorage.getItem("phpdebugbar-height");this.setHeight(Number.parseInt(e)||this.body.offsetHeight);const t=localStorage.getItem("phpdebugbar-open");if(t&&t==="0")this.close();else{const r=localStorage.getItem("phpdebugbar-visible");if(r&&r==="1"){const y=localStorage.getItem("phpdebugbar-tab");this.isTab(y)?this.showTab(y):this.showTab()}else this.minimize()}this.options.showFullscreenBtn&&sessionStorage.getItem("phpdebugbar-fullscreen")==="1"&&this.toggleFullscreen()}createTab(e,t,r){const y=new d({title:r||e.replace(/[_-]/g," ").charAt(0).toUpperCase()+e.slice(1),widget:t});return this.addTab(e,y)}addTab(e,t){if(this.isControl(e))throw new Error(`${e} already exists`);const r=this;return this.headerLeft.append(t.tab),t.tab.addEventListener("click",()=>{!r.isMinimized()&&r.activePanelName===e&&!r.isFullscreen()?r.minimize():(r.restore(),r.showTab(e))}),t.tab.setAttribute("data-empty",!0),t.tab.setAttribute("data-collector",e),t.el.setAttribute("data-collector",e),this.body.append(t.el),this.controls[e]=t,this.firstTabName===null&&(this.firstTabName=e),t}createIndicator(e,t,r,y){const _=new w({icon:t,tooltip:r});return this.addIndicator(e,_,y)}addIndicator(e,t,r){if(this.isControl(e))throw new Error(`${e} already exists`);return t.set("debugbar",this),r==="left"?this.headerLeft.prepend(t.el):this.headerRight.append(t.el),this.controls[e]=t,t}getControl(e){if(this.isControl(e))return this.controls[e]}isControl(e){return this.controls[e]!==void 0}isTab(e){return this.isControl(e)&&this.controls[e]instanceof d}isIndicator(e){return this.isControl(e)&&this.controls[e]instanceof w}reset(){this.minimize();for(const[e,t]of Object.entries(this.controls))this.isTab(e)&&t.tab.remove(),t.el.remove();this.controls={}}showTab(e){if(e||(this.activePanelName?e=this.activePanelName:e=this.firstTabName),!this.isTab(e))throw new Error(`Unknown tab '${e}'`);this.body.hidden=!1,this.recomputeBottomOffset();for(const[t,r]of Object.entries(this.controls))r instanceof d&&(t===e?r.show():r.hide());this.activePanelName=e,this.el.classList.remove(S("minimized")),localStorage.setItem("phpdebugbar-visible","1"),localStorage.setItem("phpdebugbar-tab",e),this.maximize()}minimize(){this.exitFullscreen();const e=S("active"),t=this.header.querySelectorAll(`:scope > div > .${e}`);for(const r of t)r.classList.remove(e);this.body.hidden=!0,this.minimizebtn.hidden=!0,this.maximizebtn.hidden=!1,this.recomputeBottomOffset(),localStorage.setItem("phpdebugbar-visible","0"),this.el.classList.add(S("minimized")),this.resize()}maximize(){this.header.hidden=!1,this.restorebtn.hidden=!0,this.body.hidden=!1,this.minimizebtn.hidden=!1,this.maximizebtn.hidden=!0,this.recomputeBottomOffset(),localStorage.setItem("phpdebugbar-visible","1"),localStorage.setItem("phpdebugbar-open","1"),this.el.classList.remove(S("minimized")),this.el.classList.remove(S("closed")),this.resize()}isMinimized(){return this.el.classList.contains(S("minimized"))}toggleFullscreen(){this.isFullscreen()?this.exitFullscreen():(this._preFullscreenHeight=this.body.offsetHeight,this.el.classList.add(S("fullscreen")),this.body.style.height="",sessionStorage.setItem("phpdebugbar-fullscreen","1"),this.recomputeBottomOffset())}exitFullscreen(){this.isFullscreen()&&(this.el.classList.remove(S("fullscreen")),this._preFullscreenHeight&&(this.body.style.height=`${this._preFullscreenHeight}px`),sessionStorage.removeItem("phpdebugbar-fullscreen"),this.recomputeBottomOffset())}isFullscreen(){return this.el.classList.contains(S("fullscreen"))}toggleFullscreenBtn(e){this.fullscreenbtn.hidden=!e,e||this.exitFullscreen()}close(){this.exitFullscreen(),this.header.hidden=!0,this.body.hidden=!0,this.restorebtn.hidden=!1,localStorage.setItem("phpdebugbar-open","0"),this.el.classList.add(S("closed")),this.recomputeBottomOffset()}isClosed(){return this.el.classList.contains(S("closed"))}restore(){const e=localStorage.getItem("phpdebugbar-tab");this.pendingDataSetId&&(this.dataChangeHandler(this.datasets[this.pendingDataSetId]),this.pendingDataSetId=null),this.isTab(e)?this.showTab(e):this.showTab()}recomputeBottomOffset(){if(this.options.bodyBottomInset){if(this.isClosed()){document.body.style.paddingBottom=this.bodyPaddingBottomHeight?`${this.bodyPaddingBottomHeight}px`:"",document.body.style.paddingTop=this.bodyPaddingTopHeight?`${this.bodyPaddingTopHeight}px`:"";return}if(this.options.toolbarPosition==="top"){const e=this.el.offsetHeight+(this.bodyPaddingTopHeight||0);document.body.style.paddingTop=`${e}px`,document.body.style.paddingBottom=this.bodyPaddingBottomHeight?`${this.bodyPaddingBottomHeight}px`:""}else{const e=this.el.offsetHeight+(this.bodyPaddingBottomHeight||0);document.body.style.paddingBottom=`${e}px`,document.body.style.paddingTop=this.bodyPaddingTopHeight?`${this.bodyPaddingTopHeight}px`:""}}}setDataMap(e){this.dataMap=e}addDataMap(e){Object.assign(this.dataMap,e)}setData(e){return this.datasets={},this.addDataSet(e)}addDataSet(e,t,r,y){if(!e||!e.__meta)return;if(this.isIframe&&window.top.PhpDebugBar&&window.top.PhpDebugBar.instance){window.top.PhpDebugBar.instance.addDataSet(e,t,`(iframe)${r||""}`,y);return}const _=Object.keys(this.datasets).length+1;t=t||_,e.__meta.nb=_,e.__meta.suffix=r,this.datasets[t]=e;const O=this.datesetTitleFormater.format(t,this.datasets[t],r,_);if(this.datasetSwitcherWidget)this.datasetSwitcherWidget.set("data",this.datasets);else{const v=document.createElement("option");v.value=t,v.textContent=O,this.datasetsSelect.append(v),this.datasetsSelect.hidden=!1}return(y===void 0||y)&&this.showDataSet(t),this.resize(),t}loadDataSet(e,t,r,y){if(!this.openHandler)throw new Error("loadDataSet() needs an open handler");const _=this;this.openHandler.load(e,O=>{_.addDataSet(O,e,t,y),_.resize(),r&&r(O)})}getDataSet(e){return this.datasets[e]}showDataSet(e){this.activeDatasetId=e,this.isClosed()?this.pendingDataSetId=e:(this.dataChangeHandler(this.datasets[e]),this.pendingDataSetId=null),this.datasetSwitcherWidget?this.datasetSwitcherWidget.set("activeId",e):this.datasetsSelect.value=e}dataChangeHandler(e){for(const[t,r]of Object.entries(this.dataMap)){const y=W(e,r[0],r[1]);if(t.includes(":")){const _=t.split(":");this.getControl(_[0]).set(_[1],y)}else this.getControl(t).set("data",y)}this.isMinimized()||this.showTab(),this.resize()}setOpenHandler(e){this.openHandler=e,this.openHandler.el.setAttribute("data-theme",this.el.getAttribute("data-theme")),this.openbtn.hidden=e==null}getOpenHandler(){return this.openHandler}enableAjaxHandlerTab(){this.datasetsSelectSpan&&(this.datasetsSelectSpan.hidden=!0),this.datasetSwitcherWidget=new s.Widgets.DatasetWidget({debugbar:this}),this.openbtn.after(this.datasetSwitcherWidget.el)}}s.DebugBar=M,M.Tab=d,M.Indicator=w;class U{constructor(e,t,r){this.debugbar=e,this.headerName=t||"phpdebugbar",this.captureStreamed=!1,this.streamedContentTypes=["text/event-stream"],this.autoShow=r===void 0?!0:r,this.defaultAutoShow=this.autoShow,localStorage.getItem("phpdebugbar-ajaxhandler-autoshow")!==null&&(this.autoShow=localStorage.getItem("phpdebugbar-ajaxhandler-autoshow")==="1"),e.controls.__settings&&e.controls.__settings.get("widget").set("autoshow",this.autoShow)}handle(e,t){const r=this.getHeader(e,`${this.headerName}-stack`);return r&&JSON.parse(r).forEach(_=>{this.debugbar.loadDataSet(_," (stacked)",null,!1)}),this.loadFromId(e)||this.loadFromData(e)?!0:t&&this.debugbar.openHandler&&this.isStreamedResponse(e)?(this.loadFromRequestId(t),!0):!1}isStreamedResponse(e){const t=this.streamedContentTypes;if(!t||!t.length)return!0;const r=(this.getHeader(e,"content-type")||"").split(";")[0].trim().toLowerCase();return t.some(y=>y.trim().toLowerCase()===r)}sameOrigin(e){try{return new URL(e,location.href).origin===location.origin}catch(t){return!1}}canInjectRequestId(e){const t=this.debugbar.openHandler;if(t&&typeof t.get=="function")try{const r=t.get("url");if(r&&new URL(e,location.href).pathname===new URL(r,location.href).pathname)return!1}catch(r){}return!0}newRequestId(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID=="function"&&globalThis.crypto.randomUUID()||String(Date.now())+Math.random().toString(16).slice(2)}loadFromRequestId(e,t=5){this.debugbar.openHandler.find({rid:e},0,r=>{const y=Array.isArray(r)?r.find(_=>_&&_.rid===e&&_.id):null;y?this.debugbar.loadDataSet(y.id,"(ajax)",void 0,this.autoShow):t>0&&setTimeout(()=>this.loadFromRequestId(e,t-1),150)})}getHeader(e,t){return e instanceof Response?e.headers.get(t):e instanceof XMLHttpRequest?e.getResponseHeader(t):null}setAutoShow(e){this.autoShow=e,localStorage.setItem("phpdebugbar-ajaxhandler-autoshow",e?"1":"0")}loadFromId(e){const t=this.extractIdFromHeaders(e);return t&&this.debugbar.openHandler?(this.debugbar.loadDataSet(t,"(ajax)",void 0,this.autoShow),!0):!1}extractIdFromHeaders(e){return this.getHeader(e,`${this.headerName}-id`)}loadFromData(e){const t=this.extractDataFromHeaders(e);if(!t)return!1;const r=this.parseHeaders(t);if(r.error)throw new Error(`Error loading debugbar data: ${r.error}`);return r.data&&this.debugbar.addDataSet(r.data,r.id,"(ajax)",this.autoShow),!0}extractDataFromHeaders(e){let t=this.getHeader(e,this.headerName);if(t){for(let r=1;;r++){const y=this.getHeader(e,`${this.headerName}-${r}`);if(!y)break;t+=y}return decodeURIComponent(t)}}parseHeaders(e){return JSON.parse(e)}bindToFetch(){const e=this,t=window.fetch.__debugbar_original||window.fetch,r=t.bind(window);function y(_,O){var A;let v=null;const G=_ instanceof Request?_.url:_;if(e.captureStreamed&&e.sameOrigin(G)&&e.canInjectRequestId(G)){v=e.newRequestId();const f=`${e.headerName}-request-id`;if(_ instanceof Request){O=et({},O||{});const R=new Headers(_.headers);new Headers(O.headers||{}).forEach((E,i)=>R.set(i,E)),R.set(f,v),_=new Request(_,Ht(et({},O),{headers:R})),O=void 0}else{O=et({},O||{});const R=new Headers(O.headers||{});R.set(f,v),O.headers=R}}const P=r(_,O);return(A=P==null?void 0:P.then)==null||A.call(P,f=>e.handle(f,v)).catch(()=>{}),P}y.__debugbar_wrapped=!0,y.__debugbar_original=t,window.fetch=y}bindToXHR(){const e=this,t=XMLHttpRequest.prototype,r=(t.open||{}).__debugbar_original||t.open;if(typeof r!="function")return;function y(_,O,v=!0,G=null,P=null){this.__debugbar_listener_attached||(this.__debugbar_listener_attached=!0,this.addEventListener("readystatechange",()=>{this.readyState===4&&e.handle(this,this.__debugbar_rid)}));const A=r.call(this,_,O,v,G,P);if(e.captureStreamed&&e.sameOrigin(O)&&e.canInjectRequestId(O)){this.__debugbar_rid=e.newRequestId();try{this.setRequestHeader(`${e.headerName}-request-id`,this.__debugbar_rid)}catch(f){}}return A}y.__debugbar_wrapped=!0,y.__debugbar_original=r,t.open=y}}s.AjaxHandler=U})();(function(){PhpDebugBar.Widgets={};const s=PhpDebugBar.utils.makecsscls("phpdebugbar-widgets-"),W=PhpDebugBar.Widgets.htmlize=function(P){return P.replace(/\n/g,"
").replace(/\s/g," ")};let S;const g=PhpDebugBar.Widgets.renderValue=function(P,A){return P&&typeof P=="object"?(S||(S=new PhpDebugBar.Widgets.VarDumpRenderer),S.render(P)):typeof P!="string"?A?W(JSON.stringify(P,void 0,2)):JSON.stringify(P):P};PhpDebugBar.Widgets.renderValueInto=function(P,A,f){const R=g(A,f);R instanceof Node?P.append(R):P.insertAdjacentHTML("beforeend",R)};const d=PhpDebugBar.Widgets.editorLink=function(P){const A=document.createElement("span"),f=P.line?`#${P.line}`:"";if(A.classList.add(s("filename")),A.textContent=P.filename+f,P.path&&(A.setAttribute("title",P.path+f),A.addEventListener("click",R=>{if(R.stopPropagation(),R.preventDefault(),window.getSelection().type==="Range")return"";w(P.path).then(E=>{if(!E)return;const i=document.createElement("a");i.classList.add(s("copy-clipboard-check")),A.prepend(i),setTimeout(()=>{A.removeChild(i)},2e3)})})),P.url){const R=document.createElement("a");R.classList.add(s("editor-link")),R.setAttribute(R.ajax?"title":"href",P.url),R.addEventListener("click",E=>{E.stopPropagation(),P.ajax&&(fetch(stmt.xdebug_link.url),E.preventDefault())}),A.append(R)}return A},w=PhpDebugBar.Widgets.copyToClipboard=function(P){return Wt(this,null,function*(){const A=P instanceof Element?P.innerText:P;if(navigator.clipboard&&window.isSecureContext)try{return yield navigator.clipboard.writeText(A),!0}catch(E){}let f=!1;const R=document.createElement("textarea");R.value=A,R.style.position="fixed",R.style.left="-9999px",R.style.top="-9999px",document.body.appendChild(R);try{R.focus(),R.select(),R.setSelectionRange(0,99999),f=document.execCommand("copy")}catch(E){}return document.body.removeChild(R),f})},c=PhpDebugBar.Widgets.highlight=function(P,A){if(typeof phpdebugbar_hljs=="undefined")return W(P);const f=phpdebugbar_hljs;return A&&f.getLanguage(A)?f.highlight(P,{language:A}).value:f.highlightAuto(P).value},B=PhpDebugBar.Widgets.createCodeBlock=function(P,A,f,R){const E=document.createElement("pre");E.classList.add(s("code-block"));const i=document.createElement("code");if(i.innerHTML=c(`${P} +`,A),E.append(i),!Number.isNaN(Number.parseFloat(f))){const h=P.split(` +`).length,l=document.createElement("ul");E.prepend(l);const N=Array.from(E.children);for(const T of N)T.classList.add(s("numbered-code"));for(let T=f;T100&&(h=`${h.substr(0,100)}...`);let l=null;f.textContent=h,f.addEventListener("click",()=>{if(window.getSelection().type==="Range")return"";f.classList.contains(s("pretty"))?(f.textContent=h,f.classList.remove(s("pretty"))):(l=l||B(E),f.classList.add(s("pretty")),f.innerHTML="",f.append(l))})}}PhpDebugBar.Widgets.VariableListWidget=e;class t extends p{get className(){return s("kvlist htmlvarlist")}itemRenderer(A,f,R,E){const i=document.createElement("i");i.innerHTML=R!=null?R:"";const h=document.createElement("span");h.setAttribute("title",i.textContent),h.innerHTML=R!=null?R:"",A.append(h),f.innerHTML=E&&E.value||E,E!=null&&E.xdebug_link&&f.append(d(E.xdebug_link))}}PhpDebugBar.Widgets.HtmlVariableListWidget=t;class r extends PhpDebugBar.Widget{get tagName(){return"div"}get className(){return s("tablevarlist")}render(){this.bindAttr("data",function(A){var T,b,a;if(this.el.innerHTML="",!this.has("data"))return;this.table=document.createElement("table"),this.table.classList.add(s("tablevar")),this.el.append(this.table);const f=document.createElement("tr");f.classList.add(s("header"));const R=document.createElement("td");f.append(R),this.table.append(f);let E=A.key_map||{value:"Value"};Array.isArray(E)&&(E=Object.fromEntries(E.map(I=>[I,null])));for(const[I,H]of Object.entries(E)){const m=document.createElement("td");if(m.textContent=H!=null?H:I,f.append(m),A.badges&&A.badges[I]){const o=document.createElement("span");o.textContent=A.badges[I],o.classList.add(s("badge")),m.append(o)}}const i=this;if(!A.data)return;let h=!1;for(const[I,H]of Object.entries(A.data)){const m=document.createElement("tr");m.classList.add(s("item")),i.table.append(m);const o=document.createElement("td");if(o.classList.add(s("key")),o.textContent=I,m.append(o),typeof H!="object"||H===null){const u=document.createElement("td");u.classList.add(s("value")),u.textContent=H!=null?H:"",m.append(u);continue}for(const u of Object.keys(E)){const C=document.createElement("td");C.classList.add(s("value")),C.textContent=(T=H[u])!=null?T:"",m.append(C)}if(H.xdebug_link){const u=document.createElement("td");u.classList.add(s("editor")),u.append(d(H.xdebug_link)),m.append(u),h||(h=!0,f.append(document.createElement("td")))}}if(!A.summary)return;const l=document.createElement("tr");l.classList.add(s("summary")),i.table.append(l);const N=document.createElement("td");if(N.classList.add(s("key")),l.append(N),typeof A.summary!="object"||A.summary===null){const I=document.createElement("td");I.classList.add(s("value")),I.textContent=(b=A.summary)!=null?b:"",l.append(I)}else for(const I of Object.keys(E)){const H=document.createElement("td");H.classList.add(s("value")),H.textContent=(a=A.summary[I])!=null?a:"",l.append(H)}h&&l.append(document.createElement("td"))})}}PhpDebugBar.Widgets.TableVariableListWidget=r;class y extends PhpDebugBar.Widget{get tagName(){return"iframe"}get className(){return s("iframe")}render(){this.el.setAttribute("seamless","seamless"),this.el.setAttribute("border","0"),this.el.setAttribute("width","100%"),this.el.setAttribute("height","100%"),this.bindAttr("data",function(A){this.el.setAttribute("src",A)})}}PhpDebugBar.Widgets.IFrameWidget=y;class _ extends PhpDebugBar.Widget{get className(){return s("messages")}render(){const A=this;this.list=new U({itemRenderer(R,E){let i;if(E.message_json)i=document.createElement("span"),i.classList.add(s("value")),PhpDebugBar.Widgets.renderValueInto(i,E.message_json),R.append(i);else if(E.message_html)i=document.createElement("span"),i.classList.add(s("value")),i.innerHTML=E.message_html,R.append(i);else{const h=E.message;if(i=document.createElement("span"),i.classList.add(s("value")),i.textContent=h,i.classList.add(s("truncated")),R.append(i),!E.is_string||i.scrollWidth>i.clientWidth){let l=E.message;E.is_string||(l=null),R.style.cursor="pointer",R.addEventListener("click",()=>{if(window.getSelection().type==="Range")return"";i.classList.contains(s("pretty"))?(i.textContent=h,i.classList.remove(s("pretty")),i.classList.add(s("truncated"))):(l=l||B(E.message),i.classList.add(s("pretty")),i.classList.remove(s("truncated")),i.innerHTML="",i.append(l))})}}if(E.collector){const h=document.createElement("span");h.classList.add(s("collector")),h.textContent=E.collector,R.prepend(h)}if(E.label){i.classList.add(s(E.label));const h=document.createElement("span");h.classList.add(s("label")),h.textContent=E.label,R.prepend(h)}if(E.context&&Object.keys(E.context).length>0){const h=document.createElement("span");h.setAttribute("title","Context"),h.classList.add(s("context-count")),h.textContent=Object.keys(E.context).length,R.prepend(h);const l=document.createElement("table");l.classList.add(s("params")),l.hidden=!0,l.innerHTML='Context';const N=E.context_json||{};for(const T in E.context)if(typeof E.context[T]!="function"){const b=document.createElement("tr"),a=document.createElement("td");a.classList.add(s("name")),a.textContent=T,b.append(a);const I=document.createElement("td");I.classList.add(s("value")),N[T]?PhpDebugBar.Widgets.renderValueInto(I,N[T]):I.innerHTML=E.context[T],b.append(I),l.append(b)}R.append(l),R.style.cursor="pointer",R.addEventListener("click",T=>{window.getSelection().type==="Range"||T.target.closest(".sf-dump")||(l.hidden=!l.hidden)})}E.xdebug_link&&R.prepend(d(E.xdebug_link))}}),this.el.append(this.list.el),this.toolbar=document.createElement("div"),this.toolbar.classList.add(s("toolbar")),this.toolbar.innerHTML='',this.el.append(this.toolbar);const f=document.createElement("input");f.type="text",f.name="search",f.setAttribute("aria-label","Search"),f.placeholder="Search",f.addEventListener("change",function(){A.set("search",this.value)}),this.toolbar.append(f),this.bindAttr("data",function(R){this.set({excludelabel:[],excludecollector:[],search:""});const E=this.toolbar.querySelectorAll(`.${s("filter")}`);for(const b of E)b.remove();const i=[],h=[],l=this,N=function(b,a){const I=document.createElement("a");I.classList.add(s("filter")),I.classList.add(s(b)),I.textContent=a,I.setAttribute("rel",a),I.addEventListener("click",function(){l.onFilterClick(this,b)}),l.toolbar.append(I)};if(R.forEach(b=>{i.includes(b.label||"none")||i.push(b.label||"none"),h.includes(b.collector||"none")||h.push(b.collector||"none")}),i.length>1&&i.forEach(b=>N("label",b)),h.length===1)return;const T=document.createElement("a");T.classList.add(s("filter")),T.style.visibility="hidden",l.toolbar.append(T),h.forEach(b=>N("collector",b))}),this.bindAttr(["excludelabel","excludecollector","search"],function(){const R=this.get("excludelabel")||[],E=this.get("excludecollector")||[],i=this.get("search");let h=!1;const l=[];i&&i===i.toLowerCase()&&(h=!0),this.get("data").forEach(N=>{let T=N.message;N.message_json?T=JSON.stringify(N.message_json):N.message_html&&(T=N.message_html.replace(/<[^>]*>/g,"")),h&&(T=T.toLowerCase()),!R.includes(N.label||void 0)&&!E.includes(N.collector||void 0)&&(!i||T.includes(i))&&l.push(N)}),this.list.set("data",l)})}onFilterClick(A,f){A.classList.toggle(s("excluded"));const R=[],E=`.${s("filter")}.${s("excluded")}.${s(f)}`,i=this.toolbar.querySelectorAll(E);for(const h of i)R.push(h.rel==="none"||!h.rel?void 0:h.rel);this.set(`exclude${f}`,R)}}PhpDebugBar.Widgets.MessagesWidget=_;class O extends PhpDebugBar.Widget{get tagName(){return"ul"}get className(){return s("timeline")}render(){this.bindAttr("data",function(A){const f=function(E){return E<.001?`${(E*1e6).toFixed()}\u03BCs`:E<.1?`${(E*1e3).toFixed(2)}ms`:E<1?`${(E*1e3).toFixed()}ms`:`${E.toFixed(2)}s`},R=function(i){if(i===0||i===null)return"0B";const h=i<0?"-":"",l=Math.abs(i),N=Math.log(l)/Math.log(1024),T=["B","KB","MB","GB","TB"];return h+Math.round(Bt(1024,N-Math.floor(N))*100)/100+T[Math.floor(N)]};if(this.el.innerHTML="",A.measures){let E={};for(let l=0;l1?b.length+"x ":"")+N.label.replace(/\s+/g," ")+(N.duration?` (${N.duration_str}${N.memory?`/${N.memory_str}`:""})`:""),a.append(H),N.collector){const m=document.createElement("span");m.classList.add(s("collector")),m.textContent=N.collector,a.append(m)}if(I.append(a),this.el.append(I),N.params&&Object.keys(N.params).length>0){const m=document.createElement("table");m.classList.add(s("params")),m.hidden=!0,m.innerHTML='Params';for(const o in N.params)if(typeof N.params[o]!="function"){const u=document.createElement("tr"),C=document.createElement("td");C.className=s("name"),C.textContent=o,u.append(C);const X=document.createElement("td");X.className=s("value"),PhpDebugBar.Widgets.renderValueInto(X,N.params[o]),u.append(X),m.append(u)}I.append(m),I.style.cursor="pointer",I.addEventListener("click",function(o){if(window.getSelection().type==="Range"||o.target.closest(".sf-dump"))return"";const u=this.querySelector("table");u.hidden=!u.hidden})}}E=Object.entries(E).map(([l,N])=>({label:l,data:N})).sort((l,N)=>N.data.duration-l.data.duration);const i=document.createElement("table");i.classList.add(s("params"));for(const l of E){const N=Math.min((l.data.duration*100/A.duration).toFixed(2),100),T=document.createElement("i");T.textContent=l.label.replace(/\s+/g," ");const b=T.innerHTML,a=document.createElement("tr");a.innerHTML=`${l.data.count} x ${b} (${N}%)
${f(l.data.duration)}${l.data.memory?`/${R(l.data.memory)}`:""}
`,i.append(a);const I=a.querySelector(`span.${s("value")}`);I.style.width=`${N}%`}const h=document.createElement("li");h.append(i),this.el.append(h)}})}}PhpDebugBar.Widgets.TimelineWidget=O;class v extends PhpDebugBar.Widget{get className(){return s("exceptions")}render(){this.list=new U({itemRenderer(A,f){const R=document.createElement("span");if(R.classList.add(s("message")),R.textContent=f.message,f.count>1){const E=document.createElement("span");E.classList.add(s("badge")),E.textContent=`${f.count}x`,R.prepend(E)}if(A.append(R),f.file&&A.append(d(f.xdebug_link||{filename:f.file,line:f.line})),f.type){const E=document.createElement("span");E.classList.add(s("type")),E.textContent=f.type,A.append(E)}if(f.surrounding_lines){const E=f.line-3<=0?1:f.line-3,i=B(f.surrounding_lines.join(""),"php",E,f.line);i.classList.add(s("file")),i.hidden=!0,A.append(i),A.addEventListener("click",h=>{window.getSelection().type==="Range"||h.target.closest(".sf-dump")||(i.hidden=!i.hidden)})}if(f.stack_trace_json||f.stack_trace_html){const E=document.createElement("span");if(E.classList.add(s("filename")),f.stack_trace_json){const h=f.stack_trace_json,l=h._sd;h._sd=0,PhpDebugBar.Widgets.renderValueInto(E,h),h._sd=l}else E.innerHTML=f.stack_trace_html;const i=E.querySelector(".sf-dump-note");i&&(i.innerHTML=`${i.innerHTML.replace(/^array:/,'Stack Trace: ')} lines`),A.append(E)}else f.stack_trace&&f.stack_trace.split(` +`).forEach(E=>{const i=document.createElement("div"),h=document.createElement("span");h.classList.add(s("filename")),h.textContent=E,i.append(h),A.append(i)})}}),this.el.append(this.list.el),this.bindAttr("data",function(A){if(this.list.set("data",A),A.length===1){const f=this.list.el.children[0];if(f){const R=f.querySelector(`.${s("file")}`);R&&(R.hidden=!1)}}})}}PhpDebugBar.Widgets.ExceptionsWidget=v;class G extends PhpDebugBar.Widget{get className(){return s("datasets-switcher-widget")}initialize(A){this.set(A);const f=this,R=this.get("debugbar");this.badge=document.createElement("div"),this.badge.classList.add(s("datasets-badge")),this.badge.hidden=!0,this.badgeCount=document.createElement("span"),this.badgeCount.classList.add(s("datasets-badge-count")),this.badge.append(this.badgeCount),this.badgeUrl=document.createElement("span"),this.badgeUrl.classList.add(s("datasets-badge-url")),this.badge.append(this.badgeUrl),this.panel=document.createElement("div"),this.panel.classList.add(s("datasets-panel")),this.panel.hidden=!0,R.el&&this.panel.setAttribute("data-theme",R.el.getAttribute("data-theme"));const E=document.createElement("div");E.classList.add(s("datasets-panel-toolbar"));const i=document.createElement("label");i.classList.add(s("datasets-autoshow")),this.autoshowCheckbox=document.createElement("input"),this.autoshowCheckbox.type="checkbox";const h=localStorage.getItem("phpdebugbar-ajaxhandler-autoshow");this.autoshowCheckbox.checked=h!==null?h==="1":R.ajaxHandler?R.ajaxHandler.autoShow:!0,this.autoshowCheckbox.addEventListener("change",function(){R.ajaxHandler&&R.ajaxHandler.setAutoShow(this.checked),R.controls.__settings&&R.controls.__settings.get("widget").set("autoshow",this.checked),R.controls.__datasets&&R.controls.__datasets.get("widget").set("autoshow",this.checked)}),i.append(this.autoshowCheckbox),i.append(document.createTextNode(" Autoshow")),E.append(i),this.refreshBtn=document.createElement("a"),this.refreshBtn.tabIndex=0,this.refreshBtn.classList.add(s("datasets-refresh-btn")),this.refreshBtn.innerHTML='',this.refreshBtn.title="Auto-scan for new datasets",this.isScanning=!1,this.refreshBtn.addEventListener("click",T=>{T.stopPropagation(),this.isScanning?(this.isScanning=!1,this.refreshBtn.classList.remove(s("active")),this.refreshBtn.title="Auto-scan for new datasets"):(this.isScanning=!0,this.refreshBtn.classList.add(s("active")),this.refreshBtn.title="Stop auto-scanning",this.scanForNewDatasets())}),E.append(this.refreshBtn);const l=document.createElement("a");l.tabIndex=0,l.classList.add(s("datasets-clear-btn")),l.textContent="Clear",l.addEventListener("click",()=>{const T=R.activeDatasetId,b=R.datasets[T];R.datasets={},b&&R.addDataSet(b,T,b.__meta.suffix,!0),this.panel.hidden=!0}),E.append(l),this.searchInput=document.createElement("input"),this.searchInput.type="search",this.searchInput.placeholder="Search",this.searchInput.classList.add(s("datasets-search")),this.searchInput.addEventListener("input",()=>{f.applySearchFilter()}),E.append(this.searchInput),this.panel.append(E),this.list=document.createElement("div"),this.list.classList.add(s("datasets-list")),this.panel.append(this.list),this.el.append(this.badge),document.body.append(this.panel);const N=()=>{const T=this.badge.getBoundingClientRect(),b=T.top,a=window.innerHeight-T.bottom,I=a>b;this.panel.style.position="fixed",this.panel.style.right=`${window.innerWidth-T.right}px`,this.panel.style.left="auto",I?(this.panel.style.top=`${T.bottom}px`,this.panel.style.bottom="auto",this.panel.style.maxHeight=`${a}px`):(this.panel.style.bottom=`${window.innerHeight-T.top}px`,this.panel.style.top="auto",this.panel.style.maxHeight=`${b}px`),this.refreshBtn.hidden=!R.openHandler};this.badge.addEventListener("click",T=>{T.target!==this.panel&&!this.panel.contains(T.target)&&(this.panel.hidden&&N(),this.panel.hidden=!this.panel.hidden)}),document.addEventListener("click",T=>{!this.badge.contains(T.target)&&!this.panel.contains(T.target)&&(this.panel.hidden=!0)})}render(){this.bindAttr("data",function(){this.updateBadge()}),this.bindAttr("activeId",function(){this.updateBadge()}),this.bindAttr("autoshow",function(){this.autoshowCheckbox&&(this.autoshowCheckbox.checked=this.get("autoshow"))})}updateBadge(){const A=this.get("debugbar"),f=this.get("data")||A.datasets,R=this.get("activeId")||A.activeDatasetId;if(!f){this.badge.hidden=!0;return}const E=Object.keys(f).length;if(E>=1){this.badge.hidden=!1;const i=f[R];if(i&&i.__meta){const l=i.__meta.uri||"",N=i.__meta.method||"GET";this.badgeUrl.textContent=`${N} ${l}`}E>1?(this.badgeCount.textContent=E,this.badgeCount.hidden=!1):this.badgeCount.hidden=!0,this.list.innerHTML="";const h=Object.keys(f).sort((l,N)=>{var a,I;const T=((a=f[l].__meta)==null?void 0:a.utime)||0;return(((I=f[N].__meta)==null?void 0:I.utime)||0)-T});for(const l of h){const N=f[l],T=document.createElement("div");T.classList.add(s("datasets-list-item"));const b=N.__meta.uri||"",a=N.__meta.method||"GET";T.setAttribute("data-url",b),T.setAttribute("data-method",a),l===R&&T.classList.add(s("active"));const I=document.createElement("span");I.classList.add(s("datasets-item-nb")),I.textContent=`#${N.__meta.nb}`,T.append(I);const H=document.createElement("span");H.classList.add(s("datasets-item-time")),H.textContent=N.__meta.datetime?N.__meta.datetime.split(" ")[1]:"",T.append(H);const m=document.createElement("div");m.classList.add(s("datasets-item-request"));const o=document.createElement("span");o.classList.add(s("datasets-item-method")),o.textContent=a,m.append(o);const u=document.createElement("span");if(u.classList.add(s("datasets-item-url")),u.textContent=b,m.append(u),N.__meta.suffix){const L=document.createElement("span");L.classList.add(s("datasets-item-suffix")),L.textContent=` ${N.__meta.suffix}`,m.append(L)}T.append(m);const C=document.createElement("div");C.classList.add(s("datasets-item-badges"));for(const[L,k]of Object.entries(A.dataMap)){const q=M(N,k[0],k[1]);if(L.includes(":")){const ee=L.split(":"),ne=ee[0];if(ee[1]==="badge"&&q>0){const ae=A.getControl(ne);if(ae){const se=document.createElement("span");if(se.classList.add(s("datasets-item-badge")),se.setAttribute("title",ae.get("title")),se.dataset.tab=ne,ae.icon){const ce=ae.icon.cloneNode(!0);ce.style.width="12px",ce.style.height="12px",se.append(ce)}const ge=document.createElement("span");ge.textContent=q,se.append(ge),C.append(se),se.addEventListener("click",ce=>{ce.stopPropagation(),A.showDataSet(l),A.showTab(ne),this.panel.hidden=!0})}}}}T.append(C);const X=document.createElement("a");X.classList.add(s("datasets-item-copy-id")),X.title=`Copy Request ID: ${l}`,X.innerHTML='',X.addEventListener("click",L=>{L.stopPropagation();const k=document.createElement("textarea");k.value=l,k.style.position="fixed",k.style.opacity="0",document.body.append(k),k.select(),document.execCommand("copy"),k.remove();const q=X.querySelector("i");q.className="phpdebugbar-icon phpdebugbar-icon-circle-check",X.classList.add(s("copied")),setTimeout(()=>{q.className="phpdebugbar-icon phpdebugbar-icon-copy",X.classList.remove(s("copied"))},2e3)}),T.append(X),T.addEventListener("click",()=>{A.showDataSet(l),this.panel.hidden=!0}),this.list.append(T)}this.applySearchFilter()}else this.badge.hidden=!0}applySearchFilter(){const A=this.searchInput.value.toLowerCase().trim(),f=this.list.querySelectorAll(`.${s("datasets-list-item")}`);for(const R of f)if(A==="")R.hidden=!1;else{const E=R.getAttribute("data-url").toLowerCase(),h=`${R.getAttribute("data-method").toLowerCase()} ${E}`,N=A.split(/\s+/).filter(T=>T.length>0).every(T=>h.includes(T));R.hidden=!N}}scanForNewDatasets(){const A=this.get("debugbar");if(!this.isScanning||!A.openHandler)return;const f=A.datasets,R=Object.values(f).reduce((i,h)=>{var l;return Math.max(i,((l=h.__meta)==null?void 0:l.utime)||0)},0),E=()=>{this.isScanning&&setTimeout(()=>this.scanForNewDatasets(),1e3)};A.openHandler.find({utime:R},0,(i,h)=>{if(h){console.error("scanForNewDatasets: find() failed",h),this.isScanning=!1,this.refreshBtn.classList.remove(s("active")),this.refreshBtn.title="Error scanning";return}try{const l=i.filter(T=>T.utime>R&&!f[T.id]);l.reverse();const N=(T=0)=>{if(T>=l.length){E();return}const{id:b}=l[T],a=T===l.length-1;A.loadDataSet(b,"(scan)",()=>N(T+1),this.autoshowCheckbox.checked&&a)};l.length?N():E()}catch(l){console.error("scanForNewDatasets: unexpected error",l),this.refreshBtn.classList.remove(s("active")),this.refreshBtn.title="Error scanning",this.isScanning=!1}})}}PhpDebugBar.Widgets.DatasetWidget=G})();(function(){const s=function(W){return PhpDebugBar.utils.csscls(W,"phpdebugbar-openhandler-")};PhpDebugBar.OpenHandler=PhpDebugBar.Widget.extend({className:"phpdebugbar-openhandler",defaults:{items_per_page:20},render(){const W=this;document.body.append(this.el),this.el.style.display="none",this.closebtn=document.createElement("a"),this.closebtn.classList.add(s("closebtn")),this.closebtn.innerHTML='',this.brand=document.createElement("span"),this.brand.classList.add(s("brand")),this.brand.innerHTML='',this.table=document.createElement("tbody");const S=document.createElement("div");S.classList.add(s("header")),S.textContent="PHP DebugBar | Open",S.prepend(this.brand),S.append(this.closebtn),this.el.append(S);const g=document.createElement("table");g.innerHTML='IDDateMethodURLIPFilter data',g.append(this.table),this.el.append(g),this.actions=document.createElement("div"),this.actions.classList.add(s("actions")),this.el.append(this.actions),this.closebtn.addEventListener("click",()=>{W.hide()}),this.loadmorebtn=document.createElement("a"),this.loadmorebtn.textContent="Load more",this.actions.append(this.loadmorebtn),this.loadmorebtn.addEventListener("click",()=>{W.find(W.last_find_request,W.last_find_request.offset+W.get("items_per_page"),W.handleFind.bind(W))}),this.showonlycurrentbtn=document.createElement("a"),this.showonlycurrentbtn.textContent="Show only current URL",this.actions.append(this.showonlycurrentbtn),this.showonlycurrentbtn.addEventListener("click",()=>{W.uriInput.value=window.location.pathname,W.searchBtn.click()}),this.refreshbtn=document.createElement("a"),this.refreshbtn.textContent="Refresh",this.actions.append(this.refreshbtn),this.refreshbtn.addEventListener("click",()=>{W.refresh()}),this.clearbtn=document.createElement("a"),this.clearbtn.textContent="Clear storage",this.actions.append(this.clearbtn),this.clearbtn.addEventListener("click",()=>{W.clear(()=>{W.hide()})}),this.addSearch(),this.overlay=document.createElement("div"),this.overlay.classList.add(s("overlay")),this.overlay.style.display="none",document.body.append(this.overlay),this.overlay.addEventListener("click",()=>{W.hide()})},refresh(){this.table.innerHTML="",this.loadmorebtn.style.display="",this.find({},0,this.handleFind.bind(this))},addSearch(){const W=this,S=this.searchBtn=document.createElement("button");S.textContent="Search",S.type="submit",S.addEventListener("click",function(w){W.table.innerHTML="";const c={},B=new FormData(this.parentElement);for(const[M,U]of B.entries())U&&(c[M]=U);W.find(c,0,W.handleFind.bind(W)),w.preventDefault()});const g=document.createElement("form");g.innerHTML='
Filter results
',this.uriInput=document.createElement("input"),this.uriInput.type="text",this.uriInput.name="uri",this.uriInput.placeholder="URI, eg '/user/*'",g.append(this.uriInput),this.ipInput=document.createElement("input"),this.ipInput.type="text",this.ipInput.name="ip",this.ipInput.placeholder="IP",g.append(this.ipInput);const d=document.createElement("button");d.textContent="Reset",d.type="button",d.addEventListener("click",()=>{g.reset(),S.click()}),g.append(S),g.append(d),this.actions.append(g)},handleFind(W){const S=this;for(const g of W){const d=document.createElement("a");d.textContent="Load dataset",d.addEventListener("click",G=>{S.hide(),S.load(g.id,P=>{S.callback(g.id,P)}),G.preventDefault()});const w=document.createElement("a");w.textContent=g.method,w.addEventListener("click",G=>{S.table.innerHTML="",S.find({method:g.method},0,S.handleFind.bind(S)),G.preventDefault()});const c=document.createElement("a");c.textContent=g.uri,c.addEventListener("click",G=>{S.hide(),S.load(g.id,P=>{S.callback(g.id,P)}),G.preventDefault()});const B=document.createElement("a");B.textContent=g.ip,B.addEventListener("click",G=>{S.ipInput.value=g.ip,S.searchBtn.click(),G.preventDefault()});const M=document.createElement("a");M.textContent="Show URL",M.addEventListener("click",G=>{S.uriInput.value=g.uri,S.searchBtn.click(),G.preventDefault()});const U=document.createElement("tr"),p=document.createElement("td");p.classList.add(s("id-cell"));const e=document.createElement("span");e.classList.add(s("id-text")),e.textContent=g.id,e.title=g.id,p.append(e);const t=document.createElement("a");t.classList.add(s("copy-id")),t.title="Copy Request ID",t.innerHTML='',t.addEventListener("click",G=>{G.stopPropagation(),G.preventDefault();const P=document.createElement("textarea");P.value=g.id,P.style.position="fixed",P.style.opacity="0",document.body.append(P),P.select(),document.execCommand("copy"),P.remove();const A=t.querySelector("i");A.className="phpdebugbar-icon phpdebugbar-icon-circle-check",t.classList.add(s("copied")),setTimeout(()=>{A.className="phpdebugbar-icon phpdebugbar-icon-copy",t.classList.remove(s("copied"))},2e3)}),p.append(t),U.append(p);const r=document.createElement("td");r.textContent=g.datetime,U.append(r);const y=document.createElement("td");y.textContent=g.method,U.append(y);const _=document.createElement("td");_.append(c),U.append(_);const O=document.createElement("td");O.append(B),U.append(O);const v=document.createElement("td");v.append(M),U.append(v),S.table.append(U)}W.lengthd.json()).then(S).catch(d=>{S(null,d)})}})})();(function(){const s=PhpDebugBar.utils.makecsscls("phpdebugbar-widgets-");class W extends PhpDebugBar.Widget{get className(){return s("mails")}render(){this.list=new PhpDebugBar.Widgets.ListWidget({itemRenderer(g,d){const w=document.createElement("span");w.classList.add(s("subject")),w.textContent=d.subject,g.append(w);const c=document.createElement("span");if(c.classList.add(s("to")),c.textContent=d.to,g.append(c),d.attachments&&d.attachments.length){const B=` +Attachments: + `+d.attachments.join(` + `);d.headers=(d.headers||"")+B,delete d.attachments}if(d.body||d.html){const B=document.createElement("span");B.classList.add(s("filename")),B.textContent="";const M=document.createElement("a");M.setAttribute("title","Mail Preview"),M.textContent="View Mail",M.classList.add(s("editor-link")),M.addEventListener("click",()=>{const p=window.open("about:blank","Mail Preview","width=650,height=440,scrollbars=yes").document;let e="";if(d.headers){const _=document.createElement("pre");_.style.border="1px solid #ddd",_.style.padding="5px",_.style.overflowX="scroll";const O=document.createElement("code");O.textContent=d.headers,_.append(O),e=_.outerHTML}const t=document.createElement("pre");t.style.border="1px solid #ddd",t.style.padding="5px",t.style.overflowX="scroll",t.textContent=d.body;let r=t.outerHTML,y="";if(d.html){const _=document.createElement("details"),O=document.createElement("summary");O.textContent="Text version",_.append(O),_.append(t),r=_.outerHTML;const v=document.createElement("iframe");v.setAttribute("width","100%"),v.setAttribute("height","400px"),v.setAttribute("sandbox",""),v.setAttribute("referrerpolicy","no-referrer"),v.setAttribute("srcdoc",d.html),y=v.outerHTML}p.open(),p.write(e+r+y),p.close()}),B.append(M),g.append(B)}if(d.headers){const B=document.createElement("pre");B.classList.add(s("headers"));const M=document.createElement("code");M.textContent=d.headers,B.append(M),B.hidden=!0,g.append(B),g.addEventListener("click",()=>{B.hidden=!B.hidden})}}}),this.el.append(this.list.el),this.bindAttr("data",function(g){this.list.set("data",g)})}}PhpDebugBar.Widgets.MailsWidget=W})();(function(){const s=PhpDebugBar.utils.makecsscls("phpdebugbar-widgets-");class W extends PhpDebugBar.Widget{get className(){return s("sqlqueries")}onFilterClick(g){g.classList.toggle(s("excluded"));const d=g.getAttribute("rel"),w=this.list.el.querySelectorAll(`li[connection="${d}"]`);for(const c of w)c.hidden=!c.hidden}onCopyToClipboard(g){PhpDebugBar.Widgets.copyToClipboard(g.parentElement.querySelector("code")).then(d=>{if(!d){console.log("Oops, unable to copy");return}g.classList.add(s("copy-clipboard-check")),setTimeout(()=>{g.classList.remove(s("copy-clipboard-check"))},2e3)})}renderList(g,d,w){var p;const c=document.createElement("thead"),B=document.createElement("tr"),M=document.createElement("th");M.colSpan=2,M.classList.add(s("name")),M.innerHTML=d,B.append(M),c.append(B),g.append(c);const U=document.createElement("tbody");for(const e in w){const t=typeof w[e]=="function"?`${w[e].name} {}`:w[e],r=document.createElement("tr");if(typeof t=="object"&&t!==null){const y=document.createElement("td");y.classList.add("phpdebugbar-text-muted"),y.textContent=t.index||e,r.append(y);const _=document.createElement("td");if(t.namespace&&_.append(`${t.namespace}::`),_.append(t.name||t.file),t.line){const O=document.createElement("span");O.classList.add("phpdebugbar-text-muted"),O.textContent=`:${t.line}`,_.append(O)}if((p=t.xdebug_link)!=null&&p.url){const O=PhpDebugBar.Widgets.editorLink(t.xdebug_link);_.append(O.querySelector("a"))}r.append(_)}else{const y=document.createElement("td");y.classList.add("phpdebugbar-text-muted"),y.textContent=e,r.append(y);const _=document.createElement("td");_.textContent=t,r.append(_)}U.append(r)}g.append(U)}itemRenderer(g,d){if(d.type=d.type||"query",d.slow&&g.classList.add(s("sql-slow")),d.width_percent){const c=document.createElement("div");c.classList.add(s("bg-measure"));const B=document.createElement("div");B.classList.add(s("value")),B.style.left=`${d.start_percent}%`,B.style.width=`${Math.max(d.width_percent,.01)}%`,c.append(B),g.append(c)}if(d.duration_str){const c=document.createElement("span");c.setAttribute("title","Duration"),c.classList.add(s("duration")),c.textContent=d.duration_str,g.append(c)}if(d.memory_str){const c=document.createElement("span");c.setAttribute("title","Memory usage"),c.classList.add(s("memory")),c.textContent=d.memory_str,g.append(c)}if(typeof d.row_count!="undefined"){const c=document.createElement("span");c.setAttribute("title","Row count"),c.classList.add(s("row-count")),c.textContent=d.row_count,g.append(c)}if(typeof d.stmt_id!="undefined"&&d.stmt_id){const c=document.createElement("span");c.setAttribute("title","Prepared statement ID"),c.classList.add(s("stmt-id")),c.textContent=d.stmt_id,g.append(c)}if(d.connection){const c=document.createElement("span");if(c.setAttribute("title","Connection"),c.classList.add(s("database")),c.textContent=d.connection,g.append(c),g.setAttribute("connection",d.connection),!this.filters.includes(d.connection)){this.filters.push(d.connection);const B=document.createElement("a");B.classList.add(s("filter")),B.textContent=d.connection,B.setAttribute("rel",d.connection),B.addEventListener("click",()=>{this.onFilterClick(B)}),this.toolbar.append(B),this.filters.length>1&&(this.toolbar.hidden=!1)}}if(d.type==="query"){const c=document.createElement("span");c.setAttribute("title","Copy to clipboard"),c.classList.add(s("copy-clipboard")),c.style.cursor="pointer",c.innerHTML="​",c.addEventListener("click",B=>{this.onCopyToClipboard(c),B.stopPropagation()}),g.append(c)}if(d.xdebug_link?g.prepend(PhpDebugBar.Widgets.editorLink(d.xdebug_link)):typeof d.filename!="undefined"&&d.filename&&g.prepend(PhpDebugBar.Widgets.editorLink(d)),d.type!=="query"){const c=document.createElement("strong");c.classList.add(s("sql"),s(d.type)),c.textContent=d.sql,g.append(c)}else{const c=document.createElement("code");c.classList.add(s("sql")),c.innerHTML=PhpDebugBar.Widgets.highlight(d.sql,"sql"),g.append(c)}if(typeof d.is_success!="undefined"&&!d.is_success){g.classList.add(s("error"));const c=document.createElement("span");c.classList.add(s("error")),c.textContent=`[${d.error_code}] ${d.error_message}`,g.append(c)}if(d.type!=="query")return;const w=document.createElement("table");w.classList.add(s("params")),w.hidden=!0,d.params&&Object.keys(d.params).length>0&&this.renderList(w,"Params",d.params),d.backtrace&&Object.keys(d.backtrace).length>0&&this.renderList(w,"Backtrace",d.backtrace),w.querySelectorAll("tr").length||(w.style.display="none"),g.append(w),g.style.cursor="pointer",g.addEventListener("click",c=>{if(window.getSelection().type==="Range"||c.target.closest(".sf-dump"))return"";w.hidden=!w.hidden;const B=g.querySelector("code");if(B&&typeof phpdebugbar_sqlformatter!="undefined"){let M=d.sql;w.hidden||(M=phpdebugbar_sqlformatter.format(d.sql)),B.innerHTML=PhpDebugBar.Widgets.highlight(M,"sql")}})}render(){this.status=document.createElement("div"),this.status.classList.add(s("status")),this.el.append(this.status),this.toolbar=document.createElement("div"),this.toolbar.classList.add(s("toolbar")),this.el.append(this.toolbar),this.filters=[];let g="none",d=null;this.list=new PhpDebugBar.Widgets.ListWidget({itemRenderer:(w,c)=>this.itemRenderer(w,c)}),this.list.bindAttr("data",function(w){const c={};let B=0;for(let M=0;M0&&(U+=JSON.stringify(w[M].params)),w[M].connection&&(U+=`@${w[M].connection}`),c[U]=c[U]||{keys:[]},c[U].keys.push(M)}for(const M in c)if(c[M].keys.length>1){B+=c[M].keys.length;for(let U=0;U{p.classList.toggle("shown-duplicated"),p.textContent=p.classList.contains("shown-duplicated")?"Show All":U;const e=`.${s("list-item")}:not(.${s("sql-duplicate")})`,t=this.list.el.querySelectorAll(e);for(const r of t)r.hidden=!r.hidden}),M.append(p)}if(w.accumulated_duration_str){const p=document.createElement("span");p.setAttribute("title","Accumulated duration"),p.classList.add(s("duration")),p.textContent=w.accumulated_duration_str;const e=document.createElement("span");e.classList.add(s("sort-icon")),e.style.cursor="pointer",e.style.marginLeft="5px",e.textContent="Sort \u21C5",e.setAttribute("title","Sort by duration"),e.addEventListener("click",()=>{if(g==="none"?(g="desc",e.textContent="\u2193",d=[...w.statements],w.statements.sort((t,r)=>(r.duration||0)-(t.duration||0))):g==="desc"?(g="asc",e.textContent="\u2191",w.statements.sort((t,r)=>(t.duration||0)-(r.duration||0))):(g="none",e.textContent="\u21C5",d&&(w.statements=d,d=null)),this.list.set("data",w.statements),this.list.get("duplicate")){const t=M.querySelector("a."+s("duplicates"));t.textContent=U,t.classList.remove("shown-duplicated")}}),p.append(e),this.status.append(p)}if(w.memory_usage_str){const p=document.createElement("span");p.setAttribute("title","Memory usage"),p.classList.add(s("memory")),p.textContent=w.memory_usage_str,this.status.append(p)}})}}PhpDebugBar.Widgets.SQLQueriesWidget=W})();(function(){const s=PhpDebugBar.utils.makecsscls("phpdebugbar-widgets-");class W extends PhpDebugBar.Widget{get className(){return s("templates")}render(){this.status=document.createElement("div"),this.status.classList.add(s("status")),this.el.append(this.status),this.list=new PhpDebugBar.Widgets.ListWidget({itemRenderer(g,d){const w=document.createElement("span");if(w.classList.add(s("name")),d.html?w.innerHTML=d.html:w.textContent=d.name,g.append(w),d.xdebug_link&&g.append(PhpDebugBar.Widgets.editorLink(d.xdebug_link)),d.render_time_str){const c=document.createElement("span");c.setAttribute("title","Render time"),c.classList.add(s("render-time")),c.textContent=d.render_time_str,g.append(c)}if(d.memory_str){const c=document.createElement("span");c.setAttribute("title","Memory usage"),c.classList.add(s("memory")),c.textContent=d.memory_str,g.append(c)}if(typeof d.param_count!="undefined"){const c=document.createElement("span");c.setAttribute("title","Parameter count"),c.classList.add(s("param-count")),c.textContent=d.param_count,g.append(c)}if(typeof d.type!="undefined"&&d.type){const c=document.createElement("span");c.setAttribute("title","Type"),c.classList.add(s("type")),c.textContent=d.type,g.append(c)}if(typeof d.editorLink!="undefined"&&d.editorLink){const c=document.createElement("a");c.setAttribute("href",d.editorLink),c.classList.add(s("editor-link")),c.textContent="file",c.addEventListener("click",B=>{B.stopPropagation()}),g.append(c)}if(d.params&&Object.keys(d.params).length>0){const c=document.createElement("table");c.classList.add(s("params"));const B=document.createElement("thead");B.innerHTML='Params';const M=document.createElement("tbody");c.append(B,M);for(const U in d.params)if(typeof d.params[U]!="function"){const p=document.createElement("tr"),e=document.createElement("td");e.className=s("name"),e.textContent=U,p.append(e);const t=document.createElement("td");t.className=s("value"),PhpDebugBar.Widgets.renderValueInto(t,d.params[U]),p.append(t),M.append(p)}c.hidden=!0,g.append(c),g.style.cursor="pointer",g.addEventListener("click",U=>{window.getSelection().type==="Range"||U.target.closest(".sf-dump")||(c.hidden=!c.hidden)})}}}),this.el.append(this.list.el),this.callgraph=document.createElement("div"),this.callgraph.classList.add(s("callgraph")),this.el.append(this.callgraph),this.bindAttr("data",function(g){this.list.set("data",g.templates),this.status.innerHTML="",this.callgraph.innerHTML="";const d=g.sentence||"templates were rendered",w=document.createElement("span");if(w.textContent=`${g.nb_templates} ${d}`,this.status.append(w),g.accumulated_render_time_str){const c=document.createElement("span");c.setAttribute("title","Accumulated render time"),c.classList.add(s("render-time")),c.textContent=g.accumulated_render_time_str,this.status.append(c)}if(g.memory_usage_str){const c=document.createElement("span");c.setAttribute("title","Memory usage"),c.classList.add(s("memory")),c.textContent=g.memory_usage_str,this.status.append(c)}if(g.nb_blocks>0){const c=document.createElement("div");c.textContent=`${g.nb_blocks} blocks were rendered`,this.status.append(c)}if(g.nb_macros>0){const c=document.createElement("div");c.textContent=`${g.nb_macros} macros were rendered`,this.status.append(c)}typeof g.callgraph!="undefined"&&(this.callgraph.innerHTML=g.callgraph)})}}PhpDebugBar.Widgets.TemplatesWidget=W})();(function(){const s=PhpDebugBar.utils.makecsscls("phpdebugbar-widgets-");class W extends PhpDebugBar.Widget{get className(){return s("httpclient")}render(){this.list=new PhpDebugBar.Widgets.ListWidget({itemRenderer(g,d){const w=document.createElement("div");w.classList.add(s("request-summary")),w.style.display="flex",w.style.gap="10px",w.style.alignItems="center";const c=document.createElement("span");c.classList.add(s("method")),c.textContent=d.method,c.style.fontWeight="bold",c.style.minWidth="60px",w.append(c);const B=document.createElement("span");B.classList.add(s("url")),B.textContent=d.url,B.style.flex="1",B.style.overflow="hidden",B.style.textOverflow="ellipsis",B.style.whiteSpace="nowrap",w.append(B);const M=document.createElement("span");if(M.classList.add(s("status")),M.textContent=d.status,M.style.minWidth="40px",M.style.textAlign="center",typeof d.status=="number"&&(d.status>=200&&d.status<300?M.style.color="#4caf50":d.status>=300&&d.status<400?M.style.color="#ff9800":d.status>=400&&(M.style.color="#f44336")),w.append(M),d.duration!==null&&typeof d.duration!="undefined"){const U=document.createElement("span");U.classList.add(s("duration")),U.textContent=d.duration,U.style.minWidth="60px",U.style.textAlign="right",w.append(U)}if(g.append(w),d.details&&Object.keys(d.details).length>0){const U=document.createElement("table");U.classList.add(s("params"));const p=document.createElement("thead");p.innerHTML='Details';const e=document.createElement("tbody");U.append(p,e);for(const t in d.details)if(typeof d.details[t]!="function"){const r=document.createElement("tr"),y=document.createElement("td");y.className=s("name"),y.textContent=t,r.append(y);const _=document.createElement("td");_.className=s("value"),PhpDebugBar.Widgets.renderValueInto(_,d.details[t]),r.append(_),e.append(r)}U.hidden=!0,g.append(U),g.style.cursor="pointer",g.addEventListener("click",t=>{window.getSelection().type==="Range"||t.target.closest(".sf-dump")||(U.hidden=!U.hidden)})}}}),this.el.append(this.list.el),this.bindAttr("data",function(g){this.list.set("data",g)})}}PhpDebugBar.Widgets.HttpWidget=W})();(function(){const s=PhpDebugBar.utils.makecsscls("phpdebugbar-widgets-"),W=new Map;let S=0;const g={"&":"&","<":"<",">":">",'"':"""},d=/[&<>"]/g;class w{constructor(p){this.expandedDepth=p&&p.expandedDepth!==void 0?p.expandedDepth:0}render(p){const e=document.createElement("pre");e.className="sf-dump";const t=this.expandedDepth;return this.expandedDepth=0,e.innerHTML=this.toHtml(p,0)+` +`,this.expandedDepth=t,e}toHtml(p,e){if(p===null)return"null";switch(typeof p){case"boolean":return""+p+"";case"number":return""+this.esc(String(p))+"";case"string":return'"'+this.esc(p)+'"';case"object":return this.containerToHtml(p,e);default:return this.esc(String(p))}}containerToHtml(p,e){const t=Array.isArray(p),r=!t&&p._vd,y=!t&&p._cut||0,_=t?null:Object.keys(p),O=!t&&(r||y)?_.filter(P=>P!=="_vd"&&P!=="_cut"):_,G=(t?p.length:O.length)+y;return r?this.objectToHtml(p,O,r,y,G,e):this.arrayToHtml(p,t,O,y,G,e)}arrayToHtml(p,e,t,r,y,_){if(y===0)return"[]";const O=_ [";if(v+=""+(O?"\u25BC":"\u25B6")+"",v+=' ',v+=this.arrayPreview(p,e,t,r)+" ]",O)v+="",v+=this.arrayChildren(p,e,t,r,_),v+="";else{const G=++S;W.set(G,{v:p,arr:e,k:t,c:r,d:_,r:this,ed:this.expandedDepth}),v+=""}return v+=']',v}arrayPreview(p,e,t,r){const y=e?p.length:t.length,_=Math.min(y,8),O=[];for(let G=0;G<_;G++){const P=e?G:t[G],A=e?p[G]:p[t[G]];O.push(e?this.previewValue(A):this.esc(String(P))+": "+this.previewValue(A))}let v=O.join(", ");return(y>_||r>0)&&(v+=", \u2026"),v}arrayChildren(p,e,t,r,y){const _=e?p.length:t.length;let O="";for(let v=0;v<_;v++)v>0&&(O+=` +`),e?(O+=""+v+" => ",O+=this.toHtml(p[v],y+1)):(O+='"'+this.esc(t[v])+'" => ',O+=this.toHtml(p[t[v]],y+1));return r>0&&(O+=` +\u2026`+r),O}objectToHtml(p,e,t,r,y,_){const O=t[1]||0,v=t[2]||null,G=t[3]||null,P=t[0]===5;if(y===0&&!O)return(v?this.esc(v)+" ":"")+"{}";const A=_ {":(v&&(f+=""+this.esc(v)+" "),f+="{",O&&(R="#"+O+" ")),y===0)return f+R+"}";f+=""+R+""+(A?"\u25BC":"\u25B6")+"",f+=' ';const E=Math.min(e.length,8),i=[];for(let l=0;lE||r>0)&&(h+=", \u2026"),f+=h+" }",A)f+="",f+=this.objectChildren(p,e,G,r,_),f+="";else{const l=++S;W.set(l,{v:p,obj:!0,k:e,p:G,c:r,d:_,r:this,ed:this.expandedDepth}),f+=""}return f+='}',f}objectChildren(p,e,t,r,y){let _="";for(let O=0;O0&&(_+=` +`);const v=t?t[O]:null,G=this.esc(e[O]);v?v==="+"?_+='+"'+G+'": ':v==="~"?_+=""+G+": ":v==="*"?_+='#'+G+": ":_+='-'+G+": ":_+='+'+G+": ",_+=this.toHtml(p[e[O]],y+1)}return r>0&&(_+=` +\u2026`+r),_}previewValue(p){return p===null?"null":typeof p=="string"?'"'+this.esc(p.length>40?p.substring(0,40)+"\u2026":p)+'"':typeof p=="boolean"||typeof p=="number"?String(p):typeof p=="object"?p._vd?(p._vd[2]||"")+" {\u2026}":Array.isArray(p)?"[\u2026]":"{\u2026}":"\u2026"}esc(p){return String(p).replace(d,e=>g[e])}}PhpDebugBar.Widgets.VarDumpRenderer=w;function c(U){const p=+U.dataset.lazy;delete U.dataset.lazy;const e=W.get(p);if(!e)return;W.delete(p);const t=e.r,r=t.expandedDepth;t.expandedDepth=e.ed,e.obj?U.innerHTML=t.objectChildren(e.v,e.k,e.p,e.c,e.d):U.innerHTML=t.arrayChildren(e.v,e.arr,e.k,e.c,e.d),t.expandedDepth=r}function B(U,p){const e=U.previousElementSibling,t=U.nextElementSibling;e&&e.classList.toggle("sf-dump-hidden",p),t&&t.classList.toggle("sf-dump-hidden",!p)}document.addEventListener("click",function(U){var y,_;const p=U.target.closest("a.sf-dump-toggle")||((y=U.target.closest(".sf-dump-preview"))==null?void 0:y.previousElementSibling);if(!p)return;const e=p.closest("pre.sf-dump");if(!e||e.id)return;const t=(_=p.nextElementSibling)==null?void 0:_.nextElementSibling;if(!t||t.tagName!=="SAMP")return;U.preventDefault();const r=t.classList.contains("sf-dump-compact");if(r&&t.dataset.lazy&&c(t),U.ctrlKey||U.metaKey)if(r){let O;for(;(O=t.querySelectorAll("[data-lazy]")).length;)O.forEach(c);t.querySelectorAll("samp.sf-dump-compact").forEach(function(v){var P;v.classList.replace("sf-dump-compact","sf-dump-expanded");const G=(P=v.previousElementSibling)==null?void 0:P.previousElementSibling;G&&G.classList.contains("sf-dump-toggle")&&(G.lastElementChild.textContent="\u25BC"),B(v,!0)})}else t.querySelectorAll("samp.sf-dump-expanded").forEach(function(O){var G;O.classList.replace("sf-dump-expanded","sf-dump-compact");const v=(G=O.previousElementSibling)==null?void 0:G.previousElementSibling;v&&v.classList.contains("sf-dump-toggle")&&(v.lastElementChild.textContent="\u25B6"),B(O,!1)});t.classList.toggle("sf-dump-compact",!r),t.classList.toggle("sf-dump-expanded",r),p.lastElementChild.textContent=r?"\u25BC":"\u25B6",B(t,r)});class M extends PhpDebugBar.Widgets.KVListWidget{get className(){return s("kvlist jsonvarlist")}itemRenderer(p,e,t,r){const y=document.createElement("span");y.setAttribute("title",t),y.textContent=t,p.appendChild(y);const _=r&&r.value!==void 0?r.value:r;PhpDebugBar.Widgets.renderValueInto(e,_),r&&r.xdebug_link&&e.appendChild(PhpDebugBar.Widgets.editorLink(r.xdebug_link))}}PhpDebugBar.Widgets.JsonVariableListWidget=M})();})(); diff --git a/resources/highlight.css b/resources/highlight.css new file mode 100644 index 000000000..4b3372de5 --- /dev/null +++ b/resources/highlight.css @@ -0,0 +1,224 @@ +pre code.phpdebugbar-hljs { + display: block; + overflow-x: auto; + padding: 1em; +} +code.phpdebugbar-hljs { + padding: 3px 5px; +} +/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/ +.phpdebugbar-hljs { + color: var(--debugbar-text); +} +.phpdebugbar-hljs-doctag, +.phpdebugbar-hljs-keyword, +.phpdebugbar-hljs-meta .phpdebugbar-hljs-keyword, +.phpdebugbar-hljs-template-tag, +.phpdebugbar-hljs-template-variable, +.phpdebugbar-hljs-type, +.phpdebugbar-hljs-variable.language_ { + /* prettylights-syntax-keyword */ + color: #d73a49 +} +.phpdebugbar-hljs-title, +.phpdebugbar-hljs-title.class_, +.phpdebugbar-hljs-title.class_.inherited__, +.phpdebugbar-hljs-title.function_ { + /* prettylights-syntax-entity */ + color: #6f42c1 +} +.phpdebugbar-hljs-attr, +.phpdebugbar-hljs-attribute, +.phpdebugbar-hljs-literal, +.phpdebugbar-hljs-meta, +.phpdebugbar-hljs-number, +.phpdebugbar-hljs-operator, +.phpdebugbar-hljs-variable, +.phpdebugbar-hljs-selector-attr, +.phpdebugbar-hljs-selector-class, +.phpdebugbar-hljs-selector-id { + /* prettylights-syntax-constant */ + color: #005cc5 +} +.phpdebugbar-hljs-regexp, +.phpdebugbar-hljs-string, +.phpdebugbar-hljs-meta .phpdebugbar-hljs-string { + /* prettylights-syntax-string */ + color: #032f62 +} +.phpdebugbar-hljs-built_in, +.phpdebugbar-hljs-symbol { + /* prettylights-syntax-variable */ + color: #e36209 +} +.phpdebugbar-hljs-comment, +.phpdebugbar-hljs-code, +.phpdebugbar-hljs-formula { + /* prettylights-syntax-comment */ + color: #6a737d +} +.phpdebugbar-hljs-name, +.phpdebugbar-hljs-quote, +.phpdebugbar-hljs-selector-tag, +.phpdebugbar-hljs-selector-pseudo { + /* prettylights-syntax-entity-tag */ + color: #22863a +} +.phpdebugbar-hljs-subst { + /* prettylights-syntax-storage-modifier-import */ + color: #24292e +} +.phpdebugbar-hljs-section { + /* prettylights-syntax-markup-heading */ + color: #005cc5; + font-weight: bold +} +.phpdebugbar-hljs-bullet { + /* prettylights-syntax-markup-list */ + color: #735c0f +} +.phpdebugbar-hljs-emphasis { + /* prettylights-syntax-markup-italic */ + color: #24292e; + font-style: italic +} +.phpdebugbar-hljs-strong { + /* prettylights-syntax-markup-bold */ + color: #24292e; + font-weight: bold +} +.phpdebugbar-hljs-addition { + /* prettylights-syntax-markup-inserted */ + color: #22863a; + background-color: #f0fff4 +} +.phpdebugbar-hljs-deletion { + /* prettylights-syntax-markup-deleted */ + color: #b31d28; + background-color: #ffeef0 +} +.phpdebugbar-hljs-char.escape_, +.phpdebugbar-hljs-link, +.phpdebugbar-hljs-params, +.phpdebugbar-hljs-property, +.phpdebugbar-hljs-punctuation, +.phpdebugbar-hljs-tag { + /* purposely ignored */ + +} + +/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/ +[data-theme='dark'] .phpdebugbar-hljs-doctag, +[data-theme='dark'] .phpdebugbar-hljs-keyword, +[data-theme='dark'] .phpdebugbar-hljs-meta [data-theme='dark'] .phpdebugbar-hljs-keyword, +[data-theme='dark'] .phpdebugbar-hljs-template-tag, +[data-theme='dark'] .phpdebugbar-hljs-template-variable, +[data-theme='dark'] .phpdebugbar-hljs-type, +[data-theme='dark'] .phpdebugbar-hljs-variable.language_ { + /* prettylights-syntax-keyword */ + color: #ff7b72 +} +[data-theme='dark'] .phpdebugbar-hljs-title, +[data-theme='dark'] .phpdebugbar-hljs-title.class_, +[data-theme='dark'] .phpdebugbar-hljs-title.class_.inherited__, +[data-theme='dark'] .phpdebugbar-hljs-title.function_ { + /* prettylights-syntax-entity */ + color: #d2a8ff +} +[data-theme='dark'] .phpdebugbar-hljs-attr, +[data-theme='dark'] .phpdebugbar-hljs-attribute, +[data-theme='dark'] .phpdebugbar-hljs-literal, +[data-theme='dark'] .phpdebugbar-hljs-meta, +[data-theme='dark'] .phpdebugbar-hljs-number, +[data-theme='dark'] .phpdebugbar-hljs-operator, +[data-theme='dark'] .phpdebugbar-hljs-variable, +[data-theme='dark'] .phpdebugbar-hljs-selector-attr, +[data-theme='dark'] .phpdebugbar-hljs-selector-class, +[data-theme='dark'] .phpdebugbar-hljs-selector-id { + /* prettylights-syntax-constant */ + color: #79c0ff +} +[data-theme='dark'] .phpdebugbar-hljs-regexp, +[data-theme='dark'] .phpdebugbar-hljs-string, +[data-theme='dark'] .phpdebugbar-hljs-meta [data-theme='dark'] .phpdebugbar-hljs-string { + /* prettylights-syntax-string */ + color: #a5d6ff +} +[data-theme='dark'] .phpdebugbar-hljs-built_in, +[data-theme='dark'] .phpdebugbar-hljs-symbol { + /* prettylights-syntax-variable */ + color: #ffa657 +} +[data-theme='dark'] .phpdebugbar-hljs-comment, +[data-theme='dark'] .phpdebugbar-hljs-code, +[data-theme='dark'] .phpdebugbar-hljs-formula { + /* prettylights-syntax-comment */ + color: #8b949e +} +[data-theme='dark'] .phpdebugbar-hljs-name, +[data-theme='dark'] .phpdebugbar-hljs-quote, +[data-theme='dark'] .phpdebugbar-hljs-selector-tag, +[data-theme='dark'] .phpdebugbar-hljs-selector-pseudo { + /* prettylights-syntax-entity-tag */ + color: #7ee787 +} +[data-theme='dark'] .phpdebugbar-hljs-subst { + /* prettylights-syntax-storage-modifier-import */ + color: #c9d1d9 +} +[data-theme='dark'] .phpdebugbar-hljs-section { + /* prettylights-syntax-markup-heading */ + color: #1f6feb; + font-weight: bold +} +[data-theme='dark'] .phpdebugbar-hljs-bullet { + /* prettylights-syntax-markup-list */ + color: #f2cc60 +} +[data-theme='dark'] .phpdebugbar-hljs-emphasis { + /* prettylights-syntax-markup-italic */ + color: #c9d1d9; + font-style: italic +} +[data-theme='dark'] .phpdebugbar-hljs-strong { + /* prettylights-syntax-markup-bold */ + color: #c9d1d9; + font-weight: bold +} +[data-theme='dark'] .phpdebugbar-hljs-addition { + /* prettylights-syntax-markup-inserted */ + color: #aff5b4; + background-color: #033a16 +} +[data-theme='dark'] .phpdebugbar-hljs-deletion { + /* prettylights-syntax-markup-deleted */ + color: #ffdcd7; + background-color: #67060c +} +[data-theme='dark'] .phpdebugbar-hljs-char.escape_, +[data-theme='dark'] .phpdebugbar-hljs-link, +[data-theme='dark'] .phpdebugbar-hljs-params, +[data-theme='dark'] .phpdebugbar-hljs-property, +[data-theme='dark'] .phpdebugbar-hljs-punctuation, +[data-theme='dark'] .phpdebugbar-hljs-tag { + /* purposely ignored */ + +} \ No newline at end of file diff --git a/resources/icons.css b/resources/icons.css new file mode 100644 index 000000000..2e8363824 --- /dev/null +++ b/resources/icons.css @@ -0,0 +1,246 @@ +/* Generated file - do not edit manually */ +/* Generated from Tabler Icons */ + +:root { + --debugbar-icon-adjustments: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2010a2%202%200%201%200%204%200a2%202%200%200%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M6%204v4%22%20%2F%3E%20%3Cpath%20d%3D%22M6%2012v8%22%20%2F%3E%20%3Cpath%20d%3D%22M10%2016a2%202%200%201%200%204%200a2%202%200%200%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M12%204v10%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2018v2%22%20%2F%3E%20%3Cpath%20d%3D%22M16%207a2%202%200%201%200%204%200a2%202%200%200%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M18%204v1%22%20%2F%3E%20%3Cpath%20d%3D%22M18%209v11%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-adjustments-horizontal: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M12%206a2%202%200%201%200%204%200a2%202%200%201%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206l8%200%22%20%2F%3E%20%3Cpath%20d%3D%22M16%206l4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M6%2012a2%202%200%201%200%204%200a2%202%200%201%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2012l2%200%22%20%2F%3E%20%3Cpath%20d%3D%22M10%2012l10%200%22%20%2F%3E%20%3Cpath%20d%3D%22M15%2018a2%202%200%201%200%204%200a2%202%200%201%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2018l11%200%22%20%2F%3E%20%3Cpath%20d%3D%22M19%2018l1%200%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-arrow-right: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2012l14%200%22%20%2F%3E%20%3Cpath%20d%3D%22M13%2018l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M13%206l6%206%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-arrows-left-right: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2017l-18%200%22%20%2F%3E%20%3Cpath%20d%3D%22M6%2010l-3%20-3l3%20-3%22%20%2F%3E%20%3Cpath%20d%3D%22M3%207l18%200%22%20%2F%3E%20%3Cpath%20d%3D%22M18%2020l3%20-3l-3%20-3%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-bolt: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M13%203l0%207l6%200l-8%2011l0%20-7l-6%200l8%20-11%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-bookmark: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M18%207v14l-6%20-4l-6%204v-14a4%204%200%200%201%204%20-4h4a4%204%200%200%201%204%204%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-box: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M12%203l8%204.5l0%209l-8%204.5l-8%20-4.5l0%20-9l8%20-4.5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2012l8%20-4.5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2012l0%209%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2012l-8%20-4.5%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-briefcase: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%209a2%202%200%200%201%202%20-2h14a2%202%200%200%201%202%202v9a2%202%200%200%201%20-2%202h-14a2%202%200%200%201%20-2%20-2l0%20-9%22%20%2F%3E%20%3Cpath%20d%3D%22M8%207v-2a2%202%200%200%201%202%20-2h4a2%202%200%200%201%202%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2012l0%20.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2013a20%2020%200%200%200%2018%200%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-bug: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M9%209v-1a3%203%200%200%201%206%200v1%22%20%2F%3E%20%3Cpath%20d%3D%22M8%209h8a6%206%200%200%201%201%203v3a5%205%200%200%201%20-10%200v-3a6%206%200%200%201%201%20-3%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2013l4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2013l4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2020l0%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2019l3.35%20-2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2019l-3.35%20-2%22%20%2F%3E%20%3Cpath%20d%3D%22M4%207l3.75%202.4%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207l-3.75%202.4%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-calendar: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%207a2%202%200%200%201%202%20-2h12a2%202%200%200%201%202%202v12a2%202%200%200%201%20-2%202h-12a2%202%200%200%201%20-2%20-2v-12%22%20%2F%3E%20%3Cpath%20d%3D%22M16%203v4%22%20%2F%3E%20%3Cpath%20d%3D%22M8%203v4%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2011h16%22%20%2F%3E%20%3Cpath%20d%3D%22M11%2015h1%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2015v3%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-chart-infographic: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%207a4%204%200%201%200%208%200a4%204%200%201%200%20-8%200%22%20%2F%3E%20%3Cpath%20d%3D%22M7%203v4h4%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2017l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2014l0%207%22%20%2F%3E%20%3Cpath%20d%3D%22M13%2013l0%208%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2012l0%209%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-clock: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%2018%200a9%209%200%200%200%20-18%200%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l3%203%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-code: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M7%208l-4%204l4%204%22%20%2F%3E%20%3Cpath%20d%3D%22M17%208l4%204l-4%204%22%20%2F%3E%20%3Cpath%20d%3D%22M14%204l-4%2016%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-database: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206a8%203%200%201%200%2016%200a8%203%200%201%200%20-16%200%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206v6a8%203%200%200%200%2016%200v-6%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2012v6a8%203%200%200%200%2016%200v-6%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-file-code: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M14%203v4a1%201%200%200%200%201%201h4%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2021h-10a2%202%200%200%201%20-2%20-2v-14a2%202%200%200%201%202%20-2h7l5%205v11a2%202%200%200%201%20-2%202%22%20%2F%3E%20%3Cpath%20d%3D%22M10%2013l-1%202l1%202%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2013l1%202l-1%202%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-flag: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%205a5%205%200%200%201%207%200a5%205%200%200%200%207%200v9a5%205%200%200%201%20-7%200a5%205%200%200%200%20-7%200v-9%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2021v-7%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-history: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M12%208l0%204l2%202%22%20%2F%3E%20%3Cpath%20d%3D%22M3.05%2011a9%209%200%201%201%20.5%204m-.5%205v-5h5%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-inbox: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206a2%202%200%200%201%202%20-2h12a2%202%200%200%201%202%202v12a2%202%200%200%201%20-2%202h-12a2%202%200%200%201%20-2%20-2l0%20-12%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2013h3l3%203h4l3%20-3h3%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-leaf: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2021c.5%20-4.5%202.5%20-8%207%20-10%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2018c6.218%200%2010.5%20-3.288%2011%20-12v-2h-4.014c-9%200%20-11.986%204%20-12%209c0%201%200%203%202%205h3l.014%200%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-list: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M9%206l11%200%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012l11%200%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2018l11%200%22%20%2F%3E%20%3Cpath%20d%3D%22M5%206l0%20.01%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2012l0%20.01%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2018l0%20.01%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-logs: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M4%206h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2018h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2018h2%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M8%206h2%22%20%2F%3E%20%3Cpath%20d%3D%22M14%206h6%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2012h6%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2018h6%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-mobiledata: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2012v-8%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2020v-8%22%20%2F%3E%20%3Cpath%20d%3D%22M13%207l3%20-3l3%203%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2017l3%203l3%20-3%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-search: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2010a7%207%200%201%200%2014%200a7%207%200%201%200%20-14%200%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2021l-6%20-6%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-server-cog: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%207a3%203%200%200%201%203%20-3h12a3%203%200%200%201%203%203v2a3%203%200%200%201%20-3%203h-12a3%203%200%200%201%20-3%20-3v-2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2020h-6a3%203%200%200%201%20-3%20-3v-2a3%203%200%200%201%203%20-3h10.5%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2018a2%202%200%201%200%204%200a2%202%200%201%200%20-4%200%22%20%2F%3E%20%3Cpath%20d%3D%22M18%2014.5v1.5%22%20%2F%3E%20%3Cpath%20d%3D%22M18%2020v1.5%22%20%2F%3E%20%3Cpath%20d%3D%22M21.032%2016.25l-1.299%20.75%22%20%2F%3E%20%3Cpath%20d%3D%22M16.27%2019l-1.3%20.75%22%20%2F%3E%20%3Cpath%20d%3D%22M14.97%2016.25l1.3%20.75%22%20%2F%3E%20%3Cpath%20d%3D%22M19.733%2019l1.3%20.75%22%20%2F%3E%20%3Cpath%20d%3D%22M7%208v.01%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2016v.01%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-share-3: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M13%204v4c-6.575%201.028%20-9.02%206.788%20-10%2012c-.037%20.206%205.384%20-5.962%2010%20-6v4l8%20-7l-8%20-7%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-tags: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%208v4.172a2%202%200%200%200%20.586%201.414l5.71%205.71a2.41%202.41%200%200%200%203.408%200l3.592%20-3.592a2.41%202.41%200%200%200%200%20-3.408l-5.71%20-5.71a2%202%200%200%200%20-1.414%20-.586h-4.172a2%202%200%200%200%20-2%202%22%20%2F%3E%20%3Cpath%20d%3D%22M18%2019l1.592%20-1.592a4.82%204.82%200%200%200%200%20-6.816l-4.592%20-4.592%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2010h-.01%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-x: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M18%206l-12%2012%22%20%2F%3E%20%3Cpath%20d%3D%22M6%206l12%2012%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-arrows-maximize: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M16%204l4%200l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2010l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2020l-4%200l0%20-4%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2020l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2020l4%200l0%20-4%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2014l6%206%22%20%2F%3E%20%3Cpath%20d%3D%22M8%204l-4%200l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M4%204l6%206%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-arrows-minimize: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%209l4%200l0%20-4%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203l6%206%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2015l4%200l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2021l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M19%209l-4%200l0%20-4%22%20%2F%3E%20%3Cpath%20d%3D%22M15%209l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M19%2015l-4%200l0%204%22%20%2F%3E%20%3Cpath%20d%3D%22M15%2015l6%206%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-chevron-down: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M6%209l6%206l6%20-6%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-chevron-up: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M6%2015l6%20-6l6%206%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-folder-open: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%2019l2.757%20-7.351a1%201%200%200%201%20.936%20-.649h12.307a1%201%200%200%201%20.986%201.164l-.996%205.211a2%202%200%200%201%20-1.964%201.625h-14.026a2%202%200%200%201%20-2%20-2v-11a2%202%200%200%201%202%20-2h4l3%203h7a2%202%200%200%201%202%202v2%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-brand-php: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%221.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012a10%209%200%201%200%2020%200a10%209%200%201%200%20-20%200%22%20%2F%3E%20%3Cpath%20d%3D%22M5.5%2015l.395%20-1.974l.605%20-3.026h1.32a1%201%200%200%201%20.986%201.164l-.167%201a1%201%200%200%201%20-.986%20.836h-1.653%22%20%2F%3E%20%3Cpath%20d%3D%22M15.5%2015l.395%20-1.974l.605%20-3.026h1.32a1%201%200%200%201%20.986%201.164l-.167%201a1%201%200%200%201%20-.986%20.836h-1.653%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207.5l-1%205.5%22%20%2F%3E%20%3Cpath%20d%3D%22M11.6%2010h2.4l-.5%203%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-refresh: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2011a8.1%208.1%200%200%200%20-15.5%20-2m-.5%20-4v4h4%22%20%2F%3E%20%3Cpath%20d%3D%22M4%2013a8.1%208.1%200%200%200%2015.5%202m.5%204v-4h-4%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-cpu: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M5%206a1%201%200%200%201%201%20-1h12a1%201%200%200%201%201%201v12a1%201%200%200%201%20-1%201h-12a1%201%200%200%201%20-1%20-1l0%20-12%22%20%2F%3E%20%3Cpath%20d%3D%22M9%209h6v6h-6l0%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2010h2%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2014h2%22%20%2F%3E%20%3Cpath%20d%3D%22M10%203v2%22%20%2F%3E%20%3Cpath%20d%3D%22M14%203v2%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2010h-2%22%20%2F%3E%20%3Cpath%20d%3D%22M21%2014h-2%22%20%2F%3E%20%3Cpath%20d%3D%22M14%2021v-2%22%20%2F%3E%20%3Cpath%20d%3D%22M10%2021v-2%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-table: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%205a2%202%200%200%201%202%20-2h14a2%202%200%200%201%202%202v14a2%202%200%200%201%20-2%202h-14a2%202%200%200%201%20-2%20-2v-14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2010h18%22%20%2F%3E%20%3Cpath%20d%3D%22M10%203v18%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-link: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2015l6%20-6%22%20%2F%3E%20%3Cpath%20d%3D%22M11%206l.463%20-.536a5%205%200%200%201%207.071%207.072l-.534%20.464%22%20%2F%3E%20%3Cpath%20d%3D%22M13%2018l-.397%20.534a5.068%205.068%200%200%201%20-7.127%200a4.972%204.972%200%200%201%200%20-7.071l.524%20-.463%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-copy: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M7%209.667a2.667%202.667%200%200%201%202.667%20-2.667h8.666a2.667%202.667%200%200%201%202.667%202.667v8.666a2.667%202.667%200%200%201%20-2.667%202.667h-8.666a2.667%202.667%200%200%201%20-2.667%20-2.667l0%20-8.666%22%20%2F%3E%20%3Cpath%20d%3D%22M4.012%2016.737a2.005%202.005%200%200%201%20-1.012%20-1.737v-10c0%20-1.1%20.9%20-2%202%20-2h10c.75%200%201.158%20.385%201.5%201%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-circle-check: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%2018%200a9%209%200%201%200%20-18%200%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012l2%202l4%20-4%22%20%2F%3E%20%3C%2Fsvg%3E'); + --debugbar-icon-external-link: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%20%2F%3E%20%3Cpath%20d%3D%22M12%206h-6a2%202%200%200%200%20-2%202v10a2%202%200%200%200%202%202h10a2%202%200%200%200%202%20-2v-6%22%20%2F%3E%20%3Cpath%20d%3D%22M11%2013l9%20-9%22%20%2F%3E%20%3Cpath%20d%3D%22M15%204h5v5%22%20%2F%3E%20%3C%2Fsvg%3E'); +} + +.phpdebugbar-icon-adjustments::before { + -webkit-mask-image: var(--debugbar-icon-adjustments); + mask-image: var(--debugbar-icon-adjustments); +} + +.phpdebugbar-icon-adjustments-horizontal::before { + -webkit-mask-image: var(--debugbar-icon-adjustments-horizontal); + mask-image: var(--debugbar-icon-adjustments-horizontal); +} + +.phpdebugbar-icon-arrow-right::before { + -webkit-mask-image: var(--debugbar-icon-arrow-right); + mask-image: var(--debugbar-icon-arrow-right); +} + +.phpdebugbar-icon-arrows-left-right::before { + -webkit-mask-image: var(--debugbar-icon-arrows-left-right); + mask-image: var(--debugbar-icon-arrows-left-right); +} + +.phpdebugbar-icon-bolt::before { + -webkit-mask-image: var(--debugbar-icon-bolt); + mask-image: var(--debugbar-icon-bolt); +} + +.phpdebugbar-icon-bookmark::before { + -webkit-mask-image: var(--debugbar-icon-bookmark); + mask-image: var(--debugbar-icon-bookmark); +} + +.phpdebugbar-icon-box::before { + -webkit-mask-image: var(--debugbar-icon-box); + mask-image: var(--debugbar-icon-box); +} + +.phpdebugbar-icon-briefcase::before { + -webkit-mask-image: var(--debugbar-icon-briefcase); + mask-image: var(--debugbar-icon-briefcase); +} + +.phpdebugbar-icon-bug::before { + -webkit-mask-image: var(--debugbar-icon-bug); + mask-image: var(--debugbar-icon-bug); +} + +.phpdebugbar-icon-calendar::before { + -webkit-mask-image: var(--debugbar-icon-calendar); + mask-image: var(--debugbar-icon-calendar); +} + +.phpdebugbar-icon-chart-infographic::before { + -webkit-mask-image: var(--debugbar-icon-chart-infographic); + mask-image: var(--debugbar-icon-chart-infographic); +} + +.phpdebugbar-icon-clock::before { + -webkit-mask-image: var(--debugbar-icon-clock); + mask-image: var(--debugbar-icon-clock); +} + +.phpdebugbar-icon-code::before { + -webkit-mask-image: var(--debugbar-icon-code); + mask-image: var(--debugbar-icon-code); +} + +.phpdebugbar-icon-database::before { + -webkit-mask-image: var(--debugbar-icon-database); + mask-image: var(--debugbar-icon-database); +} + +.phpdebugbar-icon-file-code::before { + -webkit-mask-image: var(--debugbar-icon-file-code); + mask-image: var(--debugbar-icon-file-code); +} + +.phpdebugbar-icon-flag::before { + -webkit-mask-image: var(--debugbar-icon-flag); + mask-image: var(--debugbar-icon-flag); +} + +.phpdebugbar-icon-history::before { + -webkit-mask-image: var(--debugbar-icon-history); + mask-image: var(--debugbar-icon-history); +} + +.phpdebugbar-icon-inbox::before { + -webkit-mask-image: var(--debugbar-icon-inbox); + mask-image: var(--debugbar-icon-inbox); +} + +.phpdebugbar-icon-leaf::before { + -webkit-mask-image: var(--debugbar-icon-leaf); + mask-image: var(--debugbar-icon-leaf); +} + +.phpdebugbar-icon-list::before { + -webkit-mask-image: var(--debugbar-icon-list); + mask-image: var(--debugbar-icon-list); +} + +.phpdebugbar-icon-logs::before { + -webkit-mask-image: var(--debugbar-icon-logs); + mask-image: var(--debugbar-icon-logs); +} + +.phpdebugbar-icon-mobiledata::before { + -webkit-mask-image: var(--debugbar-icon-mobiledata); + mask-image: var(--debugbar-icon-mobiledata); +} + +.phpdebugbar-icon-search::before { + -webkit-mask-image: var(--debugbar-icon-search); + mask-image: var(--debugbar-icon-search); +} + +.phpdebugbar-icon-server-cog::before { + -webkit-mask-image: var(--debugbar-icon-server-cog); + mask-image: var(--debugbar-icon-server-cog); +} + +.phpdebugbar-icon-share-3::before { + -webkit-mask-image: var(--debugbar-icon-share-3); + mask-image: var(--debugbar-icon-share-3); +} + +.phpdebugbar-icon-tags::before { + -webkit-mask-image: var(--debugbar-icon-tags); + mask-image: var(--debugbar-icon-tags); +} + +.phpdebugbar-icon-x::before { + -webkit-mask-image: var(--debugbar-icon-x); + mask-image: var(--debugbar-icon-x); +} + +.phpdebugbar-icon-arrows-maximize::before { + -webkit-mask-image: var(--debugbar-icon-arrows-maximize); + mask-image: var(--debugbar-icon-arrows-maximize); +} + +.phpdebugbar-icon-arrows-minimize::before { + -webkit-mask-image: var(--debugbar-icon-arrows-minimize); + mask-image: var(--debugbar-icon-arrows-minimize); +} + +.phpdebugbar-icon-chevron-down::before { + -webkit-mask-image: var(--debugbar-icon-chevron-down); + mask-image: var(--debugbar-icon-chevron-down); +} + +.phpdebugbar-icon-chevron-up::before { + -webkit-mask-image: var(--debugbar-icon-chevron-up); + mask-image: var(--debugbar-icon-chevron-up); +} + +.phpdebugbar-icon-folder-open::before { + -webkit-mask-image: var(--debugbar-icon-folder-open); + mask-image: var(--debugbar-icon-folder-open); +} + +.phpdebugbar-icon-brand-php::before { + -webkit-mask-image: var(--debugbar-icon-brand-php); + mask-image: var(--debugbar-icon-brand-php); +} + +.phpdebugbar-icon-refresh::before { + -webkit-mask-image: var(--debugbar-icon-refresh); + mask-image: var(--debugbar-icon-refresh); +} + +.phpdebugbar-icon-cpu::before { + -webkit-mask-image: var(--debugbar-icon-cpu); + mask-image: var(--debugbar-icon-cpu); +} + +.phpdebugbar-icon-table::before { + -webkit-mask-image: var(--debugbar-icon-table); + mask-image: var(--debugbar-icon-table); +} + +.phpdebugbar-icon-link::before { + -webkit-mask-image: var(--debugbar-icon-link); + mask-image: var(--debugbar-icon-link); +} + +.phpdebugbar-icon-copy::before { + -webkit-mask-image: var(--debugbar-icon-copy); + mask-image: var(--debugbar-icon-copy); +} + +.phpdebugbar-icon-circle-check::before { + -webkit-mask-image: var(--debugbar-icon-circle-check); + mask-image: var(--debugbar-icon-circle-check); +} + +.phpdebugbar-icon-external-link::before { + -webkit-mask-image: var(--debugbar-icon-external-link); + mask-image: var(--debugbar-icon-external-link); +} + diff --git a/resources/openhandler.css b/resources/openhandler.css new file mode 100644 index 000000000..cb50af0af --- /dev/null +++ b/resources/openhandler.css @@ -0,0 +1,147 @@ +div.phpdebugbar-openhandler-overlay { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: #000; + opacity: .3; + z-index: 100000002; +} + +div.phpdebugbar-openhandler { + position: fixed; + margin: auto; + top: 0; + bottom: 0; + left: 0; + right: 0; + width: 80%; + height: 70%; + background: var(--debugbar-background); + color: var(--debugbar-text); + border: 2px solid var(--debugbar-header-border); + overflow: auto; + z-index: 100000003; + font-family: var(--debugbar-font-sans); + font-size: 14px; + padding: 0; +} + div.phpdebugbar-openhandler select, div.phpdebugbar-openhandler input { + appearance: auto; + } + + div.phpdebugbar-openhandler input, div.phpdebugbar-openhandler select { + color: var(--debugbar-header-text); + background-color: var(--debugbar-header); + border: 1px solid var(--debugbar-header-border); + border-radius: 0.25rem; + height: 20px; + margin: 0 5px; + padding: 0; + } + + div.phpdebugbar-openhandler .phpdebugbar-openhandler-actions input[name="uri"] { + width: 200px; + } + + div.phpdebugbar-openhandler .phpdebugbar-openhandler-actions input[name="ip"] { + width: 90px; + } + div.phpdebugbar-openhandler a { + color: var(--debugbar-header-text); + } + div.phpdebugbar-openhandler .phpdebugbar-openhandler-header { + background: var(--debugbar-header) no-repeat 5px 4px; + color: var(--debugbar-header-text); + margin-bottom: 10px; + display: flex; + align-items: center; + padding: 5px 8px; + } + div.phpdebugbar-openhandler .phpdebugbar-openhandler-header .phpdebugbar-openhandler-closebtn, + div.phpdebugbar-openhandler .phpdebugbar-openhandler-header .phpdebugbar-openhandler-brand + { + font-size: 14px; + color: var(--debugbar-header-text); + text-decoration: none; + padding-right: 5px; + line-height: 1; + align-items: center; + } + div.phpdebugbar-openhandler .phpdebugbar-openhandler-header .phpdebugbar-openhandler-closebtn + { + margin-left: auto; + } + div.phpdebugbar-openhandler table { + width: 100%; + table-layout: fixed; + font-size: 14px; + } + div.phpdebugbar-openhandler table td, + div.phpdebugbar-openhandler table th { + border: 0px solid var(--debugbar-border); + padding: 2px 8px; + } + div.phpdebugbar-openhandler table th, + div.phpdebugbar-openhandler table tr:nth-child(2n) { + background-color: var(--debugbar-background-alt); + } + div.phpdebugbar-openhandler table th:nth-child(3), div.phpdebugbar-openhandler table td:nth-child(3), /* Method */ + div.phpdebugbar-openhandler table th:nth-child(5), div.phpdebugbar-openhandler table td:nth-child(5), /* IP */ + div.phpdebugbar-openhandler table th:nth-child(6), div.phpdebugbar-openhandler table td:nth-child(6) { /* Filter */ + text-align: center; + } + div.phpdebugbar-openhandler table td { + padding: 6px 3px; + border-bottom: 1px solid var(--debugbar-border); + } + div.phpdebugbar-openhandler table td a{ + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .phpdebugbar-openhandler-id-cell { + display: flex; + align-items: center; + gap: 4px; + } + .phpdebugbar-openhandler-id-text { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 55px; + display: inline-block; + font-family: var(--debugbar-font-mono); + font-size: 12px; + } + .phpdebugbar-openhandler-copy-id { + cursor: pointer; + color: var(--debugbar-text-muted); + display: inline-flex; + align-items: center; + position: relative; + flex-shrink: 0; + } + .phpdebugbar-openhandler-copy-id i { + font-size: 12px; + } + .phpdebugbar-openhandler-copy-id:hover { + color: var(--debugbar-text); + } + .phpdebugbar-openhandler-copy-id.phpdebugbar-openhandler-copied { + color: var(--debugbar-success, #28a745); + } + div.phpdebugbar-openhandler .phpdebugbar-openhandler-actions { + text-align: center; + padding: 7px 0; + } + div.phpdebugbar-openhandler .phpdebugbar-openhandler-actions a { + color: var(--debugbar-header-text); + background-color: var(--debugbar-header); + border: 1px solid var(--debugbar-header-border); + border-radius: 0.25rem; + margin: 5px; + padding: 4px 12px 4px; + } diff --git a/resources/openhandler.js b/resources/openhandler.js new file mode 100644 index 000000000..767c44291 --- /dev/null +++ b/resources/openhandler.js @@ -0,0 +1,303 @@ +(function () { + const csscls = function (cls) { + return PhpDebugBar.utils.csscls(cls, 'phpdebugbar-openhandler-'); + }; + + PhpDebugBar.OpenHandler = PhpDebugBar.Widget.extend({ + + className: 'phpdebugbar-openhandler', + + defaults: { + items_per_page: 20 + }, + + render() { + const self = this; + + document.body.append(this.el); + this.el.style.display = 'none'; + + this.closebtn = document.createElement('a'); + this.closebtn.classList.add(csscls('closebtn')); + this.closebtn.innerHTML = ''; + + this.brand = document.createElement('span'); + this.brand.classList.add(csscls('brand')); + this.brand.innerHTML = ''; + + this.table = document.createElement('tbody'); + + const header = document.createElement('div'); + header.classList.add(csscls('header')); + header.textContent = 'PHP DebugBar | Open'; + header.prepend(this.brand); + header.append(this.closebtn); + + this.el.append(header); + + const tableWrapper = document.createElement('table'); + tableWrapper.innerHTML = 'IDDateMethodURLIPFilter data'; + tableWrapper.append(this.table); + this.el.append(tableWrapper); + + this.actions = document.createElement('div'); + this.actions.classList.add(csscls('actions')); + this.el.append(this.actions); + + this.closebtn.addEventListener('click', () => { + self.hide(); + }); + + this.loadmorebtn = document.createElement('a'); + this.loadmorebtn.textContent = 'Load more'; + this.actions.append(this.loadmorebtn); + this.loadmorebtn.addEventListener('click', () => { + self.find(self.last_find_request, self.last_find_request.offset + self.get('items_per_page'), self.handleFind.bind(self)); + }); + + this.showonlycurrentbtn = document.createElement('a'); + this.showonlycurrentbtn.textContent = 'Show only current URL'; + this.actions.append(this.showonlycurrentbtn); + this.showonlycurrentbtn.addEventListener('click', () => { + self.uriInput.value = window.location.pathname; + self.searchBtn.click(); + }); + + this.refreshbtn = document.createElement('a'); + this.refreshbtn.textContent = 'Refresh'; + this.actions.append(this.refreshbtn); + this.refreshbtn.addEventListener('click', () => { + self.refresh(); + }); + + this.clearbtn = document.createElement('a'); + this.clearbtn.textContent = 'Clear storage'; + this.actions.append(this.clearbtn); + this.clearbtn.addEventListener('click', () => { + self.clear(() => { + self.hide(); + }); + }); + + this.addSearch(); + + this.overlay = document.createElement('div'); + this.overlay.classList.add(csscls('overlay')); + this.overlay.style.display = 'none'; + document.body.append(this.overlay); + this.overlay.addEventListener('click', () => { + self.hide(); + }); + }, + + refresh() { + this.table.innerHTML = ''; + this.loadmorebtn.style.display = ''; + this.find({}, 0, this.handleFind.bind(this)); + }, + + addSearch() { + const self = this; + + const searchBtn = this.searchBtn = document.createElement('button'); + searchBtn.textContent = 'Search'; + searchBtn.type = 'submit'; + searchBtn.addEventListener('click', function (e) { + self.table.innerHTML = ''; + const search = {}; + const formData = new FormData(this.parentElement); + for (const [name, value] of formData.entries()) { + if (value) { + search[name] = value; + } + } + + self.find(search, 0, self.handleFind.bind(self)); + e.preventDefault(); + }); + + const form = document.createElement('form'); + form.innerHTML = '
Filter results
' + + ''; + + this.uriInput = document.createElement('input'); + this.uriInput.type = 'text'; + this.uriInput.name = 'uri'; + this.uriInput.placeholder = "URI, eg '/user/*'"; + form.append(this.uriInput); + + this.ipInput = document.createElement('input'); + this.ipInput.type = 'text'; + this.ipInput.name = 'ip'; + this.ipInput.placeholder = 'IP'; + form.append(this.ipInput); + + const resetBtn = document.createElement('button'); + resetBtn.textContent = 'Reset'; + resetBtn.type = 'button'; + resetBtn.addEventListener('click', () => { + form.reset(); + searchBtn.click(); + }); + form.append(searchBtn); + form.append(resetBtn); + this.actions.append(form); + }, + + handleFind(data) { + const self = this; + for (const meta of data) { + const loadLink = document.createElement('a'); + loadLink.textContent = 'Load dataset'; + loadLink.addEventListener('click', (e) => { + self.hide(); + self.load(meta.id, (data) => { + self.callback(meta.id, data); + }); + e.preventDefault(); + }); + + const methodLink = document.createElement('a'); + methodLink.textContent = meta.method; + methodLink.addEventListener('click', (e) => { + self.table.innerHTML = ''; + self.find({ method: meta.method }, 0, self.handleFind.bind(self)); + e.preventDefault(); + }); + + const uriLink = document.createElement('a'); + uriLink.textContent = meta.uri; + uriLink.addEventListener('click', (e) => { + self.hide(); + self.load(meta.id, (data) => { + self.callback(meta.id, data); + }); + e.preventDefault(); + }); + + const ipLink = document.createElement('a'); + ipLink.textContent = meta.ip; + ipLink.addEventListener('click', (e) => { + self.ipInput.value = meta.ip; + self.searchBtn.click(); + e.preventDefault(); + }); + + const searchLink = document.createElement('a'); + searchLink.textContent = 'Show URL'; + searchLink.addEventListener('click', (e) => { + self.uriInput.value = meta.uri; + self.searchBtn.click(); + e.preventDefault(); + }); + + const tr = document.createElement('tr'); + + const idTd = document.createElement('td'); + idTd.classList.add(csscls('id-cell')); + const idText = document.createElement('span'); + idText.classList.add(csscls('id-text')); + idText.textContent = meta.id; + idText.title = meta.id; + idTd.append(idText); + + const copyIdBtn = document.createElement('a'); + copyIdBtn.classList.add(csscls('copy-id')); + copyIdBtn.title = 'Copy Request ID'; + copyIdBtn.innerHTML = ''; + copyIdBtn.addEventListener('click', (e) => { + e.stopPropagation(); + e.preventDefault(); + const tmp = document.createElement('textarea'); + tmp.value = meta.id; + tmp.style.position = 'fixed'; + tmp.style.opacity = '0'; + document.body.append(tmp); + tmp.select(); + document.execCommand('copy'); + tmp.remove(); + const icon = copyIdBtn.querySelector('i'); + icon.className = 'phpdebugbar-icon phpdebugbar-icon-circle-check'; + copyIdBtn.classList.add(csscls('copied')); + setTimeout(() => { + icon.className = 'phpdebugbar-icon phpdebugbar-icon-copy'; + copyIdBtn.classList.remove(csscls('copied')); + }, 2000); + }); + idTd.append(copyIdBtn); + tr.append(idTd); + + const datetimeTd = document.createElement('td'); + datetimeTd.textContent = meta.datetime; + tr.append(datetimeTd); + + const methodTd = document.createElement('td'); + methodTd.textContent = meta.method; + tr.append(methodTd); + + const uriTd = document.createElement('td'); + uriTd.append(uriLink); + tr.append(uriTd); + + const ipTd = document.createElement('td'); + ipTd.append(ipLink); + tr.append(ipTd); + + const searchTd = document.createElement('td'); + searchTd.append(searchLink); + tr.append(searchTd); + + self.table.append(tr); + } + if (data.length < this.get('items_per_page')) { + this.loadmorebtn.style.display = 'none'; + } + }, + + show(callback) { + this.callback = callback; + this.el.style.display = 'block'; + this.overlay.style.display = 'block'; + this.refresh(); + }, + + hide() { + this.el.style.display = 'none'; + this.overlay.style.display = 'none'; + }, + + find(filters, offset, callback) { + const data = Object.assign({ op: 'find' }, filters, { max: this.get('items_per_page'), offset: offset || 0 }); + this.last_find_request = data; + this.ajax(data, callback); + }, + + load(id, callback) { + this.ajax({ op: 'get', id }, callback); + }, + + clear(callback) { + this.ajax({ op: 'clear' }, callback); + }, + + ajax(data, callback) { + let url = this.get('url'); + if (data) { + url = url + (url.includes('?') ? '&' : '?') + new URLSearchParams(data); + } + + fetch(url, { + method: 'GET', + headers: { + Accept: 'application/json' + } + }) + .then(data => data.json()) + .then(callback) + .catch((err) => { + callback(null, err); + }); + } + + }); +})(); diff --git a/resources/vardumper.css b/resources/vardumper.css new file mode 100644 index 000000000..2a23584f9 --- /dev/null +++ b/resources/vardumper.css @@ -0,0 +1,158 @@ +/* + * This file is based on the Symfony VarDumper package: https://github.com/symfony/var-dumper/blob/8.1/Dumper/HtmlDumper.php + * + * (c) Fabien Potencier + * + * For the full copyright and license information, please view the LICENSE: https://github.com/symfony/var-dumper/blob/8.1/LICENSE + * file that was distributed with this source code. + */ + +.phpdebugbar pre.sf-dump .sf-dump-compact { + display: none; +} + +.phpdebugbar pre.sf-dump { + display: block; + white-space: pre; + padding: 5px; + overflow: initial !important; +} + +.phpdebugbar pre.sf-dump a { + text-decoration: none; + cursor: pointer; + border: 0; + outline: none; + color: inherit; +} + +.phpdebugbar pre.sf-dump, .phpdebugbar pre.sf-dump .sf-dump-default { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal +} + +.phpdebugbar pre.sf-dump .sf-dump-num { + font-weight: bold; + color: #1299DA +} + +.phpdebugbar pre.sf-dump .sf-dump-const { + font-weight: bold +} + +.phpdebugbar pre.sf-dump .sf-dump-str { + font-weight: bold; + color: #3A9B26 +} + +.phpdebugbar pre.sf-dump .sf-dump-note { + color: #1299DA +} + +.phpdebugbar pre.sf-dump .sf-dump-ref { + color: #7B7B7B +} + +.phpdebugbar pre.sf-dump .sf-dump-public { + color: #000000 +} + +.phpdebugbar pre.sf-dump .sf-dump-protected { + color: #000000 +} + +.phpdebugbar pre.sf-dump .sf-dump-private { + color: #000000 +} + +.phpdebugbar pre.sf-dump .sf-dump-meta { + color: #B729D9 +} + +.phpdebugbar pre.sf-dump .sf-dump-key { + color: #3A9B26 +} + +.phpdebugbar pre.sf-dump .sf-dump-index { + color: #1299DA +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump, pre.sf-dump .sf-dump-default { + background-color: #18171B; + color: #FF8400; + line-height: 1.2em; + font: 12px Menlo, Monaco, Consolas, monospace; + word-wrap: break-word; + white-space: pre-wrap; + position: relative; + z-index: 99999; + word-break: break-all +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-num { + font-weight: bold; + color: #1299DA +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-const { + font-weight: bold +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-str { + font-weight: bold; + color: #56DB3A +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-note { + color: #1299DA +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-ref { + color: #A0A0A0 +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-public { + color: #FFFFFF +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-protected { + color: #FFFFFF +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-private { + color: #FFFFFF +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-meta { + color: #B729D9 +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-key { + color: #56DB3A +} + +.phpdebugbar[data-theme='dark'] pre.sf-dump .sf-dump-index { + color: #1299DA +} + +.phpdebugbar pre.sf-dump samp { + display: block; + padding-left: 2ch +} + +.phpdebugbar pre.sf-dump .sf-dump-preview { + opacity: .6; + cursor: pointer; + display: inline-block; + max-width: 80%; + vertical-align: top; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin-left: .4em +} + +.phpdebugbar pre.sf-dump .sf-dump-hidden { + display: none !important +} diff --git a/resources/vardumper.js b/resources/vardumper.js new file mode 100644 index 000000000..a0da94d42 --- /dev/null +++ b/resources/vardumper.js @@ -0,0 +1,315 @@ +(function () { + const csscls = PhpDebugBar.utils.makecsscls('phpdebugbar-widgets-'); + + const lazyStore = new Map(); + let lazySeq = 0; + const escMap = { '&': '&', '<': '<', '>': '>', '"': '"' }; + const escRe = /[&<>"]/g; + + /** + * Renders JSON variable dumps as interactive HTML trees. + * + * Handles three value types: + * - Scalars/strings: rendered inline with syntax coloring + * - Arrays (plain JSON): rendered as collapsible [ ] trees + * - Objects/resources (_vd metadata): rendered as collapsible { } trees with visibility + * + * Collapsed nodes are lazy-rendered on first expand. + */ + class VarDumpRenderer { + constructor(options) { + this.expandedDepth = (options && options.expandedDepth !== undefined) ? options.expandedDepth : 0; + } + + render(value) { + const pre = document.createElement('pre'); + pre.className = 'sf-dump'; + const savedDepth = this.expandedDepth; + this.expandedDepth = 0; + pre.innerHTML = this.toHtml(value, 0) + '\n'; + this.expandedDepth = savedDepth; + return pre; + } + + // ── Main dispatcher ────────────────────────────────────────── + + toHtml(value, depth) { + if (value === null) return 'null'; + switch (typeof value) { + case 'boolean': + return '' + value + ''; + case 'number': + return '' + this.esc(String(value)) + ''; + case 'string': + return '"' + this.esc(value) + '"'; + case 'object': + return this.containerToHtml(value, depth); + default: + return this.esc(String(value)); + } + } + + containerToHtml(value, depth) { + const isIndexed = Array.isArray(value); + const vd = !isIndexed && value._vd; + const cut = !isIndexed && value._cut || 0; + const keys = isIndexed ? null : Object.keys(value); + // Filter meta keys for non-indexed β€” inline to avoid allocation when no meta + const propKeys = !isIndexed && (vd || cut) ? keys.filter(k => k !== '_vd' && k !== '_cut') : keys; + const len = isIndexed ? value.length : propKeys.length; + const total = len + cut; + + if (vd) return this.objectToHtml(value, propKeys, vd, cut, total, depth); + return this.arrayToHtml(value, isIndexed, propKeys, cut, total, depth); + } + + // ── Array rendering ────────────────────────────────────────── + + arrayToHtml(value, isIndexed, keys, cut, total, depth) { + if (total === 0) return '[]'; + + const expanded = depth < this.expandedDepth; + let html = 'array:' + total + ' ['; + html += '' + (expanded ? 'β–Ό' : 'β–Ά') + ''; + + // Preview + html += ' '; + html += this.arrayPreview(value, isIndexed, keys, cut) + ' ]'; + + if (expanded) { + html += ''; + html += this.arrayChildren(value, isIndexed, keys, cut, depth); + html += ''; + } else { + const id = ++lazySeq; + lazyStore.set(id, { v: value, arr: isIndexed, k: keys, c: cut, d: depth, r: this, ed: this.expandedDepth }); + html += ''; + } + html += ']'; + return html; + } + + arrayPreview(value, isIndexed, keys, cut) { + const len = isIndexed ? value.length : keys.length; + const max = Math.min(len, 8); + const parts = []; + for (let i = 0; i < max; i++) { + const k = isIndexed ? i : keys[i]; + const v = isIndexed ? value[i] : value[keys[i]]; + parts.push(isIndexed ? this.previewValue(v) : this.esc(String(k)) + ': ' + this.previewValue(v)); + } + let result = parts.join(', '); + if (len > max || cut > 0) result += ', …'; + return result; + } + + arrayChildren(value, isIndexed, keys, cut, depth) { + const len = isIndexed ? value.length : keys.length; + let html = ''; + for (let i = 0; i < len; i++) { + if (i > 0) html += '\n'; + if (isIndexed) { + html += '' + i + ' => '; + html += this.toHtml(value[i], depth + 1); + } else { + html += '"' + this.esc(keys[i]) + '" => '; + html += this.toHtml(value[keys[i]], depth + 1); + } + } + if (cut > 0) html += '\n…' + cut; + return html; + } + + // ── Object/resource rendering ──────────────────────────────── + + objectToHtml(value, keys, vd, cut, total, depth) { + const ref = vd[1] || 0; + const cls = vd[2] || null; + const prefixes = vd[3] || null; + const isResource = (vd[0] === 5); + + if (total === 0 && !ref) return (cls ? this.esc(cls) + ' ' : '') + '{}'; + + const expanded = depth < this.expandedDepth; + let html = ''; + let refHtml = ''; + + if (isResource) { + html += '' + this.esc(cls || 'resource') + ' {'; + } else { + if (cls) html += '' + this.esc(cls) + ' '; + html += '{'; + if (ref) refHtml = '#' + ref + ' '; + } + + if (total === 0) return html + refHtml + '}'; + + html += '' + refHtml + '' + (expanded ? 'β–Ό' : 'β–Ά') + ''; + + // Preview + html += ' '; + const max = Math.min(keys.length, 8); + const parts = []; + for (let i = 0; i < max; i++) { + parts.push(this.esc(keys[i]) + ': ' + this.previewValue(value[keys[i]])); + } + let preview = parts.join(', '); + if (keys.length > max || cut > 0) preview += ', …'; + html += preview + ' }'; + + if (expanded) { + html += ''; + html += this.objectChildren(value, keys, prefixes, cut, depth); + html += ''; + } else { + const id = ++lazySeq; + lazyStore.set(id, { v: value, obj: true, k: keys, p: prefixes, c: cut, d: depth, r: this, ed: this.expandedDepth }); + html += ''; + } + html += '}'; + return html; + } + + objectChildren(value, keys, prefixes, cut, depth) { + let html = ''; + for (let i = 0; i < keys.length; i++) { + if (i > 0) html += '\n'; + const p = prefixes ? prefixes[i] : null; + const k = this.esc(keys[i]); + if (!p) { + html += '+' + k + ': '; + } else if (p === '+') { + html += '+"' + k + '": '; + } else if (p === '~') { + html += '' + k + ': '; + } else if (p === '*') { + html += '#' + k + ': '; + } else { + html += '-' + k + ': '; + } + html += this.toHtml(value[keys[i]], depth + 1); + } + if (cut > 0) html += '\n…' + cut; + return html; + } + + // ── Preview (collapsed inline summary) ────────────────────── + + previewValue(v) { + if (v === null) return 'null'; + if (typeof v === 'string') return '"' + this.esc(v.length > 40 ? v.substring(0, 40) + '…' : v) + '"'; + if (typeof v === 'boolean') return String(v); + if (typeof v === 'number') return String(v); + if (typeof v === 'object') { + if (v._vd) return (v._vd[2] || '') + ' {…}'; + return Array.isArray(v) ? '[…]' : '{…}'; + } + return '…'; + } + + // ── Utilities ──────────────────────────────────────────────── + + esc(s) { + return String(s).replace(escRe, m => escMap[m]); + } + } + PhpDebugBar.Widgets.VarDumpRenderer = VarDumpRenderer; + + // ── Lazy expand ────────────────────────────────────────────────── + + function expandLazy(samp) { + const id = +samp.dataset.lazy; + delete samp.dataset.lazy; + + const data = lazyStore.get(id); + if (!data) return; + lazyStore.delete(id); + + const renderer = data.r; + const savedDepth = renderer.expandedDepth; + renderer.expandedDepth = data.ed; + + if (data.obj) { + samp.innerHTML = renderer.objectChildren(data.v, data.k, data.p, data.c, data.d); + } else { + samp.innerHTML = renderer.arrayChildren(data.v, data.arr, data.k, data.c, data.d); + } + + renderer.expandedDepth = savedDepth; + } + + // ── Toggle expand/collapse ─────────────────────────────────────── + + function togglePreview(samp, expanding) { + const preview = samp.previousElementSibling; + const close = samp.nextElementSibling; + if (preview) preview.classList.toggle('sf-dump-hidden', expanding); + if (close) close.classList.toggle('sf-dump-hidden', !expanding); + } + + document.addEventListener('click', function (e) { + const toggle = e.target.closest('a.sf-dump-toggle') || e.target.closest('.sf-dump-preview')?.previousElementSibling; + if (!toggle) return; + + const pre = toggle.closest('pre.sf-dump'); + if (!pre || pre.id) return; + + const samp = toggle.nextElementSibling?.nextElementSibling; + if (!samp || samp.tagName !== 'SAMP') return; + + e.preventDefault(); + const isCompact = samp.classList.contains('sf-dump-compact'); + + if (isCompact && samp.dataset.lazy) expandLazy(samp); + + if (e.ctrlKey || e.metaKey) { + if (isCompact) { + let pending; + while ((pending = samp.querySelectorAll('[data-lazy]')).length) { + pending.forEach(expandLazy); + } + samp.querySelectorAll('samp.sf-dump-compact').forEach(function (s) { + s.classList.replace('sf-dump-compact', 'sf-dump-expanded'); + const t = s.previousElementSibling?.previousElementSibling; + if (t && t.classList.contains('sf-dump-toggle')) t.lastElementChild.textContent = 'β–Ό'; + togglePreview(s, true); + }); + } else { + samp.querySelectorAll('samp.sf-dump-expanded').forEach(function (s) { + s.classList.replace('sf-dump-expanded', 'sf-dump-compact'); + const t = s.previousElementSibling?.previousElementSibling; + if (t && t.classList.contains('sf-dump-toggle')) t.lastElementChild.textContent = 'β–Ά'; + togglePreview(s, false); + }); + } + } + + samp.classList.toggle('sf-dump-compact', !isCompact); + samp.classList.toggle('sf-dump-expanded', isCompact); + toggle.lastElementChild.textContent = isCompact ? 'β–Ό' : 'β–Ά'; + togglePreview(samp, isCompact); + }); + + // ── JsonVariableListWidget ─────────────────────────────────────── + + class JsonVariableListWidget extends PhpDebugBar.Widgets.KVListWidget { + get className() { + return csscls('kvlist jsonvarlist'); + } + + itemRenderer(dt, dd, key, value) { + const span = document.createElement('span'); + span.setAttribute('title', key); + span.textContent = key; + dt.appendChild(span); + + const rawValue = (value && value.value !== undefined) ? value.value : value; + PhpDebugBar.Widgets.renderValueInto(dd, rawValue); + + if (value && value.xdebug_link) { + dd.appendChild(PhpDebugBar.Widgets.editorLink(value.xdebug_link)); + } + } + } + PhpDebugBar.Widgets.JsonVariableListWidget = JsonVariableListWidget; +})(); diff --git a/resources/vendor/highlightjs/highlight.pack.js b/resources/vendor/highlightjs/highlight.pack.js new file mode 100644 index 000000000..414688994 --- /dev/null +++ b/resources/vendor/highlightjs/highlight.pack.js @@ -0,0 +1,4 @@ +(()=>{var mt=Object.create;var Ae=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var wt=Object.getPrototypeOf,xt=Object.prototype.hasOwnProperty;var vt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Nt=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let g of yt(t))!xt.call(e,g)&&g!==n&&Ae(e,g,{get:()=>t[g],enumerable:!(s=Et(t,g))||s.enumerable});return e};var St=(e,t,n)=>(n=e!=null?mt(wt(e)):{},Nt(t||!e||!e.__esModule?Ae(n,"default",{value:e,enumerable:!0}):n,e));var Ye=vt((kn,Xe)=>{function Ue(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(t=>{let n=e[t],s=typeof n;(s==="object"||s==="function")&&!Object.isFrozen(n)&&Ue(n)}),e}var ue=class{constructor(t){t.data===void 0&&(t.data={}),this.data=t.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}};function Pe(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function q(e,...t){let n=Object.create(null);for(let s in e)n[s]=e[s];return t.forEach(function(s){for(let g in s)n[g]=s[g]}),n}var Ot="
",Me=e=>!!e.scope,Rt=(e,{prefix:t})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){let n=e.split(".");return[`${t}${n.shift()}`,...n.map((s,g)=>`${s}${"_".repeat(g+1)}`)].join(" ")}return`${t}${e}`},me=class{constructor(t,n){this.buffer="",this.classPrefix=n.classPrefix,t.walk(this)}addText(t){this.buffer+=Pe(t)}openNode(t){if(!Me(t))return;let n=Rt(t.scope,{prefix:this.classPrefix});this.span(n)}closeNode(t){Me(t)&&(this.buffer+=Ot)}value(){return this.buffer}span(t){this.buffer+=``}},Ie=(e={})=>{let t={children:[]};return Object.assign(t,e),t},Ee=class e{constructor(){this.rootNode=Ie(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(t){this.top.children.push(t)}openNode(t){let n=Ie({scope:t});this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(t){return this.constructor._walk(t,this.rootNode)}static _walk(t,n){return typeof n=="string"?t.addText(n):n.children&&(t.openNode(n),n.children.forEach(s=>this._walk(t,s)),t.closeNode(n)),t}static _collapse(t){typeof t!="string"&&t.children&&(t.children.every(n=>typeof n=="string")?t.children=[t.children.join("")]:t.children.forEach(n=>{e._collapse(n)}))}},ye=class extends Ee{constructor(t){super(),this.options=t}addText(t){t!==""&&this.add(t)}startScope(t){this.openNode(t)}endScope(){this.closeNode()}__addSublanguage(t,n){let s=t.root;n&&(s.scope=`language:${n}`),this.add(s)}toHTML(){return new me(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}};function ae(e){return e?typeof e=="string"?e:e.source:null}function ze(e){return J("(?=",e,")")}function Tt(e){return J("(?:",e,")*")}function kt(e){return J("(?:",e,")?")}function J(...e){return e.map(n=>ae(n)).join("")}function At(e){let t=e[e.length-1];return typeof t=="object"&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function xe(...e){return"("+(At(e).capture?"":"?:")+e.map(s=>ae(s)).join("|")+")"}function $e(e){return new RegExp(e.toString()+"|").exec("").length-1}function Mt(e,t){let n=e&&e.exec(t);return n&&n.index===0}var It=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function ve(e,{joinWith:t}){let n=0;return e.map(s=>{n+=1;let g=n,b=ae(s),a="";for(;b.length>0;){let i=It.exec(b);if(!i){a+=b;break}a+=b.substring(0,i.index),b=b.substring(i.index+i[0].length),i[0][0]==="\\"&&i[1]?a+="\\"+String(Number(i[1])+g):(a+=i[0],i[0]==="("&&n++)}return a}).map(s=>`(${s})`).join(t)}var Ct=/\b\B/,Ge="[a-zA-Z]\\w*",Ne="[a-zA-Z_]\\w*",He="\\b\\d+(\\.\\d+)?",Fe="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",je="\\b(0b[01]+)",Lt="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Dt=(e={})=>{let t=/^#![ ]*\//;return e.binary&&(e.begin=J(t,/.*\b/,e.binary,/\b.*/)),q({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(n,s)=>{n.index!==0&&s.ignoreMatch()}},e)},se={begin:"\\\\[\\s\\S]",relevance:0},Bt={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[se]},Ut={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[se]},Pt={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},ge=function(e,t,n={}){let s=q({scope:"comment",begin:e,end:t,contains:[]},n);s.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});let g=xe("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return s.contains.push({begin:J(/[ ]+/,"(",g,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s},zt=ge("//","$"),$t=ge("/\\*","\\*/"),Gt=ge("#","$"),Ht={scope:"number",begin:He,relevance:0},Ft={scope:"number",begin:Fe,relevance:0},jt={scope:"number",begin:je,relevance:0},Kt={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[se,{begin:/\[/,end:/\]/,relevance:0,contains:[se]}]},Wt={scope:"title",begin:Ge,relevance:0},Zt={scope:"title",begin:Ne,relevance:0},qt={begin:"\\.\\s*"+Ne,relevance:0},Xt=function(e){return Object.assign(e,{"on:begin":(t,n)=>{n.data._beginMatch=t[1]},"on:end":(t,n)=>{n.data._beginMatch!==t[1]&&n.ignoreMatch()}})},le=Object.freeze({__proto__:null,APOS_STRING_MODE:Bt,BACKSLASH_ESCAPE:se,BINARY_NUMBER_MODE:jt,BINARY_NUMBER_RE:je,COMMENT:ge,C_BLOCK_COMMENT_MODE:$t,C_LINE_COMMENT_MODE:zt,C_NUMBER_MODE:Ft,C_NUMBER_RE:Fe,END_SAME_AS_BEGIN:Xt,HASH_COMMENT_MODE:Gt,IDENT_RE:Ge,MATCH_NOTHING_RE:Ct,METHOD_GUARD:qt,NUMBER_MODE:Ht,NUMBER_RE:He,PHRASAL_WORDS_MODE:Pt,QUOTE_STRING_MODE:Ut,REGEXP_MODE:Kt,RE_STARTERS_RE:Lt,SHEBANG:Dt,TITLE_MODE:Wt,UNDERSCORE_IDENT_RE:Ne,UNDERSCORE_TITLE_MODE:Zt});function Yt(e,t){e.input[e.index-1]==="."&&t.ignoreMatch()}function Vt(e,t){e.className!==void 0&&(e.scope=e.className,delete e.className)}function Qt(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=Yt,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function Jt(e,t){Array.isArray(e.illegal)&&(e.illegal=xe(...e.illegal))}function en(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function tn(e,t){e.relevance===void 0&&(e.relevance=1)}var nn=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");let n=Object.assign({},e);Object.keys(e).forEach(s=>{delete e[s]}),e.keywords=n.keywords,e.begin=J(n.beforeMatch,ze(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},rn=["of","and","for","in","not","or","if","then","parent","list","value"],an="keyword";function Ke(e,t,n=an){let s=Object.create(null);return typeof e=="string"?g(n,e.split(" ")):Array.isArray(e)?g(n,e):Object.keys(e).forEach(function(b){Object.assign(s,Ke(e[b],t,b))}),s;function g(b,a){t&&(a=a.map(i=>i.toLowerCase())),a.forEach(function(i){let c=i.split("|");s[c[0]]=[b,sn(c[0],c[1])]})}}function sn(e,t){return t?Number(t):on(e)?0:1}function on(e){return rn.includes(e.toLowerCase())}var Ce={},Q=e=>{console.error(e)},Le=(e,...t)=>{console.log(`WARN: ${e}`,...t)},re=(e,t)=>{Ce[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Ce[`${e}/${t}`]=!0)},de=new Error;function We(e,t,{key:n}){let s=0,g=e[n],b={},a={};for(let i=1;i<=t.length;i++)a[i+s]=g[i],b[i+s]=!0,s+=$e(t[i-1]);e[n]=a,e[n]._emit=b,e[n]._multi=!0}function cn(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw Q("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),de;if(typeof e.beginScope!="object"||e.beginScope===null)throw Q("beginScope must be object"),de;We(e,e.begin,{key:"beginScope"}),e.begin=ve(e.begin,{joinWith:""})}}function ln(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw Q("skip, excludeEnd, returnEnd not compatible with endScope: {}"),de;if(typeof e.endScope!="object"||e.endScope===null)throw Q("endScope must be object"),de;We(e,e.end,{key:"endScope"}),e.end=ve(e.end,{joinWith:""})}}function un(e){e.scope&&typeof e.scope=="object"&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function dn(e){un(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),cn(e),ln(e)}function gn(e){function t(a,i){return new RegExp(ae(a),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(i?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(i,c){c.position=this.position++,this.matchIndexes[this.matchAt]=c,this.regexes.push([c,i]),this.matchAt+=$e(i)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);let i=this.regexes.map(c=>c[1]);this.matcherRe=t(ve(i,{joinWith:"|"}),!0),this.lastIndex=0}exec(i){this.matcherRe.lastIndex=this.lastIndex;let c=this.matcherRe.exec(i);if(!c)return null;let _=c.findIndex((L,O)=>O>0&&L!==void 0),m=this.matchIndexes[_];return c.splice(0,_),Object.assign(c,m)}}class s{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(i){if(this.multiRegexes[i])return this.multiRegexes[i];let c=new n;return this.rules.slice(i).forEach(([_,m])=>c.addRule(_,m)),c.compile(),this.multiRegexes[i]=c,c}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(i,c){this.rules.push([i,c]),c.type==="begin"&&this.count++}exec(i){let c=this.getMatcher(this.regexIndex);c.lastIndex=this.lastIndex;let _=c.exec(i);if(this.resumingScanAtSamePosition()&&!(_&&_.index===this.lastIndex)){let m=this.getMatcher(0);m.lastIndex=this.lastIndex+1,_=m.exec(i)}return _&&(this.regexIndex+=_.position+1,this.regexIndex===this.count&&this.considerAll()),_}}function g(a){let i=new s;return a.contains.forEach(c=>i.addRule(c.begin,{rule:c,type:"begin"})),a.terminatorEnd&&i.addRule(a.terminatorEnd,{type:"end"}),a.illegal&&i.addRule(a.illegal,{type:"illegal"}),i}function b(a,i){let c=a;if(a.isCompiled)return c;[Vt,en,dn,nn].forEach(m=>m(a,i)),e.compilerExtensions.forEach(m=>m(a,i)),a.__beforeBegin=null,[Qt,Jt,tn].forEach(m=>m(a,i)),a.isCompiled=!0;let _=null;return typeof a.keywords=="object"&&a.keywords.$pattern&&(a.keywords=Object.assign({},a.keywords),_=a.keywords.$pattern,delete a.keywords.$pattern),_=_||/\w+/,a.keywords&&(a.keywords=Ke(a.keywords,e.case_insensitive)),c.keywordPatternRe=t(_,!0),i&&(a.begin||(a.begin=/\B|\b/),c.beginRe=t(c.begin),!a.end&&!a.endsWithParent&&(a.end=/\B|\b/),a.end&&(c.endRe=t(c.end)),c.terminatorEnd=ae(c.end)||"",a.endsWithParent&&i.terminatorEnd&&(c.terminatorEnd+=(a.end?"|":"")+i.terminatorEnd)),a.illegal&&(c.illegalRe=t(a.illegal)),a.contains||(a.contains=[]),a.contains=[].concat(...a.contains.map(function(m){return pn(m==="self"?a:m)})),a.contains.forEach(function(m){b(m,c)}),a.starts&&b(a.starts,i),c.matcher=g(c),c}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=q(e.classNameAliases||{}),b(e)}function Ze(e){return e?e.endsWithParent||Ze(e.starts):!1}function pn(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(t){return q(e,{variants:null},t)})),e.cachedVariants?e.cachedVariants:Ze(e)?q(e,{starts:e.starts?q(e.starts):null}):Object.isFrozen(e)?q(e):e}var fn="11.11.1",we=class extends Error{constructor(t,n){super(t),this.name="HTMLInjectionError",this.html=n}},_e=Pe,De=q,Be=Symbol("nomatch"),bn=7,qe=function(e){let t=Object.create(null),n=Object.create(null),s=[],g=!0,b="Could not find the language '{}', did you forget to load/include a language module?",a={disableAutodetect:!0,name:"Plain text",contains:[]},i={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:ye};function c(r){return i.noHighlightRe.test(r)}function _(r){let u=r.className+" ";u+=r.parentNode?r.parentNode.className:"";let d=i.languageDetectRe.exec(u);if(d){let h=x(d[1]);return h||(Le(b.replace("{}",d[1])),Le("Falling back to no-highlight mode for this block.",r)),h?d[1]:"no-highlight"}return u.split(/\s+/).find(h=>c(h)||x(h))}function m(r,u,d){let h="",w="";typeof u=="object"?(h=r,d=u.ignoreIllegals,w=u.language):(re("10.7.0","highlight(lang, code, ...args) has been deprecated."),re("10.7.0",`Please use highlight(code, options) instead. +https://github.com/highlightjs/highlight.js/issues/2277`),w=r,h=u),d===void 0&&(d=!0);let T={code:h,language:w};M("before:highlight",T);let G=T.result?T.result:L(T.language,T.code,d);return G.code=T.code,M("after:highlight",G),G}function L(r,u,d,h){let w=Object.create(null);function T(o,l){return o.keywords[l]}function G(){if(!p.keywords){S.addText(y);return}let o=0;p.keywordPatternRe.lastIndex=0;let l=p.keywordPatternRe.exec(y),f="";for(;l;){f+=y.substring(o,l.index);let E=j.case_insensitive?l[0].toLowerCase():l[0],k=T(p,E);if(k){let[K,ht]=k;if(S.addText(f),f="",w[E]=(w[E]||0)+1,w[E]<=bn&&(ce+=ht),K.startsWith("_"))f+=l[0];else{let _t=j.classNameAliases[K]||K;F(l[0],_t)}}else f+=l[0];o=p.keywordPatternRe.lastIndex,l=p.keywordPatternRe.exec(y)}f+=y.substring(o),S.addText(f)}function Y(){if(y==="")return;let o=null;if(typeof p.subLanguage=="string"){if(!t[p.subLanguage]){S.addText(y);return}o=L(p.subLanguage,y,!0,ke[p.subLanguage]),ke[p.subLanguage]=o._top}else o=R(y,p.subLanguage.length?p.subLanguage:null);p.relevance>0&&(ce+=o.relevance),S.__addSublanguage(o._emitter,o.language)}function P(){p.subLanguage!=null?Y():G(),y=""}function F(o,l){o!==""&&(S.startScope(l),S.addText(o),S.endScope())}function Se(o,l){let f=1,E=l.length-1;for(;f<=E;){if(!o._emit[f]){f++;continue}let k=j.classNameAliases[o[f]]||o[f],K=l[f];k?F(K,k):(y=K,G(),y=""),f++}}function Oe(o,l){return o.scope&&typeof o.scope=="string"&&S.openNode(j.classNameAliases[o.scope]||o.scope),o.beginScope&&(o.beginScope._wrap?(F(y,j.classNameAliases[o.beginScope._wrap]||o.beginScope._wrap),y=""):o.beginScope._multi&&(Se(o.beginScope,l),y="")),p=Object.create(o,{parent:{value:p}}),p}function Re(o,l,f){let E=Mt(o.endRe,f);if(E){if(o["on:end"]){let k=new ue(o);o["on:end"](l,k),k.isMatchIgnored&&(E=!1)}if(E){for(;o.endsParent&&o.parent;)o=o.parent;return o}}if(o.endsWithParent)return Re(o.parent,l,f)}function dt(o){return p.matcher.regexIndex===0?(y+=o[0],1):(he=!0,0)}function gt(o){let l=o[0],f=o.rule,E=new ue(f),k=[f.__beforeBegin,f["on:begin"]];for(let K of k)if(K&&(K(o,E),E.isMatchIgnored))return dt(l);return f.skip?y+=l:(f.excludeBegin&&(y+=l),P(),!f.returnBegin&&!f.excludeBegin&&(y=l)),Oe(f,o),f.returnBegin?0:l.length}function pt(o){let l=o[0],f=u.substring(o.index),E=Re(p,o,f);if(!E)return Be;let k=p;p.endScope&&p.endScope._wrap?(P(),F(l,p.endScope._wrap)):p.endScope&&p.endScope._multi?(P(),Se(p.endScope,o)):k.skip?y+=l:(k.returnEnd||k.excludeEnd||(y+=l),P(),k.excludeEnd&&(y=l));do p.scope&&S.closeNode(),!p.skip&&!p.subLanguage&&(ce+=p.relevance),p=p.parent;while(p!==E.parent);return E.starts&&Oe(E.starts,o),k.returnEnd?0:l.length}function ft(){let o=[];for(let l=p;l!==j;l=l.parent)l.scope&&o.unshift(l.scope);o.forEach(l=>S.openNode(l))}let oe={};function Te(o,l){let f=l&&l[0];if(y+=o,f==null)return P(),0;if(oe.type==="begin"&&l.type==="end"&&oe.index===l.index&&f===""){if(y+=u.slice(l.index,l.index+1),!g){let E=new Error(`0 width match regex (${r})`);throw E.languageName=r,E.badRule=oe.rule,E}return 1}if(oe=l,l.type==="begin")return gt(l);if(l.type==="illegal"&&!d){let E=new Error('Illegal lexeme "'+f+'" for mode "'+(p.scope||"")+'"');throw E.mode=p,E}else if(l.type==="end"){let E=pt(l);if(E!==Be)return E}if(l.type==="illegal"&&f==="")return y+=` +`,1;if(be>1e5&&be>l.index*3)throw new Error("potential infinite loop, way more iterations than matches");return y+=f,f.length}let j=x(r);if(!j)throw Q(b.replace("{}",r)),new Error('Unknown language: "'+r+'"');let bt=gn(j),fe="",p=h||bt,ke={},S=new i.__emitter(i);ft();let y="",ce=0,V=0,be=0,he=!1;try{if(j.__emitTokens)j.__emitTokens(u,S);else{for(p.matcher.considerAll();;){be++,he?he=!1:p.matcher.considerAll(),p.matcher.lastIndex=V;let o=p.matcher.exec(u);if(!o)break;let l=u.substring(V,o.index),f=Te(l,o);V=o.index+f}Te(u.substring(V))}return S.finalize(),fe=S.toHTML(),{language:r,value:fe,relevance:ce,illegal:!1,_emitter:S,_top:p}}catch(o){if(o.message&&o.message.includes("Illegal"))return{language:r,value:_e(u),illegal:!0,relevance:0,_illegalBy:{message:o.message,index:V,context:u.slice(V-100,V+100),mode:o.mode,resultSoFar:fe},_emitter:S};if(g)return{language:r,value:_e(u),illegal:!1,relevance:0,errorRaised:o,_emitter:S,_top:p};throw o}}function O(r){let u={value:_e(r),illegal:!1,relevance:0,_top:a,_emitter:new i.__emitter(i)};return u._emitter.addText(r),u}function R(r,u){u=u||i.languages||Object.keys(t);let d=O(r),h=u.filter(x).filter(X).map(P=>L(P,r,!1));h.unshift(d);let w=h.sort((P,F)=>{if(P.relevance!==F.relevance)return F.relevance-P.relevance;if(P.language&&F.language){if(x(P.language).supersetOf===F.language)return 1;if(x(F.language).supersetOf===P.language)return-1}return 0}),[T,G]=w,Y=T;return Y.secondBest=G,Y}function D(r,u,d){let h=u&&n[u]||d;r.classList.add("hljs"),r.classList.add(`language-${h}`)}function A(r){let u=null,d=_(r);if(c(d))return;if(M("before:highlightElement",{el:r,language:d}),r.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",r);return}if(r.children.length>0&&(i.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(r)),i.throwUnescapedHTML))throw new we("One of your code blocks includes unescaped HTML.",r.innerHTML);u=r;let h=u.textContent,w=d?m(h,{language:d,ignoreIllegals:!0}):R(h);r.innerHTML=w.value,r.dataset.highlighted="yes",D(r,d,w.language),r.result={language:w.language,re:w.relevance,relevance:w.relevance},w.secondBest&&(r.secondBest={language:w.secondBest.language,relevance:w.secondBest.relevance}),M("after:highlightElement",{el:r,result:w,text:h})}function B(r){i=De(i,r)}let H=()=>{U(),re("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function $(){U(),re("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let W=!1;function U(){function r(){U()}if(document.readyState==="loading"){W||window.addEventListener("DOMContentLoaded",r,!1),W=!0;return}document.querySelectorAll(i.cssSelector).forEach(A)}function v(r,u){let d=null;try{d=u(e)}catch(h){if(Q("Language definition for '{}' could not be registered.".replace("{}",r)),g)Q(h);else throw h;d=a}d.name||(d.name=r),t[r]=d,d.rawDefinition=u.bind(null,e),d.aliases&&C(d.aliases,{languageName:r})}function N(r){delete t[r];for(let u of Object.keys(n))n[u]===r&&delete n[u]}function Z(){return Object.keys(t)}function x(r){return r=(r||"").toLowerCase(),t[r]||t[n[r]]}function C(r,{languageName:u}){typeof r=="string"&&(r=[r]),r.forEach(d=>{n[d.toLowerCase()]=u})}function X(r){let u=x(r);return u&&!u.disableAutodetect}function ee(r){r["before:highlightBlock"]&&!r["before:highlightElement"]&&(r["before:highlightElement"]=u=>{r["before:highlightBlock"](Object.assign({block:u.el},u))}),r["after:highlightBlock"]&&!r["after:highlightElement"]&&(r["after:highlightElement"]=u=>{r["after:highlightBlock"](Object.assign({block:u.el},u))})}function te(r){ee(r),s.push(r)}function ne(r){let u=s.indexOf(r);u!==-1&&s.splice(u,1)}function M(r,u){let d=r;s.forEach(function(h){h[d]&&h[d](u)})}function I(r){return re("10.7.0","highlightBlock will be removed entirely in v12.0"),re("10.7.0","Please use highlightElement now."),A(r)}Object.assign(e,{highlight:m,highlightAuto:R,highlightAll:U,highlightElement:A,highlightBlock:I,configure:B,initHighlighting:H,initHighlightingOnLoad:$,registerLanguage:v,unregisterLanguage:N,listLanguages:Z,getLanguage:x,registerAliases:C,autoDetection:X,inherit:De,addPlugin:te,removePlugin:ne}),e.debugMode=function(){g=!1},e.safeMode=function(){g=!0},e.versionString=fn,e.regex={concat:J,lookahead:ze,either:xe,optional:kt,anyNumberOfTimes:Tt};for(let r in le)typeof le[r]=="object"&&Ue(le[r]);return Object.assign(e,le),e},ie=qe({});ie.newInstance=()=>qe({});Xe.exports=ie;ie.HighlightJS=ie;ie.default=ie});var Ve=St(Ye(),1);var z=Ve.default;function Qe(e){let t=e.regex,n=/(?![A-Za-z0-9])(?![$])/,s=t.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,n),g=t.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,n),b=t.concat(/[A-Z]+/,n),a={scope:"variable",match:"\\$+"+s},i={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},c={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},_=e.inherit(e.APOS_STRING_MODE,{illegal:null}),m=e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(c)}),L={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(c),"on:begin":(M,I)=>{I.data._beginMatch=M[1]||M[2]},"on:end":(M,I)=>{I.data._beginMatch!==M[1]&&I.ignoreMatch()}},O=e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),R=`[ +]`,D={scope:"string",variants:[m,_,L,O]},A={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},B=["false","null","true"],H=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],$=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],U={keyword:H,literal:(M=>{let I=[];return M.forEach(r=>{I.push(r),r.toLowerCase()===r?I.push(r.toUpperCase()):I.push(r.toLowerCase())}),I})(B),built_in:$},v=M=>M.map(I=>I.replace(/\|\d+$/,"")),N={variants:[{match:[/new/,t.concat(R,"+"),t.concat("(?!",v($).join("\\b|"),"\\b)"),g],scope:{1:"keyword",4:"title.class"}}]},Z=t.concat(s,"\\b(?!\\()"),x={variants:[{match:[t.concat(/::/,t.lookahead(/(?!class\b)/)),Z],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[g,t.concat(/::/,t.lookahead(/(?!class\b)/)),Z],scope:{1:"title.class",3:"variable.constant"}},{match:[g,t.concat("::",t.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[g,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},C={scope:"attr",match:t.concat(s,t.lookahead(":"),t.lookahead(/(?!::)/))},X={relevance:0,begin:/\(/,end:/\)/,keywords:U,contains:[C,a,x,e.C_BLOCK_COMMENT_MODE,D,A,N]},ee={relevance:0,match:[/\b/,t.concat("(?!fn\\b|function\\b|",v(H).join("\\b|"),"|",v($).join("\\b|"),"\\b)"),s,t.concat(R,"*"),t.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[X]};X.contains.push(ee);let te=[C,x,e.C_BLOCK_COMMENT_MODE,D,A,N],ne={begin:t.concat(/#\[\s*\\?/,t.either(g,b)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:B,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:B,keyword:["new","array"]},contains:["self",...te]},...te,{scope:"meta",variants:[{match:g},{match:b}]}]};return{case_insensitive:!1,keywords:U,contains:[ne,e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},i,{scope:"variable.language",match:/\$this\b/},a,ee,x,{match:[/const/,/\s/,s],scope:{1:"keyword",3:"variable.constant"}},N,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:U,contains:["self",ne,a,x,e.C_BLOCK_COMMENT_MODE,D,A]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},D,A]}}function Je(e){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}var et="[A-Za-z$_][0-9A-Za-z$_]*",hn=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],_n=["true","false","null","undefined","NaN","Infinity"],tt=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],nt=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],rt=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],mn=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],En=[].concat(rt,tt,nt);function it(e){let t=e.regex,n=(d,{after:h})=>{let w="",end:""},b=/<[A-Za-z0-9\\._:-]+\s*\/>/,a={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(d,h)=>{let w=d[0].length+d.index,T=d.input[w];if(T==="<"||T===","){h.ignoreMatch();return}T===">"&&(n(d,{after:w})||h.ignoreMatch());let G,Y=d.input.substring(w);if(G=Y.match(/^\s*=/)){h.ignoreMatch();return}if((G=Y.match(/^\s+extends\s+/))&&G.index===0){h.ignoreMatch();return}}},i={$pattern:et,keyword:hn,literal:_n,built_in:En,"variable.language":mn},c="[0-9](_?[0-9])*",_=`\\.(${c})`,m="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",L={className:"number",variants:[{begin:`(\\b(${m})((${_})|\\.)?|(${_}))[eE][+-]?(${c})\\b`},{begin:`\\b(${m})\\b((${_})\\b|\\.)?|(${_})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},O={className:"subst",begin:"\\$\\{",end:"\\}",keywords:i,contains:[]},R={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,O],subLanguage:"xml"}},D={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,O],subLanguage:"css"}},A={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,O],subLanguage:"graphql"}},B={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,O]},$={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:s+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},W=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,R,D,A,B,{match:/\$\d+/},L];O.contains=W.concat({begin:/\{/,end:/\}/,keywords:i,contains:["self"].concat(W)});let U=[].concat($,O.contains),v=U.concat([{begin:/(\s*)\(/,end:/\)/,keywords:i,contains:["self"].concat(U)}]),N={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,contains:v},Z={variants:[{match:[/class/,/\s+/,s,/\s+/,/extends/,/\s+/,t.concat(s,"(",t.concat(/\./,s),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,s],scope:{1:"keyword",3:"title.class"}}]},x={relevance:0,match:t.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...tt,...nt]}},C={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},X={variants:[{match:[/function/,/\s+/,s,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[N],illegal:/%/},ee={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function te(d){return t.concat("(?!",d.join("|"),")")}let ne={match:t.concat(/\b/,te([...rt,"super","import"].map(d=>`${d}\\s*\\(`)),s,t.lookahead(/\s*\(/)),className:"title.function",relevance:0},M={begin:t.concat(/\./,t.lookahead(t.concat(s,/(?![0-9A-Za-z$_(])/))),end:s,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},I={match:[/get|set/,/\s+/,s,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},N]},r="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",u={match:[/const|var|let/,/\s+/,s,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(r)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[N]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{PARAMS_CONTAINS:v,CLASS_REFERENCE:x},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),C,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,R,D,A,B,$,{match:/\$\d+/},L,x,{scope:"attr",match:s+t.lookahead(":"),relevance:0},u,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[$,e.REGEXP_MODE,{className:"function",begin:r,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,contains:v}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:g.begin,end:g.end},{match:b},{begin:a.begin,"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},X,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[N,e.inherit(e.TITLE_MODE,{begin:s,className:"title.function"})]},{match:/\.\.\./,relevance:0},M,{match:"\\$"+s,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[N]},ne,ee,Z,I,{match:/\$[(.]/}]}}function at(e){let t=e.regex,n=e.COMMENT("--","$"),s={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},g={begin:/"/,end:/"/,contains:[{match:/""/}]},b=["true","false","unknown"],a=["double precision","large object","with timezone","without timezone"],i=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],c=["add","asc","collation","desc","final","first","last","view"],_=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],m=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],L=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],O=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],R=m,D=[..._,...c].filter(v=>!m.includes(v)),A={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},B={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},H={match:t.concat(/\b/,t.either(...R),/\s*\(/),relevance:0,keywords:{built_in:R}};function $(v){return t.concat(/\b/,t.either(...v.map(N=>N.replace(/\s+/,"\\s+"))),/\b/)}let W={scope:"keyword",match:$(O),relevance:0};function U(v,{exceptions:N,when:Z}={}){let x=Z;return N=N||[],v.map(C=>C.match(/\|\d+$/)||N.includes(C)?C:x(C)?`${C}|0`:C)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:U(D,{when:v=>v.length<3}),literal:b,type:i,built_in:L},contains:[{scope:"type",match:$(a)},W,H,A,s,g,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,B]}}function st(e){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}var yn=e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),wn=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],xn=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],vn=[...wn,...xn],Nn=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),Sn=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),On=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),Rn=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function ot(e){let t=e.regex,n=yn(e),s={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},g="and or not only",b=/@-?\w[\w]*(-\w+)*/,a="[a-zA-Z-][a-zA-Z0-9_-]*",i=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[n.BLOCK_COMMENT,s,n.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+a,relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+Sn.join("|")+")"},{begin:":(:)?("+On.join("|")+")"}]},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+Rn.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[n.BLOCK_COMMENT,n.HEXCOLOR,n.IMPORTANT,n.CSS_NUMBER_MODE,...i,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...i,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},n.FUNCTION_DISPATCH]},{begin:t.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:b},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:g,attribute:Nn.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...i,n.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+vn.join("|")+")\\b"}]}}function ct(e){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}function lt(e){let t=e.regex,n=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s=/[\p{L}0-9._:-]+/u,g={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},b={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},a=e.inherit(b,{begin:/\(/,end:/\)/}),i=e.inherit(e.APOS_STRING_MODE,{className:"string"}),c=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),_={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[b,c,i,a,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[b,a,c,i]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},g,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[c]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[_],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[_],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:t.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:_}]},{className:"tag",begin:t.concat(/<\//,t.lookahead(t.concat(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function ut(e){let t="true false yes no null",n="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},g={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},b={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},a={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,g]},i=e.inherit(a,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),O={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},R={end:",",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},D={begin:/\{/,end:/\}/,contains:[R],illegal:"\\n",relevance:0},A={begin:"\\[",end:"\\]",contains:[R],illegal:"\\n",relevance:0},B=[s,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+n},{className:"type",begin:"!<"+n+">"},{className:"type",begin:"!"+n},{className:"type",begin:"!!"+n},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},O,{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},D,A,b,a],H=[...B];return H.pop(),H.push(i),R.contains=H,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:B}}z.registerLanguage("php",Qe);z.registerLanguage("php-template",Je);z.registerLanguage("javascript",it);z.registerLanguage("sql",at);z.registerLanguage("shell",st);z.registerLanguage("css",ot);z.registerLanguage("plaintext",ct);z.registerLanguage("xml",lt);z.registerLanguage("yaml",ut);var pe=z.getLanguage("sql");pe.keywords.keyword=Array.from(new Set([...pe.keywords.keyword,"if","ifnull","limit","aes_decrypt","aes_encrypt","ascii","bin","bit_and","bit_count","bit_length","bit_or","bit_xor","coercibility","concat","group_concat","concat_ws","connection_id","conv","curdate","curtime","database","date_add","date_format","date_sub","dayname","dayofmonth","dayofweek","dayofyear","elt","export_set","field","find_in_set","format","from_base64","from_days","from_unixtime","get_lock","greatest","hex","ifnull","inet_aton","inet_ntoa","instr","isnull","last_insert_id","least","lpad","ltrim","make_set","md5","monthname","now","oct","ord","password","quote","release_lock","repeat","replace","reverse","rpad","rtrim","sec_to_time","sha1","sha2","sleep","soundex","space","straight_join","strcmp","str_to_date","substr","sysdate","time_format","time_to_sec","to_base64","to_days","unix_timestamp","updatexml","version","week","weekday","yearweek","length","substring_index","json_unquote","json_extract","json_contains"]));pe.keywords.type=Array.from(new Set([...pe.keywords.type,"longtext"]));z.configure({classPrefix:"phpdebugbar-hljs-"});globalThis.phpdebugbar_hljs=z.default;})(); diff --git a/resources/vendor/sql-formatter/sql-formatter.min.js b/resources/vendor/sql-formatter/sql-formatter.min.js new file mode 100644 index 000000000..f88018f29 --- /dev/null +++ b/resources/vendor/sql-formatter/sql-formatter.min.js @@ -0,0 +1,8 @@ +(()=>{var b=Object.create;var y=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,ee=Object.prototype.hasOwnProperty;var o=(E,e)=>()=>(e||E((e={exports:{}}).exports,e),e.exports);var Ee=(E,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let T of $(e))!ee.call(E,T)&&T!==t&&y(E,T,{get:()=>e[T],enumerable:!(r=j(e,T))||r.enumerable});return E};var te=(E,e,t)=>(t=E!=null?b(q(E)):{},Ee(e||!E||!E.__esModule?y(t,"default",{value:E,enumerable:!0}):t,E));var F=o(h=>{"use strict";h.__esModule=!0;var W=/[\\^$.*+?()[\]{}|]/g,re=RegExp(W.source);function Te(E){return E&&re.test(E)?E.replace(W,"\\$&"):E||""}h.default=Te});var C=o(a=>{"use strict";a.__esModule=!0;a.TokenTypes=void 0;var Re;(function(E){E.WHITESPACE="whitespace",E.WORD="word",E.STRING="string",E.RESERVED="reserved",E.RESERVED_TOP_LEVEL="reserved-top-level",E.RESERVED_TOP_LEVEL_NO_INDENT="reserved-top-level-no-indent",E.RESERVED_NEWLINE="reserved-newline",E.OPERATOR="operator",E.NO_SPACE_OPERATOR="no-space-operator",E.OPEN_PAREN="open-paren",E.CLOSE_PAREN="close-paren",E.LINE_COMMENT="line-comment",E.BLOCK_COMMENT="block-comment",E.NUMBER="number",E.PLACEHOLDER="placeholder",E.SERVERVARIABLE="servervariable"})(Re=a.TokenTypes||(a.TokenTypes={}))});var B=o(u=>{"use strict";var ne=u&&u.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};u.__esModule=!0;var c=ne(F()),N=C(),Ne=(function(){function E(e){this.WHITESPACE_REGEX=/^(\s+)/u,this.NUMBER_REGEX=/^((-\s*)?[0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+|([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}))\b/u,this.AMBIGUOS_OPERATOR_REGEX=/^(\?\||\?&)/u,this.OPERATOR_REGEX=/^(!=|<>|>>|<<|==|<=|>=|!<|!>|\|\|\/|\|\/|\|\||~~\*|~~|!~~\*|!~~|~\*|!~\*|!~|:=|=>|&&|@>|<@|#-|@@|@|.)/u,this.NO_SPACE_OPERATOR_REGEX=/^(::|->>|->|#>>|#>)/u,this.BLOCK_COMMENT_REGEX=/^(\/\*[^]*?(?:\*\/|$))/u,this.LINE_COMMENT_REGEX=this.createLineCommentRegex(e.lineCommentTypes),this.RESERVED_TOP_LEVEL_REGEX=this.createReservedWordRegex(e.reservedTopLevelWords),this.RESERVED_TOP_LEVEL_NO_INDENT_REGEX=this.createReservedWordRegex(e.reservedTopLevelWordsNoIndent),this.RESERVED_NEWLINE_REGEX=this.createReservedWordRegex(e.reservedNewlineWords),this.RESERVED_PLAIN_REGEX=this.createReservedWordRegex(e.reservedWords),this.WORD_REGEX=this.createWordRegex(e.specialWordChars),this.STRING_REGEX=this.createStringRegex(e.stringTypes),this.OPEN_PAREN_REGEX=this.createParenRegex(e.openParens),this.CLOSE_PAREN_REGEX=this.createParenRegex(e.closeParens),this.INDEXED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(e.indexedPlaceholderTypes,"[0-9]*"),this.IDENT_NAMED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(e.namedPlaceholderTypes,"[a-zA-Z0-9._$]+"),this.STRING_NAMED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(e.namedPlaceholderTypes,this.createStringPattern(e.stringTypes))}return E.prototype.createLineCommentRegex=function(e){var t="((?|(?:[^>]))";return new RegExp("^((?:".concat(e.map(function(r){return(0,c.default)(r)}).join("|"),")").concat(t,`.*?(?:\r +|\r| +|$))`),"u")},E.prototype.createReservedWordRegex=function(e){var t=e.join("|").replace(/ /gu,"\\s+");return new RegExp("^(".concat(t,")\\b"),"iu")},E.prototype.createWordRegex=function(e){return new RegExp("^([\\p{Alphabetic}\\p{Mark}\\p{Decimal_Number}\\p{Connector_Punctuation}\\p{Join_Control}".concat(e.join(""),"]+)"),"u")},E.prototype.createStringRegex=function(e){return new RegExp("^("+this.createStringPattern(e)+")","u")},E.prototype.createStringPattern=function(e){var t={"``":"((`[^`]*($|`))+)","[]":"((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)",'""':'(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',"''":"(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)","N''":"((N'[^N'\\\\]*(?:\\\\.[^N'\\\\]*)*('|$))+)","E''":"(((E|e)'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)"};return e.map(function(r){return t[r]}).join("|")},E.prototype.createParenRegex=function(e){var t=this;return new RegExp("^("+e.map(function(r){return t.escapeParen(r)}).join("|")+")","iu")},E.prototype.escapeParen=function(e){return e.length===1?(0,c.default)(e):"\\b"+e+"\\b"},E.prototype.createPlaceholderRegex=function(e,t){if(!e||e.length===0)return null;var r=e.map(c.default).join("|");return new RegExp("^((?:".concat(r,")(?:").concat(t,"))"),"u")},E.prototype.tokenize=function(e){if(!e)return[];for(var t=[],r;e.length;)r=this.getNextToken(e,r),e=e.substring(r.value.length),t.push(r);return t},E.prototype.getNextToken=function(e,t){return this.getWhitespaceToken(e)||this.getCommentToken(e)||this.getStringToken(e)||this.getOpenParenToken(e)||this.getCloseParenToken(e)||this.getAmbiguosOperatorToken(e)||this.getNoSpaceOperatorToken(e)||this.getServerVariableToken(e)||this.getPlaceholderToken(e)||this.getNumberToken(e)||this.getReservedWordToken(e,t)||this.getWordToken(e)||this.getOperatorToken(e)},E.prototype.getWhitespaceToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.WHITESPACE,regex:this.WHITESPACE_REGEX})},E.prototype.getCommentToken=function(e){return this.getLineCommentToken(e)||this.getBlockCommentToken(e)},E.prototype.getLineCommentToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.LINE_COMMENT,regex:this.LINE_COMMENT_REGEX})},E.prototype.getBlockCommentToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.BLOCK_COMMENT,regex:this.BLOCK_COMMENT_REGEX})},E.prototype.getStringToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.STRING,regex:this.STRING_REGEX})},E.prototype.getOpenParenToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.OPEN_PAREN,regex:this.OPEN_PAREN_REGEX})},E.prototype.getCloseParenToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.CLOSE_PAREN,regex:this.CLOSE_PAREN_REGEX})},E.prototype.getPlaceholderToken=function(e){return this.getIdentNamedPlaceholderToken(e)||this.getStringNamedPlaceholderToken(e)||this.getIndexedPlaceholderToken(e)},E.prototype.getServerVariableToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.SERVERVARIABLE,regex:/(^@@\w+)/iu})},E.prototype.getIdentNamedPlaceholderToken=function(e){return this.getPlaceholderTokenWithKey({input:e,regex:this.IDENT_NAMED_PLACEHOLDER_REGEX,parseKey:function(t){return t.slice(1)}})},E.prototype.getStringNamedPlaceholderToken=function(e){var t=this;return this.getPlaceholderTokenWithKey({input:e,regex:this.STRING_NAMED_PLACEHOLDER_REGEX,parseKey:function(r){return t.getEscapedPlaceholderKey({key:r.slice(2,-1),quoteChar:r.slice(-1)})}})},E.prototype.getIndexedPlaceholderToken=function(e){return this.getPlaceholderTokenWithKey({input:e,regex:this.INDEXED_PLACEHOLDER_REGEX,parseKey:function(t){return t.slice(1)}})},E.prototype.getPlaceholderTokenWithKey=function(e){var t=e.input,r=e.regex,T=e.parseKey,R=this.getTokenOnFirstMatch({input:t,regex:r,type:N.TokenTypes.PLACEHOLDER});return R&&(R.key=T(R.value)),R},E.prototype.getEscapedPlaceholderKey=function(e){var t=e.key,r=e.quoteChar;return t.replace(new RegExp((0,c.default)("\\"+r),"gu"),r)},E.prototype.getNumberToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.NUMBER,regex:this.NUMBER_REGEX})},E.prototype.getOperatorToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.OPERATOR,regex:this.OPERATOR_REGEX})},E.prototype.getAmbiguosOperatorToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.OPERATOR,regex:this.AMBIGUOS_OPERATOR_REGEX})},E.prototype.getNoSpaceOperatorToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.NO_SPACE_OPERATOR,regex:this.NO_SPACE_OPERATOR_REGEX})},E.prototype.getReservedWordToken=function(e,t){if(!(t&&t.value&&t.value==="."))return this.getToplevelReservedToken(e)||this.getNewlineReservedToken(e)||this.getTopLevelReservedTokenNoIndent(e)||this.getPlainReservedToken(e)},E.prototype.getToplevelReservedToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.RESERVED_TOP_LEVEL,regex:this.RESERVED_TOP_LEVEL_REGEX})},E.prototype.getNewlineReservedToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.RESERVED_NEWLINE,regex:this.RESERVED_NEWLINE_REGEX})},E.prototype.getPlainReservedToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.RESERVED,regex:this.RESERVED_PLAIN_REGEX})},E.prototype.getTopLevelReservedTokenNoIndent=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.RESERVED_TOP_LEVEL_NO_INDENT,regex:this.RESERVED_TOP_LEVEL_NO_INDENT_REGEX})},E.prototype.getWordToken=function(e){return this.getTokenOnFirstMatch({input:e,type:N.TokenTypes.WORD,regex:this.WORD_REGEX})},E.prototype.getTokenOnFirstMatch=function(e){var t=e.input,r=e.type,T=e.regex,R=t.match(T);if(R)return{type:r,value:R[1]}},E})();u.default=Ne});var g=o(d=>{"use strict";d.__esModule=!0;var oe=function(E){return E===void 0&&(E=[]),E[E.length-1]};d.default=oe});var H=o(l=>{"use strict";var Ae=l&&l.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};l.__esModule=!0;var ie=Ae(g()),M="top-level",Ie="block-level",Oe=(function(){function E(e){this.indent=e,this.indentTypes=[],this.indent=e||" "}return E.prototype.getIndent=function(){return new Array(this.indentTypes.length).fill(this.indent).join("")},E.prototype.increaseTopLevel=function(){this.indentTypes.push(M)},E.prototype.increaseBlockLevel=function(){this.indentTypes.push(Ie)},E.prototype.decreaseTopLevel=function(){(0,ie.default)(this.indentTypes)===M&&this.indentTypes.pop()},E.prototype.decreaseBlockLevel=function(){for(;this.indentTypes.length>0;){var e=this.indentTypes.pop();if(e!==M)break}},E.prototype.resetIndentation=function(){this.indentTypes=[]},E})();l.default=Oe});var V=o(f=>{"use strict";f.__esModule=!0;var S=C(),se=50,Se=(function(){function E(){this.level=0}return E.prototype.beginIfPossible=function(e,t){this.level===0&&this.isInlineBlock(e,t)?this.level=1:this.level>0?this.level++:this.level=0},E.prototype.end=function(){this.level--},E.prototype.isActive=function(){return this.level>0},E.prototype.isInlineBlock=function(e,t){for(var r=0,T=0,R=t;Rse)return!1;if(P.type===S.TokenTypes.OPEN_PAREN)T++;else if(P.type===S.TokenTypes.CLOSE_PAREN&&(T--,T===0))return!0;if(this.isForbiddenToken(P))return!1}return!1},E.prototype.isForbiddenToken=function(e){var t=e.type,r=e.value;return t===S.TokenTypes.RESERVED_TOP_LEVEL||t===S.TokenTypes.RESERVED_NEWLINE||t===S.TokenTypes.LINE_COMMENT||t===S.TokenTypes.BLOCK_COMMENT||r===";"},E})();f.default=Se});var m=o(v=>{"use strict";v.__esModule=!0;var Le=(function(){function E(e){this.params=e,this.index=0,this.params=e}return E.prototype.get=function(e){var t=e.key,r=e.value;return this.params?t?this.params[t]:this.params[this.index++]:r},E})();v.default=Le});var Y=o(p=>{"use strict";var G=p&&p.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};p.__esModule=!0;var n=C(),ae=G(H()),Ce=G(V()),ue=G(m()),le=[" "," "],L=function(E){for(var e=E.length-1;e>=0&&le.includes(E[e]);)e--;return E.substring(0,e+1)},pe=(function(){function E(e,t,r){this.cfg=e,this.tokenizer=t,this.tokenOverride=r,this.tokens=[],this.previousReservedWord={type:null,value:null},this.previousNonWhiteSpace={type:null,value:null},this.index=0,this.indentation=new ae.default(this.cfg.indent),this.inlineBlock=new Ce.default,this.params=new ue.default(this.cfg.params)}return E.prototype.format=function(e){this.tokens=this.tokenizer.tokenize(e);var t=this.getFormattedQueryFromTokens();return t.trim()},E.prototype.getFormattedQueryFromTokens=function(){var e=this,t="";return this.tokens.forEach(function(r,T){e.index=T,e.tokenOverride&&(r=e.tokenOverride(r,e.previousReservedWord)||r),r.type===n.TokenTypes.WHITESPACE?t=e.formatWhitespace(r,t):r.type===n.TokenTypes.LINE_COMMENT?t=e.formatLineComment(r,t):r.type===n.TokenTypes.BLOCK_COMMENT?t=e.formatBlockComment(r,t):r.type===n.TokenTypes.RESERVED_TOP_LEVEL||r.type===n.TokenTypes.RESERVED_TOP_LEVEL_NO_INDENT||r.type===n.TokenTypes.RESERVED_NEWLINE||r.type===n.TokenTypes.RESERVED?t=e.formatReserved(r,t):r.type===n.TokenTypes.OPEN_PAREN?t=e.formatOpeningParentheses(r,t):r.type===n.TokenTypes.CLOSE_PAREN?t=e.formatClosingParentheses(r,t):r.type===n.TokenTypes.NO_SPACE_OPERATOR?t=e.formatWithoutSpaces(r,t):r.type===n.TokenTypes.PLACEHOLDER||r.type===n.TokenTypes.SERVERVARIABLE?t=e.formatPlaceholder(r,t):r.value===","?t=e.formatComma(r,t):r.value===":"?t=e.formatWithSpaceAfter(r,t):r.value==="."?t=e.formatWithoutSpaces(r,t):r.value===";"?t=e.formatQuerySeparator(r,t):t=e.formatWithSpaces(r,t),r.type!==n.TokenTypes.WHITESPACE&&(e.previousNonWhiteSpace=r)}),t},E.prototype.formatWhitespace=function(e,t){return this.cfg.linesBetweenQueries==="preserve"&&/((\r\n|\n)(\r\n|\n)+)/u.test(e.value)&&this.previousToken().value===";"?t.replace(/(\n|\r\n)$/u,"")+e.value:t},E.prototype.formatReserved=function(e,t){return e.type===n.TokenTypes.RESERVED_NEWLINE&&this.previousReservedWord&&this.previousReservedWord.value&&e.value.toUpperCase()==="AND"&&this.previousReservedWord.value.toUpperCase()==="BETWEEN"&&(e.type=n.TokenTypes.RESERVED),e.type===n.TokenTypes.RESERVED_TOP_LEVEL?t=this.formatTopLevelReservedWord(e,t):e.type===n.TokenTypes.RESERVED_TOP_LEVEL_NO_INDENT?t=this.formatTopLevelReservedWordNoIndent(e,t):e.type===n.TokenTypes.RESERVED_NEWLINE?t=this.formatNewlineReservedWord(e,t):t=this.formatWithSpaces(e,t),this.previousReservedWord=e,t},E.prototype.formatLineComment=function(e,t){return this.addNewline(t+e.value)},E.prototype.formatBlockComment=function(e,t){return this.addNewline(this.addNewline(t)+this.indentComment(e.value))},E.prototype.indentComment=function(e){return e.replace(/\n[ \t]*/gu,` +`+this.indentation.getIndent()+" ")},E.prototype.formatTopLevelReservedWordNoIndent=function(e,t){return this.indentation.decreaseTopLevel(),t=this.addNewline(t)+this.equalizeWhitespace(this.formatReservedWord(e.value)),this.addNewline(t)},E.prototype.formatTopLevelReservedWord=function(e,t){var r=this.previousNonWhiteSpace.value!==","&&!["GRANT"].includes("".concat(this.previousNonWhiteSpace.value).toUpperCase());return r&&(this.indentation.decreaseTopLevel(),t=this.addNewline(t)),t=t+this.equalizeWhitespace(this.formatReservedWord(e.value))+" ",r&&this.indentation.increaseTopLevel(),t},E.prototype.formatNewlineReservedWord=function(e,t){return this.addNewline(t)+this.equalizeWhitespace(this.formatReservedWord(e.value))+" "},E.prototype.equalizeWhitespace=function(e){return e.replace(/\s+/gu," ")},E.prototype.formatOpeningParentheses=function(e,t){e.value=this.formatCase(e.value);var r=this.previousToken().type;return r!==n.TokenTypes.WHITESPACE&&r!==n.TokenTypes.OPEN_PAREN&&r!==n.TokenTypes.LINE_COMMENT&&(t=L(t)),t+=e.value,this.inlineBlock.beginIfPossible(this.tokens,this.index),this.inlineBlock.isActive()||(this.indentation.increaseBlockLevel(),t=this.addNewline(t)),t},E.prototype.formatClosingParentheses=function(e,t){return e.value=this.formatCase(e.value),this.inlineBlock.isActive()?(this.inlineBlock.end(),this.formatWithSpaceAfter(e,t)):(this.indentation.decreaseBlockLevel(),this.formatWithSpaces(e,this.addNewline(t)))},E.prototype.formatPlaceholder=function(e,t){return t+this.params.get(e)+" "},E.prototype.formatComma=function(e,t){return t=L(t)+e.value+" ",this.inlineBlock.isActive()||/^LIMIT$/iu.test(this.previousReservedWord.value)?t:this.addNewline(t)},E.prototype.formatWithSpaceAfter=function(e,t){return L(t)+e.value+" "},E.prototype.formatWithoutSpaces=function(e,t){return L(t)+e.value},E.prototype.formatWithSpaces=function(e,t){var r=e.type===n.TokenTypes.RESERVED?this.formatReservedWord(e.value):e.value;return t+r+" "},E.prototype.formatReservedWord=function(e){return this.formatCase(e)},E.prototype.formatQuerySeparator=function(e,t){this.indentation.resetIndentation();var r=` +`;return this.cfg.linesBetweenQueries!=="preserve"&&(r=` +`.repeat(this.cfg.linesBetweenQueries||1)),L(t)+e.value+r},E.prototype.addNewline=function(e){return e=L(e),e.endsWith(` +`)||(e+=` +`),e+this.indentation.getIndent()},E.prototype.previousToken=function(){return this.tokens[this.index-1]||{type:null,value:null}},E.prototype.formatCase=function(e){return this.cfg.reservedWordCase==="upper"?e.toUpperCase():this.cfg.reservedWordCase==="lower"?e.toLowerCase():e},E})();p.default=pe});var D=o(_=>{"use strict";var X=_&&_.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};_.__esModule=!0;var _e=X(B()),De=X(Y()),Pe=(function(){function E(e){this.cfg=e}return E.prototype.format=function(e){return new De.default(this.cfg,this.tokenizer(),this.tokenOverride).format(e)},E.prototype.tokenize=function(e){return this.tokenizer().tokenize(e)},E.prototype.tokenizer=function(){return new _e.default(this.getTokenizerConfig())},E})();_.default=Pe});var k=o(i=>{"use strict";var ce=i&&i.__extends||(function(){var E=function(e,t){return E=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,T){r.__proto__=T}||function(r,T){for(var R in T)Object.prototype.hasOwnProperty.call(T,R)&&(r[R]=T[R])},E(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");E(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}})(),Ue=i&&i.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};i.__esModule=!0;var he=Ue(D()),de=(function(E){ce(e,E);function e(){return E!==null&&E.apply(this,arguments)||this}return e.prototype.getTokenizerConfig=function(){return{reservedWords:Me,reservedTopLevelWords:fe,reservedNewlineWords:Ge,reservedTopLevelWordsNoIndent:ve,stringTypes:['""',"''","``","[]"],openParens:["("],closeParens:[")"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:[":"],lineCommentTypes:["--"],specialWordChars:["#","@"]}},e})(he.default);i.default=de;var Me=["ABS","ACTIVATE","ALIAS","ALL","ALLOCATE","ALLOW","ALTER","ANY","ARE","ARRAY","AS","ASC","ASENSITIVE","ASSOCIATE","ASUTIME","ASYMMETRIC","AT","ATOMIC","ATTRIBUTES","AUDIT","AUTHORIZATION","AUX","AUXILIARY","AVG","BEFORE","BEGIN","BETWEEN","BIGINT","BINARY","BLOB","BOOLEAN","BOTH","BUFFERPOOL","BY","CACHE","CALL","CALLED","CAPTURE","CARDINALITY","CASCADED","CASE","CAST","CCSID","CEIL","CEILING","CHAR","CHARACTER","CHARACTER_LENGTH","CHAR_LENGTH","CHECK","CLOB","CLONE","CLOSE","CLUSTER","COALESCE","COLLATE","COLLECT","COLLECTION","COLLID","COLUMN","COMMENT","COMMIT","CONCAT","CONDITION","CONNECT","CONNECTION","CONSTRAINT","CONTAINS","CONTINUE","CONVERT","CORR","CORRESPONDING","COUNT","COUNT_BIG","COVAR_POP","COVAR_SAMP","CREATE","CROSS","CUBE","CUME_DIST","CURRENT","CURRENT_DATE","CURRENT_DEFAULT_TRANSFORM_GROUP","CURRENT_LC_CTYPE","CURRENT_PATH","CURRENT_ROLE","CURRENT_SCHEMA","CURRENT_SERVER","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_TIMEZONE","CURRENT_TRANSFORM_GROUP_FOR_TYPE","CURRENT_USER","CURSOR","CYCLE","DATA","DATABASE","DATAPARTITIONNAME","DATAPARTITIONNUM","DATE","DAY","DAYS","DB2GENERAL","DB2GENRL","DB2SQL","DBINFO","DBPARTITIONNAME","DBPARTITIONNUM","DEALLOCATE","DEC","DECIMAL","DECLARE","DEFAULT","DEFAULTS","DEFINITION","DELETE","DENSERANK","DENSE_RANK","DEREF","DESCRIBE","DESCRIPTOR","DETERMINISTIC","DIAGNOSTICS","DISABLE","DISALLOW","DISCONNECT","DISTINCT","DO","DOCUMENT","DOUBLE","DROP","DSSIZE","DYNAMIC","EACH","EDITPROC","ELEMENT","ELSE","ELSEIF","ENABLE","ENCODING","ENCRYPTION","END","END-EXEC","ENDING","ERASE","ESCAPE","EVERY","EXCEPTION","EXCLUDING","EXCLUSIVE","EXEC","EXECUTE","EXISTS","EXIT","EXP","EXPLAIN","EXTENDED","EXTERNAL","EXTRACT","FALSE","FENCED","FETCH","FIELDPROC","FILE","FILTER","FINAL","FIRST","FLOAT","FLOOR","FOR","FOREIGN","FREE","FULL","FUNCTION","FUSION","GENERAL","GENERATED","GET","GLOBAL","GOTO","GRANT","GRAPHIC","GROUP","GROUPING","HANDLER","HASH","HASHED_VALUE","HINT","HOLD","HOUR","HOURS","IDENTITY","IF","IMMEDIATE","IN","INCLUDING","INCLUSIVE","INCREMENT","INDEX","INDICATOR","INDICATORS","INF","INFINITY","INHERIT","INNER","INOUT","INSENSITIVE","INSERT","INT","INTEGER","INTEGRITY","INTERSECTION","INTERVAL","INTO","IS","ISOBID","ISOLATION","ITERATE","JAR","JAVA","KEEP","KEY","LABEL","LANGUAGE","LARGE","LATERAL","LC_CTYPE","LEADING","LEAVE","LEFT","LIKE","LINKTYPE","LN","LOCAL","LOCALDATE","LOCALE","LOCALTIME","LOCALTIMESTAMP","LOCATOR","LOCATORS","LOCK","LOCKMAX","LOCKSIZE","LONG","LOOP","LOWER","MAINTAINED","MATCH","MATERIALIZED","MAX","MAXVALUE","MEMBER","MERGE","METHOD","MICROSECOND","MICROSECONDS","MIN","MINUTE","MINUTES","MINVALUE","MOD","MODE","MODIFIES","MODULE","MONTH","MONTHS","MULTISET","NAN","NATIONAL","NATURAL","NCHAR","NCLOB","NEW","NEW_TABLE","NEXTVAL","NO","NOCACHE","NOCYCLE","NODENAME","NODENUMBER","NOMAXVALUE","NOMINVALUE","NONE","NOORDER","NORMALIZE","NORMALIZED","NOT","NULL","NULLIF","NULLS","NUMERIC","NUMPARTS","OBID","OCTET_LENGTH","OF","OFFSET","OLD","OLD_TABLE","ON","ONLY","OPEN","OPTIMIZATION","OPTIMIZE","OPTION","ORDER","OUT","OUTER","OVER","OVERLAPS","OVERLAY","OVERRIDING","PACKAGE","PADDED","PAGESIZE","PARAMETER","PART","PARTITION","PARTITIONED","PARTITIONING","PARTITIONS","PASSWORD","PATH","PERCENTILE_CONT","PERCENTILE_DISC","PERCENT_RANK","PIECESIZE","PLAN","POSITION","POWER","PRECISION","PREPARE","PREVVAL","PRIMARY","PRIQTY","PRIVILEGES","PROCEDURE","PROGRAM","PSID","PUBLIC","QUERY","QUERYNO","RANGE","RANK","READ","READS","REAL","RECOVERY","RECURSIVE","REF","REFERENCES","REFERENCING","REFRESH","REGR_AVGX","REGR_AVGY","REGR_COUNT","REGR_INTERCEPT","REGR_R2","REGR_SLOPE","REGR_SXX","REGR_SXY","REGR_SYY","RELEASE","RENAME","REPEAT","RESET","RESIGNAL","RESTART","RESTRICT","RESULT","RESULT_SET_LOCATOR","RETURN","RETURNS","REVOKE","RIGHT","ROLE","ROLLBACK","ROLLUP","ROUND_CEILING","ROUND_DOWN","ROUND_FLOOR","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_UP","ROUND_UP","ROUTINE","ROW","ROWNUMBER","ROWS","ROWSET","ROW_NUMBER","RRN","RUN","SAVEPOINT","SCHEMA","SCOPE","SCRATCHPAD","SCROLL","SEARCH","SECOND","SECONDS","SECQTY","SECURITY","SENSITIVE","SEQUENCE","SESSION","SESSION_USER","SIGNAL","SIMILAR","SIMPLE","SMALLINT","SNAN","SOME","SOURCE","SPECIFIC","SPECIFICTYPE","SQL","SQLEXCEPTION","SQLID","SQLSTATE","SQLWARNING","SQRT","STACKED","STANDARD","START","STARTING","STATEMENT","STATIC","STATMENT","STAY","STDDEV_POP","STDDEV_SAMP","STOGROUP","STORES","STYLE","SUBMULTISET","SUBSTRING","SUM","SUMMARY","SYMMETRIC","SYNONYM","SYSFUN","SYSIBM","SYSPROC","SYSTEM","SYSTEM_USER","TABLE","TABLESAMPLE","TABLESPACE","THEN","TIME","TIMESTAMP","TIMEZONE_HOUR","TIMEZONE_MINUTE","TO","TRAILING","TRANSACTION","TRANSLATE","TRANSLATION","TREAT","TRIGGER","TRIM","TRUE","TRUNCATE","TYPE","UESCAPE","UNDO","UNIQUE","UNKNOWN","UNNEST","UNTIL","UPPER","USAGE","USER","USING","VALIDPROC","VALUE","VARCHAR","VARIABLE","VARIANT","VARYING","VAR_POP","VAR_SAMP","VCAT","VERSION","VIEW","VOLATILE","VOLUMES","WHEN","WHENEVER","WHILE","WIDTH_BUCKET","WINDOW","WITH","WITHIN","WITHOUT","WLM","WRITE","XMLELEMENT","XMLEXISTS","XMLNAMESPACES","YEAR","YEARS"],fe=["ADD","AFTER","ALTER COLUMN","ALTER TABLE","DELETE FROM","EXCEPT","FETCH FIRST","FROM","GROUP BY","GO","HAVING","INSERT INTO","INTERSECT","LIMIT","ORDER BY","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UPDATE","VALUES","WHERE"],ve=["INTERSECT","INTERSECT ALL","MINUS","UNION","UNION ALL"],Ge=["AND","CROSS JOIN","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN"]});var K=o(I=>{"use strict";var ye=I&&I.__extends||(function(){var E=function(e,t){return E=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,T){r.__proto__=T}||function(r,T){for(var R in T)Object.prototype.hasOwnProperty.call(T,R)&&(r[R]=T[R])},E(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");E(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}})(),We=I&&I.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};I.__esModule=!0;var Fe=We(D()),Be=(function(E){ye(e,E);function e(){return E!==null&&E.apply(this,arguments)||this}return e.prototype.getTokenizerConfig=function(){return{reservedWords:ge,reservedTopLevelWords:He,reservedNewlineWords:me,reservedTopLevelWordsNoIndent:Ve,stringTypes:['""',"''","``"],openParens:["(","[","{"],closeParens:[")","]","}"],namedPlaceholderTypes:["$"],lineCommentTypes:["#","--"],specialWordChars:[]}},e})(Fe.default);I.default=Be;var ge=["ALL","ALTER","ANALYZE","AND","ANY","ARRAY","AS","ASC","BEGIN","BETWEEN","BINARY","BOOLEAN","BREAK","BUCKET","BUILD","BY","CALL","CASE","CAST","CLUSTER","COLLATE","COLLECTION","COMMIT","CONNECT","CONTINUE","CORRELATE","COVER","CREATE","DATABASE","DATASET","DATASTORE","DECLARE","DECREMENT","DELETE","DERIVED","DESC","DESCRIBE","DISTINCT","DO","DROP","EACH","ELEMENT","ELSE","END","EVERY","EXCEPT","EXCLUDE","EXECUTE","EXISTS","EXPLAIN","FALSE","FETCH","FIRST","FLATTEN","FOR","FORCE","FROM","FUNCTION","GRANT","GROUP","GSI","HAVING","IF","IGNORE","ILIKE","IN","INCLUDE","INCREMENT","INDEX","INFER","INLINE","INNER","INSERT","INTERSECT","INTO","IS","JOIN","KEY","KEYS","KEYSPACE","KNOWN","LAST","LEFT","LET","LETTING","LIKE","LIMIT","LSM","MAP","MAPPING","MATCHED","MATERIALIZED","MERGE","MISSING","NAMESPACE","NEST","NOT","NULL","NUMBER","OBJECT","OFFSET","ON","OPTION","OR","ORDER","OUTER","OVER","PARSE","PARTITION","PASSWORD","PATH","POOL","PREPARE","PRIMARY","PRIVATE","PRIVILEGE","PROCEDURE","PUBLIC","RAW","REALM","REDUCE","RENAME","RETURN","RETURNING","REVOKE","RIGHT","ROLE","ROLLBACK","SATISFIES","SCHEMA","SELECT","SELF","SEMI","SET","SHOW","SOME","START","STATISTICS","STRING","SYSTEM","THEN","TO","TRANSACTION","TRIGGER","TRUE","TRUNCATE","UNDER","UNION","UNIQUE","UNKNOWN","UNNEST","UNSET","UPDATE","UPSERT","USE","USER","USING","VALIDATE","VALUE","VALUED","VALUES","VIA","VIEW","WHEN","WHERE","WHILE","WITH","WITHIN","WORK","XOR"],He=["DELETE FROM","EXCEPT ALL","EXCEPT","EXPLAIN DELETE FROM","EXPLAIN UPDATE","EXPLAIN UPSERT","FROM","GROUP BY","HAVING","INFER","INSERT INTO","LET","LIMIT","MERGE","NEST","ORDER BY","PREPARE","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UNNEST","UPDATE","UPSERT","USE KEYS","VALUES","WHERE"],Ve=["INTERSECT","INTERSECT ALL","MINUS","UNION","UNION ALL"],me=["AND","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN","XOR"]});var x=o(O=>{"use strict";var Ye=O&&O.__extends||(function(){var E=function(e,t){return E=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,T){r.__proto__=T}||function(r,T){for(var R in T)Object.prototype.hasOwnProperty.call(T,R)&&(r[R]=T[R])},E(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");E(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}})(),Xe=O&&O.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};O.__esModule=!0;var ke=Xe(D()),w=C(),Ke=(function(E){Ye(e,E);function e(){var t=E!==null&&E.apply(this,arguments)||this;return t.tokenOverride=function(r,T){if(r.type===w.TokenTypes.RESERVED_TOP_LEVEL&&T.value&&r.value.toUpperCase()==="SET"&&T.value.toUpperCase()==="BY")return r.type=w.TokenTypes.RESERVED,r},t}return e.prototype.getTokenizerConfig=function(){return{reservedWords:we,reservedTopLevelWords:xe,reservedNewlineWords:Je,reservedTopLevelWordsNoIndent:Qe,stringTypes:['""',"N''","''","``"],openParens:["(","CASE"],closeParens:[")","END"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:[":"],lineCommentTypes:["--"],specialWordChars:["_","$","#",".","@"]}},e})(ke.default);O.default=Ke;var we=["A","ACCESSIBLE","AGENT","AGGREGATE","ALL","ALTER","ANY","ARRAY","AS","ASC","AT","ATTRIBUTE","AUTHID","AVG","BETWEEN","BFILE_BASE","BINARY_INTEGER","BINARY","BLOB_BASE","BLOCK","BODY","BOOLEAN","BOTH","BOUND","BREADTH","BULK","BY","BYTE","C","CALL","CALLING","CASCADE","CASE","CHAR_BASE","CHAR","CHARACTER","CHARSET","CHARSETFORM","CHARSETID","CHECK","CLOB_BASE","CLONE","CLOSE","CLUSTER","CLUSTERS","COALESCE","COLAUTH","COLLECT","COLUMNS","COMMENT","COMMIT","COMMITTED","COMPILED","COMPRESS","CONNECT","CONSTANT","CONSTRUCTOR","CONTEXT","CONTINUE","CONVERT","COUNT","CRASH","CREATE","CREDENTIAL","CURRENT","CURRVAL","CURSOR","CUSTOMDATUM","DANGLING","DATA","DATE_BASE","DATE","DAY","DECIMAL","DEFAULT","DEFINE","DELETE","DEPTH","DESC","DETERMINISTIC","DIRECTORY","DISTINCT","DO","DOUBLE","DROP","DURATION","ELEMENT","ELSIF","EMPTY","END","ESCAPE","EXCEPTIONS","EXCLUSIVE","EXECUTE","EXISTS","EXIT","EXTENDS","EXTERNAL","EXTRACT","FALSE","FETCH","FINAL","FIRST","FIXED","FLOAT","FOR","FORALL","FORCE","FROM","FUNCTION","GENERAL","GOTO","GRANT","GROUP","HASH","HEAP","HIDDEN","HOUR","IDENTIFIED","IF","IMMEDIATE","IN","INCLUDING","INDEX","INDEXES","INDICATOR","INDICES","INFINITE","INSTANTIABLE","INT","INTEGER","INTERFACE","INTERVAL","INTO","INVALIDATE","IS","ISOLATION","JAVA","LANGUAGE","LARGE","LEADING","LENGTH","LEVEL","LIBRARY","LIKE","LIKE2","LIKE4","LIKEC","LIMITED","LOCAL","LOCK","LONG","MAP","MAX","MAXLEN","MEMBER","MERGE","MIN","MINUTE","MLSLABEL","MOD","MODE","MONTH","MULTISET","NAME","NAN","NATIONAL","NATIVE","NATURAL","NATURALN","NCHAR","NEW","NEXTVAL","NOCOMPRESS","NOCOPY","NOT","NOWAIT","NULL","NULLIF","NUMBER_BASE","NUMBER","OBJECT","OCICOLL","OCIDATE","OCIDATETIME","OCIDURATION","OCIINTERVAL","OCILOBLOCATOR","OCINUMBER","OCIRAW","OCIREF","OCIREFCURSOR","OCIROWID","OCISTRING","OCITYPE","OF","OLD","ON","ONLY","OPAQUE","OPEN","OPERATOR","OPTION","ORACLE","ORADATA","ORDER","ORGANIZATION","ORLANY","ORLVARY","OTHERS","OUT","OVERLAPS","OVERRIDING","PACKAGE","PARALLEL_ENABLE","PARAMETER","PARAMETERS","PARENT","PARTITION","PASCAL","PCTFREE","PIPE","PIPELINED","PLS_INTEGER","PLUGGABLE","POSITIVE","POSITIVEN","PRAGMA","PRECISION","PRIOR","PRIVATE","PROCEDURE","PUBLIC","RAISE","RANGE","RAW","READ","REAL","RECORD","REF","REFERENCE","RELEASE","RELIES_ON","REM","REMAINDER","RENAME","RESOURCE","RESULT_CACHE","RESULT","RETURN","RETURNING","REVERSE","REVOKE","ROLLBACK","ROW","ROWID","ROWNUM","ROWTYPE","SAMPLE","SAVE","SAVEPOINT","SB1","SB2","SB4","SEARCH","SECOND","SEGMENT","SELF","SEPARATE","SEQUENCE","SERIALIZABLE","SHARE","SHORT","SIZE_T","SIZE","SMALLINT","SOME","SPACE","SPARSE","SQL","SQLCODE","SQLDATA","SQLERRM","SQLNAME","SQLSTATE","STANDARD","START","STATIC","STDDEV","STORED","STRING","STRUCT","STYLE","SUBMULTISET","SUBPARTITION","SUBSTITUTABLE","SUBTYPE","SUCCESSFUL","SUM","SYNONYM","SYSDATE","TABAUTH","TABLE","TDO","THE","THEN","TIME","TIMESTAMP","TIMEZONE_ABBR","TIMEZONE_HOUR","TIMEZONE_MINUTE","TIMEZONE_REGION","TO","TRAILING","TRANSACTION","TRANSACTIONAL","TRIGGER","TRUE","TRUSTED","TYPE","UB1","UB2","UB4","UID","UNDER","UNIQUE","UNPLUG","UNSIGNED","UNTRUSTED","USE","USER","USING","VALIDATE","VALIST","VALUE","VARCHAR","VARCHAR2","VARIABLE","VARIANCE","VARRAY","VARYING","VIEW","VIEWS","VOID","WHENEVER","WHILE","WITH","WORK","WRAPPED","WRITE","YEAR","ZONE"],xe=["ADD","ALTER COLUMN","ALTER TABLE","BEGIN","CONNECT BY","DECLARE","DELETE FROM","DELETE","END","EXCEPT","EXCEPTION","FETCH FIRST","FROM","GROUP BY","HAVING","INSERT INTO","INSERT","LIMIT","LOOP","MODIFY","ORDER BY","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","START WITH","UPDATE","VALUES","WHERE"],Qe=["INTERSECT","INTERSECT ALL","MINUS","UNION","UNION ALL"],Je=["AND","CROSS APPLY","CROSS JOIN","ELSE","END","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER APPLY","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN","WHEN","XOR"]});var Q=o(s=>{"use strict";var Ze=s&&s.__extends||(function(){var E=function(e,t){return E=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,T){r.__proto__=T}||function(r,T){for(var R in T)Object.prototype.hasOwnProperty.call(T,R)&&(r[R]=T[R])},E(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");E(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}})(),ze=s&&s.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};s.__esModule=!0;var be=ze(D()),je=(function(E){Ze(e,E);function e(){return E!==null&&E.apply(this,arguments)||this}return e.prototype.getTokenizerConfig=function(){return{reservedWords:$e,reservedTopLevelWords:qe,reservedNewlineWords:EE,reservedTopLevelWordsNoIndent:eE,stringTypes:['""',"N''","''","``","[]","E''"],openParens:["(","CASE"],closeParens:[")","END"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:["@",":","%","$"],lineCommentTypes:["#","--"],specialWordChars:[]}},e})(be.default);s.default=je;var $e=["ACCESSIBLE","ACTION","AGAINST","AGGREGATE","ALGORITHM","ALL","ALTER","ANALYSE","ANALYZE","AS","ASC","AUTOCOMMIT","AUTO_INCREMENT","BACKUP","BEGIN","BETWEEN","BINLOG","BOTH","CASCADE","CASE","CHANGE","CHANGED","CHARACTER SET","CHARSET","CHECK","CHECKSUM","COLLATE","COLLATION","COLUMN","COLUMNS","COMMENT","COMMIT","COMMITTED","COMPRESSED","CONCURRENT","CONSTRAINT","CONTAINS","CONVERT","COUNT","CREATE","CROSS","CURRENT_TIMESTAMP","DATABASE","DATABASES","DAY_HOUR","DAY_MINUTE","DAY_SECOND","DAY","DEFAULT","DEFINER","DELAYED","DELETE","DESC","DESCRIBE","DETERMINISTIC","DISTINCT","DISTINCTROW","DIV","DO","DROP","DUMPFILE","DUPLICATE","DYNAMIC","ELSE","ENCLOSED","END","ENGINE","ENGINES","ENGINE_TYPE","ESCAPE","ESCAPED","EVENTS","EXEC","EXECUTE","EXISTS","EXPLAIN","EXTENDED","FAST","FETCH","FIELDS","FILE","FIRST","FIXED","FLUSH","FOR","FORCE","FOREIGN","FULL","FULLTEXT","FUNCTION","GLOBAL","GRANTS","GROUP_CONCAT","HEAP","HIGH_PRIORITY","HOSTS","HOUR","HOUR_MINUTE","HOUR_SECOND","IDENTIFIED","IF","IFNULL","IGNORE","IN","INDEX","INDEXES","INFILE","INSERT","INSERT_ID","INSERT_METHOD","INTERVAL","INTO","INVOKER","IS","ISOLATION","KEY","KEYS","KILL","LAST_INSERT_ID","LEADING","LEVEL","LIKE","LINEAR","LINES","LOAD","LOCAL","LOCK","LOCKS","LOGS","LOW_PRIORITY","MARIA","MASTER","MASTER_CONNECT_RETRY","MASTER_HOST","MASTER_LOG_FILE","MATCH","MAX_CONNECTIONS_PER_HOUR","MAX_QUERIES_PER_HOUR","MAX_ROWS","MAX_UPDATES_PER_HOUR","MAX_USER_CONNECTIONS","MEDIUM","MERGE","MINUTE","MINUTE_SECOND","MIN_ROWS","MODE","MONTH","MRG_MYISAM","MYISAM","NAMES","NATURAL","NOT","NOW()","NULL","OFFSET","ON DELETE","ON UPDATE","ON","ONLY","OPEN","OPTIMIZE","OPTION","OPTIONALLY","OUTFILE","PACK_KEYS","PAGE","PARTIAL","PARTITION","PARTITIONS","PASSWORD","PRIMARY","PRIVILEGES","PROCEDURE","PROCESS","PROCESSLIST","PURGE","QUICK","RAID0","RAID_CHUNKS","RAID_CHUNKSIZE","RAID_TYPE","RANGE","READ","READ_ONLY","READ_WRITE","REFERENCES","REGEXP","RELOAD","RENAME","REPAIR","REPEATABLE","REPLACE","REPLICATION","RESET","RESTORE","RESTRICT","RETURN","RETURNS","REVOKE","RLIKE","ROLLBACK","ROW","ROWS","ROW_FORMAT","SECOND","SECURITY","SEPARATOR","SERIALIZABLE","SESSION","SHARE","SHOW","SHUTDOWN","SLAVE","SONAME","SOUNDS","SQL","SQL_AUTO_IS_NULL","SQL_BIG_RESULT","SQL_BIG_SELECTS","SQL_BIG_TABLES","SQL_BUFFER_RESULT","SQL_CACHE","SQL_CALC_FOUND_ROWS","SQL_LOG_BIN","SQL_LOG_OFF","SQL_LOG_UPDATE","SQL_LOW_PRIORITY_UPDATES","SQL_MAX_JOIN_SIZE","SQL_NO_CACHE","SQL_QUOTE_SHOW_CREATE","SQL_SAFE_UPDATES","SQL_SELECT_LIMIT","SQL_SLAVE_SKIP_COUNTER","SQL_SMALL_RESULT","SQL_WARNINGS","START","STARTING","STATUS","STOP","STORAGE","STRAIGHT_JOIN","STRING","STRIPED","SUPER","TABLE","TABLES","TEMPORARY","TERMINATED","THEN","TO","TRAILING","TRANSACTIONAL","TRIGGER","TRUE","TRUNCATE","TYPE","TYPES","UNCOMMITTED","UNIQUE","UNLOCK","UNSIGNED","USAGE","USE","USING","VARIABLES","VIEW","WHEN","WITH","WORK","WRITE","YEAR_MONTH"],qe=["ADD","AFTER","ALTER COLUMN","ALTER TABLE","CREATE OR REPLACE","DECLARE","DELETE FROM","EXCEPT","FETCH FIRST","FROM","GO","GRANT","GROUP BY","HAVING","INSERT INTO","INSERT","LIMIT","MODIFY","ORDER BY","RETURNING","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UPDATE","VALUES","WHERE"],eE=["INTERSECT ALL","INTERSECT","MINUS","UNION ALL","UNION"],EE=["AND","CROSS APPLY","CROSS JOIN","ELSE","INNER JOIN","FULL JOIN","FULL OUTER JOIN","LEFT JOIN","LEFT OUTER JOIN","NATURAL JOIN","OR","OUTER APPLY","OUTER JOIN","RENAME","RIGHT JOIN","RIGHT OUTER JOIN","JOIN","WHEN","XOR"]});var Z=o(A=>{"use strict";var U=A&&A.__importDefault||function(E){return E&&E.__esModule?E:{default:E}};A.__esModule=!0;A.tokenize=A.format=void 0;var tE=U(k()),rE=U(K()),TE=U(x()),J=U(Q()),RE=function(E,e){switch(e===void 0&&(e={}),e.language){case"db2":return new tE.default(e).format(E);case"n1ql":return new rE.default(e).format(E);case"pl/sql":return new TE.default(e).format(E);default:return new J.default(e).format(E)}};A.format=RE;var nE=function(E,e){return e===void 0&&(e={}),new J.default(e).tokenize(E)};A.tokenize=nE;A.default={format:A.format,tokenize:A.tokenize}});var z=te(Z(),1);globalThis.phpdebugbar_sqlformatter=z.default.default;})(); diff --git a/resources/widgets.css b/resources/widgets.css new file mode 100644 index 000000000..7f5ca9eaa --- /dev/null +++ b/resources/widgets.css @@ -0,0 +1,770 @@ +pre.phpdebugbar-widgets-code-block { + white-space: pre; + word-wrap: normal; + overflow: hidden; +} + pre.phpdebugbar-widgets-code-block code { + display: block; + overflow-x: auto; + overflow-y: hidden; + } + pre.phpdebugbar-widgets-code-block code.phpdebugbar-widgets-numbered-code { + padding: 5px; + line-height: normal; + } + pre.phpdebugbar-widgets-code-block ul li.phpdebugbar-widgets-highlighted-line { + font-weight: bolder; + text-decoration: underline; + } + pre.phpdebugbar-widgets-code-block ul li.phpdebugbar-widgets-highlighted-line span { + position: absolute; + background: var(--debugbar-text); + min-width: calc(100% - 85px); + margin-left: 10px; + opacity: 0.15; + } + pre.phpdebugbar-widgets-code-block ul { + position: static; + float: left; + padding: 5px; + border-right: 1px solid var(--debugbar-header-border); + text-align: right; + } + + .phpdebugbar-widgets-kvlist span.phpdebugbar-widgets-filename, + li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-filename, + table.phpdebugbar-widgets-tablevar span.phpdebugbar-widgets-filename { + display: block; + font-style: italic; + float: right; + margin-left: 8px; + color: var(--debugbar-link); + } + a.phpdebugbar-widgets-editor-link, + a.phpdebugbar-widgets-external-link { + color: var(--debugbar-link); + } + .phpdebugbar-widgets-kvlist span.phpdebugbar-widgets-filename:hover, + li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-filename:hover, + a.phpdebugbar-widgets-editor-link:hover, + a.phpdebugbar-widgets-external-link:hover { + color: var(--debugbar-hover); + } + + a.phpdebugbar-widgets-editor-link:before, + a.phpdebugbar-widgets-copy-clipboard-check:before, + a.phpdebugbar-widgets-external-link:after { + content: ""; + display: inline-block; + width: 1em; + height: 1em; + margin-left: 4px; + vertical-align: middle; + -webkit-mask-image: var(--debugbar-icon-external-link); + mask-image: var(--debugbar-icon-external-link); + -webkit-mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-size: contain; + mask-repeat: no-repeat; + mask-position: center; + background-color: currentColor; + } + +a.phpdebugbar-widgets-copy-clipboard-check:before { + margin-left: 0px; + margin-right: 4px; + -webkit-mask-image: var(--debugbar-icon-circle-check); + mask-image: var(--debugbar-icon-circle-check); +} + +table.phpdebugbar-widgets-params { + width: 70%; + margin: 10px; + border: 1px solid var(--debugbar-border); + font-family: var(--debugbar-font-mono); + font-size: 13px; + border-collapse: collapse; +} + table.phpdebugbar-widgets-params th { + font-weight: bold; + } + table.phpdebugbar-widgets-params td { + border: 1px solid var(--debugbar-border); + border-left: none ; + border-right: none; + padding: 0 5px; + } + table.phpdebugbar-widgets-params .phpdebugbar-widgets-name { + width: 20%; + font-weight: bold; + vertical-align: top; + } + +.phpdebugbar-widgets-truncated { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/* -------------------------------------- */ + +ul.phpdebugbar-widgets-list { + margin: 0; + padding: 0; + list-style: none; + font-family: var(--debugbar-font-mono); +} + ul.phpdebugbar-widgets-list li.phpdebugbar-widgets-list-item { + padding: 7px 10px; + border-bottom: 1px solid var(--debugbar-border); + position: relative; + overflow: hidden; + } + +/* -------------------------------------- */ + +div.phpdebugbar-widgets-messages { + position: relative; + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; +} + div.phpdebugbar-widgets-messages ul.phpdebugbar-widgets-list { + padding-bottom: 45px; + flex: 1; + overflow-y: auto; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value { + display: flex; + align-items: center; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value:before { + margin-right: 8px; + font-family: system-ui, sans-serif; + font-size: 1.25em; + line-height: 1; + display: inline-flex; /* ensures perfect centering */ + align-items: center; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-success { + color: #28a745; + } + .phpdebugbar[data-theme='dark'] div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-success { + color: #56DB3A; + } + + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-success:before { + content: "βœ“"; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-alert:before { + content: "β„Ή"; + color: #cbcf38; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-debug:before { + color: #78d79a; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-warning:before, + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-emergency:before, + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-notice:before { + content: "⚠"; + color: #ecb03d; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-error, + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-critical { + color: red; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-error:before, + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-value.phpdebugbar-widgets-critical:before { + content: "βœ–"; + } + .phpdebugbar-widgets-params .phpdebugbar-widgets-value pre.sf-dump, + dl.phpdebugbar-widgets-kvlist dd.phpdebugbar-widgets-value pre.sf-dump, + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item pre.sf-dump { + display: inline-block !important; + padding-top: 0px; + padding-left: 0px; + padding-bottom: 0px; + } + dl.phpdebugbar-widgets-kvlist dd.phpdebugbar-widgets-value pre.sf-dump { + max-width: calc(100% - 5px); /* substract right padding */ + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-collector, + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-label { + float: right; + font-size: 12px; + padding: 2px 4px; + color: #888; + margin: 0 2px; + text-decoration: none; + text-shadow: none; + background: none; + font-weight: normal; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-context-count { + float: right; + font-size: 12px; + padding: 2px 4px; + color: #888; + margin: 0 2px; + text-decoration: none; + text-shadow: none; + background: none; + font-weight: normal; + display: inline-flex; + align-items: center; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-context-count:before { + content: ""; + display: inline-block; + width: 1em; + height: 1em; + margin-right: 4px; + -webkit-mask-image: var(--debugbar-icon-table); + mask-image: var(--debugbar-icon-table); + -webkit-mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-size: contain; + mask-repeat: no-repeat; + mask-position: center; + background-color: currentColor; + } + div.phpdebugbar-widgets-messages li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-collector { + color: #555; + font-style: italic; + } + div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar { + position: relative; + flex-shrink: 0; + width: 100%; + background: var(--debugbar-header); + color: var(--debugbar-text); + border-top: 1px solid var(--debugbar-border); + border-bottom: 0px; + height: 20px; + padding: 4px 0px 4px; + } + div.phpdebugbar-widgets-messages li .phpdebugbar-widgets-label-called-from { + float: right; + color: var(--debugbar-text-muted); + padding-left: 5px; + border-bottom: 1px dotted var(--debugbar-border); + } + div.phpdebugbar-widgets-messages li .phpdebugbar-widgets-label-called-from:before { + content: ""; + display: inline-block; + width: 1em; + height: 1em; + margin-right: 4px; + vertical-align: middle; + -webkit-mask-image: var(--debugbar-icon-link); + mask-image: var(--debugbar-icon-link); + -webkit-mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-size: contain; + mask-repeat: no-repeat; + mask-position: center; + background-color: currentColor; + } + div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar input { + border: 0; + margin: 0; + margin-left: 7px; + width: 30%; + box-shadow: none; + border-radius: 3px; + padding: 2px 6px; + height: 15px; + } + div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar input:focus { + outline: none; + } + div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter { + float: right; + font-size: 12px; + padding: 2px 4px; + background: #7cacd5; + margin: 0 2px; + border-radius: 4px; + color: var(--debugbar-background); + text-decoration: none; + } + div.phpdebugbar-widgets-messages div.phpdebugbar-widgets-toolbar a.phpdebugbar-widgets-filter.phpdebugbar-widgets-excluded { + background: var(--debugbar-active); + color: var(--debugbar-text-muted); + } + +/* -------------------------------------- */ + +dl.phpdebugbar-widgets-kvlist { + margin: 0; + display: grid; + grid-template-columns: minmax(160px, 15%) minmax(0, 1fr); +} + dl.phpdebugbar-widgets-kvlist dt { + grid-column: 1; + min-width: 0; + padding: 5px 10px; + border-top: 1px solid var(--debugbar-border); + font-weight: bold; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + dl.phpdebugbar-widgets-kvlist dd { + grid-column: 2; + margin: 0; + padding: 5px 10px; + border-top: 1px solid var(--debugbar-border); + cursor: pointer; + min-height: 17px; + overflow-wrap: anywhere; + overflow-x: auto; + } + +/* -------------------------------------- */ + +dl.phpdebugbar-widgets-varlist, +dl.phpdebugbar-widgets-jsonvarlist, +dl.phpdebugbar-widgets-htmlvarlist { + font-family: var(--debugbar-font-mono); +} + dl.phpdebugbar-widgets-jsonvarlist dd, + dl.phpdebugbar-widgets-htmlvarlist dd{ + cursor: initial; + } + +/* -------------------------------------- */ + +ul.phpdebugbar-widgets-timeline { + margin: 0; + padding: 0; + list-style: none; +} + ul.phpdebugbar-widgets-timeline .phpdebugbar-widgets-measure { + height: 20px; + position: relative; + border: none; + display: block; + } + ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-label, + ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-collector { + position: absolute; + font-size: 12px; + font-family: var(--debugbar-font-mono); + color: var(--debugbar-text); + top: 4px; + left: 5px; + background: none; + text-shadow: none; + font-weight: normal; + white-space: pre; + } + ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-collector { + left: initial; + right: 5px; + } + ul.phpdebugbar-widgets-timeline li span.phpdebugbar-widgets-value { + display: block; + position: absolute; + height: calc(100% - 4px); + background-color: var(--debugbar-accent); + border-bottom: 2px solid var(--debugbar-accent-border); + top: 2px; + border-radius: 3px; + min-width: 2px; + } + + +/* -------------------------------------- */ + +div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item { + cursor: pointer; +} + div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-message { + display: block; + color: red; + } + + div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-type { + display: block; + position: absolute; + right: 4px; + top: 4px; + font-weight: bold; + } + + div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item pre.phpdebugbar-widgets-file { + margin: 10px; + padding: 5px; + border: 1px solid var(--debugbar-border); + font-family: var(--debugbar-font-mono); + } + + div.phpdebugbar-widgets-exceptions li.phpdebugbar-widgets-list-item span.phpdebugbar-widgets-filename { + float: none; + } + +div.phpdebugbar[data-theme='dark'] code.phpdebugbar-widgets-sql, +div.phpdebugbar[data-theme='dark'] .phpdebugbar-widgets-name, +div.phpdebugbar[data-theme='dark'] .phpdebugbar-widgets-key, +div.phpdebugbar[data-theme='dark'] .phpdebugbar-widgets-success > pre.sf-dump > .sf-dump-note { + color: #fdfd96; +} + +table.phpdebugbar-widgets-tablevar { + width: 100%; + table-layout: auto; + font-size: 1em; +} + +table.phpdebugbar-widgets-tablevar td:first-child { + width: 150px; + white-space: nowrap; + font-family: var(--debugbar-font-mono); +} + +table.phpdebugbar-widgets-tablevar td.phpdebugbar-widgets-editor { + width: 5%; + white-space: nowrap; + text-align: right; +} + +table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-header td, +table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-summary td { + font-weight: bold; +} + +table.phpdebugbar-widgets-tablevar td { + padding: 2px 4px; + border-bottom: 1px solid var(--debugbar-border); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: normal; +} + +table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-header td, +table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-summary td { + position: sticky; + inset-inline-start: 0px; + background: var(--debugbar-background); + border-bottom: none; + z-index: 1; + top: 0; + bottom: 0; +} + +table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-header td::after, +table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-summary td::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 1px; + background-color: var(--debugbar-border); +} + +table.phpdebugbar-widgets-tablevar tr.phpdebugbar-widgets-summary td::after { + bottom: auto; + top: 0; +} + +div.phpdebugbar span.phpdebugbar-widgets-badge { + margin: 0 5px 0 8px; + font-size: 11px; + line-height: 14px; + padding: 0 6px; + background: var(--debugbar-badge-active); + border-radius: 4px; + color: var(--debugbar-badge-active-text); + font-weight: normal; + text-shadow: none; + vertical-align: middle; +} + + +/* Dataset Switcher Widget --------------------------------*/ + +.phpdebugbar .phpdebugbar-widgets-datasets-switcher-widget { + position: relative; + float: right; + display: flex; + padding: 0 !important; + margin: 0 !important; + height: 32px; + align-items: center; +} + +.phpdebugbar .phpdebugbar-widgets-datasets-badge { + position: relative; + display: flex; + align-items: center; + gap: 6px; + padding: 0 10px; + height: 32px; + background: var(--debugbar-header); + color: var(--debugbar-header-text); + cursor: pointer; + font-size: 12px; + line-height: normal; + transition: background-color 0.15s; + font-family: var(--debugbar-font-sans); + border-right: 1px solid var(--debugbar-header-border); +} + +.phpdebugbar .phpdebugbar-widgets-datasets-badge:hover { + background: var(--debugbar-active); +} + +.phpdebugbar .phpdebugbar-widgets-datasets-badge-count { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 18px; + height: 18px; + padding: 0 5px; + background: var(--debugbar-badge); + color: var(--debugbar-badge-text); + border-radius: 9px; + font-weight: 600; + font-size: 11px; +} + +.phpdebugbar .phpdebugbar-widgets-datasets-badge-count[hidden] { + display: none; +} + +.phpdebugbar .phpdebugbar-widgets-datasets-badge-url { + max-width: 250px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-family: var(--debugbar-font-mono); +} + +/* Dropdown panel */ +.phpdebugbar-widgets-datasets-panel { + position: fixed; + width: 600px; + background: var(--debugbar-background); + border: 1px solid var(--debugbar-border); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + overflow: hidden; + z-index: 100000001; +} + +.phpdebugbar-widgets-datasets-panel-toolbar { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 10px; + background: var(--debugbar-background-alt); + border-bottom: 1px solid var(--debugbar-border); + font-size: 12px; + font-family: var(--debugbar-font-sans); +} + +.phpdebugbar-widgets-datasets-autoshow { + display: flex; + align-items: center; + gap: 4px; + cursor: pointer; + color: var(--debugbar-text); + white-space: nowrap; + font-family: var(--debugbar-font-sans); +} + +.phpdebugbar-widgets-datasets-autoshow input[type="checkbox"] { + cursor: pointer; + margin: 0; +} + +.phpdebugbar-widgets-datasets-clear-btn, +.phpdebugbar-widgets-datasets-showall-btn { + color: var(--debugbar-link); + text-decoration: none; + cursor: pointer; + white-space: nowrap; + font-family: var(--debugbar-font-sans); +} + +.phpdebugbar-widgets-datasets-clear-btn:hover, +.phpdebugbar-widgets-datasets-showall-btn:hover { + color: var(--debugbar-hover); + text-decoration: underline; +} + +.phpdebugbar-widgets-datasets-refresh-btn { + color: var(--debugbar-text-muted); + text-decoration: none; + cursor: pointer; + white-space: nowrap; + font-size: 14px; + display: inline-flex; + align-items: center; +} + +.phpdebugbar-widgets-datasets-refresh-btn[hidden] { + display: none; +} +.phpdebugbar-widgets-datasets-refresh-btn:hover { + color: var(--debugbar-text); +} + +.phpdebugbar-widgets-datasets-refresh-btn.phpdebugbar-widgets-active { + color: var(--debugbar-text); +} + +.phpdebugbar-widgets-datasets-refresh-btn.phpdebugbar-widgets-active i { + animation: phpdebugbar-spin 2s linear infinite; +} + +@keyframes phpdebugbar-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(-360deg); + } +} + +.phpdebugbar-widgets-datasets-search { + flex: 1; + padding: 3px 8px; + font-size: 11px; + min-width: 120px; + border: 1px solid var(--debugbar-border); + background: var(--debugbar-background); + color: var(--debugbar-text); + border-radius: 2px; + font-family: var(--debugbar-font-sans); +} + +.phpdebugbar-widgets-datasets-list { + max-height: 300px; + overflow-y: auto; +} + +.phpdebugbar-widgets-datasets-list-item { + display: grid; + grid-template-columns: 45px 50px 1fr auto auto auto; + gap: 6px; + padding: 5px 10px; + border-bottom: 1px solid var(--debugbar-border); + cursor: pointer; + transition: background-color 0.1s; + align-items: center; + font-size: 11px; +} + +.phpdebugbar-widgets-datasets-list-item[hidden] { + display: none; +} + +.phpdebugbar-widgets-datasets-list-item:hover { + background: var(--debugbar-background-alt); +} + +.phpdebugbar-widgets-datasets-list-item.phpdebugbar-widgets-active { + background: var(--debugbar-active); + font-weight: 500; +} + +.phpdebugbar-widgets-datasets-item-nb { + color: var(--debugbar-text-muted); + font-weight: 600; + font-family: var(--debugbar-font-mono); +} + +.phpdebugbar-widgets-datasets-item-copy-id { + cursor: pointer; + color: var(--debugbar-text-muted); + display: inline-flex; + align-items: center; + margin-right: -4px; + position: relative; +} + +.phpdebugbar-widgets-datasets-item-copy-id i { + font-size: 12px; +} + +.phpdebugbar-widgets-datasets-item-copy-id:hover { + color: var(--debugbar-text); +} + +.phpdebugbar-widgets-datasets-item-copy-id.phpdebugbar-widgets-copied { + color: var(--debugbar-success, #28a745); +} + +.phpdebugbar-widgets-datasets-item-time { + color: var(--debugbar-text-muted); + font-family: var(--debugbar-font-mono); +} + +.phpdebugbar-widgets-datasets-item-request { + display: flex; + gap: 6px; + align-items: center; + overflow: hidden; +} + +.phpdebugbar-widgets-datasets-item-method { + padding: 1px 5px; + background: var(--debugbar-badge); + color: var(--debugbar-badge-text); + border-radius: 2px; + font-weight: 600; + font-family: var(--debugbar-font-mono); + flex-shrink: 0; +} + +.phpdebugbar-widgets-datasets-item-url { + color: var(--debugbar-text); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-family: var(--debugbar-font-mono); +} + +.phpdebugbar-widgets-datasets-item-suffix { + color: var(--debugbar-text-muted); + font-family: var(--debugbar-font-mono); + flex-shrink: 0; +} + +.phpdebugbar-widgets-datasets-item-badges { + display: inline-flex; + gap: 4px; + align-items: center; + flex-wrap: wrap; +} + +.phpdebugbar-widgets-datasets-item-badge { + display: inline-flex; + align-items: center; + gap: 2px; + padding: 1px 4px; + background: var(--debugbar-badge); + color: var(--debugbar-badge-text); + border-radius: 2px; + font-size: 10px; + font-weight: 600; + cursor: pointer; + transition: background-color 0.1s; +} + +.phpdebugbar-widgets-datasets-item-badge:hover { + background: var(--debugbar-badge-active); + color: var(--debugbar-badge-active-text); +} + +.phpdebugbar-widgets-datasets-item-badge i { + width: 12px; + height: 12px; +} diff --git a/resources/widgets.js b/resources/widgets.js new file mode 100644 index 000000000..55cc07d8f --- /dev/null +++ b/resources/widgets.js @@ -0,0 +1,1519 @@ +/* global phpdebugbar_hljs */ +(function () { + /** + * @namespace + */ + PhpDebugBar.Widgets = {}; + + const csscls = PhpDebugBar.utils.makecsscls('phpdebugbar-widgets-'); + + /** + * Replaces spaces with   and line breaks with
+ * + * @param {string} text + * @return {string} + */ + const htmlize = PhpDebugBar.Widgets.htmlize = function (text) { + return text.replace(/\n/g, '
').replace(/\s/g, ' '); + }; + + /** + * Renders any value as a DOM element. Handles dump objects (with "_sd" + * marker), and plain HTML/scalar strings. + * + * @param {string|object} value + * @return {HTMLElement|string} + */ + let dumpRenderer; + const renderValue = PhpDebugBar.Widgets.renderValue = function (value, prettify) { + // Arrays and objects β†’ render as interactive tree + if (value && typeof value === 'object') { + if (!dumpRenderer) { + dumpRenderer = new PhpDebugBar.Widgets.VarDumpRenderer(); + } + return dumpRenderer.render(value); + } + + if (typeof value !== 'string') { + if (prettify) { + return htmlize(JSON.stringify(value, undefined, 2)); + } + return JSON.stringify(value); + } + + return value; + }; + + PhpDebugBar.Widgets.renderValueInto = function (el, value, prettify) { + const rendered = renderValue(value, prettify); + if (rendered instanceof Node) { + el.append(rendered); + } else { + el.insertAdjacentHTML('beforeend', rendered); + } + }; + + /** + * Creates html editor link span + * + * @param {Object} value + * @return {HTMLElement} + */ + const editorLink = PhpDebugBar.Widgets.editorLink = function (value) { + const linkWrapper = document.createElement('span'), line = value.line ? `#${value.line}` : ''; + linkWrapper.classList.add(csscls('filename')); + linkWrapper.textContent = value.filename + line; + if (value.path) { + linkWrapper.setAttribute('title', value.path + line); + linkWrapper.addEventListener('click', (event) => { + event.stopPropagation(); + event.preventDefault(); + if (window.getSelection().type === 'Range') { + return ''; + } + copyToClipboard(value.path).then(success => { + if (!success) return; + const icon = document.createElement('a'); + icon.classList.add(csscls('copy-clipboard-check')); + linkWrapper.prepend(icon); + setTimeout(() => { + linkWrapper.removeChild(icon); + }, 2000); + }); + }); + } + + if (value.url) { + const link = document.createElement('a'); + link.classList.add(csscls('editor-link')); + link.setAttribute(link.ajax ? 'title' : 'href', value.url); + link.addEventListener('click', (event) => { + event.stopPropagation(); + if (value.ajax) { + fetch(stmt.xdebug_link.url); + event.preventDefault(); + } + }); + linkWrapper.append(link); + } + + return linkWrapper; + }; + + const copyToClipboard = PhpDebugBar.Widgets.copyToClipboard = async function (input) { + const text = input instanceof Element ? input.innerText : input; + if (navigator.clipboard && window.isSecureContext) { + try { + await navigator.clipboard.writeText(text); + return true; + } catch (err) {} + } + + let success = false; + const textarea = document.createElement("textarea"); + textarea.value = text; + textarea.style.position = "fixed"; + textarea.style.left = "-9999px"; + textarea.style.top = "-9999px"; + + document.body.appendChild(textarea); + try { + textarea.focus(); + textarea.select(); + textarea.setSelectionRange(0, 99999); + success = document.execCommand("copy"); + } catch (err) {} + + document.body.removeChild(textarea); + return success; + } + + /** + * Highlights a block of code + * + * @param {string} code + * @param {string|null} lang + * @return {string} + */ + const highlight = PhpDebugBar.Widgets.highlight = function (code, lang) { + if (typeof phpdebugbar_hljs === 'undefined') { + return htmlize(code); + } + + const hljs = phpdebugbar_hljs; + if (lang && hljs.getLanguage(lang)) { + return hljs.highlight(code, { language: lang }).value; + } + + return hljs.highlightAuto(code).value; + }; + + /** + * Creates a
 element with a block of code
+     *
+     * @param  {string} code
+     * @param  {string} lang
+     * @param  {number} [firstLineNumber] If provided, shows line numbers beginning with the given value.
+     * @param  {number} [highlightedLine] If provided, the given line number will be highlighted.
+     * @return {string}
+     */
+    const createCodeBlock = PhpDebugBar.Widgets.createCodeBlock = function (code, lang, firstLineNumber, highlightedLine) {
+        const pre = document.createElement('pre');
+        pre.classList.add(csscls('code-block'));
+
+        // Add a newline to prevent  element from vertically collapsing too far if the last
+        // code line was empty: that creates problems with the horizontal scrollbar being
+        // incorrectly positioned - most noticeable when line numbers are shown.
+        const codeElement = document.createElement('code');
+        codeElement.innerHTML = highlight(`${code}\n`, lang);
+        pre.append(codeElement);
+
+        // Show line numbers in a list
+        if (!Number.isNaN(Number.parseFloat(firstLineNumber))) {
+            const lineCount = code.split('\n').length;
+            const lineNumbers = document.createElement('ul');
+            pre.prepend(lineNumbers);
+            const children = Array.from(pre.children);
+            for (const child of children) {
+                child.classList.add(csscls('numbered-code'));
+            }
+            for (let i = firstLineNumber; i < firstLineNumber + lineCount; i++) {
+                const li = document.createElement('li');
+                li.textContent = i;
+                lineNumbers.append(li);
+
+                // Add a span with a special class if we are supposed to highlight a line.
+                if (highlightedLine === i) {
+                    li.classList.add(csscls('highlighted-line'));
+                    const span = document.createElement('span');
+                    span.innerHTML = ' ';
+                    li.append(span);
+                }
+            }
+        }
+
+        return pre;
+    };
+
+    const { getDictValue } = PhpDebugBar.utils;
+
+    // ------------------------------------------------------------------
+    // Generic widgets
+    // ------------------------------------------------------------------
+
+    /**
+     * Displays array element in a