mirror of
https://github.com/php-flasher/php-flasher.git
synced 2026-03-31 15:07:47 +01:00
chore: update the doc and improve phpstan annotations
This commit is contained in:
@@ -1,4 +1,10 @@
|
||||
--ignore-dir=vendor
|
||||
--ignore-dir=yoeunes
|
||||
--ignore-dir=node_modules
|
||||
|
||||
--ignore-dir=demo/laravel/vendor
|
||||
--ignore-dir=demo/symfony/vendor
|
||||
--ignore-dir=.cache
|
||||
--ignore-dir=docs/.jekyll-cache
|
||||
--ignore-dir=docs/_site
|
||||
--ignore-dir=docs/node_modules
|
||||
--ignore-dir=docs/dist
|
||||
|
||||
@@ -1,169 +0,0 @@
|
||||
name: 🧪 Run Tests & 🛠️ Static Analysis
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- 2.x
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: '0 0 * * *' # Daily at midnight
|
||||
|
||||
jobs:
|
||||
static-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php: [ 8.2 ]
|
||||
|
||||
name: 🐘 PHP ${{ matrix.php }} Static Analysis
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🔧 Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
coverage: none
|
||||
|
||||
- name: 🚚 Cache Composer Dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.composer/cache
|
||||
key: ${{ runner.os }}-composer-${{ matrix.php }}-${{ hashFiles('composer.json') }}
|
||||
restore-keys: ${{ runner.os }}-composer-${{ matrix.php }}-
|
||||
|
||||
- name: 📦 Install Dependencies
|
||||
run: |
|
||||
composer config --global allow-plugins true
|
||||
composer install
|
||||
|
||||
- name: 🧹 Run PHP CS Fixer (Code Style)
|
||||
run: vendor/bin/php-cs-fixer fix --dry-run
|
||||
|
||||
- name: 🔍 Run PHPStan (Static Analysis)
|
||||
run: vendor/bin/phpstan analyse
|
||||
|
||||
- name: 🚀 Run PHPLint (Syntax Check)
|
||||
run: vendor/bin/phplint
|
||||
|
||||
prime-test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { php: 8.4, phpunit: 10.5.* }
|
||||
- { php: 8.3, phpunit: 10.5.* }
|
||||
- { php: 8.2, phpunit: 10.5.* }
|
||||
|
||||
name: 🐘 PHP ${{ matrix.php }}
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🔧 Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
coverage: none
|
||||
|
||||
- name: 🚚 Cache dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.composer/cache
|
||||
key: ${{ runner.os }}-composer-${{ matrix.php }}-${{ hashFiles('composer.json') }}
|
||||
restore-keys: ${{ runner.os }}-composer-${{ matrix.php }}-
|
||||
|
||||
- name: 📦 Install dependencies
|
||||
run: |
|
||||
sed -i '/"require": {/,/},/d; /"require-dev": {/,/},/d' composer.json
|
||||
composer config --global allow-plugins true
|
||||
composer require "phpunit/phpunit:${{ matrix.phpunit }}" "mockery/mockery" "psr/container" --no-interaction --no-update
|
||||
composer update --prefer-lowest -W
|
||||
|
||||
- name: ✅ Execute tests
|
||||
run: vendor/bin/phpunit --testsuite prime
|
||||
|
||||
symfony-test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { symfony: 7.1.*, php: 8.4, phpunit: 10.5.* }
|
||||
- { symfony: 7.1.*, php: 8.3, phpunit: 10.5.* }
|
||||
- { symfony: 7.0.*, php: 8.2, phpunit: 10.5.* }
|
||||
|
||||
name: 🌉 Symfony ${{ matrix.symfony }} PHP ${{ matrix.php }}
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🔧 Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
coverage: none
|
||||
|
||||
- name: 🚚 Cache dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.composer/cache
|
||||
key: ${{ runner.os }}-composer-${{ matrix.php }}-${{ hashFiles('composer.json') }}
|
||||
restore-keys: ${{ runner.os }}-composer-${{ matrix.php }}-
|
||||
|
||||
- name: 📦 Install dependencies
|
||||
run: |
|
||||
sed -i '/"require": {/,/},/d; /"require-dev": {/,/},/d' composer.json
|
||||
composer config --global allow-plugins true
|
||||
composer config extra.symfony.require "${{ matrix.symfony }}"
|
||||
composer require "symfony/config:${{ matrix.symfony }}" "symfony/console:${{ matrix.symfony }}" "symfony/dependency-injection:${{ matrix.symfony }}" "symfony/framework-bundle:${{ matrix.symfony }}" "symfony/http-kernel:${{ matrix.symfony }}" "symfony/translation:${{ matrix.symfony }}" "symfony/twig-bundle:${{ matrix.symfony }}" "phpunit/phpunit:${{ matrix.phpunit }}" "mockery/mockery" "psr/container" "monolog/monolog" --no-interaction --no-update
|
||||
composer update --prefer-lowest -W
|
||||
|
||||
- name: ✅ Execute tests
|
||||
run: vendor/bin/phpunit --testsuite symfony
|
||||
|
||||
laravel-test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { laravel: 11.*, testbench: 9.*, php: 8.3, phpunit: 10.5.* }
|
||||
- { laravel: 11.*, testbench: 9.*, php: 8.2, phpunit: 10.5.* }
|
||||
|
||||
name: 🏗 Laravel ${{ matrix.laravel }} PHP ${{ matrix.php }}
|
||||
|
||||
steps:
|
||||
- name: 📥 Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🔧 Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: fileinfo
|
||||
coverage: none
|
||||
|
||||
- name: 🚚 Cache dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.composer/cache
|
||||
key: ${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
|
||||
restore-keys: ${{ matrix.php }}-composer
|
||||
|
||||
- name: 📦 Install dependencies
|
||||
run: |
|
||||
sed -i '/\"require\": {/,/},/d; /\"require-dev\": {/,/},/d' composer.json
|
||||
composer config --global allow-plugins true
|
||||
composer require "laravel/framework:${{ matrix.laravel }}" "phpunit/phpunit:${{ matrix.phpunit }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update
|
||||
composer update --prefer-lowest -W
|
||||
|
||||
- name: ✅ Execute tests
|
||||
run: vendor/bin/phpunit --testsuite laravel
|
||||
+9
-9
@@ -26,19 +26,19 @@
|
||||
"require-dev": {
|
||||
"illuminate/routing": "^11.0",
|
||||
"illuminate/support": "^11.0",
|
||||
"larastan/larastan": "^2.9.2",
|
||||
"larastan/larastan": "^2.9.5",
|
||||
"laravel/octane": "^2.3",
|
||||
"livewire/livewire": "^3.3",
|
||||
"mockery/mockery": "^1.6.10",
|
||||
"orchestra/testbench": "^9.0.1",
|
||||
"overtrue/phplint": "^9.1.2",
|
||||
"php-cs-fixer/shim": "^3.52.1",
|
||||
"phpstan/phpstan": "^1.10.63",
|
||||
"mockery/mockery": "^1.6.11",
|
||||
"orchestra/testbench": "^9.0.4",
|
||||
"overtrue/phplint": "^9.2.0",
|
||||
"php-cs-fixer/shim": "^3.54.0",
|
||||
"phpstan/phpstan": "^1.10.67",
|
||||
"phpstan/phpstan-mockery": "^1.1.2",
|
||||
"phpstan/phpstan-symfony": "^1.3.9",
|
||||
"phpstan/phpstan-symfony": "^1.3.12",
|
||||
"phpunit/phpunit": "^10.5.13",
|
||||
"psr/container": "^1.1|^2.0",
|
||||
"rector/rector": "^1.0.3",
|
||||
"rector/rector": "^1.0.4",
|
||||
"rector/swiss-knife": "^0.2.2",
|
||||
"symfony/config": "^7.0",
|
||||
"symfony/console": "^7.0",
|
||||
@@ -48,7 +48,7 @@
|
||||
"symfony/translation": "^7.0",
|
||||
"symfony/twig-bundle": "^7.0",
|
||||
"symfony/ux-twig-component": "^2.14",
|
||||
"symplify/monorepo-builder": "^11.2"
|
||||
"symplify/monorepo-builder": "^11.2.20"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
||||
Generated
+111
-100
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "ca255ba6b69a66b542d306bca711b866",
|
||||
"content-hash": "fd34ba826b8c68895ffbd2154f10c3a7",
|
||||
"packages": [],
|
||||
"packages-dev": [
|
||||
{
|
||||
@@ -1307,16 +1307,16 @@
|
||||
},
|
||||
{
|
||||
"name": "larastan/larastan",
|
||||
"version": "v2.9.2",
|
||||
"version": "v2.9.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/larastan/larastan.git",
|
||||
"reference": "a79b46b96060504b400890674b83f66aa7f5db6d"
|
||||
"reference": "101f1a4470f87326f4d3995411d28679d8800abe"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/larastan/larastan/zipball/a79b46b96060504b400890674b83f66aa7f5db6d",
|
||||
"reference": "a79b46b96060504b400890674b83f66aa7f5db6d",
|
||||
"url": "https://api.github.com/repos/larastan/larastan/zipball/101f1a4470f87326f4d3995411d28679d8800abe",
|
||||
"reference": "101f1a4470f87326f4d3995411d28679d8800abe",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1329,15 +1329,15 @@
|
||||
"illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"php": "^8.0.2",
|
||||
"phpmyadmin/sql-parser": "^5.8.2",
|
||||
"phpstan/phpstan": "^1.10.50"
|
||||
"phpmyadmin/sql-parser": "^5.9.0",
|
||||
"phpstan/phpstan": "^1.10.66"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^12.0",
|
||||
"nikic/php-parser": "^4.17.1",
|
||||
"orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.0",
|
||||
"orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.0",
|
||||
"phpunit/phpunit": "^9.6.13 || ^10.5"
|
||||
"nikic/php-parser": "^4.19.1",
|
||||
"orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2",
|
||||
"orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3",
|
||||
"phpunit/phpunit": "^9.6.13 || ^10.5.16"
|
||||
},
|
||||
"suggest": {
|
||||
"orchestra/testbench": "Using Larastan for analysing a package needs Testbench"
|
||||
@@ -1385,7 +1385,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/larastan/larastan/issues",
|
||||
"source": "https://github.com/larastan/larastan/tree/v2.9.2"
|
||||
"source": "https://github.com/larastan/larastan/tree/v2.9.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1405,20 +1405,20 @@
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2024-02-27T03:16:03+00:00"
|
||||
"time": "2024-04-16T19:13:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v11.0.3",
|
||||
"version": "v11.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "efead50a4470068abe47f56e3488a08158039dc3"
|
||||
"reference": "4a9195f68b529b20fe01e24864f99991459c48d4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/efead50a4470068abe47f56e3488a08158039dc3",
|
||||
"reference": "efead50a4470068abe47f56e3488a08158039dc3",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/4a9195f68b529b20fe01e24864f99991459c48d4",
|
||||
"reference": "4a9195f68b529b20fe01e24864f99991459c48d4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1521,7 +1521,7 @@
|
||||
"league/flysystem-sftp-v3": "^3.0",
|
||||
"mockery/mockery": "^1.6",
|
||||
"nyholm/psr7": "^1.2",
|
||||
"orchestra/testbench-core": "^9.0",
|
||||
"orchestra/testbench-core": "^9.0.6",
|
||||
"pda/pheanstalk": "^5.0",
|
||||
"phpstan/phpstan": "^1.4.7",
|
||||
"phpunit/phpunit": "^10.5|^11.0",
|
||||
@@ -1610,7 +1610,7 @@
|
||||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2024-03-12T19:22:44+00:00"
|
||||
"time": "2024-03-26T15:17:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/octane",
|
||||
@@ -2292,16 +2292,16 @@
|
||||
},
|
||||
{
|
||||
"name": "mockery/mockery",
|
||||
"version": "1.6.10",
|
||||
"version": "1.6.11",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mockery/mockery.git",
|
||||
"reference": "47065d1be1fa05def58dc14c03cf831d3884ef0b"
|
||||
"reference": "81a161d0b135df89951abd52296adf97deb0723d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mockery/mockery/zipball/47065d1be1fa05def58dc14c03cf831d3884ef0b",
|
||||
"reference": "47065d1be1fa05def58dc14c03cf831d3884ef0b",
|
||||
"url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d",
|
||||
"reference": "81a161d0b135df89951abd52296adf97deb0723d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2371,7 +2371,7 @@
|
||||
"security": "https://github.com/mockery/mockery/security/advisories",
|
||||
"source": "https://github.com/mockery/mockery"
|
||||
},
|
||||
"time": "2024-03-19T16:15:45+00:00"
|
||||
"time": "2024-03-21T18:34:15+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
@@ -3074,24 +3074,24 @@
|
||||
},
|
||||
{
|
||||
"name": "orchestra/testbench",
|
||||
"version": "v9.0.1",
|
||||
"version": "v9.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/orchestral/testbench.git",
|
||||
"reference": "30640d88b173f9ab44341a282260993f454ed187"
|
||||
"reference": "1fe2e613fa4b01f4bb4dafdceb4aae766363937e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/orchestral/testbench/zipball/30640d88b173f9ab44341a282260993f454ed187",
|
||||
"reference": "30640d88b173f9ab44341a282260993f454ed187",
|
||||
"url": "https://api.github.com/repos/orchestral/testbench/zipball/1fe2e613fa4b01f4bb4dafdceb4aae766363937e",
|
||||
"reference": "1fe2e613fa4b01f4bb4dafdceb4aae766363937e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"composer-runtime-api": "^2.2",
|
||||
"fakerphp/faker": "^1.23",
|
||||
"laravel/framework": "^11.0",
|
||||
"laravel/framework": "^11.1",
|
||||
"mockery/mockery": "^1.6",
|
||||
"orchestra/testbench-core": "^9.0.6",
|
||||
"orchestra/testbench-core": "^9.0.13",
|
||||
"orchestra/workbench": "^9.0",
|
||||
"php": "^8.2",
|
||||
"phpunit/phpunit": "^10.5 || ^11.0.1",
|
||||
@@ -3123,22 +3123,22 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/orchestral/testbench/issues",
|
||||
"source": "https://github.com/orchestral/testbench/tree/v9.0.1"
|
||||
"source": "https://github.com/orchestral/testbench/tree/v9.0.4"
|
||||
},
|
||||
"time": "2024-03-19T13:04:45+00:00"
|
||||
"time": "2024-04-16T09:56:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "orchestra/testbench-core",
|
||||
"version": "v9.0.6",
|
||||
"version": "v9.0.13",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/orchestral/testbench-core.git",
|
||||
"reference": "ea532af82da288d363b7dc7c96edae6bbb329efe"
|
||||
"reference": "1e4d35372c6ae8158572b4476e19c394e6b640e4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/orchestral/testbench-core/zipball/ea532af82da288d363b7dc7c96edae6bbb329efe",
|
||||
"reference": "ea532af82da288d363b7dc7c96edae6bbb329efe",
|
||||
"url": "https://api.github.com/repos/orchestral/testbench-core/zipball/1e4d35372c6ae8158572b4476e19c394e6b640e4",
|
||||
"reference": "1e4d35372c6ae8158572b4476e19c394e6b640e4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3148,13 +3148,13 @@
|
||||
},
|
||||
"conflict": {
|
||||
"brianium/paratest": "<7.3.0 || >=8.0.0",
|
||||
"laravel/framework": "<11.0.3 || >=12.0.0",
|
||||
"laravel/framework": "<11.1.0 || >=12.0.0",
|
||||
"nunomaduro/collision": "<8.0.0 || >=9.0.0",
|
||||
"phpunit/phpunit": "<10.5.0 || 11.0.0 || >=11.1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.23",
|
||||
"laravel/framework": "^11.0.3",
|
||||
"laravel/framework": "^11.1",
|
||||
"laravel/pint": "^1.6",
|
||||
"mockery/mockery": "^1.6",
|
||||
"phpstan/phpstan": "^1.10.50",
|
||||
@@ -3168,11 +3168,11 @@
|
||||
"brianium/paratest": "Allow using parallel tresting (^7.3).",
|
||||
"ext-pcntl": "Required to use all features of the console signal trapping.",
|
||||
"fakerphp/faker": "Allow using Faker for testing (^1.23).",
|
||||
"laravel/framework": "Required for testing (^11.0.3).",
|
||||
"laravel/framework": "Required for testing (^11.1).",
|
||||
"mockery/mockery": "Allow using Mockery for testing (^1.6).",
|
||||
"nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^8.0).",
|
||||
"orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^9.0).",
|
||||
"phpunit/phpunit": "Allow using PHPUnit for testing (^10.5).",
|
||||
"phpunit/phpunit": "Allow using PHPUnit for testing (^10.5 || ^11.0).",
|
||||
"symfony/process": "Required to use Orchestra\\Testbench\\remote function (^7.0).",
|
||||
"symfony/yaml": "Required for Testbench CLI (^7.0).",
|
||||
"vlucas/phpdotenv": "Required for Testbench CLI (^5.4.1)."
|
||||
@@ -3214,7 +3214,7 @@
|
||||
"issues": "https://github.com/orchestral/testbench/issues",
|
||||
"source": "https://github.com/orchestral/testbench-core"
|
||||
},
|
||||
"time": "2024-03-19T11:20:27+00:00"
|
||||
"time": "2024-04-16T07:38:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "orchestra/workbench",
|
||||
@@ -3283,16 +3283,16 @@
|
||||
},
|
||||
{
|
||||
"name": "overtrue/phplint",
|
||||
"version": "9.1.2",
|
||||
"version": "9.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/overtrue/phplint.git",
|
||||
"reference": "7a9822c863d19fa8ec42f862c0e135da58b5cb4b"
|
||||
"reference": "b211fe17b8b9e8f2b3db10243f6adcb6397715c3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/overtrue/phplint/zipball/7a9822c863d19fa8ec42f862c0e135da58b5cb4b",
|
||||
"reference": "7a9822c863d19fa8ec42f862c0e135da58b5cb4b",
|
||||
"url": "https://api.github.com/repos/overtrue/phplint/zipball/b211fe17b8b9e8f2b3db10243f6adcb6397715c3",
|
||||
"reference": "b211fe17b8b9e8f2b3db10243f6adcb6397715c3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3310,8 +3310,9 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.4",
|
||||
"bartlett/sarif-php-sdk": "^1.2",
|
||||
"brainmaestro/composer-git-hooks": "^2.8.5 || 3.0.0-alpha.1",
|
||||
"jetbrains/phpstorm-stubs": "^2021.3 || ^2022.3 || ^2023.3",
|
||||
"jetbrains/phpstorm-stubs": "^2021.3 || ^2022.3 || ^2023.3 || ^2024.1",
|
||||
"php-parallel-lint/php-console-highlighter": "^1.0"
|
||||
},
|
||||
"bin": [
|
||||
@@ -3319,6 +3320,11 @@
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"target-directory": "vendor-bin",
|
||||
"forward-command": true
|
||||
},
|
||||
"hooks": {
|
||||
"pre-commit": [
|
||||
"composer style:fix",
|
||||
@@ -3329,7 +3335,7 @@
|
||||
]
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-main": "9.1.x-dev"
|
||||
"dev-main": "9.2.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -3361,7 +3367,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/overtrue/phplint/issues",
|
||||
"source": "https://github.com/overtrue/phplint/tree/9.1.2"
|
||||
"source": "https://github.com/overtrue/phplint/tree/9.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3369,7 +3375,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-02-06T10:43:30+00:00"
|
||||
"time": "2024-05-03T07:14:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
@@ -3531,16 +3537,16 @@
|
||||
},
|
||||
{
|
||||
"name": "php-cs-fixer/shim",
|
||||
"version": "v3.52.1",
|
||||
"version": "v3.54.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-CS-Fixer/shim.git",
|
||||
"reference": "baec5a6d4b24bad4c930d39fde34b2b0c1c8cd94"
|
||||
"reference": "887c350fccbadb2b84278fdb963c25a0c304ac9c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/baec5a6d4b24bad4c930d39fde34b2b0c1c8cd94",
|
||||
"reference": "baec5a6d4b24bad4c930d39fde34b2b0c1c8cd94",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/887c350fccbadb2b84278fdb963c25a0c304ac9c",
|
||||
"reference": "887c350fccbadb2b84278fdb963c25a0c304ac9c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3577,22 +3583,22 @@
|
||||
"description": "A tool to automatically fix PHP code style",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-CS-Fixer/shim/issues",
|
||||
"source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.52.1"
|
||||
"source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.54.0"
|
||||
},
|
||||
"time": "2024-03-19T21:03:12+00:00"
|
||||
"time": "2024-04-17T08:23:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpmyadmin/sql-parser",
|
||||
"version": "5.8.2",
|
||||
"version": "5.9.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpmyadmin/sql-parser.git",
|
||||
"reference": "f1720ae19abe6294cb5599594a8a57bc3c8cc287"
|
||||
"reference": "011fa18a4e55591fac6545a821921dd1d61c6984"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/f1720ae19abe6294cb5599594a8a57bc3c8cc287",
|
||||
"reference": "f1720ae19abe6294cb5599594a8a57bc3c8cc287",
|
||||
"url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984",
|
||||
"reference": "011fa18a4e55591fac6545a821921dd1d61c6984",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3623,6 +3629,7 @@
|
||||
"bin": [
|
||||
"bin/highlight-query",
|
||||
"bin/lint-query",
|
||||
"bin/sql-parser",
|
||||
"bin/tokenize-query"
|
||||
],
|
||||
"type": "library",
|
||||
@@ -3666,7 +3673,7 @@
|
||||
"type": "other"
|
||||
}
|
||||
],
|
||||
"time": "2023-09-19T12:34:29+00:00"
|
||||
"time": "2024-01-20T20:34:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpoption/phpoption",
|
||||
@@ -3739,16 +3746,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.10.63",
|
||||
"version": "1.10.67",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "ad12836d9ca227301f5fb9960979574ed8628339"
|
||||
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/ad12836d9ca227301f5fb9960979574ed8628339",
|
||||
"reference": "ad12836d9ca227301f5fb9960979574ed8628339",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
|
||||
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3791,13 +3798,9 @@
|
||||
{
|
||||
"url": "https://github.com/phpstan",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-18T16:53:53+00:00"
|
||||
"time": "2024-04-16T07:22:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-mockery",
|
||||
@@ -3851,16 +3854,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-symfony",
|
||||
"version": "1.3.9",
|
||||
"version": "1.3.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan-symfony.git",
|
||||
"reference": "a32bc86da24495025d7aafd1ba62444d4a364a98"
|
||||
"reference": "f4b9407fa3203aebafd422ae8f0eb1ef94659a80"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/a32bc86da24495025d7aafd1ba62444d4a364a98",
|
||||
"reference": "a32bc86da24495025d7aafd1ba62444d4a364a98",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/f4b9407fa3203aebafd422ae8f0eb1ef94659a80",
|
||||
"reference": "f4b9407fa3203aebafd422ae8f0eb1ef94659a80",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3917,9 +3920,9 @@
|
||||
"description": "Symfony Framework extensions and rules for PHPStan",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan-symfony/issues",
|
||||
"source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.9"
|
||||
"source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.12"
|
||||
},
|
||||
"time": "2024-03-16T16:50:20+00:00"
|
||||
"time": "2024-04-14T13:30:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
@@ -4440,22 +4443,27 @@
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
"version": "1.1.1",
|
||||
"version": "2.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/container.git",
|
||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
|
||||
"reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
|
||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
|
||||
"url": "https://api.github.com/repos/php-fig/container/zipball/2ae37329ee82f91efadc282cc2d527fd6065a5ef",
|
||||
"reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Container\\": "src/"
|
||||
@@ -4482,9 +4490,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-fig/container/issues",
|
||||
"source": "https://github.com/php-fig/container/tree/1.1.1"
|
||||
"source": "https://github.com/php-fig/container/tree/2.0.1"
|
||||
},
|
||||
"time": "2021-03-05T17:36:06+00:00"
|
||||
"time": "2021-03-24T13:40:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/event-dispatcher",
|
||||
@@ -5093,16 +5101,16 @@
|
||||
},
|
||||
{
|
||||
"name": "rector/rector",
|
||||
"version": "1.0.3",
|
||||
"version": "1.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rectorphp/rector.git",
|
||||
"reference": "c59507a9090b465d65e1aceed91e5b81986e375b"
|
||||
"reference": "6e04d0eb087aef707fa0c5686d33d6ff61f4a555"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/rectorphp/rector/zipball/c59507a9090b465d65e1aceed91e5b81986e375b",
|
||||
"reference": "c59507a9090b465d65e1aceed91e5b81986e375b",
|
||||
"url": "https://api.github.com/repos/rectorphp/rector/zipball/6e04d0eb087aef707fa0c5686d33d6ff61f4a555",
|
||||
"reference": "6e04d0eb087aef707fa0c5686d33d6ff61f4a555",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5115,6 +5123,9 @@
|
||||
"rector/rector-phpunit": "*",
|
||||
"rector/rector-symfony": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-dom": "To manipulate phpunit.xml via the custom-rule command"
|
||||
},
|
||||
"bin": [
|
||||
"bin/rector"
|
||||
],
|
||||
@@ -5137,7 +5148,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/rectorphp/rector/issues",
|
||||
"source": "https://github.com/rectorphp/rector/tree/1.0.3"
|
||||
"source": "https://github.com/rectorphp/rector/tree/1.0.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5145,7 +5156,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-14T15:04:18+00:00"
|
||||
"time": "2024-04-05T09:01:07+00:00"
|
||||
},
|
||||
{
|
||||
"name": "rector/swiss-knife",
|
||||
@@ -9110,21 +9121,21 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
"version": "v3.4.1",
|
||||
"version": "v3.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/service-contracts.git",
|
||||
"reference": "fe07cbc8d837f60caf7018068e350cc5163681a0"
|
||||
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0",
|
||||
"reference": "fe07cbc8d837f60caf7018068e350cc5163681a0",
|
||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
|
||||
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"psr/container": "^1.1|^2.0"
|
||||
"psr/container": "^2.0"
|
||||
},
|
||||
"conflict": {
|
||||
"ext-psr": "<1.1|>=2"
|
||||
@@ -9172,7 +9183,7 @@
|
||||
"standards"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/service-contracts/tree/v3.4.1"
|
||||
"source": "https://github.com/symfony/service-contracts/tree/v3.3.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -9188,7 +9199,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-12-26T14:02:43+00:00"
|
||||
"time": "2023-05-23T14:45:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/stopwatch",
|
||||
@@ -10092,16 +10103,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symplify/monorepo-builder",
|
||||
"version": "11.2.0.72",
|
||||
"version": "11.2.20",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symplify/monorepo-builder.git",
|
||||
"reference": "e252321339322af996177e360565cfcddb35c218"
|
||||
"reference": "444efe08701776cb1a03b9f3600e715697519aa6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symplify/monorepo-builder/zipball/e252321339322af996177e360565cfcddb35c218",
|
||||
"reference": "e252321339322af996177e360565cfcddb35c218",
|
||||
"url": "https://api.github.com/repos/symplify/monorepo-builder/zipball/444efe08701776cb1a03b9f3600e715697519aa6",
|
||||
"reference": "444efe08701776cb1a03b9f3600e715697519aa6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -10128,7 +10139,7 @@
|
||||
"description": "Prefixed version of Not only Composer tools to build a Monorepo.",
|
||||
"support": {
|
||||
"issues": "https://github.com/symplify/monorepo-builder/issues",
|
||||
"source": "https://github.com/symplify/monorepo-builder/tree/11.2.0.72"
|
||||
"source": "https://github.com/symplify/monorepo-builder/tree/11.2.20"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -10140,7 +10151,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-28T10:26:54+00:00"
|
||||
"time": "2023-11-17T08:30:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "theseer/tokenizer",
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
readonly class Book
|
||||
{
|
||||
public function __construct(private string $title)
|
||||
{
|
||||
|
||||
}
|
||||
public function getFlashIdentifier(): string
|
||||
{
|
||||
return sprintf('"%s" book', $this->title);
|
||||
}
|
||||
}
|
||||
@@ -20,10 +20,12 @@
|
||||
"laravel/tinker": "^2.9",
|
||||
"livewire/livewire": "^3.4",
|
||||
"php-flasher/php-flasher": "@dev",
|
||||
"spatie/laravel-csp": "^2.9",
|
||||
"spatie/laravel-ray": "^1.36"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.23",
|
||||
"larastan/larastan": "^2.9",
|
||||
"laravel/pint": "^1.13",
|
||||
"laravel/sail": "^1.26",
|
||||
"mockery/mockery": "^1.6",
|
||||
|
||||
Generated
+343
-13
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "82f8751127532ccbc003e6cf202250d7",
|
||||
"content-hash": "6a5eb94d553bf800816057a2f860bceb",
|
||||
"packages": [
|
||||
{
|
||||
"name": "brick/math",
|
||||
@@ -2484,7 +2484,7 @@
|
||||
"dist": {
|
||||
"type": "path",
|
||||
"url": "../..",
|
||||
"reference": "48f5a7fcf6f5cf84382b6be56ed6bfc20dbee649"
|
||||
"reference": "f8262b2e6a75a3130fe97ce95e4b05dd3c6a5cf8"
|
||||
},
|
||||
"require": {
|
||||
"ext-intl": "*",
|
||||
@@ -2574,20 +2574,18 @@
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Elevate user engagement in Laravel and Symfony projects with PHPFlasher, a comprehensive flash messaging toolkit. This library facilitates streamlined user feedback management and supports a variety of popular notification styles including Noty, Notyf, SweetAlert, and Toastr. PHPFlasher is designed for ease of use, making it accessible to both beginners and experienced developers seeking to enhance the interactive elements of their web applications.",
|
||||
"description": "The core repository for PHPFlasher, hosting the source code, contributions, issue tracking, and discussions for the PHPFlasher project. This mono-repo serves as the hub for development and community engagement.",
|
||||
"homepage": "https://php-flasher.io",
|
||||
"keywords": [
|
||||
"customizable-alerts-php",
|
||||
"contributions",
|
||||
"discussions",
|
||||
"flash-messages",
|
||||
"interactive-web-notifications",
|
||||
"laravel-notification",
|
||||
"php-messaging-library",
|
||||
"php-notification-system",
|
||||
"php-user-interface",
|
||||
"symfony-notification",
|
||||
"user-engagement-php",
|
||||
"user-feedback-tools",
|
||||
"web-application-notifications"
|
||||
"issue-tracking",
|
||||
"notifications",
|
||||
"open-source",
|
||||
"php",
|
||||
"phpflasher",
|
||||
"user-feedback"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-flasher/php-flasher/issues",
|
||||
@@ -3625,6 +3623,148 @@
|
||||
],
|
||||
"time": "2023-06-28T12:59:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/laravel-csp",
|
||||
"version": "2.9.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/spatie/laravel-csp.git",
|
||||
"reference": "41165322b0017b1f121969cd91055a5f20bc7c47"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/spatie/laravel-csp/zipball/41165322b0017b1f121969cd91055a5f20bc7c47",
|
||||
"reference": "41165322b0017b1f121969cd91055a5f20bc7c47",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/http": "^9.0|^10.0|^11.0",
|
||||
"illuminate/support": "^9.0|^10.0|^11.0",
|
||||
"php": "^8.1",
|
||||
"spatie/laravel-package-tools": "^1.11"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.3.3",
|
||||
"orchestra/testbench": "^7.0|^8.0|^9.0",
|
||||
"pestphp/pest": "^1.23.0|^2.34.0",
|
||||
"roave/security-advisories": "dev-master"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Spatie\\Csp\\CspServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/helpers.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Spatie\\Csp\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Thomas Verhelst",
|
||||
"email": "tvke91@gmail.com",
|
||||
"homepage": "https://spatie.be",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Freek Van der Herten",
|
||||
"email": "freek@spatie.be",
|
||||
"homepage": "https://spatie.be",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Add CSP headers to the responses of a Laravel app",
|
||||
"homepage": "https://github.com/spatie/laravel-csp",
|
||||
"keywords": [
|
||||
"content-security-policy",
|
||||
"csp",
|
||||
"headers",
|
||||
"laravel",
|
||||
"laravel-csp",
|
||||
"security",
|
||||
"spatie"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/spatie/laravel-csp/tree/2.9.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://spatie.be/open-source/support-us",
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2024-02-27T12:13:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/laravel-package-tools",
|
||||
"version": "1.16.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/spatie/laravel-package-tools.git",
|
||||
"reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53",
|
||||
"reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/contracts": "^9.28|^10.0|^11.0",
|
||||
"php": "^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.5",
|
||||
"orchestra/testbench": "^7.7|^8.0",
|
||||
"pestphp/pest": "^1.22",
|
||||
"phpunit/phpunit": "^9.5.24",
|
||||
"spatie/pest-plugin-test-time": "^1.1"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Spatie\\LaravelPackageTools\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Freek Van der Herten",
|
||||
"email": "freek@spatie.be",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Tools for creating Laravel packages",
|
||||
"homepage": "https://github.com/spatie/laravel-package-tools",
|
||||
"keywords": [
|
||||
"laravel-package-tools",
|
||||
"spatie"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/spatie/laravel-package-tools/issues",
|
||||
"source": "https://github.com/spatie/laravel-package-tools/tree/1.16.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/spatie",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-20T07:29:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/laravel-ray",
|
||||
"version": "1.36.0",
|
||||
@@ -7205,6 +7345,108 @@
|
||||
},
|
||||
"time": "2024-03-08T09:58:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "larastan/larastan",
|
||||
"version": "v2.9.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/larastan/larastan.git",
|
||||
"reference": "101f1a4470f87326f4d3995411d28679d8800abe"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/larastan/larastan/zipball/101f1a4470f87326f4d3995411d28679d8800abe",
|
||||
"reference": "101f1a4470f87326f4d3995411d28679d8800abe",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0",
|
||||
"php": "^8.0.2",
|
||||
"phpmyadmin/sql-parser": "^5.9.0",
|
||||
"phpstan/phpstan": "^1.10.66"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^12.0",
|
||||
"nikic/php-parser": "^4.19.1",
|
||||
"orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2",
|
||||
"orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3",
|
||||
"phpunit/phpunit": "^9.6.13 || ^10.5.16"
|
||||
},
|
||||
"suggest": {
|
||||
"orchestra/testbench": "Using Larastan for analysing a package needs Testbench"
|
||||
},
|
||||
"type": "phpstan-extension",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0-dev"
|
||||
},
|
||||
"phpstan": {
|
||||
"includes": [
|
||||
"extension.neon"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Larastan\\Larastan\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Can Vural",
|
||||
"email": "can9119@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Nuno Maduro",
|
||||
"email": "enunomaduro@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel",
|
||||
"keywords": [
|
||||
"PHPStan",
|
||||
"code analyse",
|
||||
"code analysis",
|
||||
"larastan",
|
||||
"laravel",
|
||||
"package",
|
||||
"php",
|
||||
"static analysis"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/larastan/larastan/issues",
|
||||
"source": "https://github.com/larastan/larastan/tree/v2.9.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.paypal.com/paypalme/enunomaduro",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/canvural",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nunomaduro",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://www.patreon.com/nunomaduro",
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-16T19:13:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/pint",
|
||||
"version": "v1.15.1",
|
||||
@@ -8182,6 +8424,94 @@
|
||||
},
|
||||
"time": "2024-02-23T11:10:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpmyadmin/sql-parser",
|
||||
"version": "5.9.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpmyadmin/sql-parser.git",
|
||||
"reference": "011fa18a4e55591fac6545a821921dd1d61c6984"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984",
|
||||
"reference": "011fa18a4e55591fac6545a821921dd1d61c6984",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2 || ^8.0",
|
||||
"symfony/polyfill-mbstring": "^1.3",
|
||||
"symfony/polyfill-php80": "^1.16"
|
||||
},
|
||||
"conflict": {
|
||||
"phpmyadmin/motranslator": "<3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpbench/phpbench": "^1.1",
|
||||
"phpmyadmin/coding-standard": "^3.0",
|
||||
"phpmyadmin/motranslator": "^4.0 || ^5.0",
|
||||
"phpstan/extension-installer": "^1.1",
|
||||
"phpstan/phpstan": "^1.9.12",
|
||||
"phpstan/phpstan-phpunit": "^1.3.3",
|
||||
"phpunit/php-code-coverage": "*",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
||||
"psalm/plugin-phpunit": "^0.16.1",
|
||||
"vimeo/psalm": "^4.11",
|
||||
"zumba/json-serializer": "~3.0.2"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "For best performance",
|
||||
"phpmyadmin/motranslator": "Translate messages to your favorite locale"
|
||||
},
|
||||
"bin": [
|
||||
"bin/highlight-query",
|
||||
"bin/lint-query",
|
||||
"bin/sql-parser",
|
||||
"bin/tokenize-query"
|
||||
],
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PhpMyAdmin\\SqlParser\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"GPL-2.0-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "The phpMyAdmin Team",
|
||||
"email": "developers@phpmyadmin.net",
|
||||
"homepage": "https://www.phpmyadmin.net/team/"
|
||||
}
|
||||
],
|
||||
"description": "A validating SQL lexer and parser with a focus on MySQL dialect.",
|
||||
"homepage": "https://github.com/phpmyadmin/sql-parser",
|
||||
"keywords": [
|
||||
"analysis",
|
||||
"lexer",
|
||||
"parser",
|
||||
"query linter",
|
||||
"sql",
|
||||
"sql lexer",
|
||||
"sql linter",
|
||||
"sql parser",
|
||||
"sql syntax highlighter",
|
||||
"sql tokenizer"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/phpmyadmin/sql-parser/issues",
|
||||
"source": "https://github.com/phpmyadmin/sql-parser"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.phpmyadmin.net/donate/",
|
||||
"type": "other"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-20T20:34:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpdoc-parser",
|
||||
"version": "1.28.0",
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
includes:
|
||||
- vendor/larastan/larastan/extension.neon
|
||||
|
||||
parameters:
|
||||
level: 9
|
||||
paths:
|
||||
- routes/
|
||||
@@ -2,18 +2,10 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>flash</title>
|
||||
<title>PHPFlasher</title>
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text><text y=%221.3em%22 x=%220.2em%22 font-size=%2276%22 fill=%22%23fff%22>sf</text></svg>">
|
||||
</head>
|
||||
<body>
|
||||
<ul>
|
||||
<li><a href="/">/</a></li>
|
||||
<li><a href="/adapter/flasher">/adapter/flasher</a></li>
|
||||
<li><a href="/adapter/noty">/adapter/noty</a></li>
|
||||
<li><a href="/adapter/notyf">/adapter/notyf</a></li>
|
||||
<li><a href="/adapter/sweetalert">/adapter/sweetalert</a></li>
|
||||
<li><a href="/adapter/toastr">/adapter/toastr</a></li>
|
||||
<li><a href="/livewire/counter">/adapter/livewire/counter</a></li>
|
||||
<li><a href="/livewire/eventous">/adapter/livewire/eventous</a></li>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,42 +1,17 @@
|
||||
<?php
|
||||
|
||||
use Flasher\Prime\FlasherInterface;
|
||||
use App\Entity\Book;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('/', function () {
|
||||
session()->flash('success', 'Hello from default Symfony');
|
||||
// sweetalert()->timerProgressBar()->success('hello from Home Controller');
|
||||
// noty()->layout('topCenter')->success('hello from Home Controller');
|
||||
// notyf()->ripple(false)->warning('hello from Home Controller');
|
||||
// toastr()->positionClass('toast-bottom-left')->error('hello from Home Controller');
|
||||
// flash()->use('flasher')->success('hello from flasher factory');
|
||||
|
||||
return <<<HTML
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>flash</title>
|
||||
</head>
|
||||
<body>
|
||||
<ul>
|
||||
<li><a href="/">/</a></li>
|
||||
<li><a href="/adapter/flasher">/adapter/flasher</a></li>
|
||||
<li><a href="/adapter/noty">/adapter/noty</a></li>
|
||||
<li><a href="/adapter/notyf">/adapter/notyf</a></li>
|
||||
<li><a href="/adapter/sweetalert">/adapter/sweetalert</a></li>
|
||||
<li><a href="/adapter/toastr">/adapter/toastr</a></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
HTML;
|
||||
})->name('app_home');
|
||||
|
||||
Route::get('/adapter/{adapter}', function (FlasherInterface $flasher, string $adapter) {
|
||||
$factory = $flasher->create($adapter);
|
||||
|
||||
$factory->success('Operation completed successfully.');
|
||||
$factory->info('Please note that some information has been updated.');
|
||||
$factory->warning('This action could have potential consequences.');
|
||||
$factory->error('An error occurred while processing your request.');
|
||||
flash()->created(new Book('lord of the rings'));
|
||||
flash()->saved(new Book('harry potter'));
|
||||
|
||||
return view('welcome');
|
||||
})->name('app_adapter');
|
||||
|
||||
Route::get('/livewire/counter', \App\Livewire\Counter::class);
|
||||
Route::get('/livewire/eventous', \App\Livewire\Eventous::class);
|
||||
})->name('app_home');
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"php": ">=8.2",
|
||||
"ext-ctype": "*",
|
||||
"ext-iconv": "*",
|
||||
"nelmio/security-bundle": "^3.3",
|
||||
"php-flasher/php-flasher": "@dev",
|
||||
"phpstan/phpstan-symfony": "^1.3",
|
||||
"symfony/console": "7.0.*",
|
||||
|
||||
Generated
+723
-38
@@ -4,15 +4,164 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "9354bb44b6ee822835a32d7bdc0258dc",
|
||||
"content-hash": "fdaf8a5cf22e2d2c4ac44c9f4217ef9a",
|
||||
"packages": [
|
||||
{
|
||||
"name": "composer/ca-bundle",
|
||||
"version": "1.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/ca-bundle.git",
|
||||
"reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/0c5ccfcfea312b5c5a190a21ac5cef93f74baf99",
|
||||
"reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-openssl": "*",
|
||||
"ext-pcre": "*",
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^1.10",
|
||||
"psr/log": "^1.0",
|
||||
"symfony/phpunit-bridge": "^4.2 || ^5",
|
||||
"symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Composer\\CaBundle\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jordi Boggiano",
|
||||
"email": "j.boggiano@seld.be",
|
||||
"homepage": "http://seld.be"
|
||||
}
|
||||
],
|
||||
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
|
||||
"keywords": [
|
||||
"cabundle",
|
||||
"cacert",
|
||||
"certificate",
|
||||
"ssl",
|
||||
"tls"
|
||||
],
|
||||
"support": {
|
||||
"irc": "irc://irc.freenode.org/composer",
|
||||
"issues": "https://github.com/composer/ca-bundle/issues",
|
||||
"source": "https://github.com/composer/ca-bundle/tree/1.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://packagist.com",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/composer",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-15T14:00:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nelmio/security-bundle",
|
||||
"version": "v3.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nelmio/NelmioSecurityBundle.git",
|
||||
"reference": "6a6c75ef6342385ef732f0b5afa705660177250f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nelmio/NelmioSecurityBundle/zipball/6a6c75ef6342385ef732f0b5afa705660177250f",
|
||||
"reference": "6a6c75ef6342385ef732f0b5afa705660177250f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.4 || ^8.0",
|
||||
"symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0",
|
||||
"symfony/http-kernel": "^5.4 || ^6.3 || ^7.0",
|
||||
"symfony/security-core": "^5.4 || ^6.3 || ^7.0",
|
||||
"symfony/security-csrf": "^5.4 || ^6.3 || ^7.0",
|
||||
"symfony/security-http": "^5.4 || ^6.3 || ^7.0",
|
||||
"symfony/yaml": "^5.4 || ^6.3 || ^7.0",
|
||||
"ua-parser/uap-php": "^3.4.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^1.4",
|
||||
"phpstan/phpstan-deprecation-rules": "^1.0",
|
||||
"phpstan/phpstan-phpunit": "^1.0",
|
||||
"phpstan/phpstan-strict-rules": "^1.1",
|
||||
"phpstan/phpstan-symfony": "^1.1",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"psr/cache": "^1.0 || ^2.0 || ^3.0",
|
||||
"symfony/browser-kit": "^5.4 || ^6.3 || ^7.0",
|
||||
"symfony/cache": "^5.4 || ^6.3 || ^7.0",
|
||||
"symfony/phpunit-bridge": "^6.3 || ^7.0",
|
||||
"symfony/twig-bundle": "^5.4 || ^6.3 || ^7.0",
|
||||
"twig/twig": "^2.10 || ^3.0"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Nelmio\\SecurityBundle\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nelmio",
|
||||
"homepage": "http://nelm.io"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://github.com/nelmio/NelmioSecurityBundle/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Extra security-related features for Symfony: signed/encrypted cookies, HTTPS/SSL/HSTS handling, cookie session storage, ...",
|
||||
"keywords": [
|
||||
"security"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/nelmio/NelmioSecurityBundle/issues",
|
||||
"source": "https://github.com/nelmio/NelmioSecurityBundle/tree/v3.3.0"
|
||||
},
|
||||
"time": "2024-04-10T08:11:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-flasher/php-flasher",
|
||||
"version": "2.x-dev",
|
||||
"dist": {
|
||||
"type": "path",
|
||||
"url": "../..",
|
||||
"reference": "14646df9e5bba5ca45b53815ea28228f2e6b9720"
|
||||
"reference": "f8262b2e6a75a3130fe97ce95e4b05dd3c6a5cf8"
|
||||
},
|
||||
"require": {
|
||||
"ext-intl": "*",
|
||||
@@ -126,16 +275,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.10.66",
|
||||
"version": "1.10.67",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "94779c987e4ebd620025d9e5fdd23323903950bd"
|
||||
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd",
|
||||
"reference": "94779c987e4ebd620025d9e5fdd23323903950bd",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
|
||||
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -178,26 +327,22 @@
|
||||
{
|
||||
"url": "https://github.com/phpstan",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-28T16:17:31+00:00"
|
||||
"time": "2024-04-16T07:22:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-symfony",
|
||||
"version": "1.3.9",
|
||||
"version": "1.3.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan-symfony.git",
|
||||
"reference": "a32bc86da24495025d7aafd1ba62444d4a364a98"
|
||||
"reference": "f4b9407fa3203aebafd422ae8f0eb1ef94659a80"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/a32bc86da24495025d7aafd1ba62444d4a364a98",
|
||||
"reference": "a32bc86da24495025d7aafd1ba62444d4a364a98",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/f4b9407fa3203aebafd422ae8f0eb1ef94659a80",
|
||||
"reference": "f4b9407fa3203aebafd422ae8f0eb1ef94659a80",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -254,9 +399,9 @@
|
||||
"description": "Symfony Framework extensions and rules for PHPStan",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan-symfony/issues",
|
||||
"source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.9"
|
||||
"source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.12"
|
||||
},
|
||||
"time": "2024-03-16T16:50:20+00:00"
|
||||
"time": "2024-04-14T13:30:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
@@ -1779,6 +1924,78 @@
|
||||
],
|
||||
"time": "2024-04-03T06:12:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/password-hasher",
|
||||
"version": "v7.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/password-hasher.git",
|
||||
"reference": "0eba656c16ecdf5588b3ddd2b2337b06173d839f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/0eba656c16ecdf5588b3ddd2b2337b06173d839f",
|
||||
"reference": "0eba656c16ecdf5588b3ddd2b2337b06173d839f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/security-core": "<6.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/console": "^6.4|^7.0",
|
||||
"symfony/security-core": "^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\PasswordHasher\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Robin Chalas",
|
||||
"email": "robin.chalas@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Provides password hashing utilities",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"hashing",
|
||||
"password"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/password-hasher/tree/v7.0.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-02-12T11:15:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-grapheme",
|
||||
"version": "v1.29.0",
|
||||
@@ -2095,6 +2312,165 @@
|
||||
],
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/property-access",
|
||||
"version": "v7.0.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/property-access.git",
|
||||
"reference": "1c268ba954ccc5e78cf035b391abb67759e24423"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/property-access/zipball/1c268ba954ccc5e78cf035b391abb67759e24423",
|
||||
"reference": "1c268ba954ccc5e78cf035b391abb67759e24423",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/property-info": "^6.4|^7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/cache": "^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\PropertyAccess\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Provides functions to read and write from/to an object or array using a simple string notation",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"access",
|
||||
"array",
|
||||
"extraction",
|
||||
"index",
|
||||
"injection",
|
||||
"object",
|
||||
"property",
|
||||
"property-path",
|
||||
"reflection"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/property-access/tree/v7.0.6"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-19T11:57:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/property-info",
|
||||
"version": "v7.0.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/property-info.git",
|
||||
"reference": "b8844ddce7d53f78b57ec9be59da80fceddf3167"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/property-info/zipball/b8844ddce7d53f78b57ec9be59da80fceddf3167",
|
||||
"reference": "b8844ddce7d53f78b57ec9be59da80fceddf3167",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/string": "^6.4|^7.0"
|
||||
},
|
||||
"conflict": {
|
||||
"phpdocumentor/reflection-docblock": "<5.2",
|
||||
"phpdocumentor/type-resolver": "<1.5.1",
|
||||
"symfony/dependency-injection": "<6.4",
|
||||
"symfony/serializer": "<6.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpdocumentor/reflection-docblock": "^5.2",
|
||||
"phpstan/phpdoc-parser": "^1.0",
|
||||
"symfony/cache": "^6.4|^7.0",
|
||||
"symfony/dependency-injection": "^6.4|^7.0",
|
||||
"symfony/serializer": "^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\PropertyInfo\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Kévin Dunglas",
|
||||
"email": "dunglas@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Extracts information about PHP class' properties using metadata of popular sources",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"doctrine",
|
||||
"phpdoc",
|
||||
"property",
|
||||
"symfony",
|
||||
"type",
|
||||
"validator"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/property-info/tree/v7.0.6"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-28T09:20:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/routing",
|
||||
"version": "v7.0.6",
|
||||
@@ -2255,6 +2631,245 @@
|
||||
],
|
||||
"time": "2024-01-23T15:02:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/security-core",
|
||||
"version": "v7.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/security-core.git",
|
||||
"reference": "72b9d961a5dcd21e6bc29b99df51a9000a15dde0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/security-core/zipball/72b9d961a5dcd21e6bc29b99df51a9000a15dde0",
|
||||
"reference": "72b9d961a5dcd21e6bc29b99df51a9000a15dde0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/event-dispatcher-contracts": "^2.5|^3",
|
||||
"symfony/password-hasher": "^6.4|^7.0",
|
||||
"symfony/service-contracts": "^2.5|^3"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/event-dispatcher": "<6.4",
|
||||
"symfony/http-foundation": "<6.4",
|
||||
"symfony/ldap": "<6.4",
|
||||
"symfony/translation": "<6.4.3|>=7.0,<7.0.3",
|
||||
"symfony/validator": "<6.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/cache": "^1.0|^2.0|^3.0",
|
||||
"psr/container": "^1.1|^2.0",
|
||||
"psr/log": "^1|^2|^3",
|
||||
"symfony/cache": "^6.4|^7.0",
|
||||
"symfony/event-dispatcher": "^6.4|^7.0",
|
||||
"symfony/expression-language": "^6.4|^7.0",
|
||||
"symfony/http-foundation": "^6.4|^7.0",
|
||||
"symfony/ldap": "^6.4|^7.0",
|
||||
"symfony/string": "^6.4|^7.0",
|
||||
"symfony/translation": "^6.4.3|^7.0.3",
|
||||
"symfony/validator": "^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Security\\Core\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony Security Component - Core Library",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/security-core/tree/v7.0.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-23T15:02:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/security-csrf",
|
||||
"version": "v7.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/security-csrf.git",
|
||||
"reference": "f0f724e599f069b768e335e4bdf795726c7dfe8e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/f0f724e599f069b768e335e4bdf795726c7dfe8e",
|
||||
"reference": "f0f724e599f069b768e335e4bdf795726c7dfe8e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/security-core": "^6.4|^7.0"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/http-foundation": "<6.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/http-foundation": "^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Security\\Csrf\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony Security Component - CSRF Library",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/security-csrf/tree/v7.0.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-23T15:02:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/security-http",
|
||||
"version": "v7.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/security-http.git",
|
||||
"reference": "f3a70a937128f47366821a9f4b5dbfaa0ba9c862"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/security-http/zipball/f3a70a937128f47366821a9f4b5dbfaa0ba9c862",
|
||||
"reference": "f3a70a937128f47366821a9f4b5dbfaa0ba9c862",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/http-foundation": "^6.4|^7.0",
|
||||
"symfony/http-kernel": "^6.4|^7.0",
|
||||
"symfony/polyfill-mbstring": "~1.0",
|
||||
"symfony/property-access": "^6.4|^7.0",
|
||||
"symfony/security-core": "^6.4|^7.0",
|
||||
"symfony/service-contracts": "^2.5|^3"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/clock": "<6.4",
|
||||
"symfony/event-dispatcher": "<6.4",
|
||||
"symfony/http-client-contracts": "<3.0",
|
||||
"symfony/security-bundle": "<6.4",
|
||||
"symfony/security-csrf": "<6.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/log": "^1|^2|^3",
|
||||
"symfony/cache": "^6.4|^7.0",
|
||||
"symfony/clock": "^6.4|^7.0",
|
||||
"symfony/expression-language": "^6.4|^7.0",
|
||||
"symfony/http-client-contracts": "^3.0",
|
||||
"symfony/rate-limiter": "^6.4|^7.0",
|
||||
"symfony/routing": "^6.4|^7.0",
|
||||
"symfony/security-csrf": "^6.4|^7.0",
|
||||
"symfony/translation": "^6.4|^7.0",
|
||||
"web-token/jwt-checker": "^3.1",
|
||||
"web-token/jwt-signature-algorithm-ecdsa": "^3.1"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Security\\Http\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony Security Component - HTTP Integration",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/security-http/tree/v7.0.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-02-26T07:52:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
"version": "v3.4.2",
|
||||
@@ -3019,34 +3634,34 @@
|
||||
},
|
||||
{
|
||||
"name": "twig/extra-bundle",
|
||||
"version": "v3.8.0",
|
||||
"version": "v3.9.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/twig-extra-bundle.git",
|
||||
"reference": "32807183753de0388c8e59f7ac2d13bb47311140"
|
||||
"reference": "3a68ffc7747ecc25823cabe2127710ced516a16a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/32807183753de0388c8e59f7ac2d13bb47311140",
|
||||
"reference": "32807183753de0388c8e59f7ac2d13bb47311140",
|
||||
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/3a68ffc7747ecc25823cabe2127710ced516a16a",
|
||||
"reference": "3a68ffc7747ecc25823cabe2127710ced516a16a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/framework-bundle": "^5.4|^6.0|^7.0",
|
||||
"symfony/twig-bundle": "^5.4|^6.0|^7.0",
|
||||
"symfony/framework-bundle": "^5.4|^6.4|^7.0",
|
||||
"symfony/twig-bundle": "^5.4|^6.4|^7.0",
|
||||
"twig/twig": "^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"league/commonmark": "^1.0|^2.0",
|
||||
"symfony/phpunit-bridge": "^6.4|^7.0",
|
||||
"twig/cache-extra": "^3.0",
|
||||
"twig/cssinliner-extra": "^2.12|^3.0",
|
||||
"twig/html-extra": "^2.12|^3.0",
|
||||
"twig/inky-extra": "^2.12|^3.0",
|
||||
"twig/intl-extra": "^2.12|^3.0",
|
||||
"twig/markdown-extra": "^2.12|^3.0",
|
||||
"twig/string-extra": "^2.12|^3.0"
|
||||
"twig/cssinliner-extra": "^3.0",
|
||||
"twig/html-extra": "^3.0",
|
||||
"twig/inky-extra": "^3.0",
|
||||
"twig/intl-extra": "^3.0",
|
||||
"twig/markdown-extra": "^3.0",
|
||||
"twig/string-extra": "^3.0"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"autoload": {
|
||||
@@ -3077,7 +3692,7 @@
|
||||
"twig"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.8.0"
|
||||
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.9.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3089,34 +3704,41 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-11-21T14:02:01+00:00"
|
||||
"time": "2024-02-07T08:24:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v3.8.0",
|
||||
"version": "v3.9.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
|
||||
"reference": "47857eebb197745f66369b76c044a2359e3cc5b9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
|
||||
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/47857eebb197745f66369b76c044a2359e3cc5b9",
|
||||
"reference": "47857eebb197745f66369b76c044a2359e3cc5b9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"symfony/deprecation-contracts": "^2.5|^3",
|
||||
"symfony/polyfill-ctype": "^1.8",
|
||||
"symfony/polyfill-mbstring": "^1.3",
|
||||
"symfony/polyfill-php80": "^1.22"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/container": "^1.0|^2.0",
|
||||
"symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0"
|
||||
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/Resources/core.php",
|
||||
"src/Resources/debug.php",
|
||||
"src/Resources/escaper.php",
|
||||
"src/Resources/string_loader.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Twig\\": "src/"
|
||||
}
|
||||
@@ -3149,7 +3771,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/twigphp/Twig/issues",
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.8.0"
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.9.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3161,7 +3783,70 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-11-21T18:54:41+00:00"
|
||||
"time": "2024-04-16T16:04:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ua-parser/uap-php",
|
||||
"version": "v3.9.14",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ua-parser/uap-php.git",
|
||||
"reference": "b796c5ea5df588e65aeb4e2c6cce3811dec4fed6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ua-parser/uap-php/zipball/b796c5ea5df588e65aeb4e2c6cce3811dec4fed6",
|
||||
"reference": "b796c5ea5df588e65aeb4e2c6cce3811dec4fed6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"composer/ca-bundle": "^1.1",
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^0.12.33",
|
||||
"phpunit/phpunit": "^8 || ^9",
|
||||
"symfony/console": "^3.4 || ^4.2 || ^4.3 || ^5.0",
|
||||
"symfony/filesystem": "^3.4 || ^4.2 || ^4.3 || ^5.0",
|
||||
"symfony/finder": "^3.4 || ^4.2 || ^4.3 || ^5.0",
|
||||
"symfony/yaml": "^3.4 || ^4.2 || ^4.3 || ^5.0",
|
||||
"vimeo/psalm": "^3.12"
|
||||
},
|
||||
"suggest": {
|
||||
"symfony/console": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0",
|
||||
"symfony/filesystem": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0",
|
||||
"symfony/finder": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0",
|
||||
"symfony/yaml": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0"
|
||||
},
|
||||
"bin": [
|
||||
"bin/uaparser"
|
||||
],
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"UAParser\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Dave Olsen",
|
||||
"email": "dmolsen@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Lars Strojny",
|
||||
"email": "lars@strojny.net"
|
||||
}
|
||||
],
|
||||
"description": "A multi-language port of Browserscope's user agent parser.",
|
||||
"support": {
|
||||
"issues": "https://github.com/ua-parser/uap-php/issues",
|
||||
"source": "https://github.com/ua-parser/uap-php/tree/v3.9.14"
|
||||
},
|
||||
"time": "2020-10-02T23:36:20+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
|
||||
@@ -10,4 +10,5 @@ return [
|
||||
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
|
||||
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
||||
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
|
||||
Nelmio\SecurityBundle\NelmioSecurityBundle::class => ['all' => true],
|
||||
];
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
nelmio_security:
|
||||
# prevents framing of the entire site
|
||||
clickjacking:
|
||||
paths:
|
||||
'^/.*': DENY
|
||||
|
||||
# disables content type sniffing for script resources
|
||||
content_type:
|
||||
nosniff: true
|
||||
|
||||
# forces Microsoft's XSS-Protection with
|
||||
# its block mode
|
||||
xss_protection:
|
||||
enabled: true
|
||||
mode_block: true
|
||||
|
||||
# Send a full URL in the `Referer` header when performing a same-origin request,
|
||||
# only send the origin of the document to secure destination (HTTPS->HTTPS),
|
||||
# and send no header to a less secure destination (HTTPS->HTTP).
|
||||
# If `strict-origin-when-cross-origin` is not supported, use `no-referrer` policy,
|
||||
# no referrer information is sent along with requests.
|
||||
referrer_policy:
|
||||
enabled: true
|
||||
policies:
|
||||
- 'no-referrer'
|
||||
- 'strict-origin-when-cross-origin'
|
||||
|
||||
csp:
|
||||
enabled: true
|
||||
|
||||
enforce:
|
||||
script-src:
|
||||
- 'self'
|
||||
@@ -1,5 +1,3 @@
|
||||
includes:
|
||||
- vendor/php-flasher/php-flasher/src/Prime/extension.neon
|
||||
parameters:
|
||||
level: 9
|
||||
paths:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use Flasher\Prime\FlasherInterface;
|
||||
use App\Entity\Book;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
@@ -10,19 +10,19 @@ use Symfony\Component\Routing\Attribute\Route;
|
||||
class HomeController extends AbstractController
|
||||
{
|
||||
#[Route('/', name: 'app_home')]
|
||||
public function index(FlasherInterface $flasher): Response
|
||||
public function index(): Response
|
||||
{
|
||||
$this->addFlash('success', 'welcome from php-flasher');
|
||||
sweetalert()->timerProgressBar()->success('hello from Home Controller');
|
||||
noty()->layout('topCenter')->success('hello from Home Controller');
|
||||
notyf()->ripple(false)->warning('hello from Home Controller');
|
||||
toastr()->positionClass('toast-bottom-left')->error('hello from Home Controller');
|
||||
flash()->use('flasher')->success('hello from flasher factory');
|
||||
|
||||
flash()->info('hello from Home Controller', ['timeout' => 60000]);
|
||||
$flasher->info('hello from Home Controller', ['timeout' => 60000]);
|
||||
flash()->created(new Book('lord of the rings'));
|
||||
flash()->saved(new Book('harry potter'));
|
||||
|
||||
sweetalert()->success('hello from Home Controller', ['timeout' => 60000]);
|
||||
noty()->success('hello from Home Controller', ['timeout' => 60000]);
|
||||
notyf()->warning('hello from Home Controller', ['timeout' => 60000]);
|
||||
|
||||
toastr()->error('hello from Home Controller', ['timeout' => 60000]);
|
||||
\Flasher\Toastr\Prime\toastr()->error('hello from Home Controller', ['timeout' => 60000]);
|
||||
// flash()->updated();
|
||||
// flash()->deleted();
|
||||
|
||||
return $this->render('home/index.html.twig', [
|
||||
'controller_name' => 'HomeController',
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
readonly class Book
|
||||
{
|
||||
public function __construct(private string $title)
|
||||
{
|
||||
|
||||
}
|
||||
public function getFlashIdentifier(): string
|
||||
{
|
||||
return sprintf('"%s" book', $this->title);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,16 @@
|
||||
{
|
||||
"nelmio/security-bundle": {
|
||||
"version": "3.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "2.4",
|
||||
"ref": "65726efb67ff51d89de38195bc0d230fa811f64d"
|
||||
},
|
||||
"files": [
|
||||
"config/packages/nelmio_security.yaml"
|
||||
]
|
||||
},
|
||||
"phpstan/phpstan": {
|
||||
"version": "1.10",
|
||||
"recipe": {
|
||||
|
||||
@@ -1,20 +1,7 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Hello HomeController!{% endblock %}
|
||||
{% block title %}PHPFlasher{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<style>
|
||||
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
|
||||
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
|
||||
</style>
|
||||
|
||||
<div class="example-wrapper">
|
||||
<h1>Hello {{ controller_name }}! ✅</h1>
|
||||
|
||||
This friendly message is coming from:
|
||||
<ul>
|
||||
<li>Your controller at <code>/Users/yoeunes/projects/wips/flashy/src/Controller/HomeController.php</code></li>
|
||||
<li>Your template at <code>/Users/yoeunes/projects/wips/flashy/templates/home/index.html.twig</code></li>
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
+3
-1
@@ -3,6 +3,8 @@ source 'https://rubygems.org'
|
||||
gem 'jekyll'
|
||||
gem 'csv'
|
||||
gem 'bigdecimal'
|
||||
gem 'base64'
|
||||
gem 'kramdown-parser-gfm'
|
||||
|
||||
group :jekyll_plugins do
|
||||
gem 'jekyll-sitemap'
|
||||
@@ -10,4 +12,4 @@ group :jekyll_plugins do
|
||||
gem 'jekyll-seo-tag'
|
||||
end
|
||||
|
||||
gem "webrick", "~> 1.8"
|
||||
gem "webrick"
|
||||
|
||||
+8
-5
@@ -3,6 +3,7 @@ GEM
|
||||
specs:
|
||||
addressable (2.8.6)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
base64 (0.2.0)
|
||||
bigdecimal (3.1.7)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.2.3)
|
||||
@@ -57,18 +58,18 @@ GEM
|
||||
mercenary (0.4.0)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (5.0.4)
|
||||
rake (13.1.0)
|
||||
public_suffix (5.0.5)
|
||||
rake (13.2.1)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.2.6)
|
||||
rouge (4.2.1)
|
||||
safe_yaml (1.0.5)
|
||||
sass-embedded (1.72.0)
|
||||
sass-embedded (1.76.0)
|
||||
google-protobuf (>= 3.25, < 5.0)
|
||||
rake (>= 13.0.0)
|
||||
sass-embedded (1.72.0-x86_64-linux-gnu)
|
||||
sass-embedded (1.76.0-x86_64-linux-gnu)
|
||||
google-protobuf (>= 3.25, < 5.0)
|
||||
terminal-table (3.0.2)
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
@@ -80,13 +81,15 @@ PLATFORMS
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
base64
|
||||
bigdecimal
|
||||
csv
|
||||
jekyll
|
||||
jekyll-redirect-from
|
||||
jekyll-seo-tag
|
||||
jekyll-sitemap
|
||||
webrick (~> 1.8)
|
||||
kramdown-parser-gfm
|
||||
webrick
|
||||
|
||||
BUNDLED WITH
|
||||
2.5.6
|
||||
|
||||
+10
-10
@@ -1,21 +1,21 @@
|
||||
{
|
||||
"dist/main.css": "/dist/main.89ac14de.css",
|
||||
"dist/main.js": "/dist/main.4d227167.js",
|
||||
"dist/main.css": "/dist/main.73b25228.css",
|
||||
"dist/main.js": "/dist/main.09f63ce9.js",
|
||||
"dist/455.3a7b4474.css": "/dist/455.3a7b4474.css",
|
||||
"dist/455.17bc016b.js": "/dist/455.17bc016b.js",
|
||||
"dist/455.095e6545.js": "/dist/455.095e6545.js",
|
||||
"dist/411.29cd993e.css": "/dist/411.29cd993e.css",
|
||||
"dist/411.42e6794f.js": "/dist/411.42e6794f.js",
|
||||
"dist/411.277b21bc.js": "/dist/411.277b21bc.js",
|
||||
"dist/641.c0be7378.css": "/dist/641.c0be7378.css",
|
||||
"dist/641.f8750364.js": "/dist/641.f8750364.js",
|
||||
"dist/641.a938263c.js": "/dist/641.a938263c.js",
|
||||
"dist/160.554a2dcd.css": "/dist/160.554a2dcd.css",
|
||||
"dist/160.264e6e64.js": "/dist/160.264e6e64.js",
|
||||
"dist/265.396597b6.js": "/dist/265.396597b6.js",
|
||||
"dist/160.22e7905c.js": "/dist/160.22e7905c.js",
|
||||
"dist/265.52505228.js": "/dist/265.52505228.js",
|
||||
"dist/371.9523a7ff.css": "/dist/371.9523a7ff.css",
|
||||
"dist/371.324a7072.js": "/dist/371.324a7072.js",
|
||||
"dist/371.f9d2cf4e.js": "/dist/371.f9d2cf4e.js",
|
||||
"dist/735.11112420.css": "/dist/735.11112420.css",
|
||||
"dist/735.3cd4e509.js": "/dist/735.3cd4e509.js",
|
||||
"dist/735.5b8d44b1.js": "/dist/735.5b8d44b1.js",
|
||||
"dist/243.699ba66f.css": "/dist/243.699ba66f.css",
|
||||
"dist/243.991d9535.js": "/dist/243.991d9535.js",
|
||||
"dist/107.6a2ea759.css": "/dist/107.6a2ea759.css",
|
||||
"dist/107.12087179.js": "/dist/107.12087179.js"
|
||||
"dist/107.090fb6e1.js": "/dist/107.090fb6e1.js"
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
<i class="fa-brands fa-laravel fa-lg text-red-900 mr-1"></i> Laravel: '/laravel/'
|
||||
<i class="fa-duotone fa-ghost fa-lg text-pink-800 mr-1"></i> Livewire: '/livewire/'
|
||||
<i class="fa-duotone fa-angles-right fa-lg text-indigo-900 mr-1"></i> Inertia: '/inertia/'
|
||||
<i class="fa-duotone fa-magnifying-glass fa-lg text-indigo-900 mr-1"></i> PHPstan: '/phpstan/'
|
||||
|
||||
<i class="fa-duotone fa-plug"></i> libraries:
|
||||
<i class="fa-duotone fa-bell text-indigo-900 mr-1 fa-lg"></i> Noty: '/library/noty/'
|
||||
|
||||
+12
-25
@@ -12,16 +12,18 @@ Then, before returning a view or redirecting, call the `success()` method and pa
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
use Flasher\Prime\FlasherInterface;
|
||||
|
||||
class BookController
|
||||
{
|
||||
public function saveBook()
|
||||
{
|
||||
// ...
|
||||
|
||||
flash('{{ message }}');
|
||||
|
||||
flash()->success('{{ site.data.messages["success"] | sample }}');
|
||||
|
||||
flash('{{ message }}');
|
||||
|
||||
// ... redirect or render the view
|
||||
}
|
||||
|
||||
@@ -116,31 +118,27 @@ flash()->flash(string $type, string $message, string $title = null, array $optio
|
||||
flash()->flash('{{ type }}', '{{ message }}');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `$type` | Notification type : <span class="text-white bg-green-600 px-2 py-1 rounded">success</span>, <span class="text-white bg-red-600 px-2 py-1 rounded">error</span>, <span class="text-white bg-yellow-600 px-2 py-1 rounded">warning</span>, <span class="text-white bg-blue-600 px-2 py-1 rounded">info</span> ....etc |
|
||||
| `$message` | The body of the message you want to deliver to your user. This may contain HTML. If you add links, be sure to add the appropriate classes for the framework you are using. |
|
||||
| `$title` | The notification title, Can also include HTML |
|
||||
| `$options` | Custom options for javascript libraries (toastr, noty, notyf ...etc) | |
|
||||
| param | description |
|
||||
|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `$type` | Notification type : <span class="text-white bg-green-600 px-2 py-1 rounded">success</span>, <span class="text-white bg-red-600 px-2 py-1 rounded">error</span>, <span class="text-white bg-yellow-600 px-2 py-1 rounded">warning</span>, <span class="text-white bg-blue-600 px-2 py-1 rounded">info</span> |
|
||||
| `$message` | The body of the message you want to deliver to your user. This may contain HTML. If you add links, be sure to add the appropriate classes for the framework you are using. |
|
||||
| `$title` | The notification title, Can also include HTML |
|
||||
| `$options` | Custom options for javascript libraries (toastr, noty, notyf ...etc) |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Modifiers
|
||||
|
||||
<p id="method-options"><a href="#method-options" class="anchor"><i class="fa-duotone fa-link"></i> options</a></p>
|
||||
|
||||
You can specify **custom options** for the flash messages when using a JavaScript library like `toastr`, `noty`, or `notyf`. <br /><br />
|
||||
The `options()` method allows you to set multiple options at once by passing an array of `key-value` pairs,
|
||||
while the `option()` method allows you to set a single option by specifying its name and value as separate arguments. <br /><br />
|
||||
The optional `$merge` argument for the `options()` method can be used to specify whether the new options should be merged with any existing options,
|
||||
The optional `$append` argument for the `options()` method can be used to specify whether the new options should be appended to any existing options,
|
||||
or whether they should overwrite them.
|
||||
|
||||
```php
|
||||
flash()->options(array $options, bool $merge = true);
|
||||
flash()->options(array $options, bool $append = true);
|
||||
```
|
||||
|
||||
> Refer to the documentation for your chosen JavaScript library to see which options are available and how they should be formatted.
|
||||
|
||||
{% assign id = '#/ usage options' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
@@ -158,12 +156,6 @@ flash()
|
||||
])
|
||||
->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|------------|--------------------------------------------------------------------------------------|
|
||||
| `$options` | Custom options to be passed to the javascript libraries (toastr, noty, notyf ...etc) |
|
||||
| `$merge` | Merge options if you call the options method multiple times |
|
||||
|
||||
---
|
||||
|
||||
<p id="method-option"><a href="#method-option" class="anchor"><i class="fa-duotone fa-link"></i> option</a></p>
|
||||
@@ -189,11 +181,6 @@ flash()
|
||||
->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|-----------|--------------|
|
||||
| `$option` | Option key |
|
||||
| `$value` | Option value |
|
||||
|
||||
---
|
||||
|
||||
<p id="method-priority"><a href="#method-priority" class="anchor"><i class="fa-duotone fa-link"></i> priority</a></p>
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
<div data-controller="playground"
|
||||
data-playground-adapter-value="flasher"
|
||||
data-playground-type-value="info"
|
||||
data-playground-message-value="Welcome to PHPFlasher!"
|
||||
data-playground-title-value="Information"
|
||||
class="max-w-7xl mx-auto p-8 bg-white rounded-xl shadow-lg my-10">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-10">
|
||||
<div class="space-y-6">
|
||||
<div class="space-y-4">
|
||||
<div>
|
||||
<label for="title" class="block text-sm font-semibold text-gray-700">Title</label>
|
||||
<input id="title" type="text" data-playground-target="title" value="Information" class="mt-2 block w-full rounded-lg border border-gray-300 shadow-sm focus:border-indigo-600 focus:ring-2 focus:ring-indigo-500 focus:ring-opacity-50 text-lg px-4 py-2"/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="message" class="block text-sm font-semibold text-gray-700">Message</label>
|
||||
<input id="message" type="text" data-playground-target="message" value="Welcome to PHPFlasher!" class="mt-2 block w-full rounded-lg border border-gray-300 shadow-sm focus:border-indigo-600 focus:ring-2 focus:ring-indigo-500 focus:ring-opacity-50 text-lg px-4 py-2"/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-semibold text-gray-700">Type</label>
|
||||
<div id="type-options" class="mt-4 flex space-x-4">
|
||||
<button type="button" class="py-1 px-4 rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" data-action="click->playground#selectType" data-value="info">info</button>
|
||||
<button type="button" class="py-1 px-4 rounded-md text-white bg-yellow-500 hover:bg-yellow-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-yellow-500" data-action="click->playground#selectType" data-value="warning">warning</button>
|
||||
<button type="button" class="py-1 px-4 rounded-md text-white bg-red-600 hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" data-action="click->playground#selectType" data-value="error">error</button>
|
||||
<button type="button" class="py-1 px-4 rounded-md text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500" data-action="click->playground#selectType" data-value="success">success</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div data-playground-target="optionsContainer" class="space-y-4"></div>
|
||||
|
||||
<button data-action="click->playground#showNotification" class="w-full bg-indigo-500 hover:bg-indigo-700 text-white font-bold py-3 px-4 rounded-md transition ease-in-out duration-150">
|
||||
Show Notification
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="rounded-lg">
|
||||
<pre id="php-code-snippet" class="text-white overflow-auto"><code data-playground-target="codeSnippet" class="language-php"></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -10,6 +10,11 @@
|
||||
<div data-controller="ray"></div>
|
||||
{% endif %}
|
||||
|
||||
<div class="bg-green-700 text-white text-center p-1 leading-tight shadow-lg">
|
||||
<span class="text-xl font-bold">🇵🇸 Solidarity with Palestine.</span>
|
||||
<span class="inline text-xs sm:text-sm md:text-base">We seek justice and peace, and strongly oppose all forms of injustice and genocide.</span>
|
||||
</div>
|
||||
|
||||
<div class="h-16 z-10 top-0 w-screen bg-white border-b border-indigo-200 shadow">
|
||||
<div id="header-logo" class="lg:container lg:mx-auto px-4 py-2">
|
||||
<div class="flex items-center flex-no-shrink pt-1">
|
||||
@@ -32,11 +37,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-green-700 text-white text-center p-1 leading-tight shadow-lg sticky top-0 z-10">
|
||||
<span class="text-xl font-bold">🇵🇸 Solidarity with Palestine.</span>
|
||||
<span class="inline text-xs sm:text-sm md:text-base">We seek justice and peace, and we strongly oppose all forms of injustice and genocide. Together, we support the rights and freedom of the Palestinian people.</span>
|
||||
</div>
|
||||
|
||||
<main class="lg:container lg:mx-auto lg:px-6 flex">
|
||||
<nav id="main-navigation" class="sticky top-8 hidden lg:block h-full w-full mx-10 lg:w-40">
|
||||
{% for section in site.data.menu %}
|
||||
|
||||
@@ -2,93 +2,94 @@ import { Controller } from '@hotwired/stimulus'
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
const container = document.querySelector('#anchor-navigation')
|
||||
this.container = document.querySelector('#anchor-navigation')
|
||||
if (!this.container) {
|
||||
return
|
||||
}
|
||||
|
||||
createAnchorNavigation()
|
||||
highlightCurrentAnchor()
|
||||
stickyHeight()
|
||||
this.createAnchorNavigation()
|
||||
this.highlightCurrentAnchor()
|
||||
this.stickyHeight()
|
||||
this.setupEventListeners()
|
||||
}
|
||||
|
||||
createAnchorNavigation() {
|
||||
const ul = this.container.querySelector('ul')
|
||||
const anchors = document.querySelectorAll('#main-article h3, #main-article h2, #main-article a.anchor')
|
||||
|
||||
if (anchors.length === 0) {
|
||||
this.container.remove()
|
||||
return
|
||||
}
|
||||
|
||||
this.container.classList.add('lg:block')
|
||||
|
||||
anchors.forEach((anchor) => {
|
||||
const li = this.createNavItem(anchor)
|
||||
ul.appendChild(li)
|
||||
})
|
||||
}
|
||||
|
||||
createNavItem(anchor) {
|
||||
const li = document.createElement('li')
|
||||
li.className = 'px-6 rounded w-full'
|
||||
if (anchor.tagName === 'A') {
|
||||
li.className = 'px-12 rounded w-full'
|
||||
}
|
||||
|
||||
const link = document.createElement('a')
|
||||
link.href = anchor.tagName === 'A' ? anchor.hash : `#${anchor.getAttribute('id')}`
|
||||
link.innerHTML = anchor.tagName === 'A' ? anchor.textContent : `<i class="fa-duotone fa-angle-right"></i>${anchor.textContent}`
|
||||
link.className = 'leading-loose text-md inline-block w-full text-indigo-500'
|
||||
|
||||
li.appendChild(link)
|
||||
return li
|
||||
}
|
||||
|
||||
highlightCurrentAnchor(hash = window.location.hash) {
|
||||
if (hash.length === 0) {
|
||||
return
|
||||
}
|
||||
|
||||
const links = document.querySelectorAll('a.anchor, #anchor-navigation ul li a')
|
||||
links.forEach((anchor) => {
|
||||
anchor.addEventListener('click', (event) => {
|
||||
event.preventDefault()
|
||||
|
||||
window.location.hash = anchor.hash
|
||||
highlightCurrentAnchor(anchor.hash)
|
||||
links.forEach((link) => {
|
||||
const parent = link.parentElement
|
||||
if (hash === link.hash) {
|
||||
link.classList.remove('text-gray-900')
|
||||
link.classList.add('text-white')
|
||||
parent.classList.add('bg-indigo-500')
|
||||
} else {
|
||||
link.classList.add('text-gray-900')
|
||||
link.classList.remove('text-white')
|
||||
parent.classList.remove('bg-indigo-500')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
stickyHeight() {
|
||||
const article = document.querySelector('#main-article')
|
||||
const stickies = document.querySelectorAll('.sticky')
|
||||
|
||||
stickies.forEach((sticky) => {
|
||||
if (sticky.offsetHeight > window.innerHeight && article.clientHeight > sticky.offsetHeight) {
|
||||
const div = document.createElement('div')
|
||||
div.className = 'h-screen overflow-y-auto'
|
||||
div.innerHTML = sticky.innerHTML
|
||||
|
||||
sticky.innerHTML = div.outerHTML
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
setupEventListeners() {
|
||||
const links = this.container.querySelectorAll('a')
|
||||
links.forEach((link) => {
|
||||
link.addEventListener('click', (event) => {
|
||||
event.preventDefault()
|
||||
window.location.hash = link.hash
|
||||
this.highlightCurrentAnchor(link.hash)
|
||||
})
|
||||
})
|
||||
|
||||
function createAnchorNavigation() {
|
||||
const ul = document.querySelector('#anchor-navigation ul')
|
||||
const anchors = document.querySelectorAll('#main-article h3, #main-article h2, #main-article a.anchor')
|
||||
|
||||
if (anchors.length === 0) {
|
||||
container.remove()
|
||||
return
|
||||
}
|
||||
|
||||
container.classList.add('lg:block')
|
||||
|
||||
anchors.forEach((anchor) => {
|
||||
const parent = anchor.parentElement
|
||||
parent.classList.add('px-6', 'rounded')
|
||||
|
||||
anchor.classList.add('leading-loose')
|
||||
|
||||
const link = document.createElement('a')
|
||||
link.href = anchor.tagName === 'A' ? anchor.hash : `#${anchor.getAttribute('id')}`
|
||||
link.innerHTML = anchor.tagName === 'A' ? anchor.textContent : `<i class="fa-duotone fa-angle-right"></i>${anchor.textContent}`
|
||||
link.classList.add('leading-loose', 'text-md', 'inline-block', 'w-full', 'text-indigo-500')
|
||||
|
||||
const li = document.createElement('li')
|
||||
li.classList.add('px-6', 'rounded', 'w-full')
|
||||
if (anchor.tagName === 'A') {
|
||||
li.classList.remove('px-6')
|
||||
li.classList.add('px-12')
|
||||
}
|
||||
|
||||
li.appendChild(link)
|
||||
|
||||
ul.appendChild(li)
|
||||
})
|
||||
}
|
||||
|
||||
function highlightCurrentAnchor(hash) {
|
||||
if (typeof hash === 'undefined') {
|
||||
hash = window.location.hash
|
||||
}
|
||||
|
||||
const links = document.querySelectorAll('a.anchor, #anchor-navigation ul li a')
|
||||
links.forEach((link) => {
|
||||
const parent = link.parentElement
|
||||
link.classList.remove('text-gray-900')
|
||||
link.classList.add('text-indigo-500')
|
||||
parent.classList.remove('bg-indigo-500')
|
||||
|
||||
if (hash === link.hash) {
|
||||
link.classList.remove('text-indigo-500')
|
||||
link.classList.add('text-white')
|
||||
|
||||
parent.classList.add('bg-indigo-500')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function stickyHeight() {
|
||||
const article = document.querySelector('#main-article')
|
||||
const elements = document.querySelectorAll('.sticky')
|
||||
|
||||
elements.forEach((element) => {
|
||||
if (element.offsetHeight <= window.innerHeight || article.clientHeight <= element.offsetHeight) {
|
||||
return
|
||||
}
|
||||
|
||||
const div = document.createElement('div')
|
||||
div.classList.add('h-screen', 'overflow-y-auto')
|
||||
div.innerHTML = element.innerHTML
|
||||
|
||||
element.innerHTML = div.outerHTML
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
import { Controller } from '@hotwired/stimulus'
|
||||
import Prism from 'prismjs'
|
||||
import flasher from '@flasher/flasher'
|
||||
|
||||
import 'prismjs/components/prism-markup-templating'
|
||||
import 'prismjs/components/prism-php'
|
||||
|
||||
import './playground.pcss'
|
||||
|
||||
export default class extends Controller {
|
||||
static values = {
|
||||
adapter: String,
|
||||
type: String,
|
||||
message: String,
|
||||
title: String,
|
||||
}
|
||||
|
||||
static targets = ['optionsContainer', 'codeSnippet', 'message', 'title', 'adapter', 'type']
|
||||
|
||||
connect() {
|
||||
this.initializeActiveButtons()
|
||||
this.updateAdapterOptions()
|
||||
this.updateCodeSnippet()
|
||||
|
||||
Prism.highlightAll()
|
||||
}
|
||||
|
||||
initializeActiveButtons() {
|
||||
this.updateButtonStyles('#adapter-options', this.adapterValue)
|
||||
this.updateButtonStyles('#type-options', this.typeValue)
|
||||
}
|
||||
|
||||
selectType(event) {
|
||||
const type = event.currentTarget.dataset.value
|
||||
this.typeTarget.value = type
|
||||
this.typeValue = type
|
||||
this.updateButtonStyles('#type-options', type)
|
||||
}
|
||||
|
||||
updateButtonStyles(containerSelector, activeValue) {
|
||||
document.querySelectorAll(`${containerSelector} button`).forEach((button) => {
|
||||
const isActive = button.dataset.value === activeValue
|
||||
|
||||
button.classList.toggle('ring-2', isActive)
|
||||
button.classList.toggle('ring-offset-2', isActive)
|
||||
})
|
||||
}
|
||||
|
||||
updateAdapterOptions() {
|
||||
const options = this.fetchAdapterOptions(this.adapterValue)
|
||||
this.renderOptionsForm(options)
|
||||
}
|
||||
|
||||
fetchAdapterOptions(adapter) {
|
||||
const options = {
|
||||
flasher: {
|
||||
position: {
|
||||
type: 'radio',
|
||||
default: 'top-right',
|
||||
options: ['top-right', 'top-left', 'top-center', 'bottom-right', 'bottom-left', 'bottom-center'],
|
||||
},
|
||||
direction: {
|
||||
type: 'radio',
|
||||
default: 'top',
|
||||
options: ['top', 'bottom'],
|
||||
},
|
||||
timeout: {
|
||||
type: 'radio',
|
||||
default: 5000,
|
||||
options: [0, 3000, 9000],
|
||||
},
|
||||
},
|
||||
toastr: {
|
||||
closeButton: { type: 'checkbox', default: true },
|
||||
},
|
||||
}
|
||||
return options[adapter] || {}
|
||||
}
|
||||
|
||||
renderOptionsForm(options) {
|
||||
let formHTML = '<form id="options-form" class="space-y-4">'
|
||||
Object.entries(options).forEach(([key, option]) => {
|
||||
formHTML += this.optionToFormHTML(key, option)
|
||||
})
|
||||
formHTML += '</form>'
|
||||
this.optionsContainerTarget.innerHTML = formHTML
|
||||
}
|
||||
|
||||
optionToFormHTML(key, option) {
|
||||
let inputHTML = ''
|
||||
if (option.type === 'radio') {
|
||||
inputHTML = option.options.map((opt) => `
|
||||
<div class="flex items-center w-1/4">
|
||||
<input id="${key}-${opt}" type="radio" name="${key}" value="${opt}" class="text-indigo-600 border-gray-300 focus:ring-indigo-500" ${opt === option.default ? 'checked' : ''}>
|
||||
<label for="${key}-${opt}" class="py-1 px-4 text-sm font-medium text-gray-800 whitespace-nowrap">${opt}</label>
|
||||
</div>
|
||||
`).join('')
|
||||
} else if (option.type === 'checkbox') {
|
||||
inputHTML = `
|
||||
<div class="flex items-center w-1/4">
|
||||
<input id="${key}" type="checkbox" name="${key}" class="text-indigo-600 border-gray-300 focus:ring-indigo-500 rounded" ${option.default ? 'checked' : ''}>
|
||||
<label for="${key}" class="py-1 px-4 text-sm font-medium text-gray-800">${key}</label>
|
||||
</div>
|
||||
`
|
||||
} else {
|
||||
inputHTML = `<div class="w-1/4"><input type="${option.type}" name="${key}" value="${option.default}" class="hidden"></div>`
|
||||
}
|
||||
return `
|
||||
<div class="mb-4">
|
||||
<label class="text-sm font-semibold text-gray-700">${key}</label>
|
||||
<div class="mt-2 grid grid-cols-3">
|
||||
${inputHTML}
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
}
|
||||
|
||||
showNotification(event) {
|
||||
event.preventDefault()
|
||||
const options = this.collectOptions()
|
||||
const message = this.messageTarget.value
|
||||
const title = this.titleTarget.value
|
||||
const type = this.typeValue
|
||||
|
||||
this.updateCodeSnippet()
|
||||
flasher.use(this.adapterValue).flash(type, message, title, options)
|
||||
}
|
||||
|
||||
collectOptions() {
|
||||
const form = this.optionsContainerTarget.querySelector('#options-form')
|
||||
const formData = new FormData(form)
|
||||
const options = {}
|
||||
formData.forEach((value, key) => {
|
||||
options[key] = value
|
||||
})
|
||||
return options
|
||||
}
|
||||
|
||||
updateCodeSnippet() {
|
||||
const options = this.collectOptions()
|
||||
const message = this.messageTarget.value
|
||||
const title = this.titleTarget.value
|
||||
const type = this.typeValue
|
||||
|
||||
const optionsString = this.optionsToOptionMethods(options)
|
||||
|
||||
const codeFunction = this.adapterValue === 'toastr' ? 'toastr' : 'flash'
|
||||
const formattedOptions = optionsString ? `\n${optionsString}` : ''
|
||||
this.codeSnippetTarget.textContent = `${codeFunction}()${formattedOptions}\n\t->${type}('${message}', '${title}');`
|
||||
Prism.highlightElement(this.codeSnippetTarget)
|
||||
}
|
||||
|
||||
optionsToOptionMethods(options) {
|
||||
return Object.entries(options).map(([key, value]) => {
|
||||
const formattedValue = typeof value === 'string' ? `'${value}'` : value
|
||||
return `\t->option('${key}', ${formattedValue})`
|
||||
}).join('\n')
|
||||
}
|
||||
}
|
||||
@@ -134,3 +134,10 @@ code {
|
||||
#main-navigation ul i {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
a.anchor {
|
||||
padding-left: 3rem;
|
||||
padding-right: 3rem;
|
||||
line-height: 2;
|
||||
border-radius: .25rem;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[371],{371:function(s,e,c){c.r(e)}}]);
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[107],{9107:function(s,e,c){c.r(e)}}]);
|
||||
+1
-1
@@ -1 +1 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[107],{107:function(s,e,c){c.r(e)}}]);
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[160],{3160:function(s,e,c){c.r(e)}}]);
|
||||
+1
-1
@@ -1 +1 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[160],{779:function(s,e,c){c.r(e)}}]);
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[265],{6265:function(s,e,c){c.r(e)}}]);
|
||||
+1
-1
@@ -1 +1 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[265],{265:function(s,e,c){c.r(e)}}]);
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[371],{9371:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[411],{9792:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
-1
@@ -1 +0,0 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[411],{792:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[455],{3455:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
-1
@@ -1 +0,0 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[455],{455:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[641],{2641:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
-1
@@ -1 +0,0 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[641],{641:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
-1
@@ -1 +0,0 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[735],{735:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
"use strict";(self.webpackChunk_flasher_docs=self.webpackChunk_flasher_docs||[]).push([[735],{8735:function(s,e,c){c.r(e)}}]);
|
||||
Vendored
+2
-2
@@ -2,10 +2,10 @@
|
||||
"entrypoints": {
|
||||
"main": {
|
||||
"css": [
|
||||
"/dist/main.89ac14de.css"
|
||||
"/dist/main.73b25228.css"
|
||||
],
|
||||
"js": [
|
||||
"/dist/main.4d227167.js"
|
||||
"/dist/main.09f63ce9.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
File diff suppressed because one or more lines are too long
+9
@@ -24,3 +24,12 @@
|
||||
*
|
||||
* Date: 2023-08-28T13:37Z
|
||||
*/
|
||||
|
||||
/**
|
||||
* Prism: Lightweight, robust, elegant syntax highlighting
|
||||
*
|
||||
* @license MIT <https://opensource.org/licenses/MIT>
|
||||
* @author Lea Verou <https://lea.verou.me>
|
||||
* @namespace
|
||||
* @public
|
||||
*/
|
||||
Vendored
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Generated
+13
-4
@@ -19,7 +19,8 @@
|
||||
"@symfony/webpack-encore": "^4.6.1",
|
||||
"noty": "^3.2.0-beta-deprecated",
|
||||
"notyf": "^3.10.0",
|
||||
"sweetalert2": "^11.10.7",
|
||||
"prismjs": "^1.29.0",
|
||||
"sweetalert2": "^11.10.8",
|
||||
"toastr": "^2.1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -7072,6 +7073,14 @@
|
||||
"renderkid": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/prismjs": {
|
||||
"version": "1.29.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
|
||||
"integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
@@ -8148,9 +8157,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/sweetalert2": {
|
||||
"version": "11.10.7",
|
||||
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.10.7.tgz",
|
||||
"integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg==",
|
||||
"version": "11.10.8",
|
||||
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.10.8.tgz",
|
||||
"integrity": "sha512-oAkYROBfXBY+4sVbQEIcN+ZxAx69lsmz5WEBwdEpyS4m59vOBNlRU5/fJpAI1MVfiDwFZiGwVzB/KBpOyfLNtg==",
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/limonte"
|
||||
|
||||
+2
-1
@@ -20,7 +20,8 @@
|
||||
"@symfony/webpack-encore": "^4.6.1",
|
||||
"noty": "^3.2.0-beta-deprecated",
|
||||
"notyf": "^3.10.0",
|
||||
"sweetalert2": "^11.10.7",
|
||||
"prismjs": "^1.29.0",
|
||||
"sweetalert2": "^11.10.8",
|
||||
"toastr": "^2.1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
+13
-13
@@ -33,36 +33,36 @@ data-controller: flasher
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Introduction
|
||||
|
||||
{% PHPFlasher %} is a powerful, community-driven, open-source project designed to enhance your web applications by providing an intuitive way to display flash messages. These messages serve as immediate feedback for user actions, significantly improving user experience by confirming actions like form submissions, warnings, or errors.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> is a powerful, community-driven, open-source project designed to enhance your web applications by providing an intuitive way to display flash messages. These messages serve as immediate feedback for user actions, significantly improving user experience by confirming actions like form submissions, warnings, or errors.
|
||||
|
||||
Flash messages are crucial for interactive applications, and {% PHPFlasher %} makes implementing them in {% Laravel %} or {% Symfony %} projects straightforward. With support for session-based message storage, {% PHPFlasher %} ensures that messages can be easily set and then retrieved for display on subsequent pages, without complex setup.
|
||||
Flash messages are crucial for interactive applications, and <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> makes implementing them in <i class="fa-brands fa-laravel text-red-900 fa-xl"></i> <strong>Laravel</strong> or <i class="fa-brands fa-symfony text-black fa-xl"></i> <strong>Symfony</strong> projects straightforward. With support for session-based message storage, <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> ensures that messages can be easily set and then retrieved for display on subsequent pages, without complex setup.
|
||||
|
||||
---
|
||||
|
||||
### <i class="fa-duotone fa-list-radio"></i> Flash Notification Types
|
||||
### <i class="fa-duotone fa-list-radio"></i> Notification Types
|
||||
|
||||
{% PHPFlasher %} can handle a variety of notification types to suit different feedback scenarios:
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> can handle a variety of notification types to suit different feedback scenarios:
|
||||
|
||||
> <div class="mt-2"><span class="text-green-700"><i class="fa-solid fa-circle-check fa-xl"></i> success : </span> Indicates successful completion of an action.</div>
|
||||
> <div class="mt-2"><span class="text-blue-600"><i class="fa-solid fa-circle-info fa-xl"></i> info : </span> Provides informational messages to users.</div>
|
||||
> <div class="mt-2"><span class="text-yellow-600"><i class="fa-solid fa-circle-exclamation fa-xl"></i> warning : </span> Alerts users to potential issues that are not errors.</div>
|
||||
> <div class="mt-2"><span class="text-red-600"><i class="fa-solid fa-circle-xmark fa-xl"></i> error : </span> Notifies users of errors or problems encountered.</div>
|
||||
> <div class="mt-2"><span class="text-green-700"><i class="fa-solid fa-circle-check fa-xl"></i> success : </span> indicates successful completion of an action.</div>
|
||||
> <div class="mt-2"><span class="text-blue-600"><i class="fa-solid fa-circle-info fa-xl"></i> info : </span> provides informational messages to users.</div>
|
||||
> <div class="mt-2"><span class="text-yellow-600"><i class="fa-solid fa-circle-exclamation fa-xl"></i> warning : </span> alerts users to potential issues that are not errors.</div>
|
||||
> <div class="mt-2"><span class="text-red-600"><i class="fa-solid fa-circle-xmark fa-xl"></i> error : </span> notifies users of errors or problems encountered.</div>
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Why {% PHPFlasher %} ?
|
||||
## <i class="fa-duotone fa-list-radio"></i> Why <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> ?
|
||||
|
||||
- **Broad Library Support**: PHPFlasher integrates with several popular notification libraries, including [toastr.js](/library/toastr/), [SweetAlert 2](/library/sweetalert/), [Noty](/library/noty/), and [Notyf](/library/notyf/).
|
||||
- **Ease of Use**: Designed with all levels of developers in mind, from beginners to experienced professionals.
|
||||
- **Flexibility**: Offers extensive customization options for notification styling and behaviors.
|
||||
- **Framework Compatibility**: Seamlessly integrates with {% Laravel %} and {% Symfony %}, with options for custom adapter creation.
|
||||
- **Framework Compatibility**: Seamlessly integrates with <i class="fa-brands fa-laravel text-red-900 fa-xl"></i> <strong>Laravel</strong> and <i class="fa-brands fa-symfony text-black fa-xl"></i> <strong>Symfony</strong>, with options for custom adapter creation.
|
||||
- **Developer Friendly**: Features PHPStorm autocomplete for easier coding and integration.
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Getting Started
|
||||
|
||||
Dive into PHPFlasher with our straightforward guides and documentation to seamlessly integrate flash messaging into your projects:
|
||||
Dive into <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> with our straightforward guides and documentation to seamlessly integrate flash messaging into your projects:
|
||||
|
||||
- [**Symfony Guide**](/Symfony/)
|
||||
- [**Laravel Guide**](/Laravel/)
|
||||
@@ -71,6 +71,6 @@ Dive into PHPFlasher with our straightforward guides and documentation to seamle
|
||||
- [**Notyf Library**](/library/notyf/)
|
||||
- [**Sweet Alert Library**](/library/sweetalert/)
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Community and Contributions
|
||||
## <i class="fa-duotone fa-list-radio"></i> Contributions
|
||||
|
||||
{% PHPFlasher %} thrives on community contributions. Your feedback, code contributions, and feature suggestions are invaluable to us. Explore our [GitHub repository](https://github.com/php-flasher/php-flasher) to see how you can become part of the PHPFlasher community. Let's build something great together!
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> thrives on community contributions. Your feedback, code contributions, and feature suggestions are invaluable to us. Explore our [GitHub repository](https://github.com/php-flasher/php-flasher) to see how you can become part of the <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> community. Let's build something great together <i class="fa-solid fa-heart text-red-600"></i>!
|
||||
|
||||
@@ -4,11 +4,11 @@ title: Inertia
|
||||
description: Easily add flash notification messages to your Inertia application with PHPFlasher. Follow our step-by-step guide to install and use the library in your project, and start engaging and informing your users with powerful flash messages.
|
||||
---
|
||||
|
||||
{% PHPFlasher %} offers a solid integration with Inertia.js
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> offers a solid integration with Inertia.js
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
|
||||
To integrate {% PHPFlasher %} with Inertia.js, follow the same installation steps as for the [Laravel Installation](/laravel) package.
|
||||
To integrate <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> with Inertia.js, follow the same installation steps as for the [Laravel Installation](/laravel) package.
|
||||
|
||||
Additionally, include `@flasher/flasher` in your package.json by adding the following line:
|
||||
|
||||
|
||||
@@ -0,0 +1,393 @@
|
||||
---
|
||||
permalink: /installation/
|
||||
title: Installation
|
||||
description: Install only the specific components you need for your project with PHPFlasher, a modular PHP library for displaying flash notification messages. Simply include the library in your composer.json file and run the composer install command to get started.
|
||||
---
|
||||
|
||||
**<span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span>** is modular and consists of multiple libraries,
|
||||
allowing users to install and use only the specific components they need for their project.
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
|
||||
**<span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span>** can be installed using composer :
|
||||
|
||||
**<i class="fa-brands fa-laravel text-red-900 fa-xl"></i> Laravel**:
|
||||
```shell
|
||||
composer require php-flasher/flasher-laravel
|
||||
```
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php artisan flasher:install
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
**<i class="fa-brands fa-symfony text-black fa-xl"></i> Symfony**:
|
||||
```shell
|
||||
composer require php-flasher/flasher-symfony
|
||||
```
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php bin/console flasher:install
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Usage
|
||||
|
||||
To display a notification message, you can either use the `flash()` helper method or obtain an instance of `flasher` from the service container.
|
||||
Then, before returning a view or redirecting, call the `success()` method and pass in the desired message to be displayed.
|
||||
|
||||
{% assign id = '#/ PHPFlasher' %}
|
||||
{% assign type = 'success' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
use Flasher\Prime\FlasherInterface;
|
||||
|
||||
class BookController
|
||||
{
|
||||
public function saveBook()
|
||||
{
|
||||
// ...
|
||||
|
||||
flash('{{ message }}');
|
||||
|
||||
flash()->success('{{ site.data.messages["success"] | sample }}');
|
||||
|
||||
app('flasher')->success('{{ site.data.messages["success"] | sample }}');
|
||||
|
||||
// ... redirect or render the view
|
||||
}
|
||||
|
||||
/**
|
||||
* if you prefer to use dependency injection
|
||||
*/
|
||||
public function register(FlasherInterface $flasher)
|
||||
{
|
||||
// ...
|
||||
|
||||
$flasher->success('{{ site.data.messages["success"] | sample }}');
|
||||
|
||||
// ... redirect or render the view
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
It's important to choose a message that is clear and concise, and that accurately reflects the outcome of the operation. <br />
|
||||
In this case, `"Book has been created successfully!"` is already a good message,
|
||||
but you may want to tailor it to fit the specific context and language of your application.
|
||||
|
||||
> Using this package is actually pretty easy. Adding notifications to your application actually require only one line of code.
|
||||
|
||||
{% assign id = '#/ usage success' %}
|
||||
{% assign type = 'success' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
{% assign id = '#/ usage error' %}
|
||||
{% assign type = 'error' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
{% assign id = '#/ usage warning' %}
|
||||
{% assign type = 'warning' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
{% assign id = '#/ usage info' %}
|
||||
{% assign type = 'info' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
These four methods (`success`, `error`, `warning`, `info`) are simply convenience shortcuts for the `flash` method,
|
||||
allowing you to specify the `type` and `message` in a single method call rather than having to pass both as separate arguments to the `flash` method.
|
||||
|
||||
```php
|
||||
flash()->flash(string $type, string $message, string $title = null, array $options = [])
|
||||
```
|
||||
|
||||
{% assign id = '#/ usage flash' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()->flash('{{ type }}', '{{ message }}');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `$type` | Notification type : <span class="text-white bg-green-600 px-2 py-1 rounded">success</span>, <span class="text-white bg-red-600 px-2 py-1 rounded">error</span>, <span class="text-white bg-yellow-600 px-2 py-1 rounded">warning</span>, <span class="text-white bg-blue-600 px-2 py-1 rounded">info</span> ....etc |
|
||||
| `$message` | The body of the message you want to deliver to your user. This may contain HTML. If you add links, be sure to add the appropriate classes for the framework you are using. |
|
||||
| `$title` | The notification title, Can also include HTML |
|
||||
| `$options` | Custom options for javascript libraries (toastr, noty, notyf ...etc) | |
|
||||
|
||||
|
||||
---
|
||||
|
||||
<p id="method-options"><a href="#method-options" class="anchor"><i class="fa-duotone fa-link"></i> options</a></p>
|
||||
|
||||
You can specify **custom options** for the flash messages when using a JavaScript library like `toastr`, `noty`, or `notyf`. <br /><br />
|
||||
The `options()` method allows you to set multiple options at once by passing an array of `key-value` pairs,
|
||||
while the `option()` method allows you to set a single option by specifying its name and value as separate arguments. <br /><br />
|
||||
The optional `$merge` argument for the `options()` method can be used to specify whether the new options should be merged with any existing options,
|
||||
or whether they should overwrite them.
|
||||
|
||||
```php
|
||||
flash()->options(array $options, bool $merge = true);
|
||||
```
|
||||
|
||||
> Refer to the documentation for your chosen JavaScript library to see which options are available and how they should be formatted.
|
||||
|
||||
{% assign id = '#/ usage options' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{"timeout": 3000, "position": "top-center"}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()
|
||||
->options([
|
||||
'timeout' => 3000, // 3 seconds
|
||||
'position' => 'top-center',
|
||||
])
|
||||
->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|------------|--------------------------------------------------------------------------------------|
|
||||
| `$options` | Custom options to be passed to the javascript libraries (toastr, noty, notyf ...etc) |
|
||||
| `$merge` | Merge options if you call the options method multiple times |
|
||||
|
||||
---
|
||||
|
||||
<p id="method-option"><a href="#method-option" class="anchor"><i class="fa-duotone fa-link"></i> option</a></p>
|
||||
|
||||
Set a single option by specifying its name and value as separate arguments.
|
||||
|
||||
```php
|
||||
flash()->option(string $option, mixed $value);
|
||||
```
|
||||
|
||||
{% assign id = '#/ usage option' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{"timeout": 3000, "position": "top-center"}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()
|
||||
->option('position', 'top-center')
|
||||
->option('timeout', 3000)
|
||||
->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|-----------|--------------|
|
||||
| `$option` | Option key |
|
||||
| `$value` | Option value |
|
||||
|
||||
---
|
||||
|
||||
<p id="method-priority"><a href="#method-priority" class="anchor"><i class="fa-duotone fa-link"></i> priority</a></p>
|
||||
|
||||
Sets the priority of a flash message, the highest priority will be displayed first.
|
||||
|
||||
```php
|
||||
flash()->priority(int $priority);
|
||||
```
|
||||
|
||||
{% assign id = '#/ usage priority' %}
|
||||
{% assign successMessage = site.data.messages['success'] | sample | prepend: 'Priority 3 → ' %}
|
||||
{% assign errorMessage = site.data.messages['error'] | sample | prepend: 'Priority 1 → ' %}
|
||||
{% assign warningMessage = site.data.messages['warning'] | sample | prepend: 'Priority 4 → ' %}
|
||||
{% assign infoMessage = site.data.messages['info'] | sample | prepend: 'Priority 2 → ' %}
|
||||
|
||||
<script type="text/javascript">
|
||||
messages["{{ id }}"] = [
|
||||
{
|
||||
handler: "flasher",
|
||||
type: "warning",
|
||||
message: "{{ warningMessage }}",
|
||||
options: {},
|
||||
},
|
||||
{
|
||||
handler: "flasher",
|
||||
type: "success",
|
||||
message: "{{ successMessage }}",
|
||||
options: {},
|
||||
},
|
||||
{
|
||||
handler: "flasher",
|
||||
type: "info",
|
||||
message: "{{ infoMessage }}",
|
||||
options: {},
|
||||
},
|
||||
{
|
||||
handler: "flasher",
|
||||
type: "error",
|
||||
message: "{{ errorMessage }}",
|
||||
options: {},
|
||||
},
|
||||
];
|
||||
</script>
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()
|
||||
->priority(3)
|
||||
->success('{{ successMessage }}');
|
||||
|
||||
flash()
|
||||
->priority(1)
|
||||
->error('{{ errorMessage }}');
|
||||
|
||||
flash()
|
||||
->priority(4)
|
||||
->warning('{{ warningMessage }}');
|
||||
|
||||
flash()
|
||||
->priority(2)
|
||||
->info('{{ infoMessage }}');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|-------------|--------------------------------------------------------------------------------------------|
|
||||
| `$priority` | The priority of the notification, the higher the priority, the sooner it will be displayed |
|
||||
|
||||
---
|
||||
|
||||
<p id="method-hops"><a href="#method-hops" class="anchor"><i class="fa-duotone fa-link"></i> hops</a></p>
|
||||
|
||||
This method sets the number of requests that the flash message should persist for. By default, flash messages are only displayed for a single request and are then discarded. By setting the number of hops, the flash message will be persisted for multiple requests.
|
||||
|
||||
As an example, with a multi-page form, you may want to store messages until all pages have been filled.
|
||||
|
||||
{% assign id = '#/ usage hops' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
flash()->hops(int $hops);
|
||||
```
|
||||
|
||||
```php
|
||||
flash()
|
||||
->hops(2)
|
||||
->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|---------|---------------------------------------------------------------|
|
||||
| `$hops` | indicate how many requests the flash message will persist for |
|
||||
|
||||
---
|
||||
|
||||
<p id="method-translate"><a href="#method-translate" class="anchor"><i class="fa-duotone fa-link"></i> translate</a></p>
|
||||
|
||||
This method sets the `locale` to be used for the translation of the flash message. If a non-null value is provided,
|
||||
the flash message will be translated into the specified language. If null is provided, the **default** `locale` will be used.
|
||||
|
||||
```php
|
||||
flash()->translate(string $locale = null);
|
||||
```
|
||||
|
||||
{% assign id = '#/ usage translate' %}
|
||||
{% assign type = 'success' %}
|
||||
{% assign message = 'تمت العملية بنجاح.' %}
|
||||
{% assign title = 'تهانينا' %}
|
||||
{% assign options = '{"rtl": true, "position": "top-right"}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()
|
||||
->translate('ar')
|
||||
->{{ type }}('Your request was processed successfully.', 'Congratulations!');
|
||||
```
|
||||
|
||||
{% assign id = '#/ usage translate with position' %}
|
||||
{% assign type = 'success' %}
|
||||
{% assign message = 'تمت العملية بنجاح.' %}
|
||||
{% assign title = 'تهانينا' %}
|
||||
{% assign options = '{"rtl": true, "position": "top-left"}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
flash()
|
||||
->translate('ar')
|
||||
->option('position', 'top-left')
|
||||
->{{ type }}('Your request was processed successfully.', 'Congratulations!');
|
||||
```
|
||||
|
||||
| param | description |
|
||||
|-----------|------------------------------------------------------------------------------|
|
||||
| `$locale` | The locale to be used for the translation, or null to use the default locale |
|
||||
|
||||
It is **important** to note that the `translate()` method only sets the locale to be used for the translation of the flash message.
|
||||
It does not actually perform the translation itself.
|
||||
|
||||
In order to translate the flash message, you will need to provide the appropriate translation keys in your translation files.
|
||||
|
||||
In the above example, to translate the flash message into `Arabic`, If you are using **<i class="fa-brands fa-laravel text-red-900 fa-xl"></i> Laravel** you will need to add the following keys to the `resources/lang/ar/messages.php` file:
|
||||
|
||||
```php
|
||||
return [
|
||||
'Your request was processed successfully.' => 'تمت العملية بنجاح.',
|
||||
'Congratulations!' => 'تهانينا',
|
||||
];
|
||||
```
|
||||
@@ -5,16 +5,16 @@ title: JavaScript
|
||||
description: Easily add flash notification messages to your JavaScript application with PHPFlasher. Follow our step-by-step guide to install the library using npm or include it in your project using CDN links, and start engaging and informing your users with powerful flash messages.
|
||||
---
|
||||
|
||||
{% PHPFlasher %} assets can be installed from a cdn or using npm
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> assets can be installed from a cdn or using npm
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
Quick start guide for installing the {% PHPFlasher %} from cdn or npm.
|
||||
Quick start guide for installing the <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> from cdn or npm.
|
||||
|
||||
---
|
||||
|
||||
### <i class="fa-duotone fa-list-radio"></i> cdn
|
||||
|
||||
To pull in the {% PHPFlasher %} via CDN, grab the latest version from [jsdelivr](https://www.jsdelivr.com/package/npm/@flasher/flasher)
|
||||
To pull in the <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> via CDN, grab the latest version from [jsdelivr](https://www.jsdelivr.com/package/npm/@flasher/flasher)
|
||||
|
||||
<span>
|
||||
<a href="https://cdn.jsdelivr.net/npm/@flasher/flasher/dist/flasher.min.js" target="_blank">
|
||||
@@ -33,7 +33,7 @@ To pull in the {% PHPFlasher %} via CDN, grab the latest version from [jsdelivr]
|
||||
|
||||
### <i class="fa-duotone fa-list-radio"></i> npm
|
||||
|
||||
To install {% PHPFlasher %} from npm use the following command:
|
||||
To install <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> from npm use the following command:
|
||||
|
||||
```shell
|
||||
npm i @flasher/flasher
|
||||
@@ -68,7 +68,7 @@ or if you are using a cdn like this:
|
||||
|
||||
### <i class="fa-duotone fa-list-radio"></i> Other adapters
|
||||
|
||||
First grad the cdn for any js library adapter supported by {% PHPFlasher %} or install it with npm
|
||||
First grad the cdn for any js library adapter supported by <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> or install it with npm
|
||||
and then call the `create()` method on flasher object :
|
||||
|
||||
```html
|
||||
|
||||
+18
-30
@@ -6,45 +6,31 @@ description: Easily add flash notification messages to your Laravel application
|
||||
framework: laravel
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> {% PHPFlasher %} Laravel
|
||||
## <i class="fa-duotone fa-list-radio"></i> Requirements
|
||||
|
||||
{% PHPFlasher %} is a trusted and well-supported package
|
||||
that allows you to easily integrate flash notification messages into your <i class="fa-brands fa-laravel text-red-900 fa-xl"></i> **Laravel** projects.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> offers a seamless way to incorporate flash notifications in <i class="fa-brands fa-laravel text-red-900 fa-xl"></i> <strong>Laravel</strong> projects, enhancing user feedback with minimal setup.
|
||||
|
||||
To use {% PHPFlasher %} in a **Laravel** application, you need :
|
||||
Requirements for using <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> with Laravel:
|
||||
|
||||
> <i class="fa-brands fa-php fa-2xl text-blue-900 mr-1 mb-1"></i> **PHP** >= 8.2
|
||||
> <i class="fa-brands fa-laravel fa-2xl text-red-900 mr-1 ml-4"></i> **Laravel** >= 11.0
|
||||
> <i class="fa-brands fa-php fa-2xl text-blue-900 mr-1 mb-1"></i> **PHP** v8.2 or higher
|
||||
> <i class="fa-brands fa-laravel fa-2xl text-red-900 mr-1 ml-4"></i> **Laravel** v11.0 or higher
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
|
||||
{% PHPFlasher %} is modular and consists of multiple libraries,
|
||||
allowing users to install and use only the specific components they need for their project.
|
||||
|
||||
{% PHPFlasher %} can be installed using composer :
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>'s modular design lets you select and install only the components your project needs.
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-laravel
|
||||
```
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for {% PHPFlasher %}:
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php artisan flasher:install
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
{% PHPFlasher %} includes a default notification style <i class="fa-duotone fa-comment-captions text-yellow-600"></i>, but users can also install additional adapters to customize the appearance of notifications within their projects such as :
|
||||
|
||||
* **[Toastr](/library/toastr/)**
|
||||
* **[Noty](/library/noty/)**
|
||||
* **[Notyf](/library/notyf/)**
|
||||
* **[Sweet Alert](/library/sweetalert/)**
|
||||
|
||||
---
|
||||
|
||||
{% include _usage.md %}
|
||||
@@ -56,7 +42,7 @@ php artisan flasher:install
|
||||
As optional, if you want to modify the default configuration, you can publish the configuration file:
|
||||
|
||||
```bash
|
||||
php artisan flasher:install
|
||||
php artisan flasher:install --config
|
||||
```
|
||||
|
||||
The configuration file will be located at `config/flasher.php` and will have the following content:
|
||||
@@ -76,10 +62,10 @@ return [
|
||||
'/vendor/flasher/flasher.min.css',
|
||||
],
|
||||
|
||||
// Whether to translate PHPFlasher messages using Laravel's translation service
|
||||
// Enable translation of PHPFlasher messages using Laravel's translator service
|
||||
'translate' => true,
|
||||
|
||||
// Automatically inject PHPFlasher assets into HTML response
|
||||
// Automatically inject PHPFlasher assets in HTML response
|
||||
'inject_assets' => true,
|
||||
|
||||
// Configuration for the flash bag (converting Laravel flash messages)
|
||||
@@ -194,10 +180,10 @@ class BookController
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> RTL support
|
||||
|
||||
{% PHPFlasher %} makes it easy to incorporate <i class="fa-duotone fa-signs-post text-indigo-900 mr-1 fa-lg"></i> **right-to-left** languages like `Arabic` or `Hebrew`.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> makes it easy to incorporate <i class="fa-duotone fa-signs-post text-indigo-900 mr-1 fa-lg"></i> **right-to-left** languages like `Arabic` or `Hebrew`.
|
||||
it automatically detects the text direction and handles the necessary adjustments for you.
|
||||
|
||||
Simply make sure the translation service is enabled and let {% PHPFlasher %} handle the rest.
|
||||
Simply make sure the translation service is enabled and let <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> handle the rest.
|
||||
|
||||
{% assign id = '#/ phpflasher rtl' %}
|
||||
{% assign type = 'success' %}
|
||||
@@ -218,14 +204,14 @@ flash()
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Translation
|
||||
|
||||
{% PHPFlasher %} allows you to translate your notification `messages`, `presets`, it comes with `Arabic`, `English` and `French` translations out of the box, but you can easily add your own translations.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> allows you to translate your notification `messages` and `presets`, it comes with `Arabic`, `English`, `French`, `German`, `Spanish`, `Portuguese`, `Russian`, and `Chinese` translations out of the box. but you can easily add your own translations.
|
||||
|
||||
For example, if you need to override the `English` translation strings for {% PHPFlasher %}, you can create a language file at the following location:
|
||||
For example, to override the `English` translation strings for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>, you can create a language file at the following location:
|
||||
**`/resources/lang/vendor/flasher/en/messages.php`**.
|
||||
|
||||
In this file, you should **only** define the translation strings you want to override. Any translation strings that you don't override will still be loaded from {% PHPFlasher %}'s original language files.
|
||||
In this file, you should **only** define the translation strings you want to override. Any translation strings that you don't override will still be loaded from <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>'s original language files.
|
||||
|
||||
Here is a list of the default translation keys for {% PHPFlasher %}:
|
||||
Here are examples of the default translation keys for `Arabic`, `English`, and `French` in <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```php
|
||||
<?php // /resources/lang/vendor/flasher/ar/messages.php
|
||||
@@ -281,6 +267,8 @@ return [
|
||||
];
|
||||
```
|
||||
|
||||
> These translation files facilitate localizing notifications to match user preferences and ensure that your applications can communicate effectively across different linguistic contexts.
|
||||
|
||||
{% assign id = '#/ laravel arabic translations' %}
|
||||
{% assign successMessage = 'تم إنشاء الملف' %}
|
||||
{% assign errorMessage = 'حدث خطأ أثناء إرسال طلبك.' %}
|
||||
|
||||
+214
-98
@@ -6,36 +6,96 @@ handler: noty
|
||||
data-controller: noty
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
## <i class="fa-duotone fa-list-radio"></i> Laravel
|
||||
|
||||
**<i class="fa-brands fa-laravel text-red-900 fa-xl"></i> Laravel**:
|
||||
<p id="laravel-installation"><a href="#laravel-installation" class="anchor"><i class="fa-duotone fa-link"></i> Installation</a></p>
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-noty-laravel
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php artisan flasher:install
|
||||
```
|
||||
|
||||
<p id="laravel-configuration"><a href="#laravel-configuration" class="anchor"><i class="fa-duotone fa-link"></i> Configuration</a></p>
|
||||
|
||||
```php
|
||||
<?php // config/flasher.php
|
||||
|
||||
return [
|
||||
'plugins' => [
|
||||
'noty' => [
|
||||
'scripts' => [
|
||||
'/vendor/flasher/noty.min.js',
|
||||
'/vendor/flasher/flasher-noty.min.js'
|
||||
],
|
||||
'styles' => [
|
||||
'/vendor/flasher/noty.css',
|
||||
'/vendor/flasher/mint.css'
|
||||
],
|
||||
'options' => [
|
||||
// Optional: Add global options here
|
||||
'layout' => 'topRight'
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
```
|
||||
<br />
|
||||
|
||||
**<i class="fa-brands fa-symfony text-black fa-xl"></i> Symfony**:
|
||||
## <i class="fa-duotone fa-list-radio"></i> Symfony
|
||||
|
||||
<p id="symfony-installation"><a href="#symfony-installation" class="anchor"><i class="fa-duotone fa-link"></i> Installation</a></p>
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-noty-symfony
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php bin/console flasher:install
|
||||
```
|
||||
|
||||
<p id="symfony-configuration"><a href="#symfony-configuration" class="anchor"><i class="fa-duotone fa-link"></i> Configuration</a></p>
|
||||
|
||||
```yaml
|
||||
# config/packages/flasher.yaml
|
||||
|
||||
flasher:
|
||||
plugins:
|
||||
noty:
|
||||
scripts:
|
||||
- '/vendor/flasher/noty.min.js'
|
||||
- '/vendor/flasher/flasher-noty.min.js'
|
||||
styles:
|
||||
- '/vendor/flasher/noty.css'
|
||||
- '/vendor/flasher/mint.css'
|
||||
options:
|
||||
# Optional: Add global options here
|
||||
layout: topRight
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Usage
|
||||
|
||||
---
|
||||
|
||||
> The methods described in the **[Usage](/installation/#-usage)** section can also be used with the `notyf` adapter.
|
||||
|
||||
---
|
||||
|
||||
To display a notification message, you can either use the `noty()` helper method or obtain an instance of `noty` from the service container.
|
||||
Then, before returning a view or redirecting, call the `success()` method and pass in the desired message to be displayed.
|
||||
|
||||
<p id="method-success"><a href="#method-success" class="anchor"><i class="fa-duotone fa-link"></i> success</a></p>
|
||||
|
||||
{% assign id = '#/ noty' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
{% assign type = 'success' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
@@ -43,26 +103,82 @@ php bin/console flasher:install
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
namespace App\Controller;
|
||||
use Flasher\Noty\Prime\NotyInterface;
|
||||
|
||||
class AppController
|
||||
class BookController
|
||||
{
|
||||
public function save()
|
||||
public function saveBook()
|
||||
{
|
||||
noty()->{{ type }}('{{ message }}');
|
||||
noty()->success('{{ message }}');
|
||||
|
||||
// or simply
|
||||
|
||||
noty('{{ message }}');
|
||||
}
|
||||
|
||||
/**
|
||||
* if you prefer to use dependency injection
|
||||
*/
|
||||
public function register(NotyInterface $noty)
|
||||
{
|
||||
// ...
|
||||
|
||||
$noty->success('{{ site.data.messages["success"] | sample }}');
|
||||
|
||||
// ... redirect or render the view
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
<p id="method-info"><a href="#method-info" class="anchor"><i class="fa-duotone fa-link"></i> info</a></p>
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Modifiers
|
||||
{% assign id = '#/ usage info' %}
|
||||
{% assign type = 'info' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
noty()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
<p id="method-warning"><a href="#method-warning" class="anchor"><i class="fa-duotone fa-link"></i> warning</a></p>
|
||||
|
||||
{% assign id = '#/ usage warning' %}
|
||||
{% assign type = 'warning' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
noty()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
<p id="method-error"><a href="#method-error" class="anchor"><i class="fa-duotone fa-link"></i> error</a></p>
|
||||
|
||||
{% assign id = '#/ usage error' %}
|
||||
{% assign type = 'error' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
noty()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
For more information on Noty options and usage, please refer to the original documentation at [https://ned.im/noty/](https://ned.im/noty/)
|
||||
|
||||
---
|
||||
|
||||
> The methods described in the **[Usage](/installation/#-modifiers)** section can also be used with the `noty` adapter.
|
||||
> The methods described in the **[Usage](/installation/#-usage)** section can also be used with the `notyf` adapter.
|
||||
|
||||
---
|
||||
|
||||
@@ -112,30 +228,30 @@ noty()->theme(string $theme);
|
||||
{% assign infoMessage = site.data.messages['info'] | sample %}
|
||||
|
||||
<script type="text/javascript">
|
||||
messages["#/ noty theme mint"] = [
|
||||
messages['#/ noty theme mint'] = [
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "success",
|
||||
message: "{{ successMessage }}",
|
||||
options: { theme: "mint"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'success',
|
||||
message: '{{ successMessage }}',
|
||||
options: { theme: 'mint'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "error",
|
||||
message: "{{ errorMessage }}",
|
||||
options: { theme: "mint"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'error',
|
||||
message: '{{ errorMessage }}',
|
||||
options: { theme: 'mint'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "warning",
|
||||
message: "{{ warningMessage }}",
|
||||
options: { theme: "mint"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'warning',
|
||||
message: '{{ warningMessage }}',
|
||||
options: { theme: 'mint'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "info",
|
||||
message: "{{ infoMessage }}",
|
||||
options: { theme: "mint"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'info',
|
||||
message: '{{ infoMessage }}',
|
||||
options: { theme: 'mint'},
|
||||
}
|
||||
];
|
||||
</script>
|
||||
@@ -166,30 +282,30 @@ noty()
|
||||
{% assign infoMessage = site.data.messages['info'] | sample %}
|
||||
|
||||
<script type="text/javascript">
|
||||
messages["#/ noty theme relax"] = [
|
||||
messages['#/ noty theme relax'] = [
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "success",
|
||||
message: "{{ successMessage }}",
|
||||
options: { theme: "relax"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'success',
|
||||
message: '{{ successMessage }}',
|
||||
options: { theme: 'relax'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "error",
|
||||
message: "{{ errorMessage }}",
|
||||
options: { theme: "relax"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'error',
|
||||
message: '{{ errorMessage }}',
|
||||
options: { theme: 'relax'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "warning",
|
||||
message: "{{ warningMessage }}",
|
||||
options: { theme: "relax"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'warning',
|
||||
message: '{{ warningMessage }}',
|
||||
options: { theme: 'relax'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "info",
|
||||
message: "{{ infoMessage }}",
|
||||
options: { theme: "relax"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'info',
|
||||
message: '{{ infoMessage }}',
|
||||
options: { theme: 'relax'},
|
||||
}
|
||||
];
|
||||
</script>
|
||||
@@ -222,30 +338,30 @@ noty()
|
||||
{% assign infoMessage = site.data.messages['info'] | sample %}
|
||||
|
||||
<script type="text/javascript">
|
||||
messages["#/ noty theme metroui"] = [
|
||||
messages['#/ noty theme metroui'] = [
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "success",
|
||||
message: "{{ successMessage }}",
|
||||
options: { theme: "metroui"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'success',
|
||||
message: '{{ successMessage }}',
|
||||
options: { theme: 'metroui'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "error",
|
||||
message: "{{ errorMessage }}",
|
||||
options: { theme: "metroui"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'error',
|
||||
message: '{{ errorMessage }}',
|
||||
options: { theme: 'metroui'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "warning",
|
||||
message: "{{ warningMessage }}",
|
||||
options: { theme: "metroui"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'warning',
|
||||
message: '{{ warningMessage }}',
|
||||
options: { theme: 'metroui'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "info",
|
||||
message: "{{ infoMessage }}",
|
||||
options: { theme: "metroui"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'info',
|
||||
message: '{{ infoMessage }}',
|
||||
options: { theme: 'metroui'},
|
||||
}
|
||||
];
|
||||
</script>
|
||||
@@ -278,30 +394,30 @@ noty()
|
||||
{% assign infoMessage = site.data.messages['info'] | sample %}
|
||||
|
||||
<script type="text/javascript">
|
||||
messages["#/ noty theme light"] = [
|
||||
messages['#/ noty theme light'] = [
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "success",
|
||||
message: "{{ successMessage }}",
|
||||
options: { theme: "light"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'success',
|
||||
message: '{{ successMessage }}',
|
||||
options: { theme: 'light'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "error",
|
||||
message: "{{ errorMessage }}",
|
||||
options: { theme: "light"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'error',
|
||||
message: '{{ errorMessage }}',
|
||||
options: { theme: 'light'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "warning",
|
||||
message: "{{ warningMessage }}",
|
||||
options: { theme: "light"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'warning',
|
||||
message: '{{ warningMessage }}',
|
||||
options: { theme: 'light'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "info",
|
||||
message: "{{ infoMessage }}",
|
||||
options: { theme: "light"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'info',
|
||||
message: '{{ infoMessage }}',
|
||||
options: { theme: 'light'},
|
||||
}
|
||||
];
|
||||
</script>
|
||||
@@ -334,30 +450,30 @@ noty()
|
||||
{% assign infoMessage = site.data.messages['info'] | sample %}
|
||||
|
||||
<script type="text/javascript">
|
||||
messages["#/ noty theme sunset"] = [
|
||||
messages['#/ noty theme sunset'] = [
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "success",
|
||||
message: "{{ successMessage }}",
|
||||
options: { theme: "sunset"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'success',
|
||||
message: '{{ successMessage }}',
|
||||
options: { theme: 'sunset'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "error",
|
||||
message: "{{ errorMessage }}",
|
||||
options: { theme: "sunset"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'error',
|
||||
message: '{{ errorMessage }}',
|
||||
options: { theme: 'sunset'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "warning",
|
||||
message: "{{ warningMessage }}",
|
||||
options: { theme: "sunset"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'warning',
|
||||
message: '{{ warningMessage }}',
|
||||
options: { theme: 'sunset'},
|
||||
},
|
||||
{
|
||||
handler: "{{ page.handler }}",
|
||||
type: "info",
|
||||
message: "{{ infoMessage }}",
|
||||
options: { theme: "sunset"},
|
||||
handler: '{{ page.handler }}',
|
||||
type: 'info',
|
||||
message: '{{ infoMessage }}',
|
||||
options: { theme: 'sunset'},
|
||||
}
|
||||
];
|
||||
</script>
|
||||
|
||||
+127
-15
@@ -6,36 +6,92 @@ handler: notyf
|
||||
data-controller: notyf
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
## <i class="fa-duotone fa-list-radio"></i> Laravel
|
||||
|
||||
**<i class="fa-brands fa-laravel text-red-900 fa-xl"></i> Laravel**:
|
||||
<p id="laravel-installation"><a href="#laravel-installation" class="anchor"><i class="fa-duotone fa-link"></i> Installation</a></p>
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-notyf-laravel
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
|
||||
```shell
|
||||
php artisan flasher:install
|
||||
```
|
||||
|
||||
<br />
|
||||
<p id="laravel-configuration"><a href="#laravel-configuration" class="anchor"><i class="fa-duotone fa-link"></i> Configuration</a></p>
|
||||
|
||||
**<i class="fa-brands fa-symfony text-black fa-xl"></i> Symfony**:
|
||||
```php
|
||||
<?php // config/flasher.php
|
||||
|
||||
return [
|
||||
'plugins' => [
|
||||
'notyf' => [
|
||||
'scripts' => [
|
||||
'/vendor/flasher/flasher-notyf.min.js',
|
||||
],
|
||||
'styles' => [
|
||||
'/vendor/flasher/flasher-notyf.min.css',
|
||||
],
|
||||
'options' => [
|
||||
// Optional: Add global options here
|
||||
'dismissible' => true,
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
```
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Symfony
|
||||
|
||||
<p id="symfony-installation"><a href="#symfony-installation" class="anchor"><i class="fa-duotone fa-link"></i> Installation</a></p>
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-notyf-symfony
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php bin/console flasher:install
|
||||
```
|
||||
|
||||
<p id="symfony-configuration"><a href="#symfony-configuration" class="anchor"><i class="fa-duotone fa-link"></i> Configuration</a></p>
|
||||
|
||||
```yaml
|
||||
# config/packages/flasher.yaml
|
||||
|
||||
flasher:
|
||||
plugins:
|
||||
notyf:
|
||||
scripts:
|
||||
- '/vendor/flasher/flasher-notyf.min.js'
|
||||
styles:
|
||||
- '/vendor/flasher/flasher-notyf.min.css'
|
||||
options:
|
||||
# Optional: Add global options here
|
||||
dismissible: true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Usage
|
||||
|
||||
{% assign id = '#/ notyf' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
---
|
||||
|
||||
> The methods described in the **[Usage](/installation/#-usage)** section can also be used with the `notyf` adapter.
|
||||
|
||||
---
|
||||
|
||||
To display a notification message, you can either use the `notyf()` helper method or obtain an instance of `notyf` from the service container.
|
||||
Then, before returning a view or redirecting, call the `success()` method and pass in the desired message to be displayed.
|
||||
|
||||
<p id="method-success"><a href="#method-success" class="anchor"><i class="fa-duotone fa-link"></i> success</a></p>
|
||||
|
||||
{% assign id = '#/ noty' %}
|
||||
{% assign type = 'success' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
@@ -43,26 +99,82 @@ php bin/console flasher:install
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
namespace App\Controller;
|
||||
use Flasher\Notyf\Prime\NotyfInterface;
|
||||
|
||||
class AppController
|
||||
class BookController
|
||||
{
|
||||
public function save()
|
||||
public function saveBook()
|
||||
{
|
||||
notyf()->{{ type }}('{{ message }}');
|
||||
notyf()->success('{{ message }}');
|
||||
|
||||
// or simply
|
||||
|
||||
notyf('{{ message }}');
|
||||
}
|
||||
|
||||
/**
|
||||
* if you prefer to use dependency injection
|
||||
*/
|
||||
public function register(NotyfInterface $notyf)
|
||||
{
|
||||
// ...
|
||||
|
||||
$notyf->success('{{ site.data.messages["success"] | sample }}');
|
||||
|
||||
// ... redirect or render the view
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
<p id="method-info"><a href="#method-info" class="anchor"><i class="fa-duotone fa-link"></i> info</a></p>
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Modifiers
|
||||
{% assign id = '#/ usage info' %}
|
||||
{% assign type = 'info' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
notyf()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
<p id="method-warning"><a href="#method-warning" class="anchor"><i class="fa-duotone fa-link"></i> warning</a></p>
|
||||
|
||||
{% assign id = '#/ usage warning' %}
|
||||
{% assign type = 'warning' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
notyf()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
<p id="method-error"><a href="#method-error" class="anchor"><i class="fa-duotone fa-link"></i> error</a></p>
|
||||
|
||||
{% assign id = '#/ usage error' %}
|
||||
{% assign type = 'error' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
notyf()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
For more information on Notyf options and usage, please refer to the original documentation at [https://github.com/caroso1222/notyf](https://github.com/caroso1222/notyf)
|
||||
|
||||
---
|
||||
|
||||
> The methods described in the **[Usage](/installation/#-modifiers)** section can also be used with the `notyf` adapter.
|
||||
> The methods described in the **[Usage](/installation/#-usage)** section can also be used with the `notyf` adapter.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -6,36 +6,94 @@ handler: sweetalert
|
||||
data-controller: sweetalert
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
## <i class="fa-duotone fa-list-radio"></i> Laravel
|
||||
|
||||
**<i class="fa-brands fa-laravel text-red-900 fa-xl"></i> Laravel**:
|
||||
<p id="laravel-installation"><a href="#laravel-installation" class="anchor"><i class="fa-duotone fa-link"></i> Installation</a></p>
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-sweetalert-laravel
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php artisan flasher:install
|
||||
```
|
||||
|
||||
<p id="laravel-configuration"><a href="#laravel-configuration" class="anchor"><i class="fa-duotone fa-link"></i> Configuration</a></p>
|
||||
|
||||
```php
|
||||
<?php // config/flasher.php
|
||||
|
||||
return [
|
||||
'plugins' => [
|
||||
'sweetalert' => [
|
||||
'scripts' => [
|
||||
'/vendor/flasher/sweetalert2.min.js',
|
||||
'/vendor/flasher/flasher-sweetalert.min.js',
|
||||
],
|
||||
'styles' => [
|
||||
'/vendor/flasher/sweetalert2.min.css',
|
||||
],
|
||||
'options' => [
|
||||
// Optional: Add global options here
|
||||
'position' => 'center'
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
```
|
||||
<br />
|
||||
|
||||
**<i class="fa-brands fa-symfony text-black fa-xl"></i> Symfony**:
|
||||
## <i class="fa-duotone fa-list-radio"></i> Symfony
|
||||
|
||||
<p id="symfony-installation"><a href="#symfony-installation" class="anchor"><i class="fa-duotone fa-link"></i> Installation</a></p>
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-sweetalert-symfony
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php bin/console flasher:install
|
||||
```
|
||||
|
||||
<p id="symfony-configuration"><a href="#symfony-configuration" class="anchor"><i class="fa-duotone fa-link"></i> Configuration</a></p>
|
||||
|
||||
```yaml
|
||||
# config/packages/flasher.yaml
|
||||
|
||||
flasher:
|
||||
plugins:
|
||||
sweetalert:
|
||||
scripts:
|
||||
- '/vendor/flasher/sweetalert2.min.js'
|
||||
- '/vendor/flasher/flasher-sweetalert.min.js'
|
||||
styles:
|
||||
- '/vendor/flasher/sweetalert2.min.css'
|
||||
options:
|
||||
# Optional: Add global options here
|
||||
position: center
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Usage
|
||||
|
||||
{% assign id = '#/ sweetalert' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
---
|
||||
|
||||
> The methods described in the **[Usage](/installation/#-usage)** section can also be used with the `notyf` adapter.
|
||||
|
||||
---
|
||||
|
||||
To display a notification message, you can either use the `sweetalert()` helper method or obtain an instance of `sweetalert` from the service container.
|
||||
Then, before returning a view or redirecting, call the `success()` method and pass in the desired message to be displayed.
|
||||
|
||||
<p id="method-success"><a href="#method-success" class="anchor"><i class="fa-duotone fa-link"></i> success</a></p>
|
||||
|
||||
{% assign id = '#/ noty' %}
|
||||
{% assign type = 'success' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
@@ -43,26 +101,82 @@ php bin/console flasher:install
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
namespace App\Controller;
|
||||
use Flasher\SweetAlert\Prime\SweetAlertInterface;
|
||||
|
||||
class AppController
|
||||
class BookController
|
||||
{
|
||||
public function save()
|
||||
public function saveBook()
|
||||
{
|
||||
sweetalert()->{{ type }}('{{ message }}');
|
||||
sweetalert()->success('{{ message }}');
|
||||
|
||||
// or simply
|
||||
|
||||
sweetalert('{{ message }}');
|
||||
}
|
||||
|
||||
/**
|
||||
* if you prefer to use dependency injection
|
||||
*/
|
||||
public function register(SweetAlertInterface $sweetalert)
|
||||
{
|
||||
// ...
|
||||
|
||||
$sweetalert->success('{{ site.data.messages["success"] | sample }}');
|
||||
|
||||
// ... redirect or render the view
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
<p id="method-info"><a href="#method-info" class="anchor"><i class="fa-duotone fa-link"></i> info</a></p>
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Modifiers
|
||||
{% assign id = '#/ usage info' %}
|
||||
{% assign type = 'info' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
sweetalert()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
<p id="method-warning"><a href="#method-warning" class="anchor"><i class="fa-duotone fa-link"></i> warning</a></p>
|
||||
|
||||
{% assign id = '#/ usage warning' %}
|
||||
{% assign type = 'warning' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
sweetalert()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
<p id="method-error"><a href="#method-error" class="anchor"><i class="fa-duotone fa-link"></i> error</a></p>
|
||||
|
||||
{% assign id = '#/ usage error' %}
|
||||
{% assign type = 'error' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
sweetalert()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
For more information on Sweetalert2 alert options and usage, please refer to the original documentation at [https://sweetalert2.github.io](https://sweetalert2.github.io)
|
||||
|
||||
---
|
||||
|
||||
> The methods described in the **[Usage](/installation/#-modifiers)** section can also be used with the `sweetalert` adapter.
|
||||
> The methods described in the **[Usage](/installation/#-usage)** section can also be used with the `notyf` adapter.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+131
-15
@@ -6,36 +6,97 @@ handler: toastr
|
||||
data-controller: toastr
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
## <i class="fa-duotone fa-list-radio"></i> Laravel
|
||||
|
||||
**<i class="fa-brands fa-laravel text-red-900 fa-xl"></i> Laravel**:
|
||||
<p id="laravel-installation"><a href="#laravel-installation" class="anchor"><i class="fa-duotone fa-link"></i> Installation</a></p>
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-toastr-laravel
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php artisan flasher:install
|
||||
```
|
||||
|
||||
<p id="laravel-configuration"><a href="#laravel-configuration" class="anchor"><i class="fa-duotone fa-link"></i> Configuration</a></p>
|
||||
|
||||
```php
|
||||
<?php // config/flasher.php
|
||||
|
||||
return [
|
||||
'plugins' => [
|
||||
'toastr' => [
|
||||
'scripts' => [
|
||||
'/vendor/flasher/jquery.min.js',
|
||||
'/vendor/flasher/toastr.min.js',
|
||||
'/vendor/flasher/flasher-toastr.min.js',
|
||||
],
|
||||
'styles' => [
|
||||
'/vendor/flasher/toastr.min.css',
|
||||
],
|
||||
'options' => [
|
||||
// Optional: Add global options here
|
||||
'closeButton' => true
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
**<i class="fa-brands fa-symfony text-black fa-xl"></i> Symfony**:
|
||||
## <i class="fa-duotone fa-list-radio"></i> Symfony
|
||||
|
||||
<p id="symfony-installation"><a href="#symfony-installation" class="anchor"><i class="fa-duotone fa-link"></i> Installation</a></p>
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-toastr-symfony
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php bin/console flasher:install
|
||||
```
|
||||
|
||||
<p id="symfony-configuration"><a href="#symfony-configuration" class="anchor"><i class="fa-duotone fa-link"></i> Configuration</a></p>
|
||||
|
||||
```yaml
|
||||
# config/packages/flasher.yaml
|
||||
|
||||
flasher:
|
||||
plugins:
|
||||
noty:
|
||||
scripts:
|
||||
- '/vendor/flasher/jquery.min.js'
|
||||
- '/vendor/flasher/toastr.min.js'
|
||||
- '/vendor/flasher/flasher-toastr.min.js'
|
||||
styles:
|
||||
- '/vendor/flasher/toastr.min.css'
|
||||
options:
|
||||
# Optional: Add global options here
|
||||
closeButton: true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Usage
|
||||
|
||||
{% assign id = '#/ toastr' %}
|
||||
{% assign type = site.data.messages.types | sample %}
|
||||
---
|
||||
|
||||
> The methods described in the **[Usage](/installation/#-usage)** section can also be used with the `notyf` adapter.
|
||||
|
||||
---
|
||||
|
||||
To display a notification message, you can either use the `toastr()` helper method or obtain an instance of `toastr` from the service container.
|
||||
Then, before returning a view or redirecting, call the `success()` method and pass in the desired message to be displayed.
|
||||
|
||||
<p id="method-success"><a href="#method-success" class="anchor"><i class="fa-duotone fa-link"></i> success</a></p>
|
||||
|
||||
{% assign id = '#/ noty' %}
|
||||
{% assign type = 'success' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
@@ -43,27 +104,82 @@ php bin/console flasher:install
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
namespace App\Controller;
|
||||
use Flasher\Toastr\Prime\ToastrInterface;
|
||||
|
||||
class AppController
|
||||
class BookController
|
||||
{
|
||||
public function save()
|
||||
public function saveBook()
|
||||
{
|
||||
toastr()->{{ type }}('{{ message }}');
|
||||
toastr()->success('{{ message }}');
|
||||
|
||||
// or simply
|
||||
|
||||
toastr('{{ message }}');
|
||||
}
|
||||
|
||||
/**
|
||||
* if you prefer to use dependency injection
|
||||
*/
|
||||
public function register(ToastrInterface $toastr)
|
||||
{
|
||||
// ...
|
||||
|
||||
$toastr->success('{{ site.data.messages["success"] | sample }}');
|
||||
|
||||
// ... redirect or render the view
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<p id="method-info"><a href="#method-info" class="anchor"><i class="fa-duotone fa-link"></i> info</a></p>
|
||||
|
||||
{% assign id = '#/ usage info' %}
|
||||
{% assign type = 'info' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
toastr()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
<p id="method-warning"><a href="#method-warning" class="anchor"><i class="fa-duotone fa-link"></i> warning</a></p>
|
||||
|
||||
{% assign id = '#/ usage warning' %}
|
||||
{% assign type = 'warning' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
toastr()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
<p id="method-error"><a href="#method-error" class="anchor"><i class="fa-duotone fa-link"></i> error</a></p>
|
||||
|
||||
{% assign id = '#/ usage error' %}
|
||||
{% assign type = 'error' %}
|
||||
{% assign message = site.data.messages[type] | sample %}
|
||||
{% assign options = '{}' %}
|
||||
{% include example.html %}
|
||||
|
||||
```php
|
||||
{{ id }}
|
||||
|
||||
toastr()->{{ type }}('{{ message }}');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Modifiers
|
||||
|
||||
For more information on Toastr options and usage, please refer to the original documentation at [https://github.com/CodeSeven/toastr](https://github.com/CodeSeven/toastr)
|
||||
|
||||
---
|
||||
|
||||
> The methods described in the **[Usage](/installation/#-modifiers)** section can also be used with the `toastr` adapter.
|
||||
> The methods described in the **[Usage](/installation/#-usage)** section can also be used with the `notyf` adapter.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -5,23 +5,25 @@ description: Learn how to seamlessly integrate flash notification messages into
|
||||
adapter: flasher
|
||||
---
|
||||
|
||||
{% PHPFlasher %} provides a seamless integration with Livewire v3.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> provides a seamless integration with Livewire v3.
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Requirements
|
||||
|
||||
> <i class="fa-brands fa-php fa-2xl text-blue-900 mr-1 mb-1"></i> **PHP** >= 8.2
|
||||
> <i class="fa-brands fa-laravel fa-2xl text-red-900 mr-1 ml-4"></i> **Laravel** >= 11
|
||||
> <i class="fa-brands fa-php fa-2xl text-blue-900 mr-1 mb-1"></i> **PHP** v8.2 or higher
|
||||
> <i class="fa-brands fa-laravel fa-2xl text-red-900 mr-1 ml-4"></i> **Laravel** v11.0 or higher
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
|
||||
To integrate {% PHPFlasher %} with Livewire, follow the same installation steps as for the [Laravel Installation](/laravel) package.
|
||||
To integrate <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> with Livewire, follow the same installation steps as for the [Laravel Installation](/laravel) package.
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-laravel
|
||||
```
|
||||
Then, run:
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php artisan flasher:install
|
||||
```
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
permalink: /phpstan/
|
||||
title: PHPStan
|
||||
description: Seamlessly integrate PHPFlasher with PHPStan to validate dynamic methods and enhance code analysis in your projects. This open-source initiative is designed to help maintain clean and reliable code with minimal configuration.
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> PHPFlasher extension for PHPStan
|
||||
|
||||
{% PHPFlasher %} extends PHPStan by providing a straightforward solution to validate dynamic methods. This integration aids in keeping your code analysis precise and free of errors that may occur due to the dynamic nature of {% PHPFlasher %}.
|
||||
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Configuration
|
||||
|
||||
Add the {% PHPFlasher %} extension to your PHPStan setup by updating your project's `phpstan.neon` file:
|
||||
|
||||
```neon
|
||||
includes:
|
||||
- vendor/php-flasher/flasher/extension.neon
|
||||
```
|
||||
|
||||
By including this configuration, PHPStan will recognize and validate all dynamic methods introduced by {% PHPFlasher %}, ensuring a clean and accurate code analysis process.
|
||||
+14
-21
@@ -5,11 +5,11 @@ description: Integrate PHPFlasher in your Symfony application to enhance user ex
|
||||
framework: symfony
|
||||
---
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> {% PHPFlasher %} for Symfony
|
||||
## <i class="fa-duotone fa-list-radio"></i> Requirements
|
||||
|
||||
{% PHPFlasher %} offers a seamless way to incorporate flash notifications in {% Symfony %} projects, enhancing user feedback with minimal setup.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> offers a seamless way to incorporate flash notifications in <i class="fa-brands fa-symfony text-black fa-xl"></i> <strong>Symfony</strong> projects, enhancing user feedback with minimal setup.
|
||||
|
||||
Requirements for using {% PHPFlasher %} with Symfony:
|
||||
Requirements for using <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> with Symfony:
|
||||
|
||||
> <i class="fa-brands fa-php fa-2xl text-blue-900 mr-1 mb-1"></i> **PHP** v8.2 or higher
|
||||
> <i class="fa-brands fa-symfony fa-2xl text-black mr-1 ml-4"></i> **Symfony** v7.0 or higher
|
||||
@@ -18,13 +18,13 @@ Requirements for using {% PHPFlasher %} with Symfony:
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Installation
|
||||
|
||||
{% PHPFlasher %}'s modular design lets you select and install only the components your project needs.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>'s modular design lets you select and install only the components your project needs.
|
||||
|
||||
```shell
|
||||
composer require php-flasher/flasher-symfony
|
||||
```
|
||||
|
||||
After installation, you need to run another command to set up the necessary assets for {% PHPFlasher %}:
|
||||
After installation, you need to run another command to set up the necessary assets for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```shell
|
||||
php bin/console flasher:install
|
||||
@@ -32,15 +32,6 @@ php bin/console flasher:install
|
||||
|
||||
---
|
||||
|
||||
{% PHPFlasher %} includes a default notification style <i class="fa-duotone fa-comment-captions text-yellow-600"></i>, but users can also install and use additional adapters to customize the appearance of notifications within their projects such as :
|
||||
|
||||
* **[Toastr](/library/toastr/)**
|
||||
* **[Noty](/library/noty/)**
|
||||
* **[Notyf](/library/notyf/)**
|
||||
* **[Sweet Alert](/library/sweetalert/)**
|
||||
|
||||
---
|
||||
|
||||
{% include _usage.md %}
|
||||
|
||||
---
|
||||
@@ -69,7 +60,7 @@ flasher:
|
||||
styles:
|
||||
- '/vendor/flasher/flasher.min.css'
|
||||
|
||||
# Enable translation of PHPFlasher messages using Symfony's service
|
||||
# Enable translation of PHPFlasher messages using Symfony's translator service
|
||||
translate: true
|
||||
|
||||
# Automatically inject PHPFlasher assets in HTML response
|
||||
@@ -178,10 +169,10 @@ class BookController
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> RTL support
|
||||
|
||||
{% PHPFlasher %} makes it easy to incorporate <i class="fa-duotone fa-signs-post text-indigo-900 mr-1 fa-lg"></i> **right-to-left** languages like `Arabic` or `Hebrew`.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> makes it easy to incorporate <i class="fa-duotone fa-signs-post text-indigo-900 mr-1 fa-lg"></i> **right-to-left** languages like `Arabic` or `Hebrew`.
|
||||
it automatically detects the text direction and handles the necessary adjustments for you.
|
||||
|
||||
Simply make sure the translation service is enabled and let {% PHPFlasher %} handle the rest.
|
||||
Simply make sure the translation service is enabled and let <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> handle the rest.
|
||||
|
||||
{% assign id = '#/ phpflasher rtl' %}
|
||||
{% assign type = 'success' %}
|
||||
@@ -202,14 +193,14 @@ flash()
|
||||
|
||||
## <i class="fa-duotone fa-list-radio"></i> Translation
|
||||
|
||||
{% PHPFlasher %} allows you to translate your notification `messages`, `presets`, it comes with `Arabic`, `English` and `French` translations out of the box, but you can easily add your own translations.
|
||||
<strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong> allows you to translate your notification `messages` and `presets`, it comes with `Arabic`, `English`, `French`, `German`, `Spanish`, `Portuguese`, `Russian`, and `Chinese` translations out of the box. but you can easily add your own translations.
|
||||
|
||||
For example, if you need to override the `English` translation strings for {% PHPFlasher %}, you can create a language file at the following location:
|
||||
For example, to override the `English` translation strings for <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>, you can create a language file at the following location:
|
||||
**`translations/flasher.en.yaml`**.
|
||||
|
||||
In this file, you should **only** define the translation strings you want to override. Any translation strings that you don't override will still be loaded from {% PHPFlasher %}'s original language files.
|
||||
In this file, you should **only** define the translation strings you want to override. Any translation strings that you don't override will still be loaded from <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>'s original language files.
|
||||
|
||||
Here is a list of the default translation keys for {% PHPFlasher %}:
|
||||
Here are examples of the default translation keys for `Arabic`, `English`, and `French` in <strong><span class="text-indigo-900">PHP<span class="text-indigo-500">Flasher</span></span></strong>:
|
||||
|
||||
```yaml
|
||||
# translations/flasher.ar.yaml
|
||||
@@ -259,6 +250,8 @@ The resource was deleted: 'La ressource :resource a été supprimée'
|
||||
resource: ''
|
||||
```
|
||||
|
||||
> These translation files facilitate localizing notifications to match user preferences and ensure that your applications can communicate effectively across different linguistic contexts.
|
||||
|
||||
{% assign id = '#/ symfony arabic translations' %}
|
||||
{% assign successMessage = 'تم إنشاء الملف' %}
|
||||
{% assign errorMessage = 'حدث خطأ أثناء إرسال طلبك.' %}
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
includes:
|
||||
- src/Prime/extension.neon
|
||||
- src/Laravel/extension.neon
|
||||
|
||||
Generated
+235
-221
@@ -17,17 +17,17 @@
|
||||
],
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "2.12.2",
|
||||
"@babel/core": "^7.24.4",
|
||||
"@babel/preset-env": "^7.24.4",
|
||||
"@babel/core": "^7.24.5",
|
||||
"@babel/preset-env": "^7.24.5",
|
||||
"@rollup/plugin-babel": "^6.0.4",
|
||||
"@rollup/plugin-commonjs": "^25.0.7",
|
||||
"@rollup/plugin-eslint": "^9.0.5",
|
||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||
"@rollup/plugin-terser": "^0.4.4",
|
||||
"@rollup/plugin-typescript": "^11.1.6",
|
||||
"@types/node": "^20.12.6",
|
||||
"@types/node": "^20.12.8",
|
||||
"@typescript-eslint/eslint-plugin": "7.5.0",
|
||||
"@typescript-eslint/parser": "^7.6.0",
|
||||
"@typescript-eslint/parser": "^7.8.0",
|
||||
"autoprefixer": "^10.4.19",
|
||||
"browserslist": "^4.23.0",
|
||||
"cross-env": "7.0.3",
|
||||
@@ -41,16 +41,16 @@
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"postcss-discard-comments": "^6.0.2",
|
||||
"punycode": "2.3.1",
|
||||
"rollup": "^4.14.1",
|
||||
"rollup": "^4.17.2",
|
||||
"rollup-plugin-cleanup": "^3.2.1",
|
||||
"rollup-plugin-clear": "^2.0.7",
|
||||
"rollup-plugin-copy": "3.5.0",
|
||||
"rollup-plugin-filesize": "^10.0.0",
|
||||
"rollup-plugin-postcss": "^4.0.2",
|
||||
"sass": "^1.74.1",
|
||||
"sass": "^1.76.0",
|
||||
"ts-node": "^10.9.2",
|
||||
"tslib": "^2.6.2",
|
||||
"typescript": "^5.4.4"
|
||||
"typescript": "^5.4.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@aashutoshrathi/word-wrap": {
|
||||
@@ -322,21 +322,21 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz",
|
||||
"integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz",
|
||||
"integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@ampproject/remapping": "^2.2.0",
|
||||
"@babel/code-frame": "^7.24.2",
|
||||
"@babel/generator": "^7.24.4",
|
||||
"@babel/generator": "^7.24.5",
|
||||
"@babel/helper-compilation-targets": "^7.23.6",
|
||||
"@babel/helper-module-transforms": "^7.23.3",
|
||||
"@babel/helpers": "^7.24.4",
|
||||
"@babel/parser": "^7.24.4",
|
||||
"@babel/helper-module-transforms": "^7.24.5",
|
||||
"@babel/helpers": "^7.24.5",
|
||||
"@babel/parser": "^7.24.5",
|
||||
"@babel/template": "^7.24.0",
|
||||
"@babel/traverse": "^7.24.1",
|
||||
"@babel/types": "^7.24.0",
|
||||
"@babel/traverse": "^7.24.5",
|
||||
"@babel/types": "^7.24.5",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
@@ -352,12 +352,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz",
|
||||
"integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz",
|
||||
"integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.24.0",
|
||||
"@babel/types": "^7.24.5",
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"jsesc": "^2.5.1"
|
||||
@@ -407,19 +407,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-create-class-features-plugin": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz",
|
||||
"integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz",
|
||||
"integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-annotate-as-pure": "^7.22.5",
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-function-name": "^7.23.0",
|
||||
"@babel/helper-member-expression-to-functions": "^7.23.0",
|
||||
"@babel/helper-member-expression-to-functions": "^7.24.5",
|
||||
"@babel/helper-optimise-call-expression": "^7.22.5",
|
||||
"@babel/helper-replace-supers": "^7.24.1",
|
||||
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
|
||||
"@babel/helper-split-export-declaration": "^7.22.6",
|
||||
"@babel/helper-split-export-declaration": "^7.24.5",
|
||||
"semver": "^6.3.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -497,12 +497,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-member-expression-to-functions": {
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
|
||||
"integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz",
|
||||
"integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.23.0"
|
||||
"@babel/types": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -521,16 +521,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-module-transforms": {
|
||||
"version": "7.23.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
|
||||
"integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz",
|
||||
"integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-module-imports": "^7.22.15",
|
||||
"@babel/helper-simple-access": "^7.22.5",
|
||||
"@babel/helper-split-export-declaration": "^7.22.6",
|
||||
"@babel/helper-validator-identifier": "^7.22.20"
|
||||
"@babel/helper-module-imports": "^7.24.3",
|
||||
"@babel/helper-simple-access": "^7.24.5",
|
||||
"@babel/helper-split-export-declaration": "^7.24.5",
|
||||
"@babel/helper-validator-identifier": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -552,9 +552,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-plugin-utils": {
|
||||
"version": "7.24.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
|
||||
"integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz",
|
||||
"integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -595,12 +595,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-simple-access": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
|
||||
"integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz",
|
||||
"integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.22.5"
|
||||
"@babel/types": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -619,12 +619,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-split-export-declaration": {
|
||||
"version": "7.22.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
|
||||
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz",
|
||||
"integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.22.5"
|
||||
"@babel/types": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -640,9 +640,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-identifier": {
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
|
||||
"integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -672,14 +672,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz",
|
||||
"integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz",
|
||||
"integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.24.0",
|
||||
"@babel/traverse": "^7.24.1",
|
||||
"@babel/types": "^7.24.0"
|
||||
"@babel/traverse": "^7.24.5",
|
||||
"@babel/types": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -701,9 +701,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz",
|
||||
"integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz",
|
||||
"integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
@@ -713,13 +713,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz",
|
||||
"integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz",
|
||||
"integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-plugin-utils": "^7.24.0"
|
||||
"@babel/helper-plugin-utils": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1089,12 +1089,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-block-scoping": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz",
|
||||
"integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz",
|
||||
"integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.24.0"
|
||||
"@babel/helper-plugin-utils": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1137,18 +1137,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-classes": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz",
|
||||
"integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz",
|
||||
"integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-annotate-as-pure": "^7.22.5",
|
||||
"@babel/helper-compilation-targets": "^7.23.6",
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-function-name": "^7.23.0",
|
||||
"@babel/helper-plugin-utils": "^7.24.0",
|
||||
"@babel/helper-plugin-utils": "^7.24.5",
|
||||
"@babel/helper-replace-supers": "^7.24.1",
|
||||
"@babel/helper-split-export-declaration": "^7.22.6",
|
||||
"@babel/helper-split-export-declaration": "^7.24.5",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1184,12 +1184,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-destructuring": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz",
|
||||
"integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz",
|
||||
"integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.24.0"
|
||||
"@babel/helper-plugin-utils": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1503,15 +1503,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-object-rest-spread": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz",
|
||||
"integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz",
|
||||
"integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-compilation-targets": "^7.23.6",
|
||||
"@babel/helper-plugin-utils": "^7.24.0",
|
||||
"@babel/helper-plugin-utils": "^7.24.5",
|
||||
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
|
||||
"@babel/plugin-transform-parameters": "^7.24.1"
|
||||
"@babel/plugin-transform-parameters": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1553,12 +1553,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-optional-chaining": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz",
|
||||
"integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz",
|
||||
"integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.24.0",
|
||||
"@babel/helper-plugin-utils": "^7.24.5",
|
||||
"@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
|
||||
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
|
||||
},
|
||||
@@ -1570,12 +1570,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-parameters": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz",
|
||||
"integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz",
|
||||
"integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.24.0"
|
||||
"@babel/helper-plugin-utils": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1601,14 +1601,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-private-property-in-object": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz",
|
||||
"integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz",
|
||||
"integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-annotate-as-pure": "^7.22.5",
|
||||
"@babel/helper-create-class-features-plugin": "^7.24.1",
|
||||
"@babel/helper-plugin-utils": "^7.24.0",
|
||||
"@babel/helper-create-class-features-plugin": "^7.24.5",
|
||||
"@babel/helper-plugin-utils": "^7.24.5",
|
||||
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1726,12 +1726,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-typeof-symbol": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz",
|
||||
"integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz",
|
||||
"integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.24.0"
|
||||
"@babel/helper-plugin-utils": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1804,16 +1804,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/preset-env": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz",
|
||||
"integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz",
|
||||
"integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.24.4",
|
||||
"@babel/helper-compilation-targets": "^7.23.6",
|
||||
"@babel/helper-plugin-utils": "^7.24.0",
|
||||
"@babel/helper-plugin-utils": "^7.24.5",
|
||||
"@babel/helper-validator-option": "^7.23.5",
|
||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4",
|
||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5",
|
||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1",
|
||||
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1",
|
||||
"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1",
|
||||
@@ -1840,12 +1840,12 @@
|
||||
"@babel/plugin-transform-async-generator-functions": "^7.24.3",
|
||||
"@babel/plugin-transform-async-to-generator": "^7.24.1",
|
||||
"@babel/plugin-transform-block-scoped-functions": "^7.24.1",
|
||||
"@babel/plugin-transform-block-scoping": "^7.24.4",
|
||||
"@babel/plugin-transform-block-scoping": "^7.24.5",
|
||||
"@babel/plugin-transform-class-properties": "^7.24.1",
|
||||
"@babel/plugin-transform-class-static-block": "^7.24.4",
|
||||
"@babel/plugin-transform-classes": "^7.24.1",
|
||||
"@babel/plugin-transform-classes": "^7.24.5",
|
||||
"@babel/plugin-transform-computed-properties": "^7.24.1",
|
||||
"@babel/plugin-transform-destructuring": "^7.24.1",
|
||||
"@babel/plugin-transform-destructuring": "^7.24.5",
|
||||
"@babel/plugin-transform-dotall-regex": "^7.24.1",
|
||||
"@babel/plugin-transform-duplicate-keys": "^7.24.1",
|
||||
"@babel/plugin-transform-dynamic-import": "^7.24.1",
|
||||
@@ -1865,13 +1865,13 @@
|
||||
"@babel/plugin-transform-new-target": "^7.24.1",
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1",
|
||||
"@babel/plugin-transform-numeric-separator": "^7.24.1",
|
||||
"@babel/plugin-transform-object-rest-spread": "^7.24.1",
|
||||
"@babel/plugin-transform-object-rest-spread": "^7.24.5",
|
||||
"@babel/plugin-transform-object-super": "^7.24.1",
|
||||
"@babel/plugin-transform-optional-catch-binding": "^7.24.1",
|
||||
"@babel/plugin-transform-optional-chaining": "^7.24.1",
|
||||
"@babel/plugin-transform-parameters": "^7.24.1",
|
||||
"@babel/plugin-transform-optional-chaining": "^7.24.5",
|
||||
"@babel/plugin-transform-parameters": "^7.24.5",
|
||||
"@babel/plugin-transform-private-methods": "^7.24.1",
|
||||
"@babel/plugin-transform-private-property-in-object": "^7.24.1",
|
||||
"@babel/plugin-transform-private-property-in-object": "^7.24.5",
|
||||
"@babel/plugin-transform-property-literals": "^7.24.1",
|
||||
"@babel/plugin-transform-regenerator": "^7.24.1",
|
||||
"@babel/plugin-transform-reserved-words": "^7.24.1",
|
||||
@@ -1879,7 +1879,7 @@
|
||||
"@babel/plugin-transform-spread": "^7.24.1",
|
||||
"@babel/plugin-transform-sticky-regex": "^7.24.1",
|
||||
"@babel/plugin-transform-template-literals": "^7.24.1",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.24.1",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.24.5",
|
||||
"@babel/plugin-transform-unicode-escapes": "^7.24.1",
|
||||
"@babel/plugin-transform-unicode-property-regex": "^7.24.1",
|
||||
"@babel/plugin-transform-unicode-regex": "^7.24.1",
|
||||
@@ -1945,19 +1945,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
|
||||
"integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz",
|
||||
"integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.24.1",
|
||||
"@babel/generator": "^7.24.1",
|
||||
"@babel/code-frame": "^7.24.2",
|
||||
"@babel/generator": "^7.24.5",
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-function-name": "^7.23.0",
|
||||
"@babel/helper-hoist-variables": "^7.22.5",
|
||||
"@babel/helper-split-export-declaration": "^7.22.6",
|
||||
"@babel/parser": "^7.24.1",
|
||||
"@babel/types": "^7.24.0",
|
||||
"@babel/helper-split-export-declaration": "^7.24.5",
|
||||
"@babel/parser": "^7.24.5",
|
||||
"@babel/types": "^7.24.5",
|
||||
"debug": "^4.3.1",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
@@ -1975,13 +1975,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.24.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
|
||||
"integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz",
|
||||
"integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.23.4",
|
||||
"@babel/helper-validator-identifier": "^7.22.20",
|
||||
"@babel/helper-string-parser": "^7.24.1",
|
||||
"@babel/helper-validator-identifier": "^7.24.5",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -2015,7 +2015,7 @@
|
||||
},
|
||||
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
|
||||
"version": "1.3.0",
|
||||
"extraneous": true,
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -2844,9 +2844,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz",
|
||||
"integrity": "sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz",
|
||||
"integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -2857,9 +2857,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm64": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz",
|
||||
"integrity": "sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz",
|
||||
"integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2870,9 +2870,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz",
|
||||
"integrity": "sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz",
|
||||
"integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2883,9 +2883,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz",
|
||||
"integrity": "sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz",
|
||||
"integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2896,9 +2896,22 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz",
|
||||
"integrity": "sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz",
|
||||
"integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz",
|
||||
"integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -2909,9 +2922,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz",
|
||||
"integrity": "sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz",
|
||||
"integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2922,9 +2935,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz",
|
||||
"integrity": "sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz",
|
||||
"integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2935,11 +2948,11 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz",
|
||||
"integrity": "sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz",
|
||||
"integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==",
|
||||
"cpu": [
|
||||
"ppc64le"
|
||||
"ppc64"
|
||||
],
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
@@ -2948,9 +2961,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz",
|
||||
"integrity": "sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz",
|
||||
"integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
@@ -2961,9 +2974,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz",
|
||||
"integrity": "sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz",
|
||||
"integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
@@ -2974,9 +2987,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz",
|
||||
"integrity": "sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz",
|
||||
"integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2987,9 +3000,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz",
|
||||
"integrity": "sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz",
|
||||
"integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -3000,9 +3013,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz",
|
||||
"integrity": "sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz",
|
||||
"integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -3013,9 +3026,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz",
|
||||
"integrity": "sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz",
|
||||
"integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
@@ -3026,9 +3039,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz",
|
||||
"integrity": "sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz",
|
||||
"integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -3876,9 +3889,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.12.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.6.tgz",
|
||||
"integrity": "sha512-3KurE8taB8GCvZBPngVbp0lk5CKi8M9f9k1rsADh0Evdz5SzJ+Q+Hx9uHoFGsLnLnd1xmkDQr2hVhlA0Mn0lKQ==",
|
||||
"version": "20.12.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz",
|
||||
"integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
@@ -4044,15 +4057,15 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@typescript-eslint/parser": {
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz",
|
||||
"integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==",
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz",
|
||||
"integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@typescript-eslint/scope-manager": "7.6.0",
|
||||
"@typescript-eslint/types": "7.6.0",
|
||||
"@typescript-eslint/typescript-estree": "7.6.0",
|
||||
"@typescript-eslint/visitor-keys": "7.6.0",
|
||||
"@typescript-eslint/scope-manager": "7.8.0",
|
||||
"@typescript-eslint/types": "7.8.0",
|
||||
"@typescript-eslint/typescript-estree": "7.8.0",
|
||||
"@typescript-eslint/visitor-keys": "7.8.0",
|
||||
"debug": "^4.3.4"
|
||||
},
|
||||
"engines": {
|
||||
@@ -4072,13 +4085,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz",
|
||||
"integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==",
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz",
|
||||
"integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "7.6.0",
|
||||
"@typescript-eslint/visitor-keys": "7.6.0"
|
||||
"@typescript-eslint/types": "7.8.0",
|
||||
"@typescript-eslint/visitor-keys": "7.8.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || >=20.0.0"
|
||||
@@ -4089,9 +4102,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz",
|
||||
"integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==",
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz",
|
||||
"integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^18.18.0 || >=20.0.0"
|
||||
@@ -4102,13 +4115,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz",
|
||||
"integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==",
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz",
|
||||
"integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "7.6.0",
|
||||
"@typescript-eslint/visitor-keys": "7.6.0",
|
||||
"@typescript-eslint/types": "7.8.0",
|
||||
"@typescript-eslint/visitor-keys": "7.8.0",
|
||||
"debug": "^4.3.4",
|
||||
"globby": "^11.1.0",
|
||||
"is-glob": "^4.0.3",
|
||||
@@ -4130,12 +4143,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz",
|
||||
"integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==",
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz",
|
||||
"integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "7.6.0",
|
||||
"@typescript-eslint/types": "7.8.0",
|
||||
"eslint-visitor-keys": "^3.4.3"
|
||||
},
|
||||
"engines": {
|
||||
@@ -11860,9 +11873,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "4.14.1",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.1.tgz",
|
||||
"integrity": "sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==",
|
||||
"version": "4.17.2",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz",
|
||||
"integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/estree": "1.0.5"
|
||||
@@ -11875,21 +11888,22 @@
|
||||
"npm": ">=8.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@rollup/rollup-android-arm-eabi": "4.14.1",
|
||||
"@rollup/rollup-android-arm64": "4.14.1",
|
||||
"@rollup/rollup-darwin-arm64": "4.14.1",
|
||||
"@rollup/rollup-darwin-x64": "4.14.1",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.14.1",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.14.1",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.14.1",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.14.1",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.14.1",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.14.1",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.14.1",
|
||||
"@rollup/rollup-linux-x64-musl": "4.14.1",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.14.1",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.14.1",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.14.1",
|
||||
"@rollup/rollup-android-arm-eabi": "4.17.2",
|
||||
"@rollup/rollup-android-arm64": "4.17.2",
|
||||
"@rollup/rollup-darwin-arm64": "4.17.2",
|
||||
"@rollup/rollup-darwin-x64": "4.17.2",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.17.2",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.17.2",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.17.2",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.17.2",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.17.2",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.17.2",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.17.2",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.17.2",
|
||||
"@rollup/rollup-linux-x64-musl": "4.17.2",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.17.2",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.17.2",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.17.2",
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
@@ -12910,9 +12924,9 @@
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/sass": {
|
||||
"version": "1.74.1",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.74.1.tgz",
|
||||
"integrity": "sha512-w0Z9p/rWZWelb88ISOLyvqTWGmtmu2QJICqDBGyNnfG4OUnPX9BBjjYIXUpXCMOOg5MQWNpqzt876la1fsTvUA==",
|
||||
"version": "1.76.0",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.76.0.tgz",
|
||||
"integrity": "sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
@@ -13934,9 +13948,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.4.4",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz",
|
||||
"integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==",
|
||||
"version": "5.4.5",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
|
||||
"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
|
||||
+7
-7
@@ -19,17 +19,17 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "2.12.2",
|
||||
"@babel/core": "^7.24.4",
|
||||
"@babel/preset-env": "^7.24.4",
|
||||
"@babel/core": "^7.24.5",
|
||||
"@babel/preset-env": "^7.24.5",
|
||||
"@rollup/plugin-babel": "^6.0.4",
|
||||
"@rollup/plugin-commonjs": "^25.0.7",
|
||||
"@rollup/plugin-eslint": "^9.0.5",
|
||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||
"@rollup/plugin-terser": "^0.4.4",
|
||||
"@rollup/plugin-typescript": "^11.1.6",
|
||||
"@types/node": "^20.12.6",
|
||||
"@types/node": "^20.12.8",
|
||||
"@typescript-eslint/eslint-plugin": "7.5.0",
|
||||
"@typescript-eslint/parser": "^7.6.0",
|
||||
"@typescript-eslint/parser": "^7.8.0",
|
||||
"autoprefixer": "^10.4.19",
|
||||
"browserslist": "^4.23.0",
|
||||
"cross-env": "7.0.3",
|
||||
@@ -43,15 +43,15 @@
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"postcss-discard-comments": "^6.0.2",
|
||||
"punycode": "2.3.1",
|
||||
"rollup": "^4.14.1",
|
||||
"rollup": "^4.17.2",
|
||||
"rollup-plugin-cleanup": "^3.2.1",
|
||||
"rollup-plugin-clear": "^2.0.7",
|
||||
"rollup-plugin-copy": "3.5.0",
|
||||
"rollup-plugin-filesize": "^10.0.0",
|
||||
"rollup-plugin-postcss": "^4.0.2",
|
||||
"sass": "^1.74.1",
|
||||
"sass": "^1.76.0",
|
||||
"ts-node": "^10.9.2",
|
||||
"tslib": "^2.6.2",
|
||||
"typescript": "^5.4.4"
|
||||
"typescript": "^5.4.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
prefer-workspace-packages: true
|
||||
|
||||
packages:
|
||||
- src/Prime/Resources
|
||||
- src/Noty/Prime/Resources
|
||||
- src/Notyf/Prime/Resources
|
||||
- src/SweetAlert/Prime/Resources
|
||||
- src/Toastr/Prime/Resources
|
||||
@@ -7,7 +7,6 @@ namespace Flasher\Laravel\Facade;
|
||||
use Flasher\Prime\Notification\Envelope;
|
||||
use Flasher\Prime\Notification\NotificationBuilder;
|
||||
use Flasher\Prime\Stamp\StampInterface;
|
||||
use Flasher\Prime\Translation\ResourceInterface;
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
/**
|
||||
@@ -33,11 +32,11 @@ use Illuminate\Support\Facades\Facade;
|
||||
* @method static Envelope warning(string $message, array $options = [], ?string $title = null)
|
||||
* @method static Envelope flash(?string $type = null, ?string $message = null, array $options = [], ?string $title = null)
|
||||
* @method static Envelope preset(string $preset, array $parameters = [])
|
||||
* @method static Envelope operation(string $operation, string|ResourceInterface|null $resource = null)
|
||||
* @method static Envelope created(string|ResourceInterface|null $resource = null)
|
||||
* @method static Envelope updated(string|ResourceInterface|null $resource = null)
|
||||
* @method static Envelope saved(string|ResourceInterface|null $resource = null)
|
||||
* @method static Envelope deleted(string|ResourceInterface|null $resource = null)
|
||||
* @method static Envelope operation(string $operation, string|object|null $resource = null)
|
||||
* @method static Envelope created(string|object|null $resource = null)
|
||||
* @method static Envelope updated(string|object|null $resource = null)
|
||||
* @method static Envelope saved(string|object|null $resource = null)
|
||||
* @method static Envelope deleted(string|object|null $resource = null)
|
||||
* @method static Envelope push()
|
||||
* @method static Envelope addSuccess(string $message, array $options = [], ?string $title = null)
|
||||
* @method static Envelope addError(string $message, array $options = [], ?string $title = null)
|
||||
|
||||
@@ -15,6 +15,8 @@ final readonly class Translator implements TranslatorInterface
|
||||
|
||||
public function translate(string $id, array $parameters = [], ?string $locale = null): string
|
||||
{
|
||||
$parameters = $this->formatParameters($parameters);
|
||||
|
||||
$translation = $this->translator->has('flasher::messages.'.$id, $locale)
|
||||
? $this->translator->get('flasher::messages.'.$id, $parameters, $locale)
|
||||
: ($this->translator->has('messages.'.$id, $locale)
|
||||
@@ -32,4 +34,20 @@ final readonly class Translator implements TranslatorInterface
|
||||
{
|
||||
return $this->translator->getLocale();
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats the parameters by stripping the colon prefix from keys for Laravel's translator.
|
||||
*
|
||||
* @param array<string, mixed> $parameters
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function formatParameters(array $parameters): array
|
||||
{
|
||||
foreach ($parameters as $key => $value) {
|
||||
$parameters[ltrim($key, ':')] = $value;
|
||||
}
|
||||
|
||||
return $parameters;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,11 +8,12 @@ expectedArguments(\Flasher\Noty\Prime\noty(), 1, 'success', 'error', 'info', 'wa
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::layout(), 0, 'top', 'topLeft', 'topCenter', 'topRight', 'center', 'centerLeft', 'centerRight', 'bottom', 'bottomLeft', 'bottomCenter', 'bottomRight');
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::theme(), 0, 'relax', 'mint', 'metroui');
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::timeout(), 0, false, 1000, 3000, 3500, 5000);
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::closeWith(), 0, 'click', 'button', array('click', 'button'));
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::closeWith(), 0, 'click', 'button', ['click', 'button']);
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::animation(), 0, 'open', 'close');
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::sounds(), 0, 'sources', 'volume', 'conditions');
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::docTitle(), 0, 'conditions');
|
||||
expectedArguments(\Flasher\Noty\Prime\NotyBuilder::queue(), 0, 'global');
|
||||
|
||||
override(\Flasher\Prime\FlasherInterface::use(), map(['noty' => \Flasher\Noty\Prime\NotyInterface::class]));
|
||||
override(\Flasher\Prime\FlasherInterface::create(), map(['noty' => \Flasher\Noty\Prime\NotyInterface::class]));
|
||||
override(\Flasher\Prime\Container\FlasherContainer::create(), map(['flasher.noty' => \Flasher\Noty\Prime\NotyInterface::class]));
|
||||
|
||||
@@ -19,7 +19,7 @@ final class NotyBuilder extends NotificationBuilder
|
||||
/**
|
||||
* @param array<string, mixed> $options
|
||||
*/
|
||||
public function alert(?string $message = null, array $options = []): self
|
||||
public function alert(?string $message = null, ?string $title = null, array $options = []): self
|
||||
{
|
||||
$this->type('alert');
|
||||
|
||||
@@ -27,6 +27,10 @@ final class NotyBuilder extends NotificationBuilder
|
||||
$this->message($message);
|
||||
}
|
||||
|
||||
if ($title) {
|
||||
$this->title($title);
|
||||
}
|
||||
|
||||
if ([] !== $options) {
|
||||
$this->options($options);
|
||||
}
|
||||
@@ -91,6 +95,9 @@ final class NotyBuilder extends NotificationBuilder
|
||||
}
|
||||
|
||||
/**
|
||||
* @param "open"|"close" $animation
|
||||
* @param "noty_effects_open"|"noty_effects_close"|string $effect
|
||||
*
|
||||
* If string, assumed to be CSS class name. If null, no animation at all. If function, runs the function. (v3.0.1+)
|
||||
* You can use animate.css class names or your custom css animations as well.
|
||||
*/
|
||||
@@ -101,6 +108,9 @@ final class NotyBuilder extends NotificationBuilder
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param "sources"|"volume"|"conditions" $option
|
||||
*/
|
||||
public function sounds(string $option, mixed $value): self
|
||||
{
|
||||
$this->option('sounds.'.$option, $value);
|
||||
@@ -108,6 +118,9 @@ final class NotyBuilder extends NotificationBuilder
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param "conditions"|string $option
|
||||
*/
|
||||
public function docTitle(string $option, string $docTitle): self
|
||||
{
|
||||
$this->option('docTitle'.$option, $docTitle);
|
||||
|
||||
@@ -16,7 +16,7 @@ export default class NotyPlugin extends AbstractPlugin {
|
||||
const noty = new Noty(options)
|
||||
noty.show()
|
||||
// @ts-expect-error
|
||||
noty.layoutDom?.dataset.turboCache = 'false'
|
||||
noty.layoutDom?.dataset.turboTemporary = ''
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ class NotyPlugin extends AbstractPlugin {
|
||||
const options = Object.assign({ text: envelope.message, type: envelope.type }, envelope.options);
|
||||
const noty = new Noty(options);
|
||||
noty.show();
|
||||
(_a = noty.layoutDom) === null || _a === void 0 ? void 0 : _a.dataset.turboCache = 'false';
|
||||
(_a = noty.layoutDom) === null || _a === void 0 ? void 0 : _a.dataset.turboTemporary = '';
|
||||
});
|
||||
}
|
||||
renderOptions(options) {
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@
|
||||
const options = Object.assign({ text: envelope.message, type: envelope.type }, envelope.options);
|
||||
const noty = new Noty(options);
|
||||
noty.show();
|
||||
(_a = noty.layoutDom) === null || _a === void 0 ? void 0 : _a.dataset.turboCache = 'false';
|
||||
(_a = noty.layoutDom) === null || _a === void 0 ? void 0 : _a.dataset.turboTemporary = '';
|
||||
});
|
||||
}
|
||||
renderOptions(options) {
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@flasher/flasher"),require("noty")):"function"==typeof define&&define.amd?define(["@flasher/flasher","noty"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Noty=t(e.flasher,e.Noty)}(this,(function(e,t){"use strict";class s{success(e,t,s){this.flash("success",e,t,s)}error(e,t,s){this.flash("error",e,t,s)}info(e,t,s){this.flash("info",e,t,s)}warning(e,t,s){this.flash("warning",e,t,s)}flash(e,t,s,o){if("object"==typeof e?(e=(o=e).type,t=o.message,s=o.title):"object"==typeof t?(t=(o=t).message,s=o.title):"object"==typeof s&&(s=(o=s).title),void 0===t)throw new Error("message option is required");const n={type:e,message:t,title:s||e,options:o||{},metadata:{plugin:""}};this.renderOptions(o||{}),this.renderEnvelopes([n])}}const o=new class extends s{renderEnvelopes(e){e.forEach((e=>{var s;const o=Object.assign({text:e.message,type:e.type},e.options),n=new t(o);n.show(),null===(s=n.layoutDom)||void 0===s||(s.dataset.turboCache="false")}))}renderOptions(e){t.overrideDefaults(Object.assign({timeout:e.timeout||5e3},e))}};return e.addPlugin("noty",o),o}));
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@flasher/flasher"),require("noty")):"function"==typeof define&&define.amd?define(["@flasher/flasher","noty"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Noty=t(e.flasher,e.Noty)}(this,(function(e,t){"use strict";class s{success(e,t,s){this.flash("success",e,t,s)}error(e,t,s){this.flash("error",e,t,s)}info(e,t,s){this.flash("info",e,t,s)}warning(e,t,s){this.flash("warning",e,t,s)}flash(e,t,s,o){if("object"==typeof e?(e=(o=e).type,t=o.message,s=o.title):"object"==typeof t?(t=(o=t).message,s=o.title):"object"==typeof s&&(s=(o=s).title),void 0===t)throw new Error("message option is required");const n={type:e,message:t,title:s||e,options:o||{},metadata:{plugin:""}};this.renderOptions(o||{}),this.renderEnvelopes([n])}}const o=new class extends s{renderEnvelopes(e){e.forEach((e=>{var s;const o=Object.assign({text:e.message,type:e.type},e.options),n=new t(o);n.show(),null===(s=n.layoutDom)||void 0===s||(s.dataset.turboTemporary="")}))}renderOptions(e){t.overrideDefaults(Object.assign({timeout:e.timeout||5e3},e))}};return e.addPlugin("noty",o),o}));
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@flasher/flasher"),require("noty")):"function"==typeof define&&define.amd?define(["@flasher/flasher","noty"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Noty=t(e.flasher,e.Noty)}(this,(function(e,t){"use strict";class s{success(e,t,s){this.flash("success",e,t,s)}error(e,t,s){this.flash("error",e,t,s)}info(e,t,s){this.flash("info",e,t,s)}warning(e,t,s){this.flash("warning",e,t,s)}flash(e,t,s,o){if("object"==typeof e?(e=(o=e).type,t=o.message,s=o.title):"object"==typeof t?(t=(o=t).message,s=o.title):"object"==typeof s&&(s=(o=s).title),void 0===t)throw new Error("message option is required");const n={type:e,message:t,title:s||e,options:o||{},metadata:{plugin:""}};this.renderOptions(o||{}),this.renderEnvelopes([n])}}const o=new class extends s{renderEnvelopes(e){e.forEach((e=>{var s;const o=Object.assign({text:e.message,type:e.type},e.options),n=new t(o);n.show(),null===(s=n.layoutDom)||void 0===s||(s.dataset.turboCache="false")}))}renderOptions(e){t.overrideDefaults(Object.assign({timeout:e.timeout||5e3},e))}};return e.addPlugin("noty",o),o}));
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@flasher/flasher"),require("noty")):"function"==typeof define&&define.amd?define(["@flasher/flasher","noty"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Noty=t(e.flasher,e.Noty)}(this,(function(e,t){"use strict";class s{success(e,t,s){this.flash("success",e,t,s)}error(e,t,s){this.flash("error",e,t,s)}info(e,t,s){this.flash("info",e,t,s)}warning(e,t,s){this.flash("warning",e,t,s)}flash(e,t,s,o){if("object"==typeof e?(e=(o=e).type,t=o.message,s=o.title):"object"==typeof t?(t=(o=t).message,s=o.title):"object"==typeof s&&(s=(o=s).title),void 0===t)throw new Error("message option is required");const n={type:e,message:t,title:s||e,options:o||{},metadata:{plugin:""}};this.renderOptions(o||{}),this.renderEnvelopes([n])}}const o=new class extends s{renderEnvelopes(e){e.forEach((e=>{var s;const o=Object.assign({text:e.message,type:e.type},e.options),n=new t(o);n.show(),null===(s=n.layoutDom)||void 0===s||(s.dataset.turboTemporary="")}))}renderOptions(e){t.overrideDefaults(Object.assign({timeout:e.timeout||5e3},e))}};return e.addPlugin("noty",o),o}));
|
||||
|
||||
@@ -24,6 +24,8 @@ if (!\function_exists('Flasher\Noty\Prime\noty')) {
|
||||
* @return Envelope|NotyInterface Returns an Envelope containing the notification details when arguments are provided.
|
||||
* Returns an instance of NotyInterface when no arguments are provided.
|
||||
*
|
||||
* @phpstan-return ($message is empty ? NotyInterface : Envelope)
|
||||
*
|
||||
* Usage:
|
||||
* 1. Without arguments - Get the Noty factory: $noty = noty();
|
||||
* 2. With arguments - Create and return a Noty notification:
|
||||
|
||||
@@ -23,6 +23,8 @@ if (!function_exists('noty')) {
|
||||
* @return Envelope|NotyInterface Returns an Envelope containing the notification details when arguments are provided.
|
||||
* Returns an instance of NotyInterface when no arguments are provided.
|
||||
*
|
||||
* @phpstan-return ($message is empty ? NotyInterface : Envelope)
|
||||
*
|
||||
* Usage:
|
||||
* 1. Without arguments - Get the Noty factory: $noty = noty();
|
||||
* 2. With arguments - Create and return a Noty notification:
|
||||
|
||||
@@ -10,5 +10,6 @@ expectedArguments(\Flasher\Notyf\Prime\NotyfBuilder::position(), 0, 'x', 'y');
|
||||
expectedArguments(\Flasher\Notyf\Prime\NotyfBuilder::position(), 1, 'top', 'right', 'bottom', 'left', 'center');
|
||||
|
||||
override(\Flasher\Prime\FlasherInterface::use(), map(['notyf' => \Flasher\Notyf\Prime\NotyfInterface::class]));
|
||||
override(\Flasher\Prime\FlasherInterface::create(), map(['notyf' => \Flasher\Notyf\Prime\NotyfInterface::class]));
|
||||
override(\Flasher\Prime\Container\FlasherContainer::create(), map(['flasher.notyf' => \Notyf\Notyf\Prime\NotyfInterface::class]));
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ use Flasher\Prime\Notification\NotificationBuilder;
|
||||
final class NotyfBuilder extends NotificationBuilder
|
||||
{
|
||||
/**
|
||||
* Number of miliseconds before hiding the notification. Use 0 for infinite duration.
|
||||
* Number of milliseconds before hiding the notification. Use 0 for infinite duration.
|
||||
*/
|
||||
public function duration(int $duration): self
|
||||
{
|
||||
@@ -31,8 +31,12 @@ final class NotyfBuilder extends NotificationBuilder
|
||||
/**
|
||||
* Viewport location where notifications are rendered.
|
||||
*
|
||||
* @param "x"|"y" $position
|
||||
* @param "left"|"center"|"right"|"top"|"bottom" $value
|
||||
* @param "x"|"y" $position specifies the axis: 'x' for horizontal, 'y' for vertical
|
||||
* @param "left"|"center"|"right"|"top"|"bottom" $value Position value, dependent on the axis:
|
||||
* - If $position is 'x', $value must be 'left', 'center' or 'right'.
|
||||
* - If $position is 'y', $value must be 'top', 'center' or 'bottom'.
|
||||
*
|
||||
* @phpstan-param ($position is 'x' ? "left"|"center"|"right" : "top"|"center"|"bottom") $value
|
||||
*/
|
||||
public function position(string $position, string $value): self
|
||||
{
|
||||
@@ -53,4 +57,11 @@ final class NotyfBuilder extends NotificationBuilder
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function background(string $background): self
|
||||
{
|
||||
$this->option('background', $background);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,9 +15,9 @@ export default class NotyfPlugin extends AbstractPlugin {
|
||||
})
|
||||
|
||||
// @ts-expect-error
|
||||
this.notyf.view.container.dataset.turboCache = 'false'
|
||||
this.notyf.view.container.dataset.turboTemporary = ''
|
||||
// @ts-expect-error
|
||||
this.notyf.view.a11yContainer.dataset.turboCache = 'false'
|
||||
this.notyf.view.a11yContainer.dataset.turboTemporary = ''
|
||||
}
|
||||
|
||||
public renderOptions(options: Options): void {
|
||||
|
||||
+2
-2
@@ -474,8 +474,8 @@ class NotyfPlugin extends AbstractPlugin {
|
||||
const options = Object.assign(Object.assign({}, envelope), envelope.options);
|
||||
(_a = this.notyf) === null || _a === void 0 ? void 0 : _a.open(options);
|
||||
});
|
||||
this.notyf.view.container.dataset.turboCache = 'false';
|
||||
this.notyf.view.a11yContainer.dataset.turboCache = 'false';
|
||||
this.notyf.view.container.dataset.turboTemporary = '';
|
||||
this.notyf.view.a11yContainer.dataset.turboTemporary = '';
|
||||
}
|
||||
renderOptions(options) {
|
||||
const nOptions = Object.assign({ duration: options.duration || 5000 }, options);
|
||||
|
||||
+2
-2
@@ -478,8 +478,8 @@
|
||||
const options = Object.assign(Object.assign({}, envelope), envelope.options);
|
||||
(_a = this.notyf) === null || _a === void 0 ? void 0 : _a.open(options);
|
||||
});
|
||||
this.notyf.view.container.dataset.turboCache = 'false';
|
||||
this.notyf.view.a11yContainer.dataset.turboCache = 'false';
|
||||
this.notyf.view.container.dataset.turboTemporary = '';
|
||||
this.notyf.view.a11yContainer.dataset.turboTemporary = '';
|
||||
}
|
||||
renderOptions(options) {
|
||||
const nOptions = Object.assign({ duration: options.duration || 5000 }, options);
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
@@ -24,6 +24,8 @@ if (!\function_exists('Flasher\Notyf\Prime\notyf')) {
|
||||
* @return Envelope|NotyfInterface Returns an Envelope containing the notification details when arguments are provided.
|
||||
* Returns an instance of NotyfInterface when no arguments are provided.
|
||||
*
|
||||
* @phpstan-return ($message is empty ? NotyfInterface : Envelope)
|
||||
*
|
||||
* Usage:
|
||||
* 1. Without arguments - Get the Notyf factory: $notyf = notyf();
|
||||
* 2. With arguments - Create and return a Notyf notification:
|
||||
|
||||
@@ -23,6 +23,8 @@ if (!function_exists('notyf')) {
|
||||
* @return Envelope|NotyfInterface Returns an Envelope containing the notification details when arguments are provided.
|
||||
* Returns an instance of NotyfInterface when no arguments are provided.
|
||||
*
|
||||
* @phpstan-return ($message is empty ? NotyfInterface : Envelope)
|
||||
*
|
||||
* Usage:
|
||||
* 1. Without arguments - Get the Notyf factory: $notyf = notyf();
|
||||
* 2. With arguments - Create and return a Notyf notification:
|
||||
|
||||
@@ -4,20 +4,19 @@ namespace PHPSTORM_META;
|
||||
|
||||
override(Envelope::get(0), type(0));
|
||||
|
||||
override(\Flasher\Prime\FlasherInterface::create(), map([
|
||||
'flasher' => \Flasher\Prime\Factory\NotificationFactory::class,
|
||||
'theme.' => \Flasher\Prime\Factory\NotificationFactory::class,
|
||||
]));
|
||||
|
||||
override(\Flasher\Prime\FlasherInterface::using(), map([
|
||||
'flasher' => \Flasher\Prime\Factory\NotificationFactory::class,
|
||||
'theme.' => \Flasher\Prime\Factory\NotificationFactory::class,
|
||||
]));
|
||||
override(\Flasher\Prime\FlasherInterface::create(), map(['flasher' => \Flasher\Prime\Factory\FlasherFactory::class, 'theme.' => \Flasher\Prime\Factory\FlasherFactory::class]));
|
||||
override(\Flasher\Prime\Container\FlasherContainer::create(), map(['flasher' => \Flasher\Prime\Factory\FlasherFactory::class, 'theme.' => \Flasher\Prime\Factory\FlasherFactory::class]));
|
||||
override(\Flasher\Prime\FlasherInterface::use(), map(['flasher' => \Flasher\Prime\Factory\FlasherFactory::class, 'theme.' => \Flasher\Prime\Factory\FlasherFactory::class]));
|
||||
|
||||
registerArgumentsSet('types', 'success', 'error', 'warning', 'info');
|
||||
expectedArguments(\Flasher\Prime\Notification\NotificationBuilderInterface::type(), 0, argumentsSet('types'));
|
||||
expectedArguments(\Flasher\Prime\Notification\NotificationBuilderInterface::addFlash(), 0, argumentsSet('types'));
|
||||
expectedArguments(\Flasher\Prime\Notification\NotificationBuilderInterface::flash(), 0, argumentsSet('types'));
|
||||
expectedArguments(\Flasher\Prime\Notification\NotificationInterface::setType(), 0, argumentsSet('types'));
|
||||
expectedArguments(flash(), 1, argumentsSet('types'));
|
||||
expectedArguments(\Flasher\Prime\flash(), 1, argumentsSet('types'));
|
||||
expectedReturnValues(\Flasher\Prime\Notification\NotificationInterface::getType(), argumentsSet('types'));
|
||||
|
||||
expectedArguments(\Flasher\Prime\Notification\NotificationBuilderInterface::handler(), 0, 'flasher', 'toastr', 'noty', 'notyf', 'sweetalert');
|
||||
|
||||
expectedArguments(\Flasher\Prime\FlasherInterface::render(), 0, 'html', 'json', 'array');
|
||||
|
||||
@@ -47,7 +47,12 @@ final class FlasherContainer
|
||||
*
|
||||
* @param string $id the service identifier
|
||||
*
|
||||
* @return FlasherInterface|NotificationFactoryInterface the service instance
|
||||
* @phpstan-return ($id is 'flasher' ? \Flasher\Prime\FlasherInterface :
|
||||
* ($id is 'flasher.noty' ? \Flasher\Noty\Prime\NotyInterface :
|
||||
* ($id is 'flasher.notyf' ? \Flasher\Notyf\Prime\NotyfInterface :
|
||||
* ($id is 'flasher.sweetalert' ? \Flasher\SweetAlert\Prime\SweetAlertInterface :
|
||||
* ($id is 'flasher.toastr' ? \Flasher\Toastr\Prime\ToastrInterface :
|
||||
* \Flasher\Prime\Factory\NotificationFactoryInterface)))))
|
||||
*/
|
||||
public static function create(string $id): FlasherInterface|NotificationFactoryInterface
|
||||
{
|
||||
|
||||
@@ -38,13 +38,12 @@ final readonly class TranslationListener implements EventListenerInterface
|
||||
|
||||
private function translateEnvelope(Envelope $envelope): void
|
||||
{
|
||||
$stamp = $envelope->get(TranslationStamp::class);
|
||||
if (!$stamp instanceof TranslationStamp) {
|
||||
return;
|
||||
}
|
||||
$translationStamp = $envelope->get(TranslationStamp::class);
|
||||
|
||||
$locale = $stamp->getLocale() ?: $this->translator->getLocale();
|
||||
$parameters = $stamp->getParameters() ?: $this->getParameters($envelope, $locale);
|
||||
$locale = $translationStamp?->getLocale() ?: $this->translator->getLocale();
|
||||
|
||||
$parameters = $translationStamp?->getParameters() ?: [];
|
||||
$parameters = array_merge($parameters, $this->getParameters($envelope, $locale));
|
||||
|
||||
$this->applyTranslations($envelope, $locale, $parameters);
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Flasher\Prime\Factory;
|
||||
|
||||
use Flasher\Prime\Notification\FlasherBuilder;
|
||||
use Flasher\Prime\Notification\NotificationBuilderInterface;
|
||||
|
||||
/**
|
||||
* @mixin \Flasher\Prime\Notification\FlasherBuilder
|
||||
*/
|
||||
final class FlasherFactory extends NotificationFactory implements FlasherFactoryInterface
|
||||
{
|
||||
public function createNotificationBuilder(): NotificationBuilderInterface
|
||||
{
|
||||
return new FlasherBuilder('flasher', $this->storageManager);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Flasher\Prime\Factory;
|
||||
|
||||
/**
|
||||
* @mixin \Flasher\Prime\Notification\FlasherBuilder
|
||||
*/
|
||||
interface FlasherFactoryInterface extends NotificationFactoryInterface
|
||||
{
|
||||
}
|
||||
@@ -4,15 +4,13 @@ declare(strict_types=1);
|
||||
|
||||
namespace Flasher\Prime\Factory;
|
||||
|
||||
use Flasher\Prime\Notification\NotificationBuilder;
|
||||
use Flasher\Prime\Notification\NotificationBuilderInterface;
|
||||
use Flasher\Prime\Storage\StorageManagerInterface;
|
||||
use Flasher\Prime\Support\Traits\ForwardsCalls;
|
||||
|
||||
/**
|
||||
* @mixin \Flasher\Prime\Notification\NotificationBuilderInterface
|
||||
*/
|
||||
class NotificationFactory implements NotificationFactoryInterface
|
||||
abstract class NotificationFactory implements NotificationFactoryInterface
|
||||
{
|
||||
use ForwardsCalls;
|
||||
|
||||
@@ -20,11 +18,6 @@ class NotificationFactory implements NotificationFactoryInterface
|
||||
{
|
||||
}
|
||||
|
||||
public function createNotificationBuilder(): NotificationBuilderInterface
|
||||
{
|
||||
return new NotificationBuilder($this->plugin ?: 'flasher', $this->storageManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed[] $parameters
|
||||
*/
|
||||
|
||||
@@ -8,5 +8,13 @@ interface NotificationFactoryLocatorInterface
|
||||
{
|
||||
public function has(string $id): bool;
|
||||
|
||||
/**
|
||||
* @phpstan-return ($id is 'flasher' ? \Flasher\Prime\Factory\FlasherFactoryInterface :
|
||||
* ($id is 'noty' ? \Flasher\Noty\Prime\NotyInterface :
|
||||
* ($id is 'notyf' ? \Flasher\Notyf\Prime\NotyfInterface :
|
||||
* ($id is 'sweetalert' ? \Flasher\SweetAlert\Prime\SweetAlertInterface :
|
||||
* ($id is 'toastr' ? \Flasher\Toastr\Prime\ToastrInterface :
|
||||
* \Flasher\Prime\Factory\NotificationFactoryInterface)))))
|
||||
*/
|
||||
public function get(string $id): NotificationFactoryInterface;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Flasher\Prime;
|
||||
|
||||
use Flasher\Prime\Factory\NotificationFactory;
|
||||
use Flasher\Prime\Factory\FlasherFactory;
|
||||
use Flasher\Prime\Factory\NotificationFactoryInterface;
|
||||
use Flasher\Prime\Factory\NotificationFactoryLocatorInterface;
|
||||
use Flasher\Prime\Response\ResponseManagerInterface;
|
||||
@@ -37,7 +37,7 @@ final readonly class Flasher implements FlasherInterface
|
||||
return $this->factoryLocator->get($alias);
|
||||
}
|
||||
|
||||
return new NotificationFactory($this->storageManager, $alias);
|
||||
return new FlasherFactory($this->storageManager, $alias);
|
||||
}
|
||||
|
||||
public function create(?string $alias): NotificationFactoryInterface
|
||||
|
||||
@@ -5,11 +5,12 @@ declare(strict_types=1);
|
||||
namespace Flasher\Prime;
|
||||
|
||||
use Flasher\Prime\Factory\NotificationFactoryInterface;
|
||||
use Flasher\Prime\Response\Presenter\ArrayPresenter;
|
||||
|
||||
/**
|
||||
* @mixin \Flasher\Prime\Notification\NotificationBuilderInterface
|
||||
* @mixin \Flasher\Prime\Notification\FlasherBuilder
|
||||
*
|
||||
* @method NotificationFactoryInterface create(string $alias)
|
||||
* @phpstan-import-type ArrayPresenterType from ArrayPresenter
|
||||
*/
|
||||
interface FlasherInterface
|
||||
{
|
||||
@@ -17,9 +18,30 @@ interface FlasherInterface
|
||||
* Get a notification factory instance.
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @phpstan-return ($alias is 'flasher' ? \Flasher\Prime\Factory\FlasherFactoryInterface :
|
||||
* ($alias is 'noty' ? \Flasher\Noty\Prime\NotyInterface :
|
||||
* ($alias is 'notyf' ? \Flasher\Notyf\Prime\NotyfInterface :
|
||||
* ($alias is 'sweetalert' ? \Flasher\SweetAlert\Prime\SweetAlertInterface :
|
||||
* ($alias is 'toastr' ? \Flasher\Toastr\Prime\ToastrInterface :
|
||||
* \Flasher\Prime\Factory\NotificationFactoryInterface)))))
|
||||
*/
|
||||
public function use(string $alias): NotificationFactoryInterface;
|
||||
|
||||
/**
|
||||
* Get a notification factory instance.
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @phpstan-return ($alias is 'flasher' ? \Flasher\Prime\Factory\FlasherFactoryInterface :
|
||||
* ($alias is 'noty' ? \Flasher\Noty\Prime\NotyInterface :
|
||||
* ($alias is 'notyf' ? \Flasher\Notyf\Prime\NotyfInterface :
|
||||
* ($alias is 'sweetalert' ? \Flasher\SweetAlert\Prime\SweetAlertInterface :
|
||||
* ($alias is 'toastr' ? \Flasher\Toastr\Prime\ToastrInterface :
|
||||
* \Flasher\Prime\Factory\NotificationFactoryInterface)))))
|
||||
*/
|
||||
public function create(string $alias): NotificationFactoryInterface;
|
||||
|
||||
/**
|
||||
* Renders the flash notifications based on the specified criteria, presenter, and context.
|
||||
*
|
||||
@@ -27,7 +49,10 @@ interface FlasherInterface
|
||||
* @param string|"html"|"json" $presenter The presenter format for rendering the notifications (e.g., 'html', 'json').
|
||||
* @param array<string, mixed> $context additional context or options for rendering
|
||||
*
|
||||
* @phpstan-return ($presenter is 'html' ? string : mixed)
|
||||
* @phpstan-return ($presenter is 'html' ? string :
|
||||
* ($presenter is 'array' ? ArrayPresenterType :
|
||||
* ($presenter is 'json' ? ArrayPresenterType :
|
||||
* mixed)))
|
||||
*/
|
||||
public function render(string $presenter = 'html', array $criteria = [], array $context = []): mixed;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Flasher\Prime\Notification;
|
||||
|
||||
final class FlasherBuilder extends NotificationBuilder
|
||||
{
|
||||
public function timeout(int $milliseconds): self
|
||||
{
|
||||
$this->option('timeout', $milliseconds);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function direction(string $direction): self
|
||||
{
|
||||
$this->option('direction', $direction);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function position(string $position): self
|
||||
{
|
||||
$this->option('position', $position);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ use Flasher\Prime\Stamp\PluginStamp;
|
||||
use Flasher\Prime\Storage\StorageManagerInterface;
|
||||
use Flasher\Prime\Support\Traits\Macroable;
|
||||
|
||||
class NotificationBuilder implements NotificationBuilderInterface
|
||||
abstract class NotificationBuilder implements NotificationBuilderInterface
|
||||
{
|
||||
use Macroable;
|
||||
use NotificationBuilderMethods;
|
||||
|
||||
@@ -5,7 +5,6 @@ declare(strict_types=1);
|
||||
namespace Flasher\Prime\Notification;
|
||||
|
||||
use Flasher\Prime\Stamp\StampInterface;
|
||||
use Flasher\Prime\Translation\ResourceInterface;
|
||||
|
||||
interface NotificationBuilderInterface
|
||||
{
|
||||
@@ -83,15 +82,15 @@ interface NotificationBuilderInterface
|
||||
*/
|
||||
public function preset(string $preset, array $parameters = []): Envelope;
|
||||
|
||||
public function operation(string $operation, string|ResourceInterface|null $resource = null): Envelope;
|
||||
public function operation(string $operation, string|object|null $resource = null): Envelope;
|
||||
|
||||
public function created(string|ResourceInterface|null $resource = null): Envelope;
|
||||
public function created(string|object|null $resource = null): Envelope;
|
||||
|
||||
public function updated(string|ResourceInterface|null $resource = null): Envelope;
|
||||
public function updated(string|object|null $resource = null): Envelope;
|
||||
|
||||
public function saved(string|ResourceInterface|null $resource = null): Envelope;
|
||||
public function saved(string|object|null $resource = null): Envelope;
|
||||
|
||||
public function deleted(string|ResourceInterface|null $resource = null): Envelope;
|
||||
public function deleted(string|object|null $resource = null): Envelope;
|
||||
|
||||
public function push(): Envelope;
|
||||
|
||||
|
||||
@@ -39,9 +39,9 @@ trait NotificationBuilderMethods
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function options(array $options, bool $merge = true): static
|
||||
public function options(array $options, bool $append = true): static
|
||||
{
|
||||
if ($merge) {
|
||||
if ($append) {
|
||||
$options = array_merge($this->envelope->getOptions(), $options);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ namespace Flasher\Prime\Notification;
|
||||
|
||||
use Flasher\Prime\Stamp\PresetStamp;
|
||||
use Flasher\Prime\Storage\StorageManagerInterface;
|
||||
use Flasher\Prime\Translation\ResourceInterface;
|
||||
|
||||
trait NotificationStorageMethods
|
||||
{
|
||||
@@ -82,22 +81,13 @@ trait NotificationStorageMethods
|
||||
|
||||
public function operation(string $operation, string|object|null $resource = null): Envelope
|
||||
{
|
||||
if ($resource instanceof ResourceInterface) {
|
||||
$type = $resource->getResourceType();
|
||||
$name = $resource->getResourceName();
|
||||
$resource = match (true) {
|
||||
\is_string($resource) => $resource,
|
||||
\is_object($resource) => $this->resolveResourceName($resource),
|
||||
default => null,
|
||||
};
|
||||
|
||||
$resource = sprintf(
|
||||
'%s %s',
|
||||
$type,
|
||||
'' === $name ? '' : sprintf('"%s"', $name)
|
||||
);
|
||||
}
|
||||
|
||||
$parameters = [
|
||||
'resource' => $resource ?: 'resource',
|
||||
];
|
||||
|
||||
return $this->preset($operation, $parameters);
|
||||
return $this->preset($operation, [':resource' => $resource ?: 'resource']);
|
||||
}
|
||||
|
||||
public function push(): Envelope
|
||||
@@ -108,4 +98,11 @@ trait NotificationStorageMethods
|
||||
|
||||
return $envelope;
|
||||
}
|
||||
|
||||
private function resolveResourceName(object $object): ?string
|
||||
{
|
||||
$displayName = \is_callable([$object, 'getFlashIdentifier']) ? $object->getFlashIdentifier() : null;
|
||||
|
||||
return $displayName ?: basename(str_replace('\\', '/', $object::class));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Flasher\Prime\Phpstan\ReturnTypes;
|
||||
|
||||
use Flasher\Noty\Prime\NotyInterface;
|
||||
use Flasher\Notyf\Prime\NotyfInterface;
|
||||
use Flasher\Prime\Factory\NotificationFactoryInterface;
|
||||
use Flasher\Prime\FlasherInterface;
|
||||
use Flasher\Prime\Notification\Envelope;
|
||||
use Flasher\SweetAlert\Prime\SweetAlertInterface;
|
||||
use Flasher\Toastr\Prime\ToastrInterface;
|
||||
use PhpParser\Node\Expr\FuncCall;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Reflection\FunctionReflection;
|
||||
use PHPStan\Type\DynamicFunctionReturnTypeExtension;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use PHPStan\Type\Type;
|
||||
use PHPStan\Type\TypeCombinator;
|
||||
|
||||
final class FlashHelperExtension implements DynamicFunctionReturnTypeExtension
|
||||
{
|
||||
private const MAPPING = [
|
||||
'flash' => [FlasherInterface::class, NotificationFactoryInterface::class],
|
||||
'Flasher\Prime\flash' => [FlasherInterface::class, NotificationFactoryInterface::class],
|
||||
'noty' => NotyInterface::class,
|
||||
'Flasher\Noty\Prime\noty' => NotyInterface::class,
|
||||
'notyf' => NotyfInterface::class,
|
||||
'Flasher\Notyf\Prime\notyf' => NotyfInterface::class,
|
||||
'sweetalert' => SweetAlertInterface::class,
|
||||
'Flasher\SweetAlert\Prime\sweetalert' => SweetAlertInterface::class,
|
||||
'toastr' => ToastrInterface::class,
|
||||
'Flasher\Toastr\Prime\toastr' => ToastrInterface::class,
|
||||
];
|
||||
|
||||
public function isFunctionSupported(FunctionReflection $functionReflection): bool
|
||||
{
|
||||
return \array_key_exists($functionReflection->getName(), self::MAPPING);
|
||||
}
|
||||
|
||||
public function getTypeFromFunctionCall(FunctionReflection $functionReflection, FuncCall $functionCall, Scope $scope): ?Type
|
||||
{
|
||||
if (\count($functionCall->getArgs())) {
|
||||
return new ObjectType(Envelope::class);
|
||||
}
|
||||
|
||||
$types = self::MAPPING[$functionReflection->getName()];
|
||||
|
||||
if (\is_array($types)) {
|
||||
return TypeCombinator::union(...array_map(fn ($type) => new ObjectType($type), $types));
|
||||
}
|
||||
|
||||
return new ObjectType($types);
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user