diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
deleted file mode 100644
index 429600c3c..000000000
--- a/.devcontainer/devcontainer.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "Openclassify",
- // Script to run to bootstrap the app when the space is created
- "postCreateCommand": "bash install.sh",
- "outputCapture": "std"
-}
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..a186cd207
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,18 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.{yml,yaml}]
+indent_size = 2
+
+[compose.yaml]
+indent_size = 4
diff --git a/.env-sail b/.env-sail
deleted file mode 100644
index 252e1e12a..000000000
--- a/.env-sail
+++ /dev/null
@@ -1,23 +0,0 @@
-APP_NAME=oc
-APP_ENV=production
-INSTALLED="false"
-APP_URL_TYPE="HTTP_X_FORWARDED_HOST"
-APP_KEY=DYKEBxfEHK1PP4mUbP3gWPtsPZgXh0qX
-APP_DEBUG=true
-DEBUG_BAR=true
-DB_CONNECTION=mysql
-#DB_HOST=mysql
-DB_HOST=host.docker.internal
-DB_DATABASE=oc
-DB_USERNAME=oc
-DB_PASSWORD=oc
-APPLICATION_NAME=Default
-APPLICATION_REFERENCE=default
-ADMIN_USERNAME=admin
-ADMIN_EMAIL=admin@example.com
-ADMIN_PASSWORD=admin
-APP_LOCALE=en
-APP_TIMEZONE=UTC
-REDIS_CLIENT=phpredis
-REDIS_HOST=redis
-REDIS_PORT=6379
diff --git a/.env.example b/.env.example
index 70d710496..c0660ea14 100644
--- a/.env.example
+++ b/.env.example
@@ -1,16 +1,65 @@
+APP_NAME=Laravel
APP_ENV=local
-INSTALLED=false
-APP_KEY=spNWIbUUSkRICcUwBGOaDzgwWsLjqUVq
-DB_CONNECTION=mysql
-DB_HOST=localhost
-DB_DATABASE=forge
-DB_USERNAME=forge
-DB_PASSWORD=forge
-APPLICATION_NAME=Default
-APPLICATION_REFERENCE=default
-ADMIN_USERNAME=$adminUserName
-ADMIN_EMAIL=admin@example.com
-ADMIN_PASSWORD=admin123
-LOCALE=en
-AUTO_TOKEN=spNWITUUSkRICcUwBGOaDzGwWsLqUVqX
-APP_TIMEZONE=UTC
+APP_KEY=
+APP_DEBUG=true
+APP_URL=http://localhost
+
+APP_LOCALE=en
+APP_FALLBACK_LOCALE=en
+APP_FAKER_LOCALE=en_US
+
+APP_MAINTENANCE_DRIVER=file
+# APP_MAINTENANCE_STORE=database
+
+# PHP_CLI_SERVER_WORKERS=4
+
+BCRYPT_ROUNDS=12
+
+LOG_CHANNEL=stack
+LOG_STACK=single
+LOG_DEPRECATIONS_CHANNEL=null
+LOG_LEVEL=debug
+
+DB_CONNECTION=sqlite
+# DB_HOST=127.0.0.1
+# DB_PORT=3306
+# DB_DATABASE=laravel
+# DB_USERNAME=root
+# DB_PASSWORD=
+
+SESSION_DRIVER=database
+SESSION_LIFETIME=120
+SESSION_ENCRYPT=false
+SESSION_PATH=/
+SESSION_DOMAIN=null
+
+BROADCAST_CONNECTION=log
+FILESYSTEM_DISK=local
+QUEUE_CONNECTION=database
+
+CACHE_STORE=database
+# CACHE_PREFIX=
+
+MEMCACHED_HOST=127.0.0.1
+
+REDIS_CLIENT=phpredis
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_MAILER=log
+MAIL_SCHEME=null
+MAIL_HOST=127.0.0.1
+MAIL_PORT=2525
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_FROM_ADDRESS="hello@example.com"
+MAIL_FROM_NAME="${APP_NAME}"
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_DEFAULT_REGION=us-east-1
+AWS_BUCKET=
+AWS_USE_PATH_STYLE_ENDPOINT=false
+
+VITE_APP_NAME="${APP_NAME}"
diff --git a/.env_demo b/.env_demo
deleted file mode 100644
index 4547c462b..000000000
--- a/.env_demo
+++ /dev/null
@@ -1,70 +0,0 @@
-
-DB_CONNECTION=mysql
-DB_HOST=localhost
-DB_PORT=3307
-DB_DATABASE=oc
-DB_USERNAME=root
-DB_PASSWORD=""
-
-APP_NAME="OpenClassify"
-FORCE_SSL=0
-APP_TIMEZONE="UTC"
-DATE_FORMAT="j F, Y"
-TIME_FORMAT="H:i"
-UNIT_SYSTEM="imperial"
-STANDARD_THEME="visiosoft.theme.default"
-ADMIN_THEME="visiosoft.theme.defaultadmin"
-RESULTS_PER_PAGE=15
-DEFAULT_LOCALE="en"
-ENABLED_LOCALES='a:1:{i:0;s:2:"en";}'
-MAINTENANCE_MODE=0
-MAINTENANCE_AUTH=0
-FROM_ADDRESS="info@openclassify.com"
-FROM_NAME="OpenClassify"
-
-MAIL_DRIVER="smtp"
-MAIL_HOST=smtp.mailtrap.io
-MAIL_PORT=2525
-MAIL_USERNAME="029f2d0c9099d9"
-MAIL_PASSWORD="8252f6d1c2ca42"
-
-HTTP_CACHE=0
-HTTP_CACHE_TTL=3600
-HTTP_CACHE_ALLOW_BOTS=0
-HTTP_CACHE_EXCLUDED="NULL"
-HTTP_CACHE_RULES="NULL"
-DB_CACHE=0
-DB_CACHE_TTL=3600
-
-
-
-ADV_COUNTRY=212
-ADV_LOGO="NULL"
-ADV_SITE_ADDRESS="visiosoft.com.tr"
-ADV_AUTO_APPROVE=1
-ADV_PUBLISH_TIME=10
-ADV_GET=0
-ADV_LIMIT=15
-ADV_PHONE="212 555 55 55"
-ADV_ADDRESS="Basaksehir Istanbul"
-ADV_CITY=34
-ADV_DISTRICT=1091
-ADV_MAIL="support"
-ADV_MAP_KEY="AIzaSyCAGc0z8kg9rKGVy2FizFKoz0FoWWWzoGQ"
-ADV_MAP_LONG="28.74558607285155"
-ADV_MAP_LAT="40.97817786299617"
-ADV_CURRENCIES='a:1:{i:0;s:1:"0";}'
-ADV_CURRENCY_CONVERT_API_KEY="1eea72940f3868c77420"
-ADV_CURRENCY="USD"
-ADV_TWITTER="/twitter.com/visiosoft"
-ADV_FACEBOOK="/facebook.com/visiosoft"
-ADV_YOUTUBE="/youtube.com/visiosoft"
-ADV_GOOGLE="/plus.google.com/visiosoft"
-ADV_WATERMARK_TYPE="text"
-ADV_WATERMARK_TEXT="openclassify.com"
-ADV_WATERMARK_POSITION="top-right"
-ADV_WATERMARK_OPACITY=80
-ADV_ENABLED_CURRENCIES='a:1:{i:0;s:3:"USD";}'
-
-
-ENABLE_SENTRY_LARAVEL=true
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..fcb21d396
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,11 @@
+* text=auto eol=lf
+
+*.blade.php diff=html
+*.css diff=css
+*.html diff=html
+*.md diff=markdown
+*.php diff=php
+
+/.github export-ignore
+CHANGELOG.md export-ignore
+.styleci.yml export-ignore
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index febe2f336..000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-# These are supported funding model platforms
-
-patreon: openclassify
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index dd84ea782..000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Desktop (please complete the following information):**
- - OS: [e.g. iOS]
- - Browser [e.g. chrome, safari]
- - Version [e.g. 22]
-
-**Smartphone (please complete the following information):**
- - Device: [e.g. iPhone6]
- - OS: [e.g. iOS8.1]
- - Browser [e.g. stock browser, safari]
- - Version [e.g. 22]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index bbcbbe7d6..000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml
new file mode 100644
index 000000000..230257c28
--- /dev/null
+++ b/.github/workflows/issues.yml
@@ -0,0 +1,12 @@
+name: Issues
+
+on:
+ issues:
+ types: [labeled]
+
+permissions:
+ issues: write
+
+jobs:
+ help-wanted:
+ uses: laravel/.github/.github/workflows/issues.yml@main
diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml
new file mode 100644
index 000000000..6f9f97ea0
--- /dev/null
+++ b/.github/workflows/pull-requests.yml
@@ -0,0 +1,12 @@
+name: Pull Requests
+
+on:
+ pull_request_target:
+ types: [opened]
+
+permissions:
+ pull-requests: write
+
+jobs:
+ uneditable:
+ uses: laravel/.github/.github/workflows/pull-requests.yml@main
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 000000000..4b505a038
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,47 @@
+name: Tests
+
+on:
+ push:
+ branches:
+ - master
+ - '*.x'
+ pull_request:
+ schedule:
+ - cron: '0 0 * * *'
+
+permissions:
+ contents: read
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: true
+ matrix:
+ php: [8.2, 8.3, 8.4]
+
+ name: PHP ${{ matrix.php }}
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v6
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php }}
+ extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite
+ coverage: none
+
+ - name: Install Composer dependencies
+ run: composer install --prefer-dist --no-interaction --no-progress
+
+ - name: Copy environment file
+ run: cp .env.example .env
+
+ - name: Generate app key
+ run: php artisan key:generate
+
+ - name: Execute tests
+ run: php artisan test
diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml
new file mode 100644
index 000000000..703523313
--- /dev/null
+++ b/.github/workflows/update-changelog.yml
@@ -0,0 +1,13 @@
+name: Update Changelog
+
+on:
+ release:
+ types: [released]
+
+permissions: {}
+
+jobs:
+ update:
+ permissions:
+ contents: write
+ uses: laravel/.github/.github/workflows/update-changelog.yml@main
diff --git a/.gitignore b/.gitignore
index 9b96e492a..b71b1ea3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,32 +1,24 @@
-.idea
+*.log
+.DS_Store
.env
-.coverage
-/bin
-/core
-/build
-/vendor
-/coverage
+.env.backup
+.env.production
+.phpactor.json
+.phpunit.result.cache
+/.fleet
+/.idea
+/.nova
+/.phpunit.cache
+/.vscode
+/.zed
+/auth.json
/node_modules
-/bower_components
-composer.lock
-package-lock.json
-
-
-* text=auto
-
-*.txt text eol=lf
-*.xml text eol=lf
-*.json text eol=lf
-*.properties text eol=lf
-*.conf text eol=lf
-*.sh text eol=lf
-Dockerfile text eol=lf
-
-*.awk text eol=lf
-*.sed text eol=lf
-*.sh text eol=lf
-
-*.png binary
-*.jpg binary
-
-*.p12 binary
\ No newline at end of file
+/public/build
+/public/hot
+/public/storage
+/storage/*.key
+/storage/pail
+/vendor
+Homestead.json
+Homestead.yaml
+Thumbs.db
diff --git a/.styleci.yml b/.styleci.yml
new file mode 100644
index 000000000..9daadf161
--- /dev/null
+++ b/.styleci.yml
@@ -0,0 +1,9 @@
+php:
+ preset: laravel
+ disabled:
+ - no_unused_imports
+ finder:
+ not-name:
+ - index.php
+js: true
+css: true
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 000000000..90e8a12dc
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,19 @@
+# OpenClassify Changelog
+
+All notable changes to OpenClassify will be documented in this file.
+
+## [1.0.0] - 2025-01-01
+
+### Added
+- Initial release of OpenClassify — a Laravel 12 classified ads platform (inspired by Letgo/OLX)
+- **Category Module**: Hierarchical categories with icons and up to 10 levels of nesting; seeded with 8 top-level categories and 33 subcategories
+- **Listing Module**: Classified ads with title, description, price, currency, location, featured flag, and contact info
+- **Location Module**: Country/City/District/Neighborhood hierarchy with seed data for 5 countries
+- **Profile Module**: User profile management with bio, phone, location, and website
+- Home page with hero search bar, stats bar, category grid, featured listings, and recent listings
+- Partner dashboard showing user's own listings with activity stats
+- Language switcher with support for 10 locales: English, Turkish, Arabic, Chinese, Spanish, French, German, Portuguese, Russian, Japanese
+- RTL layout support for Arabic
+- SQLite database with full migration support
+- Authentication via Laravel Breeze (login, register, password reset, email verification)
+- Responsive UI using Tailwind CSS
diff --git a/LICENSE.md b/LICENSE.md
deleted file mode 100644
index 4b7ce9ecf..000000000
--- a/LICENSE.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# The MIT License (MIT)
-
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/Modules/Category/Database/Seeders/CategorySeeder.php b/Modules/Category/Database/Seeders/CategorySeeder.php
new file mode 100644
index 000000000..34bb0fb57
--- /dev/null
+++ b/Modules/Category/Database/Seeders/CategorySeeder.php
@@ -0,0 +1,36 @@
+ 'Electronics', 'icon' => '📱', 'children' => ['Mobile Phones', 'Laptops & Computers', 'Tablets', 'Cameras', 'Audio']],
+ ['name' => 'Vehicles', 'icon' => '🚗', 'children' => ['Cars', 'Motorcycles', 'Trucks', 'Boats']],
+ ['name' => 'Real Estate', 'icon' => '🏠', 'children' => ['Apartments for Rent', 'Houses for Sale', 'Commercial', 'Land']],
+ ['name' => 'Furniture', 'icon' => '🛋️', 'children' => ['Sofas', 'Beds', 'Tables', 'Wardrobes']],
+ ['name' => 'Fashion', 'icon' => '👗', 'children' => ['Women', 'Men', 'Kids', 'Accessories']],
+ ['name' => 'Jobs', 'icon' => '💼', 'children' => ['IT & Technology', 'Marketing', 'Sales', 'Education']],
+ ['name' => 'Services', 'icon' => '🔧', 'children' => ['Home Repair', 'Tutoring', 'Design', 'Cleaning']],
+ ['name' => 'Sports & Hobbies', 'icon' => '⚽', 'children' => ['Sports Equipment', 'Musical Instruments', 'Books', 'Games']],
+ ];
+
+ foreach ($categories as $catData) {
+ $parent = Category::firstOrCreate(
+ ['slug' => Str::slug($catData['name'])],
+ ['name' => $catData['name'], 'icon' => $catData['icon'] ?? null, 'level' => 0, 'is_active' => true]
+ );
+ foreach ($catData['children'] as $childName) {
+ Category::firstOrCreate(
+ ['slug' => Str::slug($childName)],
+ ['name' => $childName, 'parent_id' => $parent->id, 'level' => 1, 'is_active' => true]
+ );
+ }
+ }
+ }
+}
diff --git a/Modules/Category/Http/Controllers/CategoryController.php b/Modules/Category/Http/Controllers/CategoryController.php
new file mode 100644
index 000000000..a4ded2e7e
--- /dev/null
+++ b/Modules/Category/Http/Controllers/CategoryController.php
@@ -0,0 +1,21 @@
+with('children')->where('is_active', true)->get();
+ return view('category::index', compact('categories'));
+ }
+
+ public function show(Category $category)
+ {
+ $listings = $category->listings()->where('status', 'active')->paginate(12);
+ return view('category::show', compact('category', 'listings'));
+ }
+}
diff --git a/Modules/Category/Models/Category.php b/Modules/Category/Models/Category.php
new file mode 100644
index 000000000..64e89f48e
--- /dev/null
+++ b/Modules/Category/Models/Category.php
@@ -0,0 +1,27 @@
+ 'boolean'];
+
+ public function parent(): BelongsTo
+ {
+ return $this->belongsTo(Category::class, 'parent_id');
+ }
+
+ public function children(): HasMany
+ {
+ return $this->hasMany(Category::class, 'parent_id');
+ }
+
+ public function listings(): HasMany
+ {
+ return $this->hasMany(\Modules\Listing\Models\Listing::class);
+ }
+}
diff --git a/Modules/Category/Providers/CategoryServiceProvider.php b/Modules/Category/Providers/CategoryServiceProvider.php
new file mode 100644
index 000000000..08ca08c17
--- /dev/null
+++ b/Modules/Category/Providers/CategoryServiceProvider.php
@@ -0,0 +1,18 @@
+loadMigrationsFrom(module_path($this->moduleName, 'database/migrations'));
+ $this->loadRoutesFrom(module_path($this->moduleName, 'routes/web.php'));
+ $this->loadViewsFrom(module_path($this->moduleName, 'resources/views'), 'category');
+ }
+
+ public function register(): void {}
+}
diff --git a/Modules/Category/database/migrations/2024_01_01_000002_create_categories_table.php b/Modules/Category/database/migrations/2024_01_01_000002_create_categories_table.php
new file mode 100644
index 000000000..ce5dec262
--- /dev/null
+++ b/Modules/Category/database/migrations/2024_01_01_000002_create_categories_table.php
@@ -0,0 +1,28 @@
+id();
+ $table->string('name');
+ $table->string('slug')->unique();
+ $table->text('description')->nullable();
+ $table->string('icon')->nullable();
+ $table->foreignId('parent_id')->nullable()->constrained('categories')->nullOnDelete();
+ $table->integer('level')->default(0);
+ $table->integer('sort_order')->default(0);
+ $table->boolean('is_active')->default(true);
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('categories');
+ }
+};
diff --git a/Modules/Category/database/seeders/CategorySeeder.php b/Modules/Category/database/seeders/CategorySeeder.php
new file mode 100644
index 000000000..34bb0fb57
--- /dev/null
+++ b/Modules/Category/database/seeders/CategorySeeder.php
@@ -0,0 +1,36 @@
+ 'Electronics', 'icon' => '📱', 'children' => ['Mobile Phones', 'Laptops & Computers', 'Tablets', 'Cameras', 'Audio']],
+ ['name' => 'Vehicles', 'icon' => '🚗', 'children' => ['Cars', 'Motorcycles', 'Trucks', 'Boats']],
+ ['name' => 'Real Estate', 'icon' => '🏠', 'children' => ['Apartments for Rent', 'Houses for Sale', 'Commercial', 'Land']],
+ ['name' => 'Furniture', 'icon' => '🛋️', 'children' => ['Sofas', 'Beds', 'Tables', 'Wardrobes']],
+ ['name' => 'Fashion', 'icon' => '👗', 'children' => ['Women', 'Men', 'Kids', 'Accessories']],
+ ['name' => 'Jobs', 'icon' => '💼', 'children' => ['IT & Technology', 'Marketing', 'Sales', 'Education']],
+ ['name' => 'Services', 'icon' => '🔧', 'children' => ['Home Repair', 'Tutoring', 'Design', 'Cleaning']],
+ ['name' => 'Sports & Hobbies', 'icon' => '⚽', 'children' => ['Sports Equipment', 'Musical Instruments', 'Books', 'Games']],
+ ];
+
+ foreach ($categories as $catData) {
+ $parent = Category::firstOrCreate(
+ ['slug' => Str::slug($catData['name'])],
+ ['name' => $catData['name'], 'icon' => $catData['icon'] ?? null, 'level' => 0, 'is_active' => true]
+ );
+ foreach ($catData['children'] as $childName) {
+ Category::firstOrCreate(
+ ['slug' => Str::slug($childName)],
+ ['name' => $childName, 'parent_id' => $parent->id, 'level' => 1, 'is_active' => true]
+ );
+ }
+ }
+ }
+}
diff --git a/Modules/Category/module.json b/Modules/Category/module.json
new file mode 100644
index 000000000..3a4eb1663
--- /dev/null
+++ b/Modules/Category/module.json
@@ -0,0 +1,12 @@
+{
+ "name": "Category",
+ "alias": "category",
+ "description": "Categories with hierarchy support",
+ "keywords": [],
+ "priority": 0,
+ "providers": [
+ "Modules\\Category\\Providers\\CategoryServiceProvider"
+ ],
+ "aliases": {},
+ "files": []
+}
diff --git a/Modules/Category/resources/views/index.blade.php b/Modules/Category/resources/views/index.blade.php
new file mode 100644
index 000000000..0b83a60ac
--- /dev/null
+++ b/Modules/Category/resources/views/index.blade.php
@@ -0,0 +1,15 @@
+@extends('layouts.app')
+@section('content')
+
+
{{ __('messages.categories') }}
+
+
+@endsection
diff --git a/Modules/Category/resources/views/show.blade.php b/Modules/Category/resources/views/show.blade.php
new file mode 100644
index 000000000..275069917
--- /dev/null
+++ b/Modules/Category/resources/views/show.blade.php
@@ -0,0 +1,33 @@
+@extends('layouts.app')
+@section('content')
+
+
+
{{ $category->icon ?? '' }} {{ $category->name }}
+ @if($category->description)
{{ $category->description }}
@endif
+
+ @if($category->children->count())
+
+ @endif
+
Listings in {{ $category->name }}
+
+ @forelse($listings as $listing)
+
+
+
{{ $listing->title }}
+
{{ $listing->price ? number_format($listing->price, 0).' '.$listing->currency : 'Free' }}
+
View →
+
+
+ @empty
+
No listings in this category yet.
+ @endforelse
+
+
{{ $listings->links() }}
+
+@endsection
diff --git a/Modules/Category/routes/web.php b/Modules/Category/routes/web.php
new file mode 100644
index 000000000..3174d4e08
--- /dev/null
+++ b/Modules/Category/routes/web.php
@@ -0,0 +1,8 @@
+name('categories.')->group(function () {
+ Route::get('/', [CategoryController::class, 'index'])->name('index');
+ Route::get('/{category}', [CategoryController::class, 'show'])->name('show');
+});
diff --git a/Modules/Listing/Database/Seeders/ListingSeeder.php b/Modules/Listing/Database/Seeders/ListingSeeder.php
new file mode 100644
index 000000000..d645d09a9
--- /dev/null
+++ b/Modules/Listing/Database/Seeders/ListingSeeder.php
@@ -0,0 +1,30 @@
+ 'iPhone 14 Pro - Like New', 'price' => 750, 'category_id' => 1, 'status' => 'active'],
+ ['title' => 'Samsung Galaxy S23', 'price' => 550, 'category_id' => 1, 'status' => 'active'],
+ ['title' => 'MacBook Pro 2023', 'price' => 1800, 'category_id' => 2, 'status' => 'active'],
+ ['title' => '2019 Toyota Corolla', 'price' => 15000, 'category_id' => 3, 'status' => 'active'],
+ ['title' => 'Apartment for Rent - 2BR', 'price' => 1200, 'category_id' => 4, 'status' => 'active'],
+ ['title' => 'Sofa Set - Excellent Condition', 'price' => 350, 'category_id' => 5, 'status' => 'active'],
+ ];
+
+ foreach ($listings as $data) {
+ $data['slug'] = Str::slug($data['title']) . '-' . Str::random(6);
+ $data['description'] = 'Great item in excellent condition. Contact for more details.';
+ $data['contact_email'] = 'seller@example.com';
+ $data['city'] = 'Istanbul';
+ $data['country'] = 'Turkey';
+ Listing::firstOrCreate(['title' => $data['title']], $data);
+ }
+ }
+}
diff --git a/Modules/Listing/Http/Controllers/ListingController.php b/Modules/Listing/Http/Controllers/ListingController.php
new file mode 100644
index 000000000..bd47dc6fb
--- /dev/null
+++ b/Modules/Listing/Http/Controllers/ListingController.php
@@ -0,0 +1,44 @@
+orderByDesc('is_featured')
+ ->orderByDesc('created_at')
+ ->paginate(12);
+ return view('listing::index', compact('listings'));
+ }
+
+ public function show(Listing $listing)
+ {
+ return view('listing::show', compact('listing'));
+ }
+
+ public function create()
+ {
+ return view('listing::create');
+ }
+
+ public function store(Request $request)
+ {
+ $data = $request->validate([
+ 'title' => 'required|string|max:255',
+ 'description' => 'nullable|string',
+ 'price' => 'nullable|numeric',
+ 'category_id' => 'nullable|integer',
+ 'contact_email' => 'nullable|email',
+ 'contact_phone' => 'nullable|string',
+ ]);
+ $data['user_id'] = auth()->id();
+ $data['slug'] = \Illuminate\Support\Str::slug($data['title']) . '-' . \Illuminate\Support\Str::random(6);
+ $listing = Listing::create($data);
+ return redirect()->route('listings.show', $listing)->with('success', 'Listing created!');
+ }
+}
diff --git a/Modules/Listing/Models/Listing.php b/Modules/Listing/Models/Listing.php
new file mode 100644
index 000000000..4ad82c152
--- /dev/null
+++ b/Modules/Listing/Models/Listing.php
@@ -0,0 +1,34 @@
+ 'array',
+ 'is_featured' => 'boolean',
+ 'expires_at' => 'datetime',
+ 'price' => 'decimal:2',
+ ];
+
+ public function category()
+ {
+ return $this->belongsTo(\Modules\Category\Models\Category::class);
+ }
+
+ public function user()
+ {
+ return $this->belongsTo(\App\Models\User::class);
+ }
+}
diff --git a/Modules/Listing/Providers/ListingServiceProvider.php b/Modules/Listing/Providers/ListingServiceProvider.php
new file mode 100644
index 000000000..276501e03
--- /dev/null
+++ b/Modules/Listing/Providers/ListingServiceProvider.php
@@ -0,0 +1,19 @@
+loadViewsFrom(module_path($this->moduleName, 'resources/views'), $this->moduleNameLower);
+ $this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations'));
+ $this->loadRoutesFrom(module_path($this->moduleName, 'routes/web.php'));
+ }
+
+ public function register(): void {}
+}
diff --git a/Modules/Listing/database/migrations/2024_01_01_000003_create_listings_table.php b/Modules/Listing/database/migrations/2024_01_01_000003_create_listings_table.php
new file mode 100644
index 000000000..bdd317c3c
--- /dev/null
+++ b/Modules/Listing/database/migrations/2024_01_01_000003_create_listings_table.php
@@ -0,0 +1,35 @@
+id();
+ $table->string('title');
+ $table->string('slug')->unique();
+ $table->text('description')->nullable();
+ $table->decimal('price', 10, 2)->nullable();
+ $table->string('currency', 3)->default('USD');
+ $table->foreignId('category_id')->nullable()->constrained('categories')->nullOnDelete();
+ $table->foreignId('user_id')->nullable()->constrained('users')->nullOnDelete();
+ $table->string('status')->default('active');
+ $table->json('images')->nullable();
+ $table->string('contact_phone')->nullable();
+ $table->string('contact_email')->nullable();
+ $table->boolean('is_featured')->default(false);
+ $table->timestamp('expires_at')->nullable();
+ $table->string('city')->nullable();
+ $table->string('country')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('listings');
+ }
+};
diff --git a/Modules/Listing/database/seeders/ListingSeeder.php b/Modules/Listing/database/seeders/ListingSeeder.php
new file mode 100644
index 000000000..d645d09a9
--- /dev/null
+++ b/Modules/Listing/database/seeders/ListingSeeder.php
@@ -0,0 +1,30 @@
+ 'iPhone 14 Pro - Like New', 'price' => 750, 'category_id' => 1, 'status' => 'active'],
+ ['title' => 'Samsung Galaxy S23', 'price' => 550, 'category_id' => 1, 'status' => 'active'],
+ ['title' => 'MacBook Pro 2023', 'price' => 1800, 'category_id' => 2, 'status' => 'active'],
+ ['title' => '2019 Toyota Corolla', 'price' => 15000, 'category_id' => 3, 'status' => 'active'],
+ ['title' => 'Apartment for Rent - 2BR', 'price' => 1200, 'category_id' => 4, 'status' => 'active'],
+ ['title' => 'Sofa Set - Excellent Condition', 'price' => 350, 'category_id' => 5, 'status' => 'active'],
+ ];
+
+ foreach ($listings as $data) {
+ $data['slug'] = Str::slug($data['title']) . '-' . Str::random(6);
+ $data['description'] = 'Great item in excellent condition. Contact for more details.';
+ $data['contact_email'] = 'seller@example.com';
+ $data['city'] = 'Istanbul';
+ $data['country'] = 'Turkey';
+ Listing::firstOrCreate(['title' => $data['title']], $data);
+ }
+ }
+}
diff --git a/Modules/Listing/module.json b/Modules/Listing/module.json
new file mode 100644
index 000000000..d13b78320
--- /dev/null
+++ b/Modules/Listing/module.json
@@ -0,0 +1,12 @@
+{
+ "name": "Listing",
+ "alias": "listing",
+ "description": "Classified ads listings module",
+ "keywords": [],
+ "priority": 0,
+ "providers": [
+ "Modules\\Listing\\Providers\\ListingServiceProvider"
+ ],
+ "aliases": {},
+ "files": []
+}
diff --git a/Modules/Listing/resources/views/create.blade.php b/Modules/Listing/resources/views/create.blade.php
new file mode 100644
index 000000000..54289ca7b
--- /dev/null
+++ b/Modules/Listing/resources/views/create.blade.php
@@ -0,0 +1,33 @@
+@extends('layouts.app')
+@section('content')
+
+@endsection
diff --git a/Modules/Listing/resources/views/index.blade.php b/Modules/Listing/resources/views/index.blade.php
new file mode 100644
index 000000000..8e81b440c
--- /dev/null
+++ b/Modules/Listing/resources/views/index.blade.php
@@ -0,0 +1,27 @@
+@extends('layouts.app')
+@section('content')
+
+
{{ __('messages.listings') }}
+
+ @foreach($listings as $listing)
+
+
+
+ @if($listing->is_featured)
+
Featured
+ @endif
+
{{ $listing->title }}
+
+ @if($listing->price) {{ number_format($listing->price, 0) }} {{ $listing->currency }} @else Free @endif
+
+
{{ $listing->city }}, {{ $listing->country }}
+
View
+
+
+ @endforeach
+
+
{{ $listings->links() }}
+
+@endsection
diff --git a/Modules/Listing/resources/views/show.blade.php b/Modules/Listing/resources/views/show.blade.php
new file mode 100644
index 000000000..dbb19b76b
--- /dev/null
+++ b/Modules/Listing/resources/views/show.blade.php
@@ -0,0 +1,38 @@
+@extends('layouts.app')
+@section('content')
+
+
+
+
+
+
+
{{ $listing->title }}
+
+ @if($listing->price) {{ number_format($listing->price, 0) }} {{ $listing->currency }} @else Free @endif
+
+
+
{{ $listing->city }}, {{ $listing->country }}
+
Posted {{ $listing->created_at->diffForHumans() }}
+
+
Description
+
{{ $listing->description }}
+
+
+
Contact Seller
+ @if($listing->contact_phone)
+
Phone: {{ $listing->contact_phone }}
+ @endif
+ @if($listing->contact_email)
+
Email: {{ $listing->contact_email }}
+ @endif
+
+
+
+
+
+
+@endsection
diff --git a/Modules/Listing/routes/web.php b/Modules/Listing/routes/web.php
new file mode 100644
index 000000000..45132f09b
--- /dev/null
+++ b/Modules/Listing/routes/web.php
@@ -0,0 +1,10 @@
+name('listings.')->group(function () {
+ Route::get('/', [ListingController::class, 'index'])->name('index');
+ Route::get('/create', [ListingController::class, 'create'])->name('create')->middleware('auth');
+ Route::post('/', [ListingController::class, 'store'])->name('store')->middleware('auth');
+ Route::get('/{listing}', [ListingController::class, 'show'])->name('show');
+});
diff --git a/Modules/Location/Database/Seeders/LocationSeeder.php b/Modules/Location/Database/Seeders/LocationSeeder.php
new file mode 100644
index 000000000..4799515f0
--- /dev/null
+++ b/Modules/Location/Database/Seeders/LocationSeeder.php
@@ -0,0 +1,38 @@
+ 'Turkey', 'code' => 'TR', 'phone_code' => '+90', 'flag' => '🇹🇷',
+ 'cities' => ['Istanbul' => ['Beyoglu', 'Kadikoy', 'Besiktas'], 'Ankara' => ['Cankaya', 'Kecioren'], 'Izmir' => ['Konak', 'Karsiyaka']]],
+ ['name' => 'United States', 'code' => 'US', 'phone_code' => '+1', 'flag' => '🇺🇸',
+ 'cities' => ['New York' => ['Manhattan', 'Brooklyn'], 'Los Angeles' => ['Hollywood', 'Venice'], 'Chicago' => ['Downtown', 'Midtown']]],
+ ['name' => 'United Kingdom', 'code' => 'GB', 'phone_code' => '+44', 'flag' => '🇬🇧',
+ 'cities' => ['London' => ['Westminster', 'Shoreditch'], 'Manchester' => ['City Centre'], 'Birmingham' => ['Jewellery Quarter']]],
+ ['name' => 'Germany', 'code' => 'DE', 'phone_code' => '+49', 'flag' => '🇩🇪',
+ 'cities' => ['Berlin' => ['Mitte', 'Prenzlauer Berg'], 'Munich' => ['Schwabing', 'Maxvorstadt']]],
+ ['name' => 'France', 'code' => 'FR', 'phone_code' => '+33', 'flag' => '🇫🇷',
+ 'cities' => ['Paris' => ['Marais', 'Montmartre'], 'Lyon' => ['Presquile']]],
+ ];
+
+ foreach ($locations as $countryData) {
+ $cities = $countryData['cities'];
+ unset($countryData['cities']);
+ $country = Country::firstOrCreate(['code' => $countryData['code']], $countryData);
+ foreach ($cities as $cityName => $districts) {
+ $city = City::firstOrCreate(['name' => $cityName, 'country_id' => $country->id]);
+ foreach ($districts as $districtName) {
+ District::firstOrCreate(['name' => $districtName, 'city_id' => $city->id]);
+ }
+ }
+ }
+ }
+}
diff --git a/Modules/Location/Models/City.php b/Modules/Location/Models/City.php
new file mode 100644
index 000000000..8f36292f3
--- /dev/null
+++ b/Modules/Location/Models/City.php
@@ -0,0 +1,13 @@
+ 'boolean'];
+
+ public function country() { return $this->belongsTo(Country::class); }
+ public function districts() { return $this->hasMany(District::class); }
+}
diff --git a/Modules/Location/Models/Country.php b/Modules/Location/Models/Country.php
new file mode 100644
index 000000000..0c791b9d4
--- /dev/null
+++ b/Modules/Location/Models/Country.php
@@ -0,0 +1,15 @@
+ 'boolean'];
+
+ public function cities()
+ {
+ return $this->hasMany(City::class);
+ }
+}
diff --git a/Modules/Location/Models/District.php b/Modules/Location/Models/District.php
new file mode 100644
index 000000000..c5f734f8d
--- /dev/null
+++ b/Modules/Location/Models/District.php
@@ -0,0 +1,12 @@
+ 'boolean'];
+
+ public function city() { return $this->belongsTo(City::class); }
+}
diff --git a/Modules/Location/Providers/LocationServiceProvider.php b/Modules/Location/Providers/LocationServiceProvider.php
new file mode 100644
index 000000000..5a4d1206a
--- /dev/null
+++ b/Modules/Location/Providers/LocationServiceProvider.php
@@ -0,0 +1,17 @@
+loadMigrationsFrom(module_path($this->moduleName, 'database/migrations'));
+ $this->loadRoutesFrom(module_path($this->moduleName, 'routes/web.php'));
+ }
+
+ public function register(): void {}
+}
diff --git a/Modules/Location/database/migrations/2024_01_01_000004_create_locations_table.php b/Modules/Location/database/migrations/2024_01_01_000004_create_locations_table.php
new file mode 100644
index 000000000..1068f9dc9
--- /dev/null
+++ b/Modules/Location/database/migrations/2024_01_01_000004_create_locations_table.php
@@ -0,0 +1,52 @@
+id();
+ $table->string('name');
+ $table->string('code', 3)->unique();
+ $table->string('phone_code', 10)->nullable();
+ $table->string('flag', 10)->nullable();
+ $table->boolean('is_active')->default(true);
+ $table->timestamps();
+ });
+
+ Schema::create('cities', function (Blueprint $table) {
+ $table->id();
+ $table->string('name');
+ $table->foreignId('country_id')->constrained('countries')->cascadeOnDelete();
+ $table->boolean('is_active')->default(true);
+ $table->timestamps();
+ });
+
+ Schema::create('districts', function (Blueprint $table) {
+ $table->id();
+ $table->string('name');
+ $table->foreignId('city_id')->constrained('cities')->cascadeOnDelete();
+ $table->boolean('is_active')->default(true);
+ $table->timestamps();
+ });
+
+ Schema::create('neighborhoods', function (Blueprint $table) {
+ $table->id();
+ $table->string('name');
+ $table->foreignId('district_id')->constrained('districts')->cascadeOnDelete();
+ $table->boolean('is_active')->default(true);
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('neighborhoods');
+ Schema::dropIfExists('districts');
+ Schema::dropIfExists('cities');
+ Schema::dropIfExists('countries');
+ }
+};
diff --git a/Modules/Location/database/seeders/LocationSeeder.php b/Modules/Location/database/seeders/LocationSeeder.php
new file mode 100644
index 000000000..4799515f0
--- /dev/null
+++ b/Modules/Location/database/seeders/LocationSeeder.php
@@ -0,0 +1,38 @@
+ 'Turkey', 'code' => 'TR', 'phone_code' => '+90', 'flag' => '🇹🇷',
+ 'cities' => ['Istanbul' => ['Beyoglu', 'Kadikoy', 'Besiktas'], 'Ankara' => ['Cankaya', 'Kecioren'], 'Izmir' => ['Konak', 'Karsiyaka']]],
+ ['name' => 'United States', 'code' => 'US', 'phone_code' => '+1', 'flag' => '🇺🇸',
+ 'cities' => ['New York' => ['Manhattan', 'Brooklyn'], 'Los Angeles' => ['Hollywood', 'Venice'], 'Chicago' => ['Downtown', 'Midtown']]],
+ ['name' => 'United Kingdom', 'code' => 'GB', 'phone_code' => '+44', 'flag' => '🇬🇧',
+ 'cities' => ['London' => ['Westminster', 'Shoreditch'], 'Manchester' => ['City Centre'], 'Birmingham' => ['Jewellery Quarter']]],
+ ['name' => 'Germany', 'code' => 'DE', 'phone_code' => '+49', 'flag' => '🇩🇪',
+ 'cities' => ['Berlin' => ['Mitte', 'Prenzlauer Berg'], 'Munich' => ['Schwabing', 'Maxvorstadt']]],
+ ['name' => 'France', 'code' => 'FR', 'phone_code' => '+33', 'flag' => '🇫🇷',
+ 'cities' => ['Paris' => ['Marais', 'Montmartre'], 'Lyon' => ['Presquile']]],
+ ];
+
+ foreach ($locations as $countryData) {
+ $cities = $countryData['cities'];
+ unset($countryData['cities']);
+ $country = Country::firstOrCreate(['code' => $countryData['code']], $countryData);
+ foreach ($cities as $cityName => $districts) {
+ $city = City::firstOrCreate(['name' => $cityName, 'country_id' => $country->id]);
+ foreach ($districts as $districtName) {
+ District::firstOrCreate(['name' => $districtName, 'city_id' => $city->id]);
+ }
+ }
+ }
+ }
+}
diff --git a/Modules/Location/module.json b/Modules/Location/module.json
new file mode 100644
index 000000000..bffda012e
--- /dev/null
+++ b/Modules/Location/module.json
@@ -0,0 +1,12 @@
+{
+ "name": "Location",
+ "alias": "location",
+ "description": "Country, city, district and neighborhood management",
+ "keywords": [],
+ "priority": 0,
+ "providers": [
+ "Modules\\Location\\Providers\\LocationServiceProvider"
+ ],
+ "aliases": {},
+ "files": []
+}
diff --git a/Modules/Location/routes/web.php b/Modules/Location/routes/web.php
new file mode 100644
index 000000000..182dfe53c
--- /dev/null
+++ b/Modules/Location/routes/web.php
@@ -0,0 +1,10 @@
+json($country->cities);
+})->name('locations.cities');
+
+Route::get('/locations/districts/{city}', function(\Modules\Location\Models\City $city) {
+ return response()->json($city->districts);
+})->name('locations.districts');
diff --git a/Modules/Profile/Http/Controllers/ProfileController.php b/Modules/Profile/Http/Controllers/ProfileController.php
new file mode 100644
index 000000000..b33b8266e
--- /dev/null
+++ b/Modules/Profile/Http/Controllers/ProfileController.php
@@ -0,0 +1,34 @@
+ auth()->id()]);
+ return view('profile::show', compact('profile'));
+ }
+
+ public function edit()
+ {
+ $profile = Profile::firstOrCreate(['user_id' => auth()->id()]);
+ return view('profile::edit', compact('profile'));
+ }
+
+ public function update(Request $request)
+ {
+ $data = $request->validate([
+ 'bio' => 'nullable|string|max:500',
+ 'phone' => 'nullable|string|max:20',
+ 'city' => 'nullable|string|max:100',
+ 'country' => 'nullable|string|max:100',
+ 'website' => 'nullable|url',
+ ]);
+ Profile::updateOrCreate(['user_id' => auth()->id()], $data);
+ return redirect()->route('profile.show')->with('success', 'Profile updated!');
+ }
+}
diff --git a/Modules/Profile/Models/Profile.php b/Modules/Profile/Models/Profile.php
new file mode 100644
index 000000000..58242c344
--- /dev/null
+++ b/Modules/Profile/Models/Profile.php
@@ -0,0 +1,15 @@
+ 'boolean'];
+
+ public function user()
+ {
+ return $this->belongsTo(\App\Models\User::class);
+ }
+}
diff --git a/Modules/Profile/Providers/ProfileServiceProvider.php b/Modules/Profile/Providers/ProfileServiceProvider.php
new file mode 100644
index 000000000..ab9f10574
--- /dev/null
+++ b/Modules/Profile/Providers/ProfileServiceProvider.php
@@ -0,0 +1,18 @@
+loadMigrationsFrom(module_path($this->moduleName, 'database/migrations'));
+ $this->loadRoutesFrom(module_path($this->moduleName, 'routes/web.php'));
+ $this->loadViewsFrom(module_path($this->moduleName, 'resources/views'), 'profile');
+ }
+
+ public function register(): void {}
+}
diff --git a/Modules/Profile/database/migrations/2024_01_01_000005_create_profiles_table.php b/Modules/Profile/database/migrations/2024_01_01_000005_create_profiles_table.php
new file mode 100644
index 000000000..9925e6130
--- /dev/null
+++ b/Modules/Profile/database/migrations/2024_01_01_000005_create_profiles_table.php
@@ -0,0 +1,28 @@
+id();
+ $table->foreignId('user_id')->unique()->constrained('users')->cascadeOnDelete();
+ $table->string('avatar')->nullable();
+ $table->text('bio')->nullable();
+ $table->string('phone')->nullable();
+ $table->string('city')->nullable();
+ $table->string('country')->nullable();
+ $table->string('website')->nullable();
+ $table->boolean('is_verified')->default(false);
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('profiles');
+ }
+};
diff --git a/Modules/Profile/module.json b/Modules/Profile/module.json
new file mode 100644
index 000000000..7fe813fb2
--- /dev/null
+++ b/Modules/Profile/module.json
@@ -0,0 +1,12 @@
+{
+ "name": "Profile",
+ "alias": "profile",
+ "description": "User profile management",
+ "keywords": [],
+ "priority": 0,
+ "providers": [
+ "Modules\\Profile\\Providers\\ProfileServiceProvider"
+ ],
+ "aliases": {},
+ "files": []
+}
diff --git a/Modules/Profile/resources/views/edit.blade.php b/Modules/Profile/resources/views/edit.blade.php
new file mode 100644
index 000000000..d9824d9e9
--- /dev/null
+++ b/Modules/Profile/resources/views/edit.blade.php
@@ -0,0 +1,34 @@
+@extends('layouts.app')
+@section('content')
+
+
+
Edit Profile
+
+ @csrf @method('PUT')
+
+ Bio
+ {{ old('bio', $profile->bio) }}
+
+
+ Phone
+
+
+
+
+ Website
+
+
+ Save Profile
+
+
+
+@endsection
diff --git a/Modules/Profile/resources/views/show.blade.php b/Modules/Profile/resources/views/show.blade.php
new file mode 100644
index 000000000..7d4821266
--- /dev/null
+++ b/Modules/Profile/resources/views/show.blade.php
@@ -0,0 +1,25 @@
+@extends('layouts.app')
+@section('content')
+
+
+
+
+ {{ substr(auth()->user()->name, 0, 1) }}
+
+
+
{{ auth()->user()->name }}
+
{{ auth()->user()->email }}
+
+
+ @if($profile->bio)
{{ $profile->bio }}
@endif
+
+ @if($profile->phone)
📞 {{ $profile->phone }}
@endif
+ @if($profile->city)
📍 {{ $profile->city }}@if($profile->country), {{ $profile->country }}@endif
@endif
+ @if($profile->website)
🌐 {{ $profile->website }}
@endif
+
+
+
+
+@endsection
diff --git a/Modules/Profile/routes/web.php b/Modules/Profile/routes/web.php
new file mode 100644
index 000000000..3b202e1e3
--- /dev/null
+++ b/Modules/Profile/routes/web.php
@@ -0,0 +1,9 @@
+prefix('profile')->name('profile.')->group(function () {
+ Route::get('/', [ProfileController::class, 'show'])->name('show');
+ Route::get('/edit', [ProfileController::class, 'edit'])->name('edit');
+ Route::put('/extended', [ProfileController::class, 'update'])->name('update');
+});
diff --git a/README.md b/README.md
index bc626af76..0165a773c 100644
--- a/README.md
+++ b/README.md
@@ -1,84 +1,59 @@
-
-
-
-
- OpenClassify is modular and most advanced open source classified platform build with Laravel included Pyrocms.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-### Install with Docker
-
-We suggest to use Docker. Nginx, Mysql and PHP 8.2 pre-installed. MacOS, Windows and Ubuntu is supported.
-Install Docker and run it. Install by watching 2 min video on [Youtube](https://www.youtube.com/watch?v=vVpVmsxq-Z0&t=27s&pp=ygUTb3BlbmNsYXNzaWZ5IGRvY2tlcg%3D%3D)
-
-
-1- Clone project
-```bash
-git clone https://github.com/openclassify/openclassify.git
-```
-
-2- Run install.sh
-```bash
-bash install.sh
-```
-3- That's it!
-
-Open project at [localhost](http://localhost)
-
-
-### Documentation
-
-You can visit this link for detailed documentation.
-https://visiosoft.gitbook.io/v2/
-
-### CLI Commands
-
-If you couldn't find a solution for any problem, please review our CLI Command document.
-[View CLI Command Document](https://github.com/openclassify/openclassify/blob/master/docs/cli-commands.md)
-
-### Other Installation Methods
-
-Check [here](https://github.com/openclassify/openclassify/blob/master/docs/other-install-methods.md) for more.
-
-
-### Translation
-
-Openclassify support 22+ languages. If you'd like to contribute translations, please check out our [Crowdin](https://crowdin.com/project/openclassify) project.
-
-### Server Requirements
-
-- Only PHP > 8.2 Officially Supported!
-- XML PHP Extension
-- PDO PHP Extension
-- cURL PHP Extension
-- JSON PHP Extension
-- Ctype PHP Extension
-- BCMath PHP Extension
-- SQLite PHP Extension
-- OpenSSL PHP Extension
-- Mbstring PHP Extension
-- Fileinfo PHP Extension
-- Tokenizer PHP Extension
-- GD Library (>=2.0) **OR** Imagick PHP extension (>=6.5.7)
-
-
-### Code Contributors
-
-This project exists thanks to all the people who [contribute](https://github.com/openclassify/openclassify/graphs/contributors) and more.
+
-
-
-
+
+
+
+
+
+## About Laravel
+
+Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
+
+- [Simple, fast routing engine](https://laravel.com/docs/routing).
+- [Powerful dependency injection container](https://laravel.com/docs/container).
+- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
+- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
+- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
+- [Robust background job processing](https://laravel.com/docs/queues).
+- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
+
+Laravel is accessible, powerful, and provides tools required for large, robust applications.
+
+## Learning Laravel
+
+Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. You can also check out [Laravel Learn](https://laravel.com/learn), where you will be guided through building a modern Laravel application.
+
+If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
+
+## Laravel Sponsors
+
+We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
+
+### Premium Partners
+
+- **[Vehikl](https://vehikl.com)**
+- **[Tighten Co.](https://tighten.co)**
+- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
+- **[64 Robots](https://64robots.com)**
+- **[Curotec](https://www.curotec.com/services/technologies/laravel)**
+- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
+- **[Redberry](https://redberry.international/laravel-development)**
+- **[Active Logic](https://activelogic.com)**
+
+## Contributing
+
+Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
+
+## Code of Conduct
+
+In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
+
+## Security Vulnerabilities
+
+If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
+
+## License
+
+The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
diff --git a/app/Exceptions/ExceptionHandler.php b/app/Exceptions/ExceptionHandler.php
deleted file mode 100644
index 9e33ef385..000000000
--- a/app/Exceptions/ExceptionHandler.php
+++ /dev/null
@@ -1,122 +0,0 @@
-original = $e;
-
- return parent::prepareException($e); // TODO: Change the autogenerated stub
- }
-
- public function render($request, Throwable $e)
- {
- if ($e instanceof AuthenticationException) {
- return $this->unauthenticated($request, $e);
- }
-
- if ($e instanceof NotFoundHttpException && $redirect = config('streams::404.redirect')) {
- return redirect($redirect);
- }
-
- return parent::render($request, $e);
- }
-
- protected function renderHttpException(HttpExceptionInterface $e)
- {
- if (env('APP_DEBUG') === true) {
- return $this->convertExceptionToResponse($e);
- }
-
- $summary = $e->getMessage();
- $headers = $e->getHeaders();
- $code = $e->getStatusCode();
- $name = trans("streams::error.{$code}.name");
- $message = trans("streams::error.{$code}.message");
- $id = $this->container->make(ExceptionIdentifier::class)->identify($this->original);
-
- if (view()->exists($view = "streams::errors/{$code}")) {
- return response()->view($view, compact('id', 'code', 'name', 'message', 'summary'), $code, $headers);
- }
-
- return response()->view(
- 'streams::errors/error',
- compact('id', 'code', 'name', 'message', 'summary'),
- $code,
- $headers
- );
- }
-
- public function report(Throwable $e)
- {
- if (app()->bound('sentry') &&
- $this->shouldReport($e) &&
- env('SENTRY_LARAVEL_DSN') &&
- !empty(env('SENTRY_LARAVEL_DSN'))) {
- app('sentry')->captureException($e);
- }
-
- if ($e instanceof Swift_TransportException) {
- echo json_encode([
- 'success' => false,
- 'msg' => trans('visiosoft.theme.base::message.error_mail'),
- ]);
-
- die();
- }
-
- parent::report($e);
- }
-
- protected function context()
- {
- try {
- return array_filter(
- [
- 'user' => Auth::id(),
- 'email' => Auth::user() ? Auth::user()->email : null,
- 'url' => request() ? request()->fullUrl() : null,
- 'identifier' => $this->container->make(ExceptionIdentifier::class)->identify($this->original),
- ]
- );
- } catch (Throwable $e) {
- return [];
- }
- }
-
- protected function unauthenticated($request, AuthenticationException $exception)
- {
- if ($request->expectsJson()) {
- return response()->json(['error' => 'Unauthenticated.'], 401);
- }
-
- if ($request->segment(1) === 'admin') {
- return redirect()->guest('admin/login');
- } else {
- return redirect()->guest('login');
- }
- }
-}
diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php
new file mode 100644
index 000000000..613bcd9d9
--- /dev/null
+++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php
@@ -0,0 +1,47 @@
+authenticate();
+
+ $request->session()->regenerate();
+
+ return redirect()->intended(route('dashboard', absolute: false));
+ }
+
+ /**
+ * Destroy an authenticated session.
+ */
+ public function destroy(Request $request): RedirectResponse
+ {
+ Auth::guard('web')->logout();
+
+ $request->session()->invalidate();
+
+ $request->session()->regenerateToken();
+
+ return redirect('/');
+ }
+}
diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php
new file mode 100644
index 000000000..712394a5a
--- /dev/null
+++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php
@@ -0,0 +1,40 @@
+validate([
+ 'email' => $request->user()->email,
+ 'password' => $request->password,
+ ])) {
+ throw ValidationException::withMessages([
+ 'password' => __('auth.password'),
+ ]);
+ }
+
+ $request->session()->put('auth.password_confirmed_at', time());
+
+ return redirect()->intended(route('dashboard', absolute: false));
+ }
+}
diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php
new file mode 100644
index 000000000..f64fa9ba7
--- /dev/null
+++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php
@@ -0,0 +1,24 @@
+user()->hasVerifiedEmail()) {
+ return redirect()->intended(route('dashboard', absolute: false));
+ }
+
+ $request->user()->sendEmailVerificationNotification();
+
+ return back()->with('status', 'verification-link-sent');
+ }
+}
diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php
new file mode 100644
index 000000000..ee3cb6fac
--- /dev/null
+++ b/app/Http/Controllers/Auth/EmailVerificationPromptController.php
@@ -0,0 +1,21 @@
+user()->hasVerifiedEmail()
+ ? redirect()->intended(route('dashboard', absolute: false))
+ : view('auth.verify-email');
+ }
+}
diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php
new file mode 100644
index 000000000..e8368bd22
--- /dev/null
+++ b/app/Http/Controllers/Auth/NewPasswordController.php
@@ -0,0 +1,62 @@
+ $request]);
+ }
+
+ /**
+ * Handle an incoming new password request.
+ *
+ * @throws \Illuminate\Validation\ValidationException
+ */
+ public function store(Request $request): RedirectResponse
+ {
+ $request->validate([
+ 'token' => ['required'],
+ 'email' => ['required', 'email'],
+ 'password' => ['required', 'confirmed', Rules\Password::defaults()],
+ ]);
+
+ // Here we will attempt to reset the user's password. If it is successful we
+ // will update the password on an actual user model and persist it to the
+ // database. Otherwise we will parse the error and return the response.
+ $status = Password::reset(
+ $request->only('email', 'password', 'password_confirmation', 'token'),
+ function (User $user) use ($request) {
+ $user->forceFill([
+ 'password' => Hash::make($request->password),
+ 'remember_token' => Str::random(60),
+ ])->save();
+
+ event(new PasswordReset($user));
+ }
+ );
+
+ // If the password was successfully reset, we will redirect the user back to
+ // the application's home authenticated view. If there is an error we can
+ // redirect them back to where they came from with their error message.
+ return $status == Password::PASSWORD_RESET
+ ? redirect()->route('login')->with('status', __($status))
+ : back()->withInput($request->only('email'))
+ ->withErrors(['email' => __($status)]);
+ }
+}
diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php
new file mode 100644
index 000000000..69164091a
--- /dev/null
+++ b/app/Http/Controllers/Auth/PasswordController.php
@@ -0,0 +1,29 @@
+validateWithBag('updatePassword', [
+ 'current_password' => ['required', 'current_password'],
+ 'password' => ['required', Password::defaults(), 'confirmed'],
+ ]);
+
+ $request->user()->update([
+ 'password' => Hash::make($validated['password']),
+ ]);
+
+ return back()->with('status', 'password-updated');
+ }
+}
diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php
new file mode 100644
index 000000000..bf1ebfa78
--- /dev/null
+++ b/app/Http/Controllers/Auth/PasswordResetLinkController.php
@@ -0,0 +1,44 @@
+validate([
+ 'email' => ['required', 'email'],
+ ]);
+
+ // We will send the password reset link to this user. Once we have attempted
+ // to send the link, we will examine the response then see the message we
+ // need to show to the user. Finally, we'll send out a proper response.
+ $status = Password::sendResetLink(
+ $request->only('email')
+ );
+
+ return $status == Password::RESET_LINK_SENT
+ ? back()->with('status', __($status))
+ : back()->withInput($request->only('email'))
+ ->withErrors(['email' => __($status)]);
+ }
+}
diff --git a/app/Http/Controllers/Auth/ProfileController.php b/app/Http/Controllers/Auth/ProfileController.php
new file mode 100644
index 000000000..6ab3c68eb
--- /dev/null
+++ b/app/Http/Controllers/Auth/ProfileController.php
@@ -0,0 +1,54 @@
+validateWithBag('updateProfile', [
+ 'name' => ['required', 'string', 'max:255'],
+ 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique('users')->ignore($request->user()->id)],
+ ]);
+
+ $request->user()->fill($validated);
+
+ if ($request->user()->isDirty('email')) {
+ $request->user()->email_verified_at = null;
+ }
+
+ $request->user()->save();
+
+ return redirect('/profile')->with('status', 'profile-updated');
+ }
+
+ /**
+ * Delete the user's account.
+ */
+ public function destroy(Request $request): RedirectResponse
+ {
+ $request->validateWithBag('userDeletion', [
+ 'password' => ['required', 'current_password'],
+ ]);
+
+ $user = $request->user();
+
+ Auth::logout();
+
+ $user->delete();
+
+ $request->session()->invalidate();
+ $request->session()->regenerateToken();
+
+ return redirect('/');
+ }
+}
diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php
new file mode 100644
index 000000000..0739e2e87
--- /dev/null
+++ b/app/Http/Controllers/Auth/RegisteredUserController.php
@@ -0,0 +1,50 @@
+validate([
+ 'name' => ['required', 'string', 'max:255'],
+ 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
+ 'password' => ['required', 'confirmed', Rules\Password::defaults()],
+ ]);
+
+ $user = User::create([
+ 'name' => $request->name,
+ 'email' => $request->email,
+ 'password' => Hash::make($request->password),
+ ]);
+
+ event(new Registered($user));
+
+ Auth::login($user);
+
+ return redirect(route('dashboard', absolute: false));
+ }
+}
diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php
new file mode 100644
index 000000000..784765e3a
--- /dev/null
+++ b/app/Http/Controllers/Auth/VerifyEmailController.php
@@ -0,0 +1,27 @@
+user()->hasVerifiedEmail()) {
+ return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
+ }
+
+ if ($request->user()->markEmailAsVerified()) {
+ event(new Verified($request->user()));
+ }
+
+ return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
+ }
+}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
new file mode 100644
index 000000000..8677cd5ca
--- /dev/null
+++ b/app/Http/Controllers/Controller.php
@@ -0,0 +1,8 @@
+where('is_active', true)->get();
+ $featuredListings = Listing::where('status', 'active')->where('is_featured', true)->latest()->take(4)->get();
+ $recentListings = Listing::where('status', 'active')->latest()->take(8)->get();
+ $listingCount = Listing::where('status', 'active')->count();
+ $categoryCount = Category::where('is_active', true)->count();
+ $userCount = User::count();
+ return view('home', compact('categories', 'featuredListings', 'recentListings', 'listingCount', 'categoryCount', 'userCount'));
+ }
+}
diff --git a/app/Http/Controllers/LanguageController.php b/app/Http/Controllers/LanguageController.php
new file mode 100644
index 000000000..87efacdf1
--- /dev/null
+++ b/app/Http/Controllers/LanguageController.php
@@ -0,0 +1,16 @@
+ $locale]);
+ }
+ return redirect()->back()->withInput();
+ }
+}
diff --git a/app/Http/Controllers/Partner/DashboardController.php b/app/Http/Controllers/Partner/DashboardController.php
new file mode 100644
index 000000000..dc7d80e49
--- /dev/null
+++ b/app/Http/Controllers/Partner/DashboardController.php
@@ -0,0 +1,18 @@
+id())->latest()->paginate(10);
+ $stats = [
+ 'total' => Listing::where('user_id', auth()->id())->count(),
+ 'active' => Listing::where('user_id', auth()->id())->where('status', 'active')->count(),
+ ];
+ return view('partner.dashboard', compact('myListings', 'stats'));
+ }
+}
diff --git a/app/Http/Controllers/Partner/ListingController.php b/app/Http/Controllers/Partner/ListingController.php
new file mode 100644
index 000000000..091df87a6
--- /dev/null
+++ b/app/Http/Controllers/Partner/ListingController.php
@@ -0,0 +1,14 @@
+id())->latest()->paginate(15);
+ return view('partner.listings.index', compact('listings'));
+ }
+}
diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php
new file mode 100644
index 000000000..a48eb8d82
--- /dev/null
+++ b/app/Http/Controllers/ProfileController.php
@@ -0,0 +1,60 @@
+ $request->user(),
+ ]);
+ }
+
+ /**
+ * Update the user's profile information.
+ */
+ public function update(ProfileUpdateRequest $request): RedirectResponse
+ {
+ $request->user()->fill($request->validated());
+
+ if ($request->user()->isDirty('email')) {
+ $request->user()->email_verified_at = null;
+ }
+
+ $request->user()->save();
+
+ return Redirect::route('profile.edit')->with('status', 'profile-updated');
+ }
+
+ /**
+ * Delete the user's account.
+ */
+ public function destroy(Request $request): RedirectResponse
+ {
+ $request->validateWithBag('userDeletion', [
+ 'password' => ['required', 'current_password'],
+ ]);
+
+ $user = $request->user();
+
+ Auth::logout();
+
+ $user->delete();
+
+ $request->session()->invalidate();
+ $request->session()->regenerateToken();
+
+ return Redirect::to('/');
+ }
+}
diff --git a/app/Http/Middleware/SetLocale.php b/app/Http/Middleware/SetLocale.php
new file mode 100644
index 000000000..abc087df0
--- /dev/null
+++ b/app/Http/Middleware/SetLocale.php
@@ -0,0 +1,19 @@
+setLocale($locale);
+ return $next($request);
+ }
+}
diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php
new file mode 100644
index 000000000..257464245
--- /dev/null
+++ b/app/Http/Requests/Auth/LoginRequest.php
@@ -0,0 +1,85 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'email' => ['required', 'string', 'email'],
+ 'password' => ['required', 'string'],
+ ];
+ }
+
+ /**
+ * Attempt to authenticate the request's credentials.
+ *
+ * @throws \Illuminate\Validation\ValidationException
+ */
+ public function authenticate(): void
+ {
+ $this->ensureIsNotRateLimited();
+
+ if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
+ RateLimiter::hit($this->throttleKey());
+
+ throw ValidationException::withMessages([
+ 'email' => trans('auth.failed'),
+ ]);
+ }
+
+ RateLimiter::clear($this->throttleKey());
+ }
+
+ /**
+ * Ensure the login request is not rate limited.
+ *
+ * @throws \Illuminate\Validation\ValidationException
+ */
+ public function ensureIsNotRateLimited(): void
+ {
+ if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
+ return;
+ }
+
+ event(new Lockout($this));
+
+ $seconds = RateLimiter::availableIn($this->throttleKey());
+
+ throw ValidationException::withMessages([
+ 'email' => trans('auth.throttle', [
+ 'seconds' => $seconds,
+ 'minutes' => ceil($seconds / 60),
+ ]),
+ ]);
+ }
+
+ /**
+ * Get the rate limiting throttle key for the request.
+ */
+ public function throttleKey(): string
+ {
+ return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip());
+ }
+}
diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php
new file mode 100644
index 000000000..3622a8f37
--- /dev/null
+++ b/app/Http/Requests/ProfileUpdateRequest.php
@@ -0,0 +1,30 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'name' => ['required', 'string', 'max:255'],
+ 'email' => [
+ 'required',
+ 'string',
+ 'lowercase',
+ 'email',
+ 'max:255',
+ Rule::unique(User::class)->ignore($this->user()->id),
+ ],
+ ];
+ }
+}
diff --git a/app/Lang/Loader.php b/app/Lang/Loader.php
deleted file mode 100644
index 84407a3a5..000000000
--- a/app/Lang/Loader.php
+++ /dev/null
@@ -1,278 +0,0 @@
-
- * @author Ryan Thompson
- */
-class Loader extends FileLoader
-{
-
- /**
- * The runtime cache.
- *
- * @var array
- */
- protected static $disabled = [];
-
- /**
- * The streams path.
- *
- * @var string
- */
- protected $streams;
-
- /**
- * The addon collection instance.
- *
- * @var AddonCollection
- */
- protected $addons;
-
- /**
- * The application instance.
- *
- * @var Application
- */
- protected $application;
-
- /**
- * Create a new Loader instance.
- *
- * @param Filesystem $files
- * @param string $path
- */
- public function __construct(Filesystem $files, $path)
- {
- $this->streams = base_path('vendor/visiosoft/streams-platform/resources/lang');
-
- $this->application = app(Application::class);
- $this->addons = app(AddonCollection::class);
-
- parent::__construct($files, $path);
- }
-
- /**
- * Load a locale from a given path.
- *
- * Keep streams overrides in place
- * that are NOT namespaced cause
- * we're overriding Laravel's
- * base language files too.
- *
- * @param string $path
- * @param string $locale
- * @param string $group
- * @return array
- */
- protected function loadPath($path, $locale, $group)
- {
- $lines = parent::loadPath($path, $locale, $group);
-
- if ($path == $this->streams && $lines) {
- $lines = $this->loadAddonOverrides($lines, $locale, $group);
- $lines = $this->loadSystemOverrides($lines, $locale, $group);
- $lines = $this->loadApplicationOverrides($lines, $locale, $group);
- }
-
- return $lines;
- }
-
- /**
- * Load namespaced overrides from
- * system AND application paths.
- *
- * @param array $lines
- * @param string $locale
- * @param string $group
- * @param string $namespace
- * @return array
- */
- protected function loadNamespaceOverrides(array $lines, $locale, $group, $namespace)
- {
- /**
- * @deprecated since 1.6; Use manual loading or publishing.
- */
- if (env('AUTOMATIC_ADDON_OVERRIDES', true)) {
- $lines = $this->loadAddonOverrides($lines, $locale, $group, $namespace);
- }
-
- $lines = $this->loadSystemOverrides($lines, $locale, $group, $namespace);
- $lines = $this->loadApplicationOverrides($lines, $locale, $group, $namespace);
-
- return parent::loadNamespaceOverrides($lines, $locale, $group, $namespace);
- }
-
- /**
- * Load system overrides.
- *
- * @param array $lines
- * @param $locale
- * @param $group
- * @param $namespace
- * @return array
- */
- protected function loadSystemOverrides(array $lines, $locale, $group, $namespace = null)
- {
- if (!$namespace || $namespace == 'streams') {
-
- $file = base_path("resources/streams/lang/{$locale}/{$group}.php");
-
- if (is_dir(base_path("resources/streams/lang")) && $this->files->exists($file)) {
- $lines = array_replace_recursive($lines, $this->files->getRequire($file));
- }
- }
-
- if (str_is('*.*.*', $namespace)) {
-
- list($vendor, $type, $slug) = explode('.', $namespace);
-
- $file = base_path("resources/addons/{$vendor}/{$slug}-{$type}/lang/{$locale}/{$group}.php");
-
- if (is_dir(base_path("resources/addons/{$vendor}/{$slug}-{$type}/lang")) && $this->files->exists($file)) {
- $lines = array_replace_recursive($lines, $this->files->getRequire($file));
- }
- }
-
- return $lines;
- }
-
- /**
- * Load system overrides.
- *
- * @param array $lines
- * @param $locale
- * @param $group
- * @param $namespace
- * @return array
- */
- protected function loadApplicationOverrides(array $lines, $locale, $group, $namespace = null)
- {
- if (!$namespace || $namespace == 'streams') {
-
- $file = $this->application->getResourcesPath("streams/lang/{$locale}/{$group}.php");
-
- if (is_dir($this->application->getResourcesPath("streams/lang")) && $this->files->exists($file)) {
- $lines = array_replace_recursive($lines, $this->files->getRequire($file));
- }
- }
-
- if (str_is('*.*.*', $namespace)) {
-
- list($vendor, $type, $slug) = explode('.', $namespace);
-
- $file = $this->application->getResourcesPath(
- "addons/{$vendor}/{$slug}-{$type}/lang/{$locale}/{$group}.php"
- );
-
- if (
- is_dir($this->application->getResourcesPath("addons/{$vendor}/{$slug}-{$type}/lang"))
- && $this->files->exists($file)
- ) {
- $lines = array_replace_recursive($lines, $this->files->getRequire($file));
- }
- }
-
- //Override System
- $override_list = config('streams::translate.override');
-
- foreach ($override_list as $override) {
- $override = explode(':', $override);
- if (count($override) > 1) {
- $lines = $this->findArrayValue($override[0], $override[1], $lines);
- }
- }
-
- if (config()->has('override_text')) {
- foreach (config()->get('override_text') as $override) {
- $override = explode(':', $override);
- if (count($override) > 1) {
- $lines = $this->findArrayValue($override[0], $override[1], $lines);
- }
- }
- }
-
- return $lines;
- }
-
- function replaceNewValue($find_value, $new_value, $arr)
- {
- if (is_array($arr)) {
- foreach ($arr as $key => $item) {
- $arr[$key] = $this->replaceNewValue($find_value, $new_value, $item);
- }
- return $arr;
- }
- if (strtolower($arr) == strtolower($find_value)) {
- return $new_value;
- }
- return $arr;
- }
-
- function findArrayValue($find_value, $new_value, $arr)
- {
- foreach ($arr as $key => $item) {
- $arr[$key] = $this->replaceNewValue($find_value, $new_value, $item);
- }
- return $arr;
- }
-
-
- /**
- * @param array $lines
- * @param $locale
- * @param $group
- * @param null $namespace
- * @return array
- */
- protected function loadAddonOverrides(array $lines, $locale, $group, $namespace = null)
- {
- /** @var Addon $addon */
- foreach ($this->addons->enabled() as $addon) {
-
- $disabled = array_get(self::$disabled, $key = $addon->getNamespace('streams'), false);
-
- if (!$disabled && !$this->files->isDirectory($addon->getPath('resources/streams'))) {
- self::$disabled[$key] = $disabled = true;
- }
-
- if (!$disabled && (!$namespace || $namespace == 'streams')) {
-
- $file = $addon->getPath("resources/streams/lang/{$locale}/{$group}.php");
-
- if ($this->files->exists($file)) {
- $lines = array_replace_recursive($lines, $this->files->getRequire($file));
- }
- }
-
- $disabled = array_get(self::$disabled, $key = $addon->getNamespace('addons'), false);
-
- if (!$disabled && !$this->files->isDirectory($addon->getPath('resources/addons'))) {
- self::$disabled[$key] = $disabled = true;
- }
-
- if (!$disabled && str_is('*.*.*', $namespace)) {
-
- list($vendor, $type, $slug) = explode('.', $namespace);
-
- $file = $addon->getPath(
- "resources/addons/{$vendor}/{$slug}-{$type}/lang/{$locale}/{$group}.php"
- );
-
- if ($this->files->exists($file)) {
- $lines = array_replace_recursive($lines, $this->files->getRequire($file));
- }
- }
- }
-
- return $lines;
- }
-}
diff --git a/app/Listeners/EnableMaintenanceMode.php b/app/Listeners/EnableMaintenanceMode.php
deleted file mode 100755
index 0baa89f1b..000000000
--- a/app/Listeners/EnableMaintenanceMode.php
+++ /dev/null
@@ -1,23 +0,0 @@
-getBuilder();
- if (get_class($builder->getRepository()) === SettingFormRepository::class) {
- if ($builder->getFormValues()->has('maintenance')) {
- if ($builder->getFormValues()->get('maintenance')) {
- Artisan::call('down');
- } elseif (config('streams::maintenance.enabled')) {
- Artisan::call('up');
- }
- }
- }
- }
-}
diff --git a/app/Listeners/Translations.php b/app/Listeners/Translations.php
deleted file mode 100755
index a891f3401..000000000
--- a/app/Listeners/Translations.php
+++ /dev/null
@@ -1,45 +0,0 @@
-singleton(
- 'translation.loader',
- function ($application) {
- return new Loader($application['files'], $application['path.lang']);
- }
- );
-
- app()->singleton(
- 'translator',
- function ($application) {
- $loader = $application->make('translation.loader');
-
- // When registering the translator component, we'll need to set the default
- // locale as well as the fallback locale. So, we'll grab the application
- // configuration so we can easily get both of these values from there.
- $locale = $application['config']['app.locale'];
-
- $trans = new Translator($loader, $locale);
-
- $trans->setFallback($application['config']['app.fallback_locale']);
-
- return $trans;
- }
- );
-
- if (defined('LOCALE')) {
- app()->setLocale(LOCALE);
- config()->set('app.locale', LOCALE);
- }
- // Set our locale namespace.
- app()->make('translator')->addNamespace('streams', realpath(__DIR__ . '/../../vendor/visiosoft/streams-platform/resources/lang'));
-
- }
-}
diff --git a/app/Models/User.php b/app/Models/User.php
new file mode 100644
index 000000000..749c7b77d
--- /dev/null
+++ b/app/Models/User.php
@@ -0,0 +1,48 @@
+ */
+ use HasFactory, Notifiable;
+
+ /**
+ * The attributes that are mass assignable.
+ *
+ * @var list
+ */
+ protected $fillable = [
+ 'name',
+ 'email',
+ 'password',
+ ];
+
+ /**
+ * The attributes that should be hidden for serialization.
+ *
+ * @var list
+ */
+ protected $hidden = [
+ 'password',
+ 'remember_token',
+ ];
+
+ /**
+ * Get the attributes that should be cast.
+ *
+ * @return array
+ */
+ protected function casts(): array
+ {
+ return [
+ 'email_verified_at' => 'datetime',
+ 'password' => 'hashed',
+ ];
+ }
+}
diff --git a/app/Notification/ActivateYourAccount.php b/app/Notification/ActivateYourAccount.php
deleted file mode 100644
index 5ca37bf5c..000000000
--- a/app/Notification/ActivateYourAccount.php
+++ /dev/null
@@ -1,64 +0,0 @@
-
- * @author Ryan Thompson
- */
-class ActivateYourAccount extends Notification
-{
- /**
- * Redirect here after activating.
- *
- * @var string
- */
- public $redirect;
-
- /**
- * Create a new UserHasRegistered instance.
- *
- * @param $redirect
- */
- public function __construct($redirect = '/')
- {
- $this->redirect = $redirect;
- }
-
- /**
- * Get the notification's delivery channels.
- *
- * @param UserInterface $notifiable
- * @return array
- */
- public function via(UserInterface $notifiable)
- {
- return ['mail'];
- }
-
- /**
- * Return the mail message.
- *
- * @param UserInterface $notifiable
- * @return MailMessage
- */
- public function toMail(UserInterface $notifiable)
- {
- $data = $notifiable->attributesToArray();
-
- return (new MailMessage())
- ->view('anomaly.module.users::notifications.activate_your_account',$data)
- ->subject(trans('anomaly.module.users::notification.activate_your_account.subject', $data))
- ->greeting(trans('anomaly.module.users::notification.activate_your_account.greeting', $data))
- ->line(trans('anomaly.module.users::notification.activate_your_account.instructions', $data))
- ->action(
- trans('anomaly.module.users::notification.activate_your_account.button', $data),
- $notifiable->route('activate', ['redirect' => $this->redirect])
- );
- }
-}
diff --git a/app/Notification/PasswordInvalidated.php b/app/Notification/PasswordInvalidated.php
deleted file mode 100644
index 40eaeaec0..000000000
--- a/app/Notification/PasswordInvalidated.php
+++ /dev/null
@@ -1,72 +0,0 @@
-
- * @author Ryan Thompson
- */
-class PasswordInvalidated extends Notification implements ShouldQueue
-{
-
- use Queueable;
-
- /**
- * Redirect here after activating.
- *
- * @var string
- */
- public $redirect;
-
- /**
- * Create a new UserHasRegistered instance.
- *
- * @param $redirect
- */
- public function __construct($redirect = '/')
- {
- $this->redirect = $redirect;
- }
-
- /**
- * Get the notification's delivery channels.
- *
- * @param UserInterface $notifiable
- * @return array
- */
- public function via(UserInterface $notifiable)
- {
- return ['mail'];
- }
-
- /**
- * Return the mail message.
- *
- * @param UserInterface $notifiable
- * @return MailMessage
- */
- public function toMail(UserInterface $notifiable)
- {
- $data = $notifiable->attributesToArray();
-
- return (new MailMessage())
- ->error()
- ->view('anomaly.module.users::notifications.password_invalidated')
- ->subject(trans('anomaly.module.users::notification.password_invalidated.subject', $data))
- ->greeting(trans('anomaly.module.users::notification.password_invalidated.greeting', $data))
- ->line(trans('anomaly.module.users::notification.password_invalidated.notice', $data))
- ->line(trans('anomaly.module.users::notification.password_invalidated.warning', $data))
- ->line(trans('anomaly.module.users::notification.password_invalidated.instructions', $data))
- ->action(
- trans('anomaly.module.users::notification.password_invalidated.button', $data),
- $notifiable->route('reset', ['redirect' => $this->redirect])
- );
- }
-}
diff --git a/app/Notification/ResetYourPassword.php b/app/Notification/ResetYourPassword.php
deleted file mode 100644
index b979085b0..000000000
--- a/app/Notification/ResetYourPassword.php
+++ /dev/null
@@ -1,69 +0,0 @@
-
- * @author Ryan Thompson
- */
-class ResetYourPassword extends Notification
-{
-
- /**
- * Redirect here after activating.
- *
- * @var string
- */
- public $redirect;
-
- /**
- * Create a new UserHasRegistered instance.
- *
- * @param $redirect
- */
- public function __construct($redirect = '/')
- {
- $this->redirect = $redirect;
- }
-
- /**
- * Get the notification's delivery channels.
- *
- * @param UserInterface $notifiable
- * @return array
- */
- public function via(UserInterface $notifiable)
- {
- return ['mail'];
- }
-
- /**
- * Return the mail message.
- *
- * @param UserInterface $notifiable
- * @return MailMessage
- */
- public function toMail(UserInterface $notifiable)
- {
- $data = $notifiable->attributesToArray();
-
- return (new MailMessage())
- ->error()
- ->view('anomaly.module.users::notifications.reset_your_password')
- ->subject(trans('anomaly.module.users::notification.reset_your_password.subject', $data))
- ->greeting(trans('anomaly.module.users::notification.reset_your_password.greeting', $data))
- ->line(trans('anomaly.module.users::notification.reset_your_password.notice', $data))
- ->line(trans('anomaly.module.users::notification.reset_your_password.warning', $data))
- ->line(trans('anomaly.module.users::notification.reset_your_password.instructions', $data))
- ->action(
- trans('anomaly.module.users::notification.reset_your_password.button', $data),
- $notifiable->route('reset', ['redirect' => $this->redirect])
- );
- }
-}
diff --git a/app/Notification/UserHasBeenActivated.php b/app/Notification/UserHasBeenActivated.php
deleted file mode 100644
index 2db7a87b9..000000000
--- a/app/Notification/UserHasBeenActivated.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- * @author Ryan Thompson
- */
-class UserHasBeenActivated extends Notification implements ShouldQueue
-{
-
- use Queueable;
-
- /**
- * Get the notification's delivery channels.
- *
- * @param UserInterface $notifiable
- * @return array
- */
- public function via(UserInterface $notifiable)
- {
- return ['mail'];
- }
-
- /**
- * Return the mail message.
- *
- * @param UserInterface $notifiable
- * @return MailMessage
- */
- public function toMail(UserInterface $notifiable)
- {
- $data = $notifiable->attributesToArray();
-
- return (new MailMessage())
- ->view('anomaly.module.users::notifications.user_has_been_activated')
- ->subject(trans('anomaly.module.users::notification.user_has_been_activated.subject', $data))
- ->greeting(trans('anomaly.module.users::notification.user_has_been_activated.greeting', $data))
- ->line(trans('anomaly.module.users::notification.user_has_been_activated.instructions', $data))
- ->action(
- trans('anomaly.module.users::notification.user_has_been_activated.button', $data),
- route('anomaly.module.users::login')
- );
- }
-}
diff --git a/app/Notification/UserHasRegistered.php b/app/Notification/UserHasRegistered.php
deleted file mode 100644
index a070044d2..000000000
--- a/app/Notification/UserHasRegistered.php
+++ /dev/null
@@ -1,110 +0,0 @@
-
- * @author Ryan Thompson
- */
-class UserHasRegistered extends Notification implements ShouldQueue
-{
-
- use Queueable;
-
- /**
- * The user who registered.
- *
- * @var UserInterface
- */
- public $user;
-
- /**
- * Create a new UserHasRegistered instance.
- *
- * @param UserInterface $user
- */
- public function __construct(UserInterface $user)
- {
- $this->user = $user;
- }
-
- /**
- * Get the notification's delivery channels.
- *
- * @return array
- */
- public function via()
- {
- return ['mail', 'slack'];
- }
-
- /**
- * Return the mail message.
- *
- * @param AnonymousNotifiable $notifiable
- * @return MailMessage
- */
- public function toMail(AnonymousNotifiable $notifiable)
- {
- $data = $this->user->attributesToArray();
-
- return (new MailMessage())
- ->view('anomaly.module.users::notifications.user_has_registered')
- ->subject(trans('anomaly.module.users::notification.user_has_registered.subject', $data))
- ->line(trans('anomaly.module.users::notification.user_has_registered.instructions', $data))
- ->action(
- trans('anomaly.module.users::notification.user_has_registered.button', $data),
- $this->user->route('view')
- );
- }
-
- /**
- * Return the slack message.
- *
- * @param UserInterface $notifiable
- *
- * @return SlackMessage
- */
- public function toSlack(UserInterface $notifiable)
- {
- return (new SlackMessage())
- ->success()
- ->content('Hmm.. What\'s Ryan up to?')
- ->attachment(
- function ($attachment) {
- $attachment
- ->title('Testing out teh goodies!', 'http://pyrocms.com/')
- ->fields(
- [
- 'Username' => $this->user->getUsername(),
- 'Eamil' => $this->user->getEmail(),
- ]
- );
- }
- );
- }
-
- /**
- * Return the array storage data.
- *
- * @param Notifiable $notifiable
- *
- * @return array
- */
- public function toDatabase(UserInterface $notifiable)
- {
- return [
- 'user' => $this->user,
- ];
- }
-}
diff --git a/app/Notification/UserPendingActivation.php b/app/Notification/UserPendingActivation.php
deleted file mode 100644
index 324e812b1..000000000
--- a/app/Notification/UserPendingActivation.php
+++ /dev/null
@@ -1,68 +0,0 @@
-
- * @author Ryan Thompson
- */
-class UserPendingActivation extends Notification implements ShouldQueue
-{
-
- use Queueable;
-
- /**
- * The user pending activation.
- *
- * @var UserInterface
- */
- public $user;
-
- /**
- * Create a new UserPendingActivation instance.
- *
- * @param UserInterface $user
- */
- public function __construct(UserInterface $user)
- {
- $this->user = $user;
- }
-
- /**
- * Get the notification's delivery channels.
- *
- * @return array
- */
- public function via()
- {
- return ['mail'];
- }
-
- /**
- * Return the mail message.
- *
- * @param AnonymousNotifiable $notifiable
- * @return MailMessage
- */
- public function toMail(AnonymousNotifiable $notifiable)
- {
- $data = $this->user->attributesToArray();
-
- return (new MailMessage())
- ->view('anomaly.module.users::notifications.user_pending_activation')
- ->subject(trans('anomaly.module.users::notification.user_pending_activation.subject', $data))
- ->line(trans('anomaly.module.users::notification.user_pending_activation.instructions', $data))
- ->action(
- trans('anomaly.module.users::notification.user_pending_activation.button', $data),
- url('admin/users?view=pending')
- );
- }
-}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 6cb6cfd7a..452e6b65b 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,46 +2,22 @@
namespace App\Providers;
-use Anomaly\Streams\Platform\Ui\ControlPanel\Component\Navigation\NavigationFactory;
-use Anomaly\Streams\Platform\Ui\ControlPanel\ControlPanelBuilder;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
-
/**
- * Bootstrap any application services.
- *
- * @return void
+ * Register any application services.
*/
- public function boot(ControlPanelBuilder $builder, NavigationFactory $factory)
+ public function register(): void
{
- view()->composer('*', function ($view) use ($builder, $factory) {
-
- if (auth()->check() and template()->get('cp')) {
- //Hidden menu items in sidebar on dashboard
- ($navigation = template()->get('cp')->getNavigation()->get('anomaly.module.variables')) ? $navigation->setClass('hidden') : false;
- ($navigation = template()->get('cp')->getNavigation()->get('anomaly.module.system')) ? $navigation->setClass('hidden') : false;
- ($navigation = template()->get('cp')->getNavigation()->get('anomaly.module.redirects')) ? $navigation->setClass('hidden') : false;
- ($navigation = template()->get('cp')->getNavigation()->get('anomaly.module.repeaters')) ? $navigation->setClass('hidden') : false;
- }
- //Auto Language Switcher
- if (config('advs.lang_switcher_for_browser') and is_null(Request()->session()->get('_locale')) and isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
- $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);//Get Browser Language
- $acceptLang = config('streams::locales.enabled'); //Supported Language
- $lang = in_array($lang, $acceptLang) ? $lang : config('streams::locales.default', 'en');
- App()->setLocale($lang);
- Request()->session()->put('_locale', $lang);
- }
- });
+ //
}
/**
- * Register any application services.
- *
- * @return void
+ * Bootstrap any application services.
*/
- public function register()
+ public function boot(): void
{
//
}
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
deleted file mode 100644
index 8d64015cb..000000000
--- a/app/Providers/AuthServiceProvider.php
+++ /dev/null
@@ -1,29 +0,0 @@
- 'App\Policies\ModelPolicy',
- ];
-
- /**
- * Register any authentication / authorization services.
- *
- * @return void
- */
- public function boot()
- {
- $this->registerPolicies();
- //
- }
-}
diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php
deleted file mode 100644
index 395c518bc..000000000
--- a/app/Providers/BroadcastServiceProvider.php
+++ /dev/null
@@ -1,21 +0,0 @@
- [
- 'App\Listeners\EventListener',
- ],
- ];
-
- /**
- * Register any events for your application.
- *
- * @return void
- */
- public function boot()
- {
- parent::boot();
- //
- }
-}
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
deleted file mode 100644
index 046a0f075..000000000
--- a/app/Providers/RouteServiceProvider.php
+++ /dev/null
@@ -1,85 +0,0 @@
-mapWebRoutes();
-
- $this->mapApiRoutes();
- //
- }
-
- /**
- * Define the "web" routes for the application.
- *
- * These routes all receive session state, CSRF protection, etc.
- *
- * @return void
- */
- protected function mapWebRoutes()
- {
- Route::group(
- [
- 'middleware' => 'web',
- 'namespace' => $this->namespace,
- ],
- function ($router) {
- require base_path('routes/web.php');
- }
- );
- }
-
- /**
- * Define the "api" routes for the application.
- *
- * These routes are typically stateless.
- *
- * @return void
- */
- protected function mapApiRoutes()
- {
- Route::group(
- [
- 'middleware' => 'api',
- 'namespace' => $this->namespace,
- 'prefix' => 'api',
- ],
- function ($router) {
- require base_path('routes/api.php');
- }
- );
- }
-}
diff --git a/app/View/Components/AppLayout.php b/app/View/Components/AppLayout.php
new file mode 100644
index 000000000..de0d46f58
--- /dev/null
+++ b/app/View/Components/AppLayout.php
@@ -0,0 +1,17 @@
+make(Illuminate\Contracts\Console\Kernel::class);
-
-$status = $kernel->handle(
- $input = new Symfony\Component\Console\Input\ArgvInput,
- new Symfony\Component\Console\Output\ConsoleOutput
-);
-
-/*
-|--------------------------------------------------------------------------
-| Shutdown The Application
-|--------------------------------------------------------------------------
-|
-| Once Artisan has finished running, we will fire off the shutdown events
-| so that any final work may be done by the application before we shut
-| down the process. This is the last thing to happen to the request.
-|
-*/
-
-$kernel->terminate($input, $status);
+$status = $app->handleCommand(new ArgvInput);
exit($status);
diff --git a/bootstrap/app.php b/bootstrap/app.php
index 7c0085c84..ca1d20c81 100644
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -1,55 +1,20 @@
singleton(
- Illuminate\Contracts\Http\Kernel::class,
- 'Anomaly\Streams\Platform\Http\Kernel'
-);
-
-$app->singleton(
- Illuminate\Contracts\Console\Kernel::class,
- 'Anomaly\Streams\Platform\Console\Kernel'
-);
-
-$app->singleton(
- Illuminate\Contracts\Debug\ExceptionHandler::class,
- Illuminate\Foundation\Exceptions\Handler::class
-);
-
-/*
-|--------------------------------------------------------------------------
-| Return The Application
-|--------------------------------------------------------------------------
-|
-| This script returns the application instance. The instance is given to
-| the calling script so we can separate the building of the instances
-| from the actual running of the application and sending responses.
-|
-*/
-
-return $app;
\ No newline at end of file
+return Application::configure(basePath: dirname(__DIR__))
+ ->withRouting(
+ web: __DIR__.'/../routes/web.php',
+ commands: __DIR__.'/../routes/console.php',
+ health: '/up',
+ )
+ ->withMiddleware(function (Middleware $middleware): void {
+ $middleware->web(append: [
+ \App\Http\Middleware\SetLocale::class,
+ ]);
+ })
+ ->withExceptions(function (Exceptions $exceptions): void {
+ //
+ })->create();
diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php
deleted file mode 100644
index 531823854..000000000
--- a/bootstrap/autoload.php
+++ /dev/null
@@ -1,34 +0,0 @@
-=5.0.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^4.0.0",
+ "nesbot/carbon": "^2.71.0 || ^3.0.0",
+ "phpunit/phpunit": "^10.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "KyleKatarn",
+ "email": "kylekatarnls@gmail.com"
+ }
+ ],
+ "description": "Types to use Carbon in Doctrine",
+ "keywords": [
+ "carbon",
+ "date",
+ "datetime",
+ "doctrine",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
+ "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-02-09T16:56:22+00:00"
+ },
+ {
+ "name": "dflydev/dot-access-data",
+ "version": "v3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+ "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f",
+ "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.42",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
+ "scrutinizer/ocular": "1.6.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dflydev\\DotAccessData\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dragonfly Development Inc.",
+ "email": "info@dflydev.com",
+ "homepage": "http://dflydev.com"
+ },
+ {
+ "name": "Beau Simensen",
+ "email": "beau@dflydev.com",
+ "homepage": "http://beausimensen.com"
+ },
+ {
+ "name": "Carlos Frutos",
+ "email": "carlos@kiwing.it",
+ "homepage": "https://github.com/cfrutos"
+ },
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com"
+ }
+ ],
+ "description": "Given a deep data structure, access data by dot notation.",
+ "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+ "keywords": [
+ "access",
+ "data",
+ "dot",
+ "notation"
+ ],
+ "support": {
+ "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
+ "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3"
+ },
+ "time": "2024-07-08T12:26:09+00:00"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12.0 || ^13.0",
+ "phpstan/phpstan": "^1.12 || ^2.0",
+ "phpstan/phpstan-phpunit": "^1.4 || ^2.0",
+ "phpstan/phpstan-strict-rules": "^1.6 || ^2.0",
+ "phpunit/phpunit": "^8.5 || ^12.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Inflector\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+ "homepage": "https://www.doctrine-project.org/projects/inflector.html",
+ "keywords": [
+ "inflection",
+ "inflector",
+ "lowercase",
+ "manipulation",
+ "php",
+ "plural",
+ "singular",
+ "strings",
+ "uppercase",
+ "words"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/inflector/issues",
+ "source": "https://github.com/doctrine/inflector/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-10T19:31:58+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.5",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^5.21"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-02-05T11:56:58+00:00"
+ },
+ {
+ "name": "dragonmantank/cron-expression",
+ "version": "v3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013",
+ "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.2|^8.3|^8.4|^8.5"
+ },
+ "replace": {
+ "mtdowling/cron-expression": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.32|^2.1.31",
+ "phpunit/phpunit": "^8.5.48|^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/dragonmantank",
+ "type": "github"
+ }
+ ],
+ "time": "2025-10-31T18:51:33+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^2.0 || ^3.0",
+ "php": ">=8.1",
+ "symfony/polyfill-intl-idn": "^1.26"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.2",
+ "vimeo/psalm": "^5.12"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/egulias",
+ "type": "github"
+ }
+ ],
+ "time": "2025-03-06T22:45:56+00:00"
+ },
+ {
+ "name": "fruitcake/php-cors",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fruitcake/php-cors.git",
+ "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379",
+ "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "symfony/http-foundation": "^5.4|^6.4|^7.3|^8"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^2",
+ "phpunit/phpunit": "^9",
+ "squizlabs/php_codesniffer": "^4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Fruitcake\\Cors\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fruitcake",
+ "homepage": "https://fruitcake.nl"
+ },
+ {
+ "name": "Barryvdh",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "Cross-origin resource sharing library for the Symfony HttpFoundation",
+ "homepage": "https://github.com/fruitcake/php-cors",
+ "keywords": [
+ "cors",
+ "laravel",
+ "symfony"
+ ],
+ "support": {
+ "issues": "https://github.com/fruitcake/php-cors/issues",
+ "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://fruitcake.nl",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/barryvdh",
+ "type": "github"
+ }
+ ],
+ "time": "2025-12-03T09:33:47+00:00"
+ },
+ {
+ "name": "graham-campbell/result-type",
+ "version": "v1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b",
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.5"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GrahamCampbell\\ResultType\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "An Implementation Of The Result Type",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Result Type",
+ "Result-Type",
+ "result"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-27T19:43:20+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^2.3",
+ "guzzlehttp/psr7": "^2.8",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-curl": "*",
+ "guzzle/client-integration-tests": "3.0.2",
+ "php-http/message-factory": "^1.1",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-23T22:36:01+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "2.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/2.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-22T14:34:08+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "21dc724a0583619cd1652f673303492272778051"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
+ "reference": "21dc724a0583619cd1652f673303492272778051",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "http-interop/http-factory-tests": "0.9.0",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-23T21:21:41+00:00"
+ },
+ {
+ "name": "guzzlehttp/uri-template",
+ "version": "v1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/uri-template.git",
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "symfony/polyfill-php80": "^1.24"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25",
+ "uri-template/tests": "1.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\UriTemplate\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ }
+ ],
+ "description": "A polyfill class for uri_template of PHP",
+ "keywords": [
+ "guzzlehttp",
+ "uri-template"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/uri-template/issues",
+ "source": "https://github.com/guzzle/uri-template/tree/v1.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-22T14:27:06+00:00"
+ },
+ {
+ "name": "laravel/framework",
+ "version": "v12.53.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/framework.git",
+ "reference": "f57f035c0d34503d9ff30be76159bb35a003cd1f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/f57f035c0d34503d9ff30be76159bb35a003cd1f",
+ "reference": "f57f035c0d34503d9ff30be76159bb35a003cd1f",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.11|^0.12|^0.13|^0.14",
+ "composer-runtime-api": "^2.2",
+ "doctrine/inflector": "^2.0.5",
+ "dragonmantank/cron-expression": "^3.4",
+ "egulias/email-validator": "^3.2.1|^4.0",
+ "ext-ctype": "*",
+ "ext-filter": "*",
+ "ext-hash": "*",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "ext-session": "*",
+ "ext-tokenizer": "*",
+ "fruitcake/php-cors": "^1.3",
+ "guzzlehttp/guzzle": "^7.8.2",
+ "guzzlehttp/uri-template": "^1.0",
+ "laravel/prompts": "^0.3.0",
+ "laravel/serializable-closure": "^1.3|^2.0",
+ "league/commonmark": "^2.7",
+ "league/flysystem": "^3.25.1",
+ "league/flysystem-local": "^3.25.1",
+ "league/uri": "^7.5.1",
+ "monolog/monolog": "^3.0",
+ "nesbot/carbon": "^3.8.4",
+ "nunomaduro/termwind": "^2.0",
+ "php": "^8.2",
+ "psr/container": "^1.1.1|^2.0.1",
+ "psr/log": "^1.0|^2.0|^3.0",
+ "psr/simple-cache": "^1.0|^2.0|^3.0",
+ "ramsey/uuid": "^4.7",
+ "symfony/console": "^7.2.0",
+ "symfony/error-handler": "^7.2.0",
+ "symfony/finder": "^7.2.0",
+ "symfony/http-foundation": "^7.2.0",
+ "symfony/http-kernel": "^7.2.0",
+ "symfony/mailer": "^7.2.0",
+ "symfony/mime": "^7.2.0",
+ "symfony/polyfill-php83": "^1.33",
+ "symfony/polyfill-php84": "^1.33",
+ "symfony/polyfill-php85": "^1.33",
+ "symfony/process": "^7.2.0",
+ "symfony/routing": "^7.2.0",
+ "symfony/uid": "^7.2.0",
+ "symfony/var-dumper": "^7.2.0",
+ "tijsverkoyen/css-to-inline-styles": "^2.2.5",
+ "vlucas/phpdotenv": "^5.6.1",
+ "voku/portable-ascii": "^2.0.2"
+ },
+ "conflict": {
+ "tightenco/collect": "<5.5.33"
+ },
+ "provide": {
+ "psr/container-implementation": "1.1|2.0",
+ "psr/log-implementation": "1.0|2.0|3.0",
+ "psr/simple-cache-implementation": "1.0|2.0|3.0"
+ },
+ "replace": {
+ "illuminate/auth": "self.version",
+ "illuminate/broadcasting": "self.version",
+ "illuminate/bus": "self.version",
+ "illuminate/cache": "self.version",
+ "illuminate/collections": "self.version",
+ "illuminate/concurrency": "self.version",
+ "illuminate/conditionable": "self.version",
+ "illuminate/config": "self.version",
+ "illuminate/console": "self.version",
+ "illuminate/container": "self.version",
+ "illuminate/contracts": "self.version",
+ "illuminate/cookie": "self.version",
+ "illuminate/database": "self.version",
+ "illuminate/encryption": "self.version",
+ "illuminate/events": "self.version",
+ "illuminate/filesystem": "self.version",
+ "illuminate/hashing": "self.version",
+ "illuminate/http": "self.version",
+ "illuminate/json-schema": "self.version",
+ "illuminate/log": "self.version",
+ "illuminate/macroable": "self.version",
+ "illuminate/mail": "self.version",
+ "illuminate/notifications": "self.version",
+ "illuminate/pagination": "self.version",
+ "illuminate/pipeline": "self.version",
+ "illuminate/process": "self.version",
+ "illuminate/queue": "self.version",
+ "illuminate/redis": "self.version",
+ "illuminate/reflection": "self.version",
+ "illuminate/routing": "self.version",
+ "illuminate/session": "self.version",
+ "illuminate/support": "self.version",
+ "illuminate/testing": "self.version",
+ "illuminate/translation": "self.version",
+ "illuminate/validation": "self.version",
+ "illuminate/view": "self.version",
+ "spatie/once": "*"
+ },
+ "require-dev": {
+ "ably/ably-php": "^1.0",
+ "aws/aws-sdk-php": "^3.322.9",
+ "ext-gmp": "*",
+ "fakerphp/faker": "^1.24",
+ "guzzlehttp/promises": "^2.0.3",
+ "guzzlehttp/psr7": "^2.4",
+ "laravel/pint": "^1.18",
+ "league/flysystem-aws-s3-v3": "^3.25.1",
+ "league/flysystem-ftp": "^3.25.1",
+ "league/flysystem-path-prefixing": "^3.25.1",
+ "league/flysystem-read-only": "^3.25.1",
+ "league/flysystem-sftp-v3": "^3.25.1",
+ "mockery/mockery": "^1.6.10",
+ "opis/json-schema": "^2.4.1",
+ "orchestra/testbench-core": "^10.9.0",
+ "pda/pheanstalk": "^5.0.6|^7.0.0",
+ "php-http/discovery": "^1.15",
+ "phpstan/phpstan": "^2.0",
+ "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1",
+ "predis/predis": "^2.3|^3.0",
+ "resend/resend-php": "^0.10.0|^1.0",
+ "symfony/cache": "^7.2.0",
+ "symfony/http-client": "^7.2.0",
+ "symfony/psr-http-message-bridge": "^7.2.0",
+ "symfony/translation": "^7.2.0"
+ },
+ "suggest": {
+ "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
+ "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).",
+ "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).",
+ "ext-apcu": "Required to use the APC cache driver.",
+ "ext-fileinfo": "Required to use the Filesystem class.",
+ "ext-ftp": "Required to use the Flysystem FTP driver.",
+ "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
+ "ext-memcached": "Required to use the memcache cache driver.",
+ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.",
+ "ext-pdo": "Required to use all database features.",
+ "ext-posix": "Required to use all features of the queue worker.",
+ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).",
+ "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).",
+ "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
+ "laravel/tinker": "Required to use the tinker console command (^2.0).",
+ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).",
+ "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).",
+ "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).",
+ "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)",
+ "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).",
+ "mockery/mockery": "Required to use mocking (^1.6).",
+ "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).",
+ "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).",
+ "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).",
+ "predis/predis": "Required to use the predis connector (^2.3|^3.0).",
+ "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
+ "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).",
+ "symfony/cache": "Required to PSR-6 cache bridge (^7.2).",
+ "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).",
+ "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).",
+ "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).",
+ "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).",
+ "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "12.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Illuminate/Collections/functions.php",
+ "src/Illuminate/Collections/helpers.php",
+ "src/Illuminate/Events/functions.php",
+ "src/Illuminate/Filesystem/functions.php",
+ "src/Illuminate/Foundation/helpers.php",
+ "src/Illuminate/Log/functions.php",
+ "src/Illuminate/Reflection/helpers.php",
+ "src/Illuminate/Support/functions.php",
+ "src/Illuminate/Support/helpers.php"
+ ],
+ "psr-4": {
+ "Illuminate\\": "src/Illuminate/",
+ "Illuminate\\Support\\": [
+ "src/Illuminate/Macroable/",
+ "src/Illuminate/Collections/",
+ "src/Illuminate/Conditionable/",
+ "src/Illuminate/Reflection/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Laravel Framework.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2026-02-24T14:35:15+00:00"
+ },
+ {
+ "name": "laravel/prompts",
+ "version": "v0.3.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/prompts.git",
+ "reference": "ed8c466571b37e977532fb2fd3c272c784d7050d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/ed8c466571b37e977532fb2fd3c272c784d7050d",
+ "reference": "ed8c466571b37e977532fb2fd3c272c784d7050d",
+ "shasum": ""
+ },
+ "require": {
+ "composer-runtime-api": "^2.2",
+ "ext-mbstring": "*",
+ "php": "^8.1",
+ "symfony/console": "^6.2|^7.0|^8.0"
+ },
+ "conflict": {
+ "illuminate/console": ">=10.17.0 <10.25.0",
+ "laravel/framework": ">=10.17.0 <10.25.0"
+ },
+ "require-dev": {
+ "illuminate/collections": "^10.0|^11.0|^12.0|^13.0",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.3|^3.4|^4.0",
+ "phpstan/phpstan": "^1.12.28",
+ "phpstan/phpstan-mockery": "^1.1.3"
+ },
+ "suggest": {
+ "ext-pcntl": "Required for the spinner to be animated."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.3.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Laravel\\Prompts\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Add beautiful and user-friendly forms to your command-line applications.",
+ "support": {
+ "issues": "https://github.com/laravel/prompts/issues",
+ "source": "https://github.com/laravel/prompts/tree/v0.3.13"
+ },
+ "time": "2026-02-06T12:17:10+00:00"
+ },
+ {
+ "name": "laravel/serializable-closure",
+ "version": "v2.0.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/870fc81d2f879903dfc5b60bf8a0f94a1609e669",
+ "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
+ "nesbot/carbon": "^2.67|^3.0",
+ "pestphp/pest": "^2.36|^3.0|^4.0",
+ "phpstan/phpstan": "^2.0",
+ "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": [
+ "closure",
+ "laravel",
+ "serializable"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "time": "2026-02-20T19:59:49+00:00"
+ },
+ {
+ "name": "laravel/tinker",
+ "version": "v2.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/tinker.git",
+ "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/c9f80cc835649b5c1842898fb043f8cc098dd741",
+ "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "php": "^7.2.5|^8.0",
+ "psy/psysh": "^0.11.1|^0.12.0",
+ "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.3|^1.4.2",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0"
+ },
+ "suggest": {
+ "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)."
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Laravel\\Tinker\\TinkerServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Tinker\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Powerful REPL for the Laravel framework.",
+ "keywords": [
+ "REPL",
+ "Tinker",
+ "laravel",
+ "psysh"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/tinker/issues",
+ "source": "https://github.com/laravel/tinker/tree/v2.11.1"
+ },
+ "time": "2026-02-06T14:12:35+00:00"
+ },
+ {
+ "name": "league/commonmark",
+ "version": "2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/commonmark.git",
+ "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
+ "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "league/config": "^1.1.1",
+ "php": "^7.4 || ^8.0",
+ "psr/event-dispatcher": "^1.0",
+ "symfony/deprecation-contracts": "^2.1 || ^3.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "cebe/markdown": "^1.0",
+ "commonmark/cmark": "0.31.1",
+ "commonmark/commonmark.js": "0.31.1",
+ "composer/package-versions-deprecated": "^1.8",
+ "embed/embed": "^4.4",
+ "erusev/parsedown": "^1.0",
+ "ext-json": "*",
+ "github/gfm": "0.29.0",
+ "michelf/php-markdown": "^1.4 || ^2.0",
+ "nyholm/psr7": "^1.5",
+ "phpstan/phpstan": "^1.8.2",
+ "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
+ "scrutinizer/ocular": "^1.8.1",
+ "symfony/finder": "^5.3 | ^6.0 | ^7.0",
+ "symfony/process": "^5.4 | ^6.0 | ^7.0",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
+ "unleashedtech/php-coding-standard": "^3.1.1",
+ "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
+ },
+ "suggest": {
+ "symfony/yaml": "v2.3+ required if using the Front Matter extension"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\CommonMark\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
+ "homepage": "https://commonmark.thephpleague.com",
+ "keywords": [
+ "commonmark",
+ "flavored",
+ "gfm",
+ "github",
+ "github-flavored",
+ "markdown",
+ "md",
+ "parser"
+ ],
+ "support": {
+ "docs": "https://commonmark.thephpleague.com/",
+ "forum": "https://github.com/thephpleague/commonmark/discussions",
+ "issues": "https://github.com/thephpleague/commonmark/issues",
+ "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+ "source": "https://github.com/thephpleague/commonmark"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-11-26T21:48:24+00:00"
+ },
+ {
+ "name": "league/config",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/config.git",
+ "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
+ "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
+ "shasum": ""
+ },
+ "require": {
+ "dflydev/dot-access-data": "^3.0.1",
+ "nette/schema": "^1.2",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.8.2",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Config\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Define configuration arrays with strict schemas and access values with dot notation",
+ "homepage": "https://config.thephpleague.com",
+ "keywords": [
+ "array",
+ "config",
+ "configuration",
+ "dot",
+ "dot-access",
+ "nested",
+ "schema"
+ ],
+ "support": {
+ "docs": "https://config.thephpleague.com/",
+ "issues": "https://github.com/thephpleague/config/issues",
+ "rss": "https://github.com/thephpleague/config/releases.atom",
+ "source": "https://github.com/thephpleague/config"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ }
+ ],
+ "time": "2022-12-11T20:36:23+00:00"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "3.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/254b1595b16b22dbddaaef9ed6ca9fdac4956725",
+ "reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725",
+ "shasum": ""
+ },
+ "require": {
+ "league/flysystem-local": "^3.0.0",
+ "league/mime-type-detection": "^1.0.0",
+ "php": "^8.0.2"
+ },
+ "conflict": {
+ "async-aws/core": "<1.19.0",
+ "async-aws/s3": "<1.14.0",
+ "aws/aws-sdk-php": "3.209.31 || 3.210.0",
+ "guzzlehttp/guzzle": "<7.0",
+ "guzzlehttp/ringphp": "<1.1.1",
+ "phpseclib/phpseclib": "3.0.15",
+ "symfony/http-client": "<5.2"
+ },
+ "require-dev": {
+ "async-aws/s3": "^1.5 || ^2.0",
+ "async-aws/simple-s3": "^1.1 || ^2.0",
+ "aws/aws-sdk-php": "^3.295.10",
+ "composer/semver": "^3.0",
+ "ext-fileinfo": "*",
+ "ext-ftp": "*",
+ "ext-mongodb": "^1.3|^2",
+ "ext-zip": "*",
+ "friendsofphp/php-cs-fixer": "^3.5",
+ "google/cloud-storage": "^1.23",
+ "guzzlehttp/psr7": "^2.6",
+ "microsoft/azure-storage-blob": "^1.1",
+ "mongodb/mongodb": "^1.2|^2",
+ "phpseclib/phpseclib": "^3.0.36",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.5.11|^10.0",
+ "sabre/dav": "^4.6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "File storage abstraction for PHP",
+ "keywords": [
+ "WebDAV",
+ "aws",
+ "cloud",
+ "file",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "s3",
+ "sftp",
+ "storage"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/flysystem/issues",
+ "source": "https://github.com/thephpleague/flysystem/tree/3.32.0"
+ },
+ "time": "2026-02-25T17:01:41+00:00"
+ },
+ {
+ "name": "league/flysystem-local",
+ "version": "3.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem-local.git",
+ "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079",
+ "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "league/flysystem": "^3.0.0",
+ "league/mime-type-detection": "^1.0.0",
+ "php": "^8.0.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\Local\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "Local filesystem adapter for Flysystem.",
+ "keywords": [
+ "Flysystem",
+ "file",
+ "files",
+ "filesystem",
+ "local"
+ ],
+ "support": {
+ "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0"
+ },
+ "time": "2026-01-23T15:30:45+00:00"
+ },
+ {
+ "name": "league/mime-type-detection",
+ "version": "1.16.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/mime-type-detection.git",
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "phpstan/phpstan": "^0.12.68",
+ "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\MimeTypeDetection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "Mime-type detection for Flysystem",
+ "support": {
+ "issues": "https://github.com/thephpleague/mime-type-detection/issues",
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/frankdejonge",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-21T08:32:55+00:00"
+ },
+ {
+ "name": "league/uri",
+ "version": "7.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/uri.git",
+ "reference": "4436c6ec8d458e4244448b069cc572d088230b76"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76",
+ "reference": "4436c6ec8d458e4244448b069cc572d088230b76",
+ "shasum": ""
+ },
+ "require": {
+ "league/uri-interfaces": "^7.8",
+ "php": "^8.1",
+ "psr/http-factory": "^1"
+ },
+ "conflict": {
+ "league/uri-schemes": "^1.0"
+ },
+ "suggest": {
+ "ext-bcmath": "to improve IPV4 host parsing",
+ "ext-dom": "to convert the URI into an HTML anchor tag",
+ "ext-fileinfo": "to create Data URI from file contennts",
+ "ext-gmp": "to improve IPV4 host parsing",
+ "ext-intl": "to handle IDN host with the best performance",
+ "ext-uri": "to use the PHP native URI class",
+ "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain",
+ "league/uri-components": "to provide additional tools to manipulate URI objects components",
+ "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP",
+ "php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
+ "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Uri\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://nyamsprod.com"
+ }
+ ],
+ "description": "URI manipulation library",
+ "homepage": "https://uri.thephpleague.com",
+ "keywords": [
+ "URN",
+ "data-uri",
+ "file-uri",
+ "ftp",
+ "hostname",
+ "http",
+ "https",
+ "middleware",
+ "parse_str",
+ "parse_url",
+ "psr-7",
+ "query-string",
+ "querystring",
+ "rfc2141",
+ "rfc3986",
+ "rfc3987",
+ "rfc6570",
+ "rfc8141",
+ "uri",
+ "uri-template",
+ "url",
+ "ws"
+ ],
+ "support": {
+ "docs": "https://uri.thephpleague.com",
+ "forum": "https://thephpleague.slack.com",
+ "issues": "https://github.com/thephpleague/uri-src/issues",
+ "source": "https://github.com/thephpleague/uri/tree/7.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/nyamsprod",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-14T17:24:56+00:00"
+ },
+ {
+ "name": "league/uri-interfaces",
+ "version": "7.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/uri-interfaces.git",
+ "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
+ "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "php": "^8.1",
+ "psr/http-message": "^1.1 || ^2.0"
+ },
+ "suggest": {
+ "ext-bcmath": "to improve IPV4 host parsing",
+ "ext-gmp": "to improve IPV4 host parsing",
+ "ext-intl": "to handle IDN host with the best performance",
+ "php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
+ "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Uri\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://nyamsprod.com"
+ }
+ ],
+ "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI",
+ "homepage": "https://uri.thephpleague.com",
+ "keywords": [
+ "data-uri",
+ "file-uri",
+ "ftp",
+ "hostname",
+ "http",
+ "https",
+ "parse_str",
+ "parse_url",
+ "psr-7",
+ "query-string",
+ "querystring",
+ "rfc3986",
+ "rfc3987",
+ "rfc6570",
+ "uri",
+ "url",
+ "ws"
+ ],
+ "support": {
+ "docs": "https://uri.thephpleague.com",
+ "forum": "https://thephpleague.slack.com",
+ "issues": "https://github.com/thephpleague/uri-src/issues",
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/nyamsprod",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-15T06:54:53+00:00"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "3.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0",
+ "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/log": "^2.0 || ^3.0"
+ },
+ "provide": {
+ "psr/log-implementation": "3.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^3.0",
+ "doctrine/couchdb": "~1.0@dev",
+ "elasticsearch/elasticsearch": "^7 || ^8",
+ "ext-json": "*",
+ "graylog2/gelf-php": "^1.4.2 || ^2.0",
+ "guzzlehttp/guzzle": "^7.4.5",
+ "guzzlehttp/psr7": "^2.2",
+ "mongodb/mongodb": "^1.8 || ^2.0",
+ "php-amqplib/php-amqplib": "~2.4 || ^3",
+ "php-console/php-console": "^3.1.8",
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^10.5.17 || ^11.0.7",
+ "predis/predis": "^1.1 || ^2",
+ "rollbar/rollbar": "^4.0",
+ "ruflin/elastica": "^7 || ^8",
+ "symfony/mailer": "^5.4 || ^6",
+ "symfony/mime": "^5.4 || ^6"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+ "ext-mbstring": "Allow to work properly with unicode symbols",
+ "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+ "ext-openssl": "Required to send log messages using SSL",
+ "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Monolog\\": "src/Monolog"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "https://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/3.10.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-02T08:56:05+00:00"
+ },
+ {
+ "name": "nesbot/carbon",
+ "version": "3.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/CarbonPHP/carbon.git",
+ "reference": "f438fcc98f92babee98381d399c65336f3a3827f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/f438fcc98f92babee98381d399c65336f3a3827f",
+ "reference": "f438fcc98f92babee98381d399c65336f3a3827f",
+ "shasum": ""
+ },
+ "require": {
+ "carbonphp/carbon-doctrine-types": "<100.0",
+ "ext-json": "*",
+ "php": "^8.1",
+ "psr/clock": "^1.0",
+ "symfony/clock": "^6.3.12 || ^7.0 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0"
+ },
+ "provide": {
+ "psr/clock-implementation": "1.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^3.6.3 || ^4.0",
+ "doctrine/orm": "^2.15.2 || ^3.0",
+ "friendsofphp/php-cs-fixer": "^v3.87.1",
+ "kylekatarnls/multi-tester": "^2.5.3",
+ "phpmd/phpmd": "^2.15.0",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.22",
+ "phpunit/phpunit": "^10.5.53",
+ "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0"
+ },
+ "bin": [
+ "bin/carbon"
+ ],
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Carbon\\Laravel\\ServiceProvider"
+ ]
+ },
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
+ "branch-alias": {
+ "dev-2.x": "2.x-dev",
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Carbon\\": "src/Carbon/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "https://markido.com"
+ },
+ {
+ "name": "kylekatarnls",
+ "homepage": "https://github.com/kylekatarnls"
+ }
+ ],
+ "description": "An API extension for DateTime that supports 281 different languages.",
+ "homepage": "https://carbonphp.github.io/carbon/",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "support": {
+ "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html",
+ "issues": "https://github.com/CarbonPHP/carbon/issues",
+ "source": "https://github.com/CarbonPHP/carbon"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon#sponsor",
+ "type": "opencollective"
+ },
+ {
+ "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-29T09:26:29+00:00"
+ },
+ {
+ "name": "nette/schema",
+ "version": "v1.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/schema.git",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002",
+ "shasum": ""
+ },
+ "require": {
+ "nette/utils": "^4.0",
+ "php": "8.1 - 8.5"
+ },
+ "require-dev": {
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.6",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1.39@stable",
+ "tracy/tracy": "^2.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "📐 Nette Schema: validating data structures against a given Schema.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "config",
+ "nette"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/schema/issues",
+ "source": "https://github.com/nette/schema/tree/v1.3.5"
+ },
+ "time": "2026-02-23T03:47:12+00:00"
+ },
+ {
+ "name": "nette/utils",
+ "version": "v4.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/utils.git",
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe",
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe",
+ "shasum": ""
+ },
+ "require": {
+ "php": "8.2 - 8.5"
+ },
+ "conflict": {
+ "nette/finder": "<3",
+ "nette/schema": "<1.2.2"
+ },
+ "require-dev": {
+ "jetbrains/phpstorm-attributes": "^1.2",
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.5",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1@stable",
+ "tracy/tracy": "^2.9"
+ },
+ "suggest": {
+ "ext-gd": "to use Image",
+ "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+ "ext-json": "to use Nette\\Utils\\Json",
+ "ext-mbstring": "to use Strings::lower() etc...",
+ "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "array",
+ "core",
+ "datetime",
+ "images",
+ "json",
+ "nette",
+ "paginator",
+ "password",
+ "slugify",
+ "string",
+ "unicode",
+ "utf-8",
+ "utility",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/utils/issues",
+ "source": "https://github.com/nette/utils/tree/v4.1.3"
+ },
+ "time": "2026-02-13T03:05:33+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v5.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
+ },
+ "time": "2025-12-06T11:56:16+00:00"
+ },
+ {
+ "name": "nunomaduro/termwind",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nunomaduro/termwind.git",
+ "reference": "712a31b768f5daea284c2169a7d227031001b9a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8",
+ "reference": "712a31b768f5daea284c2169a7d227031001b9a8",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^8.2",
+ "symfony/console": "^7.4.4 || ^8.0.4"
+ },
+ "require-dev": {
+ "illuminate/console": "^11.47.0",
+ "laravel/pint": "^1.27.1",
+ "mockery/mockery": "^1.6.12",
+ "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2",
+ "phpstan/phpstan": "^1.12.32",
+ "phpstan/phpstan-strict-rules": "^1.6.2",
+ "symfony/var-dumper": "^7.3.5 || ^8.0.4",
+ "thecodingmachine/phpstan-strict-rules": "^1.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Termwind\\Laravel\\TermwindServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-2.x": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Functions.php"
+ ],
+ "psr-4": {
+ "Termwind\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "It's like Tailwind CSS, but for the console.",
+ "keywords": [
+ "cli",
+ "console",
+ "css",
+ "package",
+ "php",
+ "style"
+ ],
+ "support": {
+ "issues": "https://github.com/nunomaduro/termwind/issues",
+ "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/paypalme/enunomaduro",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/nunomaduro",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/xiCO2k",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-16T23:10:27+00:00"
+ },
+ {
+ "name": "nwidart/laravel-modules",
+ "version": "v11.1.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nWidart/laravel-modules.git",
+ "reference": "6a987af3103bcf2dc31ebd18a68373bc8c7a99f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nWidart/laravel-modules/zipball/6a987af3103bcf2dc31ebd18a68373bc8c7a99f7",
+ "reference": "6a987af3103bcf2dc31ebd18a68373bc8c7a99f7",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-simplexml": "*",
+ "php": ">=8.2",
+ "wikimedia/composer-merge-plugin": "^2.1"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^v3.52",
+ "laravel/framework": "^v11.33",
+ "laravel/pint": "^1.16",
+ "mockery/mockery": "^1.6",
+ "orchestra/testbench": "^v9.0",
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^11.0",
+ "spatie/phpunit-snapshot-assertions": "^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "aliases": {
+ "Module": "Nwidart\\Modules\\Facades\\Module"
+ },
+ "providers": [
+ "Nwidart\\Modules\\LaravelModulesServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-master": "11.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Nwidart\\Modules\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Widart",
+ "email": "n.widart@gmail.com",
+ "homepage": "https://nicolaswidart.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Laravel Module management",
+ "keywords": [
+ "laravel",
+ "module",
+ "modules",
+ "nwidart",
+ "rad"
+ ],
+ "support": {
+ "issues": "https://github.com/nWidart/laravel-modules/issues",
+ "source": "https://github.com/nWidart/laravel-modules/tree/v11.1.10"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/dcblogdev",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nwidart",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-18T09:58:04+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.9.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be",
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-27T19:41:33+00:00"
+ },
+ {
+ "name": "psr/clock",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/clock.git",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Clock\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for reading the clock.",
+ "homepage": "https://github.com/php-fig/clock",
+ "keywords": [
+ "clock",
+ "now",
+ "psr",
+ "psr-20",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/clock/issues",
+ "source": "https://github.com/php-fig/clock/tree/1.0.0"
+ },
+ "time": "2022-11-25T14:36:26+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
+ },
+ "time": "2021-11-05T16:47:00+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory"
+ },
+ "time": "2024-04-15T12:06:14+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
+ },
+ "time": "2024-09-11T13:17:53+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
+ },
+ "time": "2021-10-29T13:26:27+00:00"
+ },
+ {
+ "name": "psy/psysh",
+ "version": "v0.12.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bobthecow/psysh.git",
+ "reference": "19678eb6b952a03b8a1d96ecee9edba518bb0373"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/19678eb6b952a03b8a1d96ecee9edba518bb0373",
+ "reference": "19678eb6b952a03b8a1d96ecee9edba518bb0373",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "nikic/php-parser": "^5.0 || ^4.0",
+ "php": "^8.0 || ^7.4",
+ "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
+ "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
+ },
+ "conflict": {
+ "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.2",
+ "composer/class-map-generator": "^1.6"
+ },
+ "suggest": {
+ "composer/class-map-generator": "Improved tab completion performance with better class discovery.",
+ "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
+ },
+ "bin": [
+ "bin/psysh"
+ ],
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": false,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-main": "0.12.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Psy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info"
+ }
+ ],
+ "description": "An interactive shell for modern PHP.",
+ "homepage": "https://psysh.org",
+ "keywords": [
+ "REPL",
+ "console",
+ "interactive",
+ "shell"
+ ],
+ "support": {
+ "issues": "https://github.com/bobthecow/psysh/issues",
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.20"
+ },
+ "time": "2026-02-11T15:05:28+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "ramsey/collection",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/collection.git",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "captainhook/plugin-composer": "^5.3",
+ "ergebnis/composer-normalize": "^2.45",
+ "fakerphp/faker": "^1.24",
+ "hamcrest/hamcrest-php": "^2.0",
+ "jangregor/phpstan-prophecy": "^2.1",
+ "mockery/mockery": "^1.6",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpspec/prophecy-phpunit": "^2.3",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^10.5",
+ "ramsey/coding-standard": "^2.3",
+ "ramsey/conventional-commits": "^1.6",
+ "roave/security-advisories": "dev-latest"
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ },
+ "ramsey/conventional-commits": {
+ "configFile": "conventional-commits.json"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "A PHP library for representing and manipulating collections.",
+ "keywords": [
+ "array",
+ "collection",
+ "hash",
+ "map",
+ "queue",
+ "set"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/collection/issues",
+ "source": "https://github.com/ramsey/collection/tree/2.1.1"
+ },
+ "time": "2025-03-22T05:38:12+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "4.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "8429c78ca35a09f27565311b98101e2826affde0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0",
+ "reference": "8429c78ca35a09f27565311b98101e2826affde0",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
+ "php": "^8.0",
+ "ramsey/collection": "^1.2 || ^2.0"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.25",
+ "captainhook/plugin-composer": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "ergebnis/composer-normalize": "^2.47",
+ "mockery/mockery": "^1.6",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock": "^2.6",
+ "php-mock/php-mock-mockery": "^1.5",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpbench/phpbench": "^1.2.14",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "slevomat/coding-standard": "^8.18",
+ "squizlabs/php_codesniffer": "^3.13"
+ },
+ "suggest": {
+ "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+ "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+ "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "source": "https://github.com/ramsey/uuid/tree/4.9.2"
+ },
+ "time": "2025-12-14T04:43:48+00:00"
+ },
+ {
+ "name": "symfony/clock",
+ "version": "v7.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/clock.git",
+ "reference": "9169f24776edde469914c1e7a1442a50f7a4e110"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/clock/zipball/9169f24776edde469914c1e7a1442a50f7a4e110",
+ "reference": "9169f24776edde469914c1e7a1442a50f7a4e110",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/clock": "^1.0",
+ "symfony/polyfill-php83": "^1.28"
+ },
+ "provide": {
+ "psr/clock-implementation": "1.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/now.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\Clock\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Decouples applications from the system clock",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "clock",
+ "psr20",
+ "time"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/clock/tree/v7.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-11-12T15:39:26+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "6d643a93b47398599124022eb24d97c153c12f27"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/6d643a93b47398599124022eb24d97c153c12f27",
+ "reference": "6d643a93b47398599124022eb24d97c153c12f27",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/string": "^7.2|^8.0"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<6.4",
+ "symfony/dotenv": "<6.4",
+ "symfony/event-dispatcher": "<6.4",
+ "symfony/lock": "<6.4",
+ "symfony/process": "<6.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0|3.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/lock": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "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": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-25T17:02:47+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "2e7c52c647b406e2107dd867db424a4dbac91864"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/2e7c52c647b406e2107dd867db424a4dbac91864",
+ "reference": "2e7c52c647b406e2107dd867db424a4dbac91864",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Converts CSS selectors to XPath expressions",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-17T07:53:42+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
+ },
+ "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-09-25T14:21:43+00:00"
+ },
+ {
+ "name": "symfony/error-handler",
+ "version": "v7.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/error-handler.git",
+ "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/8da531f364ddfee53e36092a7eebbbd0b775f6b8",
+ "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/log": "^1|^2|^3",
+ "symfony/polyfill-php85": "^1.32",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
+ },
+ "conflict": {
+ "symfony/deprecation-contracts": "<2.5",
+ "symfony/http-kernel": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^6.4|^7.0|^8.0",
+ "symfony/webpack-encore-bundle": "^1.0|^2.0"
+ },
+ "bin": [
+ "Resources/bin/patch-type-declarations"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\ErrorHandler\\": ""
+ },
+ "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 tools to manage errors and ease debugging PHP code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/error-handler/tree/v7.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-20T16:42:42+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v7.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "dc2c0eba1af673e736bb851d747d266108aea746"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746",
+ "reference": "dc2c0eba1af673e736bb851d747d266108aea746",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/event-dispatcher-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<6.4",
+ "symfony/service-contracts": "<2.5"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0|3.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/error-handler": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/framework-bundle": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "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 tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-05T11:45:34+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/event-dispatcher": "^1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
+ },
+ "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-09-25T14:21:43+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
+ "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "symfony/filesystem": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "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": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-29T09:40:50+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "fd97d5e926e988a363cef56fbbf88c5c528e9065"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fd97d5e926e988a363cef56fbbf88c5c528e9065",
+ "reference": "fd97d5e926e988a363cef56fbbf88c5c528e9065",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "^1.1"
+ },
+ "conflict": {
+ "doctrine/dbal": "<3.6",
+ "symfony/cache": "<6.4.12|>=7.0,<7.1.5"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^3.6|^4",
+ "predis/predis": "^1.1|^2.0",
+ "symfony/cache": "^6.4.12|^7.1.5|^8.0",
+ "symfony/clock": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/mime": "^6.4|^7.0|^8.0",
+ "symfony/rate-limiter": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpFoundation\\": ""
+ },
+ "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": "Defines an object-oriented layer for the HTTP specification",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-foundation/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-21T16:25:55+00:00"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "002ac0cf4cd972a7fd0912dcd513a95e8a81ce83"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/002ac0cf4cd972a7fd0912dcd513a95e8a81ce83",
+ "reference": "002ac0cf4cd972a7fd0912dcd513a95e8a81ce83",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/log": "^1|^2|^3",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/error-handler": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^7.3|^8.0",
+ "symfony/http-foundation": "^7.4|^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "symfony/browser-kit": "<6.4",
+ "symfony/cache": "<6.4",
+ "symfony/config": "<6.4",
+ "symfony/console": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/doctrine-bridge": "<6.4",
+ "symfony/flex": "<2.10",
+ "symfony/form": "<6.4",
+ "symfony/http-client": "<6.4",
+ "symfony/http-client-contracts": "<2.5",
+ "symfony/mailer": "<6.4",
+ "symfony/messenger": "<6.4",
+ "symfony/translation": "<6.4",
+ "symfony/translation-contracts": "<2.5",
+ "symfony/twig-bridge": "<6.4",
+ "symfony/validator": "<6.4",
+ "symfony/var-dumper": "<6.4",
+ "twig/twig": "<3.12"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0|3.0"
+ },
+ "require-dev": {
+ "psr/cache": "^1.0|^2.0|^3.0",
+ "symfony/browser-kit": "^6.4|^7.0|^8.0",
+ "symfony/clock": "^6.4|^7.0|^8.0",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/css-selector": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0",
+ "symfony/dom-crawler": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/finder": "^6.4|^7.0|^8.0",
+ "symfony/http-client-contracts": "^2.5|^3",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/property-access": "^7.1|^8.0",
+ "symfony/routing": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^7.1|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/translation": "^6.4|^7.0|^8.0",
+ "symfony/translation-contracts": "^2.5|^3",
+ "symfony/uid": "^6.4|^7.0|^8.0",
+ "symfony/validator": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0",
+ "symfony/var-exporter": "^6.4|^7.0|^8.0",
+ "twig/twig": "^3.12"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpKernel\\": ""
+ },
+ "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 a structured process for converting a Request into a Response",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-kernel/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-26T08:30:57+00:00"
+ },
+ {
+ "name": "symfony/mailer",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mailer.git",
+ "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
+ "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
+ "shasum": ""
+ },
+ "require": {
+ "egulias/email-validator": "^2.1.10|^3|^4",
+ "php": ">=8.2",
+ "psr/event-dispatcher": "^1",
+ "psr/log": "^1|^2|^3",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/mime": "^7.2|^8.0",
+ "symfony/service-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/http-client-contracts": "<2.5",
+ "symfony/http-kernel": "<6.4",
+ "symfony/messenger": "<6.4",
+ "symfony/mime": "<6.4",
+ "symfony/twig-bridge": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/twig-bridge": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mailer\\": ""
+ },
+ "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": "Helps sending emails",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/mailer/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-25T16:50:00+00:00"
+ },
+ {
+ "name": "symfony/mime",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mime.git",
+ "reference": "9fc881d95feae4c6c48678cb6372bd8a7ba04f5f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/9fc881d95feae4c6c48678cb6372bd8a7ba04f5f",
+ "reference": "9fc881d95feae4c6c48678cb6372bd8a7ba04f5f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "phpdocumentor/reflection-docblock": "<5.2|>=7",
+ "phpdocumentor/type-resolver": "<1.5.1",
+ "symfony/mailer": "<6.4",
+ "symfony/serializer": "<6.4.3|>7.0,<7.0.3"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1|^4",
+ "league/html-to-markdown": "^5.0",
+ "phpdocumentor/reflection-docblock": "^5.2|^6.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/property-access": "^6.4|^7.0|^8.0",
+ "symfony/property-info": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^6.4.3|^7.0.3|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mime\\": ""
+ },
+ "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": "Allows manipulating MIME messages",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "mime",
+ "mime-type"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/mime/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-05T15:57:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-06-27T09:58:17+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-idn",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3",
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2",
+ "symfony/polyfill-intl-normalizer": "^1.10"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Laurent Bassin",
+ "email": "laurent@bassin.info"
+ },
+ {
+ "name": "Trevor Rowbotham",
+ "email": "trevor.rowbotham@pm.me"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "idn",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-10T14:38:51+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-12-23T08:48:59+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-01-02T08:10:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php83",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php83.git",
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php83\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-07-08T02:45:35+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php84",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php84.git",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php84\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-06-24T13:30:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php85",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php85.git",
+ "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
+ "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php85\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-06-23T16:12:55+00:00"
+ },
+ {
+ "name": "symfony/polyfill-uuid",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-uuid.git",
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-uuid": "*"
+ },
+ "suggest": {
+ "ext-uuid": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Uuid\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Grégoire Pineau",
+ "email": "lyrixx@lyrixx.info"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for uuid functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "uuid"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v7.4.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "608476f4604102976d687c483ac63a79ba18cc97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97",
+ "reference": "608476f4604102976d687c483ac63a79ba18cc97",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "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": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v7.4.5"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-26T15:07:59+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/routing.git",
+ "reference": "238d749c56b804b31a9bf3e26519d93b65a60938"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/238d749c56b804b31a9bf3e26519d93b65a60938",
+ "reference": "238d749c56b804b31a9bf3e26519d93b65a60938",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/config": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/yaml": "<6.4"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/yaml": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Routing\\": ""
+ },
+ "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": "Maps an HTTP request to a set of configuration variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "router",
+ "routing",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/routing/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-25T16:50:00+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v3.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-07-15T11:30:57+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "9f209231affa85aa930a5e46e6eb03381424b30b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b",
+ "reference": "9f209231affa85aa930a5e46e6eb03381424b30b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3.0",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.33",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/translation-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/emoji": "^7.1|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/intl": "^6.4|^7.0|^8.0",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-09T09:33:46+00:00"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "1888cf064399868af3784b9e043240f1d89d25ce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/1888cf064399868af3784b9e043240f1d89d25ce",
+ "reference": "1888cf064399868af3784b9e043240f1d89d25ce",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/translation-contracts": "^2.5.3|^3.3"
+ },
+ "conflict": {
+ "nikic/php-parser": "<5.0",
+ "symfony/config": "<6.4",
+ "symfony/console": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/http-client-contracts": "<2.5",
+ "symfony/http-kernel": "<6.4",
+ "symfony/service-contracts": "<2.5",
+ "symfony/twig-bundle": "<6.4",
+ "symfony/yaml": "<6.4"
+ },
+ "provide": {
+ "symfony/translation-implementation": "2.3|3.0"
+ },
+ "require-dev": {
+ "nikic/php-parser": "^5.0",
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/finder": "^6.4|^7.0|^8.0",
+ "symfony/http-client-contracts": "^2.5|^3.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/intl": "^6.4|^7.0|^8.0",
+ "symfony/polyfill-intl-icu": "^1.21",
+ "symfony/routing": "^6.4|^7.0|^8.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/yaml": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
+ },
+ "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 tools to internationalize your application",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/translation/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-17T07:53:42+00:00"
+ },
+ {
+ "name": "symfony/translation-contracts",
+ "version": "v3.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation-contracts.git",
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977",
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Translation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to translation",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-07-15T13:41:35+00:00"
+ },
+ {
+ "name": "symfony/uid",
+ "version": "v7.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/uid.git",
+ "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/7719ce8aba76be93dfe249192f1fbfa52c588e36",
+ "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/polyfill-uuid": "^1.15"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Uid\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Grégoire Pineau",
+ "email": "lyrixx@lyrixx.info"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to generate and represent UIDs",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "UID",
+ "ulid",
+ "uuid"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/uid/tree/v7.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-03T23:30:35+00:00"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291",
+ "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/console": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/uid": "^6.4|^7.0|^8.0",
+ "twig/twig": "^3.12"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides mechanisms for walking through any arbitrary PHP variable",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-15T10:53:20+00:00"
+ },
+ {
+ "name": "tijsverkoyen/css-to-inline-styles",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
+ "reference": "f0292ccf0ec75843d65027214426b6b163b48b41"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41",
+ "reference": "f0292ccf0ec75843d65027214426b6b163b48b41",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": "^7.4 || ^8.0",
+ "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^8.5.21 || ^9.5.10"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "TijsVerkoyen\\CssToInlineStyles\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Tijs Verkoyen",
+ "email": "css_to_inline_styles@verkoyen.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
+ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+ "support": {
+ "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0"
+ },
+ "time": "2025-12-02T11:56:42+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v5.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc",
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "graham-campbell/result-type": "^1.1.4",
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.5",
+ "symfony/polyfill-ctype": "^1.26",
+ "symfony/polyfill-mbstring": "^1.26",
+ "symfony/polyfill-php80": "^1.26"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-filter": "*",
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator."
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "5.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "https://github.com/vlucas"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-27T19:49:13+00:00"
+ },
+ {
+ "name": "voku/portable-ascii",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/voku/portable-ascii.git",
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
+ },
+ "suggest": {
+ "ext-intl": "Use Intl for transliterator_transliterate() support"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "voku\\": "src/voku/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Lars Moelleken",
+ "homepage": "https://www.moelleken.org/"
+ }
+ ],
+ "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
+ "homepage": "https://github.com/voku/portable-ascii",
+ "keywords": [
+ "ascii",
+ "clean",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/voku/portable-ascii/issues",
+ "source": "https://github.com/voku/portable-ascii/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/moelleken",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/voku",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/portable-ascii",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://www.patreon.com/voku",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-21T01:49:47+00:00"
+ },
+ {
+ "name": "wikimedia/composer-merge-plugin",
+ "version": "v2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/composer-merge-plugin.git",
+ "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/a03d426c8e9fb2c9c569d9deeb31a083292788bc",
+ "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.1||^2.0",
+ "php": ">=7.2.0"
+ },
+ "require-dev": {
+ "composer/composer": "^1.1||^2.0",
+ "ext-json": "*",
+ "mediawiki/mediawiki-phan-config": "0.11.1",
+ "php-parallel-lint/php-parallel-lint": "~1.3.1",
+ "phpspec/prophecy": "~1.15.0",
+ "phpunit/phpunit": "^8.5||^9.0",
+ "squizlabs/php_codesniffer": "~3.7.1"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin",
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Wikimedia\\Composer\\Merge\\V2\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bryan Davis",
+ "email": "bd808@wikimedia.org"
+ }
+ ],
+ "description": "Composer plugin to merge multiple composer.json files",
+ "support": {
+ "issues": "https://github.com/wikimedia/composer-merge-plugin/issues",
+ "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.1.0"
+ },
+ "time": "2023-04-15T19:07:00+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "fakerphp/faker",
+ "version": "v1.24.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FakerPHP/Faker.git",
+ "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
+ "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "conflict": {
+ "fzaninotto/faker": "*"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "doctrine/persistence": "^1.3 || ^2.0",
+ "ext-intl": "*",
+ "phpunit/phpunit": "^9.5.26",
+ "symfony/phpunit-bridge": "^5.4.16"
+ },
+ "suggest": {
+ "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+ "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+ "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+ "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+ "ext-mbstring": "Required for multibyte Unicode string functionality."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "support": {
+ "issues": "https://github.com/FakerPHP/Faker/issues",
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1"
+ },
+ "time": "2024-11-21T13:46:39+00:00"
+ },
+ {
+ "name": "filp/whoops",
+ "version": "2.18.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filp/whoops.git",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3",
+ "symfony/var-dumper": "^4.0 || ^5.0"
+ },
+ "suggest": {
+ "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
+ "whoops/soap": "Formats errors as SOAP responses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Whoops\\": "src/Whoops/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Filipe Dobreira",
+ "homepage": "https://github.com/filp",
+ "role": "Developer"
+ }
+ ],
+ "description": "php error handling for cool kids",
+ "homepage": "https://filp.github.io/whoops/",
+ "keywords": [
+ "error",
+ "exception",
+ "handling",
+ "library",
+ "throwable",
+ "whoops"
+ ],
+ "support": {
+ "issues": "https://github.com/filp/whoops/issues",
+ "source": "https://github.com/filp/whoops/tree/2.18.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/denis-sokolov",
+ "type": "github"
+ }
+ ],
+ "time": "2025-08-08T12:00:00+00:00"
+ },
+ {
+ "name": "hamcrest/hamcrest-php",
+ "version": "v2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
+ },
+ "require-dev": {
+ "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "hamcrest"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "This is the PHP port of Hamcrest Matchers",
+ "keywords": [
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1"
+ },
+ "time": "2025-04-30T06:54:44+00:00"
+ },
+ {
+ "name": "laravel/breeze",
+ "version": "v2.3.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/breeze.git",
+ "reference": "1a29c5792818bd4cddf70b5f743a227e02fbcfcd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/breeze/zipball/1a29c5792818bd4cddf70b5f743a227e02fbcfcd",
+ "reference": "1a29c5792818bd4cddf70b5f743a227e02fbcfcd",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "^11.0|^12.0",
+ "illuminate/filesystem": "^11.0|^12.0",
+ "illuminate/support": "^11.0|^12.0",
+ "illuminate/validation": "^11.0|^12.0",
+ "php": "^8.2.0",
+ "symfony/console": "^7.0"
+ },
+ "require-dev": {
+ "laravel/framework": "^11.0|^12.0",
+ "orchestra/testbench-core": "^9.0|^10.0",
+ "phpstan/phpstan": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Laravel\\Breeze\\BreezeServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Breeze\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.",
+ "keywords": [
+ "auth",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/breeze/issues",
+ "source": "https://github.com/laravel/breeze"
+ },
+ "time": "2025-07-18T18:49:59+00:00"
+ },
+ {
+ "name": "laravel/pail",
+ "version": "v1.2.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/pail.git",
+ "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/pail/zipball/aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf",
+ "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "illuminate/console": "^10.24|^11.0|^12.0|^13.0",
+ "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0",
+ "illuminate/log": "^10.24|^11.0|^12.0|^13.0",
+ "illuminate/process": "^10.24|^11.0|^12.0|^13.0",
+ "illuminate/support": "^10.24|^11.0|^12.0|^13.0",
+ "nunomaduro/termwind": "^1.15|^2.0",
+ "php": "^8.2",
+ "symfony/console": "^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "laravel/framework": "^10.24|^11.0|^12.0|^13.0",
+ "laravel/pint": "^1.13",
+ "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0",
+ "pestphp/pest": "^2.20|^3.0|^4.0",
+ "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0",
+ "phpstan/phpstan": "^1.12.27",
+ "symfony/var-dumper": "^6.3|^7.0|^8.0",
+ "symfony/yaml": "^6.3|^7.0|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Laravel\\Pail\\PailServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Pail\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "Easily delve into your Laravel application's log files directly from the command line.",
+ "homepage": "https://github.com/laravel/pail",
+ "keywords": [
+ "dev",
+ "laravel",
+ "logs",
+ "php",
+ "tail"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/pail/issues",
+ "source": "https://github.com/laravel/pail"
+ },
+ "time": "2026-02-09T13:44:54+00:00"
+ },
+ {
+ "name": "laravel/pint",
+ "version": "v1.27.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/pint.git",
+ "reference": "54cca2de13790570c7b6f0f94f37896bee4abcb5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/54cca2de13790570c7b6f0f94f37896bee4abcb5",
+ "reference": "54cca2de13790570c7b6f0f94f37896bee4abcb5",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-tokenizer": "*",
+ "ext-xml": "*",
+ "php": "^8.2.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.93.1",
+ "illuminate/view": "^12.51.0",
+ "larastan/larastan": "^3.9.2",
+ "laravel-zero/framework": "^12.0.5",
+ "mockery/mockery": "^1.6.12",
+ "nunomaduro/termwind": "^2.3.3",
+ "pestphp/pest": "^3.8.5"
+ },
+ "bin": [
+ "builds/pint"
+ ],
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/",
+ "Database\\Seeders\\": "database/seeders/",
+ "Database\\Factories\\": "database/factories/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "An opinionated code formatter for PHP.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "dev",
+ "format",
+ "formatter",
+ "lint",
+ "linter",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/pint/issues",
+ "source": "https://github.com/laravel/pint"
+ },
+ "time": "2026-02-10T20:00:20+00:00"
+ },
+ {
+ "name": "laravel/sail",
+ "version": "v1.53.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/sail.git",
+ "reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/e340eaa2bea9b99192570c48ed837155dbf24fbb",
+ "reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "php": "^8.0",
+ "symfony/console": "^6.0|^7.0|^8.0",
+ "symfony/yaml": "^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0",
+ "phpstan/phpstan": "^2.0"
+ },
+ "bin": [
+ "bin/sail"
+ ],
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Laravel\\Sail\\SailServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Sail\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Docker files for running a basic Laravel application.",
+ "keywords": [
+ "docker",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/sail/issues",
+ "source": "https://github.com/laravel/sail"
+ },
+ "time": "2026-02-06T12:16:02+00:00"
+ },
+ {
+ "name": "mockery/mockery",
+ "version": "1.6.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+ "shasum": ""
+ },
+ "require": {
+ "hamcrest/hamcrest-php": "^2.0.1",
+ "lib-pcre": ">=7.0",
+ "php": ">=7.3"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5 || ^9.6.17",
+ "symplify/easy-coding-standard": "^12.1.14"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "library/helpers.php",
+ "library/Mockery.php"
+ ],
+ "psr-4": {
+ "Mockery\\": "library/Mockery"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Pádraic Brady",
+ "email": "padraic.brady@gmail.com",
+ "homepage": "https://github.com/padraic",
+ "role": "Author"
+ },
+ {
+ "name": "Dave Marshall",
+ "email": "dave.marshall@atstsolutions.co.uk",
+ "homepage": "https://davedevelopment.co.uk",
+ "role": "Developer"
+ },
+ {
+ "name": "Nathanael Esayeas",
+ "email": "nathanael.esayeas@protonmail.com",
+ "homepage": "https://github.com/ghostwriter",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Mockery is a simple yet flexible PHP mock object framework",
+ "homepage": "https://github.com/mockery/mockery",
+ "keywords": [
+ "BDD",
+ "TDD",
+ "library",
+ "mock",
+ "mock objects",
+ "mockery",
+ "stub",
+ "test",
+ "test double",
+ "testing"
+ ],
+ "support": {
+ "docs": "https://docs.mockery.io/",
+ "issues": "https://github.com/mockery/mockery/issues",
+ "rss": "https://github.com/mockery/mockery/releases.atom",
+ "security": "https://github.com/mockery/mockery/security/advisories",
+ "source": "https://github.com/mockery/mockery"
+ },
+ "time": "2024-05-16T03:13:13+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.13.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-01T08:46:24+00:00"
+ },
+ {
+ "name": "nunomaduro/collision",
+ "version": "v8.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nunomaduro/collision.git",
+ "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/a1ed3fa530fd60bc515f9303e8520fcb7d4bd935",
+ "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935",
+ "shasum": ""
+ },
+ "require": {
+ "filp/whoops": "^2.18.4",
+ "nunomaduro/termwind": "^2.4.0",
+ "php": "^8.2.0",
+ "symfony/console": "^7.4.4 || ^8.0.4"
+ },
+ "conflict": {
+ "laravel/framework": "<11.48.0 || >=14.0.0",
+ "phpunit/phpunit": "<11.5.50 || >=14.0.0"
+ },
+ "require-dev": {
+ "brianium/paratest": "^7.8.5",
+ "larastan/larastan": "^3.9.2",
+ "laravel/framework": "^11.48.0 || ^12.52.0",
+ "laravel/pint": "^1.27.1",
+ "orchestra/testbench-core": "^9.12.0 || ^10.9.0",
+ "pestphp/pest": "^3.8.5 || ^4.4.1 || ^5.0.0",
+ "sebastian/environment": "^7.2.1 || ^8.0.3 || ^9.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-8.x": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "./src/Adapters/Phpunit/Autoload.php"
+ ],
+ "psr-4": {
+ "NunoMaduro\\Collision\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "Cli error handling for console/command-line PHP applications.",
+ "keywords": [
+ "artisan",
+ "cli",
+ "command-line",
+ "console",
+ "dev",
+ "error",
+ "handling",
+ "laravel",
+ "laravel-zero",
+ "php",
+ "symfony"
+ ],
+ "support": {
+ "issues": "https://github.com/nunomaduro/collision/issues",
+ "source": "https://github.com/nunomaduro/collision"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/paypalme/enunomaduro",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/nunomaduro",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/nunomaduro",
+ "type": "patreon"
+ }
+ ],
+ "time": "2026-02-17T17:33:08+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "11.0.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56",
+ "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.2",
+ "phpunit/php-file-iterator": "^5.1.0",
+ "phpunit/php-text-template": "^4.0.1",
+ "sebastian/code-unit-reverse-lookup": "^4.0.1",
+ "sebastian/complexity": "^4.0.1",
+ "sebastian/environment": "^7.2.1",
+ "sebastian/lines-of-code": "^3.0.1",
+ "sebastian/version": "^5.0.2",
+ "theseer/tokenizer": "^1.3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.5.46"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "11.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-24T07:01:01+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "5.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903",
+ "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-02T13:52:54+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "5.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2",
+ "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^11.0"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:07:44+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964",
+ "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:08:43+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "7.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3",
+ "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "security": "https://github.com/sebastianbergmann/php-timer/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:09:35+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "11.5.55",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00",
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.13.4",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=8.2",
+ "phpunit/php-code-coverage": "^11.0.12",
+ "phpunit/php-file-iterator": "^5.1.1",
+ "phpunit/php-invoker": "^5.0.1",
+ "phpunit/php-text-template": "^4.0.1",
+ "phpunit/php-timer": "^7.0.1",
+ "sebastian/cli-parser": "^3.0.2",
+ "sebastian/code-unit": "^3.0.3",
+ "sebastian/comparator": "^6.3.3",
+ "sebastian/diff": "^6.0.2",
+ "sebastian/environment": "^7.2.1",
+ "sebastian/exporter": "^6.3.2",
+ "sebastian/global-state": "^7.0.2",
+ "sebastian/object-enumerator": "^6.0.1",
+ "sebastian/recursion-context": "^6.0.3",
+ "sebastian/type": "^5.1.3",
+ "sebastian/version": "^5.0.2",
+ "staabm/side-effects-detector": "^1.0.5"
+ },
+ "suggest": {
+ "ext-soap": "To be able to generate mocks based on WSDL files"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "11.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-18T12:37:06+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180",
+ "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:41:36+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64",
+ "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "security": "https://github.com/sebastianbergmann/code-unit/security/policy",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-03-19T07:56:08+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "183a9b2632194febd219bb9246eee421dad8d45e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e",
+ "reference": "183a9b2632194febd219bb9246eee421dad8d45e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:45:54+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "6.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9",
+ "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.2",
+ "sebastian/diff": "^6.0",
+ "sebastian/exporter": "^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.4"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-24T09:26:40+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "ee41d384ab1906c68852636b6de493846e13e5a0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0",
+ "reference": "ee41d384ab1906c68852636b6de493846e13e5a0",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:49:50+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "6.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:53:05+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "7.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4",
+ "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "https://github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/environment",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-05-21T11:55:47+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "6.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74",
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=8.2",
+ "sebastian/recursion-context": "^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-09-24T06:12:51+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "7.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "3be331570a721f9a4b5917f4209773de17f747d7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7",
+ "reference": "3be331570a721f9a4b5917f4209773de17f747d7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "sebastian/object-reflector": "^4.0",
+ "sebastian/recursion-context": "^6.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:57:36+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a",
+ "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:58:38+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "6.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "f5b498e631a74204185071eb41f33f38d64608aa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa",
+ "reference": "f5b498e631a74204185071eb41f33f38d64608aa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "sebastian/object-reflector": "^4.0",
+ "sebastian/recursion-context": "^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:00:13+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9",
+ "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "security": "https://github.com/sebastianbergmann/object-reflector/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:01:32+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "6.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-13T04:42:22+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "5.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "security": "https://github.com/sebastianbergmann/type/security/policy",
+ "source": "https://github.com/sebastianbergmann/type/tree/5.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-09T06:55:48+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "5.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874",
+ "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "security": "https://github.com/sebastianbergmann/version/security/policy",
+ "source": "https://github.com/sebastianbergmann/version/tree/5.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-10-09T05:16:32+00:00"
+ },
+ {
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.6",
+ "phpunit/phpunit": "^9.6.21",
+ "symfony/var-dumper": "^5.4.43",
+ "tomasvotruba/type-coverage": "1.0.0",
+ "tomasvotruba/unused-public": "1.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A static analysis tool to detect side effects in PHP code",
+ "keywords": [
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/staabm/side-effects-detector/issues",
+ "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/staabm",
+ "type": "github"
+ }
+ ],
+ "time": "2024-10-20T05:08:20+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "58751048de17bae71c5aa0d13cb19d79bca26391"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/58751048de17bae71c5aa0d13cb19d79bca26391",
+ "reference": "58751048de17bae71c5aa0d13cb19d79bca26391",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "symfony/console": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0"
+ },
+ "bin": [
+ "Resources/bin/yaml-lint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ },
+ "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": "Loads and dumps YAML files",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/yaml/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-09T09:33:46+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2025-11-17T20:03:58+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {},
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^8.2"
+ },
+ "platform-dev": {},
+ "plugin-api-version": "2.9.0"
+}
diff --git a/config/app.php b/config/app.php
index 28067a4d8..9153e524f 100644
--- a/config/app.php
+++ b/config/app.php
@@ -1,8 +1,5 @@
env('APP_NAME', 'My Application'),
-
- 'application_domain' => env('APPLICATION_DOMAIN', null),
+ 'name' => env('APP_NAME', 'Laravel'),
/*
|--------------------------------------------------------------------------
@@ -26,7 +22,7 @@ return [
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
- | services your application utilizes. Set this in your ".env" file.
+ | services the application utilizes. Set this in your ".env" file.
|
*/
@@ -43,29 +39,7 @@ return [
|
*/
- 'debug' => env('APP_DEBUG', false),
-
- /*
- |--------------------------------------------------------------------------
- | Debug Blacklist
- |--------------------------------------------------------------------------
- |
- | When an exception is uncaught and the APP_DEBUG environment variable
- | is true, the debug page will show all environment variables and
- | their contents. In some cases you may want to obscure certain
- | variables. You may do this by updating debug_blacklist.
- |
- */
-
- 'debug_blacklist' => [
- '_COOKIE' => env('APP_ENV', 'production') === 'production' ? array_keys($_COOKIE) : [],
-
- '_SERVER' => env('APP_ENV', 'production') === 'production' ? array_keys($_SERVER) : [],
-
- '_ENV' => env('APP_ENV', 'production') === 'production' ? array_keys($_ENV) : [],
-
- '_POST' => env('APP_ENV', 'production') === 'production' ? array_keys($_POST) : [],
- ],
+ 'debug' => (bool) env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
@@ -74,11 +48,11 @@ return [
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
- | your application so that it is used when running Artisan tasks.
+ | the application so that it's available within Artisan commands.
|
*/
- 'url' => env('APP_URL', '/'),
+ 'url' => env('APP_URL', 'http://localhost'),
/*
|--------------------------------------------------------------------------
@@ -86,12 +60,12 @@ return [
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
- | will be used by the PHP date and date-time functions. We have gone
- | ahead and set this to a sensible default for you out of the box.
+ | will be used by the PHP date and date-time functions. The timezone
+ | is set to "UTC" by default as it is suitable for most use cases.
|
*/
- 'timezone' => env('APP_TIMEZONE', 'UTC'),
+ 'timezone' => 'UTC',
/*
|--------------------------------------------------------------------------
@@ -99,182 +73,56 @@ return [
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
- | by the translation service provider. You are free to set this value
- | to any of the locales which will be supported by the application.
+ | by Laravel's translation / localization methods. This option can be
+ | set to any locale for which you plan to have translation strings.
|
*/
'locale' => env('APP_LOCALE', 'en'),
- /*
- |--------------------------------------------------------------------------
- | Application Fallback Locale
- |--------------------------------------------------------------------------
- |
- | The fallback locale determines the locale to use when the current one
- | is not available. You may change the value to correspond to any of
- | the language folders that are provided through your application.
- |
- */
+ 'available_locales' => ['en', 'tr', 'ar', 'zh', 'es', 'fr', 'de', 'pt', 'ru', 'ja'],
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
+ 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
+
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
- | This key is used by the Illuminate encrypter service and should be set
- | to a random, 32 character string, otherwise these encrypted strings
- | will not be safe. Please do this before deploying an application!
+ | This key is utilized by Laravel's encryption services and should be set
+ | to a random, 32 character string to ensure that all encrypted values
+ | are secure. You should do this prior to deploying the application.
|
*/
- 'key' => env('APP_KEY', 'ThisKeyWillGeneratedForYouLater!'),
-
'cipher' => 'AES-256-CBC',
- /*
- |--------------------------------------------------------------------------
- | Logging Configuration
- |--------------------------------------------------------------------------
- |
- | Here you may configure the log settings for your application. Out of
- | the box, Laravel uses the Monolog PHP logging library. This gives
- | you a variety of powerful log handlers / formatters to utilize.
- |
- | Available Settings: "single", "daily", "syslog", "errorlog"
- |
- */
+ 'key' => env('APP_KEY'),
- 'log' => env('APP_LOG', 'daily'),
-
- 'log_level' => env('APP_LOG_LEVEL', 'debug'),
-
- /*
- |--------------------------------------------------------------------------
- | Autoloaded Service Providers
- |--------------------------------------------------------------------------
- |
- | The service providers listed here will be automatically loaded on the
- | request to your application. Feel free to add your own services to
- | this array to grant expanded functionality to your applications.
- |
- */
-
- 'providers' => [
-
- /*
- * Laravel Framework Service Providers...
- */
- Illuminate\Auth\AuthServiceProvider::class,
- Illuminate\Broadcasting\BroadcastServiceProvider::class,
- Illuminate\Bus\BusServiceProvider::class,
- Illuminate\Cache\CacheServiceProvider::class,
- Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
- Illuminate\Cookie\CookieServiceProvider::class,
- Illuminate\Database\DatabaseServiceProvider::class,
- Illuminate\Encryption\EncryptionServiceProvider::class,
- Illuminate\Filesystem\FilesystemServiceProvider::class,
- Illuminate\Foundation\Providers\FoundationServiceProvider::class,
- Illuminate\Hashing\HashServiceProvider::class,
- Illuminate\Mail\MailServiceProvider::class,
- Illuminate\Notifications\NotificationServiceProvider::class,
- Illuminate\Pagination\PaginationServiceProvider::class,
- Illuminate\Pipeline\PipelineServiceProvider::class,
- Illuminate\Queue\QueueServiceProvider::class,
- Illuminate\Redis\RedisServiceProvider::class,
- Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
- Illuminate\Session\SessionServiceProvider::class,
- Illuminate\Translation\TranslationServiceProvider::class,
- Illuminate\Validation\ValidationServiceProvider::class,
- Illuminate\View\ViewServiceProvider::class,
-
- /*
- * Package Service Providers...
- */
- //Laravel\Tinker\TinkerServiceProvider::class,
-
- /*
- * Application Service Providers...
- */
- App\Providers\AppServiceProvider::class,
- App\Providers\AuthServiceProvider::class,
- App\Providers\BroadcastServiceProvider::class,
- App\Providers\EventServiceProvider::class,
- App\Providers\RouteServiceProvider::class,
-
- /*
- * Streams Service Provider
- */
- Anomaly\Streams\Platform\StreamsServiceProvider::class,
- Sentry\Laravel\ServiceProvider::class,
- \Fruitcake\Cors\CorsServiceProvider::class
+ 'previous_keys' => [
+ ...array_filter(
+ explode(',', (string) env('APP_PREVIOUS_KEYS', ''))
+ ),
],
/*
|--------------------------------------------------------------------------
- | Class Aliases
+ | Maintenance Mode Driver
|--------------------------------------------------------------------------
|
- | This array of class aliases will be registered when this application
- | is started. However, feel free to register as many as you wish as
- | the aliases are "lazy" loaded so they don't hinder performance.
+ | These configuration options determine the driver used to determine and
+ | manage Laravel's "maintenance mode" status. The "cache" driver will
+ | allow maintenance mode to be controlled across multiple machines.
+ |
+ | Supported drivers: "file", "cache"
|
*/
- 'aliases' => [
-
- 'App' => Illuminate\Support\Facades\App::class,
- 'Arr' => Illuminate\Support\Arr::class,
- 'Artisan' => Illuminate\Support\Facades\Artisan::class,
- 'Auth' => Illuminate\Support\Facades\Auth::class,
- 'Blade' => Illuminate\Support\Facades\Blade::class,
- 'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
- 'Bus' => Illuminate\Support\Facades\Bus::class,
- 'Cache' => Illuminate\Support\Facades\Cache::class,
- 'Config' => Illuminate\Support\Facades\Config::class,
- 'Cookie' => Illuminate\Support\Facades\Cookie::class,
- 'Crypt' => Illuminate\Support\Facades\Crypt::class,
- 'DB' => Illuminate\Support\Facades\DB::class,
- 'Eloquent' => Illuminate\Database\Eloquent\Model::class,
- 'Event' => Illuminate\Support\Facades\Event::class,
- 'File' => Illuminate\Support\Facades\File::class,
- 'Gate' => Illuminate\Support\Facades\Gate::class,
- 'Hash' => Illuminate\Support\Facades\Hash::class,
- 'Lang' => Illuminate\Support\Facades\Lang::class,
- 'Log' => Illuminate\Support\Facades\Log::class,
- 'Mail' => Illuminate\Support\Facades\Mail::class,
- 'Notification' => Illuminate\Support\Facades\Notification::class,
- 'Password' => Illuminate\Support\Facades\Password::class,
- 'Queue' => Illuminate\Support\Facades\Queue::class,
- 'Redirect' => Illuminate\Support\Facades\Redirect::class,
- 'Redis' => Illuminate\Support\Facades\Redis::class,
- 'Request' => Illuminate\Support\Facades\Request::class,
- 'Response' => Illuminate\Support\Facades\Response::class,
- 'Route' => Illuminate\Support\Facades\Route::class,
- 'Schema' => Illuminate\Support\Facades\Schema::class,
- 'Session' => Illuminate\Support\Facades\Session::class,
- 'Storage' => Illuminate\Support\Facades\Storage::class,
- 'Str' => Illuminate\Support\Str::class,
- 'URL' => Illuminate\Support\Facades\URL::class,
- 'Validator' => Illuminate\Support\Facades\Validator::class,
- 'View' => Illuminate\Support\Facades\View::class,
- 'Sentry' => Sentry\Laravel\Facade::class,
-
-
- /**
- * Todo
- * 30.11.2022
- * It has been added for the use of 'with' in the PyroCMS Users Model file.
- * Translate(trans) function does not accept nested arrays.
- */
- 'Anomaly\UsersModule\User\Notification\ActivateYourAccount' => \App\Notification\ActivateYourAccount::class,
- 'Anomaly\UsersModule\User\Notification\PasswordInvalidated' => \App\Notification\PasswordInvalidated::class,
- 'Anomaly\UsersModule\User\Notification\ResetYourPassword' => \App\Notification\ResetYourPassword::class,
- 'Anomaly\UsersModule\User\Notification\UserHasBeenActivated' => \App\Notification\UserHasBeenActivated::class,
- 'Anomaly\UsersModule\User\Notification\UserHasRegistered' => \App\Notification\UserHasRegistered::class,
- 'Anomaly\UsersModule\User\Notification\UserPendingActivation' => \App\Notification\UserPendingActivation::class,
-
+ 'maintenance' => [
+ 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
+ 'store' => env('APP_MAINTENANCE_STORE', 'database'),
],
+
];
diff --git a/config/auth.php b/config/auth.php
index b5a94744d..7d1eb0de5 100644
--- a/config/auth.php
+++ b/config/auth.php
@@ -7,15 +7,15 @@ return [
| Authentication Defaults
|--------------------------------------------------------------------------
|
- | This option controls the default authentication "guard" and password
- | reset options for your application. You may change these defaults
+ | This option defines the default authentication "guard" and password
+ | reset "broker" for your application. You may change these values
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
- 'guard' => 'web',
- 'passwords' => 'users_users',
+ 'guard' => env('AUTH_GUARD', 'web'),
+ 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
],
/*
@@ -25,24 +25,19 @@ return [
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
- | here which uses session storage and the Eloquent user provider.
+ | which utilizes session storage plus the Eloquent user provider.
|
- | All authentication drivers have a user provider. This defines how the
+ | All authentication guards have a user provider, which defines how the
| users are actually retrieved out of your database or other storage
- | mechanisms used by this application to persist your user's data.
+ | system used by the application. Typically, Eloquent is utilized.
|
- | Supported: "session", "token"
+ | Supported: "session"
|
*/
'guards' => [
'web' => [
- 'driver' => 'session',
- 'provider' => 'users',
- ],
-
- 'api' => [
- 'driver' => 'token',
+ 'driver' => 'session',
'provider' => 'users',
],
],
@@ -52,12 +47,12 @@ return [
| User Providers
|--------------------------------------------------------------------------
|
- | All authentication drivers have a user provider. This defines how the
+ | All authentication guards have a user provider, which defines how the
| users are actually retrieved out of your database or other storage
- | mechanisms used by this application to persist your user's data.
+ | system used by the application. Typically, Eloquent is utilized.
|
| If you have multiple user tables or models you may configure multiple
- | sources which represent each model / table. These sources may then
+ | providers to represent the model / table. These providers may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
@@ -67,7 +62,7 @@ return [
'providers' => [
'users' => [
'driver' => 'eloquent',
- 'model' => Anomaly\UsersModule\User\UserModel::class,
+ 'model' => env('AUTH_MODEL', App\Models\User::class),
],
// 'users' => [
@@ -81,26 +76,40 @@ return [
| Resetting Passwords
|--------------------------------------------------------------------------
|
- | Here you may set the options for resetting passwords including the view
- | that is your password reset e-mail. You may also set the name of the
- | table that maintains all of the reset tokens for your application.
+ | These configuration options specify the behavior of Laravel's password
+ | reset functionality, including the table utilized for token storage
+ | and the user provider that is invoked to actually retrieve users.
|
- | You may specify multiple password reset configurations if you have more
- | than one user table or model in the application and you want to have
- | separate password reset settings based on the specific user types.
- |
- | The expire time is the number of minutes that the reset token should be
+ | The expiry time is the number of minutes that each reset token will be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
+ | The throttle setting is the number of seconds a user must wait before
+ | generating more password reset tokens. This prevents the user from
+ | quickly generating a very large amount of password reset tokens.
+ |
*/
'passwords' => [
'users' => [
'provider' => 'users',
- 'table' => 'password_resets',
- 'expire' => 60,
+ 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
+ 'expire' => 60,
+ 'throttle' => 60,
],
],
+ /*
+ |--------------------------------------------------------------------------
+ | Password Confirmation Timeout
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define the number of seconds before a password confirmation
+ | window expires and users are asked to re-enter their password via the
+ | confirmation screen. By default, the timeout lasts for three hours.
+ |
+ */
+
+ 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
+
];
diff --git a/config/broadcasting.php b/config/broadcasting.php
deleted file mode 100644
index 2c599d6b8..000000000
--- a/config/broadcasting.php
+++ /dev/null
@@ -1,58 +0,0 @@
- env('BROADCAST_DRIVER', 'null'),
-
- /*
- |--------------------------------------------------------------------------
- | Broadcast Connections
- |--------------------------------------------------------------------------
- |
- | Here you may define all of the broadcast connections that will be used
- | to broadcast events to other systems or over websockets. Samples of
- | each available type of connection are provided inside this array.
- |
- */
-
- 'connections' => [
-
- 'pusher' => [
- 'driver' => 'pusher',
- 'key' => env('PUSHER_APP_KEY'),
- 'secret' => env('PUSHER_APP_SECRET'),
- 'app_id' => env('PUSHER_APP_ID'),
- 'options' => [
- 'cluster' => env('PUSHER_APP_CLUSTER'),
- 'useTLS' => env('PUSHER_TLS', true)
- ],
- ],
- 'redis' => [
- 'driver' => 'redis',
- 'connection' => 'default',
- ],
-
- 'log' => [
- 'driver' => 'log',
- ],
-
- 'null' => [
- 'driver' => 'null',
- ],
-
- ],
-
-];
diff --git a/config/cache.php b/config/cache.php
index 1d3de874c..b32aead25 100644
--- a/config/cache.php
+++ b/config/cache.php
@@ -1,5 +1,7 @@
env('CACHE_DRIVER', 'file'),
+ 'default' => env('CACHE_STORE', 'database'),
/*
|--------------------------------------------------------------------------
@@ -26,27 +26,31 @@ return [
| well as their drivers. You may even define multiple stores for the
| same cache driver to group types of items stored in your caches.
|
+ | Supported drivers: "array", "database", "file", "memcached",
+ | "redis", "dynamodb", "octane",
+ | "failover", "null"
+ |
*/
'stores' => [
- 'apc' => [
- 'driver' => 'apc',
- ],
-
'array' => [
'driver' => 'array',
+ 'serialize' => false,
],
'database' => [
'driver' => 'database',
- 'table' => 'cache',
- 'connection' => null,
+ 'connection' => env('DB_CACHE_CONNECTION'),
+ 'table' => env('DB_CACHE_TABLE', 'cache'),
+ 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
+ 'lock_table' => env('DB_CACHE_LOCK_TABLE'),
],
'file' => [
'driver' => 'file',
- 'path' => storage_path('framework/cache'),
+ 'path' => storage_path('framework/cache/data'),
+ 'lock_path' => storage_path('framework/cache/data'),
],
'memcached' => [
@@ -57,7 +61,7 @@ return [
env('MEMCACHED_PASSWORD'),
],
'options' => [
- // Memcached::OPT_CONNECT_TIMEOUT => 2000,
+ // Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [
[
@@ -70,7 +74,29 @@ return [
'redis' => [
'driver' => 'redis',
- 'connection' => 'default',
+ 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
+ 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
+ ],
+
+ 'dynamodb' => [
+ 'driver' => 'dynamodb',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
+ 'endpoint' => env('DYNAMODB_ENDPOINT'),
+ ],
+
+ 'octane' => [
+ 'driver' => 'octane',
+ ],
+
+ 'failover' => [
+ 'driver' => 'failover',
+ 'stores' => [
+ 'database',
+ 'array',
+ ],
],
],
@@ -80,12 +106,12 @@ return [
| Cache Key Prefix
|--------------------------------------------------------------------------
|
- | When utilizing a RAM based store such as APC or Memcached, there might
- | be other applications utilizing the same cache. So, we'll specify a
- | value to get prefixed to all our keys so we can avoid collisions.
+ | When utilizing the APC, database, memcached, Redis, and DynamoDB cache
+ | stores, there might be other applications using the same cache. For
+ | that reason, you may prefix every cache key to avoid collisions.
|
*/
- 'prefix' => 'laravel',
+ 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),
];
diff --git a/config/compile.php b/config/compile.php
deleted file mode 100644
index 0071227aa..000000000
--- a/config/compile.php
+++ /dev/null
@@ -1,35 +0,0 @@
- [
- //
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Compiled File Providers
- |--------------------------------------------------------------------------
- |
- | Here you may list service providers which define a "compiles" function
- | that returns additional files that should be compiled, providing an
- | easy way to get common files from any packages you are utilizing.
- |
- */
-
- 'providers' => [
- 'Anomaly\Streams\Platform\StreamsCompilerProvider'
- ],
-
-];
diff --git a/config/cors.php b/config/cors.php
deleted file mode 100644
index 684f5e8aa..000000000
--- a/config/cors.php
+++ /dev/null
@@ -1,24 +0,0 @@
- ['*'],
- 'allowed_methods' => ['*'],
- 'allowed_origins' => ['*'],
- 'allowed_origins_patterns' => [],
- 'allowed_headers' => ['*'],
- 'exposed_headers' => false,
- 'max_age' => false,
- 'supports_credentials' => false,
-
-];
\ No newline at end of file
diff --git a/config/database.php b/config/database.php
index 7a8af1720..df933e7f1 100644
--- a/config/database.php
+++ b/config/database.php
@@ -1,82 +1,116 @@
PDO::FETCH_OBJ,
-
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
- | to use as your default connection for all database work. Of course
- | you may use many connections at once using the Database library.
+ | to use as your default connection for database operations. This is
+ | the connection which will be utilized unless another connection
+ | is explicitly specified when you execute a query / statement.
|
*/
- 'default' => env('DB_CONNECTION', 'mysql'),
+ 'default' => env('DB_CONNECTION', 'sqlite'),
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
- | Here are each of the database connections setup for your application.
- | Of course, examples of configuring each database platform that is
- | supported by Laravel is shown below to make development simple.
- |
- |
- | All database work in Laravel is done through the PHP PDO facilities
- | so make sure you have the driver for your particular database of
- | choice installed on your machine before you begin development.
+ | Below are all of the database connections defined for your application.
+ | An example configuration is provided for each database system which
+ | is supported by Laravel. You're free to add / remove connections.
|
*/
'connections' => [
'sqlite' => [
- 'driver' => 'sqlite',
+ 'driver' => 'sqlite',
+ 'url' => env('DB_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
- 'prefix' => env('DB_PREFIX', ''),
+ 'prefix' => '',
+ 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
+ 'busy_timeout' => null,
+ 'journal_mode' => null,
+ 'synchronous' => null,
+ 'transaction_mode' => 'DEFERRED',
],
'mysql' => [
- 'driver' => 'mysql',
- 'host' => env('DB_HOST', 'localhost'),
- 'port' => env('DB_PORT', '3306'),
- 'database' => env('DB_DATABASE', 'forge'),
- 'username' => env('DB_USERNAME', 'forge'),
- 'password' => env('DB_PASSWORD', ''),
- 'charset' => 'utf8',
- 'collation' => env('DB_COLLATION', 'utf8_unicode_ci'),
- 'prefix' => env('DB_PREFIX', ''),
- 'strict' => false,
- 'engine' => env('DB_ENGINE'),
+ 'driver' => 'mysql',
+ 'url' => env('DB_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '3306'),
+ 'database' => env('DB_DATABASE', 'laravel'),
+ 'username' => env('DB_USERNAME', 'root'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'charset' => env('DB_CHARSET', 'utf8mb4'),
+ 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => true,
+ 'engine' => null,
+ 'options' => extension_loaded('pdo_mysql') ? array_filter([
+ (PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
+ ]) : [],
+ ],
+
+ 'mariadb' => [
+ 'driver' => 'mariadb',
+ 'url' => env('DB_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '3306'),
+ 'database' => env('DB_DATABASE', 'laravel'),
+ 'username' => env('DB_USERNAME', 'root'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'charset' => env('DB_CHARSET', 'utf8mb4'),
+ 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => true,
+ 'engine' => null,
+ 'options' => extension_loaded('pdo_mysql') ? array_filter([
+ (PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
+ ]) : [],
],
'pgsql' => [
- 'driver' => 'pgsql',
- 'host' => env('DB_HOST', 'localhost'),
- 'port' => env('DB_PORT', '5432'),
- 'database' => env('DB_DATABASE', 'forge'),
- 'username' => env('DB_USERNAME', 'forge'),
+ 'driver' => 'pgsql',
+ 'url' => env('DB_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '5432'),
+ 'database' => env('DB_DATABASE', 'laravel'),
+ 'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
- 'charset' => 'utf8',
- 'prefix' => env('DB_PREFIX', ''),
- 'schema' => 'public',
- 'sslmode' => 'prefer',
+ 'charset' => env('DB_CHARSET', 'utf8'),
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'search_path' => 'public',
+ 'sslmode' => env('DB_SSLMODE', 'prefer'),
+ ],
+
+ 'sqlsrv' => [
+ 'driver' => 'sqlsrv',
+ 'url' => env('DB_URL'),
+ 'host' => env('DB_HOST', 'localhost'),
+ 'port' => env('DB_PORT', '1433'),
+ 'database' => env('DB_DATABASE', 'laravel'),
+ 'username' => env('DB_USERNAME', 'root'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => env('DB_CHARSET', 'utf8'),
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ // 'encrypt' => env('DB_ENCRYPT', 'yes'),
+ // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
],
],
@@ -88,11 +122,14 @@ return [
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
- | the migrations on disk haven't actually been run in the database.
+ | the migrations on disk haven't actually been run on the database.
|
*/
- 'migrations' => 'migrations',
+ 'migrations' => [
+ 'table' => 'migrations',
+ 'update_date_on_publish' => true,
+ ],
/*
|--------------------------------------------------------------------------
@@ -100,29 +137,47 @@ return [
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
- | provides a richer set of commands than a typical key-value systems
- | such as APC or Memcached. Laravel makes it easy to dig right in.
+ | provides a richer body of commands than a typical key-value system
+ | such as Memcached. You may define your connection settings here.
|
*/
'redis' => [
- 'cluster' => false,
'client' => env('REDIS_CLIENT', 'phpredis'),
+ 'options' => [
+ 'cluster' => env('REDIS_CLUSTER', 'redis'),
+ 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
+ 'persistent' => env('REDIS_PERSISTENT', false),
+ ],
+
'default' => [
- 'host' => env('REDIS_HOST', 'redis'),
+ 'url' => env('REDIS_URL'),
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
- 'port' => env('REDIS_PORT', 6379),
- 'database' => env('REDIS_DB', 0),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_DB', '0'),
+ 'max_retries' => env('REDIS_MAX_RETRIES', 3),
+ 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
+ 'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
+ 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
],
'cache' => [
+ 'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
- 'port' => env('REDIS_PORT', 6379),
- 'database' => env('REDIS_CACHE_DB', 1),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_CACHE_DB', '1'),
+ 'max_retries' => env('REDIS_MAX_RETRIES', 3),
+ 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
+ 'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
+ 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
],
+
],
];
diff --git a/config/debugbar.php b/config/debugbar.php
deleted file mode 100644
index 6531c20ec..000000000
--- a/config/debugbar.php
+++ /dev/null
@@ -1,159 +0,0 @@
- env('DEBUG_BAR', env('APP_DEBUG', true)),
-
- /*
- |--------------------------------------------------------------------------
- | Storage settings
- |--------------------------------------------------------------------------
- |
- | DebugBar stores data for session/ajax requests.
- | You can disable this, so the debugbar stores data in headers/session,
- | but this can cause problems with large data collectors.
- | By default, file storage (in the storage folder) is used. Redis and PDO
- | can also be used. For PDO, run the package migrations first.
- |
- */
-
- 'storage' => [
- 'enabled' => true,
- 'driver' => 'file', // redis, file, pdo
- 'path' => storage_path() . '/debugbar', // For file driver
- 'connection' => null, // Leave null for default connection (Redis/PDO)
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Vendors
- |--------------------------------------------------------------------------
- |
- | Vendor files are included by default, but can be set to false.
- | This can also be set to 'js' or 'css', to only include javascript or css vendor files.
- | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)
- | and for js: jquery and and highlight.js
- | So if you want syntax highlighting, set it to true.
- | jQuery is set to not conflict with existing jQuery scripts.
- |
- */
-
- 'include_vendors' => true,
-
- /*
- |--------------------------------------------------------------------------
- | Capture Ajax Requests
- |--------------------------------------------------------------------------
- |
- | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors],
- | you can use this option to disable sending the data through the headers.
- |
- */
-
- 'capture_ajax' => true,
-
- /*
- |--------------------------------------------------------------------------
- | DataCollectors
- |--------------------------------------------------------------------------
- |
- | Enable/disable DataCollectors
- |
- */
-
- 'collectors' => [
- 'phpinfo' => true, // Php version
- 'messages' => true, // Messages
- 'time' => true, // Time Datalogger
- 'memory' => true, // Memory usage
- 'exceptions' => true, // Exception displayer
- 'log' => true, // Logs from Monolog (merged in messages if enabled)
- 'db' => true, // Show database (PDO) queries and bindings
- 'views' => true, // Views with their data
- 'route' => true, // Current route information
- 'laravel' => false, // Laravel version and environment
- 'events' => false, // All events fired
- 'default_request' => false, // Regular or special Symfony request logger
- 'symfony_request' => true, // Only one can be enabled..
- 'mail' => true, // Catch mail messages
- 'logs' => false, // Add the latest log messages
- 'files' => false, // Show the included files
- 'config' => false, // Display config settings
- 'auth' => false, // Display Laravel authentication status
- 'session' => true, // Display session data
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Extra options
- |--------------------------------------------------------------------------
- |
- | Configure some DataCollectors
- |
- */
-
- 'options' => [
- 'auth' => [
- 'show_name' => false, // Also show the users name/email in the debugbar
- ],
- 'db' => [
- 'with_params' => true, // Render SQL with the parameters substituted
- 'timeline' => false, // Add the queries to the timeline
- 'backtrace' => false, // EXPERIMENTAL: Use a backtrace to find the origin of the query in your files.
- 'explain' => [ // EXPERIMENTAL: Show EXPLAIN output on queries
- 'enabled' => false,
- 'types' => ['SELECT'], // ['SELECT', 'INSERT', 'UPDATE', 'DELETE'); for MySQL 5.6.3+
- ],
- 'hints' => true, // Show hints for common mistakes
- ],
- 'mail' => [
- 'full_log' => false
- ],
- 'views' => [
- 'data' => false, //Note: Can slow down the application, because the data can be quite large..
- ],
- 'route' => [
- 'label' => true // show complete route on bar
- ],
- 'logs' => [
- 'file' => null
- ],
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Inject Debugbar in Response
- |--------------------------------------------------------------------------
- |
- | Usually, the debugbar is added just before , by listening to the
- | Response after the App is done. If you disable this, you have to add them
- | in your template yourself. See http://phpdebugbar.com/docs/rendering.html
- |
- */
-
- 'inject' => true,
-
- /*
- |--------------------------------------------------------------------------
- | DebugBar route prefix
- |--------------------------------------------------------------------------
- |
- | Sometimes you want to set route prefix to be used by DebugBar to load
- | its resources from. Usually the need comes from misconfigured web server or
- | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97
- |
- */
-
- 'route_prefix' => '_debugbar',
-
-];
diff --git a/config/filesystems.php b/config/filesystems.php
index 75b50022b..37d8fca4f 100644
--- a/config/filesystems.php
+++ b/config/filesystems.php
@@ -8,36 +8,23 @@ return [
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
- | by the framework. A "local" driver, as well as a variety of cloud
- | based drivers are available for your choosing. Just store away!
- |
- | Supported: "local", "ftp", "s3", "rackspace"
+ | by the framework. The "local" disk, as well as a variety of cloud
+ | based disks are available to your application for file storage.
|
*/
- 'default' => 'local',
-
- /*
- |--------------------------------------------------------------------------
- | Default Cloud Filesystem Disk
- |--------------------------------------------------------------------------
- |
- | Many applications store files both locally and in the cloud. For this
- | reason, you may specify a default "cloud" driver here. This driver
- | will be bound as the Cloud disk implementation in the container.
- |
- */
-
- 'cloud' => 's3',
+ 'default' => env('FILESYSTEM_DISK', 'local'),
/*
|--------------------------------------------------------------------------
| Filesystem Disks
|--------------------------------------------------------------------------
|
- | Here you may configure as many filesystem "disks" as you wish, and you
- | may even configure multiple disks of the same driver. Defaults have
- | been setup for each driver as an example of the required options.
+ | Below you may configure as many filesystem disks as necessary, and you
+ | may even configure multiple disks for the same driver. Examples for
+ | most supported storage drivers are configured here for reference.
+ |
+ | Supported drivers: "local", "ftp", "sftp", "s3"
|
*/
@@ -45,23 +32,49 @@ return [
'local' => [
'driver' => 'local',
- 'root' => storage_path('app'),
+ 'root' => storage_path('app/private'),
+ 'serve' => true,
+ 'throw' => false,
+ 'report' => false,
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
+ 'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage',
'visibility' => 'public',
+ 'throw' => false,
+ 'report' => false,
],
's3' => [
'driver' => 's3',
- 'key' => 'your-key',
- 'secret' => 'your-secret',
- 'region' => 'your-region',
- 'bucket' => 'your-bucket',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION'),
+ 'bucket' => env('AWS_BUCKET'),
+ 'url' => env('AWS_URL'),
+ 'endpoint' => env('AWS_ENDPOINT'),
+ 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
+ 'throw' => false,
+ 'report' => false,
],
],
+ /*
+ |--------------------------------------------------------------------------
+ | Symbolic Links
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the symbolic links that will be created when the
+ | `storage:link` Artisan command is executed. The array keys should be
+ | the locations of the links and the values should be their targets.
+ |
+ */
+
+ 'links' => [
+ public_path('storage') => storage_path('app/public'),
+ ],
+
];
diff --git a/config/httpcache.php b/config/httpcache.php
deleted file mode 100644
index 7e43faee4..000000000
--- a/config/httpcache.php
+++ /dev/null
@@ -1,30 +0,0 @@
- env('HTTP_CACHE', true),
- 'esi' => false,
- 'cache_dir' => storage_path('httpcache'),
-
- /*
- |--------------------------------------------------------------------------
- | Extra options
- |--------------------------------------------------------------------------
- |
- | Configure the default HttpCache options. See for a list of options:
- | http://symfony.com/doc/current/book/http_cache.html#symfony2-reverse-proxy
- |
- */
- 'options' => [],
-
-];
diff --git a/config/image.php b/config/image.php
deleted file mode 100644
index b106809e2..000000000
--- a/config/image.php
+++ /dev/null
@@ -1,20 +0,0 @@
- 'gd'
-
-);
diff --git a/config/logging.php b/config/logging.php
index d09cd7d29..9e998a496 100644
--- a/config/logging.php
+++ b/config/logging.php
@@ -1,7 +1,9 @@
env('LOG_CHANNEL', 'stack'),
+ /*
+ |--------------------------------------------------------------------------
+ | Deprecations Log Channel
+ |--------------------------------------------------------------------------
+ |
+ | This option controls the log channel that should be used to log warnings
+ | regarding deprecated PHP and library features. This allows you to get
+ | your application ready for upcoming major versions of dependencies.
+ |
+ */
+
+ 'deprecations' => [
+ 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
+ 'trace' => env('LOG_DEPRECATIONS_TRACE', false),
+ ],
+
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
- | Here you may configure the log channels for your application. Out of
- | the box, Laravel uses the Monolog PHP logging library. This gives
- | you a variety of powerful log handlers / formatters to utilize.
+ | Here you may configure the log channels for your application. Laravel
+ | utilizes the Monolog PHP logging library, which includes a variety
+ | of powerful log handlers and formatters that you're free to use.
|
- | Available Drivers: "single", "daily", "slack", "syslog",
- | "errorlog", "monolog",
- | "custom", "stack"
+ | Available drivers: "single", "daily", "slack", "syslog",
+ | "errorlog", "monolog", "custom", "stack"
|
*/
'channels' => [
+
'stack' => [
'driver' => 'stack',
- 'channels' => ['daily'],
+ 'channels' => explode(',', (string) env('LOG_STACK', 'single')),
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
- 'level' => 'debug',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'replace_placeholders' => true,
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
- 'level' => 'debug',
- 'days' => 14,
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'days' => env('LOG_DAILY_DAYS', 14),
+ 'replace_placeholders' => true,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
- 'username' => 'Laravel Log',
- 'emoji' => ':boom:',
- 'level' => 'critical',
+ 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
+ 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
+ 'level' => env('LOG_LEVEL', 'critical'),
+ 'replace_placeholders' => true,
],
'papertrail' => [
'driver' => 'monolog',
- 'level' => 'debug',
- 'handler' => SyslogUdpHandler::class,
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
+ 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
],
+ 'processors' => [PsrLogMessageProcessor::class],
],
'stderr' => [
'driver' => 'monolog',
+ 'level' => env('LOG_LEVEL', 'debug'),
'handler' => StreamHandler::class,
- 'formatter' => env('LOG_STDERR_FORMATTER'),
- 'with' => [
+ 'handler_with' => [
'stream' => 'php://stderr',
],
+ 'formatter' => env('LOG_STDERR_FORMATTER'),
+ 'processors' => [PsrLogMessageProcessor::class],
],
'syslog' => [
'driver' => 'syslog',
- 'level' => 'debug',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
+ 'replace_placeholders' => true,
],
'errorlog' => [
'driver' => 'errorlog',
- 'level' => 'debug',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'replace_placeholders' => true,
],
+
+ 'null' => [
+ 'driver' => 'monolog',
+ 'handler' => NullHandler::class,
+ ],
+
+ 'emergency' => [
+ 'path' => storage_path('logs/laravel.log'),
+ ],
+
],
];
diff --git a/config/mail.php b/config/mail.php
index d4e0ef9f0..522b284b8 100644
--- a/config/mail.php
+++ b/config/mail.php
@@ -4,112 +4,115 @@ return [
/*
|--------------------------------------------------------------------------
- | Mail Driver
+ | Default Mailer
|--------------------------------------------------------------------------
|
- | Laravel supports both SMTP and PHP's "mail" function as drivers for the
- | sending of e-mail. You may specify which one you're using throughout
- | your application here. By default, Laravel is setup for SMTP mail.
- |
- | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill",
- | "ses", "sparkpost", "log"
+ | This option controls the default mailer that is used to send all email
+ | messages unless another mailer is explicitly specified when sending
+ | the message. All additional mailers can be configured within the
+ | "mailers" array. Examples of each type of mailer are provided.
|
*/
- 'driver' => env('MAIL_DRIVER', 'mail'),
+ 'default' => env('MAIL_MAILER', 'log'),
/*
|--------------------------------------------------------------------------
- | SMTP Host Address
+ | Mailer Configurations
|--------------------------------------------------------------------------
|
- | Here you may provide the host address of the SMTP server used by your
- | applications. A default option is provided that is compatible with
- | the Mailgun mail service which will provide reliable deliveries.
+ | Here you may configure all of the mailers used by your application plus
+ | their respective settings. Several examples have been configured for
+ | you and you are free to add your own as your application requires.
+ |
+ | Laravel supports a variety of mail "transport" drivers that can be used
+ | when delivering an email. You may specify which one you're using for
+ | your mailers below. You may also add additional mailers if needed.
+ |
+ | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
+ | "postmark", "resend", "log", "array",
+ | "failover", "roundrobin"
|
*/
- 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
+ 'mailers' => [
- /*
- |--------------------------------------------------------------------------
- | SMTP Host Port
- |--------------------------------------------------------------------------
- |
- | This is the SMTP port used by your application to deliver e-mails to
- | users of the application. Like the host we have set this value to
- | stay compatible with the Mailgun e-mail application by default.
- |
- */
+ 'smtp' => [
+ 'transport' => 'smtp',
+ 'scheme' => env('MAIL_SCHEME'),
+ 'url' => env('MAIL_URL'),
+ 'host' => env('MAIL_HOST', '127.0.0.1'),
+ 'port' => env('MAIL_PORT', 2525),
+ 'username' => env('MAIL_USERNAME'),
+ 'password' => env('MAIL_PASSWORD'),
+ 'timeout' => null,
+ 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
+ ],
- 'port' => env('MAIL_PORT', 587),
+ 'ses' => [
+ 'transport' => 'ses',
+ ],
+
+ 'postmark' => [
+ 'transport' => 'postmark',
+ // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
+ // 'client' => [
+ // 'timeout' => 5,
+ // ],
+ ],
+
+ 'resend' => [
+ 'transport' => 'resend',
+ ],
+
+ 'sendmail' => [
+ 'transport' => 'sendmail',
+ 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
+ ],
+
+ 'log' => [
+ 'transport' => 'log',
+ 'channel' => env('MAIL_LOG_CHANNEL'),
+ ],
+
+ 'array' => [
+ 'transport' => 'array',
+ ],
+
+ 'failover' => [
+ 'transport' => 'failover',
+ 'mailers' => [
+ 'smtp',
+ 'log',
+ ],
+ 'retry_after' => 60,
+ ],
+
+ 'roundrobin' => [
+ 'transport' => 'roundrobin',
+ 'mailers' => [
+ 'ses',
+ 'postmark',
+ ],
+ 'retry_after' => 60,
+ ],
+
+ ],
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
- | You may wish for all e-mails sent by your application to be sent from
- | the same address. Here, you may specify a name and address that is
- | used globally for all e-mails that are sent by your application.
+ | You may wish for all emails sent by your application to be sent from
+ | the same address. Here you may specify a name and address that is
+ | used globally for all emails that are sent by your application.
|
*/
'from' => [
- 'address' => env('FROM_ADDRESS', 'hello@example.com'),
- 'name' => env('FROM_NAME', 'Example'),
+ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
+ 'name' => env('MAIL_FROM_NAME', 'Example'),
],
- /*
- |--------------------------------------------------------------------------
- | E-Mail Encryption Protocol
- |--------------------------------------------------------------------------
- |
- | Here you may specify the encryption protocol that should be used when
- | the application send e-mail messages. A sensible default using the
- | transport layer security protocol should provide great security.
- |
- */
-
- 'encryption' => env('MAIL_ENCRYPTION', 'ssl'),
-
- /*
- |--------------------------------------------------------------------------
- | SMTP Server Username
- |--------------------------------------------------------------------------
- |
- | If your SMTP server requires a username for authentication, you should
- | set it here. This will get used to authenticate with your server on
- | connection. You may also set the "password" value below this one.
- |
- */
-
- 'username' => env('MAIL_USERNAME'),
-
- /*
- |--------------------------------------------------------------------------
- | SMTP Server Password
- |--------------------------------------------------------------------------
- |
- | Here you may set the password required by your SMTP server to send out
- | messages from your application. This will be given to the server on
- | connection so that the application will be able to send messages.
- |
- */
-
- 'password' => env('MAIL_PASSWORD'),
-
- /*
- |--------------------------------------------------------------------------
- | Sendmail System Path
- |--------------------------------------------------------------------------
- |
- | When using the "sendmail" driver to send e-mails, we will need to know
- | the path to where Sendmail lives on this server. A default path has
- | been provided here, which will work well on most of your systems.
- |
- */
-
- 'sendmail' => '/usr/sbin/sendmail -bs',
-
];
diff --git a/config/modules.php b/config/modules.php
new file mode 100644
index 000000000..9b627eefc
--- /dev/null
+++ b/config/modules.php
@@ -0,0 +1,282 @@
+ 'Modules',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Module Stubs
+ |--------------------------------------------------------------------------
+ |
+ | Default module stubs.
+ |
+ */
+ 'stubs' => [
+ 'enabled' => false,
+ 'path' => base_path('vendor/nwidart/laravel-modules/src/Commands/stubs'),
+ 'files' => [
+ 'routes/web' => 'routes/web.php',
+ 'routes/api' => 'routes/api.php',
+ 'views/index' => 'resources/views/index.blade.php',
+ 'views/master' => 'resources/views/layouts/master.blade.php',
+ 'scaffold/config' => 'config/config.php',
+ 'composer' => 'composer.json',
+ 'assets/js/app' => 'resources/assets/js/app.js',
+ 'assets/sass/app' => 'resources/assets/sass/app.scss',
+ 'vite' => 'vite.config.js',
+ 'package' => 'package.json',
+ ],
+ 'replacements' => [
+ 'routes/web' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME', 'MODULE_NAMESPACE', 'CONTROLLER_NAMESPACE'],
+ 'routes/api' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME', 'MODULE_NAMESPACE', 'CONTROLLER_NAMESPACE'],
+ 'vite' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME'],
+ 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME', 'MODULE_NAMESPACE', 'PROVIDER_NAMESPACE'],
+ 'views/index' => ['LOWER_NAME'],
+ 'views/master' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME'],
+ 'scaffold/config' => ['STUDLY_NAME'],
+ 'composer' => [
+ 'LOWER_NAME',
+ 'STUDLY_NAME',
+ 'VENDOR',
+ 'AUTHOR_NAME',
+ 'AUTHOR_EMAIL',
+ 'MODULE_NAMESPACE',
+ 'PROVIDER_NAMESPACE',
+ 'APP_FOLDER_NAME',
+ ],
+ ],
+ 'gitkeep' => true,
+ ],
+ 'paths' => [
+ /*
+ |--------------------------------------------------------------------------
+ | Modules path
+ |--------------------------------------------------------------------------
+ |
+ | This path is used to save the generated module.
+ | This path will also be added automatically to the list of scanned folders.
+ |
+ */
+ 'modules' => base_path('Modules'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Modules assets path
+ |--------------------------------------------------------------------------
+ |
+ | Here you may update the modules' assets path.
+ |
+ */
+ 'assets' => public_path('modules'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | The migrations' path
+ |--------------------------------------------------------------------------
+ |
+ | Where you run the 'module:publish-migration' command, where do you publish the
+ | the migration files?
+ |
+ */
+ 'migration' => base_path('database/migrations'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | The app path
+ |--------------------------------------------------------------------------
+ |
+ | app folder name
+ | for example can change it to 'src' or 'App'
+ */
+ 'app_folder' => '',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Generator path
+ |--------------------------------------------------------------------------
+ | Customise the paths where the folders will be generated.
+ | Setting the generate key to false will not generate that folder
+ */
+ 'generator' => [
+ // app/
+ 'actions' => ['path' => 'app/Actions', 'generate' => false],
+ 'casts' => ['path' => 'app/Casts', 'generate' => false],
+ 'channels' => ['path' => 'app/Broadcasting', 'generate' => false],
+ 'class' => ['path' => 'app/Classes', 'generate' => false],
+ 'command' => ['path' => 'app/Console', 'generate' => false],
+ 'component-class' => ['path' => 'app/View/Components', 'generate' => false],
+ 'emails' => ['path' => 'app/Emails', 'generate' => false],
+ 'event' => ['path' => 'app/Events', 'generate' => false],
+ 'enums' => ['path' => 'app/Enums', 'generate' => false],
+ 'exceptions' => ['path' => 'app/Exceptions', 'generate' => false],
+ 'jobs' => ['path' => 'app/Jobs', 'generate' => false],
+ 'helpers' => ['path' => 'app/Helpers', 'generate' => false],
+ 'interfaces' => ['path' => 'app/Interfaces', 'generate' => false],
+ 'listener' => ['path' => 'app/Listeners', 'generate' => false],
+ 'model' => ['path' => 'app/Models', 'generate' => false],
+ 'notifications' => ['path' => 'app/Notifications', 'generate' => false],
+ 'observer' => ['path' => 'app/Observers', 'generate' => false],
+ 'policies' => ['path' => 'app/Policies', 'generate' => false],
+ 'provider' => ['path' => 'app/Providers', 'generate' => true],
+ 'repository' => ['path' => 'app/Repositories', 'generate' => false],
+ 'resource' => ['path' => 'app/Transformers', 'generate' => false],
+ 'route-provider' => ['path' => 'app/Providers', 'generate' => true],
+ 'rules' => ['path' => 'app/Rules', 'generate' => false],
+ 'services' => ['path' => 'app/Services', 'generate' => false],
+ 'scopes' => ['path' => 'app/Models/Scopes', 'generate' => false],
+ 'traits' => ['path' => 'app/Traits', 'generate' => false],
+
+ // app/Http/
+ 'controller' => ['path' => 'app/Http/Controllers', 'generate' => true],
+ 'filter' => ['path' => 'app/Http/Middleware', 'generate' => false],
+ 'request' => ['path' => 'app/Http/Requests', 'generate' => false],
+
+ // config/
+ 'config' => ['path' => 'config', 'generate' => true],
+
+ // database/
+ 'factory' => ['path' => 'database/factories', 'generate' => true],
+ 'migration' => ['path' => 'database/migrations', 'generate' => true],
+ 'seeder' => ['path' => 'database/seeders', 'generate' => true],
+
+ // lang/
+ 'lang' => ['path' => 'lang', 'generate' => false],
+
+ // resource/
+ 'assets' => ['path' => 'resources/assets', 'generate' => true],
+ 'component-view' => ['path' => 'resources/views/components', 'generate' => false],
+ 'views' => ['path' => 'resources/views', 'generate' => true],
+
+ // routes/
+ 'routes' => ['path' => 'routes', 'generate' => true],
+
+ // tests/
+ 'test-feature' => ['path' => 'tests/Feature', 'generate' => true],
+ 'test-unit' => ['path' => 'tests/Unit', 'generate' => true],
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Auto Discover of Modules
+ |--------------------------------------------------------------------------
+ |
+ | Here you configure auto discover of module
+ | This is useful for simplify module providers.
+ |
+ */
+ 'auto-discover' => [
+ /*
+ |--------------------------------------------------------------------------
+ | Migrations
+ |--------------------------------------------------------------------------
+ |
+ | This option for register migration automatically.
+ |
+ */
+ 'migrations' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Translations
+ |--------------------------------------------------------------------------
+ |
+ | This option for register lang file automatically.
+ |
+ */
+ 'translations' => false,
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Package commands
+ |--------------------------------------------------------------------------
+ |
+ | Here you can define which commands will be visible and used in your
+ | application. You can add your own commands to merge section.
+ |
+ */
+ 'commands' => ConsoleServiceProvider::defaultCommands()
+ ->merge([
+ // New commands go here
+ ])->toArray(),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Scan Path
+ |--------------------------------------------------------------------------
+ |
+ | Here you define which folder will be scanned. By default will scan vendor
+ | directory. This is useful if you host the package in packagist website.
+ |
+ */
+ 'scan' => [
+ 'enabled' => false,
+ 'paths' => [
+ base_path('vendor/*/*'),
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Composer File Template
+ |--------------------------------------------------------------------------
+ |
+ | Here is the config for the composer.json file, generated by this package
+ |
+ */
+ 'composer' => [
+ 'vendor' => env('MODULE_VENDOR', 'nwidart'),
+ 'author' => [
+ 'name' => env('MODULE_AUTHOR_NAME', 'Nicolas Widart'),
+ 'email' => env('MODULE_AUTHOR_EMAIL', 'n.widart@gmail.com'),
+ ],
+ 'composer-output' => false,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Choose what laravel-modules will register as custom namespaces.
+ | Setting one to false will require you to register that part
+ | in your own Service Provider class.
+ |--------------------------------------------------------------------------
+ */
+ 'register' => [
+ 'translations' => true,
+ /**
+ * load files on boot or register method
+ */
+ 'files' => 'register',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Activators
+ |--------------------------------------------------------------------------
+ |
+ | You can define new types of activators here, file, database, etc. The only
+ | required parameter is 'class'.
+ | The file activator will store the activation status in storage/installed_modules
+ */
+ 'activators' => [
+ 'file' => [
+ 'class' => FileActivator::class,
+ 'statuses-file' => base_path('modules_statuses.json'),
+ ],
+ ],
+
+ 'activator' => 'file',
+];
diff --git a/config/queue.php b/config/queue.php
index b1574b399..79c2c0a23 100644
--- a/config/queue.php
+++ b/config/queue.php
@@ -7,24 +7,25 @@ return [
| Default Queue Connection Name
|--------------------------------------------------------------------------
|
- | Laravel's queue API supports an assortment of back-ends via a single
- | API, giving you convenient access to each back-end using the same
- | syntax for every one. Here you may define a default connection.
+ | Laravel's queue supports a variety of backends via a single, unified
+ | API, giving you convenient access to each backend using identical
+ | syntax for each. The default queue connection is defined below.
|
*/
- 'default' => env('QUEUE_CONNECTION', 'sync'),
+ 'default' => env('QUEUE_CONNECTION', 'database'),
/*
|--------------------------------------------------------------------------
| Queue Connections
|--------------------------------------------------------------------------
|
- | Here you may configure the connection information for each server that
- | is used by your application. A default configuration has been added
- | for each back-end shipped with Laravel. You are free to add more.
+ | Here you may configure the connection options for every queue backend
+ | used by your application. An example configuration is provided for
+ | each backend supported by Laravel. You're also free to add more.
|
- | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
+ | Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
+ | "deferred", "background", "failover", "null"
|
*/
@@ -36,17 +37,18 @@ return [
'database' => [
'driver' => 'database',
- 'table' => 'jobs',
- 'queue' => 'default',
- 'retry_after' => 90,
+ 'connection' => env('DB_QUEUE_CONNECTION'),
+ 'table' => env('DB_QUEUE_TABLE', 'jobs'),
+ 'queue' => env('DB_QUEUE', 'default'),
+ 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
'after_commit' => false,
],
'beanstalkd' => [
'driver' => 'beanstalkd',
- 'host' => 'localhost',
- 'queue' => 'default',
- 'retry_after' => 90,
+ 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
+ 'queue' => env('BEANSTALKD_QUEUE', 'default'),
+ 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
'block_for' => 0,
'after_commit' => false,
],
@@ -64,13 +66,45 @@ return [
'redis' => [
'driver' => 'redis',
- 'connection' => 'default',
+ 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
'queue' => env('REDIS_QUEUE', 'default'),
- 'retry_after' => 90,
+ 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
'block_for' => null,
'after_commit' => false,
],
+ 'deferred' => [
+ 'driver' => 'deferred',
+ ],
+
+ 'background' => [
+ 'driver' => 'background',
+ ],
+
+ 'failover' => [
+ 'driver' => 'failover',
+ 'connections' => [
+ 'database',
+ 'deferred',
+ ],
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Job Batching
+ |--------------------------------------------------------------------------
+ |
+ | The following options configure the database and table that store job
+ | batching information. These options can be updated to any database
+ | connection and table which has been defined by your application.
+ |
+ */
+
+ 'batching' => [
+ 'database' => env('DB_CONNECTION', 'sqlite'),
+ 'table' => 'job_batches',
],
/*
@@ -79,14 +113,16 @@ return [
|--------------------------------------------------------------------------
|
| These options configure the behavior of failed queue job logging so you
- | can control which database and table are used to store the jobs that
- | have failed. You may change them to any database / table you wish.
+ | can control how and where failed jobs are stored. Laravel ships with
+ | support for storing failed jobs in a simple file or in a database.
+ |
+ | Supported drivers: "database-uuids", "dynamodb", "file", "null"
|
*/
'failed' => [
- 'driver' => env('QUEUE_FAILED_DRIVER', 'database'),
- 'database' => env('DB_CONNECTION', 'mysql'),
+ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
+ 'database' => env('DB_CONNECTION', 'sqlite'),
'table' => 'failed_jobs',
],
diff --git a/config/scout.php b/config/scout.php
deleted file mode 100644
index 7e88c58fa..000000000
--- a/config/scout.php
+++ /dev/null
@@ -1,82 +0,0 @@
- env('SCOUT_DRIVER', 'search'),
-
- /*
- |--------------------------------------------------------------------------
- | Index Prefix
- |--------------------------------------------------------------------------
- |
- | Here you may specify a prefix that will be applied to all search index
- | names used by Scout. This prefix may be useful if you have multiple
- | "tenants" or applications sharing the same search infrastructure.
- |
- */
-
- 'prefix' => env('SCOUT_PREFIX', 'tntsearch'),
-
- /*
- |--------------------------------------------------------------------------
- | Queue Data Syncing
- |--------------------------------------------------------------------------
- |
- | This option allows you to control if the operations that sync your data
- | with your search engines are queued. When this is set to "true" then
- | all automatic data syncing will get queued for better performance.
- |
- */
-
- 'queue' => false,
-
- /*
- |--------------------------------------------------------------------------
- | Algolia Configuration
- |--------------------------------------------------------------------------
- |
- | Here you may configure your Algolia settings. Algolia is a cloud hosted
- | search engine which works great with Scout out of the box. Just plug
- | in your application ID and admin API key to get started searching.
- |
- */
-
- 'algolia' => [
- 'id' => env('ALGOLIA_APP_ID'),
- 'secret' => env('ALGOLIA_SECRET'),
- ],
-
- /*
- |--------------------------------------------------------------------------
- | TNT Configuration
- |--------------------------------------------------------------------------
- |
- | Here you may configure your TNT settings. TNT is the default search
- | indexing mechanism for the Streams Platform. TNT Search is a fully
- | featured full text search engine for PHP.
- |
- */
-
- 'tntsearch' => [
- 'fuzziness' => env('TNTSEARCH_FUZZINESS', false),
- 'fuzzy' => [
- 'prefix_length' => 2,
- 'max_expansions' => 10,
- 'distance' => 2,
- ],
- 'searchBoolean' => env('TNTSEARCH_BOOLEAN', true),
- ],
-];
diff --git a/config/sentry.php b/config/sentry.php
deleted file mode 100644
index 5cad88d2d..000000000
--- a/config/sentry.php
+++ /dev/null
@@ -1,35 +0,0 @@
- env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')),
-
- // capture release as git sha
- // 'release' => trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')),
-
- // When left empty or `null` the Laravel environment will be used
- 'environment' => env('SENTRY_ENVIRONMENT'),
-
- 'breadcrumbs' => [
- // Capture Laravel logs in breadcrumbs
- 'logs' => true,
-
- // Capture SQL queries in breadcrumbs
- 'sql_queries' => true,
-
- // Capture bindings on SQL queries logged in breadcrumbs
- 'sql_bindings' => true,
-
- // Capture queue job information in breadcrumbs
- 'queue_info' => true,
-
- // Capture command information in breadcrumbs
- 'command_info' => true,
- ],
-
- // @see: https://docs.sentry.io/error-reporting/configuration/?platform=php#send-default-pii
- 'send_default_pii' => false,
-
- 'traces_sample_rate' => (float)(env('SENTRY_TRACES_SAMPLE_RATE', 1)),
-
- 'controllers_base_namespace' => env('SENTRY_CONTROLLERS_BASE_NAMESPACE', 'App\\Http\\Controllers'),
-];
diff --git a/config/services.php b/config/services.php
index 4460f0ec2..6a90eb830 100644
--- a/config/services.php
+++ b/config/services.php
@@ -8,31 +8,31 @@ return [
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
- | as Stripe, Mailgun, SparkPost and others. This file provides a sane
- | default location for this type of information, allowing packages
- | to have a conventional place to find your various credentials.
+ | as Mailgun, Postmark, AWS and more. This file provides the de facto
+ | location for this type of information, allowing packages to have
+ | a conventional file to locate the various service credentials.
|
*/
- 'mailgun' => [
- 'domain' => env('MAILGUN_DOMAIN'),
- 'secret' => env('MAILGUN_SECRET'),
+ 'postmark' => [
+ 'key' => env('POSTMARK_API_KEY'),
+ ],
+
+ 'resend' => [
+ 'key' => env('RESEND_API_KEY'),
],
'ses' => [
- 'key' => env('SES_KEY'),
- 'secret' => env('SES_SECRET'),
- 'region' => 'us-east-1',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
- 'sparkpost' => [
- 'secret' => env('SPARKPOST_SECRET'),
- ],
-
- 'stripe' => [
- 'model' => App\User::class,
- 'key' => env('STRIPE_KEY'),
- 'secret' => env('STRIPE_SECRET'),
+ 'slack' => [
+ 'notifications' => [
+ 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
+ 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
+ ],
],
];
diff --git a/config/session.php b/config/session.php
index ace3ef0ef..5b541b755 100644
--- a/config/session.php
+++ b/config/session.php
@@ -1,5 +1,7 @@
env('SESSION_DRIVER', 'file'),
+ 'driver' => env('SESSION_DRIVER', 'database'),
/*
|--------------------------------------------------------------------------
@@ -25,13 +27,14 @@ return [
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
- | to immediately expire on the browser closing, set that option.
+ | to expire immediately when the browser is closed then you may
+ | indicate that via the expire_on_close configuration option.
|
*/
- 'lifetime' => 120,
+ 'lifetime' => (int) env('SESSION_LIFETIME', 120),
- 'expire_on_close' => false,
+ 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
/*
|--------------------------------------------------------------------------
@@ -39,21 +42,21 @@ return [
|--------------------------------------------------------------------------
|
| This option allows you to easily specify that all of your session data
- | should be encrypted before it is stored. All encryption will be run
- | automatically by Laravel and you can use the Session like normal.
+ | should be encrypted before it's stored. All encryption is performed
+ | automatically by Laravel and you may use the session like normal.
|
*/
- 'encrypt' => false,
+ 'encrypt' => env('SESSION_ENCRYPT', false),
/*
|--------------------------------------------------------------------------
| Session File Location
|--------------------------------------------------------------------------
|
- | When using the native session driver, we need a location where session
- | files may be stored. A default has been set for you but a different
- | location may be specified. This is only needed for file sessions.
+ | When utilizing the "file" session driver, the session files are placed
+ | on disk. The default storage location is defined here; however, you
+ | are free to provide another location where they should be stored.
|
*/
@@ -70,33 +73,35 @@ return [
|
*/
- 'connection' => null,
+ 'connection' => env('SESSION_CONNECTION'),
/*
|--------------------------------------------------------------------------
| Session Database Table
|--------------------------------------------------------------------------
|
- | When using the "database" session driver, you may specify the table we
- | should use to manage the sessions. Of course, a sensible default is
- | provided for you; however, you are free to change this as needed.
+ | When using the "database" session driver, you may specify the table to
+ | be used to store sessions. Of course, a sensible default is defined
+ | for you; however, you're welcome to change this to another table.
|
*/
- 'table' => 'sessions',
+ 'table' => env('SESSION_TABLE', 'sessions'),
/*
|--------------------------------------------------------------------------
| Session Cache Store
|--------------------------------------------------------------------------
|
- | When using the "apc" or "memcached" session drivers, you may specify a
- | cache store that should be used for these sessions. This value must
- | correspond with one of the application's configured cache stores.
+ | When using one of the framework's cache driven session backends, you may
+ | define the cache store which should be used to store the session data
+ | between requests. This must match one of your defined cache stores.
+ |
+ | Affects: "dynamodb", "memcached", "redis"
|
*/
- 'store' => null,
+ 'store' => env('SESSION_STORE'),
/*
|--------------------------------------------------------------------------
@@ -116,13 +121,16 @@ return [
| Session Cookie Name
|--------------------------------------------------------------------------
|
- | Here you may change the name of the cookie used to identify a session
- | instance by ID. The name specified here will get used every time a
- | new session cookie is created by the framework for every driver.
+ | Here you may change the name of the session cookie that is created by
+ | the framework. Typically, you should not need to change this value
+ | since doing so does not grant a meaningful security improvement.
|
*/
- 'cookie' => 'laravel_session',
+ 'cookie' => env(
+ 'SESSION_COOKIE',
+ Str::slug((string) env('APP_NAME', 'laravel')).'-session'
+ ),
/*
|--------------------------------------------------------------------------
@@ -131,24 +139,24 @@ return [
|
| The session cookie path determines the path for which the cookie will
| be regarded as available. Typically, this will be the root path of
- | your application but you are free to change this when necessary.
+ | your application, but you're free to change this when necessary.
|
*/
- 'path' => '/',
+ 'path' => env('SESSION_PATH', '/'),
/*
|--------------------------------------------------------------------------
| Session Cookie Domain
|--------------------------------------------------------------------------
|
- | Here you may change the domain of the cookie used to identify a session
- | in your application. This will determine which domains the cookie is
- | available to in your application. A sensible default has been set.
+ | This value determines the domain and subdomains the session cookie is
+ | available to. By default, the cookie will be available to the root
+ | domain without subdomains. Typically, this shouldn't be changed.
|
*/
- 'domain' => env('SESSION_DOMAIN', null),
+ 'domain' => env('SESSION_DOMAIN'),
/*
|--------------------------------------------------------------------------
@@ -157,11 +165,11 @@ return [
|
| By setting this option to true, session cookies will only be sent back
| to the server if the browser has a HTTPS connection. This will keep
- | the cookie from being sent to you if it can not be done securely.
+ | the cookie from being sent to you when it can't be done securely.
|
*/
- 'secure' => false,
+ 'secure' => env('SESSION_SECURE_COOKIE'),
/*
|--------------------------------------------------------------------------
@@ -170,10 +178,40 @@ return [
|
| Setting this value to true will prevent JavaScript from accessing the
| value of the cookie and the cookie will only be accessible through
- | the HTTP protocol. You are free to modify this option if needed.
+ | the HTTP protocol. It's unlikely you should disable this option.
|
*/
- 'http_only' => true,
+ 'http_only' => env('SESSION_HTTP_ONLY', true),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Same-Site Cookies
+ |--------------------------------------------------------------------------
+ |
+ | This option determines how your cookies behave when cross-site requests
+ | take place, and can be used to mitigate CSRF attacks. By default, we
+ | will set this value to "lax" to permit secure cross-site requests.
+ |
+ | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
+ |
+ | Supported: "lax", "strict", "none", null
+ |
+ */
+
+ 'same_site' => env('SESSION_SAME_SITE', 'lax'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Partitioned Cookies
+ |--------------------------------------------------------------------------
+ |
+ | Setting this value to true will tie the cookie to the top-level site for
+ | a cross-site context. Partitioned cookies are accepted by the browser
+ | when flagged "secure" and the Same-Site attribute is set to "none".
+ |
+ */
+
+ 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
];
diff --git a/config/streams.php b/config/streams.php
deleted file mode 100644
index 56fdcff0e..000000000
--- a/config/streams.php
+++ /dev/null
@@ -1,158 +0,0 @@
- [
- \Anomaly\Streams\Platform\Event\Booted::class => [
- \App\Listeners\Translations::class
- ],
- \Anomaly\Streams\Platform\Ui\Form\Event\FormWasSaved::class => [
- \App\Listeners\EnableMaintenanceMode::class
- ],
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Bindings
- |--------------------------------------------------------------------------
- |
- | Additional bindings for Streams Platform to register.
- |
- */
-
- 'bindings' => [
- 'Anomaly\Streams\Platform\Exception\ExceptionHandler' => ExceptionHandler::class
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Singletons
- |--------------------------------------------------------------------------
- |
- | Additional singletons for Streams Platform to register.
- |
- */
-
- 'singletons' => [],
-
- /*
- |--------------------------------------------------------------------------
- | Providers
- |--------------------------------------------------------------------------
- |
- | Additional service providers for Streams Platform to register.
- |
- */
-
- 'providers' => [],
-
- /*
- |--------------------------------------------------------------------------
- | Commands
- |--------------------------------------------------------------------------
- |
- | Additional Artisan commands for Streams Platform to register.
- |
- */
-
- 'commands' => [],
-
- /*
- |--------------------------------------------------------------------------
- | Schedules
- |--------------------------------------------------------------------------
- |
- | Additional scheduled commands for Streams Platform to register.
- |
- */
-
- 'schedules' => [],
-
- /*
- |--------------------------------------------------------------------------
- | Middleware
- |--------------------------------------------------------------------------
- |
- | The application's global HTTP middleware stack.
- | These middleware are run during every request to your application.
- | By default Laravel's default middleware stack will be ran.
- |
- */
-
- 'middleware' => [
- \Fruitcake\Cors\HandleCors::class, # this line
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Route Middleware
- |--------------------------------------------------------------------------
- |
- | Route middleware allows you to apply middleware to a group of routes.
- | By default Laravel's default route middleware will be registered.
- |
- */
-
- 'route_middleware' => [],
-
- /*
- |--------------------------------------------------------------------------
- | Middleware Groups
- |--------------------------------------------------------------------------
- |
- | Sometimes you may want to group several middleware under a single
- | key to make them easier to assign to routes. You may define these here.
- | By default Laravel's default middleware groups will be registered.
- |
- */
-
- 'middleware_groups' => [],
-
- /*
- |--------------------------------------------------------------------------
- | Middleware Groups
- |--------------------------------------------------------------------------
- |
- | The priority-sorted list of middleware.
- | Forces the listed middleware to always be in the given order.
- | By default Laravel's default middleware priority will be used.
- |
- */
-
- 'middleware_priority' => [],
-
- /*
- |--------------------------------------------------------------------------
- | View Overrides
- |--------------------------------------------------------------------------
- |
- | Define globally overridden views as 'view' => 'override' view paths.
- |
- */
-
- 'overrides' => [],
-
- /*
- |--------------------------------------------------------------------------
- | Control Panel Customization
- |--------------------------------------------------------------------------
- |
- | Support for control panel configuration is
- | currently limited to the Streams module.
- |
- */
-
- 'cp' => [],
-
-];
diff --git a/config/view.php b/config/view.php
deleted file mode 100644
index e193ab61d..000000000
--- a/config/view.php
+++ /dev/null
@@ -1,33 +0,0 @@
- [
- realpath(base_path('resources/views')),
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Compiled View Path
- |--------------------------------------------------------------------------
- |
- | This option determines where all the compiled Blade templates will be
- | stored for your application. Typically, this is within the storage
- | directory. However, as usual, you are free to change this value.
- |
- */
-
- 'compiled' => realpath(storage_path('framework/views')),
-
-];
diff --git a/crowdin.yml b/crowdin.yml
deleted file mode 100644
index 3041cafac..000000000
--- a/crowdin.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-files:
- - source: /addons/default/visiosoft/**/resources/lang/en/*.php
- translation: >-
- /addons/default/visiosoft/**/resources/lang/%two_letters_code%/%original_file_name%
diff --git a/database/.gitignore b/database/.gitignore
index 9b1dffd90..9b19b93c9 100644
--- a/database/.gitignore
+++ b/database/.gitignore
@@ -1 +1 @@
-*.sqlite
+*.sqlite*
diff --git a/database/Command/DeleteInstaller.php b/database/Command/DeleteInstaller.php
deleted file mode 100644
index 8dddea0be..000000000
--- a/database/Command/DeleteInstaller.php
+++ /dev/null
@@ -1,17 +0,0 @@
-put(base_path('composer.json'), preg_replace($pattern, '', $json));
-
- $files->deleteDirectory(base_path('vendor/anomaly/installer-module'));
- }
-}
diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php
deleted file mode 100644
index 599516433..000000000
--- a/database/factories/ModelFactory.php
+++ /dev/null
@@ -1,23 +0,0 @@
-define(App\User::class, function (Faker\Generator $faker) {
- static $password;
-
- return [
- 'name' => $faker->name,
- 'email' => $faker->safeEmail,
- 'password' => $password ?: $password = bcrypt('secret'),
- 'remember_token' => str_random(10),
- ];
-});
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
new file mode 100644
index 000000000..584104c9c
--- /dev/null
+++ b/database/factories/UserFactory.php
@@ -0,0 +1,44 @@
+
+ */
+class UserFactory extends Factory
+{
+ /**
+ * The current password being used by the factory.
+ */
+ protected static ?string $password;
+
+ /**
+ * Define the model's default state.
+ *
+ * @return array
+ */
+ public function definition(): array
+ {
+ return [
+ 'name' => fake()->name(),
+ 'email' => fake()->unique()->safeEmail(),
+ 'email_verified_at' => now(),
+ 'password' => static::$password ??= Hash::make('password'),
+ 'remember_token' => Str::random(10),
+ ];
+ }
+
+ /**
+ * Indicate that the model's email address should be unverified.
+ */
+ public function unverified(): static
+ {
+ return $this->state(fn (array $attributes) => [
+ 'email_verified_at' => null,
+ ]);
+ }
+}
diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php
new file mode 100644
index 000000000..05fb5d9ea
--- /dev/null
+++ b/database/migrations/0001_01_01_000000_create_users_table.php
@@ -0,0 +1,49 @@
+id();
+ $table->string('name');
+ $table->string('email')->unique();
+ $table->timestamp('email_verified_at')->nullable();
+ $table->string('password');
+ $table->rememberToken();
+ $table->timestamps();
+ });
+
+ Schema::create('password_reset_tokens', function (Blueprint $table) {
+ $table->string('email')->primary();
+ $table->string('token');
+ $table->timestamp('created_at')->nullable();
+ });
+
+ Schema::create('sessions', function (Blueprint $table) {
+ $table->string('id')->primary();
+ $table->foreignId('user_id')->nullable()->index();
+ $table->string('ip_address', 45)->nullable();
+ $table->text('user_agent')->nullable();
+ $table->longText('payload');
+ $table->integer('last_activity')->index();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('users');
+ Schema::dropIfExists('password_reset_tokens');
+ Schema::dropIfExists('sessions');
+ }
+};
diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php
new file mode 100644
index 000000000..ed758bdf4
--- /dev/null
+++ b/database/migrations/0001_01_01_000001_create_cache_table.php
@@ -0,0 +1,35 @@
+string('key')->primary();
+ $table->mediumText('value');
+ $table->integer('expiration')->index();
+ });
+
+ Schema::create('cache_locks', function (Blueprint $table) {
+ $table->string('key')->primary();
+ $table->string('owner');
+ $table->integer('expiration')->index();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('cache');
+ Schema::dropIfExists('cache_locks');
+ }
+};
diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php
new file mode 100644
index 000000000..425e7058f
--- /dev/null
+++ b/database/migrations/0001_01_01_000002_create_jobs_table.php
@@ -0,0 +1,57 @@
+id();
+ $table->string('queue')->index();
+ $table->longText('payload');
+ $table->unsignedTinyInteger('attempts');
+ $table->unsignedInteger('reserved_at')->nullable();
+ $table->unsignedInteger('available_at');
+ $table->unsignedInteger('created_at');
+ });
+
+ Schema::create('job_batches', function (Blueprint $table) {
+ $table->string('id')->primary();
+ $table->string('name');
+ $table->integer('total_jobs');
+ $table->integer('pending_jobs');
+ $table->integer('failed_jobs');
+ $table->longText('failed_job_ids');
+ $table->mediumText('options')->nullable();
+ $table->integer('cancelled_at')->nullable();
+ $table->integer('created_at');
+ $table->integer('finished_at')->nullable();
+ });
+
+ Schema::create('failed_jobs', function (Blueprint $table) {
+ $table->id();
+ $table->string('uuid')->unique();
+ $table->text('connection');
+ $table->text('queue');
+ $table->longText('payload');
+ $table->longText('exception');
+ $table->timestamp('failed_at')->useCurrent();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('jobs');
+ Schema::dropIfExists('job_batches');
+ Schema::dropIfExists('failed_jobs');
+ }
+};
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
index 2656ccc45..6b901f8bc 100644
--- a/database/seeders/DatabaseSeeder.php
+++ b/database/seeders/DatabaseSeeder.php
@@ -2,174 +2,24 @@
namespace Database\Seeders;
-use Anomaly\FilesModule\Disk\Contract\DiskRepositoryInterface;
-use Anomaly\FilesModule\Folder\Contract\FolderRepositoryInterface;
-use Anomaly\NavigationModule\Menu\Contract\MenuRepositoryInterface;
-use Anomaly\UsersModule\Role\Contract\RoleRepositoryInterface;
-use Anomaly\UsersModule\User\Contract\UserRepositoryInterface;
-use Anomaly\UsersModule\User\UserActivator;
-use Illuminate\Console\Command;
-use Illuminate\Database\Eloquent\Model;
+use App\Models\User;
+use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
-use Anomaly\DashboardModule\Widget\Contract\WidgetRepositoryInterface;
-use Illuminate\Support\Facades\DB;
-use Symfony\Component\Console\Input\ArgvInput;
-use Visiosoft\AdvsModule\Adv\Command\DeleteInstaller;
-use WidgetSeeder;
-use ZipArchive;
class DatabaseSeeder extends Seeder
{
- protected $widgets;
- protected $menus;
- protected $users;
- protected $roles;
- protected $activator;
- protected $disks;
- protected $folders;
- protected $command;
+ use WithoutModelEvents;
- public function __construct(
- WidgetRepositoryInterface $widgets,
- MenuRepositoryInterface $menus,
- UserRepositoryInterface $users,
- DiskRepositoryInterface $disks,
- FolderRepositoryInterface $folders,
- RoleRepositoryInterface $roles,
- UserActivator $activator,
- Command $command
- )
+ /**
+ * Seed the application's database.
+ */
+ public function run(): void
{
- $this->widgets = $widgets;
- $this->menus = $menus;
- $this->users = $users;
- $this->roles = $roles;
- $this->activator = $activator;
- $this->disks = $disks;
- $this->folders = $folders;
- $this->command = $command;
- }
+ // User::factory(10)->create();
- public function run()
- {
-
- $admin = $this->roles->findBySlug('admin');
-
- $this->users->unguard();
- $this->users->newQuery()->where('email', "info@openclassify.com")->forceDelete();
- $visiosoft_administrator = $this->users->create(
- [
- 'first_name' => 'Dev',
- 'last_name' => 'Openclassify',
- 'display_name' => 'openclassify',
- 'email' => "info@openclassify.com",
- 'username' => "openclassify",
- 'password' => "openclassify",
- ]
- );
-
-
- $visiosoft_administrator->roles()->sync([$admin->getId()]);
-
- $this->activator->force($visiosoft_administrator);
-
- //Create Category Icon Folder
- if (is_null($this->folders->findBy('slug', 'category_icon'))) {
- $disk = $this->disks->findBySlug('local');
-
- $this->folders->create([
- 'en' => [
- 'name' => 'Category Icon',
- 'description' => 'A folder for Category Icon.',
- ],
- 'slug' => 'category_icon',
- 'disk' => $disk,
- ]);
- }
- $application_reference = (new ArgvInput())->getParameterOption('--app', env('APPLICATION_REFERENCE', 'default'));
- $settings = str_replace('{application_reference}', $application_reference,
- file_get_contents(realpath(dirname(__DIR__)) . '/seeders/settings.sql'));
- Model::unguard();
- DB::unprepared($settings);
- Model::reguard();
- $this->call(WidgetSeeder::class);
-
- //Delete Installer
- dispatch_now(new DeleteInstaller());
-
- if (is_null($this->folders->findBy('slug', 'ads_excel'))) {
- $disk = $this->disks->findBySlug('local');
-
- $this->folders->create([
- 'en' => [
- 'name' => 'Ads Excel',
- 'description' => 'A folder for Ads Excel.',
- ],
- 'slug' => 'ads_excel',
- 'disk' => $disk,
- ]);
- }
-
-
- if ($images_folder = $this->folders->findBySlug('images')) {
- $images_folder->update([
- 'allowed_types' => [
- 'jpg', 'jpeg', 'png'
- ],
- ]);
- }
-
-
- //Favicon Folder
- if (is_null($this->folders->findBy('slug', 'favicon'))) {
- $disk = $this->disks->findBySlug('local');
-
- $this->folders->create([
- 'en' => [
- 'name' => 'Favicon',
- 'description' => 'A folder for Favicon.',
- ],
- 'slug' => 'favicon',
- 'disk' => $disk,
- 'allowed_types' => [
- 'ico', 'png',
- ],
- ]);
- }
-
- //Banner Image Folder
- if (is_null($this->folders->findBy('slug', 'banner_images'))) {
- $disk = $this->disks->findBySlug('local');
-
- $this->folders->create([
- 'en' => [
- 'name' => 'Banner Images',
- 'description' => 'A folder for Banner Images.',
- ],
- 'slug' => 'banner_images',
- 'disk' => $disk,
- 'allowed_types' => [
- 'jpg', 'jpeg', 'png'
- ],
- ]);
- }
-
-
- //Create Ads Documents Folder
- if (is_null($this->folders->findBy('slug', 'ads_documents'))) {
- $disk = $this->disks->findBySlug('local');
-
- $this->folders->create([
- 'en' => [
- 'name' => 'Ads Documents',
- 'description' => 'A folder for Ads Documents.',
- ],
- 'slug' => 'ads_documents',
- 'disk' => $disk,
- 'allowed_types' => [
- 'pdf', 'doc', 'docx', 'xls', 'xlsx',
- ],
- ]);
- }
+ User::factory()->create([
+ 'name' => 'Test User',
+ 'email' => 'test@example.com',
+ ]);
}
}
diff --git a/database/seeders/WidgetSeeder.php b/database/seeders/WidgetSeeder.php
deleted file mode 100644
index b06b62f59..000000000
--- a/database/seeders/WidgetSeeder.php
+++ /dev/null
@@ -1,50 +0,0 @@
-widgets = $widgets;
- $this->dashboards = $dashboards;
- $this->configuration = $configuration;
- }
- public function run()
- {
- $this->widgets->truncate();
-
- $dashboard = $this->dashboards->findBySlug('welcome');
-
- $widget = $this->widgets
- ->create(
- [
- 'en' => [
- 'title' => 'Recent News',
- 'description' => 'Recent news'
- ],
- 'extension' => 'anomaly.extension.xml_feed_widget',
- 'dashboard' => $dashboard,
- ]
- );
-
- $this->configuration->purge('anomaly.extension.xml_feed_widget');
-
- $this->configuration->create(
- [
- 'scope' => $widget->getId(),
- 'key' => 'anomaly.extension.xml_feed_widget::url',
- 'value' => 'https://openclassify.com/posts/rss.xml',
- ]
- );
- }
-}
diff --git a/database/seeders/settings.sql b/database/seeders/settings.sql
deleted file mode 100644
index 6a838cc78..000000000
--- a/database/seeders/settings.sql
+++ /dev/null
@@ -1,26 +0,0 @@
-SET NAMES utf8;
-SET time_zone = '+00:00';
-SET foreign_key_checks = 0;
-SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
-INSERT INTO `{application_reference}_settings_settings` (`created_at`, `created_by_id`, `updated_at`, `updated_by_id`, `key`, `value`) VALUES
-('2019-07-15 06:48:46', 1, '2019-07-15 06:53:05', 1, 'streams::date_format', 'j F, Y'),
-('2019-07-15 06:48:46', 1, '2019-07-15 06:53:05', 1, 'streams::time_format', 'H:i'),
-('2019-07-15 06:48:46', 1, '2019-07-15 06:53:05', 1, 'streams::standard_theme', 'visiosoft.theme.base'),
-('2019-07-15 06:48:46', 1, '2019-07-15 06:53:05', 1, 'streams::admin_theme', 'visiosoft.theme.defaultadmin'),
-('2019-07-15 06:48:46', 1, '2019-07-15 06:53:05', 1, 'streams::enabled_locales', 'a:11:{i:0;s:2:\"en\";i:1;s:2:\"fa\";i:2;s:2:\"ar\";i:3;s:2:\"el\";i:4;s:2:\"es\";i:5;s:2:\"fr\";i:6;s:2:\"it\";i:7;s:2:\"nl\";i:8;s:2:\"pt\";i:9;s:2:\"ru\";i:10;s:2:\"tr\";}'),
-('2020-09-25 11:10:13', 1, '2020-09-25 11:10:13', 1, 'visiosoft.module.advs::latest-limit', '24'),
-('2020-09-25 11:10:14', 1, '2020-09-25 11:10:14', 1, 'visiosoft.module.advs::popular_ads_limit', '15'),
-('2020-11-12 06:58:45', 1, '2020-11-16 14:25:22', 1, 'streams::mail_driver', 'log')
-ON DUPLICATE KEY UPDATE `id` = VALUES(`id`), `sort_order` = VALUES(`sort_order`), `created_at` = VALUES(`created_at`), `created_by_id` = VALUES(`created_by_id`), `updated_at` = VALUES(`updated_at`), `updated_by_id` = VALUES(`updated_by_id`), `key` = VALUES(`key`), `value` = VALUES(`value`);
-
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/docker-compose.yml b/docker-compose.yml
deleted file mode 100644
index 316c05b70..000000000
--- a/docker-compose.yml
+++ /dev/null
@@ -1,88 +0,0 @@
-volumes:
- db-store:
- psysh-store:
-
-configs:
- db-config:
- file: ./docker/mysql/my.cnf
-
-services:
- php:
- build:
- context: .
- dockerfile: ./docker/php/Dockerfile
- target: ${APP_BUILD_TARGET:-development}
- container_name: oc_php
- volumes:
- - type: bind
- source: ./
- target: /workspace
- - type: volume
- source: psysh-store
- target: /root/.config/psysh
- volume:
- nocopy: true
- depends_on:
- database:
- condition: service_healthy
- extra_hosts:
- - "host.docker.internal:host-gateway"
-
- nginx:
- build:
- context: .
- dockerfile: ./docker/nginx/Dockerfile
- container_name: ${APP_NAME}_nginx
- ports:
- - target: 80
- published: ${WEB_PUBLISHED_PORT:-80}
- protocol: tcp
- mode: host
- volumes:
- - type: bind
- source: ./
- target: /workspace
- depends_on:
- - php
- - database
-
- database:
- build:
- context: .
- dockerfile: ./docker/mysql/Dockerfile
- command: --max_allowed_packet=32505856 # Set max_allowed_packet to 256M (or any other value)
- ports:
- - target: 3306
- published: ${DB_PUBLISHED_PORT:-3306}
- protocol: tcp
- mode: host
- configs:
- - source: db-config
- target: /etc/my.cnf
- volumes:
- - type: volume
- source: db-store
- target: /var/lib/mysql
- volume:
- nocopy: true
- environment:
- - MYSQL_DATABASE=${DB_DATABASE:-laravel}
- - MYSQL_USER=${DB_USERNAME:-phper}
- - MYSQL_PASSWORD=${DB_PASSWORD:-secret}
- - MYSQL_ROOT_PASSWORD=${DB_PASSWORD:-secret}
- healthcheck:
- test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
- timeout: 5s
- retries: 10
-
- phpmyadmin:
- image: phpmyadmin/phpmyadmin:latest
- ports:
- - "8081:80"
- depends_on:
- - database
- environment:
- PMA_USER: oc
- PMA_PASSWORD: oc
- PMA_HOSTS: database,localhost
- UPLOAD_LIMIT: 10G
\ No newline at end of file
diff --git a/docker/mysql/Dockerfile b/docker/mysql/Dockerfile
deleted file mode 100644
index 0125006d5..000000000
--- a/docker/mysql/Dockerfile
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM mysql/mysql-server:8.0
-
-ENV TZ=UTC
-
-RUN mkdir /var/log/mysql \
- && chown mysql:mysql $_ \
- && chmod 777 $_
\ No newline at end of file
diff --git a/docker/mysql/my.cnf b/docker/mysql/my.cnf
deleted file mode 100644
index ec28d94e7..000000000
--- a/docker/mysql/my.cnf
+++ /dev/null
@@ -1,37 +0,0 @@
-[mysqld]
-# default
-skip-host-cache
-skip-name-resolve
-datadir = /var/lib/mysql
-socket = /var/lib/mysql/mysql.sock
-secure-file-priv = /var/lib/mysql-files
-user = mysql
-
-pid-file = /var/run/mysqld/mysqld.pid
-
-# character set / collation
-character_set_server = utf8mb4
-collation_server = utf8mb4_0900_ai_ci
-
-# timezone
-default-time-zone = SYSTEM
-log_timestamps = SYSTEM
-
-# Error Log
-log-error = /var/log/mysql/mysql-error.log
-
-# Slow Query Log
-slow_query_log = 1
-slow_query_log_file = /var/log/mysql/mysql-slow.log
-long_query_time = 1.0
-log_queries_not_using_indexes = 0
-
-# General Log
-general_log = 1
-general_log_file = /var/log/mysql/mysql-general.log
-
-[mysql]
-default-character-set = utf8mb4
-
-[client]
-default-character-set = utf8mb4
\ No newline at end of file
diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile
deleted file mode 100644
index eb8f6bb79..000000000
--- a/docker/nginx/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-FROM nginx:1.25
-
-WORKDIR /workspace
-
-ENV TZ=UTC
-
-COPY ./docker/nginx/*.conf /etc/nginx/conf.d/
-
-
diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf
deleted file mode 100644
index 0160616a8..000000000
--- a/docker/nginx/default.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-access_log /dev/stdout main;
-error_log /dev/stderr warn;
-
-server {
- listen 80;
- listen [::]:80;
- root /workspace/public;
-
- add_header X-Frame-Options "SAMEORIGIN";
- add_header X-XSS-Protection "1; mode=block";
- add_header X-Content-Type-Options "nosniff";
-
- index index.php;
-
- charset utf-8;
-
- location / {
- try_files $uri $uri/ /index.php?$query_string;
- }
-
- location = /favicon.ico { access_log off; log_not_found off; }
- location = /robots.txt { access_log off; log_not_found off; }
-
- error_page 404 /index.php;
-
- location ~ \.php$ {
- fastcgi_pass php:9000;
- fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
- include fastcgi_params;
- }
-
- location ~ /\.(?!well-known).* {
- deny all;
- }
-}
\ No newline at end of file
diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile
deleted file mode 100644
index 36a6f23d8..000000000
--- a/docker/php/Dockerfile
+++ /dev/null
@@ -1,69 +0,0 @@
-FROM php:8.2-fpm-bullseye AS base
-
-WORKDIR /workspace
-
-# timezone environment
-ENV TZ=UTC \
- # locale
- LANG=en_US.UTF-8 \
- LANGUAGE=en_US:en \
- LC_ALL=en_US.UTF-8 \
- # composer environment
- COMPOSER_ALLOW_SUPERUSER=1 \
- COMPOSER_HOME=/composer
-
-COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
-
-RUN apt-get update \
- && apt-get -y install --no-install-recommends \
- locales \
- git \
- unzip \
- libzip-dev \
- libicu-dev \
- libonig-dev \
- libpq-dev \
- libcurl4-gnutls-dev \
- libfreetype6-dev \
- libjpeg62-turbo-dev \
- libpng-dev \
- && apt-get clean \
- && rm -rf /var/lib/apt/lists/* \
- && locale-gen en_US.UTF-8 \
- && localedef -f UTF-8 -i en_US en_US.UTF-8 \
- && docker-php-ext-install \
- intl \
- pdo_mysql \
- zip \
- bcmath \
- && composer config -g process-timeout 3600 \
- && composer config -g repos.packagist composer https://packagist.org
-
-RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/
-RUN docker-php-ext-install gd
-
-COPY . .
-
-#RUN ["chmod", "+x", "./docker/php/entrypoint.sh"]
-CMD ["docker/php/entrypoint.sh"]
-
-FROM base AS development
-
-COPY ./docker/php/php.development.ini /usr/local/etc/php/php.ini
-
-FROM development AS development-xdebug
-
-RUN pecl install xdebug && \
- docker-php-ext-enable xdebug
-
-COPY ./docker/php/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
-
-FROM base AS deploy
-
-COPY ./docker/php/php.deploy.ini /usr/local/etc/php/php.ini
-COPY ./ /workspace
-
-RUN composer install -q -n --no-ansi --no-dev --no-scripts --no-progress --prefer-dist \
- && chmod -R 777 storage bootstrap/cache \
- && php artisan optimize:clear \
- && php artisan optimize
\ No newline at end of file
diff --git a/docker/php/entrypoint.sh b/docker/php/entrypoint.sh
deleted file mode 100755
index ae8873b7b..000000000
--- a/docker/php/entrypoint.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-
-if [ ! -f "vendor/autoload.php" ]; then
- composer install --no-progress --no-interaction
-else
- echo "composer. nothing to do."
-fi
-
-if [ ! -f ".env" ]; then
- echo "Creating env file for env from env-sail"
- cp .env-sail .env
-else
- echo "env file exists. nothing to do."
-fi
-
-while IFS= read -r line || [[ -n "$line" ]]; do
- if [[ "$line" == "INSTALLED="* ]]; then
- installed="${line#*=}"
- installed=$(echo "$installed" | tr -d '[:space:]' | tr -d '[:punct:]') # Boşlukları ve özel karakterleri sil
- break
- fi
-done < .env
-
-if [ "$installed" = "false" ]; then
- echo ".env installed is false starting installing"
- php artisan install --ready
-fi
-
-php-fpm -R
\ No newline at end of file
diff --git a/docker/php/opcache.ini b/docker/php/opcache.ini
deleted file mode 100644
index fc9ed4d15..000000000
--- a/docker/php/opcache.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-[opcache]
-opcache.enable=1
-; 0 means it will check on every request
-; 0 is irrelevant if opcache.validate_timestamps=0 which is desirable in production
-opcache.revalidate_freq=0
-opcache.validate_timestamps=1
-opcache.max_accelerated_files=10000
-opcache.memory_consumption=192
-opcache.max_wasted_percentage=10
-opcache.interned_strings_buffer=16
-opcache.fast_shutdown=1
\ No newline at end of file
diff --git a/docker/php/php.deploy.ini b/docker/php/php.deploy.ini
deleted file mode 100644
index c1e65559f..000000000
--- a/docker/php/php.deploy.ini
+++ /dev/null
@@ -1,25 +0,0 @@
-zend.exception_ignore_args = off
-expose_php = off
-max_execution_time = 30
-max_input_vars = 1000
-upload_max_filesize = 64M
-post_max_size = 128M
-memory_limit = 256M
-error_reporting = E_ALL
-display_errors = off
-display_startup_errors = off
-log_errors = on
-error_log = /dev/stderr
-default_charset = UTF-8
-
-[Date]
-date.timezone = ${TZ}
-
-[mysqlnd]
-mysqlnd.collect_memory_statistics = off
-
-[Assertion]
-zend.assertions = -1
-
-[mbstring]
-mbstring.language = Neutral
\ No newline at end of file
diff --git a/docker/php/php.development.ini b/docker/php/php.development.ini
deleted file mode 100644
index 026f1fcd9..000000000
--- a/docker/php/php.development.ini
+++ /dev/null
@@ -1,25 +0,0 @@
-zend.exception_ignore_args = off
-expose_php = on
-max_execution_time = 30
-max_input_vars = 1000
-upload_max_filesize = 64M
-post_max_size = 128M
-memory_limit = 256M
-error_reporting = E_ALL
-display_errors = on
-display_startup_errors = on
-log_errors = on
-error_log = /dev/stderr
-default_charset = UTF-8
-
-[Date]
-date.timezone = ${TZ}
-
-[mysqlnd]
-mysqlnd.collect_memory_statistics = on
-
-[Assertion]
-zend.assertions = 1
-
-[mbstring]
-mbstring.language = Neutral
\ No newline at end of file
diff --git a/docker/php/xdebug.ini b/docker/php/xdebug.ini
deleted file mode 100644
index 549ccaa28..000000000
--- a/docker/php/xdebug.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[xdebug]
-xdebug.mode = debug
-xdebug.start_with_request = yes
-xdebug.client_host = host.docker.internal
-xdebug.client_port = 9003
-xdebug.log = /tmp/xdebug.log
-xdebug.idekey = "PHPSTORM"
\ No newline at end of file
diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md
deleted file mode 100644
index 76db1f256..000000000
--- a/docs/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, sex characteristics, gender identity and expression,
-level of experience, education, socio-economic status, nationality, personal
-appearance, race, religion, or sexual identity and orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment
-include:
-
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery and unwelcome sexual attention or
- advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community. Examples of
-representing a project or community include using an official project e-mail
-address, posting via an official social media account, or acting as an appointed
-representative at an online or offline event. Representation of a project may be
-further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at info@openclassify.com. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
-
-[homepage]: https://www.contributor-covenant.org
-
-For answers to common questions about this code of conduct, see
-https://www.contributor-covenant.org/faq
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
deleted file mode 100644
index 96becbe40..000000000
--- a/docs/CONTRIBUTING.md
+++ /dev/null
@@ -1,128 +0,0 @@
-# Contribution Guide
-
-It's been often said that programming is part art, part science - that because lots of times there's no single, simple solution to a problem; or if there is, we might not know about it. There's also an infamous joke that if there are *n* developers in the room, then there are *n+1* opinions on how things should be done.
-
-### The most important thing
-
-**The code has to work.** Unless you open a PR as a work in progress, the code should be built and tested on a device or emulator. Having people review your code is one thing, but you should not expect them to also *test* the code for you.
-
-### Context
-
-Some of those might be more urgent than the others, and sometimes you might be under pressure to ship as soon as possible so the code might not be perfect or there won't be any tests or code might not be extendable. **That's ok.**
-
-## Everyone
-
-* There is no perfect code: good enough is usually good enough. That being said, try to keep the number of WTFs per minute to a minimum.
-
-
-
-* Accept that many programming decisions are opinions. Discuss tradeoffs, which you prefer, and reach a resolution quickly.
-* Ask for clarification. ("I didn't understand. Can you clarify?")
-* Offer clarification, explain the decisions you made to reach a solution in question.
-* Avoid using terms that could be seen as referring to personal traits. ("dumb", "stupid"). Assume everyone is intelligent and well-meaning.
-* Be humble. ("I'm not sure - let's look it up.")
-* Don't use hyperbole. ("always", "never", "endlessly", "nothing") Don't use sarcasm.
-* Remember that you're both on the same side - the goal is to make the code better. Understand that sometimes your ideas will be overruled. Even if you do turn out to be right, don't take revenge or say, "I told you so".
-* Talk synchronously (e.g. chat, screensharing, in person) if there are too many "I didn't understand" or "Alternative solution:" comments. Pull requests should not be the place for long discussions, architectural or otherwise.
-* Put notes on what's missing or could be improved in the PR description or comments. You can also create an issue with discussion points and possible problems or things to do and discuss it offline.
-
-## As a code submitter
-
-* PRs should be about one thing. If you do multiple things in one PR, it's hard to review. If you're fixing stuff as you go, you might want to make atomic commits and then cherry-pick those commits into separate branches, leaving the PR clean.
-* Try to keep the PRs small. There has been some research to indicate that beyond 400 LOC the ability to detect defects diminishes. (We're talking about LOC proper, unit tests and layouts don't count)
-* Having a PR description is useful. Additionally, you can also link to the card on Trello.
-* Ideally, the PR should be finished when submitted. If the PR is work in progress, add (WIP) or [WIP] to the title.
-* You should have tests that at least cover the logic, and ideally also cover the input/output parameters and methods. (depends on context)
-
-## As a reviewer
-
-* Reviewing code is part of a normal workday. You should check for open/updated PRs at least once a day.
-* Ask, don’t tell. (“What do you think about trying…?” rather than “Don’t do…”)
-* Offer ways to simplify or improve code.
-* Code beautification and refactoring ought to be tasks in the next sprint, except for obvious and easy-to-fix things.
-* Communicate which ideas you feel strongly about and those you don't. Explain your reasons why code should be changed. (Not in line with the style guide? A personal preference?)
-* If you disagree strongly, consider giving it a few minutes before responding; think before you react.
-* Offer alternative implementations, but assume the author already considered them. ("What do you think about using a custom validator here?")
-* If discussions turn too theoretical or touch big architectural questions, move the discussion offline. In the meantime, let the author make the final decision on alternative implementations.
-* Don't keep the code hostage. Keep in mind the context and the most important thing - does it work?
-
-## Readability and Cleanliness
-
-The first step is to make sure that your PHP code is clean and readable so that both you and other developers can easily understand it.
-
-Make sure to consider the following issues:
-
-* Is the code formatting written in the same style as the rest of the project?
-* Is the code well-described with comments or other documentation?
-* Is it easy to discern the purpose of a given PHP function or class?
-* Does the code throw exceptions or display appropriate error messages when something goes wrong?
-* Are any variable, function, or file names unclear or inconsistent?
-* Are there still large blocks of code commented out that should be deleted?
-* Are there duplicate sections of code that can be removed or condensed?
-* Can large files be refactored or broken down into smaller components that are easier to comprehend?
-
-
-# Task list to Check
-
-## General
- - [ ] The code works
- - [ ] The code is easy to understand
- - [ ] Follows coding conventions
- - [ ] Names are simple and if possible short
- - [ ] Names are spelt correctly
- - [ ] Names contain units where applicable
- - [ ] There are no usages of [magic numbers](http://c2.com/cgi/wiki?MagicNumber)
- - [ ] No hard coded constants that could possibly change in the future
- - [ ] All variables are in the smallest scope possible
- - [ ] There is no commented out code
- - [ ] There is no dead code (inaccessible at Runtime)
- - [ ] No code that can be replaced with library functions
- - [ ] Variables are not accidentally used with null values
- - [ ] Variables are immutable where possible
- - [ ] Code is not repeated or duplicated
- - [ ] No complex/long boolean expressions
- - [ ] No negatively named boolean variables
- - [ ] No empty blocks of code
- - [ ] Ideal data structures are used
- - [ ] Constructors do not accept null/none values
- - [ ] Catch clauses are fine grained and catch specific exceptions
- - [ ] Exceptions are not eaten if caught, unless explicitly documented otherwise
- - [ ] Files/Sockets and other resources are properly closed even when an exception occurs in using them
- - [ ] == operator and === (and its inverse !==) are not mixed up
- - [ ] Floating point numbers are not compared for equality
- - [ ] Loops have a set length and correct termination conditions
- - [ ] Blocks of code inside loops are as small as possible
- - [ ] No methods with boolean parameters
- - [ ] No object exists longer than necessary
- - [ ] No memory leaks
- - [ ] Code is unit testable
- - [ ] Test cases are written wherever possible
- - [ ] Methods return early without compromising code readability
- - [ ] Performance is considered
- - [ ] Loop iteration and off by one are taken care of
-
-## Architecture
- - [ ] [Law of Demeter](https://en.wikipedia.org/wiki/Law_of_Demeter) is not violated
- - [ ] A class should have only a single responsibility (i.e. only one potential change in the software's specification should be able to affect the specification of the class)
- - [ ] Classes, modules, functions, etc. should be open for extension, but closed for modification
- - [ ] Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program
- - [ ] Many client-specific interfaces are better than one general-purpose interface.
- - [ ] Depend upon Abstractions. Do not depend upon concretions.
-
-
-## Security
- - [ ] All data inputs are checked (for the correct type, length/size, format, and range)
- - [ ] Invalid parameter values handled such that exceptions are not thrown
- - [ ] No sensitive information is logged or visible in a stacktrace
-
-
-## Security Vulnerabilities
-
-If you discover a security vulnerability, please send an e-mail to info@openclassify.com. All security vulnerabilities will be promptly addressed.
-
-
-## Coding Style
-
-Project follows the PSR-4, PSR-2 and PSR-1 coding standards. In addition to these standards, the following coding standards should be followed:
-
-The class namespace declaration must be on the same line as Only **modules** and **extensions** are installable.
-
-```bash
-php artisan addon:install anomaly.module.store --seed
-```
-
-### Install All modules and migrate
-
-Clone modules & themes and run this command:
-
-```bash
-php artisan migrate --all-addons
-```
-
-### Seed for Themes
-
-Like : php artisan db:seed --addon=visiosoft.theme.oc
-
-```bash
-php artisan db:seed --addon=visiosoft.theme.addon_name
-```
-
-
-### Run Command Inside Docker
-
-```bash
-docker exec -it oc_php php artisan addon:install anomaly.module.store --seed
-```
-
-### Composer set private repo
-
-```bash
-composer config repositories.repo-name composer https://abc.aaa.com
-```
-
-
-### Composer set username and password for repo
-```bash
-composer config http-basic.abc.aaa.com openclassify pass
-```
-
-
-## Asset Management
-
-### assets:clear
-
-Clears all asset and image generated cache.
-
-The optional `path` argument specifies the path relative to your application's public asset path. In this way you can easily clear `public` or `admin` theme cache directories.
-
-```bash
-php artisan asset:clear // Clear everything
-php artisan asset:clear public // Clear public theme cache
-```
-
-
-## View Management
-
-### twig:clear
-
-Clears all Twig related view cache.
-
-```bash
-php artisan twig:clear
-```
-
-
-## Cache Management
-
-### cache:clear
-
-Clears all framework cache. Does not include HTTP cache.
-
-```bash
-php artisan cache:clear
-```
-
-## HTTP Cache
-
-### httpcache:clear
-
-Clears all HTTP cache.
-
-```bash
-php artisan httpcache:clear
-```
-
-### httpcache:warm
-
-Warms HTTP cache by crawling your sitemap.
-
-The `--sleep` option specifies how long in `seconds` to wait between each request. HTTP cache will be warmed as fast as possible by default.
-
-The `--clear` flag will call `httpcache:clear` prior to warming.
-
-```bash
-php artisan httpcache:warm --sleep=5 --clear
-```
-
-
-## Application Commands
-
-### env:set
-
-Set a `.env` value. Specify the `like` to update or insert like this:
-
-```bash
-php artisan env:set APP_DEBUG=true
-```
-
-### app:publish
-
-Copy the base `.env` and generate a `routes.php` file in the application's `resources` directory.
-
-Use the `--force` flag to overwrite the files should they already exist.
-
-```bash
-php artisan app:publish --force
-```
-
-### streams:publish
-
-Copy the configuration, language files, and views from the Streams Platform into `resources/streams` so that you can modify them to override core and commit the changes safely to your version control.
-
-Use the `--force` flag to overwrite the files should they already exist.
-
-```bash
-php artisan streams:publish --force
-```
-
-### build
-
-Compile Streams models and signal to others components that the system is building.
-
-```bash
-php artisan build
-```
-
-### refresh
-
-Refreshes all caches and signals to other components to refresh as well.
-
-```bash
-php artisan build
-```
-
-
-## Streams Commands
-
-### make:stream
-
-Create a scaffold a new stream.
-
-The `stream` argument should be a **plural slug identifier** for the stream like `books` or `favorite_books`.
-
-The `addon` argument must be a unique module or extension identifier like a `dot namespace` or `slug`. The stream classes will be generated in the addon's `src` directory.
-
-The `--namespace` option may be used to specify a namespace for the stream like `--namespace=book_store`. The slug of the specified `addon` will be used by default.
-
-> The addon must be created using [make:addon](#make-addon) prior to running this command.{.notice}
-
-```bash
-php artisan make:stream books anomaly.module.store
-```
-
-### streams:index
-
-Import `searchable` stream entries into the search index.
-
-Use the optional `namespace` argument to index stream entries within that namespace only.
-
-Use the optional `stream` argument to target entries for a specific stream with the `namespace`.
-
-The `--flush` flag may be used flush the search index before importing.
-
-```bash
-php artisan streams:index // Import everything searchable
-php artisan streams:index products books // Import books
-```
-
-### streams:compile
-
-Compile the base generated models for all streams from their database values.
-
-```bash
-php artisan streams:compile
-```
-
-### streams:cleanup
-
-Safely deletes any "abandoned" or otherwise garbage streams, fields, and assignments that might present themselves during or after development.
-
-```bash
-php artisan streams:cleanup
-```
-
-### streams:destroy
-
-Destroy all streams, fields, and assignments within a given `namespace`.
-
-```bash
-php artisan streams:destroy store
-```
-
-
-## Addon Commands
-
-### make:addon
-
-Create an addon with everything you need to start development.
-
-The `namespace` argument looks like `{vendor}.{type}.{addon}` and specifies the addon's `vendor` slug, the `type` slug, and the `addon` slug of the desired addon to create.
-
-The `vendor` slug should reflect you as an author. The `vendor` slug used by the creators of the Streams Platform for example is `anomaly`.
-
-Supported `type` slugs are `module`, `theme`, `extension`, `plugin`, and `field_type`.
-
-The `addon` slug is the `slug_formatted` name of the addon you are creating.
-
-```bash
-php artisan make:addon anomaly.module.store
-```
-
-
-
-### addon:uninstall
-
-Uninstall an addon.
-
-The required `addon` argument must be an addon identifier like `anomaly.module.store`.
-
-> Only **modules** and **extensions** are installable.{.notice}
-
-```bash
-php artisan addon:uninstall anomaly.module.store --seed
-```
-
-### addon:reinstall
-
-Reinstall an addon.
-
-The required `addon` argument must be an addon identifier like `anomaly.module.store`.
-
-> Only **modules** and **extensions** are installable.{.notice}
-
-```bash
-php artisan addon:reinstall anomaly.module.store --seed
-```
-
-### addon:publish
-
-Copy the configuration, language files, and views from the specified `addon` into `resources/streams` so that you can modify them to override the addon and commit the changes safely to your version control.
-
-The required `addon` argument must be an addon identifier like `anomaly.module.store`.
-
-Use the `--force` flag to overwrite the files should they already exist.
-
-```bash
-php artisan addon:publish anomaly.module.store --force
-```
-
diff --git a/docs/other-install-methods.md b/docs/other-install-methods.md
deleted file mode 100644
index 37e8886f3..000000000
--- a/docs/other-install-methods.md
+++ /dev/null
@@ -1,84 +0,0 @@
-
-## Via Composer
-
-> Do not create an `.env` file just yet - Installer will generate one for you.{.important}
-
-```bash
-composer create-project openclassify/openclassify
-```
-
-### Host Configuration
-
-When you setup your web host be sure to point the web root to `public` directory. Just as you would a normal Laravel installation.
-
-#### Alternate Directories for cPanel or Virtualmin
-
-In some environments like cPanel or Virtualmin it may be difficult to use the `public` directory as the web root. In these cases we suggest symlinking the `public` directory to `public_html`:
-
-```bash
-ln -s public public_html
-```
-
-You may also simply rename the `public` directory to `public_html`. Path hints will automatically use the correct path.
-
-### Directory Permissions
-
-After installing, you may need to configure some permissions in order to proceed.
-Directories within the `storage`, `public/app`, and the `bootstrap/cache` directories should be writable by your web server.
-If you are using the [Homestead](http://laravel.com/docs/homestead) virtual machine, these permissions should already be set.
-
-
-## Installation
-
-### Running the Installation Wizard
-
-After downloading and it's dependencies with:
-
-```bash
-composer install
-```
-you will need to install the software in order to get started.
-By this time you should be able to visit your site's URL which will
-redirect you to the installer: `http://yoursite.com/installer`
-
-### Using the CLI Installer
-
-
-```bash
-php artisan install
-
-```
-
-You will be prompted for details in order to proceed with the installation process.
-
-> You may need to run `ulimit -n 1024` before installing via CLI to temporarily increase your max open files limit.
-
-#### Automating the CLI Installer
-
-You can automate the installer by creating your own .env file with something like this:
-
-```bash
-APP_ENV=local
-APP_DEBUG=true
-APP_KEY=zfesbnTkXvooWVcsKMw2r4SmPVNGbFoS
-DB_CONNECTION=mysql
-DB_HOST=localhost
-DB_DATABASE=workbench
-DB_USERNAME=root
-DB_PASSWORD=root
-APPLICATION_NAME=Default
-APPLICATION_REFERENCE=default
-APPLICATION_DOMAIN=localhost
-ADMIN_EMAIL=info@openclassify.com
-ADMIN_USERNAME=admin
-ADMIN_PASSWORD=password
-LOCALE=en
-TIMEZONE=Turkey/Istanbul
-```
-> The APP_KEY must be exactly 32 characters in length.
-
-Then run the installer and indicate that the system is ready to install:
-
-```bash
-php artisan install --ready
-```
diff --git a/etc/nginx/default.conf b/etc/nginx/default.conf
deleted file mode 100644
index 1ad9f78bf..000000000
--- a/etc/nginx/default.conf
+++ /dev/null
@@ -1,101 +0,0 @@
-# Nginx configuration
-
-server {
- listen 80 default_server;
- listen [::]:80 default_server;
- server_name localhost;
-
- index index.php index.html;
- error_log /var/log/nginx/error.log;
- access_log /var/log/nginx/access.log;
- root /var/www/html/public;
-
- gzip on;
- gzip_static on;
- gzip_http_version 1.0;
- gzip_disable "MSIE [1-6].";
- gzip_vary on;
- gzip_comp_level 9;
- gzip_proxied any;
- gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
-
- fastcgi_intercept_errors off;
- fastcgi_buffers 8 16k;
- fastcgi_buffer_size 32k;
- fastcgi_read_timeout 180;
- # Remove trailing slashes
- rewrite ^/(.*)/$ /$1 permanent;
-
- # Remove trailing slashes
- location / {
- try_files $uri $uri/ /index.php?$args;
- }
-
- location ~ \.php$ {
- try_files $uri =404;
- fastcgi_split_path_info ^(.+\.php)(/.+)$;
- fastcgi_pass php:9000;
- fastcgi_index index.php;
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param PATH_INFO $fastcgi_path_info;
- }
-
- location ~ /\.ht {
-
- access_log off;
- log_not_found off;
-
- deny all;
- }
-
- location ~* \.ico$ {
-
- expires 1w;
- access_log off;
- }
-
- location ~* \.(?:jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|eot|mp4|ogg|ogv|webm)$ {
-
- try_files $uri $uri/ /index.php?$query_string;
-
- access_log off;
- log_not_found off;
- }
-
- location ~* \.(?:css|js)$ {
-
- try_files $uri $uri/ /index.php?$query_string;
-
- access_log off;
- log_not_found off;
- }
-
- add_header "X-UA-Compatible" "IE=Edge,chrome=1";
-}
-
-# server {
-# server_name localhost;
-
-# listen 443 ssl;
-# fastcgi_param HTTPS on;
-
-# ssl_certificate /etc/ssl/server.pem;
-# ssl_certificate_key /etc/ssl/server.key;
-# ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
-
-# index index.php index.html;
-# error_log /var/log/nginx/error.log;
-# access_log /var/log/nginx/access.log;
-# root /var/www/html/public;
-
-# location ~ \.php$ {
-# try_files $uri =404;
-# fastcgi_split_path_info ^(.+\.php)(/.+)$;
-# fastcgi_pass php:9000;
-# fastcgi_index index.php;
-# include fastcgi_params;
-# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
-# fastcgi_param PATH_INFO $fastcgi_path_info;
-# }
-# }
\ No newline at end of file
diff --git a/etc/nginx/default.template.conf b/etc/nginx/default.template.conf
deleted file mode 100644
index 5562328a0..000000000
--- a/etc/nginx/default.template.conf
+++ /dev/null
@@ -1,101 +0,0 @@
-# Nginx configuration
-
-server {
- listen 80 default_server;
- listen [::]:80 default_server;
- server_name ${NGINX_HOST};
-
- index index.php index.html;
- error_log /var/log/nginx/error.log;
- access_log /var/log/nginx/access.log;
- root /var/www/html/public;
-
- gzip on;
- gzip_static on;
- gzip_http_version 1.0;
- gzip_disable "MSIE [1-6].";
- gzip_vary on;
- gzip_comp_level 9;
- gzip_proxied any;
- gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
-
- fastcgi_intercept_errors off;
- fastcgi_buffers 8 16k;
- fastcgi_buffer_size 32k;
- fastcgi_read_timeout 180;
- # Remove trailing slashes
- rewrite ^/(.*)/$ /$1 permanent;
-
- # Remove trailing slashes
- location / {
- try_files $uri $uri/ /index.php?$args;
- }
-
- location ~ \.php$ {
- try_files $uri =404;
- fastcgi_split_path_info ^(.+\.php)(/.+)$;
- fastcgi_pass php:9000;
- fastcgi_index index.php;
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param PATH_INFO $fastcgi_path_info;
- }
-
- location ~ /\.ht {
-
- access_log off;
- log_not_found off;
-
- deny all;
- }
-
- location ~* \.ico$ {
-
- expires 1w;
- access_log off;
- }
-
- location ~* \.(?:jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|eot|mp4|ogg|ogv|webm)$ {
-
- try_files $uri $uri/ /index.php?$query_string;
-
- access_log off;
- log_not_found off;
- }
-
- location ~* \.(?:css|js)$ {
-
- try_files $uri $uri/ /index.php?$query_string;
-
- access_log off;
- log_not_found off;
- }
-
- add_header "X-UA-Compatible" "IE=Edge,chrome=1";
-}
-
-# server {
-# server_name ${NGINX_HOST};
-
-# listen 443 ssl;
-# fastcgi_param HTTPS on;
-
-# ssl_certificate /etc/ssl/server.pem;
-# ssl_certificate_key /etc/ssl/server.key;
-# ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
-
-# index index.php index.html;
-# error_log /var/log/nginx/error.log;
-# access_log /var/log/nginx/access.log;
-# root /var/www/html/public;
-
-# location ~ \.php$ {
-# try_files $uri =404;
-# fastcgi_split_path_info ^(.+\.php)(/.+)$;
-# fastcgi_pass php:9000;
-# fastcgi_index index.php;
-# include fastcgi_params;
-# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
-# fastcgi_param PATH_INFO $fastcgi_path_info;
-# }
-# }
\ No newline at end of file
diff --git a/etc/php/php.ini b/etc/php/php.ini
deleted file mode 100644
index 4f47c01f7..000000000
--- a/etc/php/php.ini
+++ /dev/null
@@ -1,29 +0,0 @@
-; PHP Configuration
-
-;[Date]
-; Defines the default timezone used by the date functions
-; http://php.net/date.timezone
-;date.timezone =
-
-; Error handling
-;display_errors = Off
-
-; Xdebug
-; See https://xdebug.org/docs/all_settings
-
-;PHPStorm
-[Xdebug]
-xdebug.remote_enable=1
-xdebug.idekey=PHPSTORM
-xdebug.profiler_enable=0
-xdebug.max_nesting_level=700
-xdebug.remote_host=192.168.0.1 # your ip
-xdebug.remote_port=9000
-
-;Netbeans
-;[Xdebug]
-;xdebug.remote_enable=1
-;xdebug.remote_handler=dbgp
-;xdebug.remote_mode=req
-;xdebug.remote_host=192.168.0.1 # your ip
-;xdebug.remote_port=9000
\ No newline at end of file
diff --git a/install.sh b/install.sh
deleted file mode 100644
index 51fe986ee..000000000
--- a/install.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-echo "================================================"
-echo "----------------- Openclassify -----------------"
-echo "----- Automated install script with Docker -----"
-echo "================================================"
-
-docker --version
-cp .env-sail .env
-docker compose up
\ No newline at end of file
diff --git a/lang/ar/messages.php b/lang/ar/messages.php
new file mode 100644
index 000000000..81e64665c
--- /dev/null
+++ b/lang/ar/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'الرئيسية',
+ 'categories' => 'الفئات',
+ 'listings' => 'الإعلانات',
+ 'search' => 'بحث',
+ 'search_placeholder' => 'ابحث عن أي شيء...',
+ 'login' => 'تسجيل الدخول',
+ 'register' => 'التسجيل',
+ 'logout' => 'تسجيل الخروج',
+ 'find_what_you_need' => 'ابحث عما تحتاجه',
+ 'hero_subtitle' => 'اشترِ وبِع كل شيء في منطقتك',
+ 'browse_categories' => 'تصفح الفئات',
+ 'recent_listings' => 'أحدث الإعلانات',
+ 'featured_listings' => 'الإعلانات المميزة',
+ 'post_listing' => 'نشر إعلان',
+ 'sell_something' => 'هل لديك شيء للبيع؟',
+ 'free' => 'مجاني',
+ 'view' => 'عرض',
+ 'contact_seller' => 'تواصل مع البائع',
+];
diff --git a/lang/de/messages.php b/lang/de/messages.php
new file mode 100644
index 000000000..50636d39e
--- /dev/null
+++ b/lang/de/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'Startseite',
+ 'categories' => 'Kategorien',
+ 'listings' => 'Anzeigen',
+ 'search' => 'Suchen',
+ 'search_placeholder' => 'Nach allem suchen...',
+ 'login' => 'Anmelden',
+ 'register' => 'Registrieren',
+ 'logout' => 'Abmelden',
+ 'find_what_you_need' => 'Finden Sie, was Sie brauchen',
+ 'hero_subtitle' => 'Kaufen und verkaufen Sie alles in Ihrer Umgebung',
+ 'browse_categories' => 'Kategorien durchsuchen',
+ 'recent_listings' => 'Neueste Anzeigen',
+ 'featured_listings' => 'Empfohlene Anzeigen',
+ 'post_listing' => 'Anzeige aufgeben',
+ 'sell_something' => 'Haben Sie etwas zu verkaufen?',
+ 'free' => 'Kostenlos',
+ 'view' => 'Ansehen',
+ 'contact_seller' => 'Verkäufer kontaktieren',
+];
diff --git a/lang/en/messages.php b/lang/en/messages.php
new file mode 100644
index 000000000..13ceabee7
--- /dev/null
+++ b/lang/en/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'Home',
+ 'categories' => 'Categories',
+ 'listings' => 'Listings',
+ 'search' => 'Search',
+ 'search_placeholder' => 'Search for anything...',
+ 'login' => 'Login',
+ 'register' => 'Register',
+ 'logout' => 'Logout',
+ 'find_what_you_need' => 'Find What You Need',
+ 'hero_subtitle' => 'Buy and sell everything in your area',
+ 'browse_categories' => 'Browse Categories',
+ 'recent_listings' => 'Recent Listings',
+ 'featured_listings' => 'Featured Listings',
+ 'post_listing' => 'Post Listing',
+ 'sell_something' => 'Have something to sell?',
+ 'free' => 'Free',
+ 'view' => 'View',
+ 'contact_seller' => 'Contact Seller',
+];
diff --git a/lang/es/messages.php b/lang/es/messages.php
new file mode 100644
index 000000000..8ca362b3c
--- /dev/null
+++ b/lang/es/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'Inicio',
+ 'categories' => 'Categorías',
+ 'listings' => 'Anuncios',
+ 'search' => 'Buscar',
+ 'search_placeholder' => 'Busca cualquier cosa...',
+ 'login' => 'Iniciar sesión',
+ 'register' => 'Registrarse',
+ 'logout' => 'Cerrar sesión',
+ 'find_what_you_need' => 'Encuentra lo que necesitas',
+ 'hero_subtitle' => 'Compra y vende todo en tu área',
+ 'browse_categories' => 'Explorar categorías',
+ 'recent_listings' => 'Anuncios recientes',
+ 'featured_listings' => 'Anuncios destacados',
+ 'post_listing' => 'Publicar anuncio',
+ 'sell_something' => '¿Tienes algo que vender?',
+ 'free' => 'Gratis',
+ 'view' => 'Ver',
+ 'contact_seller' => 'Contactar vendedor',
+];
diff --git a/lang/fr/messages.php b/lang/fr/messages.php
new file mode 100644
index 000000000..6c9744d0a
--- /dev/null
+++ b/lang/fr/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'Accueil',
+ 'categories' => 'Catégories',
+ 'listings' => 'Annonces',
+ 'search' => 'Rechercher',
+ 'search_placeholder' => 'Rechercher quelque chose...',
+ 'login' => 'Connexion',
+ 'register' => "S'inscrire",
+ 'logout' => 'Déconnexion',
+ 'find_what_you_need' => 'Trouvez ce dont vous avez besoin',
+ 'hero_subtitle' => 'Achetez et vendez tout dans votre région',
+ 'browse_categories' => 'Parcourir les catégories',
+ 'recent_listings' => 'Annonces récentes',
+ 'featured_listings' => 'Annonces en vedette',
+ 'post_listing' => 'Publier une annonce',
+ 'sell_something' => 'Vous avez quelque chose à vendre?',
+ 'free' => 'Gratuit',
+ 'view' => 'Voir',
+ 'contact_seller' => 'Contacter le vendeur',
+];
diff --git a/lang/ja/messages.php b/lang/ja/messages.php
new file mode 100644
index 000000000..d1f9e20b6
--- /dev/null
+++ b/lang/ja/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'ホーム',
+ 'categories' => 'カテゴリー',
+ 'listings' => 'リスティング',
+ 'search' => '検索',
+ 'search_placeholder' => '何でも検索...',
+ 'login' => 'ログイン',
+ 'register' => '登録',
+ 'logout' => 'ログアウト',
+ 'find_what_you_need' => '必要なものを見つける',
+ 'hero_subtitle' => 'あなたのエリアで何でも売買',
+ 'browse_categories' => 'カテゴリーを閲覧',
+ 'recent_listings' => '最新リスティング',
+ 'featured_listings' => '注目リスティング',
+ 'post_listing' => 'リスティングを投稿',
+ 'sell_something' => '何か売りたいですか?',
+ 'free' => '無料',
+ 'view' => '表示',
+ 'contact_seller' => '売り手に連絡',
+];
diff --git a/lang/pt/messages.php b/lang/pt/messages.php
new file mode 100644
index 000000000..b57ee49c1
--- /dev/null
+++ b/lang/pt/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'Início',
+ 'categories' => 'Categorias',
+ 'listings' => 'Anúncios',
+ 'search' => 'Pesquisar',
+ 'search_placeholder' => 'Pesquise qualquer coisa...',
+ 'login' => 'Entrar',
+ 'register' => 'Registrar',
+ 'logout' => 'Sair',
+ 'find_what_you_need' => 'Encontre o que você precisa',
+ 'hero_subtitle' => 'Compre e venda tudo na sua área',
+ 'browse_categories' => 'Navegar categorias',
+ 'recent_listings' => 'Anúncios recentes',
+ 'featured_listings' => 'Anúncios em destaque',
+ 'post_listing' => 'Publicar anúncio',
+ 'sell_something' => 'Tem algo para vender?',
+ 'free' => 'Grátis',
+ 'view' => 'Ver',
+ 'contact_seller' => 'Contatar vendedor',
+];
diff --git a/lang/ru/messages.php b/lang/ru/messages.php
new file mode 100644
index 000000000..30949b848
--- /dev/null
+++ b/lang/ru/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'Главная',
+ 'categories' => 'Категории',
+ 'listings' => 'Объявления',
+ 'search' => 'Поиск',
+ 'search_placeholder' => 'Искать что угодно...',
+ 'login' => 'Войти',
+ 'register' => 'Регистрация',
+ 'logout' => 'Выйти',
+ 'find_what_you_need' => 'Найдите то, что вам нужно',
+ 'hero_subtitle' => 'Покупайте и продавайте всё в вашем районе',
+ 'browse_categories' => 'Просмотр категорий',
+ 'recent_listings' => 'Последние объявления',
+ 'featured_listings' => 'Рекомендуемые объявления',
+ 'post_listing' => 'Разместить объявление',
+ 'sell_something' => 'Есть что продать?',
+ 'free' => 'Бесплатно',
+ 'view' => 'Просмотр',
+ 'contact_seller' => 'Связаться с продавцом',
+];
diff --git a/lang/tr/messages.php b/lang/tr/messages.php
new file mode 100644
index 000000000..71f79ff24
--- /dev/null
+++ b/lang/tr/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => 'Ana Sayfa',
+ 'categories' => 'Kategoriler',
+ 'listings' => 'İlanlar',
+ 'search' => 'Ara',
+ 'search_placeholder' => 'Her şeyi arayın...',
+ 'login' => 'Giriş',
+ 'register' => 'Kayıt Ol',
+ 'logout' => 'Çıkış',
+ 'find_what_you_need' => 'İhtiyacınızı Bulun',
+ 'hero_subtitle' => 'Bölgenizdeki her şeyi alın ve satın',
+ 'browse_categories' => 'Kategorilere Göz At',
+ 'recent_listings' => 'Son İlanlar',
+ 'featured_listings' => 'Öne Çıkan İlanlar',
+ 'post_listing' => 'İlan Ver',
+ 'sell_something' => 'Satılık bir şeyiniz mi var?',
+ 'free' => 'Ücretsiz',
+ 'view' => 'Görüntüle',
+ 'contact_seller' => 'Satıcıyla İletişim',
+];
diff --git a/lang/zh/messages.php b/lang/zh/messages.php
new file mode 100644
index 000000000..77a48918d
--- /dev/null
+++ b/lang/zh/messages.php
@@ -0,0 +1,22 @@
+ 'OpenClassify',
+ 'home' => '首页',
+ 'categories' => '分类',
+ 'listings' => '列表',
+ 'search' => '搜索',
+ 'search_placeholder' => '搜索任何内容...',
+ 'login' => '登录',
+ 'register' => '注册',
+ 'logout' => '退出',
+ 'find_what_you_need' => '找到你需要的',
+ 'hero_subtitle' => '在你的地区买卖一切',
+ 'browse_categories' => '浏览分类',
+ 'recent_listings' => '最新列表',
+ 'featured_listings' => '精选列表',
+ 'post_listing' => '发布列表',
+ 'sell_something' => '有东西要卖?',
+ 'free' => '免费',
+ 'view' => '查看',
+ 'contact_seller' => '联系卖家',
+];
diff --git a/modules_statuses.json b/modules_statuses.json
new file mode 100644
index 000000000..870322052
--- /dev/null
+++ b/modules_statuses.json
@@ -0,0 +1,6 @@
+{
+ "Category": true,
+ "Listing": true,
+ "Location": true,
+ "Profile": true
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 000000000..4a45e2c65
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3476 @@
+{
+ "name": "openclassify",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "devDependencies": {
+ "@tailwindcss/forms": "^0.5.2",
+ "@tailwindcss/vite": "^4.0.0",
+ "alpinejs": "^3.4.2",
+ "autoprefixer": "^10.4.2",
+ "axios": "^1.11.0",
+ "concurrently": "^9.0.1",
+ "laravel-vite-plugin": "^2.0.0",
+ "postcss": "^8.4.31",
+ "tailwindcss": "^3.1.0",
+ "vite": "^7.0.7"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
+ "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
+ "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
+ "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
+ "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
+ "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
+ "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
+ "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
+ "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
+ "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
+ "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
+ "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
+ "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
+ "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
+ "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
+ "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
+ "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
+ "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
+ "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
+ "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
+ "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
+ "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
+ "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
+ "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
+ "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
+ "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
+ "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
+ "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
+ "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
+ "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
+ "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
+ "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
+ "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
+ "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
+ "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
+ "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
+ "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
+ "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
+ "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
+ "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
+ "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
+ "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
+ "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
+ "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
+ "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
+ "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
+ "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
+ "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
+ "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
+ "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@tailwindcss/forms": {
+ "version": "0.5.11",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz",
+ "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mini-svg-data-uri": "^1.2.3"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1"
+ }
+ },
+ "node_modules/@tailwindcss/node": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz",
+ "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.5",
+ "enhanced-resolve": "^5.19.0",
+ "jiti": "^2.6.1",
+ "lightningcss": "1.31.1",
+ "magic-string": "^0.30.21",
+ "source-map-js": "^1.2.1",
+ "tailwindcss": "4.2.1"
+ }
+ },
+ "node_modules/@tailwindcss/node/node_modules/tailwindcss": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz",
+ "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz",
+ "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.2.1",
+ "@tailwindcss/oxide-darwin-arm64": "4.2.1",
+ "@tailwindcss/oxide-darwin-x64": "4.2.1",
+ "@tailwindcss/oxide-freebsd-x64": "4.2.1",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.2.1",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.2.1",
+ "@tailwindcss/oxide-linux-x64-musl": "4.2.1",
+ "@tailwindcss/oxide-wasm32-wasi": "4.2.1",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.2.1"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz",
+ "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz",
+ "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz",
+ "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz",
+ "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz",
+ "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz",
+ "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz",
+ "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz",
+ "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz",
+ "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz",
+ "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==",
+ "bundleDependencies": [
+ "@napi-rs/wasm-runtime",
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util",
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.8.1",
+ "@emnapi/runtime": "^1.8.1",
+ "@emnapi/wasi-threads": "^1.1.0",
+ "@napi-rs/wasm-runtime": "^1.1.1",
+ "@tybys/wasm-util": "^0.10.1",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz",
+ "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz",
+ "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/vite": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz",
+ "integrity": "sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tailwindcss/node": "4.2.1",
+ "@tailwindcss/oxide": "4.2.1",
+ "tailwindcss": "4.2.1"
+ },
+ "peerDependencies": {
+ "vite": "^5.2.0 || ^6 || ^7"
+ }
+ },
+ "node_modules/@tailwindcss/vite/node_modules/tailwindcss": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz",
+ "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
+ "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.1.5"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
+ "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/alpinejs": {
+ "version": "3.15.8",
+ "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.8.tgz",
+ "integrity": "sha512-zxIfCRTBGvF1CCLIOMQOxAyBuqibxSEwS6Jm1a3HGA9rgrJVcjEWlwLcQTVGAWGS8YhAsTRLVrtQ5a5QT9bSSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "~3.1.1"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.27",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz",
+ "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.1",
+ "caniuse-lite": "^1.0.30001774",
+ "fraction.js": "^5.3.4",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz",
+ "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
+ "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001775",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
+ "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concurrently": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz",
+ "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "4.1.2",
+ "rxjs": "7.8.2",
+ "shell-quote": "1.8.3",
+ "supports-color": "8.1.1",
+ "tree-kill": "1.2.2",
+ "yargs": "17.7.2"
+ },
+ "bin": {
+ "conc": "dist/bin/concurrently.js",
+ "concurrently": "dist/bin/concurrently.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.302",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz",
+ "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.20.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz",
+ "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.27.3",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
+ "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.3",
+ "@esbuild/android-arm": "0.27.3",
+ "@esbuild/android-arm64": "0.27.3",
+ "@esbuild/android-x64": "0.27.3",
+ "@esbuild/darwin-arm64": "0.27.3",
+ "@esbuild/darwin-x64": "0.27.3",
+ "@esbuild/freebsd-arm64": "0.27.3",
+ "@esbuild/freebsd-x64": "0.27.3",
+ "@esbuild/linux-arm": "0.27.3",
+ "@esbuild/linux-arm64": "0.27.3",
+ "@esbuild/linux-ia32": "0.27.3",
+ "@esbuild/linux-loong64": "0.27.3",
+ "@esbuild/linux-mips64el": "0.27.3",
+ "@esbuild/linux-ppc64": "0.27.3",
+ "@esbuild/linux-riscv64": "0.27.3",
+ "@esbuild/linux-s390x": "0.27.3",
+ "@esbuild/linux-x64": "0.27.3",
+ "@esbuild/netbsd-arm64": "0.27.3",
+ "@esbuild/netbsd-x64": "0.27.3",
+ "@esbuild/openbsd-arm64": "0.27.3",
+ "@esbuild/openbsd-x64": "0.27.3",
+ "@esbuild/openharmony-arm64": "0.27.3",
+ "@esbuild/sunos-x64": "0.27.3",
+ "@esbuild/win32-arm64": "0.27.3",
+ "@esbuild/win32-ia32": "0.27.3",
+ "@esbuild/win32-x64": "0.27.3"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
+ "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
+ }
+ },
+ "node_modules/laravel-vite-plugin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-2.1.0.tgz",
+ "integrity": "sha512-z+ck2BSV6KWtYcoIzk9Y5+p4NEjqM+Y4i8/H+VZRLq0OgNjW2DqyADquwYu5j8qRvaXwzNmfCWl1KrMlV1zpsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "vite-plugin-full-reload": "^1.1.0"
+ },
+ "bin": {
+ "clean-orphaned-assets": "bin/clean.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "peerDependencies": {
+ "vite": "^7.0.0"
+ }
+ },
+ "node_modules/lightningcss": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz",
+ "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.31.1",
+ "lightningcss-darwin-arm64": "1.31.1",
+ "lightningcss-darwin-x64": "1.31.1",
+ "lightningcss-freebsd-x64": "1.31.1",
+ "lightningcss-linux-arm-gnueabihf": "1.31.1",
+ "lightningcss-linux-arm64-gnu": "1.31.1",
+ "lightningcss-linux-arm64-musl": "1.31.1",
+ "lightningcss-linux-x64-gnu": "1.31.1",
+ "lightningcss-linux-x64-musl": "1.31.1",
+ "lightningcss-win32-arm64-msvc": "1.31.1",
+ "lightningcss-win32-x64-msvc": "1.31.1"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz",
+ "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz",
+ "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz",
+ "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz",
+ "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz",
+ "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz",
+ "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz",
+ "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz",
+ "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz",
+ "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz",
+ "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz",
+ "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mini-svg-data-uri": "cli.js"
+ }
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.8",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
+ "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
+ "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+ "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
+ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.59.0",
+ "@rollup/rollup-android-arm64": "4.59.0",
+ "@rollup/rollup-darwin-arm64": "4.59.0",
+ "@rollup/rollup-darwin-x64": "4.59.0",
+ "@rollup/rollup-freebsd-arm64": "4.59.0",
+ "@rollup/rollup-freebsd-x64": "4.59.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.59.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.59.0",
+ "@rollup/rollup-linux-arm64-musl": "4.59.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.59.0",
+ "@rollup/rollup-linux-loong64-musl": "4.59.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.59.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.59.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.59.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.59.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-musl": "4.59.0",
+ "@rollup/rollup-openbsd-x64": "4.59.0",
+ "@rollup/rollup-openharmony-arm64": "4.59.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.59.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.59.0",
+ "@rollup/rollup-win32-x64-gnu": "4.59.0",
+ "@rollup/rollup-win32-x64-msvc": "4.59.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
+ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
+ "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "tinyglobby": "^0.2.11",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.19",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
+ "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.7",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vite": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
+ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.27.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-full-reload": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz",
+ "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "node_modules/vite/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 65fb40cd7..2ea7e1db4 100644
--- a/package.json
+++ b/package.json
@@ -1,22 +1,21 @@
{
+ "$schema": "https://www.schemastore.org/package.json",
"private": true,
+ "type": "module",
"scripts": {
- "dev": "npm run development",
- "development": "mix",
- "watch": "mix watch",
- "watch-poll": "mix watch -- --watch-options-poll=1000",
- "hot": "mix watch --hot",
- "prod": "npm run production",
- "production": "mix --production"
+ "build": "vite build",
+ "dev": "vite"
},
"devDependencies": {
- "axios": "^0.21",
- "laravel-mix": "^6.0.6",
- "lodash": "^4.17.19",
- "postcss": "^8.1.14",
- "vue": "^2.5.17",
- "vue-loader": "^15.9.8",
- "vue-template-compiler": "^2.6.11",
- "webpack": "^5.58.2"
+ "@tailwindcss/forms": "^0.5.2",
+ "@tailwindcss/vite": "^4.0.0",
+ "alpinejs": "^3.4.2",
+ "autoprefixer": "^10.4.2",
+ "axios": "^1.11.0",
+ "concurrently": "^9.0.1",
+ "laravel-vite-plugin": "^2.0.0",
+ "postcss": "^8.4.31",
+ "tailwindcss": "^3.1.0",
+ "vite": "^7.0.7"
}
}
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644
index 000000000..d70324153
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ tests/Unit
+
+
+ tests/Feature
+
+
+
+
+ app
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 000000000..49c0612d5
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/public/.htaccess b/public/.htaccess
index deac7c863..b574a597d 100644
--- a/public/.htaccess
+++ b/public/.htaccess
@@ -1,81 +1,25 @@
-SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
-
- Options -MultiViews
+ Options -MultiViews -Indexes
RewriteEngine On
-
- RewriteBase /
- # Redirect trailing slashes
- RewriteRule ^(.*)/$ /$1 [L,R=301]
-
- # Redirect old/alternate domains
- #RewriteCond %{HTTP_HOST} ^example.com [NC,OR]
- #RewriteCond %{HTTP_HOST} ^www.example.com [NC]
- #RewriteRule ^(.*)$ http://newdomain.com/$1 [L,R=301,NC]
-
- # Redirect to non-www
- #RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
- #RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
-
- # Redirect to www
- #RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
- #RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
-
- # Force non-ssl
- #RewriteCond %{HTTPS} on
- #RewriteRule ^ http://domain.com/$1 [L,R=301]
-
- # Force ssl
- #RewriteCond %{HTTPS} off
- #RewriteRule ^ https://domain.com/$1 [L,R=301]
-
- # Handle front controller
+ # Handle Authorization Header
+ RewriteCond %{HTTP:Authorization} .
+ RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+
+ # Handle X-XSRF-Token Header
+ RewriteCond %{HTTP:x-xsrf-token} .
+ RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]
+
+ # Redirect Trailing Slashes If Not A Folder...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_URI} (.+)/$
+ RewriteRule ^ %1 [L,R=301]
+
+ # Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
-
-
-
-
- AddOutputFilterByType DEFLATE application/javascript
- AddOutputFilterByType DEFLATE application/rss+xml
- AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
- AddOutputFilterByType DEFLATE application/x-font
- AddOutputFilterByType DEFLATE application/x-font-opentype
- AddOutputFilterByType DEFLATE application/x-font-otf
- AddOutputFilterByType DEFLATE application/x-font-truetype
- AddOutputFilterByType DEFLATE application/x-font-ttf
- AddOutputFilterByType DEFLATE application/x-font-woff
- AddOutputFilterByType DEFLATE application/x-font-woff2
- AddOutputFilterByType DEFLATE application/x-javascript
- AddOutputFilterByType DEFLATE application/xhtml+xml
- AddOutputFilterByType DEFLATE application/xml
- AddOutputFilterByType DEFLATE font/opentype
- AddOutputFilterByType DEFLATE font/otf
- AddOutputFilterByType DEFLATE font/ttf
- AddOutputFilterByType DEFLATE font/woff
- AddOutputFilterByType DEFLATE font/woff2
- AddOutputFilterByType DEFLATE image/svg+xml
- AddOutputFilterByType DEFLATE image/x-icon
- AddOutputFilterByType DEFLATE text/css
- AddOutputFilterByType DEFLATE text/html
- AddOutputFilterByType DEFLATE text/javascript
- AddOutputFilterByType DEFLATE text/plain
-
-
-
- ExpiresActive On
- ExpiresDefault "access plus 1 seconds"
- ExpiresByType text/html "access plus 1 seconds"
- ExpiresByType image/x-icon "access plus 2592000 seconds"
- ExpiresByType image/gif "access plus 2592000 seconds"
- ExpiresByType image/jpeg "access plus 2592000 seconds"
- ExpiresByType image/png "access plus 2592000 seconds"
- ExpiresByType text/css "access plus 604800 seconds"
- ExpiresByType text/javascript "access plus 86400 seconds"
- ExpiresByType application/x-javascript "access plus 86400 seconds"
diff --git a/public/Antonio-Bold.ttf b/public/Antonio-Bold.ttf
deleted file mode 100644
index 20a35d1eb..000000000
Binary files a/public/Antonio-Bold.ttf and /dev/null differ
diff --git a/addons/.gitkeep b/public/favicon.ico
similarity index 100%
rename from addons/.gitkeep
rename to public/favicon.ico
diff --git a/public/index.php b/public/index.php
index ec2c9a5fe..ee8f07e99 100644
--- a/public/index.php
+++ b/public/index.php
@@ -1,60 +1,20 @@
- */
-/*
-|--------------------------------------------------------------------------
-| Register The Auto Loader
-|--------------------------------------------------------------------------
-|
-| Composer provides a convenient, automatically generated class loader for
-| our application. We just need to utilize it! We'll simply require it
-| into the script here so that we don't have to worry about manual
-| loading any of our classes later on. It feels nice to relax.
-|
-*/
+use Illuminate\Foundation\Application;
+use Illuminate\Http\Request;
-require __DIR__.'/../bootstrap/autoload.php';
+define('LARAVEL_START', microtime(true));
-/*
-|--------------------------------------------------------------------------
-| Turn On The Lights
-|--------------------------------------------------------------------------
-|
-| We need to illuminate PHP development, so let us turn on the lights.
-| This bootstraps the framework and gets it ready for use, then it
-| will load up this application so that we can run it and send
-| the responses back to the browser and delight our users.
-|
-*/
+// Determine if the application is in maintenance mode...
+if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
+ require $maintenance;
+}
+// Register the Composer autoloader...
+require __DIR__.'/../vendor/autoload.php';
+
+// Bootstrap Laravel and handle the request...
+/** @var Application $app */
$app = require_once __DIR__.'/../bootstrap/app.php';
-/*
-|--------------------------------------------------------------------------
-| Run The Application
-|--------------------------------------------------------------------------
-|
-| Once we have the application, we can handle the incoming request
-| through the kernel, and send the associated response back to
-| the client's browser allowing them to enjoy the creative
-| and wonderful application we have prepared for them.
-|
-*/
-
-$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
-
-$kernel = \Anomaly\Streams\Platform\Http\CacheKernel::wrap($kernel);
-
-$response = $kernel->handle(
- $request = Illuminate\Http\Request::capture()
-);
-
-$response->send();
-
-$kernel->terminate($request, $response);
-
+$app->handleRequest(Request::capture());
diff --git a/public/openclassify-logo.png b/public/openclassify-logo.png
deleted file mode 100644
index 4fc88c57c..000000000
Binary files a/public/openclassify-logo.png and /dev/null differ
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 000000000..eb0536286
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/resources/assets/css/app.css b/resources/assets/css/app.css
deleted file mode 100644
index e69de29bb..000000000
diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js
deleted file mode 100644
index 9f8488e40..000000000
--- a/resources/assets/js/app.js
+++ /dev/null
@@ -1,28 +0,0 @@
-require('./bootstrap');
-
-import Vue from 'vue';
-
-const requireModulesVueFiles = (moduleVueFiles) => {
- moduleVueFiles.keys().map(key => {
- Vue.component(
- key.split('/').pop().split('.')[0],
- moduleVueFiles(key).default
- )
- })
-}
-
-requireModulesVueFiles(require.context(
- '../../../addons',
- true,
- /\.*\.vue$/i
-))
-
-requireModulesVueFiles(require.context(
- '../../../vendor/visiosoft',
- true,
- /\.vue$/i
-))
-
-const app = new Vue({
- el: '#openclassify'
-});
diff --git a/resources/assets/js/bootstrap.js b/resources/assets/js/bootstrap.js
deleted file mode 100644
index efda0c132..000000000
--- a/resources/assets/js/bootstrap.js
+++ /dev/null
@@ -1,29 +0,0 @@
-
-window._ = require('lodash');
-
-/**
- * We'll load the axios HTTP library which allows us to easily issue requests
- * to our Laravel back-end. This library automatically handles sending the
- * CSRF token as a header based on the value of the "XSRF" token cookie.
- */
-
-window.axios = require('axios');
-
-window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
-
-/**
- * Echo exposes an expressive API for subscribing to channels and listening
- * for events that are broadcast by Laravel. Echo and event broadcasting
- * allows your team to easily build robust real-time web applications.
- */
-
-// import Echo from 'laravel-echo';
-
-// window.Pusher = require('pusher-js');
-
-// window.Echo = new Echo({
-// broadcaster: 'pusher',
-// key: process.env.MIX_PUSHER_APP_KEY,
-// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
-// forceTLS: true
-// });
diff --git a/resources/css/app.css b/resources/css/app.css
new file mode 100644
index 000000000..b5c61c956
--- /dev/null
+++ b/resources/css/app.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/resources/default/addons/anomaly/user_security_check-extension/lang/de/message.php b/resources/default/addons/anomaly/user_security_check-extension/lang/de/message.php
deleted file mode 100644
index 8ff5cd1c4..000000000
--- a/resources/default/addons/anomaly/user_security_check-extension/lang/de/message.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'Ihr Account wurde noch nicht aktiviert. Bitte überprüfen Sie Ihren E-Mail-Posteingang.',
- 'account_is_disabled' => 'Ihr Account wurde deaktiviert.',
-];
diff --git a/resources/default/addons/anomaly/user_security_check-extension/lang/en/message.php b/resources/default/addons/anomaly/user_security_check-extension/lang/en/message.php
deleted file mode 100644
index eccb89f5c..000000000
--- a/resources/default/addons/anomaly/user_security_check-extension/lang/en/message.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'Your account has not been activated. Please check your email inbox.',
- 'account_is_disabled' => 'Your account has been disabled.',
-];
diff --git a/resources/default/addons/anomaly/user_security_check-extension/lang/fr/message.php b/resources/default/addons/anomaly/user_security_check-extension/lang/fr/message.php
deleted file mode 100644
index 565de5ad8..000000000
--- a/resources/default/addons/anomaly/user_security_check-extension/lang/fr/message.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'Votre compte n\'a pas encore été activé. Veuillez vérifier votre boîte e-mail.',
- 'account_is_disabled' => 'Votre compte a été désactivé.',
-];
diff --git a/resources/default/addons/anomaly/user_security_check-extension/lang/zh-cn/message.php b/resources/default/addons/anomaly/user_security_check-extension/lang/zh-cn/message.php
deleted file mode 100644
index 1ac5f0cfc..000000000
--- a/resources/default/addons/anomaly/user_security_check-extension/lang/zh-cn/message.php
+++ /dev/null
@@ -1,6 +0,0 @@
- '您的账号还未激活。 请检查您的电子邮件收件箱。',
- 'disabled' => '您的账号已经被禁用。',
-];
diff --git a/resources/js/app.js b/resources/js/app.js
new file mode 100644
index 000000000..a8093bee7
--- /dev/null
+++ b/resources/js/app.js
@@ -0,0 +1,7 @@
+import './bootstrap';
+
+import Alpine from 'alpinejs';
+
+window.Alpine = Alpine;
+
+Alpine.start();
diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js
new file mode 100644
index 000000000..5f1390b01
--- /dev/null
+++ b/resources/js/bootstrap.js
@@ -0,0 +1,4 @@
+import axios from 'axios';
+window.axios = axios;
+
+window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
diff --git a/resources/lang/ar/auth.php b/resources/lang/ar/auth.php
deleted file mode 100644
index f012d1b46..000000000
--- a/resources/lang/ar/auth.php
+++ /dev/null
@@ -1,19 +0,0 @@
- 'وراق الاعتماد هذه لا تتطابق مع سجلاتنا.',
- 'throttle' => 'عدد كبير جدا من محاولات الدخول. يرجى المحاولة مرة أخرى في :seconds ثانية.',
-
-];
diff --git a/resources/lang/ar/pagination.php b/resources/lang/ar/pagination.php
deleted file mode 100644
index a32196279..000000000
--- a/resources/lang/ar/pagination.php
+++ /dev/null
@@ -1,19 +0,0 @@
- 'السابق »',
- 'next' => '« التالي',
-
-];
diff --git a/resources/lang/ar/passwords.php b/resources/lang/ar/passwords.php
deleted file mode 100644
index 227631a19..000000000
--- a/resources/lang/ar/passwords.php
+++ /dev/null
@@ -1,22 +0,0 @@
- "كلمة المرور يجب أن تكون على الأقل 6 أحرف وتتطابق التأكيد.",
- "user" => "لا يمكن إيجاد مستخدم بهذا البريد الالكترني.",
- "token" => "رمز إعادة تعين كلمة المرور غير صالح.",
- "sent" => "تم ارسال مذكر كلمة المرور!",
- "reset" => "تم اعادة تعين كلمة المرور!",
-
-];
diff --git a/resources/lang/ar/validation.php b/resources/lang/ar/validation.php
deleted file mode 100644
index d56e0e7bc..000000000
--- a/resources/lang/ar/validation.php
+++ /dev/null
@@ -1,108 +0,0 @@
- ":attribute , يجب أن يتم قبوله.",
- "active_url" => ":attribute عنوان URL غيرصالح.",
- "after" => ":attribute يجب أن يكون التاريخ بعد :date.",
- "alpha" => ":attribute , يجب أن يحوي على حروف فقط.",
- "alpha_dash" => ":attribute ,ربما يجب أن يحوي حروف وأرقام وشرطات فقط.",
- "alpha_num" => ":attribute ,ربما يجب أن يحوي حروف وأرقام فقط.",
- "array" => ":attribute يجب أن يكون مصفوفة.",
- "before" => ":attribute يجب أن يكون التاريخ قبل :date.",
- "between" => [
- "numeric" => " :attribute يجب أن يكون بين :min و :max.",
- "file" => " :attribute يجب أن يكون بين :min and :max كيلوبايب.",
- "string" => " :attribute يجب أن يكون بين :min and :max حروف.",
- "array" => " :attribute يجب أن يكون لديه من :min إلى :max عناصر.",
- ],
- "boolean" => ":attribute الحقل يجب أن يكون true أو false",
- "confirmed" => ":attribute التأكيد لا يتطابق.",
- "date" => ":attribute تاريخ غير صالح.",
- "date_format" => ":attribute لا يتفق مع الصيغة :format.",
- "different" => ":attribute و :other يجب أن يكونا مختلفان.",
- "digits" => ":attribute يجب أن يكون :digits رقم.",
- "digits_between" => ":attribute يجب أن يكون بين :min و :max رقم.",
- "email" => ":attribute يجب أن يكون عنوان بريد صالح.",
- "filled" => ":attribute هذا الحقل مطلوب.",
- "exists" => "الذي تم اختياره :attribute غير صالح.",
- "image" => ":attribute يجب أن يكون صورة.",
- "in" => ":attribute الذي تم اختياره غير صالح.",
- "integer" => ":attribute يجب أن يكون رقم.",
- "ip" => ":attribute يجب أن يكون عنوان IP صالح.",
- "max" => [
- "numeric" => ":attribute يجب أن لا يكون أكبر من :max.",
- "file" => ":attribute يجب أن لا يكون أكبر من :max كيلوبايت.",
- "string" => ":attribute يجب أن لا يكون أكبر من :max حرف.",
- "array" => ":attribute يجب أن لا يكون لديها أكثر من :max عناصر.",
- ],
- "mimes" => ":attribute يجب أن يكون ملف من نوع: :values.",
- "min" => [
- "numeric" => ":attribute يجب أن يكون على الأقل :min.",
- "file" => ":attribute يجب أن يكون على الأقل :min كيلوبايت.",
- "string" => ":attribute يجب أن يكون على الأقل :min حرف.",
- "array" => ":attribute يجب أن يكون لديها على الأقل :min عناصر.",
- ],
- "not_in" => ":attribute المختار غير صالح.",
- "numeric" => ":attribute يجب أن يكون رقم.",
- "regex" => ":attribute الصيغة غير صالحة.",
- "required" => ":attribute الحقل مطلوب.",
- "required_if" => ":attribute الحقل مطلوب عندما :other يكون :value.",
- "required_with" => ":attribute الحقل مطلوب عندما :values يكون موجود.",
- "required_with_all" => ":attribute الحقل مطلوب عندما :values يكون موجود.",
- "required_without" => ":attribute الحقل مطلوب عندما :values غير موجود.",
- "required_without_all" => ":attribute الحقل مطلوب عندما ولا أي :values تكون موجودة.",
- "same" => ":attribute و :other يجب ان بتطابقا.",
- "size" => [
- "numeric" => ":attribute يجب أن يكون :size.",
- "file" => ":attribute يجب أن يكون :size كيلوبايت.",
- "string" => ":attribute يجب أن يكون :size حرف.",
- "array" => ":attribute يجب أن يحوي :size عناصر.",
- ],
- "غير صالح" => ":attribute is غير صالح.",
- "unique" => ":attribute تم أخذه مسبقاً.",
- "unique_trash" => ":attribute ربما تم أخذخ مسبقا بواسطة مدخل مهمل.",
- "url" => ":attribute صيغة غير صالحة.",
- "timezone" => ":attribute يجب أن يكون منطقة زمنية صالحة.",
- /*
- |--------------------------------------------------------------------------
- | Custom Validation Language Lines
- |--------------------------------------------------------------------------
- |
- | Here you may specify custom validation messages for attributes using the
- | convention "attribute.rule" to name the lines. This makes it quick to
- | specify a specific custom language line for a given attribute rule.
- |
- */
-
- 'custom' => [
- 'attribute-name' => [
- 'rule-name' => 'رسالة-مخصصة',
- ],
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Custom Validation Attributes
- |--------------------------------------------------------------------------
- |
- | The following language lines are used to swap attribute place-holders
- | with something more reader friendly such as E-Mail Address instead
- | of "email". This simply helps us make messages a little cleaner.
- |
- */
-
- 'attributes' => [],
-
-];
diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php
deleted file mode 100644
index e5506df29..000000000
--- a/resources/lang/en/auth.php
+++ /dev/null
@@ -1,19 +0,0 @@
- 'These credentials do not match our records.',
- 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
-
-];
diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php
deleted file mode 100644
index fcab34b25..000000000
--- a/resources/lang/en/pagination.php
+++ /dev/null
@@ -1,19 +0,0 @@
- '« Previous',
- 'next' => 'Next »',
-
-];
diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php
deleted file mode 100644
index e5544d201..000000000
--- a/resources/lang/en/passwords.php
+++ /dev/null
@@ -1,22 +0,0 @@
- 'Passwords must be at least six characters and match the confirmation.',
- 'reset' => 'Your password has been reset!',
- 'sent' => 'We have e-mailed your password reset link!',
- 'token' => 'This password reset token is invalid.',
- 'user' => "We can't find a user with that e-mail address.",
-
-];
diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php
deleted file mode 100644
index 28c6677f5..000000000
--- a/resources/lang/en/validation.php
+++ /dev/null
@@ -1,115 +0,0 @@
- 'The :attribute must be accepted.',
- 'active_url' => 'The :attribute is not a valid URL.',
- 'after' => 'The :attribute must be a date after :date.',
- 'alpha' => 'The :attribute may only contain letters.',
- 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
- 'alpha_num' => 'The :attribute may only contain letters and numbers.',
- 'array' => 'The :attribute must be an array.',
- 'before' => 'The :attribute must be a date before :date.',
- 'between' => [
- 'numeric' => 'The :attribute must be between :min and :max.',
- 'file' => 'The :attribute must be between :min and :max kilobytes.',
- 'string' => 'The :attribute must be between :min and :max characters.',
- 'array' => 'The :attribute must have between :min and :max items.',
- ],
- 'boolean' => 'The :attribute field must be true or false.',
- 'confirmed' => 'The :attribute confirmation does not match.',
- 'date' => 'The :attribute is not a valid date.',
- 'date_format' => 'The :attribute does not match the format :format.',
- 'different' => 'The :attribute and :other must be different.',
- 'digits' => 'The :attribute must be :digits digits.',
- 'digits_between' => 'The :attribute must be between :min and :max digits.',
- 'dimensions' => 'The :attribute has invalid image dimensions.',
- 'distinct' => 'The :attribute field has a duplicate value.',
- 'email' => 'The :attribute must be a valid email address.',
- 'exists' => 'The selected :attribute is invalid.',
- 'file' => 'The :attribute must be a file.',
- 'filled' => 'The :attribute field is required.',
- 'image' => 'The :attribute must be an image.',
- 'in' => 'The selected :attribute is invalid.',
- 'in_array' => 'The :attribute field does not exist in :other.',
- 'integer' => 'The :attribute must be an integer.',
- 'ip' => 'The :attribute must be a valid IP address.',
- 'json' => 'The :attribute must be a valid JSON string.',
- 'max' => [
- 'numeric' => 'The :attribute may not be greater than :max.',
- 'file' => 'The :attribute may not be greater than :max kilobytes.',
- 'string' => 'The :attribute may not be greater than :max characters.',
- 'array' => 'The :attribute may not have more than :max items.',
- ],
- 'mimes' => 'The :attribute must be a file of type: :values.',
- 'min' => [
- 'numeric' => 'The :attribute must be at least :min.',
- 'file' => 'The :attribute must be at least :min kilobytes.',
- 'string' => 'The :attribute must be at least :min characters.',
- 'array' => 'The :attribute must have at least :min items.',
- ],
- 'not_in' => 'The selected :attribute is invalid.',
- 'numeric' => 'The :attribute must be a number.',
- 'present' => 'The :attribute field must be present.',
- 'regex' => 'The :attribute format is invalid.',
- 'required' => 'The :attribute field is required.',
- 'required_if' => 'The :attribute field is required when :other is :value.',
- 'required_unless' => 'The :attribute field is required unless :other is in :values.',
- 'required_with' => 'The :attribute field is required when :values is present.',
- 'required_with_all' => 'The :attribute field is required when :values is present.',
- 'required_without' => 'The :attribute field is required when :values is not present.',
- 'required_without_all' => 'The :attribute field is required when none of :values are present.',
- 'same' => 'The :attribute and :other must match.',
- 'size' => [
- 'numeric' => 'The :attribute must be :size.',
- 'file' => 'The :attribute must be :size kilobytes.',
- 'string' => 'The :attribute must be :size characters.',
- 'array' => 'The :attribute must contain :size items.',
- ],
- 'string' => 'The :attribute must be a string.',
- 'timezone' => 'The :attribute must be a valid zone.',
- 'unique' => 'The :attribute has already been taken.',
- 'url' => 'The :attribute format is invalid.',
-
- /*
- |--------------------------------------------------------------------------
- | Custom Validation Language Lines
- |--------------------------------------------------------------------------
- |
- | Here you may specify custom validation messages for attributes using the
- | convention "attribute.rule" to name the lines. This makes it quick to
- | specify a specific custom language line for a given attribute rule.
- |
- */
-
- 'custom' => [
- 'attribute-name' => [
- 'rule-name' => 'custom-message',
- ],
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Custom Validation Attributes
- |--------------------------------------------------------------------------
- |
- | The following language lines are used to swap attribute place-holders
- | with something more reader friendly such as E-Mail Address instead
- | of "email". This simply helps us make messages a little cleaner.
- |
- */
-
- 'attributes' => [],
-
-];
diff --git a/resources/lang/fa/auth.php b/resources/lang/fa/auth.php
deleted file mode 100644
index 756f162e6..000000000
--- a/resources/lang/fa/auth.php
+++ /dev/null
@@ -1,19 +0,0 @@
- 'اطلاعات ورود صحیح نمیباشد.',
- 'throttle' => 'تعداد دفعات تلاش برای ورود از حد مجاز بیشتر است. لطفا پس از :seconds ثانیه مجددا تلاش فرمایید.',
-
-];
diff --git a/resources/lang/fa/pagination.php b/resources/lang/fa/pagination.php
deleted file mode 100644
index c48ce3319..000000000
--- a/resources/lang/fa/pagination.php
+++ /dev/null
@@ -1,19 +0,0 @@
- '« قبلی',
- 'next' => 'بعدی »',
-
-];
diff --git a/resources/lang/fa/passwords.php b/resources/lang/fa/passwords.php
deleted file mode 100644
index 62b291022..000000000
--- a/resources/lang/fa/passwords.php
+++ /dev/null
@@ -1,22 +0,0 @@
- 'رمز عبور باید حداقل شش کاراکتر و مطابقت داشته باشد.',
- 'reset' => 'بازگردانی کلمه عبور انجام شد!',
- 'sent' => 'ایمیل یاد آور رمز عبور ارسال شد!',
- 'token' => 'مشخصه ی بازنشاندن رمز عبور اشتباه است.',
- 'user' => "کاربری با این ایمیل آدرس یافت نشد.",
-
-];
diff --git a/resources/lang/fa/validation.php b/resources/lang/fa/validation.php
deleted file mode 100644
index 1ad140ddc..000000000
--- a/resources/lang/fa/validation.php
+++ /dev/null
@@ -1,115 +0,0 @@
- ':attribute باید پذیرفته شده باشد.',
- 'active_url' => 'آدرس :attribute معتبر نیست',
- 'after' => ':attribute باید تاریخی بعد از :date باشد.',
- 'alpha' => ':attribute باید شامل حروف الفبا باشد.',
- 'alpha_dash' => ':attribute باید شامل حروف الفبا و عدد و خظ تیره(-) باشد.',
- 'alpha_num' => ':attribute باید شامل حروف الفبا و عدد باشد.',
- 'array' => ':attribute باید شامل آرایه باشد.',
- 'before' => ':attribute باید تاریخی قبل از :date باشد.',
- 'between' => [
- 'numeric' => ':attribute باید بین :min و :max باشد.',
- 'file' => ':attribute باید بین :min و :max کیلوبایت باشد.',
- 'string' => ':attribute باید بین :min و :max کاراکتر باشد.',
- 'array' => ':attribute باید بین :min و :max آیتم باشد.',
- ],
- 'boolean' => 'فیلد :attribute فقط میتواند صحیح و یا غلط باشد',
- 'confirmed' => ':attribute با تاییدیه مطابقت ندارد.',
- 'date' => ':attribute یک تاریخ معتبر نیست.',
- 'date_format' => ':attribute با الگوی :format مطاقبت ندارد.',
- 'different' => ':attribute و :other باید متفاوت باشند.',
- 'digits' => ':attribute باید :digits رقم باشد.',
- 'digits_between' => ':attribute باید بین :min و :max رقم باشد.',
- 'dimensions' => ':attribute دارای طول عرض نامناسب می باشد.',
- 'distinct' => ':attribute نباید دارای مقادیر تکراری باشد.',
- 'email' => 'فرمت :attribute معتبر نیست.',
- 'exists' => ':attribute انتخاب شده، معتبر نیست.',
- 'file' => ':attribute باید یک فایل باشد.',
- 'filled' => 'فیلد :attribute الزامی است.',
- 'image' => ':attribute باید تصویر باشد.',
- 'in' => ':attribute انتخاب شده، معتبر نیست.',
- 'in_array' => ':attribute باید یکی از مقادیر (:other) باشد.',
- 'integer' => ':attribute باید نوع داده ای عددی (integer) باشد.',
- 'ip' => ':attribute باید IP آدرس معتبر باشد.',
- 'json' => ':attribute باید به صورت رشته صحیحی با فرمت JSON باشد.',
- 'max' => [
- 'numeric' => ':attribute نباید بزرگتر از :max باشد.',
- 'file' => ':attribute نباید بزرگتر از :max کیلوبایت باشد.',
- 'string' => ':attribute نباید بیشتر از :max کاراکتر باشد.',
- 'array' => ':attribute نباید بیشتر از :max آیتم باشد.',
- ],
- 'mimes' => ':attribute باید یکی از فرمت های :values باشد.',
- 'min' => [
- 'numeric' => ':attribute نباید کوچکتر از :min باشد.',
- 'file' => ':attribute نباید کوچکتر از :min کیلوبایت باشد.',
- 'string' => ':attribute نباید کمتر از :min کاراکتر باشد.',
- 'array' => ':attribute نباید کمتر از :min آیتم باشد.',
- ],
- 'not_in' => ':attribute انتخاب شده، معتبر نیست.',
- 'numeric' => ':attribute باید شامل عدد باشد.',
- 'present' => 'فیلد :attribute موجود نیست (میختواند خالی باشد).',
- 'regex' => ':attribute یک فرمت معتبر نیست.',
- 'required' => 'فیلد :attribute الزامی است.',
- 'required_if' => 'فیلد :attribute هنگامی که :other برابر با :value است، الزامیست.',
- 'required_unless' => 'فیلد :attribute هنگامی که :other یک از مقادیر :values است، الزامیست.',
- 'required_with' => ':attribute الزامی است زمانی که :values موجود است.',
- 'required_with_all' => ':attribute الزامی است زمانی که :values موجود است.',
- 'required_without' => ':attribute الزامی است زمانی که :values موجود نیست.',
- 'required_without_all' => ':attribute الزامی است زمانی که :values موجود نیست.',
- 'same' => ':attribute و :other باید مانند هم باشند.',
- 'size' => [
- 'numeric' => ':attribute باید برابر با :size باشد.',
- 'file' => ':attribute باید برابر با :size کیلوبایت باشد.',
- 'string' => ':attribute باید برابر با :size کاراکتر باشد.',
- 'array' => ':attribute باشد شامل :size آیتم باشد.',
- ],
- 'string' => 'فیلد :attribute باید یک رشته متنی باشد.',
- 'timezone' => 'فیلد :attribute باید یک منطقه صحیح باشد.',
- 'unique' => ':attribute قبلا انتخاب شده است.',
- 'url' => 'فرمت آدرس :attribute اشتباه است.',
-
- /*
- |--------------------------------------------------------------------------
- | Custom Validation Language Lines
- |--------------------------------------------------------------------------
- |
- | Here you may specify custom validation messages for attributes using the
- | convention "attribute.rule" to name the lines. This makes it quick to
- | specify a specific custom language line for a given attribute rule.
- |
- */
-
- 'custom' => [
- 'attribute-name' => [
- 'rule-name' => 'پیام-دلخواه',
- ],
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Custom Validation Attributes
- |--------------------------------------------------------------------------
- |
- | The following language lines are used to swap attribute place-holders
- | with something more reader friendly such as E-Mail Address instead
- | of "email". This simply helps us make messages a little cleaner.
- |
- */
-
- 'attributes' => [],
-
-];
diff --git a/resources/lang/tr/auth.php b/resources/lang/tr/auth.php
deleted file mode 100644
index 7edabe2ed..000000000
--- a/resources/lang/tr/auth.php
+++ /dev/null
@@ -1,19 +0,0 @@
- 'Bu kullanıcı bilgileri, bizim verilerimizle eşleşmiyor.',
- 'throttle' => 'Çok fazla oturum açma girişimi. Lütfen :seconds saniye içinde tekrar deneyin.',
-
-];
diff --git a/resources/lang/tr/pagination.php b/resources/lang/tr/pagination.php
deleted file mode 100644
index 18fd3e1f0..000000000
--- a/resources/lang/tr/pagination.php
+++ /dev/null
@@ -1,19 +0,0 @@
- '« Önceki',
- 'next' => 'Sonraki »',
-
-];
diff --git a/resources/lang/tr/passwords.php b/resources/lang/tr/passwords.php
deleted file mode 100644
index 1905afa6f..000000000
--- a/resources/lang/tr/passwords.php
+++ /dev/null
@@ -1,22 +0,0 @@
- 'Şifreler en az altı karakter olmalı ve onay ile eşleşmelidir.',
- 'reset' => 'Şifreniz sıfırlandı!',
- 'sent' => 'Şifre sıfırlama bağlantınızı size e-posta ile gönderdik!',
- 'token' => 'Şifre sıfırlama adresi/kodu geçersiz.',
- 'user' => 'Bu e-posta adresi ile kayıtlı bir üye bulunmuyor.',
-
-];
diff --git a/resources/lang/tr/validation.php b/resources/lang/tr/validation.php
deleted file mode 100644
index ad7c57062..000000000
--- a/resources/lang/tr/validation.php
+++ /dev/null
@@ -1,115 +0,0 @@
- ':attribute kabul edilmelidir.',
- 'active_url' => ':attribute geçerli bir URL olmalıdır.',
- 'after' => ':attribute şundan daha eski bir tarih olmalıdır :date.',
- 'alpha' => ':attribute sadece harflerden oluşmalıdır.',
- 'alpha_dash' => ':attribute sadece harfler, rakamlar ve tirelerden oluşmalıdır.',
- 'alpha_num' => ':attribute sadece harfler ve rakamlar içermelidir.',
- 'array' => ':attribute dizi olmalıdır.',
- 'before' => ':attribute şundan daha önceki bir tarih olmalıdır :date.',
- 'between' => [
- 'numeric' => ':attribute :min - :max arasında olmalıdır.',
- 'file' => ':attribute :min - :max arasındaki kilobayt değeri olmalıdır.',
- 'string' => ':attribute :min - :max arasında karakterden oluşmalıdır.',
- 'array' => ':attribute :min - :max arasında nesneye sahip olmalıdır.',
- ],
- 'boolean' => ':attribute sadece doğru veya yanlış olmalıdır.',
- 'confirmed' => ':attribute tekrarı eşleşmiyor.',
- 'date' => ':attribute geçerli bir tarih olmalıdır.',
- 'date_format' => ':attribute :format biçimi ile eşleşmiyor.',
- 'different' => ':attribute ile :other birbirinden farklı olmalıdır.',
- 'digits' => ':attribute :digits rakam olmalıdır.',
- 'digits_between' => ':attribute :min ile :max arasında rakam olmalıdır.',
- 'dimensions' => ':attribute görsel ölçüleri geçersiz.',
- 'distinct' => ':attribute alanı yinelenen bir değere sahip.',
- 'email' => 'Lütfen geçerli bir e-posta adresi giriniz!',
- 'exists' => 'Seçili :attribute geçersiz.',
- 'file' => ':attribute dosya olmalıdır.',
- 'filled' => ':attribute alanı gereklidir.',
- 'image' => ':attribute alanı resim dosyası olmalıdır.',
- 'in' => ':attribute değeri geçersiz.',
- 'in_array' => ':attribute alanı :other içinde mevcut değil.',
- 'integer' => ':attribute tamsayı olmalıdır.',
- 'ip' => ':attribute geçerli bir IP adresi olmalıdır.',
- 'json' => ':attribute geçerli bir JSON değişkeni olmalıdır.',
- 'max' => [
- 'numeric' => ':attribute değeri :max değerinden küçük olmalıdır.',
- 'file' => ':attribute değeri :max kilobayt değerinden küçük olmalıdır.',
- 'string' => ':attribute değeri :max karakter değerinden küçük olmalıdır.',
- 'array' => ':attribute değeri :max adedinden az nesneye sahip olmalıdır.',
- ],
- 'mimes' => ':attribute dosya biçimi :values olmalıdır.',
- 'min' => [
- 'numeric' => ':attribute değeri :min değerinden büyük olmalıdır.',
- 'file' => ':attribute değeri :min kilobayt değerinden büyük olmalıdır.',
- 'string' => ':attribute değeri :min karakter değerinden büyük olmalıdır.',
- 'array' => ':attribute en az :min nesneye sahip olmalıdır.',
- ],
- 'not_in' => 'Seçili :attribute geçersiz.',
- 'numeric' => ':attribute sayı olmalıdır.',
- 'present' => 'The :attribute field must be present.',
- 'regex' => ':attribute biçimi geçersiz.',
- 'required' => ':attribute alanı gereklidir.',
- 'required_if' => ':attribute alanı, :other :value değerine sahip olduğunda zorunludur.',
- 'required_unless' => ':other :values olmadığı sürece :attribute alanı gereklidir. ',
- 'required_with' => ':attribute alanı :values varken zorunludur.',
- 'required_with_all' => ':attribute alanı herhangi bir :values değeri varken zorunludur.',
- 'required_without' => ':attribute alanı :values yokken zorunludur.',
- 'required_without_all' => ':attribute alanı :values değerlerinden herhangi biri yokken zorunludur.',
- 'same' => ':attribute ile :other eşleşmelidir.',
- 'size' => [
- 'numeric' => ':attribute :size olmalıdır.',
- 'file' => ':attribute :size kilobyte olmalıdır.',
- 'string' => ':attribute :size karakter olmalıdır.',
- 'array' => ':attribute :size nesneye sahip olmalıdır.',
- ],
- 'string' => ':attribute dizge olmalıdır.',
- 'timezone' => ':attribute geçerli bir saat dilimi olmalıdır.',
- 'unique' => ':attribute daha önceden kayıt edilmiş.',
- 'url' => ':attribute biçimi geçersiz.',
-
- /*
- |--------------------------------------------------------------------------
- | Custom Validation Language Lines
- |--------------------------------------------------------------------------
- |
- | Here you may specify custom validation messages for attributes using the
- | convention "attribute.rule" to name the lines. This makes it quick to
- | specify a specific custom language line for a given attribute rule.
- |
- */
-
- 'custom' => [
- 'attribute-name' => [
- 'rule-name' => 'ozel-mesaj',
- ],
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Custom Validation Attributes
- |--------------------------------------------------------------------------
- |
- | The following language lines are used to swap attribute place-holders
- | with something more reader friendly such as E-Mail Address instead
- | of "email". This simply helps us make messages a little cleaner.
- |
- */
-
- 'attributes' => [],
-
-];
diff --git a/resources/streams/config/addons.php b/resources/streams/config/addons.php
deleted file mode 100644
index 7a64e9e31..000000000
--- a/resources/streams/config/addons.php
+++ /dev/null
@@ -1,36 +0,0 @@
- [
- 'vendor/anomaly/settings-module',
- 'vendor/anomaly/preferences-module',
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Deferred Addons
- |--------------------------------------------------------------------------
- |
- | Deferred addons are registered last and can be defined
- | here by specifying their relative path to the addon's root.
- |
- */
-
- 'deferred' => [
- 'vendor/anomaly/pages-module',
- 'vendor/anomaly/redirects-module',
- 'vendor/visiosoft/advs-module',
- ]
-
-];
diff --git a/resources/streams/config/currencies.php b/resources/streams/config/currencies.php
deleted file mode 100644
index 76e80b211..000000000
--- a/resources/streams/config/currencies.php
+++ /dev/null
@@ -1,1252 +0,0 @@
- explode(',',
- env('ENABLED_CURRENCIES',
- 'USD')),
-
- /*
- |--------------------------------------------------------------------------
- | Default Currency
- |--------------------------------------------------------------------------
- |
- | The default currency will be used if one can not
- | be determined automatically.
- |
- */
-
- 'default' => env('DEFAULT_CURRENCY',
- 'USD'),
-
- /*
- |--------------------------------------------------------------------------
- | Supported Currencies
- |--------------------------------------------------------------------------
- |
- | In order to enable a currency or use it at all
- | the ISO currency code MUST be in this array.
- |
- */
-
- 'supported' => [
- 'USD' => [
- 'name' => 'US Dollar',
- 'direction' => 'ltr',
- 'symbol' => '$',
- 'separator' => '.',
- 'point' => ',',
- 'decimals' => 2,
- ],
- 'TRY' => [
- 'name' => 'Türk Lirası',
- 'direction' => 'rtl',
- 'symbol' => ' ₺',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- ],
- 'AED' => [
- 'name' => 'UAE Dirham',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'د.إ',
- ],
- 'AFN' => [
- 'name' => 'Afghani',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Af',
- ],
- 'ALL' => [
- 'name' => 'Lek',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Leke',
- ],
- 'AMD' => [
- 'name' => 'Armenian Dram',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Դ',
- ],
- 'AOA' => [
- 'name' => 'Kwanza',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Kz',
- ],
- 'ARS' => [
- 'name' => 'Argentine Peso',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'AUD' => [
- 'name' => 'Australian Dollar',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ARS',
- ],
- 'AWG' => [
- 'name' => 'Aruban Guilder/Florin',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ƒ',
- ],
- 'AZN' => [
- 'name' => 'Azerbaijanian Manat',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ман',
- ],
- 'BAM' => [
- 'name' => 'Konvertibilna Marka',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'КМ',
- ],
- 'BBD' => [
- 'name' => 'Barbados Dollar',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'BBD',
- ],
- 'BDT' => [
- 'name' => 'Taka',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '৳',
- ],
- 'BGN' => [
- 'name' => 'Bulgarian Lev',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'лв',
- ],
- 'BHD' => [
- 'name' => 'Bahraini Dinar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ب.د',
- ],
- 'BIF' => [
- 'name' => 'Burundi Franc',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₣',
- ],
- 'BMD' => [
- 'name' => 'Bermudian Dollar',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'BMD',
- ],
- 'BND' => [
- 'name' => 'Brunei Dollar',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'BND',
- ],
- 'BOB' => [
- 'name' => 'Boliviano',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Bs.',
- ],
- 'BRL' => [
- 'name' => 'Brazilian Real',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'R$',
- ],
- 'BSD' => [
- 'name' => 'Bahamian Dollar',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'BSD',
- ],
- 'BTN' => [
- 'name' => 'Ngultrum',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '',
- ],
- 'BWP' => [
- 'name' => 'Pula',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'P',
- ],
- 'BYN' => [
- 'name' => 'Belarusian Ruble',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Br',
- ],
- 'BZD' => [
- 'name' => 'Belize Dollar',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'BZD',
- ],
- 'CAD' => [
- 'name' => 'Canadian Dollar',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'CAD',
- ],
- 'CDF' => [
- 'name' => 'Congolese Franc',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₣',
- ],
- 'CHF' => [
- 'name' => 'Swiss Franc',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₣',
- ],
- 'CLP' => [
- 'name' => 'Chilean Peso',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'CLP',
- ],
- 'CNY' => [
- 'name' => 'Yuan',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '¥',
- ],
- 'COP' => [
- 'name' => 'Colombian Peso',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'COP',
- ],
- 'CRC' => [
- 'name' => 'Costa Rican Colon',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₡',
- ],
- 'CUP' => [
- 'name' => 'Cuban Peso',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'CUP',
- ],
- 'CVE' => [
- 'name' => 'Cape Verde Escudo',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'CVE',
- ],
- 'CZK' => [
- 'name' => 'Czech Koruna',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Kč',
- ],
- 'DJF' => [
- 'name' => 'Djibouti Franc',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₣',
- ],
- 'DKK' => [
- 'name' => 'Danish Krone',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'kr',
- ],
- 'DOP' => [
- 'name' => 'Dominican Peso',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'DOP',
- ],
- 'DZD' => [
- 'name' => 'Algerian Dinar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'د.ج',
- ],
- 'EGP' => [
- 'name' => 'Egyptian Pound',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'EGP',
- ],
- 'ERN' => [
- 'name' => 'Nakfa',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Nfk',
- ],
- 'ETB' => [
- 'name' => 'Ethiopian Birr',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '',
- ],
- 'EUR' => [
- 'name' => 'Euro',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '€',
- ],
- 'FJD' => [
- 'name' => 'Fiji Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'FKP' => [
- 'name' => 'Falkland Islands Pound',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'FKP',
- ],
- 'GBP' => [
- 'name' => 'Pound Sterling',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '£',
- ],
- 'GEL' => [
- 'name' => 'Lari',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ლ',
- ],
- 'GHS' => [
- 'name' => 'Cedi',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₵',
- ],
- 'GIP' => [
- 'name' => 'Gibraltar Pound',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'GIP',
- ],
- 'GMD' => [
- 'name' => 'Dalasi',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'D',
- ],
- 'GNF' => [
- 'name' => 'Guinea Franc',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₣',
- ],
- 'GTQ' => [
- 'name' => 'Quetzal',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Q',
- ],
- 'GYD' => [
- 'name' => 'Guyana Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'HKD' => [
- 'name' => 'Hong Kong Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'HNL' => [
- 'name' => 'Lempira',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'L',
- ],
- 'HRK' => [
- 'name' => 'Croatian Kuna',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Kn',
- ],
- 'HTG' => [
- 'name' => 'Gourde',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'G',
- ],
- 'HUF' => [
- 'name' => 'Forint',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Ft',
- ],
- 'IDR' => [
- 'name' => 'Rupiah',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Rp',
- ],
- 'ILS' => [
- 'name' => 'New Israeli Shekel',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₪',
- ],
- 'INR' => [
- 'name' => 'Indian Rupee',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₹',
- ],
- 'IQD' => [
- 'name' => 'Iraqi Dinar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ع.د',
- ],
- 'IRR' => [
- 'name' => 'Iranian Rial',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '﷼',
- ],
- 'ISK' => [
- 'name' => 'Iceland Krona',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Kr',
- ],
- 'JMD' => [
- 'name' => 'Jamaican Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'JOD' => [
- 'name' => 'Jordanian Dinar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'د.ا',
- ],
- 'JPY' => [
- 'name' => 'Yen',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '¥',
- ],
- 'KES' => [
- 'name' => 'Kenyan Shilling',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Sh',
- ],
- 'KGS' => [
- 'name' => 'Som',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '',
- ],
- 'KHR' => [
- 'name' => 'Riel',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '៛',
- ],
- 'KPW' => [
- 'name' => 'North Korean Won',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₩',
- ],
- 'KRW' => [
- 'name' => 'South Korean Won',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₩',
- ],
- 'KWD' => [
- 'name' => 'Kuwaiti Dinar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'د.ك',
- ],
- 'KYD' => [
- 'name' => 'Cayman Islands Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'KZT' => [
- 'name' => 'Tenge',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '〒',
- ],
- 'LAK' => [
- 'name' => 'Kip',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₭',
- ],
- 'LBP' => [
- 'name' => 'Lebanese Pound',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ل.ل',
- ],
- 'LKR' => [
- 'name' => 'Sri Lanka Rupee',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Rs',
- ],
- 'LRD' => [
- 'name' => 'Liberian Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'LSL' => [
- 'name' => 'Loti',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'L',
- ],
- 'LYD' => [
- 'name' => 'Libyan Dinar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ل.د',
- ],
- 'MAD' => [
- 'name' => 'Moroccan Dirham',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'د.م.',
- ],
- 'MDL' => [
- 'name' => 'Moldovan Leu',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'L',
- ],
- 'MGA' => [
- 'name' => 'Malagasy Ariary',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '',
- ],
- 'MKD' => [
- 'name' => 'Denar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ден',
- ],
- 'MMK' => [
- 'name' => 'Kyat',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'K',
- ],
- 'MNT' => [
- 'name' => 'Tugrik',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₮',
- ],
- 'MOP' => [
- 'name' => 'Pataca',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'P',
- ],
- 'MRU' => [
- 'name' => 'Ouguiya',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'UM',
- ],
- 'MUR' => [
- 'name' => 'Mauritius Rupee',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₨',
- ],
- 'MVR' => [
- 'name' => 'Rufiyaa',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ރ.',
- ],
- 'MWK' => [
- 'name' => 'Kwacha',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'MK',
- ],
- 'MXN' => [
- 'name' => 'Mexican Peso',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'MYR' => [
- 'name' => 'Malaysian Ringgit',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'RM',
- ],
- 'MZN' => [
- 'name' => 'Metical',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'MTn',
- ],
- 'NAD' => [
- 'name' => 'Namibia Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'NGN' => [
- 'name' => 'Naira',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₦',
- ],
- 'NIO' => [
- 'name' => 'Cordoba Oro',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'C$',
- ],
- 'NOK' => [
- 'name' => 'Norwegian Krone',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'kr',
- ],
- 'NPR' => [
- 'name' => 'Nepalese Rupee',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₨',
- ],
- 'NZD' => [
- 'name' => 'New Zealand Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'OMR' => [
- 'name' => 'Rial Omani',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ر.ع.',
- ],
- 'PAB' => [
- 'name' => 'Balboa',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'B/.',
- ],
- 'PEN' => [
- 'name' => 'Nuevo Sol',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'S/.',
- ],
- 'PGK' => [
- 'name' => 'Kina',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'K',
- ],
- 'PHP' => [
- 'name' => 'Philippine Peso',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₱',
- ],
- 'PKR' => [
- 'name' => 'Pakistan Rupee',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₨',
- ],
- 'PLN' => [
- 'name' => 'PZloty',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'zł',
- ],
- 'PYG' => [
- 'name' => 'Guarani',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₲',
- ],
- 'QAR' => [
- 'name' => 'Qatari Rial',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ر.ق',
- ],
- 'RON' => [
- 'name' => 'Leu',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'L',
- ],
- 'RSD' => [
- 'name' => 'Serbian Dinar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'din',
- ],
- 'RUB' => [
- 'name' => 'Russian Ruble',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'р. ',
- ],
- 'RWF' => [
- 'name' => 'Rwanda Franc',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₣',
- ],
- 'SAR' => [
- 'name' => 'Saudi Riyal',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ر.س',
- ],
- 'SBD' => [
- 'name' => 'Solomon Islands Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'SCR' => [
- 'name' => 'Seychelles Rupee',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₨',
- ],
- 'SDG' => [
- 'name' => 'Sudanese Pound',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'SDG',
- ],
- 'SEK' => [
- 'name' => 'Swedish Krona',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'kr',
- ],
- 'SGD' => [
- 'name' => 'Singapore Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'SHP' => [
- 'name' => 'Saint Helena Pound',
- 'direction' => 'rtl',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'SHP',
- ],
- 'SLL' => [
- 'name' => 'Leone',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Le',
- ],
- 'SOS' => [
- 'name' => 'Somali Shilling',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Sh',
- ],
- 'SRD' => [
- 'name' => 'Suriname Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'STN' => [
- 'name' => 'Dobra',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Db',
- ],
- 'SYP' => [
- 'name' => 'Syrian Pound',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ل.س',
- ],
- 'SZL' => [
- 'name' => 'Lilangeni',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'L',
- ],
- 'THB' => [
- 'name' => 'Baht',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '฿',
- ],
- 'TJS' => [
- 'name' => 'Somoni',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ЅМ',
- ],
- 'TMT' => [
- 'name' => 'Manat',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'm',
- ],
- 'TND' => [
- 'name' => 'Tunisian Dinar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'د.ت',
- ],
- 'TOP' => [
- 'name' => 'Pa’anga',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'T$',
- ],
- 'TTD' => [
- 'name' => 'Trinidad and Tobago Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'TWD' => [
- 'name' => 'Taiwan Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'TZS' => [
- 'name' => 'Tanzanian Shilling',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Sh',
- ],
- 'UAH' => [
- 'name' => 'Hryvnia',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₴',
- ],
- 'UGX' => [
- 'name' => 'Uganda Shilling',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Sh',
- ],
- 'UYU' => [
- 'name' => 'Peso Uruguayo',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'UZS' => [
- 'name' => 'Uzbekistan Sum',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '',
- ],
- 'VEF' => [
- 'name' => 'Bolivar Fuerte',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Bs F',
- ],
- 'VND' => [
- 'name' => 'Dong',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₫',
- ],
- 'VUV' => [
- 'name' => 'Vatu',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'Vt',
- ],
- 'WST' => [
- 'name' => 'Tala',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'T',
- ],
- 'XAF' => [
- 'name' => 'CFA Franc BCEAO',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₣',
- ],
- 'XCD' => [
- 'name' => 'East Caribbean Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',
- ],
- 'XPF' => [
- 'name' => 'CFP Franc',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '₣',
- ],
- 'YER' => [
- 'name' => 'Yemeni Rial',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '﷼',
- ],
- 'ZAR' => [
- 'name' => 'Rand',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'R',
- ],
- 'ZMW' => [
- 'name' => 'Zambian Kwacha',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => 'ZK',
- ],
- 'ZWL' => [
- 'name' => 'Zimbabwe Dollar',
- 'direction' => 'ltr',
- 'separator' => ',',
- 'point' => '.',
- 'decimals' => 2,
- 'symbol' => '$',]
-
-
- ]
-];
\ No newline at end of file
diff --git a/resources/streams/config/distribution.php b/resources/streams/config/distribution.php
deleted file mode 100644
index 4b987c257..000000000
--- a/resources/streams/config/distribution.php
+++ /dev/null
@@ -1,7 +0,0 @@
- 'OpenClassify',
- 'description' => 'OpenClassify is the extensible and most advanced open source classified app build with Laravel.',
- 'version' => 'v3.6-alpha',
-];
diff --git a/resources/streams/config/httpcache.php b/resources/streams/config/httpcache.php
deleted file mode 100644
index e4a80ff9e..000000000
--- a/resources/streams/config/httpcache.php
+++ /dev/null
@@ -1,61 +0,0 @@
- env('HTTP_CACHE', true),
-
- /*
- |--------------------------------------------------------------------------
- | DEFAULT TTL
- |--------------------------------------------------------------------------
- |
- | What is the default TTL value (seconds)?
- |
- */
-
- 'ttl' => env('HTTP_CACHE_TTL', 3600),
-
- /*
- |--------------------------------------------------------------------------
- | EXCLUDED PATHS
- |--------------------------------------------------------------------------
- |
- | Specify cache-excluded paths.
- | Use * for partial matching.
- |
- */
-
- 'excluded' => [
- '/advs/create_adv',
- '/advs/edit_advs/*',
- '/profile',
- '/profile/*',
- '/ajax/*',
- '/cron/*',
- '/cron',
- '/cart',
- '/cart/*',
- ],
-
- /*
- |--------------------------------------------------------------------------
- | TIMEOUT RULES
- |--------------------------------------------------------------------------
- |
- | Specify timeout rules per path.
- | Use * for partial matching.
- |
- */
-
- 'rules' => explode(',', env('HTTP_CACHE_RULES', '')),
-
-];
diff --git a/resources/streams/config/locales.php b/resources/streams/config/locales.php
deleted file mode 100644
index 7b7c0b586..000000000
--- a/resources/streams/config/locales.php
+++ /dev/null
@@ -1,652 +0,0 @@
- env('LOCALE_HINTS', true),
-
- /*
- |--------------------------------------------------------------------------
- | Enabled Locales
- |--------------------------------------------------------------------------
- |
- | Define an array of locales enabled for translatable input.
- |
- */
-
- 'enabled' => explode(',', env('ENABLED_LOCALES', 'en')),
-
- /*
- |--------------------------------------------------------------------------
- | Default
- |--------------------------------------------------------------------------
- |
- | The default locale for CONTENT.
- |
- */
-
- 'default' => env('DEFAULT_LOCALE', env('LOCALE', 'en')),
-
- /*
- |--------------------------------------------------------------------------
- | Supported Locales
- |--------------------------------------------------------------------------
- |
- | In order to enable a locale or translate anything
- | the i18n locale key MUST be in this array.
- |
- */
-
- 'supported' => [
- 'en' => [
-
- 'direction' => 'ltr',
- ],
- 'fa' => [
-
- 'direction' => 'ltr',
- ],
- 'de' => [
-
- 'direction' => 'ltr',
- ],
- 'ar' => [
-
- 'direction' => 'rtl',
- ],
- 'cs' => [
-
- 'direction' => 'ltr',
- ],
- 'el' => [
-
- 'direction' => 'ltr',
- ],
- 'es' => [
-
- 'direction' => 'ltr',
- ],
- 'et' => [
-
- 'direction' => 'ltr',
- ],
- 'fr' => [
-
- 'direction' => 'ltr',
- ],
- 'fr-ca' => [
-
- 'direction' => 'ltr',
- ],
- 'it' => [
-
- 'direction' => 'ltr',
- ],
- 'nl' => [
-
- 'direction' => 'ltr',
- ],
- 'sv' => [
-
- 'direction' => 'ltr',
- ],
- 'sl' => [
-
- 'direction' => 'ltr',
- ],
- 'sme' => [
-
- 'direction' => 'ltr',
- ],
- 'pl' => [
-
- 'direction' => 'ltr',
- ],
- 'pt' => [
-
- 'direction' => 'ltr',
- ],
- 'pt-br' => [
-
- 'direction' => 'ltr',
- ],
- 'br' => [
-
- 'direction' => 'ltr',
- ],
- 'ru' => [
-
- 'direction' => 'ltr',
- ],
- 'zh-cn' => [
-
- 'direction' => 'ltr',
- ],
- 'zh-tw' => [
-
- 'direction' => 'ltr',
- ],
- 'he' => [
-
- 'direction' => 'ltr',
- ],
- 'lt' => [
-
- 'direction' => 'ltr',
- ],
- 'fi' => [
-
- 'direction' => 'ltr',
- ],
- 'da' => [
-
- 'direction' => 'ltr',
- ],
- 'id' => [
-
- 'direction' => 'ltr',
- ],
- 'hu' => [
-
- 'direction' => 'ltr',
- ],
- 'th' => [
-
- 'direction' => 'ltr',
- ],
- 'tr' => [
-
- 'direction' => 'ltr',
- ],
- 'bn' => [
-
- 'direction' => 'ltr',
- ],
- 'sq' => [
-
- 'direction' => 'ltr',
- ],
- 'hi' => [
-
- 'direction' => 'ltr',
- ],
- 'vi' => [
-
- 'direction' => 'ltr',
- ],
- 'aa' => [
- 'direction' => 'ltr',
- ],
- 'ab' => [
- 'direction' => 'ltr',
- ],
- 'ae' => [
- 'direction' => 'ltr',
- ],
- 'af' => [
- 'direction' => 'ltr',
- ],
- 'ak' => [
- 'direction' => 'ltr',
- ],
- 'am' => [
- 'direction' => 'ltr',
- ],
- 'an' => [
- 'direction' => 'ltr',
- ],
- 'as' => [
- 'direction' => 'ltr',
- ],
- 'av' => [
- 'direction' => 'ltr',
- ],
- 'ay' => [
- 'direction' => 'ltr',
- ],
- 'az' => [
- 'direction' => 'ltr',
- ],
- 'ba' => [
- 'direction' => 'ltr',
- ],
- 'be' => [
- 'direction' => 'ltr',
- ],
- 'bg' => [
- 'direction' => 'ltr',
- ],
- 'bh' => [
- 'direction' => 'ltr',
- ],
- 'bi' => [
- 'direction' => 'ltr',
- ],
- 'bm' => [
- 'direction' => 'ltr',
- ],
- 'bo' => [
- 'direction' => 'ltr',
- ],
- 'bs' => [
- 'direction' => 'ltr',
- ],
- 'ca' => [
- 'direction' => 'ltr',
- ],
- 'ce' => [
- 'direction' => 'ltr',
- ],
- 'ch' => [
- 'direction' => 'ltr',
- ],
- 'co' => [
- 'direction' => 'ltr',
- ],
- 'cr' => [
- 'direction' => 'ltr',
- ],
- 'cu' => [
- 'direction' => 'ltr',
- ],
- 'cv' => [
- 'direction' => 'ltr',
- ],
- 'cy' => [
- 'direction' => 'ltr',
- ],
- 'dv' => [
- 'direction' => 'ltr',
- ],
- 'dz' => [
- 'direction' => 'ltr',
- ],
- 'ee' => [
- 'direction' => 'ltr',
- ],
- 'eo' => [
- 'direction' => 'ltr',
- ],
- 'eu' => [
- 'direction' => 'ltr',
- ],
- 'ff' => [
- 'direction' => 'ltr',
- ],
- 'fj' => [
- 'direction' => 'ltr',
- ],
- 'fo' => [
- 'direction' => 'ltr',
- ],
- 'fy' => [
- 'direction' => 'ltr',
- ],
- 'ga' => [
- 'direction' => 'ltr',
- ],
- 'gd' => [
- 'direction' => 'ltr',
- ],
- 'gl' => [
- 'direction' => 'ltr',
- ],
- 'gn' => [
- 'direction' => 'ltr',
- ],
- 'gu' => [
- 'direction' => 'ltr',
- ],
- 'gv' => [
- 'direction' => 'ltr',
- ],
- 'ha' => [
- 'direction' => 'ltr',
- ],
- 'ho' => [
- 'direction' => 'ltr',
- ],
- 'hr' => [
- 'direction' => 'ltr',
- ],
- 'ht' => [
- 'direction' => 'ltr',
- ],
- 'hy' => [
- 'direction' => 'ltr',
- ],
- 'hz' => [
- 'direction' => 'ltr',
- ],
- 'ig' => [
- 'direction' => 'ltr',
- ],
- 'ii' => [
- 'direction' => 'ltr',
- ],
- 'ik' => [
- 'direction' => 'ltr',
- ],
- 'io' => [
- 'direction' => 'ltr',
- ],
- 'is' => [
- 'direction' => 'ltr',
- ],
- 'iu' => [
- 'direction' => 'ltr',
- ],
- 'ja' => [
- 'direction' => 'ltr',
- ],
- 'jv' => [
- 'direction' => 'ltr',
- ],
- 'ka' => [
- 'direction' => 'ltr',
- ],
- 'kg' => [
- 'direction' => 'ltr',
- ],
- 'ki' => [
- 'direction' => 'ltr',
- ],
- 'kj' => [
- 'direction' => 'ltr',
- ],
- 'kk' => [
- 'direction' => 'ltr',
- ],
- 'kl' => [
- 'direction' => 'ltr',
- ],
- 'km' => [
- 'direction' => 'ltr',
- ],
- 'kn' => [
- 'direction' => 'ltr',
- ],
- 'ko' => [
- 'direction' => 'ltr',
- ],
- 'kr' => [
- 'direction' => 'ltr',
- ],
- 'ks' => [
- 'direction' => 'ltr',
- ],
- 'ku' => [
- 'direction' => 'rtl',
- ],
- 'kv' => [
- 'direction' => 'ltr',
- ],
- 'kw' => [
- 'direction' => 'ltr',
- ],
- 'ky' => [
- 'direction' => 'ltr',
- ],
- 'la' => [
- 'direction' => 'ltr',
- ],
- 'lb' => [
- 'direction' => 'ltr',
- ],
- 'lg' => [
- 'direction' => 'ltr',
- ],
- 'li' => [
- 'direction' => 'ltr',
- ],
- 'ln' => [
- 'direction' => 'ltr',
- ],
- 'lo' => [
- 'direction' => 'ltr',
- ],
- 'lu' => [
- 'direction' => 'ltr',
- ],
- 'lv' => [
- 'direction' => 'ltr',
- ],
- 'mg' => [
- 'direction' => 'ltr',
- ],
- 'mh' => [
- 'direction' => 'ltr',
- ],
- 'mi' => [
- 'direction' => 'ltr',
- ],
- 'mk' => [
- 'direction' => 'ltr',
- ],
- 'ml' => [
- 'direction' => 'ltr',
- ],
- 'mn' => [
- 'direction' => 'ltr',
- ],
- 'mr' => [
- 'direction' => 'ltr',
- ],
- 'ms' => [
- 'direction' => 'ltr',
- ],
- 'mt' => [
- 'direction' => 'ltr',
- ],
- 'my' => [
- 'direction' => 'ltr',
- ],
- 'na' => [
- 'direction' => 'ltr',
- ],
- 'nb' => [
- 'direction' => 'ltr',
- ],
- 'nd' => [
- 'direction' => 'ltr',
- ],
- 'ne' => [
- 'direction' => 'ltr',
- ],
- 'ng' => [
- 'direction' => 'ltr',
- ],
- 'nn' => [
- 'direction' => 'ltr',
- ],
- 'no' => [
- 'direction' => 'ltr',
- ],
- 'nr' => [
- 'direction' => 'ltr',
- ],
- 'nv' => [
- 'direction' => 'ltr',
- ],
- 'ny' => [
- 'direction' => 'ltr',
- ],
- 'oc' => [
- 'direction' => 'ltr',
- ],
- 'oj' => [
- 'direction' => 'ltr',
- ],
- 'om' => [
- 'direction' => 'ltr',
- ],
- 'or' => [
- 'direction' => 'ltr',
- ],
- 'os' => [
- 'direction' => 'ltr',
- ],
- 'pa' => [
- 'direction' => 'ltr',
- ],
- 'pi' => [
- 'direction' => 'ltr',
- ],
- 'ps' => [
- 'direction' => 'ltr',
- ],
- 'qu' => [
- 'direction' => 'ltr',
- ],
- 'rm' => [
- 'direction' => 'ltr',
- ],
- 'rn' => [
- 'direction' => 'ltr',
- ],
- 'ro' => [
- 'direction' => 'ltr',
- ],
- 'rw' => [
- 'direction' => 'ltr',
- ],
- 'sa' => [
- 'direction' => 'ltr',
- ],
- 'sc' => [
- 'direction' => 'ltr',
- ],
- 'sd' => [
- 'direction' => 'ltr',
- ],
- 'se' => [
- 'direction' => 'ltr',
- ],
- 'sg' => [
- 'direction' => 'ltr',
- ],
- 'si' => [
- 'direction' => 'ltr',
- ],
- 'sk' => [
- 'direction' => 'ltr',
- ],
- 'sm' => [
- 'direction' => 'ltr',
- ],
- 'sn' => [
- 'direction' => 'ltr',
- ],
- 'so' => [
- 'direction' => 'ltr',
- ],
- 'sr' => [
- 'direction' => 'ltr',
- ],
- 'ss' => [
- 'direction' => 'ltr',
- ],
- 'st' => [
- 'direction' => 'ltr',
- ],
- 'su' => [
- 'direction' => 'ltr',
- ],
- 'sw' => [
- 'direction' => 'ltr',
- ],
- 'ta' => [
- 'direction' => 'ltr',
- ],
- 'te' => [
- 'direction' => 'ltr',
- ],
- 'tg' => [
- 'direction' => 'ltr',
- ],
- 'ti' => [
- 'direction' => 'ltr',
- ],
- 'tk' => [
- 'direction' => 'ltr',
- ],
- 'tl' => [
- 'direction' => 'ltr',
- ],
- 'tn' => [
- 'direction' => 'ltr',
- ],
- 'to' => [
- 'direction' => 'ltr',
- ],
- 'ts' => [
- 'direction' => 'ltr',
- ],
- 'tt' => [
- 'direction' => 'ltr',
- ],
- 'tw' => [
- 'direction' => 'ltr',
- ],
- 'ty' => [
- 'direction' => 'ltr',
- ],
- 'ug' => [
- 'direction' => 'ltr',
- ],
- 'uk' => [
- 'direction' => 'ltr',
- ],
- 'ur' => [
- 'direction' => 'ltr',
- ],
- 'uz' => [
- 'direction' => 'ltr',
- ],
- 've' => [
- 'direction' => 'ltr',
- ],
- 'vo' => [
- 'direction' => 'ltr',
- ],
- 'wa' => [
- 'direction' => 'ltr',
- ],
- 'wo' => [
- 'direction' => 'ltr',
- ],
- 'xh' => [
- 'direction' => 'ltr',
- ],
- 'yi' => [
- 'direction' => 'ltr',
- ],
- 'yo' => [
- 'direction' => 'ltr',
- ],
- 'za' => [
- 'direction' => 'ltr',
- ],
- 'zh' => [
- 'direction' => 'ltr',
- ],
- 'zu' => [
- 'direction' => 'ltr',
- ],
- ]
-];
diff --git a/resources/streams/config/navigation.php b/resources/streams/config/navigation.php
deleted file mode 100644
index 67634ef7d..000000000
--- a/resources/streams/config/navigation.php
+++ /dev/null
@@ -1,11 +0,0 @@
- [
- 'anomaly.module.dashboard',
- 'anomaly.module.pages',
- 'anomaly.module.posts',
- 'anomaly.module.files',
- 'anomaly.module.variables'
- ]
-];
diff --git a/resources/streams/config/security.php b/resources/streams/config/security.php
deleted file mode 100644
index f457a9cec..000000000
--- a/resources/streams/config/security.php
+++ /dev/null
@@ -1,20 +0,0 @@
- [
- 'except' => [
- '/*'
- ],
- ],
-
-];
diff --git a/resources/streams/config/themes.php b/resources/streams/config/themes.php
deleted file mode 100644
index 2d7d7024f..000000000
--- a/resources/streams/config/themes.php
+++ /dev/null
@@ -1,16 +0,0 @@
- env('ADMIN_THEME', 'visiosoft.theme.defaultadmin'),
- 'standard' => env('STANDARD_THEME', 'visiosoft.theme.base')
-];
diff --git a/resources/streams/config/translate.php b/resources/streams/config/translate.php
deleted file mode 100644
index b5b671eec..000000000
--- a/resources/streams/config/translate.php
+++ /dev/null
@@ -1,9 +0,0 @@
- [
- 'Sümüklüböcek:Benzersiz İsim',
- 'Blocks:Advertising Spaces',
- 'Bloklar:Reklam Alanları',
- ],
-];
\ No newline at end of file
diff --git a/resources/views/auth/confirm-password.blade.php b/resources/views/auth/confirm-password.blade.php
new file mode 100644
index 000000000..3d3818600
--- /dev/null
+++ b/resources/views/auth/confirm-password.blade.php
@@ -0,0 +1,27 @@
+
+
+ {{ __('This is a secure area of the application. Please confirm your password before continuing.') }}
+
+
+
+ @csrf
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ __('Confirm') }}
+
+
+
+
diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php
new file mode 100644
index 000000000..cb32e08f3
--- /dev/null
+++ b/resources/views/auth/forgot-password.blade.php
@@ -0,0 +1,25 @@
+
+
+ {{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }}
+
+
+
+
+
+
+ @csrf
+
+
+
+
+
+
+
+
+
+
+ {{ __('Email Password Reset Link') }}
+
+
+
+
diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php
new file mode 100644
index 000000000..78b684f7d
--- /dev/null
+++ b/resources/views/auth/login.blade.php
@@ -0,0 +1,47 @@
+
+
+
+
+
+ @csrf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ __('Remember me') }}
+
+
+
+
+
+
diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php
new file mode 100644
index 000000000..a857242c8
--- /dev/null
+++ b/resources/views/auth/register.blade.php
@@ -0,0 +1,52 @@
+
+
+ @csrf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/auth/reset-password.blade.php b/resources/views/auth/reset-password.blade.php
new file mode 100644
index 000000000..a6494ccaa
--- /dev/null
+++ b/resources/views/auth/reset-password.blade.php
@@ -0,0 +1,39 @@
+
+
+ @csrf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ __('Reset Password') }}
+
+
+
+
diff --git a/resources/views/auth/verify-email.blade.php b/resources/views/auth/verify-email.blade.php
new file mode 100644
index 000000000..eaf811d1b
--- /dev/null
+++ b/resources/views/auth/verify-email.blade.php
@@ -0,0 +1,31 @@
+
+
+ {{ __('Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }}
+
+
+ @if (session('status') == 'verification-link-sent')
+
+ {{ __('A new verification link has been sent to the email address you provided during registration.') }}
+
+ @endif
+
+
+
+ @csrf
+
+
+
+ {{ __('Resend Verification Email') }}
+
+
+
+
+
+ @csrf
+
+
+ {{ __('Log Out') }}
+
+
+
+
diff --git a/resources/views/components/application-logo.blade.php b/resources/views/components/application-logo.blade.php
new file mode 100644
index 000000000..46579cf07
--- /dev/null
+++ b/resources/views/components/application-logo.blade.php
@@ -0,0 +1,3 @@
+
+
+
diff --git a/resources/views/components/auth-session-status.blade.php b/resources/views/components/auth-session-status.blade.php
new file mode 100644
index 000000000..c4bd6e23c
--- /dev/null
+++ b/resources/views/components/auth-session-status.blade.php
@@ -0,0 +1,7 @@
+@props(['status'])
+
+@if ($status)
+ merge(['class' => 'font-medium text-sm text-green-600']) }}>
+ {{ $status }}
+
+@endif
diff --git a/resources/views/components/danger-button.blade.php b/resources/views/components/danger-button.blade.php
new file mode 100644
index 000000000..d17d28898
--- /dev/null
+++ b/resources/views/components/danger-button.blade.php
@@ -0,0 +1,3 @@
+merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 active:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 transition ease-in-out duration-150']) }}>
+ {{ $slot }}
+
diff --git a/resources/views/components/dropdown-link.blade.php b/resources/views/components/dropdown-link.blade.php
new file mode 100644
index 000000000..e0f8ce1d3
--- /dev/null
+++ b/resources/views/components/dropdown-link.blade.php
@@ -0,0 +1 @@
+merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition duration-150 ease-in-out']) }}>{{ $slot }}
diff --git a/resources/views/components/dropdown.blade.php b/resources/views/components/dropdown.blade.php
new file mode 100644
index 000000000..a46f7c838
--- /dev/null
+++ b/resources/views/components/dropdown.blade.php
@@ -0,0 +1,35 @@
+@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white'])
+
+@php
+$alignmentClasses = match ($align) {
+ 'left' => 'ltr:origin-top-left rtl:origin-top-right start-0',
+ 'top' => 'origin-top',
+ default => 'ltr:origin-top-right rtl:origin-top-left end-0',
+};
+
+$width = match ($width) {
+ '48' => 'w-48',
+ default => $width,
+};
+@endphp
+
+
+
+ {{ $trigger }}
+
+
+
+
diff --git a/resources/views/components/input-error.blade.php b/resources/views/components/input-error.blade.php
new file mode 100644
index 000000000..9e6da217b
--- /dev/null
+++ b/resources/views/components/input-error.blade.php
@@ -0,0 +1,9 @@
+@props(['messages'])
+
+@if ($messages)
+ merge(['class' => 'text-sm text-red-600 space-y-1']) }}>
+ @foreach ((array) $messages as $message)
+ {{ $message }}
+ @endforeach
+
+@endif
diff --git a/resources/views/components/input-label.blade.php b/resources/views/components/input-label.blade.php
new file mode 100644
index 000000000..1cc65e21d
--- /dev/null
+++ b/resources/views/components/input-label.blade.php
@@ -0,0 +1,5 @@
+@props(['value'])
+
+merge(['class' => 'block font-medium text-sm text-gray-700']) }}>
+ {{ $value ?? $slot }}
+
diff --git a/resources/views/components/modal.blade.php b/resources/views/components/modal.blade.php
new file mode 100644
index 000000000..70704c1ab
--- /dev/null
+++ b/resources/views/components/modal.blade.php
@@ -0,0 +1,78 @@
+@props([
+ 'name',
+ 'show' => false,
+ 'maxWidth' => '2xl'
+])
+
+@php
+$maxWidth = [
+ 'sm' => 'sm:max-w-sm',
+ 'md' => 'sm:max-w-md',
+ 'lg' => 'sm:max-w-lg',
+ 'xl' => 'sm:max-w-xl',
+ '2xl' => 'sm:max-w-2xl',
+][$maxWidth];
+@endphp
+
+
diff --git a/resources/views/components/nav-link.blade.php b/resources/views/components/nav-link.blade.php
new file mode 100644
index 000000000..5c101a29e
--- /dev/null
+++ b/resources/views/components/nav-link.blade.php
@@ -0,0 +1,11 @@
+@props(['active'])
+
+@php
+$classes = ($active ?? false)
+ ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out'
+ : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300 transition duration-150 ease-in-out';
+@endphp
+
+merge(['class' => $classes]) }}>
+ {{ $slot }}
+
diff --git a/resources/views/components/primary-button.blade.php b/resources/views/components/primary-button.blade.php
new file mode 100644
index 000000000..d71f0b676
--- /dev/null
+++ b/resources/views/components/primary-button.blade.php
@@ -0,0 +1,3 @@
+merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 focus:bg-gray-700 active:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition ease-in-out duration-150']) }}>
+ {{ $slot }}
+
diff --git a/resources/views/components/responsive-nav-link.blade.php b/resources/views/components/responsive-nav-link.blade.php
new file mode 100644
index 000000000..43b91e7bd
--- /dev/null
+++ b/resources/views/components/responsive-nav-link.blade.php
@@ -0,0 +1,11 @@
+@props(['active'])
+
+@php
+$classes = ($active ?? false)
+ ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 text-start text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition duration-150 ease-in-out'
+ : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition duration-150 ease-in-out';
+@endphp
+
+merge(['class' => $classes]) }}>
+ {{ $slot }}
+
diff --git a/resources/views/components/secondary-button.blade.php b/resources/views/components/secondary-button.blade.php
new file mode 100644
index 000000000..b32b69fc7
--- /dev/null
+++ b/resources/views/components/secondary-button.blade.php
@@ -0,0 +1,3 @@
+merge(['type' => 'button', 'class' => 'inline-flex items-center px-4 py-2 bg-white border border-gray-300 rounded-md font-semibold text-xs text-gray-700 uppercase tracking-widest shadow-sm hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 disabled:opacity-25 transition ease-in-out duration-150']) }}>
+ {{ $slot }}
+
diff --git a/resources/views/components/text-input.blade.php b/resources/views/components/text-input.blade.php
new file mode 100644
index 000000000..da1b12d81
--- /dev/null
+++ b/resources/views/components/text-input.blade.php
@@ -0,0 +1,3 @@
+@props(['disabled' => false])
+
+ merge(['class' => 'border-gray-300 focus:border-indigo-500 focus:ring-indigo-500 rounded-md shadow-sm']) }}>
diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php
new file mode 100644
index 000000000..66028f2dc
--- /dev/null
+++ b/resources/views/dashboard.blade.php
@@ -0,0 +1,17 @@
+
+
+
+ {{ __('Dashboard') }}
+
+
+
+
+
+
+
+ {{ __("You're logged in!") }}
+
+
+
+
+
diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php
deleted file mode 100644
index eb76d26b1..000000000
--- a/resources/views/errors/503.blade.php
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
- Be right back.
-
-
-
-
-
-
-
-
-
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
new file mode 100644
index 000000000..54596cb56
--- /dev/null
+++ b/resources/views/home.blade.php
@@ -0,0 +1,95 @@
+@extends('layouts.app')
+@section('content')
+
+
+
{{ __('messages.find_what_you_need') }}
+
{{ __('messages.hero_subtitle') }}
+
+
+
+ {{ __('messages.search') }}
+
+
+
+
+
+
+
+
{{ $listingCount ?? 0 }} Active Listings
+
{{ $categoryCount ?? 0 }} Categories
+
{{ $userCount ?? 0 }} Users
+
+
+
+
+
{{ __('messages.browse_categories') }}
+
+
+
+@if($featuredListings->count())
+
+
+
⭐ Featured Listings
+
+ @foreach($featuredListings as $listing)
+
+
+
+
{{ $listing->title }}
+
{{ $listing->price ? number_format($listing->price, 0).' '.$listing->currency : 'Free' }}
+
{{ $listing->city }}
+
View Details
+
+
+ @endforeach
+
+
+
+@endif
+
+
+
{{ __('messages.recent_listings') }}
+
View all →
+
+
+ @foreach($recentListings as $listing)
+
+
+
+
{{ $listing->title }}
+
{{ $listing->price ? number_format($listing->price, 0).' '.$listing->currency : 'Free' }}
+
+
{{ $listing->city }}
+
{{ $listing->created_at->diffForHumans() }}
+
+
View
+
+
+ @endforeach
+
+
+
+
+
{{ __('messages.sell_something') }}
+
Post your first listing for free!
+ @auth
+
Post a Free Ad
+ @else
+
Get Started Free
+ @endauth
+
+
+@endsection
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
new file mode 100644
index 000000000..cf7b4796d
--- /dev/null
+++ b/resources/views/layouts/app.blade.php
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ {{ config('app.name', 'OpenClassify') }} @hasSection('title') - @yield('title') @endif
+
+
+
+
+
+
+
+
+
OpenClassify
+
+
+
+
+ 🌐 {{ strtoupper(app()->getLocale()) }}
+
+
+ @foreach(config('app.available_locales', ['en']) as $locale)
+
+ {{ ['en'=>'English','tr'=>'Türkçe','ar'=>'العربية','zh'=>'中文','es'=>'Español','fr'=>'Français','de'=>'Deutsch','pt'=>'Português','ru'=>'Русский','ja'=>'日本語'][$locale] ?? $locale }}
+
+ @endforeach
+
+
+ @auth
+
+ Post Ad
+
+
{{ auth()->user()->name }}
+
+
+ @else
+
{{ __('messages.login') }}
+
{{ __('messages.register') }}
+ @endauth
+
+
+
+
+ @if(session('success'))
+ {{ session('success') }}
+ @endif
+ @if(session('error'))
+ {{ session('error') }}
+ @endif
+ @yield('content')
+
+
+
+
+
OpenClassify
+
The marketplace for buying and selling everything.
+
+
+
+
+
+
+
© {{ date('Y') }} OpenClassify. All rights reserved.
+
+
+
+
+
diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php
new file mode 100644
index 000000000..11feb470a
--- /dev/null
+++ b/resources/views/layouts/guest.blade.php
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+ {{ config('app.name', 'Laravel') }}
+
+
+
+
+
+
+ @vite(['resources/css/app.css', 'resources/js/app.js'])
+
+
+
+
+
diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php
new file mode 100644
index 000000000..c2d3a6591
--- /dev/null
+++ b/resources/views/layouts/navigation.blade.php
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ __('Dashboard') }}
+
+
+
+
+
+
+
+
+
+ {{ Auth::user()->name }}
+
+
+
+
+
+
+
+ {{ __('Profile') }}
+
+
+
+
+ @csrf
+
+
+ {{ __('Log Out') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ __('Dashboard') }}
+
+
+
+
+
+
+
{{ Auth::user()->name }}
+
{{ Auth::user()->email }}
+
+
+
+
+ {{ __('Profile') }}
+
+
+
+
+ @csrf
+
+
+ {{ __('Log Out') }}
+
+
+
+
+
+
diff --git a/resources/views/partner/dashboard.blade.php b/resources/views/partner/dashboard.blade.php
new file mode 100644
index 000000000..2c8bd5e60
--- /dev/null
+++ b/resources/views/partner/dashboard.blade.php
@@ -0,0 +1,58 @@
+@extends('layouts.app')
+@section('title', 'Dashboard')
+@section('content')
+
+
My Dashboard
+
+
+
Total Listings
+
{{ $stats['total'] }}
+
+
+
Active Listings
+
{{ $stats['active'] }}
+
+
+
+
+
+
+
+
+ Title
+ Price
+ Status
+ Date
+ Actions
+
+
+
+ @forelse($myListings as $listing)
+
+ {{ \Illuminate\Support\Str::limit($listing->title, 40) }}
+ {{ $listing->price ? number_format($listing->price, 0).' '.$listing->currency : 'Free' }}
+
+
+ {{ ucfirst($listing->status) }}
+
+
+ {{ $listing->created_at->format('M d, Y') }}
+
+ View
+
+
+ @empty
+ No listings yet. Post your first listing!
+ @endforelse
+
+
+
{{ $myListings->links() }}
+
+
+@endsection
diff --git a/resources/views/partner/listings/index.blade.php b/resources/views/partner/listings/index.blade.php
new file mode 100644
index 000000000..79aeb14f5
--- /dev/null
+++ b/resources/views/partner/listings/index.blade.php
@@ -0,0 +1,31 @@
+@extends('layouts.app')
+@section('title', 'My Listings')
+@section('content')
+
+
+
+ @forelse($listings as $listing)
+
+
+
+
{{ $listing->title }}
+ {{ ucfirst($listing->status) }}
+
+
{{ $listing->price ? number_format($listing->price, 0).' '.$listing->currency : 'Free' }}
+
{{ $listing->created_at->format('M d, Y') }}
+
View
+
+
+ @empty
+
+
No listings yet.
+
Post Your First Listing
+
+ @endforelse
+
+
{{ $listings->links() }}
+
+@endsection
diff --git a/resources/views/profile/edit.blade.php b/resources/views/profile/edit.blade.php
new file mode 100644
index 000000000..e0e1d387e
--- /dev/null
+++ b/resources/views/profile/edit.blade.php
@@ -0,0 +1,29 @@
+
+
+
+ {{ __('Profile') }}
+
+
+
+
+
+
+
+ @include('profile.partials.update-profile-information-form')
+
+
+
+
+
+ @include('profile.partials.update-password-form')
+
+
+
+
+
+ @include('profile.partials.delete-user-form')
+
+
+
+
+
diff --git a/resources/views/profile/partials/delete-user-form.blade.php b/resources/views/profile/partials/delete-user-form.blade.php
new file mode 100644
index 000000000..edeeb4a69
--- /dev/null
+++ b/resources/views/profile/partials/delete-user-form.blade.php
@@ -0,0 +1,55 @@
+
+
+
+ {{ __('Delete Account') }}
+
+
+
+ {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }}
+
+
+
+ {{ __('Delete Account') }}
+
+
+
+ @csrf
+ @method('delete')
+
+
+ {{ __('Are you sure you want to delete your account?') }}
+
+
+
+ {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ __('Cancel') }}
+
+
+
+ {{ __('Delete Account') }}
+
+
+
+
+
diff --git a/resources/views/profile/partials/update-password-form.blade.php b/resources/views/profile/partials/update-password-form.blade.php
new file mode 100644
index 000000000..eaca1accc
--- /dev/null
+++ b/resources/views/profile/partials/update-password-form.blade.php
@@ -0,0 +1,48 @@
+
+
+
+
+ @csrf
+ @method('put')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ __('Save') }}
+
+ @if (session('status') === 'password-updated')
+
{{ __('Saved.') }}
+ @endif
+
+
+
diff --git a/resources/views/profile/partials/update-profile-information-form.blade.php b/resources/views/profile/partials/update-profile-information-form.blade.php
new file mode 100644
index 000000000..5ae3d35d0
--- /dev/null
+++ b/resources/views/profile/partials/update-profile-information-form.blade.php
@@ -0,0 +1,64 @@
+
+
+
+
+ @csrf
+
+
+
+ @csrf
+ @method('patch')
+
+
+
+
+
+
+
+
+
+
+
+
+ @if ($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! $user->hasVerifiedEmail())
+
+
+ {{ __('Your email address is unverified.') }}
+
+
+ {{ __('Click here to re-send the verification email.') }}
+
+
+
+ @if (session('status') === 'verification-link-sent')
+
+ {{ __('A new verification link has been sent to your email address.') }}
+
+ @endif
+
+ @endif
+
+
+
+
{{ __('Save') }}
+
+ @if (session('status') === 'profile-updated')
+
{{ __('Saved.') }}
+ @endif
+
+
+
diff --git a/resources/views/vendor/.gitkeep b/resources/views/vendor/.gitkeep
deleted file mode 100644
index 8b1378917..000000000
--- a/resources/views/vendor/.gitkeep
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php
index 8cc3d8e2a..b7355d72a 100644
--- a/resources/views/welcome.blade.php
+++ b/resources/views/welcome.blade.php
@@ -1,91 +1,277 @@
-
+
-
- Laravel
+ {{ config('app.name', 'Laravel') }}
-
+
+
-
-
+
+ @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot')))
+ @vite(['resources/css/app.css', 'resources/js/app.js'])
+ @else
+
+ @endif
-
-
+
+
@if (Route::has('login'))
-
+
+ @auth
+
+ Dashboard
+
+ @else
+
+ Log in
+
+
+ @if (Route::has('register'))
+
+ Register
+
+ @endif
+ @endauth
+
@endif
-
-
-
- Laravel
+
+
+
+
+
Let's get started
+
Laravel has an incredibly rich ecosystem. We suggest starting with the following.
+
+
+
+ {{-- Laravel Logo --}}
+
+
+
+
+
+
+
+
+
-
-
Documentation
-
Laracasts
-
News
-
Forge
-
GitHub
+ {{-- Light Mode 12 SVG --}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{-- Dark Mode 12 SVG --}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+ @if (Route::has('login'))
+
+ @endif
diff --git a/routes/api.php b/routes/api.php
deleted file mode 100644
index 8b33764a0..000000000
--- a/routes/api.php
+++ /dev/null
@@ -1,18 +0,0 @@
-user();
-//})->middleware('auth:api');
diff --git a/routes/auth.php b/routes/auth.php
new file mode 100644
index 000000000..12e77f40f
--- /dev/null
+++ b/routes/auth.php
@@ -0,0 +1,62 @@
+group(function () {
+ Route::get('register', [RegisteredUserController::class, 'create'])
+ ->name('register');
+
+ Route::post('register', [RegisteredUserController::class, 'store']);
+
+ Route::get('login', [AuthenticatedSessionController::class, 'create'])
+ ->name('login');
+
+ Route::post('login', [AuthenticatedSessionController::class, 'store']);
+
+ Route::get('forgot-password', [PasswordResetLinkController::class, 'create'])
+ ->name('password.request');
+
+ Route::post('forgot-password', [PasswordResetLinkController::class, 'store'])
+ ->name('password.email');
+
+ Route::get('reset-password/{token}', [NewPasswordController::class, 'create'])
+ ->name('password.reset');
+
+ Route::post('reset-password', [NewPasswordController::class, 'store'])
+ ->name('password.store');
+});
+
+Route::middleware('auth')->group(function () {
+ Route::get('verify-email', EmailVerificationPromptController::class)
+ ->name('verification.notice');
+
+ Route::get('verify-email/{id}/{hash}', VerifyEmailController::class)
+ ->middleware(['signed', 'throttle:6,1'])
+ ->name('verification.verify');
+
+ Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store'])
+ ->middleware('throttle:6,1')
+ ->name('verification.send');
+
+ Route::get('confirm-password', [ConfirmablePasswordController::class, 'show'])
+ ->name('password.confirm');
+
+ Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
+
+ Route::put('password', [PasswordController::class, 'update'])->name('password.update');
+
+ Route::patch('profile', [\App\Http\Controllers\Auth\ProfileController::class, 'update'])->name('profile.update');
+ Route::delete('profile', [\App\Http\Controllers\Auth\ProfileController::class, 'destroy'])->name('profile.destroy');
+
+ Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
+ ->name('logout');
+});
diff --git a/routes/channels.php b/routes/channels.php
deleted file mode 100644
index 9c586faf0..000000000
--- a/routes/channels.php
+++ /dev/null
@@ -1,18 +0,0 @@
-id === (int) $id;
-});
diff --git a/routes/console.php b/routes/console.php
index a04b27a09..3c9adf1af 100644
--- a/routes/console.php
+++ b/routes/console.php
@@ -1,18 +1,8 @@
comment(Inspiring::quote());
-//});
+Artisan::command('inspire', function () {
+ $this->comment(Inspiring::quote());
+})->purpose('Display an inspiring quote');
diff --git a/routes/web.php b/routes/web.php
index 3245192df..c13e0ff89 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -1,16 +1,17 @@
name('home');
+Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard')->middleware('auth');
+Route::get('/lang/{locale}', [LanguageController::class, 'switch'])->name('lang.switch');
-//Route::get('/', function () {
-// return view('welcome');
-//});
+Route::middleware('auth')->prefix('partner')->name('partner.')->group(function () {
+ Route::get('/', [DashboardController::class, 'index'])->name('dashboard');
+ Route::get('/listings', [PartnerListingController::class, 'index'])->name('listings.index');
+});
+
+require __DIR__.'/auth.php';
diff --git a/server.php b/server.php
deleted file mode 100644
index 5fb6379e7..000000000
--- a/server.php
+++ /dev/null
@@ -1,21 +0,0 @@
-
- */
-
-$uri = urldecode(
- parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
-);
-
-// This file allows us to emulate Apache's "mod_rewrite" functionality from the
-// built-in PHP web server. This provides a convenient way to test a Laravel
-// application without having installed a "real" web server software here.
-if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
- return false;
-}
-
-require_once __DIR__.'/public/index.php';
diff --git a/storage/.gitignore b/storage/.gitignore
deleted file mode 100644
index 4ca7e82b3..000000000
--- a/storage/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-laravel.log
diff --git a/storage/app/.gitignore b/storage/app/.gitignore
index c96a04f00..fedb287fe 100644
--- a/storage/app/.gitignore
+++ b/storage/app/.gitignore
@@ -1,2 +1,4 @@
*
-!.gitignore
\ No newline at end of file
+!private/
+!public/
+!.gitignore
diff --git a/public/app/.gitignore b/storage/app/private/.gitignore
similarity index 100%
rename from public/app/.gitignore
rename to storage/app/private/.gitignore
diff --git a/public/vendor/.gitignore b/storage/app/public/.gitignore
similarity index 100%
rename from public/vendor/.gitignore
rename to storage/app/public/.gitignore
diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore
deleted file mode 100644
index c96a04f00..000000000
--- a/storage/debugbar/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
\ No newline at end of file
diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore
index 1670e9066..05c4471f2 100644
--- a/storage/framework/.gitignore
+++ b/storage/framework/.gitignore
@@ -1,6 +1,9 @@
-config.php
-routes.php
compiled.php
-services.json
+config.php
+down
events.scanned.php
+maintenance.php
+routes.php
routes.scanned.php
+schedule-*
+services.json
diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore
index c96a04f00..01e4a6cda 100644
--- a/storage/framework/cache/.gitignore
+++ b/storage/framework/cache/.gitignore
@@ -1,2 +1,3 @@
*
-!.gitignore
\ No newline at end of file
+!data/
+!.gitignore
diff --git a/storage/httpcache/.gitignore b/storage/framework/cache/data/.gitignore
similarity index 100%
rename from storage/httpcache/.gitignore
rename to storage/framework/cache/data/.gitignore
diff --git a/storage/streams/.gitignore b/storage/framework/testing/.gitignore
similarity index 100%
rename from storage/streams/.gitignore
rename to storage/framework/testing/.gitignore
diff --git a/storage/views/twig/.gitignore b/storage/views/twig/.gitignore
deleted file mode 100644
index c96a04f00..000000000
--- a/storage/views/twig/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
\ No newline at end of file
diff --git a/stubs/nwidart-stubs/action-invoke.stub b/stubs/nwidart-stubs/action-invoke.stub
new file mode 100644
index 000000000..d0a85c7af
--- /dev/null
+++ b/stubs/nwidart-stubs/action-invoke.stub
@@ -0,0 +1,11 @@
+ $attributes
+ */
+ public function get(Model $model, string $key, mixed $value, array $attributes): mixed
+ {
+ return $value;
+ }
+
+ /**
+ * Prepare the given value for storage.
+ *
+ * @param array
$attributes
+ */
+ public function set(Model $model, string $key, mixed $value, array $attributes): mixed
+ {
+ return $value;
+ }
+}
diff --git a/stubs/nwidart-stubs/channel.stub b/stubs/nwidart-stubs/channel.stub
new file mode 100644
index 000000000..f68b0b0c8
--- /dev/null
+++ b/stubs/nwidart-stubs/channel.stub
@@ -0,0 +1,24 @@
+
+
+
diff --git a/stubs/nwidart-stubs/composer.stub b/stubs/nwidart-stubs/composer.stub
new file mode 100644
index 000000000..d2ae16177
--- /dev/null
+++ b/stubs/nwidart-stubs/composer.stub
@@ -0,0 +1,30 @@
+{
+ "name": "$VENDOR$/$LOWER_NAME$",
+ "description": "",
+ "authors": [
+ {
+ "name": "$AUTHOR_NAME$",
+ "email": "$AUTHOR_EMAIL$"
+ }
+ ],
+ "extra": {
+ "laravel": {
+ "providers": [],
+ "aliases": {
+
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\": "$APP_FOLDER_NAME$",
+ "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Database\\Factories\\": "database/factories/",
+ "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Database\\Seeders\\": "database/seeders/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Tests\\": "tests/"
+ }
+ }
+}
diff --git a/stubs/nwidart-stubs/controller-api.stub b/stubs/nwidart-stubs/controller-api.stub
new file mode 100644
index 000000000..025095da3
--- /dev/null
+++ b/stubs/nwidart-stubs/controller-api.stub
@@ -0,0 +1,59 @@
+json([]);
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ */
+ public function store(Request $request)
+ {
+ //
+
+ return response()->json([]);
+ }
+
+ /**
+ * Show the specified resource.
+ */
+ public function show($id)
+ {
+ //
+
+ return response()->json([]);
+ }
+
+ /**
+ * Update the specified resource in storage.
+ */
+ public function update(Request $request, $id)
+ {
+ //
+
+ return response()->json([]);
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ */
+ public function destroy($id)
+ {
+ //
+
+ return response()->json([]);
+ }
+}
diff --git a/stubs/nwidart-stubs/controller-plain.stub b/stubs/nwidart-stubs/controller-plain.stub
new file mode 100644
index 000000000..662b0720a
--- /dev/null
+++ b/stubs/nwidart-stubs/controller-plain.stub
@@ -0,0 +1,9 @@
+json([]);
+ }
+}
diff --git a/stubs/nwidart-stubs/controller.stub b/stubs/nwidart-stubs/controller.stub
new file mode 100644
index 000000000..610fbd341
--- /dev/null
+++ b/stubs/nwidart-stubs/controller.stub
@@ -0,0 +1,65 @@
+>
+ */
+ protected $listen = [];
+
+ /**
+ * Indicates if events should be discovered.
+ *
+ * @var bool
+ */
+ protected static $shouldDiscoverEvents = true;
+
+ /**
+ * Configure the proper event listeners for email verification.
+ */
+ protected function configureEmailVerification(): void
+ {
+ //
+ }
+}
diff --git a/stubs/nwidart-stubs/event.stub b/stubs/nwidart-stubs/event.stub
new file mode 100644
index 000000000..9a4f2bd5b
--- /dev/null
+++ b/stubs/nwidart-stubs/event.stub
@@ -0,0 +1,34 @@
+view('view.name');
+ }
+}
diff --git a/stubs/nwidart-stubs/middleware.stub b/stubs/nwidart-stubs/middleware.stub
new file mode 100644
index 000000000..bdd192dfc
--- /dev/null
+++ b/stubs/nwidart-stubs/middleware.stub
@@ -0,0 +1,17 @@
+id();
+ $FIELDS$
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('$TABLE$');
+ }
+};
diff --git a/stubs/nwidart-stubs/migration/delete.stub b/stubs/nwidart-stubs/migration/delete.stub
new file mode 100644
index 000000000..788cdee2a
--- /dev/null
+++ b/stubs/nwidart-stubs/migration/delete.stub
@@ -0,0 +1,28 @@
+id();
+ $FIELDS$
+ $table->timestamps();
+ });
+ }
+};
diff --git a/stubs/nwidart-stubs/migration/plain.stub b/stubs/nwidart-stubs/migration/plain.stub
new file mode 100644
index 000000000..88fa2f36b
--- /dev/null
+++ b/stubs/nwidart-stubs/migration/plain.stub
@@ -0,0 +1,24 @@
+line('The introduction to the notification.')
+ ->action('Notification Action', 'https://laravel.com')
+ ->line('Thank you for using our application!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ */
+ public function toArray($notifiable): array
+ {
+ return [];
+ }
+}
diff --git a/stubs/nwidart-stubs/observer.stub b/stubs/nwidart-stubs/observer.stub
new file mode 100644
index 000000000..ca498635f
--- /dev/null
+++ b/stubs/nwidart-stubs/observer.stub
@@ -0,0 +1,48 @@
+mapApiRoutes();
+ $this->mapWebRoutes();
+ }
+
+ /**
+ * Define the "web" routes for the application.
+ *
+ * These routes all receive session state, CSRF protection, etc.
+ */
+ protected function mapWebRoutes(): void
+ {
+ Route::middleware('web')->group(module_path($this->name, '$WEB_ROUTES_PATH$'));
+ }
+
+ /**
+ * Define the "api" routes for the application.
+ *
+ * These routes are typically stateless.
+ */
+ protected function mapApiRoutes(): void
+ {
+ Route::middleware('api')->prefix('api')->name('api.')->group(module_path($this->name, '$API_ROUTES_PATH$'));
+ }
+}
diff --git a/stubs/nwidart-stubs/routes/api.stub b/stubs/nwidart-stubs/routes/api.stub
new file mode 100644
index 000000000..c99a9bbbb
--- /dev/null
+++ b/stubs/nwidart-stubs/routes/api.stub
@@ -0,0 +1,19 @@
+prefix('v1')->group(function () {
+ Route::apiResource('$LOWER_NAME$', $STUDLY_NAME$Controller::class)->names('$LOWER_NAME$');
+});
diff --git a/stubs/nwidart-stubs/routes/web.stub b/stubs/nwidart-stubs/routes/web.stub
new file mode 100644
index 000000000..c00f766d9
--- /dev/null
+++ b/stubs/nwidart-stubs/routes/web.stub
@@ -0,0 +1,19 @@
+names('$LOWER_NAME$');
+});
diff --git a/stubs/nwidart-stubs/rule.implicit.stub b/stubs/nwidart-stubs/rule.implicit.stub
new file mode 100644
index 000000000..edc029c29
--- /dev/null
+++ b/stubs/nwidart-stubs/rule.implicit.stub
@@ -0,0 +1,22 @@
+ '$STUDLY_NAME$',
+];
diff --git a/stubs/nwidart-stubs/scaffold/provider.stub b/stubs/nwidart-stubs/scaffold/provider.stub
new file mode 100644
index 000000000..c451e30ae
--- /dev/null
+++ b/stubs/nwidart-stubs/scaffold/provider.stub
@@ -0,0 +1,135 @@
+registerCommands();
+ $this->registerCommandSchedules();
+ $this->registerTranslations();
+ $this->registerConfig();
+ $this->registerViews();
+ $this->loadMigrationsFrom(module_path($this->name, '$MIGRATIONS_PATH$'));
+ }
+
+ /**
+ * Register the service provider.
+ */
+ public function register(): void
+ {
+ $this->app->register(EventServiceProvider::class);
+ $this->app->register(RouteServiceProvider::class);
+ }
+
+ /**
+ * Register commands in the format of Command::class
+ */
+ protected function registerCommands(): void
+ {
+ // $this->commands([]);
+ }
+
+ /**
+ * Register command Schedules.
+ */
+ protected function registerCommandSchedules(): void
+ {
+ // $this->app->booted(function () {
+ // $schedule = $this->app->make(Schedule::class);
+ // $schedule->command('inspire')->hourly();
+ // });
+ }
+
+ /**
+ * Register translations.
+ */
+ public function registerTranslations(): void
+ {
+ $langPath = resource_path('lang/modules/'.$this->nameLower);
+
+ if (is_dir($langPath)) {
+ $this->loadTranslationsFrom($langPath, $this->nameLower);
+ $this->loadJsonTranslationsFrom($langPath);
+ } else {
+ $this->loadTranslationsFrom(module_path($this->name, '$PATH_LANG$'), $this->nameLower);
+ $this->loadJsonTranslationsFrom(module_path($this->name, '$PATH_LANG$'));
+ }
+ }
+
+ /**
+ * Register config.
+ */
+ protected function registerConfig(): void
+ {
+ $relativeConfigPath = config('modules.paths.generator.config.path');
+ $configPath = module_path($this->name, $relativeConfigPath);
+
+ if (is_dir($configPath)) {
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath));
+
+ foreach ($iterator as $file) {
+ if ($file->isFile() && $file->getExtension() === 'php') {
+ $relativePath = str_replace($configPath . DIRECTORY_SEPARATOR, '', $file->getPathname());
+ $configKey = $this->nameLower . '.' . str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $relativePath);
+ $key = ($relativePath === 'config.php') ? $this->nameLower : $configKey;
+
+ $this->publishes([$file->getPathname() => config_path($relativePath)], 'config');
+ $this->mergeConfigFrom($file->getPathname(), $key);
+ }
+ }
+ }
+ }
+
+ /**
+ * Register views.
+ */
+ public function registerViews(): void
+ {
+ $viewPath = resource_path('views/modules/'.$this->nameLower);
+ $sourcePath = module_path($this->name, '$PATH_VIEWS$');
+
+ $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']);
+
+ $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower);
+
+ $componentNamespace = $this->module_namespace($this->name, $this->app_path(config('modules.paths.generator.component-class.path')));
+ Blade::componentNamespace($componentNamespace, $this->nameLower);
+ }
+
+ /**
+ * Get the services provided by the provider.
+ */
+ public function provides(): array
+ {
+ return [];
+ }
+
+ private function getPublishableViewPaths(): array
+ {
+ $paths = [];
+ foreach (config('view.paths') as $path) {
+ if (is_dir($path.'/modules/'.$this->nameLower)) {
+ $paths[] = $path.'/modules/'.$this->nameLower;
+ }
+ }
+
+ return $paths;
+ }
+}
diff --git a/stubs/nwidart-stubs/scope.stub b/stubs/nwidart-stubs/scope.stub
new file mode 100644
index 000000000..0543ad05b
--- /dev/null
+++ b/stubs/nwidart-stubs/scope.stub
@@ -0,0 +1,18 @@
+call([]);
+ }
+}
diff --git a/stubs/nwidart-stubs/service-invoke.stub b/stubs/nwidart-stubs/service-invoke.stub
new file mode 100644
index 000000000..d0a85c7af
--- /dev/null
+++ b/stubs/nwidart-stubs/service-invoke.stub
@@ -0,0 +1,11 @@
+get('/');
+
+ $response->assertStatus(200);
+ }
+}
diff --git a/stubs/nwidart-stubs/tests/unit.stub b/stubs/nwidart-stubs/tests/unit.stub
new file mode 100644
index 000000000..938e5da00
--- /dev/null
+++ b/stubs/nwidart-stubs/tests/unit.stub
@@ -0,0 +1,16 @@
+assertTrue(true);
+ }
+}
diff --git a/stubs/nwidart-stubs/trait.stub b/stubs/nwidart-stubs/trait.stub
new file mode 100644
index 000000000..0a03ae4fb
--- /dev/null
+++ b/stubs/nwidart-stubs/trait.stub
@@ -0,0 +1,8 @@
+
+
+
diff --git a/stubs/nwidart-stubs/views/index.stub b/stubs/nwidart-stubs/views/index.stub
new file mode 100644
index 000000000..1a535d44b
--- /dev/null
+++ b/stubs/nwidart-stubs/views/index.stub
@@ -0,0 +1,7 @@
+@extends('$LOWER_NAME$::layouts.master')
+
+@section('content')
+ Hello World
+
+ Module: {!! config('$LOWER_NAME$.name') !!}
+@endsection
diff --git a/stubs/nwidart-stubs/views/master.stub b/stubs/nwidart-stubs/views/master.stub
new file mode 100644
index 000000000..d1347bd0c
--- /dev/null
+++ b/stubs/nwidart-stubs/views/master.stub
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+ $STUDLY_NAME$ Module - {{ config('app.name', 'Laravel') }}
+
+
+
+
+
+
+
+
+
+ {{-- Vite CSS --}}
+ {{-- {{ module_vite('build-$LOWER_NAME$', 'resources/assets/sass/app.scss', storage_path('vite.hot')) }} --}}
+
+
+
+ @yield('content')
+
+ {{-- Vite JS --}}
+ {{-- {{ module_vite('build-$LOWER_NAME$', 'resources/assets/js/app.js', storage_path('vite.hot')) }} --}}
+
diff --git a/stubs/nwidart-stubs/vite.stub b/stubs/nwidart-stubs/vite.stub
new file mode 100644
index 000000000..f1b0312cc
--- /dev/null
+++ b/stubs/nwidart-stubs/vite.stub
@@ -0,0 +1,57 @@
+import { defineConfig } from 'vite';
+import laravel from 'laravel-vite-plugin';
+import { readdirSync, statSync } from 'fs';
+import { join,relative,dirname } from 'path';
+import { fileURLToPath } from 'url';
+
+export default defineConfig({
+ build: {
+ outDir: '../../public/build-$LOWER_NAME$',
+ emptyOutDir: true,
+ manifest: true,
+ },
+ plugins: [
+ laravel({
+ publicDirectory: '../../public',
+ buildDirectory: 'build-$LOWER_NAME$',
+ input: [
+ __dirname + '/resources/assets/sass/app.scss',
+ __dirname + '/resources/assets/js/app.js'
+ ],
+ refresh: true,
+ }),
+ ],
+});
+// Scen all resources for assets file. Return array
+//function getFilePaths(dir) {
+// const filePaths = [];
+//
+// function walkDirectory(currentPath) {
+// const files = readdirSync(currentPath);
+// for (const file of files) {
+// const filePath = join(currentPath, file);
+// const stats = statSync(filePath);
+// if (stats.isFile() && !file.startsWith('.')) {
+// const relativePath = 'Modules/$STUDLY_NAME$/'+relative(__dirname, filePath);
+// filePaths.push(relativePath);
+// } else if (stats.isDirectory()) {
+// walkDirectory(filePath);
+// }
+// }
+// }
+//
+// walkDirectory(dir);
+// return filePaths;
+//}
+
+//const __filename = fileURLToPath(import.meta.url);
+//const __dirname = dirname(__filename);
+
+//const assetsDir = join(__dirname, 'resources/assets');
+//export const paths = getFilePaths(assetsDir);
+
+
+//export const paths = [
+// 'Modules/$STUDLY_NAME$/resources/assets/sass/app.scss',
+// 'Modules/$STUDLY_NAME$/resources/assets/js/app.js',
+//];
diff --git a/supervisord/cron.conf b/supervisord/cron.conf
deleted file mode 100644
index 1d1bbba5d..000000000
--- a/supervisord/cron.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-[program:cron]
-command=/usr/sbin/cron -f -l 8
-autostart=true
-stdout_logfile=/var/log/cron.out.log
-stderr_logfile=/var/log/cron.err.log
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 000000000..c29eb1a15
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,21 @@
+import defaultTheme from 'tailwindcss/defaultTheme';
+import forms from '@tailwindcss/forms';
+
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
+ './storage/framework/views/*.php',
+ './resources/views/**/*.blade.php',
+ ],
+
+ theme: {
+ extend: {
+ fontFamily: {
+ sans: ['Figtree', ...defaultTheme.fontFamily.sans],
+ },
+ },
+ },
+
+ plugins: [forms],
+};
diff --git a/tests/Feature/Auth/AuthenticationTest.php b/tests/Feature/Auth/AuthenticationTest.php
new file mode 100644
index 000000000..13dcb7ce7
--- /dev/null
+++ b/tests/Feature/Auth/AuthenticationTest.php
@@ -0,0 +1,54 @@
+get('/login');
+
+ $response->assertStatus(200);
+ }
+
+ public function test_users_can_authenticate_using_the_login_screen(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this->post('/login', [
+ 'email' => $user->email,
+ 'password' => 'password',
+ ]);
+
+ $this->assertAuthenticated();
+ $response->assertRedirect(route('dashboard', absolute: false));
+ }
+
+ public function test_users_can_not_authenticate_with_invalid_password(): void
+ {
+ $user = User::factory()->create();
+
+ $this->post('/login', [
+ 'email' => $user->email,
+ 'password' => 'wrong-password',
+ ]);
+
+ $this->assertGuest();
+ }
+
+ public function test_users_can_logout(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this->actingAs($user)->post('/logout');
+
+ $this->assertGuest();
+ $response->assertRedirect('/');
+ }
+}
diff --git a/tests/Feature/Auth/EmailVerificationTest.php b/tests/Feature/Auth/EmailVerificationTest.php
new file mode 100644
index 000000000..705570b43
--- /dev/null
+++ b/tests/Feature/Auth/EmailVerificationTest.php
@@ -0,0 +1,58 @@
+unverified()->create();
+
+ $response = $this->actingAs($user)->get('/verify-email');
+
+ $response->assertStatus(200);
+ }
+
+ public function test_email_can_be_verified(): void
+ {
+ $user = User::factory()->unverified()->create();
+
+ Event::fake();
+
+ $verificationUrl = URL::temporarySignedRoute(
+ 'verification.verify',
+ now()->addMinutes(60),
+ ['id' => $user->id, 'hash' => sha1($user->email)]
+ );
+
+ $response = $this->actingAs($user)->get($verificationUrl);
+
+ Event::assertDispatched(Verified::class);
+ $this->assertTrue($user->fresh()->hasVerifiedEmail());
+ $response->assertRedirect(route('dashboard', absolute: false).'?verified=1');
+ }
+
+ public function test_email_is_not_verified_with_invalid_hash(): void
+ {
+ $user = User::factory()->unverified()->create();
+
+ $verificationUrl = URL::temporarySignedRoute(
+ 'verification.verify',
+ now()->addMinutes(60),
+ ['id' => $user->id, 'hash' => sha1('wrong-email')]
+ );
+
+ $this->actingAs($user)->get($verificationUrl);
+
+ $this->assertFalse($user->fresh()->hasVerifiedEmail());
+ }
+}
diff --git a/tests/Feature/Auth/PasswordConfirmationTest.php b/tests/Feature/Auth/PasswordConfirmationTest.php
new file mode 100644
index 000000000..ff85721e2
--- /dev/null
+++ b/tests/Feature/Auth/PasswordConfirmationTest.php
@@ -0,0 +1,44 @@
+create();
+
+ $response = $this->actingAs($user)->get('/confirm-password');
+
+ $response->assertStatus(200);
+ }
+
+ public function test_password_can_be_confirmed(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this->actingAs($user)->post('/confirm-password', [
+ 'password' => 'password',
+ ]);
+
+ $response->assertRedirect();
+ $response->assertSessionHasNoErrors();
+ }
+
+ public function test_password_is_not_confirmed_with_invalid_password(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this->actingAs($user)->post('/confirm-password', [
+ 'password' => 'wrong-password',
+ ]);
+
+ $response->assertSessionHasErrors();
+ }
+}
diff --git a/tests/Feature/Auth/PasswordResetTest.php b/tests/Feature/Auth/PasswordResetTest.php
new file mode 100644
index 000000000..aa5035058
--- /dev/null
+++ b/tests/Feature/Auth/PasswordResetTest.php
@@ -0,0 +1,73 @@
+get('/forgot-password');
+
+ $response->assertStatus(200);
+ }
+
+ public function test_reset_password_link_can_be_requested(): void
+ {
+ Notification::fake();
+
+ $user = User::factory()->create();
+
+ $this->post('/forgot-password', ['email' => $user->email]);
+
+ Notification::assertSentTo($user, ResetPassword::class);
+ }
+
+ public function test_reset_password_screen_can_be_rendered(): void
+ {
+ Notification::fake();
+
+ $user = User::factory()->create();
+
+ $this->post('/forgot-password', ['email' => $user->email]);
+
+ Notification::assertSentTo($user, ResetPassword::class, function ($notification) {
+ $response = $this->get('/reset-password/'.$notification->token);
+
+ $response->assertStatus(200);
+
+ return true;
+ });
+ }
+
+ public function test_password_can_be_reset_with_valid_token(): void
+ {
+ Notification::fake();
+
+ $user = User::factory()->create();
+
+ $this->post('/forgot-password', ['email' => $user->email]);
+
+ Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
+ $response = $this->post('/reset-password', [
+ 'token' => $notification->token,
+ 'email' => $user->email,
+ 'password' => 'password',
+ 'password_confirmation' => 'password',
+ ]);
+
+ $response
+ ->assertSessionHasNoErrors()
+ ->assertRedirect(route('login'));
+
+ return true;
+ });
+ }
+}
diff --git a/tests/Feature/Auth/PasswordUpdateTest.php b/tests/Feature/Auth/PasswordUpdateTest.php
new file mode 100644
index 000000000..ca28c6c6e
--- /dev/null
+++ b/tests/Feature/Auth/PasswordUpdateTest.php
@@ -0,0 +1,51 @@
+create();
+
+ $response = $this
+ ->actingAs($user)
+ ->from('/profile')
+ ->put('/password', [
+ 'current_password' => 'password',
+ 'password' => 'new-password',
+ 'password_confirmation' => 'new-password',
+ ]);
+
+ $response
+ ->assertSessionHasNoErrors()
+ ->assertRedirect('/profile');
+
+ $this->assertTrue(Hash::check('new-password', $user->refresh()->password));
+ }
+
+ public function test_correct_password_must_be_provided_to_update_password(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this
+ ->actingAs($user)
+ ->from('/profile')
+ ->put('/password', [
+ 'current_password' => 'wrong-password',
+ 'password' => 'new-password',
+ 'password_confirmation' => 'new-password',
+ ]);
+
+ $response
+ ->assertSessionHasErrorsIn('updatePassword', 'current_password')
+ ->assertRedirect('/profile');
+ }
+}
diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php
new file mode 100644
index 000000000..1489d0e0f
--- /dev/null
+++ b/tests/Feature/Auth/RegistrationTest.php
@@ -0,0 +1,31 @@
+get('/register');
+
+ $response->assertStatus(200);
+ }
+
+ public function test_new_users_can_register(): void
+ {
+ $response = $this->post('/register', [
+ 'name' => 'Test User',
+ 'email' => 'test@example.com',
+ 'password' => 'password',
+ 'password_confirmation' => 'password',
+ ]);
+
+ $this->assertAuthenticated();
+ $response->assertRedirect(route('dashboard', absolute: false));
+ }
+}
diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php
new file mode 100644
index 000000000..22ef0c599
--- /dev/null
+++ b/tests/Feature/ExampleTest.php
@@ -0,0 +1,21 @@
+get('/');
+
+ $response->assertStatus(200);
+ }
+}
diff --git a/tests/Feature/ProfileTest.php b/tests/Feature/ProfileTest.php
new file mode 100644
index 000000000..252fdcc52
--- /dev/null
+++ b/tests/Feature/ProfileTest.php
@@ -0,0 +1,99 @@
+create();
+
+ $response = $this
+ ->actingAs($user)
+ ->get('/profile');
+
+ $response->assertOk();
+ }
+
+ public function test_profile_information_can_be_updated(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this
+ ->actingAs($user)
+ ->patch('/profile', [
+ 'name' => 'Test User',
+ 'email' => 'test@example.com',
+ ]);
+
+ $response
+ ->assertSessionHasNoErrors()
+ ->assertRedirect('/profile');
+
+ $user->refresh();
+
+ $this->assertSame('Test User', $user->name);
+ $this->assertSame('test@example.com', $user->email);
+ $this->assertNull($user->email_verified_at);
+ }
+
+ public function test_email_verification_status_is_unchanged_when_the_email_address_is_unchanged(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this
+ ->actingAs($user)
+ ->patch('/profile', [
+ 'name' => 'Test User',
+ 'email' => $user->email,
+ ]);
+
+ $response
+ ->assertSessionHasNoErrors()
+ ->assertRedirect('/profile');
+
+ $this->assertNotNull($user->refresh()->email_verified_at);
+ }
+
+ public function test_user_can_delete_their_account(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this
+ ->actingAs($user)
+ ->delete('/profile', [
+ 'password' => 'password',
+ ]);
+
+ $response
+ ->assertSessionHasNoErrors()
+ ->assertRedirect('/');
+
+ $this->assertGuest();
+ $this->assertNull($user->fresh());
+ }
+
+ public function test_correct_password_must_be_provided_to_delete_account(): void
+ {
+ $user = User::factory()->create();
+
+ $response = $this
+ ->actingAs($user)
+ ->from('/profile')
+ ->delete('/profile', [
+ 'password' => 'wrong-password',
+ ]);
+
+ $response
+ ->assertSessionHasErrorsIn('userDeletion', 'password')
+ ->assertRedirect('/profile');
+
+ $this->assertNotNull($user->fresh());
+ }
+}
diff --git a/tests/TestCase.php b/tests/TestCase.php
index 943197a0c..fe1ffc2ff 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -1,26 +1,10 @@
- * @author Ryan Thompson
- */
-abstract class TestCase extends \Illuminate\Foundation\Testing\TestCase
+namespace Tests;
+
+use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
+
+abstract class TestCase extends BaseTestCase
{
-
- /**
- * Creates the application.
- *
- * @return \Illuminate\Foundation\Application
- */
- public function createApplication()
- {
- $app = require __DIR__ . '/../bootstrap/app.php';
-
- $app->make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap();
-
- return $app;
- }
+ //
}
diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php
new file mode 100644
index 000000000..5773b0ceb
--- /dev/null
+++ b/tests/Unit/ExampleTest.php
@@ -0,0 +1,16 @@
+assertTrue(true);
+ }
+}
diff --git a/uninstall.sh b/uninstall.sh
deleted file mode 100644
index 4191aff1f..000000000
--- a/uninstall.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-echo "|| ## Openclassify ## || "
-echo "|| Removing Bye bye || "
-
-docker compose down -v
-# TODO @fatihalp
-
-# reinstall
-docker compose build --no-cache
-
-docker compose up --force-recreate
-
diff --git a/vite-module-loader.js b/vite-module-loader.js
new file mode 100644
index 000000000..56c35b9f5
--- /dev/null
+++ b/vite-module-loader.js
@@ -0,0 +1,51 @@
+import fs from 'fs/promises';
+import path from 'path';
+import { pathToFileURL } from 'url';
+
+async function collectModuleAssetsPaths(paths, modulesPath) {
+ modulesPath = path.join(__dirname, modulesPath);
+
+ const moduleStatusesPath = path.join(__dirname, 'modules_statuses.json');
+
+ try {
+ // Read module_statuses.json
+ const moduleStatusesContent = await fs.readFile(moduleStatusesPath, 'utf-8');
+ const moduleStatuses = JSON.parse(moduleStatusesContent);
+
+ // Read module directories
+ const moduleDirectories = await fs.readdir(modulesPath);
+
+ for (const moduleDir of moduleDirectories) {
+ if (moduleDir === '.DS_Store') {
+ // Skip .DS_Store directory
+ continue;
+ }
+
+ // Check if the module is enabled (status is true)
+ if (moduleStatuses[moduleDir] === true) {
+ const viteConfigPath = path.join(modulesPath, moduleDir, 'vite.config.js');
+
+ try {
+ await fs.access(viteConfigPath);
+ // Convert to a file URL for Windows compatibility
+ const moduleConfigURL = pathToFileURL(viteConfigPath);
+
+ // Import the module-specific Vite configuration
+ const moduleConfig = await import(moduleConfigURL.href);
+
+ if (moduleConfig.paths && Array.isArray(moduleConfig.paths)) {
+ paths.push(...moduleConfig.paths);
+ }
+ } catch (error) {
+ // vite.config.js does not exist, skip this module
+ }
+ }
+ }
+ } catch (error) {
+ console.error(`Error reading module statuses or module configurations: ${error}`);
+ }
+
+ return paths;
+}
+
+export default collectModuleAssetsPaths;
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 000000000..421b56956
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,11 @@
+import { defineConfig } from 'vite';
+import laravel from 'laravel-vite-plugin';
+
+export default defineConfig({
+ plugins: [
+ laravel({
+ input: ['resources/css/app.css', 'resources/js/app.js'],
+ refresh: true,
+ }),
+ ],
+});