main 48f5ba23aff6 cached
227 files
861.0 KB
251.7k tokens
1689 symbols
1 requests
Download .txt
Showing preview only (927K chars total). Download the full file or copy to clipboard to get everything.
Repository: irabbi360/laravel-vue3-spa-starter
Branch: main
Commit: 48f5ba23aff6
Files: 227
Total size: 861.0 KB

Directory structure:
gitextract_q3enx6td/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── ISSUE_TEMPLATE/
│       ├── bug_report.md
│       ├── custom.md
│       └── feature_request.md
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── app/
│   ├── Console/
│   │   └── Kernel.php
│   ├── Exceptions/
│   │   └── Handler.php
│   ├── Helpers/
│   │   └── Misc.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Api/
│   │   │   │   ├── ActivityLogController.php
│   │   │   │   ├── BrowserSessionController.php
│   │   │   │   ├── CategoryController.php
│   │   │   │   ├── PermissionController.php
│   │   │   │   ├── PostController.php
│   │   │   │   ├── ProfileController.php
│   │   │   │   ├── RoleController.php
│   │   │   │   └── UserController.php
│   │   │   ├── Auth/
│   │   │   │   ├── AuthenticatedSessionController.php
│   │   │   │   ├── ConfirmPasswordController.php
│   │   │   │   ├── ForgotPasswordController.php
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── RegisterController.php
│   │   │   │   ├── ResetPasswordController.php
│   │   │   │   └── VerificationController.php
│   │   │   ├── Controller.php
│   │   │   └── HomeController.php
│   │   ├── Kernel.php
│   │   ├── Middleware/
│   │   │   ├── Authenticate.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── EnsureEmailIsVerified.php
│   │   │   ├── HandleInvalidSignature.php
│   │   │   ├── PreventRequestsDuringMaintenance.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── TrustHosts.php
│   │   │   ├── TrustProxies.php
│   │   │   ├── ValidateSignature.php
│   │   │   └── VerifyCsrfToken.php
│   │   ├── Requests/
│   │   │   ├── Auth/
│   │   │   │   ├── LoginRequest.php
│   │   │   │   └── RegisterRequest.php
│   │   │   ├── StoreCategoryRequest.php
│   │   │   ├── StorePermissionRequest.php
│   │   │   ├── StorePostRequest.php
│   │   │   ├── StoreRoleRequest.php
│   │   │   ├── StoreUserRequest.php
│   │   │   ├── UpdateProfileRequest.php
│   │   │   └── UpdateUserRequest.php
│   │   └── Resources/
│   │       ├── ActivityLogResource.php
│   │       ├── CategoryResource.php
│   │       ├── PermissionResource.php
│   │       ├── PostResource.php
│   │       ├── RoleResource.php
│   │       └── UserResource.php
│   ├── Models/
│   │   ├── Category.php
│   │   ├── CategoryPost.php
│   │   ├── Post.php
│   │   └── User.php
│   ├── Notifications/
│   │   ├── UserResetPasswordNotification.php
│   │   └── VerifyEmailNotification.php
│   └── Providers/
│       ├── AppServiceProvider.php
│       ├── AuthServiceProvider.php
│       ├── BroadcastServiceProvider.php
│       ├── EventServiceProvider.php
│       └── RouteServiceProvider.php
├── artisan
├── bootstrap/
│   ├── app.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── activitylog.php
│   ├── api-inspector.php
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── browser-sessions.php
│   ├── cache.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── logging.php
│   ├── mail.php
│   ├── media-library.php
│   ├── permission.php
│   ├── queue.php
│   ├── sanctum.php
│   ├── services.php
│   ├── session.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   ├── 2019_08_19_000000_create_failed_jobs_table.php
│   │   ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│   │   ├── 2022_09_30_181156_create_posts_table.php
│   │   ├── 2022_09_30_181227_create_categories_table.php
│   │   ├── 2023_09_25_045349_create_jobs_table.php
│   │   ├── 2023_10_02_010617_create_category_post_table.php
│   │   ├── 2023_10_02_175025_create_media_table.php
│   │   ├── 2024_11_25_022836_create_permission_tables.php
│   │   ├── 2025_01_22_091913_create_sessions_table.php
│   │   ├── 2025_01_23_093055_create_activity_log_table.php
│   │   ├── 2025_01_23_093056_add_event_column_to_activity_log_table.php
│   │   ├── 2025_01_23_093057_add_batch_uuid_column_to_activity_log_table.php
│   │   └── 2026_01_05_114017_create_api_inspector_analytics_table.php
│   └── seeders/
│       ├── CreateAdminUserSeeder.php
│       ├── DatabaseSeeder.php
│       └── PermissionTableSeeder.php
├── lang/
│   └── en/
│       ├── auth.php
│       ├── pagination.php
│       ├── passwords.php
│       └── validation.php
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── index.php
│   ├── robots.txt
│   └── vendor/
│       └── api-inspector/
│           ├── .vite/
│           │   └── manifest.json
│           ├── css/
│           │   └── app.css
│           └── js/
│               └── app.js
├── resources/
│   ├── css/
│   │   └── app.css
│   ├── js/
│   │   ├── app.js
│   │   ├── bootstrap.js
│   │   ├── components/
│   │   │   ├── Admin/
│   │   │   │   ├── Create.vue
│   │   │   │   ├── Edit.vue
│   │   │   │   └── Index.vue
│   │   │   ├── DropZone.vue
│   │   │   ├── DualListBox.vue
│   │   │   ├── ExampleComponent.vue
│   │   │   ├── Footer.vue
│   │   │   ├── LocaleSwitcher.vue
│   │   │   ├── Nav.vue
│   │   │   ├── TextEditorComponent.vue
│   │   │   └── includes/
│   │   │       ├── AdminNavbar.vue
│   │   │       ├── AdminSidebar.vue
│   │   │       └── Breadcrumb.vue
│   │   ├── composables/
│   │   │   ├── activityLogs.js
│   │   │   ├── auth.js
│   │   │   ├── categories.js
│   │   │   ├── permissions.js
│   │   │   ├── posts.js
│   │   │   ├── profile.js
│   │   │   ├── roles.js
│   │   │   └── users.js
│   │   ├── lang/
│   │   │   ├── bn.json
│   │   │   ├── en.json
│   │   │   ├── es.json
│   │   │   ├── fr.json
│   │   │   ├── pt-BR.json
│   │   │   └── zh-CN.json
│   │   ├── layouts/
│   │   │   ├── Admin.vue
│   │   │   ├── Authenticated.vue
│   │   │   ├── Error.vue
│   │   │   └── Guest.vue
│   │   ├── plugins/
│   │   │   └── i18n.js
│   │   ├── routes/
│   │   │   ├── index.js
│   │   │   └── routes.js
│   │   ├── services/
│   │   │   └── ability.js
│   │   ├── store/
│   │   │   ├── auth.js
│   │   │   └── lang.js
│   │   ├── validation/
│   │   │   └── rules.js
│   │   └── views/
│   │       ├── admin/
│   │       │   ├── activity-log/
│   │       │   │   └── Index.vue
│   │       │   ├── browser-sessions/
│   │       │   │   └── Index.vue
│   │       │   ├── categories/
│   │       │   │   ├── Create.vue
│   │       │   │   ├── Edit.vue
│   │       │   │   └── Index.vue
│   │       │   ├── index.vue
│   │       │   ├── permissions/
│   │       │   │   ├── Create.vue
│   │       │   │   ├── Edit.vue
│   │       │   │   └── Index.vue
│   │       │   ├── posts/
│   │       │   │   ├── Create.vue
│   │       │   │   ├── Edit.vue
│   │       │   │   └── Index.vue
│   │       │   ├── profile/
│   │       │   │   └── index.vue
│   │       │   ├── roles/
│   │       │   │   ├── Create.vue
│   │       │   │   ├── Edit.vue
│   │       │   │   └── Index.vue
│   │       │   └── users/
│   │       │       ├── Create.vue
│   │       │       ├── Edit.vue
│   │       │       └── Index.vue
│   │       ├── auth/
│   │       │   ├── Verify.vue
│   │       │   └── passwords/
│   │       │       ├── Confirm.vue
│   │       │       ├── Email.vue
│   │       │       └── Reset.vue
│   │       ├── category/
│   │       │   └── posts.vue
│   │       ├── errors/
│   │       │   └── 404.vue
│   │       ├── home/
│   │       │   └── index.vue
│   │       ├── login/
│   │       │   └── Login.vue
│   │       ├── posts/
│   │       │   ├── details.vue
│   │       │   └── index.vue
│   │       └── register/
│   │           └── index.vue
│   ├── sass/
│   │   ├── _custom.scss
│   │   ├── _variables.scss
│   │   └── app.scss
│   └── views/
│       ├── auth/
│       │   ├── login.blade.php
│       │   ├── passwords/
│       │   │   ├── confirm.blade.php
│       │   │   ├── email.blade.php
│       │   │   └── reset.blade.php
│       │   ├── register.blade.php
│       │   └── verify.blade.php
│       ├── home.blade.php
│       ├── layouts/
│       │   ├── app.blade.php
│       │   └── master.blade.php
│       ├── main-view.blade.php
│       └── welcome.blade.php
├── routes/
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   ├── testing/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── tests/
│   ├── CreatesApplication.php
│   ├── Feature/
│   │   └── ExampleTest.php
│   ├── TestCase.php
│   └── Unit/
│       └── ExampleTest.php
├── vite.config.js
└── vue.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.{yml,yaml}]
indent_size = 2

[docker-compose.yml]
indent_size = 4


================================================
FILE: .gitattributes
================================================
* text=auto

*.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


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
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.


================================================
FILE: .github/ISSUE_TEMPLATE/custom.md
================================================
---
name: Custom issue template
about: Describe this issue template's purpose here.
title: ''
labels: ''
assignees: ''

---




================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
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.


================================================
FILE: .gitignore
================================================
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/vendor
.env
.env.backup
.phpunit.result.cache
Homestead.json
Homestead.yaml
auth.json
npm-debug.log
yarn-error.log
/.idea
/.vscode
package-lock.json
composer.lock
yarn.lock
/storage/media-library/temp
.DS_Store


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible 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.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders 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, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
fazrabbi010@gmail.com.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: CONTRIBUTING.md
================================================
## 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).


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2023 Fazle Rabbi

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.


================================================
FILE: README.md
================================================
## Laravel 11 Vue.js 3 SPA Starter Boilerplate

A simple and clean boilerplate to start a new SPA project with authentication, user, roles, permissions management and more features. This boilerplate uses the following tools:

[![](https://img.shields.io/badge/vue.js-v3.5-04C690.svg)](https://vuejs.org)
[![](https://img.shields.io/badge/Laravel-v11.x-ff2e21.svg)](https://laravel.com)
[![](https://img.shields.io/badge/bootstrap-v5.3-712cf9.svg)](https://getbootstrap.com)
[![](https://img.shields.io/badge/axios-v1.7-5A29E4.svg)](https://axios-http.com)
[![](https://img.shields.io/badge/vite-v5.0-646cff.svg)](https://vitejs.dev)

- [Laravel 11.x](https://github.com/laravel/laravel)
- [Laravel Sanctum](https://laravel.com/docs/11.x/sanctum)
- [Vue 3](https://github.com/vuejs/vue)
- [Vue Router](https://router.vuejs.org/)
- [Pinia](https://pinia.vuejs.org/)
- [Bootstrap](https://getbootstrap.com/)
- [Vue I18n](https://vue-i18n.intlify.dev)
- [Laravel API Inspector - API Docs](https://github.com/irabbi360/laravel-api-inspector)

Laravel is accessible, and powerful, and provides tools required for large, robust applications.

## Features

The following Sanctum features are implemented in this Vue SPA:

- ✅ Laravel 11
- ✅ Vue 3
- ✅ VueRouter
- ✅ Pinia
- ✅ Vue I18n Multi-Language
- ✅ Login
- ✅ Password Reset
- ✅ Registration
- ✅ Admin Panel
- ✅ Profile Management
- ✅ User Management
- ✅ Roles Management
- ✅ Permissions Management
- ✅ Password Change
- ✅ E-Mail Verification
- ✅ Posts Management
- ✅ Frontend Blog
- ✅ Bootstrap 5
- ✅ Automatic Api Documentation  -- route  /api-docs
- ✅ Browser Sessions - Other Device Logout
- ✅ User Activity Logs

## How To Use
#### Clone the repository

```bash
git clone https://github.com/irabbi360/laravel-vue3-spa-starter.git
```

#### Copy .env.example file to .env and edit credentials also set the app URL

#### Install Via Composer

```bash
composer install
```

#### Generate Application Key

```bash
php artisan key:generate
```

#### Migrate Database

```bash
php artisan migrate
```

#### Run Seeder

```bash
php artisan db:seed
```

#### Install Node Dependencies

```bash
npm install or yarn install

npm run dev or yarn dev
```
#### Production

```bash
npm run build or yarn build
```

## Email Verification

To enable email verification, ensure your `App\User` model implements the `Illuminate\Contracts\Auth\MustVerifyEmail` contract.

## N.B

If you want to use Laravel 10 or 9 version, please use laravel_10 or laravel_9 branch.

## Contributing

Thank you for considering contributing to the project! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).

## Code of Conduct

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 e-mail via [fazrabbi010@gmail.com](mailto:fazrabbi010@gmail.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).    
The Vue framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).    
This repository is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). 


================================================
FILE: SECURITY.md
================================================
# Reporting Security Issues

The Laravel Vue3 SPA Starter highly values the contributions from the security research community. We eagerly anticipate collaborating with you to mitigate and reduce potential risks.

## Where should I report security issues?

If you think that you have found a security issue in Laravel Vue3 SPA Starter, please do not use the issue tracker and do not post it publicly. Instead, all security issues must be sent to mailto:fazrabbi010@gmail.com.com.


================================================
FILE: app/Console/Kernel.php
================================================
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')->hourly();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}


================================================
FILE: app/Exceptions/Handler.php
================================================
<?php

namespace App\Exceptions;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;

class Handler extends ExceptionHandler
{
    /**
     * A list of exception types with their corresponding custom log levels.
     *
     * @var array<class-string<\Throwable>, \Psr\Log\LogLevel::*>
     */
    protected $levels = [
        //
    ];

    /**
     * A list of the exception types that are not reported.
     *
     * @var array<int, class-string<\Throwable>>
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed to the session on validation exceptions.
     *
     * @var array<int, string>
     */
    protected $dontFlash = [
        'current_password',
        'password',
        'password_confirmation',
    ];

    /**
     * Register the exception handling callbacks for the application.
     *
     * @return void
     */
    public function register()
    {
        $this->reportable(function (Throwable $e) {
            //
        });
    }
}


================================================
FILE: app/Helpers/Misc.php
================================================
<?php

namespace App\Helpers;

use Illuminate\Support\Str;
use InvalidArgumentException;

class Misc
{
    /**
     * Recursively converts all keys of a given array to "headline" format.
     *
     * This function accepts an array or any data type, and applies Laravel's
     * Str::headline() helper to transform the keys of an array into a "headline"
     * format, which capitalizes each word in a key and adds spaces where
     * underscores or camel case are found. The transformation is applied
     * recursively to nested arrays.
     *
     * Example:
     * Input:
     *   [
     *     'first_name' => 'John',
     *     'user_data' => [
     *         'last_name' => 'Doe',
     *         'contact_info' => [
     *             'phone_number' => '1234567890'
     *         ]
     *     ]
     *   ]
     *
     * Output:
     *   [
     *     'First Name' => 'John',
     *     'User Data' => [
     *         'Last Name' => 'Doe',
     *         'Contact Info' => [
     *             'Phone Number' => '1234567890'
     *         ]
     *     ]
     *   ]
     *
     * @param  array  $data  The data to be processed. If the data is an array, its keys
     *                       will be transformed. Non-array data types will be returned
     *                       as-is without modification.
     * @return array The processed data, with all array keys in "headline" format.
     *               If the input was not an array, it will return the original value.
     */
    public static function convertKeysToHeadline(array $data)
    {
        $formatted = [];

        // Loop through each key and value
        foreach ($data as $key => $value) {
            // Apply Str::headline to the key and recursively process the value if it's an array
            $formatted[Str::headline($key)] = is_array($value) ? self::convertKeysToHeadline($value) : $value;
        }

        return $formatted;
    }

    public static function apiPagination(array $data)
    {
        return [
            'current_page' => $data['current_page'],
            'from' => $data['from'],
            'last_page' => $data['last_page'],
//            'links' => $data['links'],
//            'path' => $data['path'],
            'per_page' => $data['per_page'],
            'to' => $data['to'],
            'total' => $data['total'],
        ];
    }
}


================================================
FILE: app/Http/Controllers/Api/ActivityLogController.php
================================================
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Resources\ActivityLogResource;
use Illuminate\Http\Request;
use Spatie\Activitylog\Models\Activity;

class ActivityLogController extends Controller
{
    public function __invoke(Request $request)
    {
        $perPage = $request->get('per_page', 15); // Default pagination size
        $search = $request->get('search');

        $activity = Activity::query()
            ->latest()
            ->where('causer_id', auth()->id())
            ->when($request->filled('filter'), function ($query) use ($request) {
                $query->where('event', $request->filter);
            })
            ->when($search, function ($query) use ($search) {
                $query->where(function ($q) use ($search) {
                    $q->where('description', 'like', '%' . $search . '%')
                    ->orWhere('event', 'like', '%' . $search . '%');
                });
            })
            ->paginate($perPage);

        return ActivityLogResource::collection($activity);
    }

}


================================================
FILE: app/Http/Controllers/Api/BrowserSessionController.php
================================================
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Cjmellor\BrowserSessions\Facades\BrowserSessions;

class BrowserSessionController extends Controller
{
    public function index()
    {
        $sessions = BrowserSessions::sessions();

        return response()->json($sessions);
    }

    public function logoutOtherDevices()
    {
        return BrowserSessions::logoutOtherBrowserSessions();
    }
}


================================================
FILE: app/Http/Controllers/Api/CategoryController.php
================================================
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\StoreCategoryRequest;
use App\Http\Resources\CategoryResource;
use App\Models\Category;
use Illuminate\Http\Request;

class CategoryController extends Controller
{
    public function index()
    {
        $orderColumn = request('order_column', 'created_at');
        if (!in_array($orderColumn, ['id', 'name', 'created_at'])) {
            $orderColumn = 'created_at';
        }
        $orderDirection = request('order_direction', 'desc');
        if (!in_array($orderDirection, ['asc', 'desc'])) {
            $orderDirection = 'desc';
        }
        $categories = Category::
            when(request('search_id'), function ($query) {
                $query->where('id', request('search_id'));
            })
            ->when(request('search_title'), function ($query) {
                $query->where('name', 'like', '%'.request('search_title').'%');
            })
            ->when(request('search_global'), function ($query) {
                $query->where(function($q) {
                    $q->where('id', request('search_global'))
                        ->orWhere('name', 'like', '%'.request('search_global').'%');

                });
            })
            ->orderBy($orderColumn, $orderDirection)
            ->paginate(50);
        return CategoryResource::collection($categories);
    }

    public function store(StoreCategoryRequest $request)
    {
        $this->authorize('category-create');
        $category = Category::create($request->validated());

        return new CategoryResource($category);
    }

    public function show(Category $category)
    {
        $this->authorize('category-edit');
        return new CategoryResource($category);
    }

    public function update(Category $category, StoreCategoryRequest $request)
    {
        $this->authorize('category-edit');
        $category->update($request->validated());

        return new CategoryResource($category);
    }

    public function destroy(Category $category)
    {
        $this->authorize('category-delete');
        $category->delete();

        return response()->noContent();
    }

    public function getList()
    {
        return CategoryResource::collection(Category::all());
    }
}


================================================
FILE: app/Http/Controllers/Api/PermissionController.php
================================================
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\StorePermissionRequest;
use App\Http\Resources\PermissionResource;
use Illuminate\Http\Request;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

class PermissionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
     */
    public function index()
    {
        $orderColumn = request('order_column', 'created_at');
        if (!in_array($orderColumn, ['id', 'name', 'created_at'])) {
            $orderColumn = 'created_at';
        }
        $orderDirection = request('order_direction', 'desc');
        if (!in_array($orderDirection, ['asc', 'desc'])) {
            $orderDirection = 'desc';
        }
        $permissions = Permission::
        when(request('search_id'), function ($query) {
            $query->where('id', request('search_id'));
        })
            ->when(request('search_title'), function ($query) {
                $query->where('name', 'like', '%' . request('search_title') . '%');
            })
            ->when(request('search_global'), function ($query) {
                $query->where(function ($q) {
                    $q->where('id', request('search_global'))
                        ->orWhere('name', 'like', '%' . request('search_global') . '%');

                });
            })
            ->orderBy($orderColumn, $orderDirection)
            ->paginate(50);

        return PermissionResource::collection($permissions);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param StorePermissionRequest $request
     * @return PermissionResource
     * @throws AuthorizationException
     */
    public function store(StorePermissionRequest $request)
    {
        $this->authorize('permission-create');

        $permission = new Permission();
        $permission->name = $request->name;
        $permission->guard_name = 'web';

        if ($permission->save()) {
            return new PermissionResource($permission);
        }

        return response()->json(['status' => 405, 'success' => false]);

    }

    /**
     * Display the specified resource.
     *
     * @param int $id
     * @return PermissionResource
     */
    public function show(Permission $permission)
    {
        $this->authorize('permission-edit');

        return new PermissionResource($permission);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param Permission $permission
     * @param StorePermissionRequest $request
     * @return JsonResponse|PermissionResource
     * @throws AuthorizationException
     */
    public function update(Permission $permission, StorePermissionRequest $request)
    {
        $this->authorize('permission-edit');

        $permission->name = $request->name;

        if ($permission->save()) {
            return new PermissionResource($permission);
        }

        return response()->json(['status' => 405, 'success' => false]);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param int $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Permission $permission)
    {
        $this->authorize('permission-delete');
        $permission->delete();

        return response()->noContent();
    }

    public function getRolePermissions($id)
    {
        $permissions = Role::findById($id, 'web')->permissions;
        return PermissionResource::collection($permissions);
    }

    public function updateRolePermissions(Request $request)
    {
        $this->authorize('role-edit');

        $permissions = json_decode($request->permissions, true);
        $permissions_where = Permission::whereIn('id', $permissions)->get();
        $role = Role::findById($request->role_id, 'web');
        $role->syncPermissions($permissions_where);
        return PermissionResource::collection($permissions_where);
    }
}


================================================
FILE: app/Http/Controllers/Api/PostController.php
================================================
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\StorePostRequest;
use App\Http\Resources\PostResource;
use App\Models\Category;
use App\Models\Post;
use App\Helpers\Misc;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     * @LAPIresponsesSchema PostResource
     * @LAPIpagination
     * @LAPIQueryParams search_title, page, per_page, order_column, order_direction, search_category, search_id, search_content, search_global
    */
    public function index()
    {
        $orderColumn = request('order_column', 'created_at');
        if (!in_array($orderColumn, ['id', 'title', 'created_at'])) {
            $orderColumn = 'created_at';
        }
        $orderDirection = request('order_direction', 'desc');
        if (!in_array($orderDirection, ['asc', 'desc'])) {
            $orderDirection = 'desc';
        }
        $posts = Post::with('media')
            ->whereHas('categories', function ($query) {
                if (request('search_category')) {
                    $categories = explode(",", request('search_category'));
                    $query->whereIn('id', $categories);
                }
            })
            ->when(request('search_id'), function ($query) {
                $query->where('id', request('search_id'));
            })
            ->when(request('search_title'), function ($query) {
                $query->where('title', 'like', '%' . request('search_title') . '%');
            })
            ->when(request('search_content'), function ($query) {
                $query->where('content', 'like', '%' . request('search_content') . '%');
            })
            ->when(request('search_global'), function ($query) {
                $query->where(function ($q) {
                    $q->where('id', request('search_global'))
                        ->orWhere('title', 'like', '%' . request('search_global') . '%')
                        ->orWhere('content', 'like', '%' . request('search_global') . '%');

                });
            })
            ->when(!auth()->user()->hasPermissionTo('post-all'), function ($query) {
                $query->where('user_id', auth()->id());
            })
            ->orderBy($orderColumn, $orderDirection)
            ->paginate(50);

        return PostResource::collection($posts);
    }

    public function store(StorePostRequest $request)
    {
        $this->authorize('post-create');

        $validatedData = $request->validated();
        $validatedData['user_id'] = auth()->id();
        $post = Post::create($validatedData);

        $categories = explode(",", $request->categories);
        $category = Category::findMany($categories);
        $post->categories()->attach($category);

        if ($request->hasFile('thumbnail')) {
            $post->addMediaFromRequest('thumbnail')->preservingOriginal()->toMediaCollection('images');
        }

        return new PostResource($post);
    }

    public function show(Post $post): PostResource
    {
        $this->authorize('post-edit');
        if ($post->user_id !== auth()->user()->id && !auth()->user()->hasPermissionTo('post-all')) {
            return response()->json(['status' => 405, 'success' => false, 'message' => 'You can only edit your own posts']);
        } else {
            return new PostResource($post);
        }
    }

    public function update(Post $post, StorePostRequest $request)
    {
        $this->authorize('post-edit');
        if ($post->user_id !== auth()->id() && !auth()->user()->hasPermissionTo('post-all')) {
            return response()->json(['status' => 405, 'success' => false, 'message' => 'You can only edit your own posts']);
        } else {
            $post->update($request->validated());

            $category = Category::findMany($request->categories);
            $post->categories()->sync($category);
            return new PostResource($post);
        }
    }

    public function destroy(Post $post)
    {
        $this->authorize('post-delete');
        if ($post->user_id !== auth()->id() && !auth()->user()->hasPermissionTo('post-all')) {
            return response()->json(['status' => 405, 'success' => false, 'message' => 'You can only delete your own posts']);
        } else {
            $post->delete();
            return response()->noContent();
        }
    }

    /*
     * Display a listing of the resource.
    */
    public function getPosts()
    {
        $posts = Post::with('categories')->with('media')->latest()->paginate(1);
        return PostResource::collection($posts);
    }

    public function getCategoryByPosts($id)
    {
        $posts = Post::whereRelation('categories', 'category_id', '=', $id)->paginate();

        return PostResource::collection($posts);
    }

    public function getPost($id)
    {
        return Post::with('categories', 'user', 'media')->findOrFail($id);
    }
}


================================================
FILE: app/Http/Controllers/Api/ProfileController.php
================================================
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\UpdateProfileRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;

class ProfileController extends Controller
{
    /**
     * @throws ValidationException
     */
    public function update(UpdateProfileRequest $request)
    {
        $profile = Auth::user();
        $profile->name = $request->name;
        $profile->email = $request->email;

        if ($profile->save()) {
            return $this->successResponse($profile, 'User updated');;
        }
        return response()->json(['status' => 403, 'success' => false]);
    }

    public function user(Request $request)
    {
        $user = $request->user();

        return $this->successResponse($user, 'User Logged In Successfully');
    }
}


================================================
FILE: app/Http/Controllers/Api/RoleController.php
================================================
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Auth\Access\AuthorizationException;
use App\Http\Requests\StoreRoleRequest;
use App\Http\Resources\RoleResource;
use Spatie\Permission\Models\Role;

class RoleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
     */
    public function index()
    {
        $orderColumn = request('order_column', 'created_at');
        if (!in_array($orderColumn, ['id', 'name', 'created_at'])) {
            $orderColumn = 'created_at';
        }
        $orderDirection = request('order_direction', 'desc');
        if (!in_array($orderDirection, ['asc', 'desc'])) {
            $orderDirection = 'desc';
        }
        $roles = Role::
            when(request('search_id'), function ($query) {
                $query->where('id', request('search_id'));
            })
            ->when(request('search_title'), function ($query) {
                $query->where('name', 'like', '%'.request('search_title').'%');
            })
            ->when(request('search_global'), function ($query) {
                $query->where(function($q) {
                    $q->where('id', request('search_global'))
                        ->orWhere('name', 'like', '%'.request('search_global').'%');

                });
            })
            ->orderBy($orderColumn, $orderDirection)
            ->paginate(50);

        return RoleResource::collection($roles);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return RoleResource
     */
    public function store(StoreRoleRequest $request)
    {
        $this->authorize('role-create');

        $role = new Role();
        $role->name = $request->name;
        $role->guard_name = 'web';

        if ($role->save()) {
            return new RoleResource($role);
        }

        return response()->json(['status' => 405, 'success' => false]);

    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return RoleResource
     */
    public function show(Role $role)
    {
        $this->authorize('role-edit');

        return new RoleResource($role);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param Role $role
     * @param StoreRoleRequest $request
     * @return RoleResource
     * @throws AuthorizationException
     */
    public function update(Role $role, StoreRoleRequest $request)
    {
        $this->authorize('role-edit');

        $role->name = $request->name;

        if ($role->save()) {
            return new RoleResource($role);
        }

        return response()->json(['status' => 405, 'success' => false]);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Role $role)
    {
        $this->authorize('role-delete');
        $role->delete();

        return response()->noContent();
    }

    public function getList()
    {
        return RoleResource::collection(Role::all());
    }
}


================================================
FILE: app/Http/Controllers/Api/UserController.php
================================================
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\StoreUserRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Http\Resources\UserResource;
use App\Models\User;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Role;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return AnonymousResourceCollection
     */
    public function index()
    {
        $orderColumn = request('order_column', 'created_at');
        if (!in_array($orderColumn, ['id', 'name', 'created_at'])) {
            $orderColumn = 'created_at';
        }
        $orderDirection = request('order_direction', 'desc');
        if (!in_array($orderDirection, ['asc', 'desc'])) {
            $orderDirection = 'desc';
        }
        $users = User::
        when(request('search_id'), function ($query) {
            $query->where('id', request('search_id'));
        })
            ->when(request('search_title'), function ($query) {
                $query->where('name', 'like', '%'.request('search_title').'%');
            })
            ->when(request('search_global'), function ($query) {
                $query->where(function($q) {
                    $q->where('id', request('search_global'))
                        ->orWhere('name', 'like', '%'.request('search_global').'%');

                });
            })
            ->orderBy($orderColumn, $orderDirection)
            ->paginate(50);

        return UserResource::collection($users);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return UserResource
     */
    public function store(StoreUserRequest $request)
    {
        $role = Role::find($request->role_id);
        $user = new User();
        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = Hash::make($request->password);

        if ($user->save()) {
            if ($role) {
                $user->assignRole($role);
            }
            return new UserResource($user);
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return UserResource
     */
    public function show(User $user)
    {
        $user->load('roles');
        return new UserResource($user);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param UpdateUserRequest $request
     * @param User $user
     * @return UserResource
     */
    public function update(UpdateUserRequest $request, User $user)
    {
        $role = Role::find($request->role_id);

        $user->name = $request->name;
        $user->email = $request->email;
        if(!empty($request->password)) {
            $user->password = Hash::make($request->password) ?? $user->password;
        }

        if ($user->save()) {
            if ($role) {
                $user->syncRoles($role);
            }
            return new UserResource($user);
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(User $user)
    {
        $this->authorize('user-delete');
        $user->delete();

        return response()->noContent();
    }
}


================================================
FILE: app/Http/Controllers/Auth/AuthenticatedSessionController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Http\Requests\Auth\RegisterRequest;
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class AuthenticatedSessionController extends Controller
{
    /**
     * Display the login view.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('auth.login');
    }

    /**
     * Handle an incoming authentication request.
     *
     * @param  \App\Http\Requests\Auth\LoginRequest  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function login(LoginRequest $request)
    {
        $request->authenticate();

//        $token = $request->session()->regenerate();
        $token = $request->user()->createToken($request->userAgent())->plainTextToken;

        activity()
            ->performedOn($request->user())
            ->causedBy(auth()->user())
            ->event('login')
            ->withProperties(['ip' => $request->ip()])
            ->log('User login successfully');

        if ($request->wantsJson()) {
            $user = $request->user();
            
            // Check if email verification is required and if email is verified
            $emailVerified = !($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail) || $user->hasVerifiedEmail();
            
            return response()->json([
                'user' => $user,
                'token' => $token,
                'email_verified' => $emailVerified
            ]);
        }

        return redirect()->intended(RouteServiceProvider::HOME);
    }

    /**
     * Destroy an authenticated session.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function logout(Request $request)
    {
        activity()
            ->performedOn($request->user())
            ->causedBy(auth()->user())
            ->event('logout')
            ->withProperties(['ip' => $request->ip()])
            ->log('User logout successfully');

        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        if ($request->wantsJson()) {
            return response()->noContent();
        }

        return redirect('/');
    }

    /**
     * Create User
     * @param RegisterRequest $request
     * @return JsonResponse
     */
    public function register(RegisterRequest $request)
    {
        $user = User::where('email', $request['email'])->first();
        if ($user) {
            return response(['error' => 1, 'message' => 'user already exists'], 409);
        }

        $user = User::create([
            'email' => $request['email'],
            'password' => Hash::make($request['password']),
            'name' => $request['name'],
        ]);

        // Trigger Registered event which will send verification email
        if($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail) {
            event(new \Illuminate\Auth\Events\Registered($user));
        }

        return $this->successResponse($user, 'Registration Successful. Please verify your email to activate your account.');
    }
}


================================================
FILE: app/Http/Controllers/Auth/ConfirmPasswordController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;

class ConfirmPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Confirm Password Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password confirmations and
    | uses a simple trait to include the behavior. You're free to explore
    | this trait and override any functions that require customization.
    |
    */

    use ConfirmsPasswords;

    /**
     * Where to redirect users when the intended url fails.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }
}


================================================
FILE: app/Http/Controllers/Auth/ForgotPasswordController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;

class ForgotPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset emails and
    | includes a trait which assists in sending these notifications from
    | your application to your users. Feel free to explore this trait.
    |
    */

    use SendsPasswordResetEmails;
}


================================================
FILE: app/Http/Controllers/Auth/LoginController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}


================================================
FILE: app/Http/Controllers/Auth/RegisterController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\Models\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
}


================================================
FILE: app/Http/Controllers/Auth/ResetPasswordController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;

class ResetPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset requests
    | and uses a simple trait to include this behavior. You're free to
    | explore this trait and override any methods you wish to tweak.
    |
    */

    use ResetsPasswords;

    /**
     * Where to redirect users after resetting their password.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;
}


================================================
FILE: app/Http/Controllers/Auth/VerificationController.php
================================================
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Exceptions\InvalidSignatureException;

class VerificationController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Email Verification Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling email verification for any
    | user that recently registered with the application. Emails may also
    | be re-sent if the user didn't receive the original email message.
    |
    */

    use VerifiesEmails;

    /**
     * Where to redirect users after verification.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('throttle:6,1')->only('verify', 'resend');
    }

    /**
     * Mark the authenticated user's email address as verified.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
     */
    public function verify(Request $request)
    {
        $user = \App\Models\User::findOrFail($request->route('id'));

        if ($user->hasVerifiedEmail()) {
            if ($request->wantsJson()) {
                return response()->json(['message' => 'Email already verified.'], Response::HTTP_OK);
            }
            return redirect()->intended($this->redirectTo);
        }

        if ($user->markEmailAsVerified()) {
            event(new \Illuminate\Auth\Events\Verified($user));
        }

        if ($request->wantsJson()) {
            return response()->json(['message' => 'Email has been verified.'], Response::HTTP_OK);
        }

        return redirect()->intended($this->redirectTo.'?verified=1');
    }

    /**
     * Resend the email verification notification.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
     */
    public function resend(Request $request)
    {
        if ($request->user()->hasVerifiedEmail()) {
            if ($request->wantsJson()) {
                return response()->json(['message' => 'Email already verified.'], Response::HTTP_OK);
            }
            return redirect()->intended($this->redirectTo);
        }

        $request->user()->sendEmailVerificationNotification();

        if ($request->wantsJson()) {
            return response()->json(['message' => 'Verification link sent to your email.'], Response::HTTP_OK);
        }

        return back()->with('resent', true);
    }
}


================================================
FILE: app/Http/Controllers/Controller.php
================================================
<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected function successResponse($data, $message = null, $code = 200)
    {
        return response()->json([
            'success'=> true,
            'message' => $message,
            'data' => $data
        ], $code);
    }

    protected function errorResponse($message = null, $code)
    {
        return response()->json([
            'success'=> false,
            'message' => $message,
            'data' => null
        ], $code);
    }
}


================================================
FILE: app/Http/Controllers/HomeController.php
================================================
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');
    }
}


================================================
FILE: app/Http/Kernel.php
================================================
<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array<int, class-string|string>
     */
    protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array<string, array<int, class-string|string>>
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
             \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \Irabbi360\LaravelApiInspector\Http\Middleware\ApiInspectorMiddleware::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array<string, class-string|string>
     */
    protected $middlewareAliases = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \App\Http\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified.api' => \App\Http\Middleware\EnsureEmailIsVerified::class,
        'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
        'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
        'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
    ];
}


================================================
FILE: app/Http/Middleware/Authenticate.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}


================================================
FILE: app/Http/Middleware/EncryptCookies.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;

class EncryptCookies extends Middleware
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array<int, string>
     */
    protected $except = [
        //
    ];
}


================================================
FILE: app/Http/Middleware/EnsureEmailIsVerified.php
================================================
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class EnsureEmailIsVerified
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        if (! $request->user() ||
            ($request->user() instanceof MustVerifyEmail &&
            ! $request->user()->hasVerifiedEmail())) {
            return response()->json([
                'message' => 'Your email address is not verified.',
                'email_verified' => false
            ], 403);
        }

        return $next($request);
    }
}


================================================
FILE: app/Http/Middleware/HandleInvalidSignature.php
================================================
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Routing\Exceptions\InvalidSignatureException;

class HandleInvalidSignature
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        try {
            // Get user ID from route parameter
            $userId = $request->route('id');
            $user = \App\Models\User::find($userId);

            // Check if user exists
            if (!$user) {
                return response()->json([
                    'message' => 'User not found.',
                ], 404);
            }

            // Check if authenticated user matches the user being verified
            if ($request->user() && $request->user()->id != $userId) {
                return response()->json([
                    'message' => 'Unauthorized. You can only verify your own email.',
                ], 403);
            }

            // If user is already verified, skip signature validation
            if ($user->hasVerifiedEmail()) {
                return response()->json([
                    'message' => 'Email already verified.',
                ], 200);
            }

            // Check if signature is valid
            if (!$request->hasValidSignature()) {
                return response()->json([
                    'message' => 'Invalid or expired verification link.',
                ], 400);
            }
            
            return $next($request);
        } catch (InvalidSignatureException $e) {
            if ($request->wantsJson()) {
                return response()->json([
                    'message' => 'Invalid or expired verification link.',
                ], 400);
            }
            throw $e;
        }
    }
}


================================================
FILE: app/Http/Middleware/PreventRequestsDuringMaintenance.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;

class PreventRequestsDuringMaintenance extends Middleware
{
    /**
     * The URIs that should be reachable while maintenance mode is enabled.
     *
     * @var array<int, string>
     */
    protected $except = [
        //
    ];
}


================================================
FILE: app/Http/Middleware/RedirectIfAuthenticated.php
================================================
<?php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @param  string|null  ...$guards
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect(RouteServiceProvider::HOME);
            }
        }

        return $next($request);
    }
}


================================================
FILE: app/Http/Middleware/TrimStrings.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;

class TrimStrings extends Middleware
{
    /**
     * The names of the attributes that should not be trimmed.
     *
     * @var array<int, string>
     */
    protected $except = [
        'current_password',
        'password',
        'password_confirmation',
    ];
}


================================================
FILE: app/Http/Middleware/TrustHosts.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Http\Middleware\TrustHosts as Middleware;

class TrustHosts extends Middleware
{
    /**
     * Get the host patterns that should be trusted.
     *
     * @return array<int, string|null>
     */
    public function hosts()
    {
        return [
            $this->allSubdomainsOfApplicationUrl(),
        ];
    }
}


================================================
FILE: app/Http/Middleware/TrustProxies.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array<int, string>|string|null
     */
    protected $proxies;

    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers =
        Request::HEADER_X_FORWARDED_FOR |
        Request::HEADER_X_FORWARDED_HOST |
        Request::HEADER_X_FORWARDED_PORT |
        Request::HEADER_X_FORWARDED_PROTO |
        Request::HEADER_X_FORWARDED_AWS_ELB;
}


================================================
FILE: app/Http/Middleware/ValidateSignature.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Routing\Middleware\ValidateSignature as Middleware;

class ValidateSignature extends Middleware
{
    /**
     * The names of the query string parameters that should be ignored.
     *
     * @var array<int, string>
     */
    protected $except = [
        // 'fbclid',
        // 'utm_campaign',
        // 'utm_content',
        // 'utm_medium',
        // 'utm_source',
        // 'utm_term',
    ];
}


================================================
FILE: app/Http/Middleware/VerifyCsrfToken.php
================================================
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array<int, string>
     */
    protected $except = [
        'api/*', 'login','register'
    ];
}


================================================
FILE: app/Http/Requests/Auth/LoginRequest.php
================================================
<?php

namespace App\Http\Requests\Auth;

use Illuminate\Auth\Events\Lockout;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;

class LoginRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => ['required', 'string', 'email'],
            'password' => ['required', 'string'],
        ];
    }

    /**
     * Attempt to authenticate the request's credentials.
     *
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function authenticate()
    {
        $this->ensureIsNotRateLimited();

        if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
            RateLimiter::hit($this->throttleKey());

            throw ValidationException::withMessages([
                'email' => trans('auth.failed'),
            ]);
        }

        // Check if email is verified
        // $user = Auth::user();
        // if (! $user->hasVerifiedEmail()) {
        //     Auth::logout();
        //     throw ValidationException::withMessages([
        //         'email' => 'Your email address is not verified. Please check your email to verify your account.',
        //     ]);
        // }

        RateLimiter::clear($this->throttleKey());
    }

    /**
     * Ensure the login request is not rate limited.
     *
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function ensureIsNotRateLimited()
    {
        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.
     *
     * @return string
     */
    public function throttleKey()
    {
        return Str::lower($this->input('email')).'|'.$this->ip();
    }
}


================================================
FILE: app/Http/Requests/Auth/RegisterRequest.php
================================================
<?php

namespace App\Http\Requests\Auth;

use Illuminate\Foundation\Http\FormRequest;

class RegisterRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ];
    }
}


================================================
FILE: app/Http/Requests/StoreCategoryRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreCategoryRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required'
        ];
    }
}


================================================
FILE: app/Http/Requests/StorePermissionRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePermissionRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            'name' => 'required'
        ];
    }
}


================================================
FILE: app/Http/Requests/StorePostRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required',
            'content' => 'required',
            'categories' => 'required'
        ];
    }
}


================================================
FILE: app/Http/Requests/StoreRoleRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreRoleRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            'name' => 'required'
        ];
    }
}


================================================
FILE: app/Http/Requests/StoreUserRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreUserRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
     */
    public function rules(): array
    {
        return [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8'],
        ];
    }
}


================================================
FILE: app/Http/Requests/UpdateProfileRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UpdateProfileRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            'name' => 'required|min:5',
            'email' => 'required|email|unique:users,email,'.$this->user()->id
        ];
    }
}


================================================
FILE: app/Http/Requests/UpdateUserRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UpdateUserRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
     */
    public function rules(): array
    {
        return [
            'name' => ['required', 'string', 'max:255'],
            'email' => 'required|string|email|max:255|unique:users,email,'.$this->user->id,
            'password' => ['nullable', 'string', 'min:8'],
        ];
    }
}


================================================
FILE: app/Http/Resources/ActivityLogResource.php
================================================
<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class ActivityLogResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'log_name' => $this->log_name,
            'description' => $this->description,
            'subject_type' => $this->subject_type,
            'event' => $this->event,
            'causer_type' => $this->causer_type,
            'causer_id' => $this->causer_id,
            'properties' => $this->properties,
            'batch_uuid' => $this->batch_uuid,
            'created_at' => $this->created_at,
            'format_created_at' => $this->created_at->diffForHumans(),
        ];
    }
}


================================================
FILE: app/Http/Resources/CategoryResource.php
================================================
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class CategoryResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
     */
    public function toArray($request)
    {
        return [
            'id'   => $this->id,
            'name' => $this->name,
            'created_at' => $this->created_at->toDateString()
        ];
    }
}


================================================
FILE: app/Http/Resources/PermissionResource.php
================================================
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class PermissionResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
     */
    public function toArray($request)
    {
        return [
            'id'   => $this->id,
            'name' => $this->name,
            'guard_name' => $this->guard_name,
            'created_at' => $this->created_at->toDateString()
        ];
    }
}


================================================
FILE: app/Http/Resources/PostResource.php
================================================
<?php

namespace App\Http\Resources;

use Exception;
use Illuminate\Http\Resources\Json\JsonResource;

class PostResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param \Illuminate\Http\Request $request
     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
     */
    public function toArray($request)
    {
        //if no resize image
        try {
            $resized_image = $this->getMedia('*')[0]->getUrl('resized-image');
        } catch (Exception $e) {
            $resized_image="";
        }
        return [
            'id' => $this->id,
            'title' => $this->title,
            'user_id' => $this->user_id,
            'categories' => $this->categories,
            'content' => $this->content,
            'original_image' => count($this->getMedia('*')) > 0 ? $this->getMedia('*')[0]->getUrl() : null,
            'resized_image' => $resized_image,
            'created_at' => $this->created_at->toDateString(),
            'user' => new UserResource($this->whenLoaded('user')),
        ];
    }
}


================================================
FILE: app/Http/Resources/RoleResource.php
================================================
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class RoleResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
     */
    public function toArray($request)
    {
        return [
            'id'   => $this->id,
            'name' => $this->name,
            'guard_name' => $this->guard_name,
            'created_at' => $this->created_at->toDateString()
        ];
    }
}


================================================
FILE: app/Http/Resources/UserResource.php
================================================
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
     */
    public function toArray($request)
    {
        return [
            'id'   => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'role_id' => $this->roles,
            'roles' => $this->roles,
            'created_at' => $this->created_at->toDateString()
        ];
    }
}


================================================
FILE: app/Models/Category.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;

class Category extends Model
{
    use HasFactory, LogsActivity;

    protected $fillable = ['name', 'text'];

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()
            ->logOnly(['name', 'text']);
        // Chain fluent methods for configuration options
    }

    /**
     * Get the posts for the category.
     */
    public function posts()
    {
        return $this->belongsToMany(Post::class,'category_post');
    }
}


================================================
FILE: app/Models/CategoryPost.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class CategoryPost extends Model
{
    use HasFactory;
}


================================================
FILE: app/Models/Post.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;

//use Spatie\MediaLibrary\MediaCollections\Models\Media;


class Post extends Model implements HasMedia
{
    use HasFactory, InteractsWithMedia, LogsActivity;

    protected $fillable = ['title', 'content', 'user_id', 'name', 'text',];

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()
            ->logOnly(['name', 'text']);
        // Chain fluent methods for configuration options
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    /**
     * Get the category that owns the post.
     */
    public function categories()
    {
        return $this->belongsToMany(Category::class, 'category_post');
    }

    public function registerMediaCollections(): void
    {
        $this->addMediaCollection('images')
            ->useFallbackUrl('/images/placeholder.jpg')
            ->useFallbackPath(public_path('/images/placeholder.jpg'));
    }

    public function registerMediaConversions(Media $media = null): void
    {
        if (env('RESIZE_IMAGE') === true) {

            $this->addMediaConversion('resized-image')
                ->width(env('IMAGE_WIDTH', 300))
                ->height(env('IMAGE_HEIGHT', 300));
        }
    }
}


================================================
FILE: app/Models/User.php
================================================
<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\Notifications\UserResetPasswordNotification;
use App\Notifications\VerifyEmailNotification;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Permission\Traits\HasRoles;
use Spatie\Activitylog\LogOptions;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, HasRoles, LogsActivity;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
        'name',
        'text',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function sendPasswordResetNotification($token)
    {
        $this->notify(new UserResetPasswordNotification($token));
    }

    /**
     * Send the email verification notification.
     *
     * @return void
     */
    public function sendEmailVerificationNotification()
    {
        $this->notify(new VerifyEmailNotification());
    }

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()
            ->logOnly(['name', 'text']);
        // Chain fluent methods for configuration options
    }
}



================================================
FILE: app/Notifications/UserResetPasswordNotification.php
================================================
<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification;

class UserResetPasswordNotification extends ResetPasswordNotification
{
    use Queueable;

    /**
     * Get the mail representation of the notification.
     */
    public function toMail($notifiable): MailMessage
    {
        $resetUrl = url(config('app.url') . '/reset-password/' . $this->token .'?email='. $notifiable->getEmailForPasswordReset());
        return (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', $resetUrl)
            ->line('If you did not request a password reset, no further action is required.');
    }

    /**
     * Get the array representation of the notification.
     *
     * @return array<string, mixed>
     */
    public function toArray(object $notifiable): array
    {
        return [
            //
        ];
    }
}


================================================
FILE: app/Notifications/VerifyEmailNotification.php
================================================
<?php

namespace App\Notifications;

use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;

class VerifyEmailNotification extends VerifyEmail
{
    /**
     * Build the mail message.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        $verificationUrl = $this->verificationUrl($notifiable);
        
        // Convert /api/email/verify to /verify for the frontend URL
        $verificationUrl = str_replace('/api/email/verify', '/email/verify', $verificationUrl);

        return (new MailMessage)
            ->subject('Verify Email Address')
            ->line('Please click the button below to verify your email address.')
            ->action('Verify Email Address', $verificationUrl)
            ->line('If you did not create an account, no further action is required.');
    }
}


================================================
FILE: app/Providers/AppServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Vite;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Vite::prefetch(concurrency: 3);
    }
}


================================================
FILE: app/Providers/AuthServiceProvider.php
================================================
<?php

namespace App\Providers;


use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Spatie\Permission\Models\Permission;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The model to policy mappings for the application.
     *
     * @var array<class-string, class-string>
     */
    protected $policies = [
        // 'App\Models\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
        $this->registerUserAccessToGates();
    }

    protected function registerUserAccessToGates()
    {
        try {
            foreach (Permission::pluck('name') as $permission) {
                Gate::define($permission, function ($user) use ($permission) {
                    return $user->roles()->whereHas('permissions', function ($q) use ($permission) {
                        $q->where('name', $permission);
                    })->count() > 0;
                });
            }
        } catch (\Exception $e) {
            info('registerUserAccessToGates: Database not found or not yet migrated. Ignoring user permissions while booting app.');
        }
    }
}


================================================
FILE: app/Providers/BroadcastServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;

class BroadcastServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Broadcast::routes();

        require base_path('routes/channels.php');
    }
}


================================================
FILE: app/Providers/EventServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event to listener mappings for the application.
     *
     * @var array<class-string, array<int, class-string>>
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Determine if events and listeners should be automatically discovered.
     *
     * @return bool
     */
    public function shouldDiscoverEvents()
    {
        return false;
    }
}


================================================
FILE: app/Providers/RouteServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
    /**
     * The path to the "home" route for your application.
     *
     * Typically, users are redirected here after authentication.
     *
     * @var string
     */
    public const HOME = '/dashboard';

    /**
     * Define your route model bindings, pattern filters, and other route configuration.
     *
     * @return void
     */
    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::middleware('api')
                ->prefix('api')
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->group(base_path('routes/web.php'));
        });
    }

    /**
     * Configure the rate limiters for the application.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
        });
    }
}


================================================
FILE: artisan
================================================
#!/usr/bin/env php
<?php

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any of our classes manually. It's great to relax.
|
*/

require __DIR__.'/vendor/autoload.php';

$app = require_once __DIR__.'/bootstrap/app.php';

/*
|--------------------------------------------------------------------------
| Run The Artisan Application
|--------------------------------------------------------------------------
|
| When we run the console application, the current CLI command will be
| executed in this console and the response sent back to a terminal
| or another output device for the developers. Here goes nothing!
|
*/

$kernel = $app->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);

exit($status);


================================================
FILE: bootstrap/app.php
================================================
<?php

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\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;


================================================
FILE: bootstrap/cache/.gitignore
================================================
*
!.gitignore


================================================
FILE: composer.json
================================================
{
    "name": "laravel/laravel",
    "type": "project",
    "description": "A Laravel Vue SPA starter project",
    "keywords": ["spa", "laravel", "vue"],
    "license": "MIT",
    "require": {
        "php": "^8.2",
        "cjmellor/browser-sessions": "^1.3",
        "guzzlehttp/guzzle": "^7.2",
        "irabbi360/laravel-api-inspector": "^1.2",
        "laravel/framework": "^11.0",
        "laravel/sanctum": "^4.0",
        "laravel/tinker": "^2.9",
        "laravel/ui": "^4.2",
        "spatie/laravel-activitylog": "^4.9",
        "spatie/laravel-medialibrary": "^11.9.2",
        "spatie/laravel-permission": "^6.9"
    },
    "require-dev": {
        "fakerphp/faker": "^1.23",
        "laravel/pint": "^1.13",
        "laravel/sail": "^1.26",
        "mockery/mockery": "^1.6",
        "nunomaduro/collision": "^8.1",
        "phpunit/phpunit": "^11.0.1",
        "spatie/laravel-ignition": "^2.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true,
        "allow-plugins": {
            "pestphp/pest-plugin": true
        }
    },
    "minimum-stability": "stable",
    "prefer-stable": true
}


================================================
FILE: config/activitylog.php
================================================
<?php

return [

    /*
     * If set to false, no activity-log will be saved to the database.
     */
    'enabled' => env('ACTIVITY_LOGGER_ENABLED', true),

    /*
     * When the clean-command is executed, all recording activity-log older than
     * the number of days specified here will be deleted.
     */
    'delete_records_older_than_days' => 365,

    /*
     * If no log name is passed to the activity-log() helper
     * we use this default log name.
     */
    'default_log_name' => 'default',

    /*
     * You can specify an auth driver here that gets user models.
     * If this is null we'll use the current Laravel auth driver.
     */
    'default_auth_driver' => null,

    /*
     * If set to true, the subject returns soft deleted models.
     */
    'subject_returns_soft_deleted_models' => false,

    /*
     * This model will be used to log activity-log.
     * It should implement the Spatie\Activitylog\Contracts\Activity interface
     * and extend Illuminate\Database\Eloquent\Model.
     */
    'activity_model' => \Spatie\Activitylog\Models\Activity::class,

    /*
     * This is the name of the table that will be created by the migration and
     * used by the Activity model shipped with this package.
     */
    'table_name' => env('ACTIVITY_LOGGER_TABLE_NAME', 'activity_log'),

    /*
     * This is the database connection that will be used by the migration and
     * the Activity model shipped with this package. In case it's not set
     * Laravel's database.default will be used instead.
     */
    'database_connection' => env('ACTIVITY_LOGGER_DB_CONNECTION'),
];


================================================
FILE: config/api-inspector.php
================================================
<?php

// config for Irabbi360/LaravelApiInspector
return [
    // changes doc title
    'title' => 'Laravel API Inspector',
    'enabled' => true,

    /*
    * Route where request docs will be served from laravel app.
    * localhost:8080/api-docs
    */
    'route_path' => 'api-docs',

    /*
    |--------------------------------------------------------------------------
    | API Inspector Assets Path
    |--------------------------------------------------------------------------
    | The path to the API Inspector assets.
    |
    */

    'assets_path' => 'vendor/api-inspector',

    'output' => [
        'openapi' => true,
        'postman' => true,
        'html' => true,
    ],

    /*
    |--------------------------------------------------------------------------
    | Response Capture Configuration
    |--------------------------------------------------------------------------
    | Phase 2: Runtime response capture and caching
    |
    */

    'save_responses' => true,

    'save_responses_driver' => 'json', // 'cache' or 'json'

    'middleware_capture' => true,

    'response_ttl' => 3600, // TTL for cached responses in seconds (1 hour)

    'auth' => [
        'type' => 'bearer',
        'header' => 'Authorization',
    ],

    'response_path' => 'api-docs', // Subfolder name

    'storage_path' => 'storage', // 'storage' or 'local'

    // Use only routes where ->uri start with next string Using Str::startWith( . e.g. - /api/mobile
    'only_route_uri_start_with' => 'api/',

    'hide_matching' => [
        'api-inspector-docs',
        'api-inspector',
        'sanctum',
        'telescope',
        'docs',
        '_ignition',
    ],

    // By default, LAPI groups your routes by the first /path.
    // This is a set of regex to group your routes by prefix.
    'group_by' => [
        'uri_patterns' => [
            '^api/v[\d]+/', // `/api/v1/users/store` group as `/api/v1/users`.
            '^api/',        // `/api/users/store` group as `/api/users`.
        ],
    ],

    /*
    * Can be used to define default response status codes to be shown in the docs
    */
    'default_responses' => ['200', '400', '401', '403', '404', '405', '422', '429', '500', '503'],

    /*
    |--------------------------------------------------------------------------
    | Pagination Schema
    |--------------------------------------------------------------------------
    | Define the structure of pagination metadata when @LAPIpagination is used.
    | Matches Laravel's default pagination response structure.
    |
    */
    'pagination_schema' => [
        'data' => 'array',
        'links' => [
            'first' => 'string',
            'last' => 'string',
            'prev' => 'string | null',
            'next' => 'string | null',
        ],
        'meta' => [
            'current_page' => 'integer',
            'from' => 'integer | null',
            'last_page' => 'integer',
            'path' => 'string',
            'per_page' => 'integer',
            'to' => 'integer | null',
            'total' => 'integer',
            'links' => 'array',
        ],
        'show_pagination' => ['links', 'meta'],
    ],

    /*
    |--------------------------------------------------------------------------
    | Analytics, Dashboard, and Advanced Features
    |--------------------------------------------------------------------------
    */

    'analytics' => [
        'enabled' => true,
        'track_response_time' => true,
        'track_memory_usage' => true,
        'track_errors' => true,
        'retention_days' => 30, // Keep analytics for 30 days
        'track_only_uri_start_with' => 'api/',
        'exclude_routes' => [
            'api-inspector-docs',
            'api-inspector',
            'sanctum',
            'telescope',
            'docs',
            '_ignition',
        ],
    ],

    'dashboard' => [
        'enabled' => true,
        'auth_middleware' => ['web'], // Middleware for dashboard protection
    ],

    'webhooks' => [
        // 'user.created' => [
        //     'event' => 'user.created',
        //     'description' => 'Fired when a new user is created',
        //     'url' => 'https://example.com/webhooks/user/created',
        //     'method' => 'POST',
        //     'payload' => [
        //         'id' => 'integer',
        //         'email' => 'string',
        //         'name' => 'string',
        //     ],
        //     'examples' => [],
        //     'active' => true,
        // ],
    ],

    'auth_testing' => [
        'enabled' => true,
        'schemes' => ['bearer', 'api-key', 'basic', 'oauth2'],
        'test_endpoint_prefix' => '/api/',
    ],
];


================================================
FILE: config/app.php
================================================
<?php

use Illuminate\Support\Facades\Facade;

return [

    /*
    |--------------------------------------------------------------------------
    | Application Name
    |--------------------------------------------------------------------------
    |
    | This value is the name of your application. This value is used when the
    | framework needs to place the application's name in a notification or
    | any other location as required by the application or its packages.
    |
    */

    'name' => env('APP_NAME', 'Laravel Vue 3 Stater'),

    /*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services the application utilizes. Set this in your ".env" file.
    |
    */

    'env' => env('APP_ENV', 'production'),

    /*
    |--------------------------------------------------------------------------
    | Application Debug Mode
    |--------------------------------------------------------------------------
    |
    | When your application is in debug mode, detailed error messages with
    | stack traces will be shown on every error that occurs within your
    | application. If disabled, a simple generic error page is shown.
    |
    */

    'debug' => (bool) env('APP_DEBUG', false),

    /*
    |--------------------------------------------------------------------------
    | Application URL
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    'url' => env('APP_URL', 'http://localhost'),

    'asset_url' => env('ASSET_URL'),

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    'timezone' => 'UTC',

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    'locale' => 'en',
    'locales' => [
        'en' => 'EN',
        'bn' => 'BN',
        'es' => 'ES',
        'fr' => 'FR',
        'pt-BR' => 'BR',
        'zh-CN' => '中文',
    ],

    /*
    |--------------------------------------------------------------------------
    | 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.
    |
    */

    'fallback_locale' => 'en',

    /*
    |--------------------------------------------------------------------------
    | Faker Locale
    |--------------------------------------------------------------------------
    |
    | This locale will be used by the Faker PHP library when generating fake
    | data for your database seeds. For example, this will be used to get
    | localized telephone numbers, street address information and more.
    |
    */

    '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!
    |
    */

    'key' => env('APP_KEY'),

    'cipher' => 'AES-256-CBC',

    /*
    |--------------------------------------------------------------------------
    | Maintenance Mode Driver
    |--------------------------------------------------------------------------
    |
    | 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"
    |
    */

    'maintenance' => [
        'driver' => 'file',
        // 'store'  => 'redis',
    ],

    /*
    |--------------------------------------------------------------------------
    | 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...
         */

        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,

    ],

    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    'aliases' => Facade::defaultAliases()->merge([
        // 'ExampleClass' => App\Example\ExampleClass::class,
    ])->toArray(),

];


================================================
FILE: config/auth.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    | All authentication drivers have a user provider. This 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.
    |
    | Supported: "session"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This 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.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | 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 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.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the amount of seconds before a password confirmation
    | times out and the user is prompted to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */

    'password_timeout' => 10800,

];


================================================
FILE: config/broadcasting.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Broadcaster
    |--------------------------------------------------------------------------
    |
    | This option controls the default broadcaster that will be used by the
    | framework when an event needs to be broadcast. You may set this to
    | any of the connections defined in the "connections" array below.
    |
    | Supported: "pusher", "ably", "redis", "log", "null"
    |
    */

    'default' => 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' => [
                'host' => env('PUSHER_HOST', 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com',
                'port' => env('PUSHER_PORT', 443),
                'scheme' => env('PUSHER_SCHEME', 'https'),
                'encrypted' => true,
                'useTLS' => env('PUSHER_SCHEME', 'https') === 'https',
            ],
            'client_options' => [
                // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
            ],
        ],

        'ably' => [
            'driver' => 'ably',
            'key' => env('ABLY_KEY'),
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

        'log' => [
            'driver' => 'log',
        ],

        'null' => [
            'driver' => 'null',
        ],

    ],

];


================================================
FILE: config/browser-sessions.php
================================================
<?php

return [
    'include_session_id' => true,
    'browser_session_guard' => env('BROWSER_SESSION_GUARD', 'web'),
];


================================================
FILE: config/cache.php
================================================
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Cache Store
    |--------------------------------------------------------------------------
    |
    | This option controls the default cache connection that gets used while
    | using this caching library. This connection is used when another is
    | not explicitly specified when executing a given caching function.
    |
    */

    'default' => env('CACHE_DRIVER', 'file'),

    /*
    |--------------------------------------------------------------------------
    | Cache Stores
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the cache "stores" for your application as
    | 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: "apc", "array", "database", "file",
    |         "memcached", "redis", "dynamodb", "octane", "null"
    |
    */

    'stores' => [

        'apc' => [
            'driver' => 'apc',
        ],

        'array' => [
            'driver' => 'array',
            'serialize' => false,
        ],

        'database' => [
            'driver' => 'database',
            'table' => 'cache',
            'connection' => null,
            'lock_connection' => null,
        ],

        'file' => [
            'driver' => 'file',
            'path' => storage_path('framework/cache/data'),
        ],

        'memcached' => [
            'driver' => 'memcached',
            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
            'sasl' => [
                env('MEMCACHED_USERNAME'),
                env('MEMCACHED_PASSWORD'),
            ],
            'options' => [
                // Memcached::OPT_CONNECT_TIMEOUT => 2000,
            ],
            'servers' => [
                [
                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
                    'port' => env('MEMCACHED_PORT', 11211),
                    'weight' => 100,
                ],
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => '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',
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Cache Key Prefix
    |--------------------------------------------------------------------------
    |
    | When utilizing the APC, database, memcached, Redis, or 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' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),

];


================================================
FILE: config/cors.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Cross-Origin Resource Sharing (CORS) Configuration
    |--------------------------------------------------------------------------
    |
    | Here you may configure your settings for cross-origin resource sharing
    | or "CORS". This determines what cross-origin operations may execute
    | in web browsers. You are free to adjust these settings as needed.
    |
    | To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
    |
    */

    'paths' => ['api/*', 'sanctum/csrf-cookie'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => false,

];


================================================
FILE: config/database.php
================================================
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | 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.
    |
    */

    'default' => env('DB_CONNECTION', 'mysql'),

    /*
    |--------------------------------------------------------------------------
    | 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.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'search_path' => 'public',
            'sslmode' => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            // 'encrypt' => env('DB_ENCRYPT', 'yes'),
            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer body of commands than a typical key-value system
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        ],

        'default' => [
            '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'),
        ],

        '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'),
        ],

    ],

];


================================================
FILE: config/filesystems.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default filesystem disk that should be used
    | by the framework. The "local" disk, as well as a variety of cloud
    | based disks are available to your application. Just store away!
    |
    */

    '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 set up for each driver as an example of the required values.
    |
    | Supported Drivers: "local", "ftp", "sftp", "s3"
    |
    */

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
            'throw' => false,
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
            'throw' => false,
        ],

        's3' => [
            'driver' => 's3',
            '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,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | 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'),
    ],

];


================================================
FILE: config/hashing.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Hash Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default hash driver that will be used to hash
    | passwords for your application. By default, the bcrypt algorithm is
    | used; however, you remain free to modify this option if you wish.
    |
    | Supported: "bcrypt", "argon", "argon2id"
    |
    */

    'driver' => 'bcrypt',

    /*
    |--------------------------------------------------------------------------
    | Bcrypt Options
    |--------------------------------------------------------------------------
    |
    | Here you may specify the configuration options that should be used when
    | passwords are hashed using the Bcrypt algorithm. This will allow you
    | to control the amount of time it takes to hash the given password.
    |
    */

    'bcrypt' => [
        'rounds' => env('BCRYPT_ROUNDS', 10),
    ],

    /*
    |--------------------------------------------------------------------------
    | Argon Options
    |--------------------------------------------------------------------------
    |
    | Here you may specify the configuration options that should be used when
    | passwords are hashed using the Argon algorithm. These will allow you
    | to control the amount of time it takes to hash the given password.
    |
    */

    'argon' => [
        'memory' => 65536,
        'threads' => 1,
        'time' => 4,
    ],

];


================================================
FILE: config/logging.php
================================================
<?php

use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Log Channel
    |--------------------------------------------------------------------------
    |
    | This option defines the default log channel that gets used when writing
    | messages to the logs. The name specified in this option should match
    | one of the channels defined in the "channels" configuration array.
    |
    */

    'default' => 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' => 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.
    |
    | Available Drivers: "single", "daily", "slack", "syslog",
    |                    "errorlog", "monolog",
    |                    "custom", "stack"
    |
    */

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single'],
            'ignore_exceptions' => false,
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => env('LOG_LEVEL', 'debug'),
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => env('LOG_LEVEL', 'debug'),
            'days' => 14,
        ],

        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => 'Laravel Log',
            'emoji' => ':boom:',
            'level' => env('LOG_LEVEL', 'critical'),
        ],

        'papertrail' => [
            'driver' => 'monolog',
            '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'),
            ],
        ],

        'stderr' => [
            'driver' => 'monolog',
            'level' => env('LOG_LEVEL', 'debug'),
            'handler' => StreamHandler::class,
            'formatter' => env('LOG_STDERR_FORMATTER'),
            'with' => [
                'stream' => 'php://stderr',
            ],
        ],

        'syslog' => [
            'driver' => 'syslog',
            'level' => env('LOG_LEVEL', 'debug'),
        ],

        'errorlog' => [
            'driver' => 'errorlog',
            'level' => env('LOG_LEVEL', 'debug'),
        ],

        'null' => [
            'driver' => 'monolog',
            'handler' => NullHandler::class,
        ],

        'emergency' => [
            'path' => storage_path('logs/laravel.log'),
        ],
    ],

];


================================================
FILE: config/mail.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Mailer
    |--------------------------------------------------------------------------
    |
    | This option controls the default mailer that is used to send any email
    | messages sent by your application. Alternative mailers may be setup
    | and used as needed; however, this mailer will be used by default.
    |
    */

    'default' => env('MAIL_MAILER', 'smtp'),

    /*
    |--------------------------------------------------------------------------
    | Mailer Configurations
    |--------------------------------------------------------------------------
    |
    | 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 to be used while
    | sending an e-mail. You will specify which one you are using for your
    | mailers below. You are free to add additional mailers as required.
    |
    | Supported: "smtp", "sendmail", "mailgun", "ses",
    |            "postmark", "log", "array", "failover"
    |
    */

    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'local_domain' => env('MAIL_EHLO_DOMAIN'),
        ],

        'ses' => [
            'transport' => 'ses',
        ],

        'mailgun' => [
            'transport' => 'mailgun',
        ],

        'postmark' => [
            'transport' => 'postmark',
        ],

        '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',
            ],
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | 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.
    |
    */

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Markdown Mail Settings
    |--------------------------------------------------------------------------
    |
    | If you are using Markdown based email rendering, you may configure your
    | theme and component paths here, allowing you to customize the design
    | of the emails. Or, you may simply stick with the Laravel defaults!
    |
    */

    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];


================================================
FILE: config/media-library.php
================================================
<?php

return [

    /*
     * The disk on which to store added files and derived images by default. Choose
     * one or more of the disks you've configured in config/filesystems.php.
     */
    'disk_name' => env('MEDIA_DISK', 'public'),

    /*
     * The maximum file size of an item in bytes.
     * Adding a larger file will result in an exception.
     */
    'max_file_size' => 1024 * 1024 * 10, // 10MB

    /*
     * This queue connection will be used to generate derived and responsive images.
     * Leave empty to use the default queue connection.
     */
    'queue_connection_name' => env('QUEUE_CONNECTION', 'sync'),

    /*
     * This queue will be used to generate derived and responsive images.
     * Leave empty to use the default queue.
     */
    'queue_name' => '',

    /*
     * By default all conversions will be performed on a queue.
     */
    'queue_conversions_by_default' => env('QUEUE_CONVERSIONS_BY_DEFAULT', true),

    /*
     * The fully qualified class name of the media model.
     */
    'media_model' => Spatie\MediaLibrary\MediaCollections\Models\Media::class,

    /*
     * When enabled, media collections will be serialised using the default
     * laravel model serialization behaviour.
     * 
     * Keep this option disabled if using Media Library Pro components (https://medialibrary.pro)
     */
    'use_default_collection_serialization' => false,

    /*
     * The fully qualified class name of the model used for temporary uploads.
     *
     * This model is only used in Media Library Pro (https://medialibrary.pro)
     */
    'temporary_upload_model' => Spatie\MediaLibraryPro\Models\TemporaryUpload::class,

    /*
     * When enabled, Media Library Pro will only process temporary uploads that were uploaded
     * in the same session. You can opt to disable this for stateless usage of
     * the pro components.
     */
    'enable_temporary_uploads_session_affinity' => true,

    /*
     * When enabled, Media Library pro will generate thumbnails for uploaded file.
     */
    'generate_thumbnails_for_temporary_uploads' => true,

    /*
     * This is the class that is responsible for naming generated files.
     */
    'file_namer' => Spatie\MediaLibrary\Support\FileNamer\DefaultFileNamer::class,

    /*
     * The class that contains the strategy for determining a media file's path.
     */
    'path_generator' => Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator::class,

    /*
     * Here you can specify which path generator should be used for the given class.
     */
    'custom_path_generators' => [
        // Model::class => PathGenerator::class
        // or
        // 'model_morph_alias' => PathGenerator::class
    ],

    /*
     * When urls to files get generated, this class will be called. Use the default
     * if your files are stored locally above the site root or on s3.
     */
    'url_generator' => Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator::class,

    /*
     * Moves media on updating to keep path consistent. Enable it only with a custom
     * PathGenerator that uses, for example, the media UUID.
     */
    'moves_media_on_update' => false,

    /*
     * Whether to activate versioning when urls to files get generated.
     * When activated, this attaches a ?v=xx query string to the URL.
     */
    'version_urls' => false,

    /*
     * The media library will try to optimize all converted images by removing
     * metadata and applying a little bit of compression. These are
     * the optimizers that will be used by default.
     */
    'image_optimizers' => [
        Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [
            '-m85', // set maximum quality to 85%
            '--force', // ensure that progressive generation is always done also if a little bigger
            '--strip-all', // this strips out all text information such as comments and EXIF data
            '--all-progressive', // this will make sure the resulting image is a progressive one
        ],
        Spatie\ImageOptimizer\Optimizers\Pngquant::class => [
            '--force', // required parameter for this package
        ],
        Spatie\ImageOptimizer\Optimizers\Optipng::class => [
            '-i0', // this will result in a non-interlaced, progressive scanned image
            '-o2', // this set the optimization level to two (multiple IDAT compression trials)
            '-quiet', // required parameter for this package
        ],
        Spatie\ImageOptimizer\Optimizers\Svgo::class => [
            '--disable=cleanupIDs', // disabling because it is known to cause troubles
        ],
        Spatie\ImageOptimizer\Optimizers\Gifsicle::class => [
            '-b', // required parameter for this package
            '-O3', // this produces the slowest but best results
        ],
        Spatie\ImageOptimizer\Optimizers\Cwebp::class => [
            '-m 6', // for the slowest compression method in order to get the best compression.
            '-pass 10', // for maximizing the amount of analysis pass.
            '-mt', // multithreading for some speed improvements.
            '-q 90', //quality factor that brings the least noticeable changes.
        ],
        Spatie\ImageOptimizer\Optimizers\Avifenc::class => [
            '-a cq-level=23', // constant quality level, lower values mean better quality and greater file size (0-63).
            '-j all', // number of jobs (worker threads, "all" uses all available cores).
            '--min 0', // min quantizer for color (0-63).
            '--max 63', // max quantizer for color (0-63).
            '--minalpha 0', // min quantizer for alpha (0-63).
            '--maxalpha 63', // max quantizer for alpha (0-63).
            '-a end-usage=q', // rate control mode set to Constant Quality mode.
            '-a tune=ssim', // SSIM as tune the encoder for distortion metric.
        ],
    ],

    /*
     * These generators will be used to create an image of media files.
     */
    'image_generators' => [
        Spatie\MediaLibrary\Conversions\ImageGenerators\Image::class,
        Spatie\MediaLibrary\Conversions\ImageGenerators\Webp::class,
        Spatie\MediaLibrary\Conversions\ImageGenerators\Avif::class,
        Spatie\MediaLibrary\Conversions\ImageGenerators\Pdf::class,
        Spatie\MediaLibrary\Conversions\ImageGenerators\Svg::class,
        Spatie\MediaLibrary\Conversions\ImageGenerators\Video::class,
    ],

    /*
     * The path where to store temporary files while performing image conversions.
     * If set to null, storage_path('media-library/temp') will be used.
     */
    'temporary_directory_path' => null,

    /*
     * The engine that should perform the image conversions.
     * Should be either `gd` or `imagick`.
     */
    'image_driver' => env('IMAGE_DRIVER', 'gd'),

    /*
     * FFMPEG & FFProbe binaries paths, only used if you try to generate video
     * thumbnails and have installed the php-ffmpeg/php-ffmpeg composer
     * dependency.
     */
    'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'),
    'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'),

    /*
     * Here you can override the class names of the jobs used by this package. Make sure
     * your custom jobs extend the ones provided by the package.
     */
    'jobs' => [
        'perform_conversions' => Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob::class,
        'generate_responsive_images' => Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob::class,
    ],

    /*
     * When using the addMediaFromUrl method you may want to replace the default downloader.
     * This is particularly useful when the url of the image is behind a firewall and
     * need to add additional flags, possibly using curl.
     */
    'media_downloader' => Spatie\MediaLibrary\Downloaders\DefaultDownloader::class,

    'remote' => [
        /*
         * Any extra headers that should be included when uploading media to
         * a remote disk. Even though supported headers may vary between
         * different drivers, a sensible default has been provided.
         *
         * Supported by S3: CacheControl, Expires, StorageClass,
         * ServerSideEncryption, Metadata, ACL, ContentEncoding
         */
        'extra_headers' => [
            'CacheControl' => 'max-age=604800',
        ],
    ],

    'responsive_images' => [
        /*
         * This class is responsible for calculating the target widths of the responsive
         * images. By default we optimize for filesize and create variations that each are 30%
         * smaller than the previous one. More info in the documentation.
         *
         * https://docs.spatie.be/laravel-medialibrary/v9/advanced-usage/generating-responsive-images
         */
        'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class,

        /*
         * By default rendering media to a responsive image will add some javascript and a tiny placeholder.
         * This ensures that the browser can already determine the correct layout.
         */
        'use_tiny_placeholders' => true,

        /*
         * This class will generate the tiny placeholder used for progressive image loading. By default
         * the media library will use a tiny blurred jpg image.
         */
        'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class,
    ],

    /*
     * When enabling this option, a route will be registered that will enable
     * the Media Library Pro Vue and React components to move uploaded files
     * in a S3 bucket to their right place.
     */
    'enable_vapor_uploads' => env('ENABLE_MEDIA_LIBRARY_VAPOR_UPLOADS', false),

    /*
     * When converting Media instances to response the media library will add
     * a `loading` attribute to the `img` tag. Here you can set the default
     * value of that attribute.
     *
     * Possible values: 'lazy', 'eager', 'auto' or null if you don't want to set any loading instruction.
     *
     * More info: https://css-tricks.com/native-lazy-loading/
     */
    'default_loading_attribute_value' => null,

    /*
     * You can specify a prefix for that is used for storing all media.
     * If you set this to `/my-subdir`, all your media will be stored in a `/my-subdir` directory.
     */
    'prefix' => env('MEDIA_PREFIX', ''),
];


================================================
FILE: config/permission.php
================================================
<?php

return [

    'models' => [

        /*
         * When using the "HasPermissions" trait from this package, we need to know which
         * Eloquent model should be used to retrieve your permissions. Of course, it
         * is often just the "Permission" model but you may use whatever you like.
         *
         * The model you want to use as a Permission model needs to implement the
         * `Spatie\Permission\Contracts\Permission` contract.
         */

        'permission' => Spatie\Permission\Models\Permission::class,

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * Eloquent model should be used to retrieve your roles. Of course, it
         * is often just the "Role" model but you may use whatever you like.
         *
         * The model you want to use as a Role model needs to implement the
         * `Spatie\Permission\Contracts\Role` contract.
         */

        'role' => Spatie\Permission\Models\Role::class,

    ],

    'table_names' => [

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * table should be used to retrieve your roles. We have chosen a basic
         * default value but you may easily change it to any table you like.
         */

        'roles' => 'roles',

        /*
         * When using the "HasPermissions" trait from this package, we need to know which
         * table should be used to retrieve your permissions. We have chosen a basic
         * default value but you may easily change it to any table you like.
         */

        'permissions' => 'permissions',

        /*
         * When using the "HasPermissions" trait from this package, we need to know which
         * table should be used to retrieve your models permissions. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'model_has_permissions' => 'model_has_permissions',

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * table should be used to retrieve your models roles. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'model_has_roles' => 'model_has_roles',

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * table should be used to retrieve your roles permissions. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'role_has_permissions' => 'role_has_permissions',
    ],

    'column_names' => [
        /*
         * Change this if you want to name the related pivots other than defaults
         */
        'role_pivot_key' => null, //default 'role_id',
        'permission_pivot_key' => null, //default 'permission_id',

        /*
         * Change this if you want to name the related model primary key other than
         * `model_id`.
         *
         * For example, this would be nice if your primary keys are all UUIDs. In
         * that case, name this `model_uuid`.
         */

        'model_morph_key' => 'model_id',

        /*
         * Change this if you want to use the teams feature and your related model's
         * foreign key is other than `team_id`.
         */

        'team_foreign_key' => 'team_id',
    ],

    /*
     * When set to true, the method for checking permissions will be registered on the gate.
     * Set this to false, if you want to implement custom logic for checking permissions.
     */

    'register_permission_check_method' => true,

    /*
     * When set to true the package implements teams using the 'team_foreign_key'. If you want
     * the migrations to register the 'team_foreign_key', you must set this to true
     * before doing the migration. If you already did the migration then you must make a new
     * migration to also add 'team_foreign_key' to 'roles', 'model_has_roles', and
     * 'model_has_permissions'(view the latest version of package's migration file)
     */

    'teams' => false,

    /*
     * When set to true, the required permission names are added to the exception
     * message. This could be considered an information leak in some contexts, so
     * the default setting is false here for optimum safety.
     */

    'display_permission_in_exception' => false,

    /*
     * When set to true, the required role names are added to the exception
     * message. This could be considered an information leak in some contexts, so
     * the default setting is false here for optimum safety.
     */

    'display_role_in_exception' => false,

    /*
     * By default wildcard permission lookups are disabled.
     */

    'enable_wildcard_permission' => false,

    'cache' => [

        /*
         * By default all permissions are cached for 24 hours to speed up performance.
         * When permissions or roles are updated the cache is flushed automatically.
         */

        'expiration_time' => \DateInterval::createFromDateString('24 hours'),

        /*
         * The cache key used to store all permissions.
         */

        'key' => 'spatie.permission.cache',

        /*
         * You may optionally indicate a specific cache driver to use for permission and
         * role caching using any of the `store` drivers listed in the cache.php config
         * file. Using 'default' here means to use the `default` set in cache.php.
         */

        'store' => 'default',
    ],
];


================================================
FILE: config/queue.php
================================================
<?php

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.
    |
    */

    'default' => env('QUEUE_CONNECTION', 'sync'),

    /*
    |--------------------------------------------------------------------------
    | 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.
    |
    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
    |
    */

    'connections' => [

        'sync' => [
            'driver' => 'sync',
        ],

        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
            'after_commit' => false,
        ],

        'beanstalkd' => [
            'driver' => 'beanstalkd',
            'host' => 'localhost',
            'queue' => 'default',
            'retry_after' => 90,
            'block_for' => 0,
            'after_commit' => false,
        ],

        'sqs' => [
            'driver' => 'sqs',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
            'queue' => env('SQS_QUEUE', 'default'),
            'suffix' => env('SQS_SUFFIX'),
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
            'after_commit' => false,
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
            'block_for' => null,
            'after_commit' => false,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Failed Queue Jobs
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    'failed' => [
        'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
        'database' => env('DB_CONNECTION', 'mysql'),
        'table' => 'failed_jobs',
    ],

];


================================================
FILE: config/sanctum.php
================================================
<?php

use Laravel\Sanctum\Sanctum;

return [

    /*
    |--------------------------------------------------------------------------
    | Stateful Domains
    |--------------------------------------------------------------------------
    |
    | Requests from the following domains / hosts will receive stateful API
    | authentication cookies. Typically, these should include your local
    | and production domains which access your API via a frontend SPA.
    |
    */

    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
        Sanctum::currentApplicationUrlWithPort()
    ))),

    /*
    |--------------------------------------------------------------------------
    | Sanctum Guards
    |--------------------------------------------------------------------------
    |
    | This array contains the authentication guards that will be checked when
    | Sanctum is trying to authenticate a request. If none of these guards
    | are able to authenticate the request, Sanctum will use the bearer
    | token that's present on an incoming request for authentication.
    |
    */

    'guard' => ['web'],

    /*
    |--------------------------------------------------------------------------
    | Expiration Minutes
    |--------------------------------------------------------------------------
    |
    | This value controls the number of minutes until an issued token will be
    | considered expired. If this value is null, personal access tokens do
    | not expire. This won't tweak the lifetime of first-party sessions.
    |
    */

    'expiration' => null,

    /*
    |--------------------------------------------------------------------------
    | Token Prefix
    |--------------------------------------------------------------------------
    |
    | Sanctum can prefix new tokens in order to take advantage of numerous
    | security scanning initiatives maintained by open source platforms
    | that notify developers if they commit tokens into repositories.
    |
    | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning
    |
    */

    'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''),

    /*
    |--------------------------------------------------------------------------
    | Sanctum Middleware
    |--------------------------------------------------------------------------
    |
    | When authenticating your first-party SPA with Sanctum you may need to
    | customize some of the middleware Sanctum uses while processing the
    | request. You may change the middleware listed below as required.
    |
    */

    'middleware' => [
        'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
        'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
        'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
    ],

];


================================================
FILE: config/services.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Third Party Services
    |--------------------------------------------------------------------------
    |
    | This file is for storing the credentials for third party services such
    | 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'),
        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
        'scheme' => 'https',
    ],

    'postmark' => [
        'token' => env('POSTMARK_TOKEN'),
    ],

    'ses' => [
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    ],

];


================================================
FILE: config/session.php
================================================
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Session Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default session "driver" that will be used on
    | requests. By default, we will use the lightweight native driver but
    | you may specify any of the other wonderful drivers provided here.
    |
    | Supported: "file", "cookie", "database", "apc",
    |            "memcached", "redis", "dynamodb", "array"
    |
    */

    'driver' => env('SESSION_DRIVER', 'file'),

    /*
    |--------------------------------------------------------------------------
    | Session Lifetime
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    'lifetime' => env('SESSION_LIFETIME', 120),

    'expire_on_close' => false,

    /*
    |--------------------------------------------------------------------------
    | Session Encryption
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    '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.
    |
    */

    'files' => storage_path('framework/sessions'),

    /*
    |--------------------------------------------------------------------------
    | Session Database Connection
    |--------------------------------------------------------------------------
    |
    | When using the "database" or "redis" session drivers, you may specify a
    | connection that should be used to manage these sessions. This should
    | correspond to a connection in your database configuration options.
    |
    */

    '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.
    |
    */

    'table' => 'sessions',

    /*
    |--------------------------------------------------------------------------
    | Session Cache Store
    |--------------------------------------------------------------------------
    |
    | While using one of the framework's cache driven session backends you may
    | list a cache store that should be used for these sessions. This value
    | must match with one of the application's configured cache "stores".
    |
    | Affects: "apc", "dynamodb", "memcached", "redis"
    |
    */

    'store' => env('SESSION_STORE'),

    /*
    |--------------------------------------------------------------------------
    | Session Sweeping Lottery
    |--------------------------------------------------------------------------
    |
    | Some session drivers must manually sweep their storage location to get
    | rid of old sessions from storage. Here are the chances that it will
    | happen on a given request. By default, the odds are 2 out of 100.
    |
    */

    'lottery' => [2, 100],

    /*
    |--------------------------------------------------------------------------
    | 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.
    |
    */

    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
    ),

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Path
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    '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.
    |
    */

    'domain' => env('SESSION_DOMAIN'),

    /*
    |--------------------------------------------------------------------------
    | HTTPS Only Cookies
    |--------------------------------------------------------------------------
    |
    | 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 when it can't be done securely.
    |
    */

    'secure' => env('SESSION_SECURE_COOKIE'),

    /*
    |--------------------------------------------------------------------------
    | HTTP Access Only
    |--------------------------------------------------------------------------
    |
    | 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.
    |
    */

    '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" since this is a secure default value.
    |
    | Supported: "lax", "strict", "none", null
    |
    */

    'same_site' => 'lax',

];


================================================
FILE: config/view.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | View Storage Paths
    |--------------------------------------------------------------------------
    |
    | Most templating systems load templates from disk. Here you may specify
    | an array of paths that should be checked for your views. Of course
    | the usual Laravel view path has already been registered for you.
    |
    */

    'paths' => [
        resource_path('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' => env(
        'VIEW_COMPILED_PATH',
        realpath(storage_path('framework/views'))
    ),

];


================================================
FILE: database/.gitignore
================================================
*.sqlite*


================================================
FILE: database/factories/UserFactory.php
================================================
<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
 */
class UserFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition()
    {
        return [
            'name' => fake()->name(),
            'email' => fake()->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }

    /**
     * Indicate that the model's email address should be unverified.
     *
     * @return static
     */
    public function unverified()
    {
        return $this->state(fn (array $attributes) => [
            'email_verified_at' => null,
        ]);
    }
}


================================================
FILE: database/migrations/2014_10_12_000000_create_users_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
};


================================================
FILE: database/migrations/2014_10_12_100000_create_password_resets_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('password_resets', function (Blueprint $table) {
            $table->string('email')->index();
            $table->string('token');
            $table->timestamp('created_at')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('password_resets');
    }
};


================================================
FILE: database/migrations/2019_08_19_000000_create_failed_jobs_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        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.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('failed_jobs');
    }
};


================================================
FILE: database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('personal_access_tokens', function (Blueprint $table) {
            $table->id();
            $table->morphs('tokenable');
            $table->string('name');
            $table->string('token', 64)->unique();
            $table->text('abilities')->nullable();
            $table->timestamp('last_used_at')->nullable();
            $table->timestamp('expires_at')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('personal_access_tokens');
    }
};


================================================
FILE: database/migrations/2022_09_30_181156_create_posts_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->unsignedBigInteger('user_id');
            $table->longText('content');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
};


================================================
FILE: database/migrations/2022_09_30_181227_create_categories_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
};


================================================
FILE: database/migrations/2023_09_25_045349_create_jobs_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('jobs', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('queue')->index();
            $table->longText('payload');
            $table->unsignedTinyInteger('attempts');
            $table->unsignedInteger('reserved_at')->nullable();
            $table->unsignedInteger('available_at');
            $table->unsignedInteger('created_at');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('jobs');
    }
};


================================================
FILE: database/migrations/2023_10_02_010617_create_category_post_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('category_post', function (Blueprint $table) {
            $table->unsignedBigInteger('category_id');
            $table->unsignedBigInteger('post_id');
            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
            $table->primary(['category_id', 'post_id']);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('category_post');
    }
};


================================================
FILE: database/migrations/2023_10_02_175025_create_media_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('media', function (Blueprint $table) {
            $table->id();

            $table->morphs('model');
            $table->uuid('uuid')->nullable()->unique();
            $table->string('collection_name');
            $table->string('name');
            $table->string('file_name');
            $table->string('mime_type')->nullable();
            $table->string('disk');
            $table->string('conversions_disk')->nullable();
            $table->unsignedBigInteger('size');
            $table->json('manipulations');
            $table->json('custom_properties');
            $table->json('generated_conversions');
            $table->json('responsive_images');
            $table->unsignedInteger('order_column')->nullable()->index();

            $table->nullableTimestamps();
        });
    }
};


================================================
FILE: database/migrations/2024_11_25_022836_create_permission_tables.php
================================================
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        $teams = config('permission.teams');
        $tableNames = config('permission.table_names');
        $columnNames = config('permission.column_names');
        $pivotRole = $columnNames['role_pivot_key'] ?? 'role_id';
        $pivotPermission = $columnNames['permission_pivot_key'] ?? 'permission_id';

        if (empty($tableNames)) {
            throw new \Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.');
        }
        if ($teams && empty($columnNames['team_foreign_key'] ?? null)) {
            throw new \Exception('Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.');
        }

        Schema::create($tableNames['permissions'], function (Blueprint $table) {
            //$table->engine('InnoDB');
            $table->bigIncrements('id'); // permission id
            $table->string('name');       // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format)
            $table->string('guard_name'); // For MyISAM use string('guard_name', 25);
            $table->timestamps();

            $table->unique(['name', 'guard_name']);
        });

        Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) {
            //$table->engine('InnoDB');
            $table->bigIncrements('id'); // role id
            if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing
                $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();
                $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index');
            }
            $table->string('name');       // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format)
            $table->string('guard_name'); // For MyISAM use string('guard_name', 25);
            $table->timestamps();
            if ($teams || config('permission.testing')) {
                $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);
            } else {
                $table->unique(['name', 'guard_name']);
            }
        });

        Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) {
            $table->unsignedBigInteger($pivotPermission);

            $table->string('model_type');
            $table->unsignedBigInteger($columnNames['model_morph_key']);
            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');

            $table->foreign($pivotPermission)
                ->references('id') // permission id
                ->on($tableNames['permissions'])
                ->onDelete('cascade');
            if ($teams) {
                $table->unsignedBigInteger($columnNames['team_foreign_key']);
                $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');

                $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'],
                    'model_has_permissions_permission_model_type_primary');
            } else {
                $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
                    'model_has_permissions_permission_model_type_primary');
            }

        });

        Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) {
            $table->unsignedBigInteger($pivotRole);

            $table->string('model_type');
            $table->unsignedBigInteger($columnNames['model_morph_key']);
            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');

            $table->foreign($pivotRole)
                ->references('id') // role id
                ->on($tableNames['roles'])
                ->onDelete('cascade');
            if ($teams) {
                $table->unsignedBigInteger($columnNames['team_foreign_key']);
                $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index');

                $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'],
                    'model_has_roles_role_model_type_primary');
            } else {
                $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'],
                    'model_has_roles_role_model_type_primary');
            }
        });

        Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) {
            $table->unsignedBigInteger($pivotPermission);
            $table->unsignedBigInteger($pivotRole);

            $table->foreign($pivotPermission)
                ->references('id') // permission id
                ->on($tableNames['permissions'])
                ->onDelete('cascade');

            $table->foreign($pivotRole)
                ->references('id') // role id
                ->on($tableNames['roles'])
                ->onDelete('cascade');

            $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary');
        });

        app('cache')
            ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
            ->forget(config('permission.cache.key'));
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        $tableNames = config('permission.table_names');

        if (empty($tableNames)) {
            throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');
        }

        Schema::drop($tableNames['role_has_permissions']);
        Schema::drop($tableNames['model_has_roles']);
        Schema::drop($tableNames['model_has_permissions']);
        Schema::drop($tableNames['roles']);
        Schema::drop($tableNames['permissions']);
    }
};


================================================
FILE: database/migrations/2025_01_22_091913_create_sessions_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        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('sessions');
    }
};


================================================
FILE: database/migrations/2025_01_23_093055_create_activity_log_table.php
================================================
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateActivityLogTable extends Migration
{
    public function up()
    {
        Schema::connection(config('activitylog.database_connection'))->create(config('activitylog.table_name'), function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('log_name')->nullable();
            $table->text('description');
            $table->nullableMorphs('subject', 'subject');
            $table->nullableMorphs('causer', 'causer');
            $table->json('properties')->nullable();
            $table->timestamps();
            $table->index('log_name');
        });
    }

    public function down()
    {
        Schema::connection(config('activitylog.database_connection'))->dropIfExists(config('activitylog.table_name'));
    }
}


================================================
FILE: database/migrations/2025_01_23_093056_add_event_column_to_activity_log_table.php
================================================
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddEventColumnToActivityLogTable extends Migration
{
    public function up()
    {
        Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) {
            $table->string('event')->nullable()->after('subject_type');
        });
    }

    public function down()
    {
        Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) {
            $table->dropColumn('event');
        });
    }
}


================================================
FILE: database/migrations/2025_01_23_093057_add_batch_uuid_column_to_activity_log_table.php
================================================
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddBatchUuidColumnToActivityLogTable extends Migration
{
    public function up()
    {
        Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) {
            $table->uuid('batch_uuid')->nullable()->after('properties');
        });
    }

    public function down()
    {
        Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) {
            $table->dropColumn('batch_uuid');
        });
    }
}


================================================
FILE: database/migrations/2026_01_05_114017_create_api_inspector_analytics_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('api_inspector_analytics', function (Blueprint $table) {
            $table->id();
            $table->string('route')->index();
            $table->string('method');
            $table->string('uri');
            $table->unsignedInteger('status_code');
            $table->float('duration_ms')->default(0);
            $table->bigInteger('memory_usage')->default(0);
            $table->ipAddress('ip_address')->nullable();
            $table->text('user_agent')->nullable();
            $table->text('error')->nullable();
            $table->timestamp('recorded_at')->index();
            $table->timestamps();

            // Indexes for common queries
            $table->index(['route', 'recorded_at']);
            $table->index(['status_code', 'recorded_at']);
            $table->index(['created_at']);
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('api_inspector_analytics');
    }
};


================================================
FILE: database/seeders/CreateAdminUserSeeder.php
================================================
<?php

namespace Database\Seeders;

use App\Models\Category;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

class CreateAdminUserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $user = User::create([
            'name' => 'Fazle',
            'email' => 'admin@demo.com',
            'password' => bcrypt('12345678')
        ]);

        $role = Role::create(['name' => 'admin']);
        $role2 = Role::create(['name' => 'user']);
        $permissions = [
            'post-list',
            'post-create',
            'post-edit',
            'post-delete'
            ];
        $role2->syncPermissions($permissions);
        Category::create(['name' => 'Vue.js']);
        Category::create(['name' => 'Cat 2']);

        $permissions = Permission::pluck('id','id')->all();

        $role->syncPermissions($permissions);

        $user->assignRole([$role->id]);
    }
}


================================================
FILE: database/seeders/DatabaseSeeder.php
================================================
<?php

namespace Database\Seeders;

// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(PermissionTableSeeder::class);
        $this->call(CreateAdminUserSeeder::class);

//        $this->call(RoleSeeder::class);
        // \App\Models\User::factory(10)->create();

        // \App\Models\User::factory()->create([
        //     'name' => 'Test User',
        //     'email' => 'test@example.com',
        // ]);
    }
}


================================================
FILE: database/seeders/PermissionTableSeeder.php
================================================
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;

class PermissionTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $permissions = [
            'role-list',
            'role-create',
            'role-edit',
            'role-delete',
            'permission-list',
            'permission-create',
            'permission-edit',
            'permission-delete',
            'user-list',
            'user-create',
            'user-edit',
            'user-delete',
            'post-list',
            'post-create',
            'post-edit',
            'post-all',
            'post-delete',
            'category-list',
            'category-create',
            'category-edit',
            'category-delete'
        ];

        foreach ($permissions as $permission) {
            Permission::create(['name' => $permission]);
        }
    }
}


================================================
FILE: lang/en/auth.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used during authentication for various
    | messages that we need to display to the user. You are free to modify
    | these language lines according to your application's requirements.
    |
    */

    'failed' => 'These credentials do not match our records.',
    'password' => 'The provided password is incorrect.',
    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',

];


================================================
FILE: lang/en/pagination.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Pagination Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used by the paginator library to build
    | the simple pagination links. You are free to change them to anything
    | you want to customize your views to better match your application.
    |
    */

    'previous' => '&laquo; Previous',
    'next' => 'Next &raquo;',

];


================================================
FILE: lang/en/passwords.php
================================================
<?php

return [

    /*
    |-------
Download .txt
gitextract_q3enx6td/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── ISSUE_TEMPLATE/
│       ├── bug_report.md
│       ├── custom.md
│       └── feature_request.md
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── app/
│   ├── Console/
│   │   └── Kernel.php
│   ├── Exceptions/
│   │   └── Handler.php
│   ├── Helpers/
│   │   └── Misc.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Api/
│   │   │   │   ├── ActivityLogController.php
│   │   │   │   ├── BrowserSessionController.php
│   │   │   │   ├── CategoryController.php
│   │   │   │   ├── PermissionController.php
│   │   │   │   ├── PostController.php
│   │   │   │   ├── ProfileController.php
│   │   │   │   ├── RoleController.php
│   │   │   │   └── UserController.php
│   │   │   ├── Auth/
│   │   │   │   ├── AuthenticatedSessionController.php
│   │   │   │   ├── ConfirmPasswordController.php
│   │   │   │   ├── ForgotPasswordController.php
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── RegisterController.php
│   │   │   │   ├── ResetPasswordController.php
│   │   │   │   └── VerificationController.php
│   │   │   ├── Controller.php
│   │   │   └── HomeController.php
│   │   ├── Kernel.php
│   │   ├── Middleware/
│   │   │   ├── Authenticate.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── EnsureEmailIsVerified.php
│   │   │   ├── HandleInvalidSignature.php
│   │   │   ├── PreventRequestsDuringMaintenance.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── TrustHosts.php
│   │   │   ├── TrustProxies.php
│   │   │   ├── ValidateSignature.php
│   │   │   └── VerifyCsrfToken.php
│   │   ├── Requests/
│   │   │   ├── Auth/
│   │   │   │   ├── LoginRequest.php
│   │   │   │   └── RegisterRequest.php
│   │   │   ├── StoreCategoryRequest.php
│   │   │   ├── StorePermissionRequest.php
│   │   │   ├── StorePostRequest.php
│   │   │   ├── StoreRoleRequest.php
│   │   │   ├── StoreUserRequest.php
│   │   │   ├── UpdateProfileRequest.php
│   │   │   └── UpdateUserRequest.php
│   │   └── Resources/
│   │       ├── ActivityLogResource.php
│   │       ├── CategoryResource.php
│   │       ├── PermissionResource.php
│   │       ├── PostResource.php
│   │       ├── RoleResource.php
│   │       └── UserResource.php
│   ├── Models/
│   │   ├── Category.php
│   │   ├── CategoryPost.php
│   │   ├── Post.php
│   │   └── User.php
│   ├── Notifications/
│   │   ├── UserResetPasswordNotification.php
│   │   └── VerifyEmailNotification.php
│   └── Providers/
│       ├── AppServiceProvider.php
│       ├── AuthServiceProvider.php
│       ├── BroadcastServiceProvider.php
│       ├── EventServiceProvider.php
│       └── RouteServiceProvider.php
├── artisan
├── bootstrap/
│   ├── app.php
│   └── cache/
│       └── .gitignore
├── composer.json
├── config/
│   ├── activitylog.php
│   ├── api-inspector.php
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── browser-sessions.php
│   ├── cache.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── logging.php
│   ├── mail.php
│   ├── media-library.php
│   ├── permission.php
│   ├── queue.php
│   ├── sanctum.php
│   ├── services.php
│   ├── session.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   ├── 2019_08_19_000000_create_failed_jobs_table.php
│   │   ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│   │   ├── 2022_09_30_181156_create_posts_table.php
│   │   ├── 2022_09_30_181227_create_categories_table.php
│   │   ├── 2023_09_25_045349_create_jobs_table.php
│   │   ├── 2023_10_02_010617_create_category_post_table.php
│   │   ├── 2023_10_02_175025_create_media_table.php
│   │   ├── 2024_11_25_022836_create_permission_tables.php
│   │   ├── 2025_01_22_091913_create_sessions_table.php
│   │   ├── 2025_01_23_093055_create_activity_log_table.php
│   │   ├── 2025_01_23_093056_add_event_column_to_activity_log_table.php
│   │   ├── 2025_01_23_093057_add_batch_uuid_column_to_activity_log_table.php
│   │   └── 2026_01_05_114017_create_api_inspector_analytics_table.php
│   └── seeders/
│       ├── CreateAdminUserSeeder.php
│       ├── DatabaseSeeder.php
│       └── PermissionTableSeeder.php
├── lang/
│   └── en/
│       ├── auth.php
│       ├── pagination.php
│       ├── passwords.php
│       └── validation.php
├── package.json
├── phpunit.xml
├── public/
│   ├── .htaccess
│   ├── index.php
│   ├── robots.txt
│   └── vendor/
│       └── api-inspector/
│           ├── .vite/
│           │   └── manifest.json
│           ├── css/
│           │   └── app.css
│           └── js/
│               └── app.js
├── resources/
│   ├── css/
│   │   └── app.css
│   ├── js/
│   │   ├── app.js
│   │   ├── bootstrap.js
│   │   ├── components/
│   │   │   ├── Admin/
│   │   │   │   ├── Create.vue
│   │   │   │   ├── Edit.vue
│   │   │   │   └── Index.vue
│   │   │   ├── DropZone.vue
│   │   │   ├── DualListBox.vue
│   │   │   ├── ExampleComponent.vue
│   │   │   ├── Footer.vue
│   │   │   ├── LocaleSwitcher.vue
│   │   │   ├── Nav.vue
│   │   │   ├── TextEditorComponent.vue
│   │   │   └── includes/
│   │   │       ├── AdminNavbar.vue
│   │   │       ├── AdminSidebar.vue
│   │   │       └── Breadcrumb.vue
│   │   ├── composables/
│   │   │   ├── activityLogs.js
│   │   │   ├── auth.js
│   │   │   ├── categories.js
│   │   │   ├── permissions.js
│   │   │   ├── posts.js
│   │   │   ├── profile.js
│   │   │   ├── roles.js
│   │   │   └── users.js
│   │   ├── lang/
│   │   │   ├── bn.json
│   │   │   ├── en.json
│   │   │   ├── es.json
│   │   │   ├── fr.json
│   │   │   ├── pt-BR.json
│   │   │   └── zh-CN.json
│   │   ├── layouts/
│   │   │   ├── Admin.vue
│   │   │   ├── Authenticated.vue
│   │   │   ├── Error.vue
│   │   │   └── Guest.vue
│   │   ├── plugins/
│   │   │   └── i18n.js
│   │   ├── routes/
│   │   │   ├── index.js
│   │   │   └── routes.js
│   │   ├── services/
│   │   │   └── ability.js
│   │   ├── store/
│   │   │   ├── auth.js
│   │   │   └── lang.js
│   │   ├── validation/
│   │   │   └── rules.js
│   │   └── views/
│   │       ├── admin/
│   │       │   ├── activity-log/
│   │       │   │   └── Index.vue
│   │       │   ├── browser-sessions/
│   │       │   │   └── Index.vue
│   │       │   ├── categories/
│   │       │   │   ├── Create.vue
│   │       │   │   ├── Edit.vue
│   │       │   │   └── Index.vue
│   │       │   ├── index.vue
│   │       │   ├── permissions/
│   │       │   │   ├── Create.vue
│   │       │   │   ├── Edit.vue
│   │       │   │   └── Index.vue
│   │       │   ├── posts/
│   │       │   │   ├── Create.vue
│   │       │   │   ├── Edit.vue
│   │       │   │   └── Index.vue
│   │       │   ├── profile/
│   │       │   │   └── index.vue
│   │       │   ├── roles/
│   │       │   │   ├── Create.vue
│   │       │   │   ├── Edit.vue
│   │       │   │   └── Index.vue
│   │       │   └── users/
│   │       │       ├── Create.vue
│   │       │       ├── Edit.vue
│   │       │       └── Index.vue
│   │       ├── auth/
│   │       │   ├── Verify.vue
│   │       │   └── passwords/
│   │       │       ├── Confirm.vue
│   │       │       ├── Email.vue
│   │       │       └── Reset.vue
│   │       ├── category/
│   │       │   └── posts.vue
│   │       ├── errors/
│   │       │   └── 404.vue
│   │       ├── home/
│   │       │   └── index.vue
│   │       ├── login/
│   │       │   └── Login.vue
│   │       ├── posts/
│   │       │   ├── details.vue
│   │       │   └── index.vue
│   │       └── register/
│   │           └── index.vue
│   ├── sass/
│   │   ├── _custom.scss
│   │   ├── _variables.scss
│   │   └── app.scss
│   └── views/
│       ├── auth/
│       │   ├── login.blade.php
│       │   ├── passwords/
│       │   │   ├── confirm.blade.php
│       │   │   ├── email.blade.php
│       │   │   └── reset.blade.php
│       │   ├── register.blade.php
│       │   └── verify.blade.php
│       ├── home.blade.php
│       ├── layouts/
│       │   ├── app.blade.php
│       │   └── master.blade.php
│       ├── main-view.blade.php
│       └── welcome.blade.php
├── routes/
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   ├── testing/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── tests/
│   ├── CreatesApplication.php
│   ├── Feature/
│   │   └── ExampleTest.php
│   ├── TestCase.php
│   └── Unit/
│       └── ExampleTest.php
├── vite.config.js
└── vue.config.js
Download .txt
SYMBOL INDEX (1689 symbols across 94 files)

FILE: app/Console/Kernel.php
  class Kernel (line 8) | class Kernel extends ConsoleKernel
    method schedule (line 16) | protected function schedule(Schedule $schedule)
    method commands (line 26) | protected function commands()

FILE: app/Exceptions/Handler.php
  class Handler (line 8) | class Handler extends ExceptionHandler
    method register (line 44) | public function register()

FILE: app/Helpers/Misc.php
  class Misc (line 8) | class Misc
    method convertKeysToHeadline (line 48) | public static function convertKeysToHeadline(array $data)
    method apiPagination (line 61) | public static function apiPagination(array $data)

FILE: app/Http/Controllers/Api/ActivityLogController.php
  class ActivityLogController (line 10) | class ActivityLogController extends Controller
    method __invoke (line 12) | public function __invoke(Request $request)

FILE: app/Http/Controllers/Api/BrowserSessionController.php
  class BrowserSessionController (line 8) | class BrowserSessionController extends Controller
    method index (line 10) | public function index()
    method logoutOtherDevices (line 17) | public function logoutOtherDevices()

FILE: app/Http/Controllers/Api/CategoryController.php
  class CategoryController (line 11) | class CategoryController extends Controller
    method index (line 13) | public function index()
    method store (line 42) | public function store(StoreCategoryRequest $request)
    method show (line 50) | public function show(Category $category)
    method update (line 56) | public function update(Category $category, StoreCategoryRequest $request)
    method destroy (line 64) | public function destroy(Category $category)
    method getList (line 72) | public function getList()

FILE: app/Http/Controllers/Api/PermissionController.php
  class PermissionController (line 14) | class PermissionController extends Controller
    method index (line 21) | public function index()
    method store (line 58) | public function store(StorePermissionRequest $request)
    method show (line 80) | public function show(Permission $permission)
    method update (line 95) | public function update(Permission $permission, StorePermissionRequest ...
    method destroy (line 114) | public function destroy(Permission $permission)
    method getRolePermissions (line 122) | public function getRolePermissions($id)
    method updateRolePermissions (line 128) | public function updateRolePermissions(Request $request)

FILE: app/Http/Controllers/Api/PostController.php
  class PostController (line 12) | class PostController extends Controller
    method index (line 20) | public function index()
    method store (line 63) | public function store(StorePostRequest $request)
    method show (line 82) | public function show(Post $post): PostResource
    method update (line 92) | public function update(Post $post, StorePostRequest $request)
    method destroy (line 106) | public function destroy(Post $post)
    method getPosts (line 120) | public function getPosts()
    method getCategoryByPosts (line 126) | public function getCategoryByPosts($id)
    method getPost (line 133) | public function getPost($id)

FILE: app/Http/Controllers/Api/ProfileController.php
  class ProfileController (line 11) | class ProfileController extends Controller
    method update (line 16) | public function update(UpdateProfileRequest $request)
    method user (line 28) | public function user(Request $request)

FILE: app/Http/Controllers/Api/RoleController.php
  class RoleController (line 11) | class RoleController extends Controller
    method index (line 18) | public function index()
    method store (line 54) | public function store(StoreRoleRequest $request)
    method show (line 76) | public function show(Role $role)
    method update (line 91) | public function update(Role $role, StoreRoleRequest $request)
    method destroy (line 110) | public function destroy(Role $role)
    method getList (line 118) | public function getList()

FILE: app/Http/Controllers/Api/UserController.php
  class UserController (line 14) | class UserController extends Controller
    method index (line 21) | public function index()
    method store (line 57) | public function store(StoreUserRequest $request)
    method show (line 79) | public function show(User $user)
    method update (line 92) | public function update(UpdateUserRequest $request, User $user)
    method destroy (line 116) | public function destroy(User $user)

FILE: app/Http/Controllers/Auth/AuthenticatedSessionController.php
  class AuthenticatedSessionController (line 18) | class AuthenticatedSessionController extends Controller
    method create (line 25) | public function create()
    method login (line 36) | public function login(LoginRequest $request)
    method logout (line 72) | public function logout(Request $request)
    method register (line 99) | public function register(RegisterRequest $request)

FILE: app/Http/Controllers/Auth/ConfirmPasswordController.php
  class ConfirmPasswordController (line 9) | class ConfirmPasswordController extends Controller
    method __construct (line 36) | public function __construct()

FILE: app/Http/Controllers/Auth/ForgotPasswordController.php
  class ForgotPasswordController (line 8) | class ForgotPasswordController extends Controller

FILE: app/Http/Controllers/Auth/LoginController.php
  class LoginController (line 9) | class LoginController extends Controller
    method __construct (line 36) | public function __construct()

FILE: app/Http/Controllers/Auth/RegisterController.php
  class RegisterController (line 12) | class RegisterController extends Controller
    method __construct (line 39) | public function __construct()
    method validator (line 50) | protected function validator(array $data)
    method create (line 65) | protected function create(array $data)

FILE: app/Http/Controllers/Auth/ResetPasswordController.php
  class ResetPasswordController (line 9) | class ResetPasswordController extends Controller

FILE: app/Http/Controllers/Auth/VerificationController.php
  class VerificationController (line 13) | class VerificationController extends Controller
    method __construct (line 40) | public function __construct()
    method verify (line 51) | public function verify(Request $request)
    method resend (line 79) | public function resend(Request $request)

FILE: app/Http/Controllers/Controller.php
  class Controller (line 10) | class Controller extends BaseController
    method successResponse (line 14) | protected function successResponse($data, $message = null, $code = 200)
    method errorResponse (line 23) | protected function errorResponse($message = null, $code)

FILE: app/Http/Controllers/HomeController.php
  class HomeController (line 7) | class HomeController extends Controller
    method __construct (line 14) | public function __construct()
    method index (line 24) | public function index()

FILE: app/Http/Kernel.php
  class Kernel (line 7) | class Kernel extends HttpKernel

FILE: app/Http/Middleware/Authenticate.php
  class Authenticate (line 7) | class Authenticate extends Middleware
    method redirectTo (line 15) | protected function redirectTo($request)

FILE: app/Http/Middleware/EncryptCookies.php
  class EncryptCookies (line 7) | class EncryptCookies extends Middleware

FILE: app/Http/Middleware/EnsureEmailIsVerified.php
  class EnsureEmailIsVerified (line 10) | class EnsureEmailIsVerified
    method handle (line 17) | public function handle(Request $request, Closure $next): Response

FILE: app/Http/Middleware/HandleInvalidSignature.php
  class HandleInvalidSignature (line 9) | class HandleInvalidSignature
    method handle (line 18) | public function handle(Request $request, Closure $next)

FILE: app/Http/Middleware/PreventRequestsDuringMaintenance.php
  class PreventRequestsDuringMaintenance (line 7) | class PreventRequestsDuringMaintenance extends Middleware

FILE: app/Http/Middleware/RedirectIfAuthenticated.php
  class RedirectIfAuthenticated (line 10) | class RedirectIfAuthenticated
    method handle (line 20) | public function handle(Request $request, Closure $next, ...$guards)

FILE: app/Http/Middleware/TrimStrings.php
  class TrimStrings (line 7) | class TrimStrings extends Middleware

FILE: app/Http/Middleware/TrustHosts.php
  class TrustHosts (line 7) | class TrustHosts extends Middleware
    method hosts (line 14) | public function hosts()

FILE: app/Http/Middleware/TrustProxies.php
  class TrustProxies (line 8) | class TrustProxies extends Middleware

FILE: app/Http/Middleware/ValidateSignature.php
  class ValidateSignature (line 7) | class ValidateSignature extends Middleware

FILE: app/Http/Middleware/VerifyCsrfToken.php
  class VerifyCsrfToken (line 7) | class VerifyCsrfToken extends Middleware

FILE: app/Http/Requests/Auth/LoginRequest.php
  class LoginRequest (line 12) | class LoginRequest extends FormRequest
    method authorize (line 19) | public function authorize()
    method rules (line 29) | public function rules()
    method authenticate (line 44) | public function authenticate()
    method ensureIsNotRateLimited (line 75) | public function ensureIsNotRateLimited()
    method throttleKey (line 98) | public function throttleKey()

FILE: app/Http/Requests/Auth/RegisterRequest.php
  class RegisterRequest (line 7) | class RegisterRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: app/Http/Requests/StoreCategoryRequest.php
  class StoreCategoryRequest (line 7) | class StoreCategoryRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: app/Http/Requests/StorePermissionRequest.php
  class StorePermissionRequest (line 7) | class StorePermissionRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: app/Http/Requests/StorePostRequest.php
  class StorePostRequest (line 7) | class StorePostRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: app/Http/Requests/StoreRoleRequest.php
  class StoreRoleRequest (line 7) | class StoreRoleRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: app/Http/Requests/StoreUserRequest.php
  class StoreUserRequest (line 7) | class StoreUserRequest extends FormRequest
    method authorize (line 12) | public function authorize(): bool
    method rules (line 22) | public function rules(): array

FILE: app/Http/Requests/UpdateProfileRequest.php
  class UpdateProfileRequest (line 7) | class UpdateProfileRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: app/Http/Requests/UpdateUserRequest.php
  class UpdateUserRequest (line 7) | class UpdateUserRequest extends FormRequest
    method authorize (line 12) | public function authorize(): bool
    method rules (line 22) | public function rules(): array

FILE: app/Http/Resources/ActivityLogResource.php
  class ActivityLogResource (line 8) | class ActivityLogResource extends JsonResource
    method toArray (line 15) | public function toArray(Request $request): array

FILE: app/Http/Resources/CategoryResource.php
  class CategoryResource (line 7) | class CategoryResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: app/Http/Resources/PermissionResource.php
  class PermissionResource (line 7) | class PermissionResource extends JsonResource
    method toArray (line 15) | public function toArray($request)

FILE: app/Http/Resources/PostResource.php
  class PostResource (line 8) | class PostResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: app/Http/Resources/RoleResource.php
  class RoleResource (line 7) | class RoleResource extends JsonResource
    method toArray (line 15) | public function toArray($request)

FILE: app/Http/Resources/UserResource.php
  class UserResource (line 7) | class UserResource extends JsonResource
    method toArray (line 15) | public function toArray($request)

FILE: app/Models/Category.php
  class Category (line 10) | class Category extends Model
    method getActivitylogOptions (line 16) | public function getActivitylogOptions(): LogOptions
    method posts (line 26) | public function posts()

FILE: app/Models/CategoryPost.php
  class CategoryPost (line 8) | class CategoryPost extends Model

FILE: app/Models/Post.php
  class Post (line 17) | class Post extends Model implements HasMedia
    method getActivitylogOptions (line 23) | public function getActivitylogOptions(): LogOptions
    method user (line 30) | public function user()
    method categories (line 38) | public function categories()
    method registerMediaCollections (line 43) | public function registerMediaCollections(): void
    method registerMediaConversions (line 50) | public function registerMediaConversions(Media $media = null): void

FILE: app/Models/User.php
  class User (line 16) | class User extends Authenticatable
    method sendPasswordResetNotification (line 52) | public function sendPasswordResetNotification($token)
    method sendEmailVerificationNotification (line 62) | public function sendEmailVerificationNotification()
    method getActivitylogOptions (line 67) | public function getActivitylogOptions(): LogOptions

FILE: app/Notifications/UserResetPasswordNotification.php
  class UserResetPasswordNotification (line 10) | class UserResetPasswordNotification extends ResetPasswordNotification
    method toMail (line 17) | public function toMail($notifiable): MailMessage
    method toArray (line 31) | public function toArray(object $notifiable): array

FILE: app/Notifications/VerifyEmailNotification.php
  class VerifyEmailNotification (line 8) | class VerifyEmailNotification extends VerifyEmail
    method toMail (line 16) | public function toMail($notifiable)

FILE: app/Providers/AppServiceProvider.php
  class AppServiceProvider (line 8) | class AppServiceProvider extends ServiceProvider
    method register (line 15) | public function register()
    method boot (line 25) | public function boot()

FILE: app/Providers/AuthServiceProvider.php
  class AuthServiceProvider (line 10) | class AuthServiceProvider extends ServiceProvider
    method boot (line 26) | public function boot()
    method registerUserAccessToGates (line 32) | protected function registerUserAccessToGates()

FILE: app/Providers/BroadcastServiceProvider.php
  class BroadcastServiceProvider (line 8) | class BroadcastServiceProvider extends ServiceProvider
    method boot (line 15) | public function boot()

FILE: app/Providers/EventServiceProvider.php
  class EventServiceProvider (line 10) | class EventServiceProvider extends ServiceProvider
    method boot (line 28) | public function boot()
    method shouldDiscoverEvents (line 38) | public function shouldDiscoverEvents()

FILE: app/Providers/RouteServiceProvider.php
  class RouteServiceProvider (line 11) | class RouteServiceProvider extends ServiceProvider
    method boot (line 27) | public function boot()
    method configureRateLimiting (line 46) | protected function configureRateLimiting()

FILE: database/factories/UserFactory.php
  class UserFactory (line 11) | class UserFactory extends Factory
    method definition (line 18) | public function definition()
    method unverified (line 34) | public function unverified()

FILE: database/migrations/2014_10_12_000000_create_users_table.php
  method up (line 14) | public function up()
  method down (line 32) | public function down()

FILE: database/migrations/2014_10_12_100000_create_password_resets_table.php
  method up (line 14) | public function up()
  method down (line 28) | public function down()

FILE: database/migrations/2019_08_19_000000_create_failed_jobs_table.php
  method up (line 14) | public function up()
  method down (line 32) | public function down()

FILE: database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
  method up (line 14) | public function up()
  method down (line 33) | public function down()

FILE: database/migrations/2022_09_30_181156_create_posts_table.php
  method up (line 14) | public function up()
  method down (line 30) | public function down()

FILE: database/migrations/2022_09_30_181227_create_categories_table.php
  method up (line 14) | public function up()
  method down (line 28) | public function down()

FILE: database/migrations/2023_09_25_045349_create_jobs_table.php
  method up (line 12) | public function up(): void
  method down (line 28) | public function down(): void

FILE: database/migrations/2023_10_02_010617_create_category_post_table.php
  method up (line 12) | public function up(): void
  method down (line 26) | public function down(): void

FILE: database/migrations/2023_10_02_175025_create_media_table.php
  method up (line 9) | public function up(): void

FILE: database/migrations/2024_11_25_022836_create_permission_tables.php
  method up (line 12) | public function up(): void
  method down (line 126) | public function down(): void

FILE: database/migrations/2025_01_22_091913_create_sessions_table.php
  method up (line 12) | public function up(): void
  method down (line 27) | public function down(): void

FILE: database/migrations/2025_01_23_093055_create_activity_log_table.php
  class CreateActivityLogTable (line 7) | class CreateActivityLogTable extends Migration
    method up (line 9) | public function up()
    method down (line 23) | public function down()

FILE: database/migrations/2025_01_23_093056_add_event_column_to_activity_log_table.php
  class AddEventColumnToActivityLogTable (line 7) | class AddEventColumnToActivityLogTable extends Migration
    method up (line 9) | public function up()
    method down (line 16) | public function down()

FILE: database/migrations/2025_01_23_093057_add_batch_uuid_column_to_activity_log_table.php
  class AddBatchUuidColumnToActivityLogTable (line 7) | class AddBatchUuidColumnToActivityLogTable extends Migration
    method up (line 9) | public function up()
    method down (line 16) | public function down()

FILE: database/migrations/2026_01_05_114017_create_api_inspector_analytics_table.php
  method up (line 9) | public function up(): void
  method down (line 32) | public function down(): void

FILE: database/seeders/CreateAdminUserSeeder.php
  class CreateAdminUserSeeder (line 12) | class CreateAdminUserSeeder extends Seeder
    method run (line 19) | public function run()

FILE: database/seeders/DatabaseSeeder.php
  class DatabaseSeeder (line 8) | class DatabaseSeeder extends Seeder
    method run (line 15) | public function run()

FILE: database/seeders/PermissionTableSeeder.php
  class PermissionTableSeeder (line 9) | class PermissionTableSeeder extends Seeder
    method run (line 16) | public function run()

FILE: public/vendor/api-inspector/js/app.js
  function _r (line 1) | function _r(e){const t=Object.create(null);for(const s of e.split(","))t...
  function wr (line 1) | function wr(e){if(J(e)){const t={};for(let s=0;s<e.length;s++){const n=e...
  function cd (line 1) | function cd(e){const t={};return e.replace(ld,"").split(rd).forEach(s=>{...
  function kt (line 1) | function kt(e){let t="";if(It(e))t=e;else if(J(e))for(let s=0;s<e.length...
  function Ic (line 1) | function Ic(e){return!!e||e===""}
  function dd (line 1) | function dd(e,t){if(e.length!==t.length)return!1;let s=!0;for(let n=0;s&...
  function Bs (line 1) | function Bs(e,t){if(e===t)return!0;let s=ra(e),n=ra(t);if(s||n)return s&...
  function Sr (line 1) | function Sr(e,t){return e.findIndex(s=>Bs(s,t))}
  class fd (line 1) | class fd{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,th...
    method constructor (line 1) | constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effe...
    method active (line 1) | get active(){return this._active}
    method pause (line 1) | pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(...
    method resume (line 1) | resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,s;if...
    method run (line 1) | run(t){if(this._active){const s=le;try{return le=this,t()}finally{le=s}}}
    method on (line 1) | on(){++this._on===1&&(this.prevScope=le,le=this)}
    method off (line 1) | off(){this._on>0&&--this._on===0&&(le=this.prevScope,this.prevScope=vo...
    method stop (line 1) | stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effect...
  function pd (line 1) | function pd(){return le}
  class Nc (line 1) | class Nc{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,...
    method constructor (line 1) | constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.fl...
    method pause (line 1) | pause(){this.flags|=64}
    method resume (line 1) | resume(){this.flags&64&&(this.flags&=-65,_o.has(this)&&(_o.delete(this...
    method notify (line 1) | notify(){this.flags&2&&!(this.flags&32)||this.flags&8||$c(this)}
    method run (line 1) | run(){if(!(this.flags&1))return this.fn();this.flags|=2,la(this),Vc(th...
    method stop (line 1) | stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)Cr(t);this.d...
    method trigger (line 1) | trigger(){this.flags&64?_o.add(this):this.scheduler?this.scheduler():t...
    method runIfDirty (line 1) | runIfDirty(){Wo(this)&&this.run()}
    method dirty (line 1) | get dirty(){return Wo(this)}
  function $c (line 1) | function $c(e,t=!1){if(e.flags|=8,t){e.next=Pn,Pn=e;return}e.next=Cn,Cn=e}
  function kr (line 1) | function kr(){Bc++}
  function Mr (line 1) | function Mr(){if(--Bc>0)return;if(Pn){let t=Pn;for(Pn=void 0;t;){const s...
  function Vc (line 1) | function Vc(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveL...
  function jc (line 1) | function jc(e){let t,s=e.depsTail,n=s;for(;n;){const i=n.prevDep;n.versi...
  function Wo (line 1) | function Wo(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.versi...
  function Hc (line 1) | function Hc(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersio...
  function Cr (line 1) | function Cr(e,t=!1){const{dep:s,prevSub:n,nextSub:i}=e;if(n&&(n.nextSub=...
  function gd (line 1) | function gd(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=vo...
  function Ze (line 1) | function Ze(){zc.push(we),we=!1}
  function ts (line 1) | function ts(){const e=zc.pop();we=e===void 0?!0:e}
  function la (line 1) | function la(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=wt;wt=v...
  class md (line 1) | class md{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,t...
    method constructor (line 1) | constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nex...
  class Pr (line 1) | class Pr{constructor(t){this.computed=t,this.version=0,this.activeLink=v...
    method constructor (line 1) | constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,t...
    method track (line 1) | track(t){if(!wt||!we||wt===this.computed)return;let s=this.activeLink;...
    method trigger (line 1) | trigger(t){this.version++,Nn++,this.notify(t)}
    method notify (line 1) | notify(t){kr();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s...
  function Wc (line 1) | function Wc(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&...
  function zt (line 1) | function zt(e,t,s){if(we&&wt){let n=qo.get(e);n||qo.set(e,n=new Map);let...
  function qe (line 1) | function qe(e,t,s,n,i,o){const r=qo.get(e);if(!r){Nn++;return}const a=l=...
  function Hs (line 1) | function Hs(e){const t=pt(e);return t===e?t:(zt(t,"iterate",Bn),be(e)?t:...
  function Xi (line 1) | function Xi(e){return zt(e=pt(e),"iterate",Bn),e}
  function rs (line 1) | function rs(e,t){return es(e)?Is(e)?tn(ke(t)):tn(t):ke(t)}
  method [Symbol.iterator] (line 1) | [Symbol.iterator](){return yo(this,Symbol.iterator,e=>rs(this,e))}
  method concat (line 1) | concat(...e){return Hs(this).concat(...e.map(t=>J(t)?Hs(t):t))}
  method entries (line 1) | entries(){return yo(this,"entries",e=>(e[1]=rs(this,e[1]),e))}
  method every (line 1) | every(e,t){return Be(this,"every",e,t,void 0,arguments)}
  method filter (line 1) | filter(e,t){return Be(this,"filter",e,t,s=>s.map(n=>rs(this,n)),arguments)}
  method find (line 1) | find(e,t){return Be(this,"find",e,t,s=>rs(this,s),arguments)}
  method findIndex (line 1) | findIndex(e,t){return Be(this,"findIndex",e,t,void 0,arguments)}
  method findLast (line 1) | findLast(e,t){return Be(this,"findLast",e,t,s=>rs(this,s),arguments)}
  method findLastIndex (line 1) | findLastIndex(e,t){return Be(this,"findLastIndex",e,t,void 0,arguments)}
  method forEach (line 1) | forEach(e,t){return Be(this,"forEach",e,t,void 0,arguments)}
  method includes (line 1) | includes(...e){return xo(this,"includes",e)}
  method indexOf (line 1) | indexOf(...e){return xo(this,"indexOf",e)}
  method join (line 1) | join(e){return Hs(this).join(e)}
  method lastIndexOf (line 1) | lastIndexOf(...e){return xo(this,"lastIndexOf",e)}
  method map (line 1) | map(e,t){return Be(this,"map",e,t,void 0,arguments)}
  method pop (line 1) | pop(){return hn(this,"pop")}
  method push (line 1) | push(...e){return hn(this,"push",e)}
  method reduce (line 1) | reduce(e,...t){return ca(this,"reduce",e,t)}
  method reduceRight (line 1) | reduceRight(e,...t){return ca(this,"reduceRight",e,t)}
  method shift (line 1) | shift(){return hn(this,"shift")}
  method some (line 1) | some(e,t){return Be(this,"some",e,t,void 0,arguments)}
  method splice (line 1) | splice(...e){return hn(this,"splice",e)}
  method toReversed (line 1) | toReversed(){return Hs(this).toReversed()}
  method toSorted (line 1) | toSorted(e){return Hs(this).toSorted(e)}
  method toSpliced (line 1) | toSpliced(...e){return Hs(this).toSpliced(...e)}
  method unshift (line 1) | unshift(...e){return hn(this,"unshift",e)}
  method values (line 1) | values(){return yo(this,"values",e=>rs(this,e))}
  function yo (line 1) | function yo(e,t,s){const n=Xi(e),i=n[t]();return n!==e&&!be(e)&&(i._next...
  function Be (line 1) | function Be(e,t,s,n,i,o){const r=Xi(e),a=r!==e&&!be(e),l=r[t];if(l!==_d[...
  function ca (line 1) | function ca(e,t,s,n){const i=Xi(e);let o=s;return i!==e&&(be(e)?s.length...
  function xo (line 1) | function xo(e,t,s){const n=pt(e);zt(n,"iterate",Bn);const i=n[t](...s);r...
  function hn (line 1) | function hn(e,t,s=[]){Ze(),kr();const n=pt(e)[t].apply(e,s);return Mr(),...
  function xd (line 1) | function xd(e){Se(e)||(e=String(e));const t=pt(this);return zt(t,"has",e...
  class Uc (line 1) | class Uc{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get...
    method constructor (line 1) | constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}
    method get (line 1) | get(t,s,n){if(s==="__v_skip")return t.__v_skip;const i=this._isReadonl...
  class Kc (line 1) | class Kc extends Uc{constructor(t=!1){super(!1,t)}set(t,s,n,i){let o=t[s...
    method constructor (line 1) | constructor(t=!1){super(!1,t)}
    method set (line 1) | set(t,s,n,i){let o=t[s];const r=J(t)&&vr(s);if(!this._isShallow){const...
    method deleteProperty (line 1) | deleteProperty(t,s){const n=gt(t,s);t[s];const i=Reflect.deletePropert...
    method has (line 1) | has(t,s){const n=Reflect.has(t,s);return(!Se(s)||!qc.has(s))&&zt(t,"ha...
    method ownKeys (line 1) | ownKeys(t){return zt(t,"iterate",J(t)?"length":Ds),Reflect.ownKeys(t)}
  class vd (line 1) | class vd extends Uc{constructor(t=!1){super(!0,t)}set(t,s){return!0}dele...
    method constructor (line 1) | constructor(t=!1){super(!0,t)}
    method set (line 1) | set(t,s){return!0}
    method deleteProperty (line 1) | deleteProperty(t,s){return!0}
  function Md (line 1) | function Md(e,t,s){return function(...n){const i=this.__v_raw,o=pt(i),r=...
  function ni (line 1) | function ni(e){return function(...t){return e==="delete"?!1:e==="clear"?...
  function Cd (line 1) | function Cd(e,t){const s={get(i){const o=this.__v_raw,r=pt(o),a=pt(i);e|...
  function Ar (line 1) | function Ar(e,t){const s=Cd(e,t);return(n,i,o)=>i==="__v_isReactive"?!e:...
  function Td (line 1) | function Td(e){switch(e){case"Object":case"Array":return 1;case"Map":cas...
  function Ed (line 1) | function Ed(e){return e.__v_skip||!Object.isExtensible(e)?0:Td(nd(e))}
  function Zs (line 1) | function Zs(e){return es(e)?e:Rr(e,!1,wd,Pd,Gc)}
  function Jc (line 1) | function Jc(e){return Rr(e,!1,kd,Ad,Yc)}
  function Go (line 1) | function Go(e){return Rr(e,!0,Sd,Rd,Xc)}
  function Rr (line 1) | function Rr(e,t,s,n,i){if(!yt(e)||e.__v_raw&&!(t&&e.__v_isReactive))retu...
  function Is (line 1) | function Is(e){return es(e)?Is(e.__v_raw):!!(e&&e.__v_isReactive)}
  function es (line 1) | function es(e){return!!(e&&e.__v_isReadonly)}
  function be (line 1) | function be(e){return!!(e&&e.__v_isShallow)}
  function Or (line 1) | function Or(e){return e?!!e.__v_raw:!1}
  function pt (line 1) | function pt(e){const t=e&&e.__v_raw;return t?pt(t):e}
  function Dd (line 1) | function Dd(e){return!gt(e,"__v_skip")&&Object.isExtensible(e)&&Dc(e,"__...
  function Kt (line 1) | function Kt(e){return e?e.__v_isRef===!0:!1}
  function et (line 1) | function et(e){return Qc(e,!1)}
  function Id (line 1) | function Id(e){return Qc(e,!0)}
  function Qc (line 1) | function Qc(e,t){return Kt(e)?e:new Ld(e,t)}
  class Ld (line 1) | class Ld{constructor(t,s){this.dep=new Pr,this.__v_isRef=!0,this.__v_isS...
    method constructor (line 1) | constructor(t,s){this.dep=new Pr,this.__v_isRef=!0,this.__v_isShallow=...
    method value (line 1) | get value(){return this.dep.track(),this._value}
    method value (line 1) | set value(t){const s=this._rawValue,n=this.__v_isShallow||be(t)||es(t)...
  function _e (line 1) | function _e(e){return Kt(e)?e.value:e}
  function Zc (line 1) | function Zc(e){return Is(e)?e:new Proxy(e,Fd)}
  class Nd (line 1) | class Nd{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,t...
    method constructor (line 1) | constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep...
    method notify (line 1) | notify(){if(this.flags|=16,!(this.flags&8)&&wt!==this)return $c(this,!...
    method value (line 1) | get value(){const t=this.dep.track();return Hc(this),t&&(t.version=thi...
    method value (line 1) | set value(t){this.setter&&this.setter(t)}
  function Bd (line 1) | function Bd(e,t,s=!1){let n,i;return st(e)?n=e:(n=e.get,i=e.set),new Nd(...
  function $d (line 1) | function $d(e,t=!1,s=As){if(s){let n=Ri.get(s);n||Ri.set(s,n=[]),n.push(...
  function Vd (line 1) | function Vd(e,t,s=_t){const{immediate:n,deep:i,once:o,scheduler:r,augmen...
  function Ue (line 1) | function Ue(e,t=1/0,s){if(t<=0||!yt(e)||e.__v_skip||(s=s||new Map,(s.get...
  function Qn (line 1) | function Qn(e,t,s,n){try{return n?e(...n):e()}catch(i){Ji(i,t,s)}}
  function Ne (line 1) | function Ne(e,t,s,n){if(st(e)){const i=Qn(e,t,s,n);return i&&Oc(i)&&i.ca...
  function Ji (line 1) | function Ji(e,t,s,n=!0){const i=t?t.vnode:null,{errorHandler:o,throwUnha...
  function jd (line 1) | function jd(e,t,s,n=!0,i=!1){if(i)throw e;console.error(e)}
  function Qi (line 1) | function Qi(e){const t=Oi||tu;return e?t.then(this?e.bind(this):e):t}
  function Hd (line 1) | function Hd(e){let t=Te+1,s=ee.length;for(;t<s;){const n=t+s>>>1,i=ee[n]...
  function Tr (line 1) | function Tr(e){if(!(e.flags&1)){const t=$n(e),s=ee[ee.length-1];!s||!(e....
  function eu (line 1) | function eu(){Oi||(Oi=tu.then(nu))}
  function zd (line 1) | function zd(e){J(e)?Ys.push(...e):as&&e.id===-1?as.splice(qs+1,0,e):e.fl...
  function ua (line 1) | function ua(e,t,s=Te+1){for(;s<ee.length;s++){const n=ee[s];if(n&&n.flag...
  function su (line 1) | function su(e){if(Ys.length){const t=[...new Set(Ys)].sort((s,n)=>$n(s)-...
  function nu (line 1) | function nu(e){try{for(Te=0;Te<ee.length;Te++){const t=ee[Te];t&&!(t.fla...
  function Ti (line 1) | function Ti(e){const t=$t;return $t=e,iu=e&&e.type.__scopeId||null,t}
  function Er (line 1) | function Er(e,t=$t,s){if(!t||e._n)return e;const n=(...i)=>{n._d&&Ii(-1)...
  function se (line 1) | function se(e,t){if($t===null)return e;const s=no($t),n=e.dirs||(e.dirs=...
  function ws (line 1) | function ws(e,t,s,n){const i=e.dirs,o=t&&t.dirs;for(let r=0;r<i.length;r...
  function wi (line 1) | function wi(e,t){if(Wt){let s=Wt.provides;const n=Wt.parent&&Wt.parent.p...
  function Je (line 1) | function Je(e,t,s=!1){const n=Uf();if(n||Js){let i=Js?Js._context.provid...
  function Qe (line 1) | function Qe(e,t,s){return ou(e,t,s)}
  function ou (line 1) | function ou(e,t,s=_t){const{immediate:n,deep:i,flush:o,once:r}=s,a=Gt({}...
  function Ud (line 1) | function Ud(e,t,s){const n=this.proxy,i=It(e)?e.includes(".")?ru(n,e):()...
  function ru (line 1) | function ru(e,t){const s=t.split(".");return()=>{let n=e;for(let i=0;i<s...
  method process (line 1) | process(e,t,s,n,i,o,r,a,l,c){const{mc:u,pc:h,pbc:d,o:{insert:f,querySele...
  method remove (line 1) | remove(e,t,s,{um:n,o:{remove:i}},o){const{shapeFlag:r,children:a,anchor:...
  function oi (line 1) | function oi(e,t,s,{o:{insert:n},m:i},o=2){o===0&&n(e.targetAnchor,t,s);c...
  function Gd (line 1) | function Gd(e,t,s,n,i,o,{o:{nextSibling:r,parentNode:a,querySelector:l,i...
  function Si (line 1) | function Si(e,t){const s=e.ctx;if(s&&s.ut){let n,i;for(t?(n=e.el,i=e.anc...
  function cu (line 1) | function cu(e,t,s,n){const i=t.targetStart=s(""),o=t.targetAnchor=s("");...
  function Dr (line 1) | function Dr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Dr(e.compone...
  function uu (line 1) | function uu(e,t){return st(e)?Gt({name:e.name},t,{setup:e}):e}
  function hu (line 1) | function hu(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}
  function Rn (line 1) | function Rn(e,t,s,n,i=!1){if(J(e)){e.forEach((p,g)=>Rn(p,t&&(J(t)?t[g]:t...
  function pa (line 1) | function pa(e){const t=Ei.get(e);t&&(t.flags|=8,Ei.delete(e))}
  function Jd (line 1) | function Jd(e,t){fu(e,"a",t)}
  function Qd (line 1) | function Qd(e,t){fu(e,"da",t)}
  function fu (line 1) | function fu(e,t,s=Wt){const n=e.__wdc||(e.__wdc=()=>{let i=s;for(;i;){if...
  function Zd (line 1) | function Zd(e,t,s,n){const i=Zi(t,e,n,!0);pu(()=>{xr(n[t],i)},s)}
  function Zi (line 1) | function Zi(e,t,s=Wt,n=!1){if(s){const i=s[e]||(s[e]=[]),o=t.__weh||(t._...
  function lf (line 1) | function lf(e,t=Wt){Zi("ec",e,t)}
  function Xo (line 1) | function Xo(e,t){return hf(cf,e,!0,t)||e}
  function hf (line 1) | function hf(e,t,s=!0,n=!1){const i=$t||Wt;if(i){const o=i.type;{const a=...
  function ga (line 1) | function ga(e,t){return e&&(e[t]||e[xe(t)]||e[Ki(xe(t))])}
  function Vt (line 1) | function Vt(e,t,s,n){let i;const o=s,r=J(e);if(r||It(e)){const a=r&&Is(e...
  function df (line 1) | function df(e,t,s={},n,i){if($t.ce||$t.parent&&Xs($t.parent)&&$t.parent....
  function gu (line 1) | function gu(e){return e.some(t=>jn(t)?!(t.type===ss||t.type===ut&&!gu(t....
  method get (line 1) | get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:i,...
  method set (line 1) | set({_:e},t,s){const{data:n,setupState:i,ctx:o}=e;return vo(i,t)?(i[t]=s...
  method has (line 1) | has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:i,props:o,typ...
  method defineProperty (line 1) | defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:gt(s,"valu...
  function ma (line 1) | function ma(e){return J(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}
  function pf (line 1) | function pf(e){const t=bu(e),s=e.proxy,n=e.ctx;Qo=!1,t.beforeCreate&&ba(...
  function gf (line 1) | function gf(e,t,s=Le){J(e)&&(e=Zo(e));for(const n in e){const i=e[n];let...
  function ba (line 1) | function ba(e,t,s){Ne(J(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}
  function mu (line 1) | function mu(e,t,s,n){let i=n.includes(".")?ru(s,n):()=>s[n];if(It(e)){co...
  function bu (line 1) | function bu(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:i,optionsCa...
  function Di (line 1) | function Di(e,t,s,n=!1){const{mixins:i,extends:o}=t;o&&Di(e,o,s,!0),i&&i...
  function _a (line 1) | function _a(e,t){return t?e?function(){return Gt(st(e)?e.call(this,this)...
  function bf (line 1) | function bf(e,t){return xn(Zo(e),Zo(t))}
  function Zo (line 1) | function Zo(e){if(J(e)){const t={};for(let s=0;s<e.length;s++)t[e[s]]=e[...
  function Qt (line 1) | function Qt(e,t){return e?[...new Set([].concat(e,t))]:t}
  function xn (line 1) | function xn(e,t){return e?Gt(Object.create(null),e,t):t}
  function ya (line 1) | function ya(e,t){return e?J(e)&&J(t)?[...new Set([...e,...t])]:Gt(Object...
  function _f (line 1) | function _f(e,t){if(!e)return t;if(!t)return e;const s=Gt(Object.create(...
  function _u (line 1) | function _u(){return{app:null,config:{isNativeTag:Rc,performance:!1,glob...
  function xf (line 1) | function xf(e,t){return function(n,i=null){st(n)||(n=Gt({},n)),i!=null&&...
  function wf (line 1) | function wf(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||_t;...
  function yu (line 1) | function yu(e,t,s=!1){const n=s?Sf:t.emitsCache,i=n.get(e);if(i!==void 0...
  function eo (line 1) | function eo(e,t){return!e||!qi(t)?!1:(t=t.slice(2).replace(/Once$/,""),g...
  function xa (line 1) | function xa(e){const{type:t,vnode:s,proxy:n,withProxy:i,propsOptions:[o]...
  function Cf (line 1) | function Cf(e,t,s){const{props:n,children:i,component:o}=e,{props:r,chil...
  function va (line 1) | function va(e,t,s){const n=Object.keys(t);if(n.length!==Object.keys(e).l...
  function Pf (line 1) | function Pf({vnode:e,parent:t},s){for(;t;){const n=t.subTree;if(n.suspen...
  function Af (line 1) | function Af(e,t,s,n=!1){const i={},o=vu();e.propsDefaults=Object.create(...
  function Rf (line 1) | function Rf(e,t,s,n){const{props:i,attrs:o,vnode:{patchFlag:r}}=e,a=pt(i...
  function Su (line 1) | function Su(e,t,s,n){const[i,o]=e.propsOptions;let r=!1,a;if(t)for(let l...
  function tr (line 1) | function tr(e,t,s,n,i,o){const r=e[s];if(r!=null){const a=gt(r,"default"...
  function ku (line 1) | function ku(e,t,s=!1){const n=s?Of:t.propsCache,i=n.get(e);if(i)return i...
  function wa (line 1) | function wa(e){return e[0]!=="$"&&!Mn(e)}
  function If (line 1) | function If(e){return Lf(e)}
  function Lf (line 1) | function Lf(e,t){const s=Yi();s.__VUE__=!0;const{insert:n,remove:i,patch...
  function wo (line 1) | function wo({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s...
  function Ss (line 1) | function Ss({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33...
  function Ff (line 1) | function Ff(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}
  function Fr (line 1) | function Fr(e,t,s=!1){const n=e.children,i=t.children;if(J(n)&&J(i))for(...
  function Nf (line 1) | function Nf(e){const t=e.slice(),s=[0];let n,i,o,r,a;const l=e.length;fo...
  function Au (line 1) | function Au(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.as...
  function Sa (line 1) | function Sa(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}
  function Ru (line 1) | function Ru(e){if(e.placeholder)return e.placeholder;const t=e.component...
  function Bf (line 1) | function Bf(e,t){t&&t.pendingBranch?J(e)?t.effects.push(...e):t.effects....
  function L (line 1) | function L(e=!1){Tn.push(fe=e?null:[])}
  function $f (line 1) | function $f(){Tn.pop(),fe=Tn[Tn.length-1]||null}
  function Ii (line 1) | function Ii(e,t=!1){Vn+=e,e<0&&fe&&t&&(fe.hasOnce=!0)}
  function Tu (line 1) | function Tu(e){return e.dynamicChildren=Vn>0?fe||Ks:null,$f(),Vn>0&&fe&&...
  function N (line 1) | function N(e,t,s,n,i,o){return Tu(m(e,t,s,n,i,o,!0))}
  function Ie (line 1) | function Ie(e,t,s,n,i){return Tu(Pt(e,t,s,n,i,!0))}
  function jn (line 1) | function jn(e){return e?e.__v_isVNode===!0:!1}
  function dn (line 1) | function dn(e,t){return e.type===t.type&&e.key===t.key}
  function m (line 1) | function m(e,t=null,s=null,n=0,i=null,o=e===ut?0:1,r=!1,a=!1){const l={_...
  function Vf (line 1) | function Vf(e,t=null,s=null,n=0,i=null,o=!1){if((!e||e===uf)&&(e=ss),jn(...
  function jf (line 1) | function jf(e){return e?Or(e)||wu(e)?Gt({},e):e:null}
  function en (line 1) | function en(e,t,s=!1,n=!1){const{props:i,ref:o,patchFlag:r,children:a,tr...
  function me (line 1) | function me(e=" ",t=0){return Pt(so,null,e,t)}
  function dt (line 1) | function dt(e="",t=!1){return t?(L(),Ie(ss,null,e)):Pt(ss,null,e)}
  function De (line 1) | function De(e){return e==null||typeof e=="boolean"?Pt(ss):J(e)?Pt(ut,nul...
  function ls (line 1) | function ls(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:en(e)}
  function Nr (line 1) | function Nr(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(...
  function Hf (line 1) | function Hf(...e){const t={};for(let s=0;s<e.length;s++){const n=e[s];fo...
  function Re (line 1) | function Re(e,t,s,n=null){Ne(e,t,7,[s,n])}
  function qf (line 1) | function qf(e,t,s){const n=e.type,i=(t?t.appContext:e.appContext)||zf,o=...
  function Du (line 1) | function Du(e){return e.vnode.shapeFlag&4}
  function Kf (line 1) | function Kf(e,t=!1,s=!1){t&&er(t);const{props:n,children:i}=e.vnode,o=Du...
  function Gf (line 1) | function Gf(e,t){const s=e.type;e.accessCache=Object.create(null),e.prox...
  function Ma (line 1) | function Ma(e,t,s){st(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render...
  function Iu (line 1) | function Iu(e,t,s){const n=e.type;e.render||(e.render=n.render||Le);{con...
  method get (line 1) | get(e,t){return zt(e,"get",""),e[t]}
  function Xf (line 1) | function Xf(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.att...
  function no (line 1) | function no(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(...
  function Jf (line 1) | function Jf(e,t=!0){return st(e)?e.displayName||e.name:e.name||t&&e.__name}
  function Qf (line 1) | function Qf(e){return st(e)&&"__vccOpts"in e}
  function Lu (line 1) | function Lu(e,t,s){try{Ii(-1);const n=arguments.length;return n===2?yt(t...
  method setScopeId (line 1) | setScopeId(e,t){e.setAttribute(t,"")}
  method insertStaticContent (line 1) | insertStaticContent(e,t,s,n,i,o){const r=s?s.previousSibling:t.lastChild...
  function ip (line 1) | function ip(e,t,s){const n=e[np];n&&(t=(t?[t,...n]:[...n]).join(" ")),t=...
  method beforeMount (line 1) | beforeMount(e,{value:t},{transition:s}){e[Fi]=e.style.display==="none"?"...
  method mounted (line 1) | mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)}
  method updated (line 1) | updated(e,{value:t,oldValue:s},{transition:n}){!t!=!s&&(n?t?(n.beforeEnt...
  method beforeUnmount (line 1) | beforeUnmount(e,{value:t}){fn(e,t)}
  function fn (line 1) | function fn(e,t){e.style.display=t?e[Fi]:"none",e[Nu]=!t}
  function ap (line 1) | function ap(e,t,s){const n=e.style,i=It(s);let o=!1;if(s&&!i){if(t)if(It...
  function Mi (line 1) | function Mi(e,t,s){if(J(s))s.forEach(n=>Mi(e,t,n));else if(s==null&&(s="...
  function lp (line 1) | function lp(e,t){const s=ko[t];if(s)return s;let n=xe(t);if(n!=="filter"...
  function Ta (line 1) | function Ta(e,t,s,n,i,o=hd(t)){n&&t.startsWith("xlink:")?s==null?e.remov...
  function Ea (line 1) | function Ea(e,t,s,n,i){if(t==="innerHTML"||t==="textContent"){s!=null&&(...
  function Ke (line 1) | function Ke(e,t,s,n){e.addEventListener(t,s,n)}
  function cp (line 1) | function cp(e,t,s,n){e.removeEventListener(t,s,n)}
  function up (line 1) | function up(e,t,s,n,i=null){const o=e[Da]||(e[Da]={}),r=o[t];if(n&&r)r.v...
  function hp (line 1) | function hp(e){let t;if(Ia.test(e)){t={};let n;for(;n=e.match(Ia);)e=e.s...
  function pp (line 1) | function pp(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts...
  function gp (line 1) | function gp(e,t){if(J(t)){const s=e.stopImmediatePropagation;return e.st...
  function bp (line 1) | function bp(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t...
  function _p (line 1) | function _p(e){e.target.composing=!0}
  function Fa (line 1) | function Fa(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchE...
  function Na (line 1) | function Na(e,t,s){return t&&(e=e.trim()),s&&(e=Gi(e)),e}
  method created (line 1) | created(e,{modifiers:{lazy:t,trim:s,number:n}},i){e[ye]=ms(i);const o=n|...
  method mounted (line 1) | mounted(e,{value:t}){e.value=t??""}
  method beforeUpdate (line 1) | beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:i,number:o}},r...
  method created (line 1) | created(e,t,s){e[ye]=ms(s),Ke(e,"change",()=>{const n=e._modelValue,i=sn...
  method beforeUpdate (line 1) | beforeUpdate(e,t,s){e[ye]=ms(s),Ba(e,t,s)}
  function Ba (line 1) | function Ba(e,{value:t,oldValue:s},n){e._modelValue=t;let i;if(J(t))i=Sr...
  method created (line 1) | created(e,{value:t},s){e.checked=Bs(t,s.props.value),e[ye]=ms(s),Ke(e,"c...
  method beforeUpdate (line 1) | beforeUpdate(e,{value:t,oldValue:s},n){e[ye]=ms(n),t!==s&&(e.checked=Bs(...
  method created (line 1) | created(e,{value:t,modifiers:{number:s}},n){const i=cn(t);Ke(e,"change",...
  method mounted (line 1) | mounted(e,{value:t}){$a(e,t)}
  method beforeUpdate (line 1) | beforeUpdate(e,t,s){e[ye]=ms(s)}
  method updated (line 1) | updated(e,{value:t}){e._assigning||$a(e,t)}
  function $a (line 1) | function $a(e,t){const s=e.multiple,n=J(t);if(!(s&&!n&&!cn(t))){for(let ...
  function sn (line 1) | function sn(e){return"_value"in e?e._value:e.value}
  function Vu (line 1) | function Vu(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}
  method created (line 1) | created(e,t,s){ri(e,t,s,null,"created")}
  method mounted (line 1) | mounted(e,t,s){ri(e,t,s,null,"mounted")}
  method beforeUpdate (line 1) | beforeUpdate(e,t,s,n){ri(e,t,s,n,"beforeUpdate")}
  method updated (line 1) | updated(e,t,s,n){ri(e,t,s,n,"updated")}
  function vp (line 1) | function vp(e,t){switch(e){case"SELECT":return $u;case"TEXTAREA":return ...
  function ri (line 1) | function ri(e,t,s,n,i){const r=vp(e.tagName,s.props&&s.props.type)[i];r&...
  function Pp (line 1) | function Pp(){return Va||(Va=If(Cp))}
  function Rp (line 1) | function Rp(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLEl...
  function Op (line 1) | function Op(e){return It(e)?document.querySelector(e):e}
  function Ep (line 1) | function Ep(e,t){const s=Xo("Toast"),n=Xo("router-view");return L(),N(ut...
  function Hu (line 1) | function Hu(){return ja.value=[{id:"home",label:"Home",icon:"🏠",href:Ha....
  method setup (line 1) | setup(e,{emit:t}){const s=e,n=t,i=et(null),o=et(!1),r=et(""),a=et("beare...
  method setup (line 1) | setup(e){const t=e,s=et(""),n=o=>t.selectedRoute?t.selectedRoute.http_me...
  method setup (line 1) | setup(e){return(t,s)=>(L(),N("div",mg,[m("div",bg,[m("span",_g,H(e.route...
  method setup (line 1) | setup(e){const t=et(!0);return(s,n)=>e.parameters&&Object.keys(e.paramet...
  method setup (line 1) | setup(e){return(t,s)=>e.requestRules&&Object.keys(e.requestRules).length...
  function io (line 1) | function io(){const e=(s,n="success",i=3e3)=>{const o=jg++,r={id:o,messa...
  function Hg (line 1) | function Hg(){const{showToast:e}=io(),t=n=>{const i=document.createEleme...
  method setup (line 1) | setup(e,{emit:t}){const{copyToClipboard:s}=Hg(),n=e,i=t,o=et(!0),r=et({}...
  method setup (line 1) | setup(e){const{showToast:t}=useToast(),s=e;et(!1),et("Copy schema to cli...
  method setup (line 1) | setup(e){const t=n=>({200:"OK",201:"Created",204:"No Content",400:"Bad R...
  method setup (line 1) | setup(e,{emit:t}){const s=e,n=t,{showToast:i}=io(),o=async r=>{if(s.rout...
  method setup (line 1) | setup(e){return(t,s)=>(L(),N("div",Vm,[m("div",jm,[(L(!0),N(ut,null,Vt(e...
  method setup (line 1) | setup(e){const{showToast:t}=useToast(),s=e,n=et(!1),i=et({statusCodes:!1...
  method setup (line 11) | setup(e){const t=e,s=et(0);return Qe(()=>t.lastResponse,n=>{n&&(s.value=...
  method setup (line 11) | setup(e){const t=et(!0),s=et(!1),n=et({routes:[],...window.ApiInspector}...
  function ti (line 11) | function ti(e){return e+.5|0}
  function vn (line 11) | function vn(e){return us(ti(e*2.55),0,255)}
  function gs (line 11) | function gs(e){return us(ti(e*255),0,255)}
  function We (line 11) | function We(e){return us(ti(e/2.55)/100,0,1)}
  function Wa (line 11) | function Wa(e){return us(ti(e*100),0,100)}
  function jb (line 11) | function jb(e){var t=e.length,s;return e[0]==="#"&&(t===4||t===5?s={r:25...
  function zb (line 11) | function zb(e){var t=Vb(e)?Bb:$b;return e?"#"+t(e.r)+t(e.g)+t(e.b)+Hb(e....
  function Wu (line 11) | function Wu(e,t,s){const n=t*Math.min(s,1-s),i=(o,r=(o+e/30)%12)=>s-n*Ma...
  function qb (line 11) | function qb(e,t,s){const n=(i,o=(i+e/60)%6)=>s-s*t*Math.max(Math.min(o,4...
  function Ub (line 11) | function Ub(e,t,s){const n=Wu(e,1,.5);let i;for(t+s>1&&(i=1/(t+s),t*=i,s...
  function Kb (line 11) | function Kb(e,t,s,n,i){return e===i?(t-s)/n+(t<s?6:0):t===i?(s-e)/n+2:(e...
  function Br (line 11) | function Br(e){const s=e.r/255,n=e.g/255,i=e.b/255,o=Math.max(s,n,i),r=M...
  function $r (line 11) | function $r(e,t,s,n){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,s,n))...
  function Vr (line 11) | function Vr(e,t,s){return $r(Wu,e,t,s)}
  function Gb (line 11) | function Gb(e,t,s){return $r(Ub,e,t,s)}
  function Yb (line 11) | function Yb(e,t,s){return $r(qb,e,t,s)}
  function qu (line 11) | function qu(e){return(e%360+360)%360}
  function Xb (line 11) | function Xb(e){const t=Wb.exec(e);let s=255,n;if(!t)return;t[5]!==n&&(s=...
  function Jb (line 11) | function Jb(e,t){var s=Br(e);s[0]=qu(s[0]+t),s=Vr(s),e.r=s[0],e.g=s[1],e...
  function Qb (line 11) | function Qb(e){if(!e)return;const t=Br(e),s=t[0],n=Wa(t[1]),i=Wa(t[2]);r...
  function Zb (line 11) | function Zb(){const e={},t=Object.keys(Ua),s=Object.keys(qa);let n,i,o,r...
  function t_ (line 11) | function t_(e){ci||(ci=Zb(),ci.transparent=[0,0,0,0]);const t=ci[e.toLow...
  function s_ (line 11) | function s_(e){const t=e_.exec(e);let s=255,n,i,o;if(t){if(t[7]!==n){con...
  function n_ (line 11) | function n_(e){return e&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${We(e.a...
  function i_ (line 11) | function i_(e,t,s){const n=zs(We(e.r)),i=zs(We(e.g)),o=zs(We(e.b));retur...
  function ui (line 11) | function ui(e,t,s){if(e){let n=Br(e);n[t]=Math.max(0,Math.min(n[t]+n[t]*...
  function Uu (line 11) | function Uu(e,t){return e&&Object.assign(t||{},e)}
  function Ka (line 11) | function Ka(e){var t={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.lengt...
  function o_ (line 11) | function o_(e){return e.charAt(0)==="r"?s_(e):Xb(e)}
  class zn (line 11) | class zn{constructor(t){if(t instanceof zn)return t;const s=typeof t;let...
    method constructor (line 11) | constructor(t){if(t instanceof zn)return t;const s=typeof t;let n;s===...
    method valid (line 11) | get valid(){return this._valid}
    method rgb (line 11) | get rgb(){var t=Uu(this._rgb);return t&&(t.a=We(t.a)),t}
    method rgb (line 11) | set rgb(t){this._rgb=Ka(t)}
    method rgbString (line 11) | rgbString(){return this._valid?n_(this._rgb):void 0}
    method hexString (line 11) | hexString(){return this._valid?zb(this._rgb):void 0}
    method hslString (line 11) | hslString(){return this._valid?Qb(this._rgb):void 0}
    method mix (line 11) | mix(t,s){if(t){const n=this.rgb,i=t.rgb;let o;const r=s===o?.5:s,a=2*r...
    method interpolate (line 11) | interpolate(t,s){return t&&(this._rgb=i_(this._rgb,t._rgb,s)),this}
    method clone (line 11) | clone(){return new zn(this.rgb)}
    method alpha (line 11) | alpha(t){return this._rgb.a=gs(t),this}
    method clearer (line 11) | clearer(t){const s=this._rgb;return s.a*=1-t,this}
    method greyscale (line 11) | greyscale(){const t=this._rgb,s=ti(t.r*.3+t.g*.59+t.b*.11);return t.r=...
    method opaquer (line 11) | opaquer(t){const s=this._rgb;return s.a*=1+t,this}
    method negate (line 11) | negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,...
    method lighten (line 11) | lighten(t){return ui(this._rgb,2,t),this}
    method darken (line 11) | darken(t){return ui(this._rgb,2,-t),this}
    method saturate (line 11) | saturate(t){return ui(this._rgb,1,t),this}
    method desaturate (line 11) | desaturate(t){return ui(this._rgb,1,-t),this}
    method rotate (line 11) | rotate(t){return Jb(this._rgb,t),this}
  function $e (line 11) | function $e(){}
  function it (line 11) | function it(e){return e==null}
  function At (line 11) | function At(e){if(Array.isArray&&Array.isArray(e))return!0;const t=Objec...
  function ot (line 11) | function ot(e){return e!==null&&Object.prototype.toString.call(e)==="[ob...
  function Tt (line 11) | function Tt(e){return(typeof e=="number"||e instanceof Number)&&isFinite...
  function de (line 11) | function de(e,t){return Tt(e)?e:t}
  function Z (line 11) | function Z(e,t){return typeof e>"u"?t:e}
  function St (line 11) | function St(e,t,s){if(e&&typeof e.call=="function")return e.apply(s,t)}
  function bt (line 11) | function bt(e,t,s,n){let i,o,r;if(At(e))for(o=e.length,i=0;i<o;i++)t.cal...
  function Ni (line 11) | function Ni(e,t){let s,n,i,o;if(!e||!t||e.length!==t.length)return!1;for...
  function Bi (line 11) | function Bi(e){if(At(e))return e.map(Bi);if(ot(e)){const t=Object.create...
  function Gu (line 11) | function Gu(e){return["__proto__","prototype","constructor"].indexOf(e)=...
  function l_ (line 11) | function l_(e,t,s,n){if(!Gu(e))return;const i=t[e],o=s[e];ot(i)&&ot(o)?W...
  function Wn (line 11) | function Wn(e,t,s){const n=At(t)?t:[t],i=n.length;if(!ot(e))return e;s=s...
  function En (line 11) | function En(e,t){return Wn(e,t,{merger:c_})}
  function c_ (line 11) | function c_(e,t,s){if(!Gu(e))return;const n=t[e],i=s[e];ot(n)&&ot(i)?En(...
  function u_ (line 11) | function u_(e){const t=e.split("."),s=[];let n="";for(const i of t)n+=i,...
  function h_ (line 11) | function h_(e){const t=u_(e);return s=>{for(const n of t){if(n==="")brea...
  function bs (line 11) | function bs(e,t){return(Ga[t]||(Ga[t]=h_(t)))(e)}
  function jr (line 11) | function jr(e){return e.charAt(0).toUpperCase()+e.slice(1)}
  function d_ (line 11) | function d_(e){return e.type==="mouseup"||e.type==="click"||e.type==="co...
  function Dn (line 11) | function Dn(e,t,s){return Math.abs(e-t)<s}
  function Ja (line 11) | function Ja(e){const t=Math.round(e);e=Dn(e,t,e/1e3)?t:e;const s=Math.po...
  function g_ (line 11) | function g_(e){const t=[],s=Math.sqrt(e);let n;for(n=1;n<s;n++)e%n===0&&...
  function m_ (line 11) | function m_(e){return typeof e=="symbol"||typeof e=="object"&&e!==null&&...
  function nn (line 11) | function nn(e){return!m_(e)&&!isNaN(parseFloat(e))&&isFinite(e)}
  function b_ (line 11) | function b_(e,t){const s=Math.round(e);return s-t<=e&&s+t>=e}
  function Yu (line 11) | function Yu(e,t,s){let n,i,o;for(n=0,i=e.length;n<i;n++)o=e[n][s],isNaN(...
  function ve (line 11) | function ve(e){return e*(ht/180)}
  function Hr (line 11) | function Hr(e){return e*(180/ht)}
  function Qa (line 11) | function Qa(e){if(!Tt(e))return;let t=1,s=0;for(;Math.round(e*t)/t!==e;)...
  function Xu (line 11) | function Xu(e,t){const s=t.x-e.x,n=t.y-e.y,i=Math.sqrt(s*s+n*n);let o=Ma...
  function ir (line 11) | function ir(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}
  function __ (line 11) | function __(e,t){return(e-t+f_)%Mt-ht}
  function Ht (line 11) | function Ht(e){return(e%Mt+Mt)%Mt}
  function Un (line 11) | function Un(e,t,s,n){const i=Ht(e),o=Ht(t),r=Ht(s),a=Ht(o-i),l=Ht(r-i),c...
  function Bt (line 11) | function Bt(e,t,s){return Math.max(t,Math.min(s,e))}
  function y_ (line 11) | function y_(e){return Bt(e,-32768,32767)}
  function Ge (line 11) | function Ge(e,t,s,n=1e-6){return e>=Math.min(t,s)-n&&e<=Math.max(t,s)+n}
  function zr (line 11) | function zr(e,t,s){s=s||(r=>e[r]<t);let n=e.length-1,i=0,o;for(;n-i>1;)o...
  function v_ (line 11) | function v_(e,t,s){let n=0,i=e.length;for(;n<i&&e[n]<t;)n++;for(;i>n&&e[...
  function w_ (line 11) | function w_(e,t){if(e._chartjs){e._chartjs.listeners.push(t);return}Obje...
  function Za (line 11) | function Za(e,t){const s=e._chartjs;if(!s)return;const n=s.listeners,i=n...
  function Qu (line 11) | function Qu(e){const t=new Set(e);return t.size===e.length?e:Array.from(t)}
  function th (line 11) | function th(e,t){let s=[],n=!1;return function(...i){s=i,n||(n=!0,Zu.cal...
  function S_ (line 11) | function S_(e,t){let s;return function(...n){return t?(clearTimeout(s),s...
  function eh (line 11) | function eh(e,t,s){const n=t.length;let i=0,o=n;if(e._sorted){const{iSca...
  function sh (line 11) | function sh(e){const{xScale:t,yScale:s,_scaleRanges:n}=e,i={xmin:t.min,x...
  method easeInOutElastic (line 11) | easeInOutElastic(e){return hi(e)?e:e<.5?.5*tl(e*2,.1125,.45):.5+.5*el(e*...
  method easeInBack (line 11) | easeInBack(e){return e*e*((1.70158+1)*e-1.70158)}
  method easeOutBack (line 11) | easeOutBack(e){return(e-=1)*e*((1.70158+1)*e+1.70158)+1}
  method easeInOutBack (line 11) | easeInOutBack(e){let t=1.70158;return(e/=.5)<1?.5*(e*e*(((t*=1.525)+1)*e...
  method easeOutBounce (line 11) | easeOutBounce(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75...
  function qr (line 11) | function qr(e){if(e&&typeof e=="object"){const t=e.toString();return t==...
  function sl (line 11) | function sl(e){return qr(e)?e:new zn(e)}
  function Po (line 11) | function Po(e){return qr(e)?e:new zn(e).saturate(.5).darken(.1).hexStrin...
  function P_ (line 11) | function P_(e){e.set("animation",{delay:void 0,duration:1e3,easing:"ease...
  function A_ (line 11) | function A_(e){e.set("layout",{autoPadding:!0,padding:{top:0,right:0,bot...
  function R_ (line 11) | function R_(e,t){t=t||{};const s=e+JSON.stringify(t);let n=nl.get(s);ret...
  function ei (line 11) | function ei(e,t,s){return R_(t,s).format(e)}
  method values (line 11) | values(e){return At(e)?e:""+e}
  method numeric (line 11) | numeric(e,t,s){if(e===0)return"0";const n=this.chart.options.locale;let ...
  method logarithmic (line 11) | logarithmic(e,t,s){if(e===0)return"0";const n=s[t].significand||e/Math.p...
  function O_ (line 11) | function O_(e,t){let s=t.length>3?t[2].value-t[1].value:t[1].value-t[0]....
  function T_ (line 11) | function T_(e){e.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZer...
  function Ln (line 11) | function Ln(e,t){if(!t)return e;const s=t.split(".");for(let n=0,i=s.len...
  function Ao (line 11) | function Ao(e,t,s){return typeof t=="string"?Wn(Ln(e,t),s):Wn(Ln(e,""),t)}
  class E_ (line 11) | class E_{constructor(t,s){this.animation=void 0,this.backgroundColor="rg...
    method constructor (line 11) | constructor(t,s){this.animation=void 0,this.backgroundColor="rgba(0,0,...
    method set (line 11) | set(t,s){return Ao(this,t,s)}
    method get (line 11) | get(t){return Ln(this,t)}
    method describe (line 11) | describe(t,s){return Ao(or,t,s)}
    method override (line 11) | override(t,s){return Ao($s,t,s)}
    method route (line 11) | route(t,s,n,i){const o=Ln(this,t),r=Ln(this,n),a="_"+s;Object.definePr...
    method apply (line 11) | apply(t){t.forEach(s=>s(this))}
  function D_ (line 11) | function D_(e){return!e||it(e.size)||it(e.family)?null:(e.style?e.style+...
  function Vi (line 11) | function Vi(e,t,s,n,i){let o=t[i];return o||(o=t[i]=e.measureText(i).wid...
  function I_ (line 11) | function I_(e,t,s,n){n=n||{};let i=n.data=n.data||{},o=n.garbageCollect=...
  function Ms (line 11) | function Ms(e,t,s){const n=e.currentDevicePixelRatio,i=s!==0?Math.max(s/...
  function il (line 11) | function il(e,t){!t&&!e||(t=t||e.getContext("2d"),t.save(),t.resetTransf...
  function rr (line 11) | function rr(e,t,s,n){ih(e,t,s,n,null)}
  function ih (line 11) | function ih(e,t,s,n,i){let o,r,a,l,c,u,h,d;const f=t.pointStyle,p=t.rota...
  function Xe (line 11) | function Xe(e,t,s){return s=s||.5,!t||e&&e.x>t.left-s&&e.x<t.right+s&&e....
  function ro (line 11) | function ro(e,t){e.save(),e.beginPath(),e.rect(t.left,t.top,t.right-t.le...
  function ao (line 11) | function ao(e){e.restore()}
  function L_ (line 11) | function L_(e,t,s,n,i){if(!t)return e.lineTo(s.x,s.y);if(i==="middle"){c...
  function F_ (line 11) | function F_(e,t,s,n){if(!t)return e.lineTo(s.x,s.y);e.bezierCurveTo(n?t....
  function N_ (line 11) | function N_(e,t){t.translation&&e.translate(t.translation[0],t.translati...
  function B_ (line 11) | function B_(e,t,s,n,i){if(i.strikethrough||i.underline){const o=e.measur...
  function $_ (line 11) | function $_(e,t){const s=e.fillStyle;e.fillStyle=t.color,e.fillRect(t.le...
  function Vs (line 11) | function Vs(e,t,s,n,i,o={}){const r=At(t)?t:[t],a=o.strokeWidth>0&&o.str...
  function Kn (line 11) | function Kn(e,t){const{x:s,y:n,w:i,h:o,radius:r}=t;e.arc(s+r.topLeft,n+r...
  function H_ (line 11) | function H_(e,t){const s=(""+e).match(V_);if(!s||s[1]==="normal")return ...
  function Ur (line 11) | function Ur(e,t){const s={},n=ot(t),i=n?Object.keys(t):t,o=ot(e)?n?r=>Z(...
  function oh (line 11) | function oh(e){return Ur(e,{top:"y",right:"x",bottom:"y",left:"x"})}
  function Fs (line 11) | function Fs(e){return Ur(e,["topLeft","topRight","bottomLeft","bottomRig...
  function Yt (line 11) | function Yt(e){const t=oh(e);return t.width=t.left+t.right,t.height=t.to...
  function Nt (line 11) | function Nt(e,t){e=e||{},t=t||Rt.font;let s=Z(e.size,t.size);typeof s=="...
  function wn (line 11) | function wn(e,t,s,n){let i,o,r;for(i=0,o=e.length;i<o;++i)if(r=e[i],r!==...
  function W_ (line 11) | function W_(e,t,s){const{min:n,max:i}=e,o=Ku(t,(i-n)/2),r=(a,l)=>s&&a===...
  function xs (line 11) | function xs(e,t){return Object.assign(Object.create(e),t)}
  function Kr (line 11) | function Kr(e,t=[""],s,n,i=()=>e[0]){const o=s||e;typeof n>"u"&&(n=ch("_...
  function on (line 11) | function on(e,t,s,n){const i={_cacheable:!1,_proxy:e,_context:t,_subProx...
  function rh (line 11) | function rh(e,t={scriptable:!0,indexable:!0}){const{_scriptable:s=t.scri...
  function ah (line 11) | function ah(e,t,s){if(Object.prototype.hasOwnProperty.call(e,t)||t==="co...
  function U_ (line 11) | function U_(e,t,s){const{_proxy:n,_context:i,_subProxy:o,_descriptors:r}...
  function K_ (line 11) | function K_(e,t,s,n){const{_proxy:i,_context:o,_subProxy:r,_stack:a}=s;i...
  function G_ (line 11) | function G_(e,t,s,n){const{_proxy:i,_context:o,_subProxy:r,_descriptors:...
  function lh (line 11) | function lh(e,t,s){return _s(e)?e(t,s):e}
  function X_ (line 11) | function X_(e,t,s,n,i){for(const o of t){const r=Y_(s,o);if(r){e.add(r);...
  function Yr (line 11) | function Yr(e,t,s,n){const i=t._rootScopes,o=lh(t._fallback,s,n),r=[...e...
  function ol (line 11) | function ol(e,t,s,n,i){for(;s;)s=X_(e,t,s,n,i);return s}
  function J_ (line 11) | function J_(e,t,s){const n=e._getTarget();t in n||(n[t]={});const i=n[t]...
  function Q_ (line 11) | function Q_(e,t,s,n){let i;for(const o of t)if(i=ch(q_(o,e),s),typeof i<...
  function ch (line 11) | function ch(e,t){for(const s of t){if(!s)continue;const n=s[e];if(typeof...
  function rl (line 11) | function rl(e){let t=e._keys;return t||(t=e._keys=Z_(e._scopes)),t}
  function Z_ (line 11) | function Z_(e){const t=new Set;for(const s of e)for(const n of Object.ke...
  function uh (line 11) | function uh(e,t,s,n){const{iScale:i}=e,{key:o="r"}=this._parsing,r=new A...
  function e0 (line 11) | function e0(e,t,s,n){const i=e.skip?t:e,o=t,r=s.skip?t:s,a=ir(o,i),l=ir(...
  function s0 (line 11) | function s0(e,t,s){const n=e.length;let i,o,r,a,l,c=rn(e,0);for(let u=0;...
  function n0 (line 11) | function n0(e,t,s="x"){const n=hh(s),i=e.length;let o,r,a,l=rn(e,0);for(...
  function i0 (line 11) | function i0(e,t="x"){const s=hh(t),n=e.length,i=Array(n).fill(0),o=Array...
  function di (line 11) | function di(e,t,s){return Math.max(Math.min(e,s),t)}
  function o0 (line 11) | function o0(e,t){let s,n,i,o,r,a=Xe(e[0],t);for(s=0,n=e.length;s<n;++s)r...
  function r0 (line 11) | function r0(e,t,s,n,i){let o,r,a,l;if(t.spanGaps&&(e=e.filter(c=>!c.skip...
  function Xr (line 11) | function Xr(){return typeof window<"u"&&typeof document<"u"}
  function Jr (line 11) | function Jr(e){let t=e.parentNode;return t&&t.toString()==="[object Shad...
  function ji (line 11) | function ji(e,t,s){let n;return typeof e=="string"?(n=parseInt(e,10),e.i...
  function a0 (line 11) | function a0(e,t){return lo(e).getPropertyValue(t)}
  function Ns (line 11) | function Ns(e,t,s){const n={};s=s?"-"+s:"";for(let i=0;i<4;i++){const o=...
  function u0 (line 11) | function u0(e,t){const s=e.touches,n=s&&s.length?s[0]:e,{offsetX:i,offse...
  function Rs (line 11) | function Rs(e,t){if("native"in e)return e;const{canvas:s,currentDevicePi...
  function h0 (line 11) | function h0(e,t,s){let n,i;if(t===void 0||s===void 0){const o=e&&Jr(e);i...
  function d0 (line 11) | function d0(e,t,s,n){const i=lo(e),o=Ns(i,"margin"),r=ji(i.maxWidth,e,"c...
  function al (line 11) | function al(e,t,s){const n=t||1,i=ds(e.height*n),o=ds(e.width*n);e.heigh...
  method passive (line 11) | get passive(){return e=!0,!1}
  function ll (line 11) | function ll(e,t){const s=a0(e,t),n=s&&s.match(/^(\d+)(\.\d+)?px$/);retur...
  function Os (line 11) | function Os(e,t,s,n){return{x:e.x+s*(t.x-e.x),y:e.y+s*(t.y-e.y)}}
  function p0 (line 11) | function p0(e,t,s,n){return{x:e.x+s*(t.x-e.x),y:n==="middle"?s<.5?e.y:t....
  function g0 (line 11) | function g0(e,t,s,n){const i={x:e.cp2x,y:e.cp2y},o={x:t.cp1x,y:t.cp1y},r...
  method x (line 11) | x(s){return e+e+t-s}
  method setWidth (line 11) | setWidth(s){t=s}
  method textAlign (line 11) | textAlign(s){return s==="center"?s:s==="right"?"left":"right"}
  method xPlus (line 11) | xPlus(s,n){return s-n}
  method leftForLtr (line 11) | leftForLtr(s,n){return s-n}
  method x (line 11) | x(e){return e}
  method setWidth (line 11) | setWidth(e){}
  method textAlign (line 11) | textAlign(e){return e}
  method xPlus (line 11) | xPlus(e,t){return e+t}
  method leftForLtr (line 11) | leftForLtr(e,t){return e}
  function Qs (line 11) | function Qs(e,t,s){return e?m0(t,s):b0()}
  function dh (line 11) | function dh(e,t){let s,n;(t==="ltr"||t==="rtl")&&(s=e.canvas.style,n=[s....
  function fh (line 11) | function fh(e,t){t!==void 0&&(delete e.prevTextDirection,e.canvas.style....
  function ph (line 11) | function ph(e){return e==="angle"?{between:Un,compare:__,normalize:Ht}:{...
  function cl (line 11) | function cl({start:e,end:t,count:s,loop:n,style:i}){return{start:e%s,end...
  function _0 (line 11) | function _0(e,t,s){const{property:n,start:i,end:o}=s,{between:r,normaliz...
  function gh (line 11) | function gh(e,t,s){if(!s)return[e];const{property:n,start:i,end:o}=s,r=t...
  function mh (line 11) | function mh(e,t){const s=[],n=e.segments;for(let i=0;i<n.length;i++){con...
  function y0 (line 11) | function y0(e,t,s,n){let i=0,o=t-1;if(s&&!n)for(;i<t&&!e[i].skip;)i++;fo...
  function x0 (line 11) | function x0(e,t,s,n){const i=e.length,o=[];let r=t,a=e[t],l;for(l=t+1;l<...
  function v0 (line 11) | function v0(e,t){const s=e.points,n=e.options.spanGaps,i=s.length;if(!i)...
  function ul (line 11) | function ul(e,t,s,n){return!n||!n.setContext||!s?t:w0(e,t,s,n)}
  function w0 (line 11) | function w0(e,t,s,n){const i=e._chart.getContext(),o=hl(e.options),{_dat...
  function hl (line 11) | function hl(e){return{backgroundColor:e.backgroundColor,borderCapStyle:e...
  function S0 (line 11) | function S0(e,t){if(!t)return!1;const s=[],n=function(i,o){return qr(o)?...
  function fi (line 11) | function fi(e,t,s){return e.options.clip?e[s]:t[s]}
  function k0 (line 11) | function k0(e,t){const{xScale:s,yScale:n}=e;return s&&n?{left:fi(s,t,"le...
  function bh (line 11) | function bh(e,t){const s=t._clip;if(s.disabled)return!1;const n=k0(t,e.c...
  class M0 (line 11) | class M0{constructor(){this._request=null,this._charts=new Map,this._run...
    method constructor (line 11) | constructor(){this._request=null,this._charts=new Map,this._running=!1...
    method _notify (line 11) | _notify(t,s,n,i){const o=s.listeners[i],r=s.duration;o.forEach(a=>a({c...
    method _refresh (line 11) | _refresh(){this._request||(this._running=!0,this._request=Zu.call(wind...
    method _update (line 11) | _update(t=Date.now()){let s=0;this._charts.forEach((n,i)=>{if(!n.runni...
    method _getAnims (line 11) | _getAnims(t){const s=this._charts;let n=s.get(t);return n||(n={running...
    method listen (line 11) | listen(t,s,n){this._getAnims(t).listeners[s].push(n)}
    method add (line 11) | add(t,s){!s||!s.length||this._getAnims(t).items.push(...s)}
    method has (line 11) | has(t){return this._getAnims(t).items.length>0}
    method start (line 11) | start(t){const s=this._charts.get(t);s&&(s.running=!0,s.start=Date.now...
    method running (line 11) | running(t){if(!this._running)return!1;const s=this._charts.get(t);retu...
    method stop (line 11) | stop(t){const s=this._charts.get(t);if(!s||!s.items.length)return;cons...
    method remove (line 11) | remove(t){return this._charts.delete(t)}
  method boolean (line 11) | boolean(e,t,s){return s>.5?t:e}
  method color (line 11) | color(e,t,s){const n=sl(e||dl),i=n.valid&&sl(t||dl);return i&&i.valid?i....
  method number (line 11) | number(e,t,s){return e+(t-e)*s}
  class P0 (line 11) | class P0{constructor(t,s,n,i){const o=s[n];i=wn([t.to,i,o,t.from]);const...
    method constructor (line 11) | constructor(t,s,n,i){const o=s[n];i=wn([t.to,i,o,t.from]);const r=wn([...
    method active (line 11) | active(){return this._active}
    method update (line 11) | update(t,s,n){if(this._active){this._notify(!1);const i=this._target[t...
    method cancel (line 11) | cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._no...
    method tick (line 11) | tick(t){const s=t-this._start,n=this._duration,i=this._prop,o=this._fr...
    method wait (line 11) | wait(){const t=this._promises||(this._promises=[]);return new Promise(...
    method _notify (line 11) | _notify(t){const s=t?"res":"rej",n=this._promises||[];for(let i=0;i<n....
  class _h (line 11) | class _h{constructor(t,s){this._chart=t,this._properties=new Map,this.co...
    method constructor (line 11) | constructor(t,s){this._chart=t,this._properties=new Map,this.configure...
    method configure (line 11) | configure(t){if(!ot(t))return;const s=Object.keys(Rt.animation),n=this...
    method _animateOptions (line 11) | _animateOptions(t,s){const n=s.options,i=R0(t,n);if(!i)return[];const ...
    method _createAnimations (line 11) | _createAnimations(t,s){const n=this._properties,i=[],o=t.$animations||...
    method update (line 11) | update(t,s){if(this._properties.size===0){Object.assign(t,s);return}co...
  function A0 (line 11) | function A0(e,t){const s=[],n=Object.keys(t);for(let i=0;i<n.length;i++)...
  function R0 (line 11) | function R0(e,t){if(!t)return;let s=e.options;if(!s){e.options=t;return}...
  function fl (line 11) | function fl(e,t){const s=e&&e.options||{},n=s.reverse,i=s.min===void 0?t...
  function O0 (line 11) | function O0(e,t,s){if(s===!1)return!1;const n=fl(e,s),i=fl(t,s);return{t...
  function T0 (line 11) | function T0(e){let t,s,n,i;return ot(e)?(t=e.top,s=e.right,n=e.bottom,i=...
  function yh (line 11) | function yh(e,t){const s=[],n=e._getSortedDatasetMetas(t);let i,o;for(i=...
  function pl (line 11) | function pl(e,t,s,n={}){const i=e.keys,o=n.mode==="single";let r,a,l,c;i...
  function E0 (line 11) | function E0(e,t){const{iScale:s,vScale:n}=t,i=s.axis==="x"?"x":"y",o=n.a...
  function Ro (line 11) | function Ro(e,t){const s=e&&e.options.stacked;return s||s===void 0&&t.st...
  function D0 (line 11) | function D0(e,t,s){return`${e.id}.${t.id}.${s.stack||s.type}`}
  function I0 (line 11) | function I0(e){const{min:t,max:s,minDefined:n,maxDefined:i}=e.getUserBou...
  function L0 (line 11) | function L0(e,t,s){const n=e[t]||(e[t]={});return n[s]||(n[s]={})}
  function gl (line 11) | function gl(e,t,s,n){for(const i of t.getMatchingVisibleMetas(n).reverse...
  function ml (line 11) | function ml(e,t){const{chart:s,_cachedMeta:n}=e,i=s._stacks||(s._stacks=...
  function Oo (line 11) | function Oo(e,t){const s=e.scales;return Object.keys(s).filter(n=>s[n].a...
  function F0 (line 11) | function F0(e,t){return xs(e,{active:!1,dataset:void 0,datasetIndex:t,in...
  function N0 (line 11) | function N0(e,t,s){return xs(e,{active:!1,dataIndex:t,parsed:void 0,raw:...
  function pn (line 11) | function pn(e,t){const s=e.controller.index,n=e.vScale&&e.vScale.axis;if...
  class vs (line 11) | class vs{static defaults={};static datasetElementType=null;static dataEl...
    method constructor (line 11) | constructor(t,s){this.chart=t,this._ctx=t.ctx,this.index=s,this._cache...
    method initialize (line 11) | initialize(){const t=this._cachedMeta;this.configure(),this.linkScales...
    method updateIndex (line 11) | updateIndex(t){this.index!==t&&pn(this._cachedMeta),this.index=t}
    method linkScales (line 11) | linkScales(){const t=this.chart,s=this._cachedMeta,n=this.getDataset()...
    method getDataset (line 11) | getDataset(){return this.chart.data.datasets[this.index]}
    method getMeta (line 11) | getMeta(){return this.chart.getDatasetMeta(this.index)}
    method getScaleForId (line 11) | getScaleForId(t){return this.chart.scales[t]}
    method _getOtherScale (line 11) | _getOtherScale(t){const s=this._cachedMeta;return t===s.iScale?s.vScal...
    method reset (line 11) | reset(){this._update("reset")}
    method _destroy (line 11) | _destroy(){const t=this._cachedMeta;this._data&&Za(this._data,this),t....
    method _dataCheck (line 11) | _dataCheck(){const t=this.getDataset(),s=t.data||(t.data=[]),n=this._d...
    method addElements (line 11) | addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetE...
    method buildOrUpdateElements (line 11) | buildOrUpdateElements(t){const s=this._cachedMeta,n=this.getDataset();...
    method configure (line 11) | configure(){const t=this.chart.config,s=t.datasetScopeKeys(this._type)...
    method parse (line 11) | parse(t,s){const{_cachedMeta:n,_data:i}=this,{iScale:o,_stacked:r}=n,a...
    method parsePrimitiveData (line 11) | parsePrimitiveData(t,s,n,i){const{iScale:o,vScale:r}=t,a=o.axis,l=r.ax...
    method parseArrayData (line 11) | parseArrayData(t,s,n,i){const{xScale:o,yScale:r}=t,a=new Array(i);let ...
    method parseObjectData (line 11) | parseObjectData(t,s,n,i){const{xScale:o,yScale:r}=t,{xAxisKey:a="x",yA...
    method getParsed (line 11) | getParsed(t){return this._cachedMeta._parsed[t]}
    method getDataElement (line 11) | getDataElement(t){return this._cachedMeta.data[t]}
    method applyStack (line 11) | applyStack(t,s,n){const i=this.chart,o=this._cachedMeta,r=s[t.axis],a=...
    method updateRangeFromParsed (line 11) | updateRangeFromParsed(t,s,n,i){const o=n[s.axis];let r=o===null?NaN:o;...
    method getMinMax (line 11) | getMinMax(t,s){const n=this._cachedMeta,i=n._parsed,o=n._sorted&&t===n...
    method getAllParsedValues (line 11) | getAllParsedValues(t){const s=this._cachedMeta._parsed,n=[];let i,o,r;...
    method getMaxOverflow (line 11) | getMaxOverflow(){return!1}
    method getLabelAndValue (line 11) | getLabelAndValue(t){const s=this._cachedMeta,n=s.iScale,i=s.vScale,o=t...
    method _update (line 11) | _update(t){const s=this._cachedMeta;this.update(t||"default"),s._clip=...
    method update (line 11) | update(t){}
    method draw (line 11) | draw(){const t=this._ctx,s=this.chart,n=this._cachedMeta,i=n.data||[],...
    method getStyle (line 11) | getStyle(t,s){const n=s?"active":"default";return t===void 0&&this._ca...
    method getContext (line 11) | getContext(t,s,n){const i=this.getDataset();let o;if(t>=0&&t<this._cac...
    method resolveDatasetElementOptions (line 11) | resolveDatasetElementOptions(t){return this._resolveElementOptions(thi...
    method resolveDataElementOptions (line 11) | resolveDataElementOptions(t,s){return this._resolveElementOptions(this...
    method _resolveElementOptions (line 11) | _resolveElementOptions(t,s="default",n){const i=s==="active",o=this._c...
    method _resolveAnimations (line 11) | _resolveAnimations(t,s,n){const i=this.chart,o=this._cachedDataOpts,r=...
    method getSharedOptions (line 11) | getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sh...
    method includeOptions (line 11) | includeOptions(t,s){return!s||To(t)||this.chart._animationsDisabled}
    method _getSharedOptions (line 11) | _getSharedOptions(t,s){const n=this.resolveDataElementOptions(t,s),i=t...
    method updateElement (line 11) | updateElement(t,s,n,i){To(i)?Object.assign(t,n):this._resolveAnimation...
    method updateSharedOptions (line 11) | updateSharedOptions(t,s,n){t&&!To(s)&&this._resolveAnimations(void 0,s...
    method _setStyle (line 11) | _setStyle(t,s,n,i){t.active=i;const o=this.getStyle(s,i);this._resolve...
    method removeHoverStyle (line 11) | removeHoverStyle(t,s,n){this._setStyle(t,n,"active",!1)}
    method setHoverStyle (line 11) | setHoverStyle(t,s,n){this._setStyle(t,n,"active",!0)}
    method _removeDatasetHoverStyle (line 11) | _removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._s...
    method _setDatasetHoverStyle (line 11) | _setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setS...
    method _resyncElements (line 11) | _resyncElements(t){const s=this._data,n=this._cachedMeta.data;for(cons...
    method _insertElements (line 11) | _insertElements(t,s,n=!0){const i=this._cachedMeta,o=i.data,r=t+s;let ...
    method updateElements (line 11) | updateElements(t,s,n,i){}
    method _removeElements (line 11) | _removeElements(t,s){const n=this._cachedMeta;if(this._parsing){const ...
    method _sync (line 11) | _sync(t){if(this._parsing)this._syncList.push(t);else{const[s,n,i]=t;t...
    method _onDataPush (line 11) | _onDataPush(){const t=arguments.length;this._sync(["_insertElements",t...
    method _onDataPop (line 11) | _onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.lengt...
    method _onDataShift (line 11) | _onDataShift(){this._sync(["_removeElements",0,1])}
    method _onDataSplice (line 11) | _onDataSplice(t,s){s&&this._sync(["_removeElements",t,s]);const n=argu...
    method _onDataUnshift (line 11) | _onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}
  function $0 (line 11) | function $0(e,t){if(!e._cache.$bar){const s=e.getMatchingVisibleMetas(t)...
  function V0 (line 11) | function V0(e){const t=e.iScale,s=$0(t,e.type);let n=t._length,i,o,r,a;c...
  function j0 (line 11) | function j0(e,t,s,n){const i=s.barThickness;let o,r;return it(i)?(o=t.mi...
  function H0 (line 11) | function H0(e,t,s,n){const i=t.pixels,o=i[e];let r=e>0?i[e-1]:null,a=e<i...
  function z0 (line 11) | function z0(e,t,s,n){const i=s.parse(e[0],n),o=s.parse(e[1],n),r=Math.mi...
  function xh (line 11) | function xh(e,t,s,n){return At(e)?z0(e,t,s,n):t[s.axis]=s.parse(e,n),t}
  function _l (line 11) | function _l(e,t,s,n){const i=e.iScale,o=e.vScale,r=i.getLabels(),a=i===o...
  function Eo (line 11) | function Eo(e){return e&&e.barStart!==void 0&&e.barEnd!==void 0}
  function W0 (line 11) | function W0(e,t,s){return e!==0?Fe(e):(t.isHorizontal()?1:-1)*(t.min>=s?...
  function q0 (line 11) | function q0(e){let t,s,n,i,o;return e.horizontal?(t=e.base>e.x,s="left",...
  function U0 (line 11) | function U0(e,t,s,n){let i=t.borderSkipped;const o={};if(!i){e.borderSki...
  function yl (line 11) | function yl(e,t,s,n){return n?(e=K0(e,t,s),e=xl(e,s,t)):e=xl(e,t,s),e}
  function K0 (line 11) | function K0(e,t,s){return e===t?s:e===s?t:e}
  function xl (line 11) | function xl(e,t,s){return e==="start"?t:e==="end"?s:e}
  function G0 (line 11) | function G0(e,{inflateAmount:t},s){e.inflateAmount=t==="auto"?s===1?.33:...
  class Y0 (line 11) | class Y0 extends vs{static id="bar";static defaults={datasetElementType:...
    method parsePrimitiveData (line 11) | parsePrimitiveData(t,s,n,i){return _l(t,s,n,i)}
    method parseArrayData (line 11) | parseArrayData(t,s,n,i){return _l(t,s,n,i)}
    method parseObjectData (line 11) | parseObjectData(t,s,n,i){const{iScale:o,vScale:r}=t,{xAxisKey:a="x",yA...
    method updateRangeFromParsed (line 11) | updateRangeFromParsed(t,s,n,i){super.updateRangeFromParsed(t,s,n,i);co...
    method getMaxOverflow (line 11) | getMaxOverflow(){return 0}
    method getLabelAndValue (line 11) | getLabelAndValue(t){const s=this._cachedMeta,{iScale:n,vScale:i}=s,o=t...
    method initialize (line 11) | initialize(){this.enableOptionSharing=!0,super.initialize();const t=th...
    method update (line 11) | update(t){const s=this._cachedMeta;this.updateElements(s.data,0,s.data...
    method updateElements (line 11) | updateElements(t,s,n,i){const o=i==="reset",{index:r,_cachedMeta:{vSca...
    method _getStacks (line 11) | _getStacks(t,s){const{iScale:n}=this._cachedMeta,i=n.getMatchingVisibl...
    method _getStackCount (line 11) | _getStackCount(t){return this._getStacks(void 0,t).length}
    method _getAxisCount (line 11) | _getAxisCount(){return this._getAxis().length}
    method getFirstScaleIdForIndexAxis (line 11) | getFirstScaleIdForIndexAxis(){const t=this.chart.scales,s=this.chart.o...
    method _getAxis (line 11) | _getAxis(){const t={},s=this.getFirstScaleIdForIndexAxis();for(const n...
    method _getStackIndex (line 11) | _getStackIndex(t,s,n){const i=this._getStacks(t,n),o=s!==void 0?i.inde...
    method _getRuler (line 11) | _getRuler(){const t=this.options,s=this._cachedMeta,n=s.iScale,i=[];le...
    method _calculateBarValuePixels (line 11) | _calculateBarValuePixels(t){const{_cachedMeta:{vScale:s,_stacked:n,ind...
    method _calculateBarIndexPixels (line 11) | _calculateBarIndexPixels(t,s){const n=s.scale,i=this.options,o=i.skipN...
    method draw (line 11) | draw(){const t=this._cachedMeta,s=t.vScale,n=t.data,i=n.length;let o=0...
  class X0 (line 11) | class X0 extends vs{static id="bubble";static defaults={datasetElementTy...
    method initialize (line 11) | initialize(){this.enableOptionSharing=!0,super.initialize()}
    method parsePrimitiveData (line 11) | parsePrimitiveData(t,s,n,i){const o=super.parsePrimitiveData(t,s,n,i);...
    method parseArrayData (line 11) | parseArrayData(t,s,n,i){const o=super.parseArrayData(t,s,n,i);for(let ...
    method parseObjectData (line 11) | parseObjectData(t,s,n,i){const o=super.parseObjectData(t,s,n,i);for(le...
    method getMaxOverflow (line 11) | getMaxOverflow(){const t=this._cachedMeta.data;let s=0;for(let n=t.len...
    method getLabelAndValue (line 11) | getLabelAndValue(t){const s=this._cachedMeta,n=this.chart.data.labels|...
    method update (line 11) | update(t){const s=this._cachedMeta.data;this.updateElements(s,0,s.leng...
    method updateElements (line 11) | updateElements(t,s,n,i){const o=i==="reset",{iScale:r,vScale:a}=this._...
    method resolveDataElementOptions (line 11) | resolveDataElementOptions(t,s){const n=this.getParsed(t);let i=super.r...
  function J0 (line 11) | function J0(e,t,s){let n=1,i=1,o=0,r=0;if(t<Mt){const a=e,l=a+t,c=Math.c...
  class Qr (line 11) | class Qr extends vs{static id="doughnut";static defaults={datasetElement...
    method generateLabels (line 11) | generateLabels(t){const s=t.data,{labels:{pointStyle:n,textAlign:i,col...
    method onClick (line 11) | onClick(t,s,n){n.chart.toggleDataVisibility(s.index),n.chart.update()}
    method constructor (line 11) | constructor(t,s){super(t,s),this.enableOptionSharing=!0,this.innerRadi...
    method linkScales (line 11) | linkScales(){}
    method parse (line 11) | parse(t,s){const n=this.getDataset().data,i=this._cachedMeta;if(this._...
    method _getRotation (line 11) | _getRotation(){return ve(this.options.rotation-90)}
    method _getCircumference (line 11) | _getCircumference(){return ve(this.options.circumference)}
    method _getRotationExtents (line 11) | _getRotationExtents(){let t=Mt,s=-Mt;for(let n=0;n<this.chart.data.dat...
    method update (line 11) | update(t){const s=this.chart,{chartArea:n}=s,i=this._cachedMeta,o=i.da...
    method _circumference (line 11) | _circumference(t,s){const n=this.options,i=this._cachedMeta,o=this._ge...
    method updateElements (line 11) | updateElements(t,s,n,i){const o=i==="reset",r=this.chart,a=r.chartArea...
    method calculateTotal (line 11) | calculateTotal(){const t=this._cachedMeta,s=t.data;let n=0,i;for(i=0;i...
    method calculateCircumference (line 11) | calculateCircumference(t){const s=this._cachedMeta.total;return s>0&&!...
    method getLabelAndValue (line 11) | getLabelAndValue(t){const s=this._cachedMeta,n=this.chart,i=n.data.lab...
    method getMaxBorderWidth (line 11) | getMaxBorderWidth(t){let s=0;const n=this.chart;let i,o,r,a,l;if(!t){f...
    method getMaxOffset (line 11) | getMaxOffset(t){let s=0;for(let n=0,i=t.length;n<i;++n){const o=this.r...
    method _getRingWeightOffset (line 11) | _getRingWeightOffset(t){let s=0;for(let n=0;n<t;++n)this.chart.isDatas...
    method _getRingWeight (line 11) | _getRingWeight(t){return Math.max(Z(this.chart.data.datasets[t].weight...
    method _getVisibleDatasetWeightTotal (line 11) | _getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this....
  class Q0 (line 11) | class Q0 extends vs{static id="line";static defaults={datasetElementType...
    method initialize (line 11) | initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,su...
    method update (line 11) | update(t){const s=this._cachedMeta,{dataset:n,data:i=[],_dataset:o}=s,...
    method updateElements (line 11) | updateElements(t,s,n,i){const o=i==="reset",{iScale:r,vScale:a,_stacke...
    method getMaxOverflow (line 11) | getMaxOverflow(){const t=this._cachedMeta,s=t.dataset,n=s.options&&s.o...
    method draw (line 11) | draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.cha...
  class vh (line 11) | class vh extends vs{static id="polarArea";static defaults={dataElementTy...
    method generateLabels (line 11) | generateLabels(t){const s=t.data;if(s.labels.length&&s.datasets.length...
    method onClick (line 11) | onClick(t,s,n){n.chart.toggleDataVisibility(s.index),n.chart.update()}
    method constructor (line 11) | constructor(t,s){super(t,s),this.innerRadius=void 0,this.outerRadius=v...
    method getLabelAndValue (line 11) | getLabelAndValue(t){const s=this._cachedMeta,n=this.chart,i=n.data.lab...
    method parseObjectData (line 11) | parseObjectData(t,s,n,i){return uh.bind(this)(t,s,n,i)}
    method update (line 11) | update(t){const s=this._cachedMeta.data;this._updateRadius(),this.upda...
    method getMinMax (line 11) | getMinMax(){const t=this._cachedMeta,s={min:Number.POSITIVE_INFINITY,m...
    method _updateRadius (line 11) | _updateRadius(){const t=this.chart,s=t.chartArea,n=t.options,i=Math.mi...
    method updateElements (line 11) | updateElements(t,s,n,i){const o=i==="reset",r=this.chart,l=r.options.a...
    method countVisibleElements (line 11) | countVisibleElements(){const t=this._cachedMeta;let s=0;return t.data....
    method _computeAngle (line 11) | _computeAngle(t,s,n){return this.chart.getDataVisibility(t)?ve(this.re...
  class Z0 (line 11) | class Z0 extends Qr{static id="pie";static defaults={cutout:0,rotation:0...
  class ty (line 11) | class ty extends vs{static id="radar";static defaults={datasetElementTyp...
    method getLabelAndValue (line 11) | getLabelAndValue(t){const s=this._cachedMeta.vScale,n=this.getParsed(t...
    method parseObjectData (line 11) | parseObjectData(t,s,n,i){return uh.bind(this)(t,s,n,i)}
    method update (line 11) | update(t){const s=this._cachedMeta,n=s.dataset,i=s.data||[],o=s.iScale...
    method updateElements (line 11) | updateElements(t,s,n,i){const o=this._cachedMeta.rScale,r=i==="reset";...
  class ey (line 11) | class ey extends vs{static id="scatter";static defaults={datasetElementT...
    method getLabelAndValue (line 11) | getLabelAndValue(t){const s=this._cachedMeta,n=this.chart.data.labels|...
    method update (line 11) | update(t){const s=this._cachedMeta,{data:n=[]}=s,i=this.chart._animati...
    method addElements (line 11) | addElements(){const{showLine:t}=this.options;!this.datasetElementType&...
    method updateElements (line 11) | updateElements(t,s,n,i){const o=i==="reset",{iScale:r,vScale:a,_stacke...
    method getMaxOverflow (line 11) | getMaxOverflow(){const t=this._cachedMeta,s=t.data||[];if(!this.option...
  function Cs (line 11) | function Cs(){throw new Error("This method is not implemented: Check tha...
  class Zr (line 11) | class Zr{static override(t){Object.assign(Zr.prototype,t)}options;constr...
    method override (line 11) | static override(t){Object.assign(Zr.prototype,t)}
    method constructor (line 11) | constructor(t){this.options=t||{}}
    method init (line 11) | init(){}
    method formats (line 11) | formats(){return Cs()}
    method parse (line 11) | parse(){return Cs()}
    method format (line 11) | format(){return Cs()}
    method add (line 11) | add(){return Cs()}
    method diff (line 11) | diff(){return Cs()}
    method startOf (line 11) | startOf(){return Cs()}
    method endOf (line 11) | endOf(){return Cs()}
  function iy (line 11) | function iy(e,t,s,n){const{controller:i,data:o,_sorted:r}=e,a=i._cachedM...
  function co (line 11) | function co(e,t,s,n,i){const o=e.getSortedVisibleDatasetMetas(),r=s[t];f...
  function oy (line 11) | function oy(e){const t=e.indexOf("x")!==-1,s=e.indexOf("y")!==-1;return ...
  function Do (line 11) | function Do(e,t,s,n,i){const o=[];return!i&&!e.isPointInArea(t)||co(e,s,...
  function ry (line 11) | function ry(e,t,s,n){let i=[];function o(r,a,l){const{startAngle:c,endAn...
  function ay (line 11) | function ay(e,t,s,n,i,o){let r=[];const a=oy(s);let l=Number.POSITIVE_IN...
  function Io (line 11) | function Io(e,t,s,n,i,o){return!o&&!e.isPointInArea(t)?[]:s==="r"&&!n?ry...
  function vl (line 11) | function vl(e,t,s,n,i){const o=[],r=s==="x"?"inXRange":"inYRange";let a=...
  method index (line 11) | index(e,t,s,n){const i=Rs(t,e),o=s.axis||"x",r=s.includeInvisible||!1,a=...
  method dataset (line 11) | dataset(e,t,s,n){const i=Rs(t,e),o=s.axis||"xy",r=s.includeInvisible||!1...
  method point (line 11) | point(e,t,s,n){const i=Rs(t,e),o=s.axis||"xy",r=s.includeInvisible||!1;r...
  method nearest (line 11) | nearest(e,t,s,n){const i=Rs(t,e),o=s.axis||"xy",r=s.includeInvisible||!1...
  method x (line 11) | x(e,t,s,n){const i=Rs(t,e);return vl(e,i,"x",s.intersect,n)}
  method y (line 11) | y(e,t,s,n){const i=Rs(t,e);return vl(e,i,"y",s.intersect,n)}
  function gn (line 11) | function gn(e,t){return e.filter(s=>s.pos===t)}
  function wl (line 11) | function wl(e,t){return e.filter(s=>wh.indexOf(s.pos)===-1&&s.box.axis==...
  function mn (line 11) | function mn(e,t){return e.sort((s,n)=>{const i=t?n:s,o=t?s:n;return i.we...
  function cy (line 11) | function cy(e){const t=[];let s,n,i,o,r,a;for(s=0,n=(e||[]).length;s<n;+...
  function uy (line 11) | function uy(e){const t={};for(const s of e){const{stack:n,pos:i,stackWei...
  function hy (line 11) | function hy(e,t){const s=uy(e),{vBoxMaxWidth:n,hBoxMaxHeight:i}=t;let o,...
  function dy (line 11) | function dy(e){const t=cy(e),s=mn(t.filter(c=>c.box.fullSize),!0),n=mn(g...
  function Sl (line 11) | function Sl(e,t,s,n){return Math.max(e[s],t[s])+Math.max(e[n],t[n])}
  function Sh (line 11) | function Sh(e,t){e.top=Math.max(e.top,t.top),e.left=Math.max(e.left,t.le...
  function fy (line 11) | function fy(e,t,s,n){const{pos:i,box:o}=s,r=e.maxPadding;if(!ot(i)){s.si...
  function py (line 11) | function py(e){const t=e.maxPadding;function s(n){const i=Math.max(t[n]-...
  function gy (line 11) | function gy(e,t){const s=t.maxPadding;function n(i){const o={left:0,top:...
  function Sn (line 11) | function Sn(e,t,s,n){const i=[];let o,r,a,l,c,u;for(o=0,r=e.length,c=0;o...
  function pi (line 11) | function pi(e,t,s,n,i){e.top=s,e.left=t,e.right=t+n,e.bottom=s+i,e.width...
  function kl (line 11) | function kl(e,t,s,n){const i=s.padding;let{x:o,y:r}=t;for(const a of e){...
  method addBox (line 11) | addBox(e,t){e.boxes||(e.boxes=[]),t.fullSize=t.fullSize||!1,t.position=t...
  method removeBox (line 11) | removeBox(e,t){const s=e.boxes?e.boxes.indexOf(t):-1;s!==-1&&e.boxes.spl...
  method configure (line 11) | configure(e,t,s){t.fullSize=s.fullSize,t.position=s.position,t.weight=s....
  method update (line 11) | update(e,t,s,n){if(!e)return;const i=Yt(e.options.layout.padding),o=Math...
  class kh (line 11) | class kh{acquireContext(t,s){}releaseContext(t){return!1}addEventListene...
    method acquireContext (line 11) | acquireContext(t,s){}
    method releaseContext (line 11) | releaseContext(t){return!1}
    method addEventListener (line 11) | addEventListener(t,s,n){}
    method removeEventListener (line 11) | removeEventListener(t,s,n){}
    method getDevicePixelRatio (line 11) | getDevicePixelRatio(){return 1}
    method getMaximumSize (line 11) | getMaximumSize(t,s,n,i){return s=Math.max(0,s||t.width),n=n||t.height,...
    method isAttached (line 11) | isAttached(t){return!0}
    method updateConfig (line 11) | updateConfig(t){}
  class my (line 11) | class my extends kh{acquireContext(t){return t&&t.getContext&&t.getConte...
    method acquireContext (line 11) | acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}
    method updateConfig (line 11) | updateConfig(t){t.options.animation=!1}
  function _y (line 11) | function _y(e,t){const s=e.style,n=e.getAttribute("height"),i=e.getAttri...
  function yy (line 11) | function yy(e,t,s){e&&e.addEventListener(t,s,Mh)}
  function xy (line 11) | function xy(e,t,s){e&&e.canvas&&e.canvas.removeEventListener(t,s,Mh)}
  function vy (line 11) | function vy(e,t){const s=by[e.type]||e.type,{x:n,y:i}=Rs(e,t);return{typ...
  function Hi (line 11) | function Hi(e,t){for(const s of e)if(s===t||s.contains(t))return!0}
  function wy (line 11) | function wy(e,t,s){const n=e.canvas,i=new MutationObserver(o=>{let r=!1;...
  function Sy (line 11) | function Sy(e,t,s){const n=e.canvas,i=new MutationObserver(o=>{let r=!1;...
  function Ch (line 11) | function Ch(){const e=window.devicePixelRatio;e!==Cl&&(Cl=e,Gn.forEach((...
  function ky (line 11) | function ky(e,t){Gn.size||window.addEventListener("resize",Ch),Gn.set(e,t)}
  function My (line 11) | function My(e){Gn.delete(e),Gn.size||window.removeEventListener("resize"...
  function Cy (line 11) | function Cy(e,t,s){const n=e.canvas,i=n&&Jr(n);if(!i)return;const o=th((...
  function Lo (line 11) | function Lo(e,t,s){s&&s.disconnect(),t==="resize"&&My(e)}
  function Py (line 11) | function Py(e,t,s){const n=e.canvas,i=th(o=>{e.ctx!==null&&s(vy(o,e))},e...
  class Ay (line 11) | class Ay extends kh{acquireContext(t,s){const n=t&&t.getContext&&t.getCo...
    method acquireContext (line 11) | acquireContext(t,s){const n=t&&t.getContext&&t.getContext("2d");return...
    method releaseContext (line 11) | releaseContext(t){const s=t.canvas;if(!s[Ci])return!1;const n=s[Ci].in...
    method addEventListener (line 11) | addEventListener(t,s,n){this.removeEventListener(t,s);const i=t.$proxi...
    method removeEventListener (line 11) | removeEventListener(t,s){const n=t.$proxies||(t.$proxies={}),i=n[s];if...
    method getDevicePixelRatio (line 11) | getDevicePixelRatio(){return window.devicePixelRatio}
    method getMaximumSize (line 11) | getMaximumSize(t,s,n,i){return d0(t,s,n,i)}
    method isAttached (line 11) | isAttached(t){const s=t&&Jr(t);return!!(s&&s.isConnected)}
  function Ry (line 11) | function Ry(e){return!Xr()||typeof OffscreenCanvas<"u"&&e instanceof Off...
  method tooltipPosition (line 11) | tooltipPosition(t){const{x:s,y:n}=this.getProps(["x","y"],t);return{x:s,...
  method hasValue (line 11) | hasValue(){return nn(this.x)&&nn(this.y)}
  method getProps (line 11) | getProps(t,s){const n=this.$animations;if(!s||!n)return this;const i={};...
  function Oy (line 11) | function Oy(e,t){const s=e.options.ticks,n=Ty(e),i=Math.min(s.maxTicksLi...
  function Ty (line 11) | function Ty(e){const t=e.options.offset,s=e._tickSize(),n=e._length/s+(t...
  function Ey (line 11) | function Ey(e,t,s){const n=Ly(e),i=t.length/s;if(!n)return Math.max(i,1)...
  function Dy (line 11) | function Dy(e){const t=[];let s,n;for(s=0,n=e.length;s<n;s++)e[s].major&...
  function Iy (line 11) | function Iy(e,t,s,n){let i=0,o=s[0],r;for(n=Math.ceil(n),r=0;r<e.length;...
  function gi (line 11) | function gi(e,t,s,n,i){const o=Z(n,0),r=Math.min(Z(i,e.length),e.length)...
  function Ly (line 11) | function Ly(e){const t=e.length;let s,n;if(t<2)return!1;for(n=e[0],s=1;s...
  function Rl (line 11) | function Rl(e,t){const s=[],n=e.length/t,i=e.length;let o=0;for(;o<i;o+=...
  function Ny (line 11) | function Ny(e,t,s){const n=e.ticks.length,i=Math.min(t,n-1),o=e._startPi...
  function By (line 11) | function By(e,t){bt(e,s=>{const n=s.gc,i=n.length/2;let o;if(i>t){for(o=...
  function bn (line 11) | function bn(e){return e.drawTicks?e.tickLength:0}
  function Ol (line 11) | function Ol(e,t){if(!e.display)return 0;const s=Nt(e.font,t),n=Yt(e.padd...
  function $y (line 11) | function $y(e,t){return xs(e,{scale:t,type:"scale"})}
  function Vy (line 11) | function Vy(e,t,s){return xs(e,{tick:s,index:t,type:"tick"})}
  function jy (line 11) | function jy(e,t,s){let n=Wr(e);return(s&&t!=="right"||!s&&t==="right")&&...
  function Hy (line 11) | function Hy(e,t,s,n){const{top:i,left:o,bottom:r,right:a,chart:l}=e,{cha...
  class js (line 11) | class js extends is{constructor(t){super(),this.id=t.id,this.type=t.type...
    method constructor (line 11) | constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void...
    method init (line 11) | init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,...
    method parse (line 11) | parse(t,s){return t}
    method getUserBounds (line 11) | getUserBounds(){let{_userMin:t,_userMax:s,_suggestedMin:n,_suggestedMa...
    method getMinMax (line 11) | getMinMax(t){let{min:s,max:n,minDefined:i,maxDefined:o}=this.getUserBo...
    method getPadding (line 11) | getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,ri...
    method getTicks (line 11) | getTicks(){return this.ticks}
    method getLabels (line 11) | getLabels(){const t=this.chart.data;return this.options.labels||(this....
    method getLabelItems (line 11) | getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._...
    method beforeLayout (line 11) | beforeLayout(){this._cache={},this._dataLimitsCached=!1}
    method beforeUpdate (line 11) | beforeUpdate(){St(this.options.beforeUpdate,[this])}
    method update (line 11) | update(t,s,n){const{beginAtZero:i,grace:o,ticks:r}=this.options,a=r.sa...
    method configure (line 11) | configure(){let t=this.options.reverse,s,n;this.isHorizontal()?(s=this...
    method afterUpdate (line 11) | afterUpdate(){St(this.options.afterUpdate,[this])}
    method beforeSetDimensions (line 11) | beforeSetDimensions(){St(this.options.beforeSetDimensions,[this])}
    method setDimensions (line 11) | setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.lef...
    method afterSetDimensions (line 11) | afterSetDimensions(){St(this.options.afterSetDimensions,[this])}
    method _callHooks (line 11) | _callHooks(t){this.chart.notifyPlugins(t,this.getContext()),St(this.op...
    method beforeDataLimits (line 11) | beforeDataLimits(){this._callHooks("beforeDataLimits")}
    method determineDataLimits (line 11) | determineDataLimits(){}
    method afterDataLimits (line 11) | afterDataLimits(){this._callHooks("afterDataLimits")}
    method beforeBuildTicks (line 11) | beforeBuildTicks(){this._callHooks("beforeBuildTicks")}
    method buildTicks (line 11) | buildTicks(){return[]}
    method afterBuildTicks (line 11) | afterBuildTicks(){this._callHooks("afterBuildTicks")}
    method beforeTickToLabelConversion (line 11) | beforeTickToLabelConversion(){St(this.options.beforeTickToLabelConvers...
    method generateTickLabels (line 11) | generateTickLabels(t){const s=this.options.ticks;let n,i,o;for(n=0,i=t...
    method afterTickToLabelConversion (line 11) | afterTickToLabelConversion(){St(this.options.afterTickToLabelConversio...
    method beforeCalculateLabelRotation (line 11) | beforeCalculateLabelRotation(){St(this.options.beforeCalculateLabelRot...
    method calculateLabelRotation (line 11) | calculateLabelRotation(){const t=this.options,s=t.ticks,n=Al(this.tick...
    method afterCalculateLabelRotation (line 11) | afterCalculateLabelRotation(){St(this.options.afterCalculateLabelRotat...
    method afterAutoSkip (line 11) | afterAutoSkip(){}
    method beforeFit (line 11) | beforeFit(){St(this.options.beforeFit,[this])}
    method fit (line 11) | fit(){const t={width:0,height:0},{chart:s,options:{ticks:n,title:i,gri...
    method _calculatePadding (line 11) | _calculatePadding(t,s,n,i){const{ticks:{align:o,padding:r},position:a}...
    method _handleMargins (line 11) | _handleMargins(){this._margins&&(this._margins.left=Math.max(this.padd...
    method afterFit (line 11) | afterFit(){St(this.options.afterFit,[this])}
    method isHorizontal (line 11) | isHorizontal(){const{axis:t,position:s}=this.options;return s==="top"|...
    method isFullSize (line 11) | isFullSize(){return this.options.fullSize}
    method _convertTicksToLabels (line 11) | _convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.gener...
    method _getLabelSizes (line 11) | _getLabelSizes(){let t=this._labelSizes;if(!t){const s=this.options.ti...
    method _computeLabelSizes (line 11) | _computeLabelSizes(t,s,n){const{ctx:i,_longestTextCache:o}=this,r=[],a...
    method getLabelForValue (line 11) | getLabelForValue(t){return t}
    method getPixelForValue (line 11) | getPixelForValue(t,s){return NaN}
    method getValueForPixel (line 11) | getValueForPixel(t){}
    method getPixelForTick (line 11) | getPixelForTick(t){const s=this.ticks;return t<0||t>s.length-1?null:th...
    method getPixelForDecimal (line 11) | getPixelForDecimal(t){this._reversePixels&&(t=1-t);const s=this._start...
    method getDecimalForPixel (line 11) | getDecimalForPixel(t){const s=(t-this._startPixel)/this._length;return...
    method getBasePixel (line 11) | getBasePixel(){return this.getPixelForValue(this.getBaseValue())}
    method getBaseValue (line 11) | getBaseValue(){const{min:t,max:s}=this;return t<0&&s<0?s:t>0&&s>0?t:0}
    method getContext (line 11) | getContext(t){const s=this.ticks||[];if(t>=0&&t<s.length){const n=s[t]...
    method _tickSize (line 11) | _tickSize(){const t=this.options.ticks,s=ve(this.labelRotation),n=Math...
    method _isVisible (line 11) | _isVisible(){const t=this.options.display;return t!=="auto"?!!t:this.g...
    method _computeGridLineItems (line 11) | _computeGridLineItems(t){const s=this.axis,n=this.chart,i=this.options...
    method _computeLabelItems (line 11) | _computeLabelItems(t){const s=this.axis,n=this.options,{position:i,tic...
    method _getXAxisLabelAlignment (line 11) | _getXAxisLabelAlignment(){const{position:t,ticks:s}=this.options;if(-v...
    method _getYAxisLabelAlignment (line 11) | _getYAxisLabelAlignment(t){const{position:s,ticks:{crossAlign:n,mirror...
    method _computeLabelArea (line 11) | _computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.c...
    method drawBackground (line 11) | drawBackground(){const{ctx:t,options:{backgroundColor:s},left:n,top:i,...
    method getLineWidthForValue (line 11) | getLineWidthForValue(t){const s=this.options.grid;if(!this._isVisible(...
    method drawGrid (line 11) | drawGrid(t){const s=this.options.grid,n=this.ctx,i=this._gridLineItems...
    method drawBorder (line 11) | drawBorder(){const{chart:t,ctx:s,options:{border:n,grid:i}}=this,o=n.s...
    method drawLabels (line 11) | drawLabels(t){if(!this.options.ticks.display)return;const n=this.ctx,i...
    method drawTitle (line 11) | drawTitle(){const{ctx:t,options:{position:s,title:n,reverse:i}}=this;i...
    method draw (line 11) | draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),thi...
    method _layers (line 11) | _layers(){const t=this.options,s=t.ticks&&t.ticks.z||0,n=Z(t.grid&&t.g...
    method getMatchingVisibleMetas (line 11) | getMatchingVisibleMetas(t){const s=this.chart.getSortedVisibleDatasetM...
    method _resolveTickFontOptions (line 11) | _resolveTickFontOptions(t){const s=this.options.ticks.setContext(this....
    method _maxDigits (line 11) | _maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return...
  class mi (line 11) | class mi{constructor(t,s,n){this.type=t,this.scope=s,this.override=n,thi...
    method constructor (line 11) | constructor(t,s,n){this.type=t,this.scope=s,this.override=n,this.items...
    method isForType (line 11) | isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prot...
    method register (line 11) | register(t){const s=Object.getPrototypeOf(t);let n;qy(s)&&(n=this.regi...
    method get (line 11) | get(t){return this.items[t]}
    method unregister (line 11) | unregister(t){const s=this.items,n=t.id,i=this.scope;n in s&&delete s[...
  function zy (line 11) | function zy(e,t,s){const n=Wn(Object.create(null),[s?Rt.get(s):{},Rt.get...
  function Wy (line 11) | function Wy(e,t){Object.keys(t).forEach(s=>{const n=s.split("."),i=n.pop...
  function qy (line 11) | function qy(e){return"id"in e&&"defaults"in e}
  class Uy (line 11) | class Uy{constructor(){this.controllers=new mi(vs,"datasets",!0),this.el...
    method constructor (line 11) | constructor(){this.controllers=new mi(vs,"datasets",!0),this.elements=...
    method add (line 11) | add(...t){this._each("register",t)}
    method remove (line 11) | remove(...t){this._each("unregister",t)}
    method addControllers (line 11) | addControllers(...t){this._each("register",t,this.controllers)}
    method addElements (line 11) | addElements(...t){this._each("register",t,this.elements)}
    method addPlugins (line 11) | addPlugins(...t){this._each("register",t,this.plugins)}
    method addScales (line 11) | addScales(...t){this._each("register",t,this.scales)}
    method getController (line 11) | getController(t){return this._get(t,this.controllers,"controller")}
    method getElement (line 11) | getElement(t){return this._get(t,this.elements,"element")}
    method getPlugin (line 11) | getPlugin(t){return this._get(t,this.plugins,"plugin")}
    method getScale (line 11) | getScale(t){return this._get(t,this.scales,"scale")}
    method removeControllers (line 11) | removeControllers(...t){this._each("unregister",t,this.controllers)}
    method removeElements (line 11) | removeElements(...t){this._each("unregister",t,this.elements)}
    method removePlugins (line 11) | removePlugins(...t){this._each("unregister",t,this.plugins)}
    method removeScales (line 11) | removeScales(...t){this._each("unregister",t,this.scales)}
    method _each (line 11) | _each(t,s,n){[...s].forEach(i=>{const o=n||this._getRegistryForType(i)...
    method _exec (line 11) | _exec(t,s,n){const i=jr(t);St(n["before"+i],[],n),s[t](n),St(n["after"...
    method _getRegistryForType (line 11) | _getRegistryForType(t){for(let s=0;s<this._typedRegistries.length;s++)...
    method _get (line 11) | _get(t,s,n){const i=s.get(t);if(i===void 0)throw new Error('"'+t+'" is...
  class Ky (line 11) | class Ky{constructor(){this._init=void 0}notify(t,s,n,i){if(s==="beforeI...
    method constructor (line 11) | constructor(){this._init=void 0}
    method notify (line 11) | notify(t,s,n,i){if(s==="beforeInit"&&(this._init=this._createDescripto...
    method _notify (line 11) | _notify(t,s,n,i){i=i||{};for(const o of t){const r=o.plugin,a=r[n],l=[...
    method invalidate (line 11) | invalidate(){it(this._cache)||(this._oldCache=this._cache,this._cache=...
    method _descriptors (line 11) | _descriptors(t){if(this._cache)return this._cache;const s=this._cache=...
    method _createDescriptors (line 11) | _createDescriptors(t,s){const n=t&&t.config,i=Z(n.options&&n.options.p...
    method _notifyStateChanges (line 11) | _notifyStateChanges(t){const s=this._oldCache||[],n=this._cache,i=(o,r...
  function Gy (line 11) | function Gy(e){const t={},s=[],n=Object.keys(Ee.plugins.items);for(let o...
  function Yy (line 11) | function Yy(e,t){return!t&&e===!1?null:e===!0?{}:e}
  function Xy (line 11) | function Xy(e,{plugins:t,localIds:s},n,i){const o=[],r=e.getContext();fo...
  function Jy (line 11) | function Jy(e,{plugin:t,local:s},n,i){const o=e.pluginScopeKeys(t),r=e.g...
  function ar (line 11) | function ar(e,t){const s=Rt.datasets[e]||{};return((t.datasets||{})[e]||...
  function Qy (line 11) | function Qy(e,t){let s=e;return e==="_index_"?s=t:e==="_value_"&&(s=t===...
  function Zy (line 11) | function Zy(e,t){return e===t?"_index_":"_value_"}
  function Tl (line 11) | function Tl(e){if(e==="x"||e==="y"||e==="r")return e}
  function tx (line 11) | function tx(e){if(e==="top"||e==="bottom")return"x";if(e==="left"||e==="...
  function lr (line 11) | function lr(e,...t){if(Tl(e))return e;for(const s of t){const n=s.axis||...
  function El (line 11) | function El(e,t,s){if(s[t+"AxisID"]===e)return{axis:t}}
  function ex (line 11) | function ex(e,t){if(t.data&&t.data.datasets){const s=t.data.datasets.fil...
  function sx (line 11) | function sx(e,t){const s=$s[e.type]||{scales:{}},n=t.scales||{},i=ar(e.t...
  function Ph (line 11) | function Ph(e){const t=e.options||(e.options={});t.plugins=Z(t.plugins,{...
  function Ah (line 11) | function Ah(e){return e=e||{},e.datasets=e.datasets||[],e.labels=e.label...
  function nx (line 11) | function nx(e){return e=e||{},e.data=Ah(e.data),Ph(e),e}
  function bi (line 11) | function bi(e,t){let s=Dl.get(e);return s||(s=t(),Dl.set(e,s),Rh.add(s)),s}
  class ix (line 11) | class ix{constructor(t){this._config=nx(t),this._scopeCache=new Map,this...
    method constructor (line 11) | constructor(t){this._config=nx(t),this._scopeCache=new Map,this._resol...
    method platform (line 11) | get platform(){return this._config.platform}
    method type (line 11) | get type(){return this._config.type}
    method type (line 11) | set type(t){this._config.type=t}
    method data (line 11) | get data(){return this._config.data}
    method data (line 11) | set data(t){this._config.data=Ah(t)}
    method options (line 11) | get options(){return this._config.options}
    method options (line 11) | set options(t){this._config.options=t}
    method plugins (line 11) | get plugins(){return this._config.plugins}
    method update (line 11) | update(){const t=this._config;this.clearCache(),Ph(t)}
    method clearCache (line 11) | clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}
    method datasetScopeKeys (line 11) | datasetScopeKeys(t){return bi(t,()=>[[`datasets.${t}`,""]])}
    method datasetAnimationScopeKeys (line 11) | datasetAnimationScopeKeys(t,s){return bi(`${t}.transition.${s}`,()=>[[...
    method datasetElementScopeKeys (line 11) | datasetElementScopeKeys(t,s){return bi(`${t}-${s}`,()=>[[`datasets.${t...
    method pluginScopeKeys (line 11) | pluginScopeKeys(t){const s=t.id,n=this.type;return bi(`${n}-plugin-${s...
    method _cachedScopes (line 11) | _cachedScopes(t,s){const n=this._scopeCache;let i=n.get(t);return(!i||...
    method getOptionScopes (line 11) | getOptionScopes(t,s,n){const{options:i,type:o}=this,r=this._cachedScop...
    method chartOptionScopes (line 11) | chartOptionScopes(){const{options:t,type:s}=this;return[t,$s[s]||{},Rt...
    method resolveNamedOptions (line 11) | resolveNamedOptions(t,s,n,i=[""]){const o={$shared:!0},{resolver:r,sub...
    method createResolver (line 11) | createResolver(t,s,n=[""],i){const{resolver:o}=Il(this._resolverCache,...
  function Il (line 11) | function Il(e,t,s){let n=e.get(t);n||(n=new Map,e.set(t,n));const i=s.jo...
  function rx (line 11) | function rx(e,t){const{isScriptable:s,isIndexable:n}=rh(e);for(const i o...
  function Ll (line 11) | function Ll(e,t){return e==="top"||e==="bottom"||lx.indexOf(e)===-1&&t==...
  function Fl (line 11) | function Fl(e,t){return function(s,n){return s[e]===n[e]?s[t]-n[t]:s[e]-...
  function Nl (line 11) | function Nl(e){const t=e.chart,s=t.options.animation;t.notifyPlugins("af...
  function cx (line 11) | function cx(e){const t=e.chart,s=t.options.animation;St(s&&s.onProgress,...
  function Oh (line 11) | function Oh(e){return Xr()&&typeof e=="string"?e=document.getElementById...
  function ux (line 11) | function ux(e,t,s){const n=Object.keys(e);for(const i of n){const o=+i;i...
  function hx (line 11) | function hx(e,t,s,n){return!s||e.type==="mouseout"?null:n?t:e}
  class Ai (line 11) | class Ai{static defaults=Rt;static instances=Pi;static overrides=$s;stat...
    method register (line 11) | static register(...t){Ee.add(...t),$l()}
    method unregister (line 11) | static unregister(...t){Ee.remove(...t),$l()}
    method constructor (line 11) | constructor(t,s){const n=this.config=new ix(s),i=Oh(t),o=Bl(i);if(o)th...
    method aspectRatio (line 11) | get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:s},...
    method data (line 11) | get data(){return this.config.data}
    method data (line 11) | set data(t){this.config.data=t}
    method options (line 11) | get options(){return this._options}
    method options (line 11) | set options(t){this.config.options=t}
    method registry (line 11) | get registry(){return Ee}
    method _initialize (line 11) | _initialize(){return this.notifyPlugins("beforeInit"),this.options.res...
    method clear (line 11) | clear(){return il(this.canvas,this.ctx),this}
    method stop (line 11) | stop(){return je.stop(this),this}
    method resize (line 11) | resize(t,s){je.running(this)?this._resizeBeforeDraw={width:t,height:s}...
    method _resize (line 11) | _resize(t,s){const n=this.options,i=this.canvas,o=n.maintainAspectRati...
    method ensureScalesHaveIDs (line 11) | ensureScalesHaveIDs(){const s=this.options.scales||{};bt(s,(n,i)=>{n.i...
    method buildOrUpdateScales (line 11) | buildOrUpdateScales(){const t=this.options,s=t.scales,n=this.scales,i=...
    method _updateMetasets (line 11) | _updateMetasets(){const t=this._metasets,s=this.data.datasets.length,n...
    method _removeUnreferencedMetasets (line 11) | _removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:s}}=thi...
    method buildOrUpdateControllers (line 11) | buildOrUpdateControllers(){const t=[],s=this.data.datasets;let n,i;for...
    method _resetElements (line 11) | _resetElements(){bt(this.data.datasets,(t,s)=>{this.getDatasetMeta(s)....
    method reset (line 11) | reset(){this._resetElements(),this.notifyPlugins("reset")}
    method update (line 11) | update(t){const s=this.config;s.update();const n=this._options=s.creat...
    method _updateScales (line 11) | _updateScales(){bt(this.scales,t=>{Ut.removeBox(this,t)}),this.ensureS...
    method _checkEventBindings (line 11) | _checkEventBindings(){const t=this.options,s=new Set(Object.keys(this....
    method _updateHiddenIndices (line 11) | _updateHiddenIndices(){const{_hiddenIndices:t}=this,s=this._getUniform...
    method _getUniformDataChanges (line 11) | _getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)re...
    method _updateLayout (line 11) | _updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})...
    method _updateDatasets (line 11) | _updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:...
    method _updateDataset (line 11) | _updateDataset(t,s){const n=this.getDatasetMeta(t),i={meta:n,index:t,m...
    method render (line 11) | render(){this.notifyPlugins("beforeRender",{cancelable:!0})!==!1&&(je....
    method draw (line 11) | draw(){let t;if(this._resizeBeforeDraw){const{width:n,height:i}=this._...
    method _getSortedDatasetMetas (line 11) | _getSortedDatasetMetas(t){const s=this._sortedMetasets,n=[];let i,o;fo...
    method getSortedVisibleDatasetMetas (line 11) | getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}
    method _drawDatasets (line 11) | _drawDatasets(){if(this.notifyPlugins("beforeDatasetsDraw",{cancelable...
    method _drawDataset (line 11) | _drawDataset(t){const s=this.ctx,n={meta:t,index:t.index,cancelable:!0...
    method isPointInArea (line 11) | isPointInArea(t){return Xe(t,this.chartArea,this._minPadding)}
    method getElementsAtEventForMode (line 11) | getElementsAtEventForMode(t,s,n,i){const o=ly.modes[s];return typeof o...
    method getDatasetMeta (line 11) | getDatasetMeta(t){const s=this.data.datasets[t],n=this._metasets;let i...
    method getContext (line 11) | getContext(){return this.$context||(this.$context=xs(null,{chart:this,...
    method getVisibleDatasetCount (line 11) | getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().le...
    method isDatasetVisible (line 11) | isDatasetVisible(t){const s=this.data.datasets[t];if(!s)return!1;const...
    method setDatasetVisibility (line 11) | setDatasetVisibility(t,s){const n=this.getDatasetMeta(t);n.hidden=!s}
    method toggleDataVisibility (line 11) | toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}
    method getDataVisibility (line 11) | getDataVisibility(t){return!this._hiddenIndices[t]}
    method _updateVisibility (line 11) | _updateVisibility(t,s,n){const i=n?"show":"hide",o=this.getDatasetMeta...
    method hide (line 11) | hide(t,s){this._updateVisibility(t,s,!1)}
    method show (line 11) | show(t,s){this._updateVisibility(t,s,!0)}
    method _destroyDatasetMeta (line 11) | _destroyDatasetMeta(t){const s=this._metasets[t];s&&s.controller&&s.co...
    method _stop (line 11) | _stop(){let t,s;for(this.stop(),je.remove(this),t=0,s=this.data.datase...
    method destroy (line 11) | destroy(){this.notifyPlugins("beforeDestroy");const{canvas:t,ctx:s}=th...
    method toBase64Image (line 11) | toBase64Image(...t){return this.canvas.toDataURL(...t)}
    method bindEvents (line 11) | bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindRe...
    method bindUserEvents (line 11) | bindUserEvents(){const t=this._listeners,s=this.platform,n=(o,r)=>{s.a...
    method bindResponsiveEvents (line 11) | bindResponsiveEvents(){this._responsiveListeners||(this._responsiveLis...
    method unbindEvents (line 11) | unbindEvents(){bt(this._listeners,(t,s)=>{this.platform.removeEventLis...
    method updateHoverStyle (line 11) | updateHoverStyle(t,s,n){const i=n?"set":"remove";let o,r,a,l;for(s==="...
    method getActiveElements (line 11) | getActiveElements(){return this._active||[]}
    method setActiveElements (line 11) | setActiveElements(t){const s=this._active||[],n=t.map(({datasetIndex:o...
    method notifyPlugins (line 11) | notifyPlugins(t,s,n){return this._plugins.notify(this,t,s,n)}
    method isPluginEnabled (line 11) | isPluginEnabled(t){return this._plugins._cache.filter(s=>s.plugin.id==...
    method _updateHoverStyles (line 11) | _updateHoverStyles(t,s,n){const i=this.options.hover,o=(l,c)=>l.filter...
    method _eventHandler (line 11) | _eventHandler(t,s){const n={event:t,replay:s,cancelable:!0,inChartArea...
    method _handleEvent (line 11) | _handleEvent(t,s,n){const{_active:i=[],options:o}=this,r=s,a=this._get...
    method _getActiveElements (line 11) | _getActiveElements(t,s,n,i){if(t.type==="mouseout")return[];if(!n)retu...
  function $l (line 11) | function $l(){return bt(Ai.instances,e=>e._plugins.invalidate())}
  function dx (line 11) | function dx(e,t,s){const{startAngle:n,x:i,y:o,outerRadius:r,innerRadius:...
  function fx (line 11) | function fx(e,t,s){const{startAngle:n,pixelMargin:i,x:o,y:r,outerRadius:...
  function px (line 11) | function px(e){return Ur(e,["outerStart","outerEnd","innerStart","innerE...
  function gx (line 11) | function gx(e,t,s,n){const i=px(e.options.borderRadius),o=(s-t)/2,r=Math...
  function Ws (line 11) | function Ws(e,t,s,n){return{x:s+e*Math.cos(t),y:n+e*Math.sin(t)}}
  function zi (line 11) | function zi(e,t,s,n,i,o){const{x:r,y:a,startAngle:l,pixelMargin:c,innerR...
  function mx (line 11) | function mx(e,t,s,n,i){const{fullCircles:o,startAngle:r,circumference:a}...
  function bx (line 11) | function bx(e,t,s,n,i){const{fullCircles:o,startAngle:r,circumference:a,...
  class _x (line 11) | class _x extends is{static id="arc";static defaults={borderAlign:"center...
    method constructor (line 11) | constructor(t){super(),this.options=void 0,this.circumference=void 0,t...
    method inRange (line 11) | inRange(t,s,n){const i=this.getProps(["x","y"],n),{angle:o,distance:r}...
    method getCenterPoint (line 11) | getCenterPoint(t){const{x:s,y:n,startAngle:i,endAngle:o,innerRadius:r,...
    method tooltipPosition (line 11) | tooltipPosition(t){return this.getCenterPoint(t)}
    method draw (line 11) | draw(t){const{options:s,circumference:n}=this,i=(s.offset||0)/4,o=(s.s...
  function Th (line 11) | function Th(e,t,s=t){e.lineCap=Z(s.borderCapStyle,t.borderCapStyle),e.se...
  function yx (line 11) | function yx(e,t,s){e.lineTo(s.x,s.y)}
  function xx (line 11) | function xx(e){return e.stepped?L_:e.tension||e.cubicInterpolationMode==...
  function Eh (line 11) | function Eh(e,t,s={}){const n=e.length,{start:i=0,end:o=n-1}=s,{start:r,...
  function vx (line 11) | function vx(e,t,s,n){const{points:i,options:o}=t,{count:r,start:a,loop:l...
  function wx (line 11) | function wx(e,t,s,n){const i=t.points,{count:o,start:r,ilen:a}=Eh(i,s,n)...
  function cr (line 11) | function cr(e){const t=e.options,s=t.borderDash&&t.borderDash.length;ret...
  function Sx (line 11) | function Sx(e){return e.stepped?p0:e.tension||e.cubicInterpolationMode==...
  function kx (line 11) | function kx(e,t,s,n){let i=t._path;i||(i=t._path=new Path2D,t.path(i,s,n...
  function Mx (line 11) | function Mx(e,t,s,n){const{segments:i,options:o}=t,r=cr(t);for(const a o...
  function Px (line 11) | function Px(e,t,s,n){Cx&&!t.options.segment?kx(e,t,s,n):Mx(e,t,s,n)}
  class uo (line 11) | class uo extends is{static id="line";static defaults={borderCapStyle:"bu...
    method constructor (line 11) | constructor(t){super(),this.animated=!0,this.options=void 0,this._char...
    method updateControlPoints (line 11) | updateControlPoints(t,s){const n=this.options;if((n.tension||n.cubicIn...
    method points (line 11) | set points(t){this._points=t,delete this._segments,delete this._path,t...
    method points (line 11) | get points(){return this._points}
    method segments (line 11) | get segments(){return this._segments||(this._segments=v0(this,this.opt...
    method first (line 11) | first(){const t=this.segments,s=this.points;return t.length&&s[t[0].st...
    method last (line 11) | last(){const t=this.segments,s=this.points,n=t.length;return n&&s[t[n-...
    method interpolate (line 11) | interpolate(t,s){const n=this.options,i=t[s],o=this.points,r=mh(this,{...
    method pathSegment (line 11) | pathSegment(t,s,n){return cr(this)(t,this,s,n)}
    method path (line 11) | path(t,s,n){const i=this.segments,o=cr(this);let r=this._loop;s=s||0,n...
    method draw (line 11) | draw(t,s,n,i){const o=this.options||{};(this.points||[]).length&&o.bor...
  function Vl (line 11) | function Vl(e,t,s,n){const i=e.options,{[s]:o}=e.getProps([s],n);return ...
  class Ax (line 11) | class Ax extends is{static id="point";parsed;skip;stop;static defaults={...
    method constructor (line 11) | constructor(t){super(),this.options=void 0,this.parsed=void 0,this.ski...
    method inRange (line 11) | inRange(t,s,n){const i=this.options,{x:o,y:r}=this.getProps(["x","y"],...
    method inXRange (line 11) | inXRange(t,s){return Vl(this,t,"x",s)}
    method inYRange (line 11) | inYRange(t,s){return Vl(this,t,"y",s)}
    method getCenterPoint (line 11) | getCenterPoint(t){const{x:s,y:n}=this.getProps(["x","y"],t);return{x:s...
    method size (line 11) | size(t){t=t||this.options||{};let s=t.radius||0;s=Math.max(s,s&&t.hove...
    method draw (line 11) | draw(t,s){const n=this.options;this.skip||n.radius<.1||!Xe(this,s,this...
    method getRange (line 11) | getRange(){const t=this.options||{};return t.radius+t.hitRadius}
  function Dh (line 11) | function Dh(e,t){const{x:s,y:n,base:i,width:o,height:r}=e.getProps(["x",...
  function fs (line 11) | function fs(e,t,s,n){return e?0:Bt(t,s,n)}
  function Rx (line 11) | function Rx(e,t,s){const n=e.options.borderWidth,i=e.borderSkipped,o=oh(...
  function Ox (line 11) | function Ox(e,t,s){const{enableBorderRadius:n}=e.getProps(["enableBorder...
  function Tx (line 11) | function Tx(e){const t=Dh(e),s=t.right-t.left,n=t.bottom-t.top,i=Rx(e,s/...
  function Fo (line 11) | function Fo(e,t,s,n){const i=t===null,o=s===null,a=e&&!(i&&o)&&Dh(e,n);r...
  function Ex (line 11) | function Ex(e){return e.topLeft||e.topRight||e.bottomLeft||e.bottomRight}
  function Dx (line 11) | function Dx(e,t){e.rect(t.x,t.y,t.w,t.h)}
  function No (line 11) | function No(e,t,s={}){const n=e.x!==s.x?-t:0,i=e.y!==s.y?-t:0,o=(e.x+e.w...
  class Ix (line 11) | class Ix extends is{static id="bar";static defaults={borderSkipped:"star...
    method constructor (line 11) | constructor(t){super(),this.options=void 0,this.horizontal=void 0,this...
    method draw (line 11) | draw(t){const{inflateAmount:s,options:{borderColor:n,backgroundColor:i...
    method inRange (line 11) | inRange(t,s,n){return Fo(this,t,s,n)}
    method inXRange (line 11) | inXRange(t,s){return Fo(this,t,null,s)}
    method inYRange (line 11) | inYRange(t,s){return Fo(this,null,t,s)}
    method getCenterPoint (line 11) | getCenterPoint(t){const{x:s,y:n,base:i,horizontal:o}=this.getProps(["x...
    method getRange (line 11) | getRange(t){return t==="x"?this.width/2:this.height/2}
  function Ih (line 11) | function Ih(e){return ur[e%ur.length]}
  function Lh (line 11) | function Lh(e){return jl[e%jl.length]}
  function Fx (line 11) | function Fx(e,t){return e.borderColor=Ih(t),e.backgroundColor=Lh(t),++t}
  function Nx (line 11) | function Nx(e,t){return e.backgroundColor=e.data.map(()=>Ih(t++)),t}
  function Bx (line 11) | function Bx(e,t){return e.backgroundColor=e.data.map(()=>Lh(t++)),t}
  function $x (line 11) | function $x(e){let t=0;return(s,n)=>{const i=e.getDatasetMeta(n).control...
  function Hl (line 11) | function Hl(e){let t;for(t in e)if(e[t].borderColor||e[t].backgroundColo...
  function Vx (line 11) | function Vx(e){return e&&(e.borderColor||e.backgroundColor)}
  function jx (line 11) | function jx(){return Rt.borderColor!=="rgba(0,0,0,0.1)"||Rt.backgroundCo...
  method beforeLayout (line 11) | beforeLayout(e,t,s){if(!s.enabled)return;const{data:{datasets:n},options...
  function zx (line 11) | function zx(e,t,s,n,i){const o=i.samples||n;if(o>=s)return e.slice(t,t+s...
  function Wx (line 11) | function Wx(e,t,s,n){let i=0,o=0,r,a,l,c,u,h,d,f,p,g;const _=[],b=t+s-1,...
  function Fh (line 11) | function Fh(e){if(e._decimated){const t=e._data;delete e._decimated,dele...
  function zl (line 11) | function zl(e){e.data.datasets.forEach(t=>{Fh(t)})}
  function qx (line 11) | function qx(e,t){const s=t.length;let n=0,i;const{iScale:o}=e,{min:r,max...
  method destroy (line 11) | destroy(e){zl(e)}
  function Kx (line 11) | function Kx(e,t,s){const n=e.segments,i=e.points,o=t.points,r=[];for(con...
  function hr (line 11) | function hr(e,t,s,n){if(n)return;let i=t[e],o=s[e];return e==="angle"&&(...
  function Gx (line 11) | function Gx(e,t){const{x:s=null,y:n=null}=e||{},i=t.points,o=[];return t...
  function ho (line 11) | function ho(e,t,s){for(;t>e;t--){const n=s[t];if(!isNaN(n.x)&&!isNaN(n.y...
  function Wl (line 11) | function Wl(e,t,s,n){return e&&t?n(e[s],t[s]):e?e[s]:t?t[s]:0}
  function Nh (line 11) | function Nh(e,t){let s=[],n=!1;return At(e)?(n=!0,s=e):s=Gx(e,t),s.lengt...
  function ql (line 11) | function ql(e){return e&&e.fill!==!1}
  function Yx (line 11) | function Yx(e,t,s){let i=e[t].fill;const o=[t];let r;if(!s)return i;for(...
  function Xx (line 11) | function Xx(e,t,s){const n=tv(e);if(ot(n))return isNaN(n.value)?!1:n;let...
  function Jx (line 11) | function Jx(e,t,s,n){return(e==="-"||e==="+")&&(s=t+s),s===t||s<0||s>=n?...
  function Qx (line 11) | function Qx(e,t){let s=null;return e==="start"?s=t.bottom:e==="end"?s=t....
  function Zx (line 11) | function Zx(e,t,s){let n;return e==="start"?n=s:e==="end"?n=t.options.re...
  function tv (line 11) | function tv(e){const t=e.options,s=t.fill;let n=Z(s&&s.target,s);return ...
  function ev (line 11) | function ev(e){const{scale:t,index:s,line:n}=e,i=[],o=n.segments,r=n.poi...
  function sv (line 11) | function sv(e,t){const s=[],n=e.getMatchingVisibleMetas("line");for(let ...
  function nv (line 11) | function nv(e,t,s){const n=[];for(let i=0;i<s.length;i++){const o=s[i],{...
  function iv (line 11) | function iv(e,t,s){const n=e.interpolate(t,s);if(!n)return{};const i=n[s...
  class Bh (line 11) | class Bh{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathS...
    method constructor (line 11) | constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}
    method pathSegment (line 11) | pathSegment(t,s,n){const{x:i,y:o,radius:r}=this;return s=s||{start:0,e...
    method interpolate (line 11) | interpolate(t){const{x:s,y:n,radius:i}=this,o=t.angle;return{x:s+Math....
  function ov (line 11) | function ov(e){const{chart:t,fill:s,line:n}=e;if(Tt(s))return rv(t,s);if...
  function rv (line 11) | function rv(e,t){const s=e.getDatasetMeta(t);return s&&e.isDatasetVisibl...
  function av (line 11) | function av(e){return(e.scale||{}).getPointPositionForValue?cv(e):lv(e)}
  function lv (line 11) | function lv(e){const{scale:t={},fill:s}=e,n=Qx(s,t);if(Tt(n)){const i=t....
  function cv (line 11) | function cv(e){const{scale:t,fill:s}=e,n=t.options,i=t.getLabels().lengt...
  function Bo (line 11) | function Bo(e,t,s){const n=ov(t),{chart:i,index:o,line:r,scale:a,axis:l}...
  function uv (line 11) | function uv(e,t){const{line:s,target:n,above:i,below:o,area:r,scale:a,cl...
  function Ul (line 11) | function Ul(e,t,s){const{segments:n,points:i}=t;let o=!0,r=!1;e.beginPat...
  function Kl (line 11) | function Kl(e,t,s){const{segments:n,points:i}=t;let o=!0,r=!1;e.beginPat...
  function $o (line 11) | function $o(e,t){const{line:s,target:n,property:i,color:o,scale:r,clip:a...
  function hv (line 11) | function hv(e,t,s,n){const i=t.chart.chartArea,{property:o,start:r,end:a...
  function Gl (line 11) | function Gl(e,t,s,n){const i=t.interpolate(s,n);i&&e.lineTo(i.x,i.y)}
  method afterDatasetsUpdate (line 11) | afterDatasetsUpdate(e,t,s){const n=(e.data.datasets||[]).length,i=[];let...
  method beforeDraw (line 11) | beforeDraw(e,t,s){const n=s.drawTime==="beforeDraw",i=e.getSortedVisible...
  method beforeDatasetsDraw (line 11) | beforeDatasetsDraw(e,t,s){if(s.drawTime!=="beforeDatasetsDraw")return;co...
  method beforeDatasetDraw (line 11) | beforeDatasetDraw(e,t,s){const n=t.meta.$filler;!ql(n)||s.drawTime!=="be...
  class Xl (line 11) | class Xl extends is{constructor(t){super(),this._added=!1,this.legendHit...
    method constructor (line 11) | constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hov...
    method update (line 11) | update(t,s,n){this.maxWidth=t,this.maxHeight=s,this._margins=n,this.se...
    method setDimensions (line 11) | setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.lef...
    method buildLabels (line 11) | buildLabels(){const t=this.options.labels||{};let s=St(t.generateLabel...
    method fit (line 11) | fit(){const{options:t,ctx:s}=this;if(!t.display){this.width=this.heigh...
    method _fitRows (line 11) | _fitRows(t,s,n,i){const{ctx:o,maxWidth:r,options:{labels:{padding:a}}}...
    method _fitCols (line 11) | _fitCols(t,s,n,i){const{ctx:o,maxHeight:r,options:{labels:{padding:a}}...
    method adjustHitBoxes (line 11) | adjustHitBoxes(){if(!this.options.display)return;const t=this._compute...
    method isHorizontal (line 11) | isHorizontal(){return this.options.position==="top"||this.options.posi...
    method draw (line 11) | draw(){if(this.options.display){const t=this.ctx;ro(t,this),this._draw...
    method _draw (line 11) | _draw(){const{options:t,columnSizes:s,lineWidths:n,ctx:i}=this,{align:...
    method drawTitle (line 11) | drawTitle(){const t=this.options,s=t.title,n=Nt(s.font),i=Yt(s.padding...
    method _computeTitleHeight (line 11) | _computeTitleHeight(){const t=this.options.title,s=Nt(t.font),n=Yt(t.p...
    method _getLegendItemAt (line 11) | _getLegendItemAt(t,s){let n,i,o;if(Ge(t,this.left,this.right)&&Ge(s,th...
    method handleEvent (line 11) | handleEvent(t){const s=this.options;if(!bv(t.type,s))return;const n=th...
  function pv (line 11) | function pv(e,t,s,n,i){const o=gv(n,e,t,s),r=mv(i,n,t.lineHeight);return...
  function gv (line 11) | function gv(e,t,s,n){let i=e.text;return i&&typeof i!="string"&&(i=i.red...
  function mv (line 11) | function mv(e,t,s){let n=e;return typeof t.text!="string"&&(n=$h(t,s)),n}
  function $h (line 11) | function $h(e,t){const s=e.text?e.text.length:0;return t*s}
  function bv (line 11) | function bv(e,t){return!!((e==="mousemove"||e==="mouseout")&&(t.onHover|...
  method start (line 11) | start(e,t,s){const n=e.legend=new Xl({ctx:e.ctx,options:s,chart:e});Ut.c...
  method stop (line 11) | stop(e){Ut.removeBox(e,e.legend),delete e.legend}
  method beforeUpdate (line 11) | beforeUpdate(e,t,s){const n=e.legend;Ut.configure(e,n,s),n.options=s}
  method afterUpdate (line 11) | afterUpdate(e){const t=e.legend;t.buildLabels(),t.adjustHitBoxes()}
  method afterEvent (line 11) | afterEvent(e,t){t.replay||e.legend.handleEvent(t.event)}
  method onClick (line 11) | onClick(e,t,s){const n=t.datasetIndex,i=s.chart;i.isDatasetVisible(n)?(i...
  method generateLabels (line 11) | generateLabels(e){const t=e.data.datasets,{labels:{usePointStyle:s,point...
  class ta (line 11) | class ta extends is{constructor(t){super(),this.chart=t.chart,this.optio...
    method constructor (line 11) | constructor(t){super(),this.chart=t.chart,this.options=t.options,this....
    method update (line 11) | update(t,s){const n=this.options;if(this.left=0,this.top=0,!n.display)...
    method isHorizontal (line 11) | isHorizontal(){const t=this.options.position;return t==="top"||t==="bo...
    method _drawArgs (line 11) | _drawArgs(t){const{top:s,left:n,bottom:i,right:o,options:r}=this,a=r.a...
    method draw (line 11) | draw(){const t=this.ctx,s=this.options;if(!s.display)return;const n=Nt...
  function yv (line 11) | function yv(e,t){const s=new ta({ctx:e.ctx,options:t,chart:e});Ut.config...
  method start (line 11) | start(e,t,s){yv(e,s)}
  method stop (line 11) | stop(e){const t=e.titleBlock;Ut.removeBox(e,t),delete e.titleBlock}
  method beforeUpdate (line 11) | beforeUpdate(e,t,s){const n=e.titleBlock;Ut.configure(e,n,s),n.options=s}
  method start (line 11) | start(e,t,s){const n=new ta({ctx:e.ctx,options:s,chart:e});Ut.configure(...
  method stop (line 11) | stop(e){Ut.removeBox(e,_i.get(e)),_i.delete(e)}
  method beforeUpdate (line 11) | beforeUpdate(e,t,s){const n=_i.get(e);Ut.configure(e,n,s),n.options=s}
  method average (line 11) | average(e){if(!e.length)return!1;let t,s,n=new Set,i=0,o=0;for(t=0,s=e.l...
  method nearest (line 11) | nearest(e,t){if(!e.length)return!1;let s=t.x,n=t.y,i=Number.POSITIVE_INF...
  function Oe (line 11) | function Oe(e,t){return t&&(At(t)?Array.prototype.push.apply(e,t):e.push...
  function He (line 11) | function He(e){return(typeof e=="string"||e instanceof String)&&e.indexOf(`
  function wv (line 13) | function wv(e,t){const{element:s,datasetIndex:n,index:i}=t,o=e.getDatase...
  function Jl (line 13) | function Jl(e,t){const s=e.chart.ctx,{body:n,footer:i,title:o}=e,{boxWid...
  function Sv (line 13) | function Sv(e,t){const{y:s,height:n}=t;return s<n/2?"top":s>e.height-n/2...
  function kv (line 13) | function kv(e,t,s,n){const{x:i,width:o}=n,r=s.caretSize+s.caretPadding;i...
  function Mv (line 13) | function Mv(e,t,s,n){const{x:i,width:o}=s,{width:r,chartArea:{left:a,rig...
  function Ql (line 13) | function Ql(e,t,s){const n=s.yAlign||t.yAlign||Sv(e,s);return{xAlign:s.x...
  function Cv (line 13) | function Cv(e,t){let{x:s,width:n}=e;return t==="right"?s-=n:t==="center"...
  function Pv (line 13) | function Pv(e,t,s){let{y:n,height:i}=e;return t==="top"?n+=s:t==="bottom...
  function Zl (line 13) | function Zl(e,t,s,n){const{caretSize:i,caretPadding:o,cornerRadius:r}=e,...
  function yi (line 13) | function yi(e,t,s){const n=Yt(s.padding);return t==="center"?e.x+e.width...
  function tc (line 13) | function tc(e){return Oe([],He(e))}
  function Av (line 13) | function Av(e,t,s){return xs(e,{tooltip:t,tooltipItems:s,type:"tooltip"})}
  function ec (line 13) | function ec(e,t){const s=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tool...
  method title (line 13) | title(e){if(e.length>0){const t=e[0],s=t.chart.data.labels,n=s?s.length:...
  method label (line 13) | label(e){if(this&&this.options&&this.options.mode==="dataset")return e.l...
  method labelColor (line 13) | labelColor(e){const s=e.chart.getDatasetMeta(e.datasetIndex).controller....
  method labelTextColor (line 13) | labelTextColor(){return this.options.bodyColor}
  method labelPointStyle (line 13) | labelPointStyle(e){const s=e.chart.getDatasetMeta(e.datasetIndex).contro...
  function ae (line 13) | function ae(e,t,s,n){const i=e[t].call(s,n);return typeof i>"u"?Vh[t].ca...
  class sc (line 13) | class sc extends is{static positioners=kn;constructor(t){super(),this.op...
    method constructor (line 13) | constructor(t){super(),this.opacity=0,this._active=[],this._eventPosit...
    method initialize (line 13) | initialize(t){this.options=t,this._cachedAnimations=void 0,this.$conte...
    method _resolveAnimations (line 13) | _resolveAnimations(){const t=this._cachedAnimations;if(t)return t;cons...
    method getContext (line 13) | getContext(){return this.$context||(this.$context=Av(this.chart.getCon...
    method getTitle (line 13) | getTitle(t,s){const{callbacks:n}=s,i=ae(n,"beforeTitle",this,t),o=ae(n...
    method getBeforeBody (line 13) | getBeforeBody(t,s){return tc(ae(s.callbacks,"beforeBody",this,t))}
    method getBody (line 13) | getBody(t,s){const{callbacks:n}=s,i=[];return bt(t,o=>{const r={before...
    method getAfterBody (line 13) | getAfterBody(t,s){return tc(ae(s.callbacks,"afterBody",this,t))}
    method getFooter (line 13) | getFooter(t,s){const{callbacks:n}=s,i=ae(n,"beforeFooter",this,t),o=ae...
    method _createItems (line 13) | _createItems(t){const s=this._active,n=this.chart.data,i=[],o=[],r=[];...
    method update (line 13) | update(t,s){const n=this.options.setContext(this.getContext()),i=this....
    method drawCaret (line 13) | drawCaret(t,s,n,i){const o=this.getCaretPosition(t,n,i);s.lineTo(o.x1,...
    method getCaretPosition (line 13) | getCaretPosition(t,s,n){const{xAlign:i,yAlign:o}=this,{caretSize:r,cor...
    method drawTitle (line 13) | drawTitle(t,s,n){const i=this.title,o=i.length;let r,a,l;if(o){const c...
    method _drawColorBox (line 13) | _drawColorBox(t,s,n,i,o){const r=this.labelColors[n],a=this.labelPoint...
    method drawBody (line 13) | drawBody(t,s,n){const{body:i}=this,{bodySpacing:o,bodyAlign:r,displayC...
    method drawFooter (line 13) | drawFooter(t,s,n){const i=this.footer,o=i.length;let r,a;if(o){const l...
    method drawBackground (line 13) | drawBackground(t,s,n,i){const{xAlign:o,yAlign:r}=this,{x:a,y:l}=t,{wid...
    method _updateAnimationTarget (line 13) | _updateAnimationTarget(t){const s=this.chart,n=this.$animations,i=n&&n...
    method _willRender (line 13) | _willRender(){return!!this.opacity}
    method draw (line 13) | draw(t){const s=this.options.setContext(this.getContext());let n=this....
    method getActiveElements (line 13) | getActiveElements(){return this._active||[]}
    method setActiveElements (line 13) | setActiveElements(t,s){const n=this._active,i=t.map(({datasetIndex:a,i...
    method handleEvent (line 13) | handleEvent(t,s,n=!0){if(s&&this._ignoreReplayEvents)return!1;this._ig...
    method _getActiveElements (line 13) | _getActiveElements(t,s,n,i){const o=this.options;if(t.type==="mouseout...
    method _positionChanged (line 13) | _positionChanged(t,s){const{caretX:n,caretY:i,options:o}=this,r=kn[o.p...
  method afterInit (line 13) | afterInit(e,t,s){s&&(e.tooltip=new sc({chart:e,options:s}))}
  method beforeUpdate (line 13) | beforeUpdate(e,t,s){e.tooltip&&e.tooltip.initialize(s)}
  method reset (line 13) | reset(e,t,s){e.tooltip&&e.tooltip.initialize(s)}
  method afterDraw (line 13) | afterDraw(e){const t=e.tooltip;if(t&&t._willRender()){const s={tooltip:t...
  method afterEvent (line 13) | afterEvent(e,t){if(e.tooltip){const s=t.replay;e.tooltip.handleEvent(t.e...
  function Ev (line 13) | function Ev(e,t,s,n){const i=e.indexOf(t);if(i===-1)return Tv(e,t,s,n);c...
  function nc (line 13) | function nc(e){const t=this.getLabels();return e>=0&&e<t.length?t[e]:e}
  class Iv (line 13) | class Iv extends js{static id="category";static defaults={ticks:{callbac...
    method constructor (line 13) | constructor(t){super(t),this._startValue=void 0,this._valueRange=0,thi...
    method init (line 13) | init(t){const s=this._addedLabels;if(s.length){const n=this.getLabels(...
    method parse (line 13) | parse(t,s){if(it(t))return null;const n=this.getLabels();return s=isFi...
    method determineDataLimits (line 13) | determineDataLimits(){const{minDefined:t,maxDefined:s}=this.getUserBou...
    method buildTicks (line 13) | buildTicks(){const t=this.min,s=this.max,n=this.options.offset,i=[];le...
    method getLabelForValue (line 13) | getLabelForValue(t){return nc.call(this,t)}
    method configure (line 13) | configure(){super.configure(),this.isHorizontal()||(this._reversePixel...
    method getPixelForValue (line 13) | getPixelForValue(t){return typeof t!="number"&&(t=this.parse(t)),t===n...
    method getPixelForTick (line 13) | getPixelForTick(t){const s=this.ticks;return t<0||t>s.length-1?null:th...
    method getValueForPixel (line 13) | getValueForPixel(t){return Math.round(this._startValue+this.getDecimal...
    method getBasePixel (line 13) | getBasePixel(){return this.bottom}
  function Lv (line 13) | function Lv(e,t){const s=[],{bounds:i,step:o,min:r,max:a,precision:l,cou...
  function ic (line 13) | function ic(e,t,{horizontal:s,minRotation:n}){const i=ve(n),o=(s?Math.si...
  class Wi (line 13) | class Wi extends js{constructor(t){super(t),this.start=void 0,this.end=v...
    method constructor (line 13) | constructor(t){super(t),this.start=void 0,this.end=void 0,this._startV...
    method parse (line 13) | parse(t,s){return it(t)||(typeof t=="number"||t instanceof Number)&&!i...
    method handleTickRangeOptions (line 13) | handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined...
    method getTickLimit (line 13) | getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:s,stepSize...
    method computeTickLimit (line 13) | computeTickLimit(){return Number.POSITIVE_INFINITY}
    method buildTicks (line 13) | buildTicks(){const t=this.options,s=t.ticks;let n=this.getTickLimit();...
    method configure (line 13) | configure(){const t=this.ticks;let s=this.min,n=this.max;if(super.conf...
    method getLabelForValue (line 13) | getLabelForValue(t){return ei(t,this.chart.options.locale,this.options...
  class Fv (line 13) | class Fv extends Wi{static id="linear";static defaults={ticks:{callback:...
    method determineDataLimits (line 13) | determineDataLimits(){const{min:t,max:s}=this.getMinMax(!0);this.min=T...
    method computeTickLimit (line 13) | computeTickLimit(){const t=this.isHorizontal(),s=t?this.width:this.hei...
    method getPixelForValue (line 13) | getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-thi...
    method getValueForPixel (line 13) | getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)...
  function oc (line 13) | function oc(e){return e/Math.pow(10,Yn(e))===1}
  function rc (line 13) | function rc(e,t,s){const n=Math.pow(10,s),i=Math.floor(e/n);return Math....
  function Nv (line 13) | function Nv(e,t){const s=t-e;let n=Yn(s);for(;rc(e,t,n)>10;)n++;for(;rc(...
  function Bv (line 13) | function Bv(e,{min:t,max:s}){t=de(e.min,t);const n=[],i=Yn(t);let o=Nv(t...
  class $v (line 13) | class $v extends js{static id="logarithmic";static defaults={ticks:{call...
    method constructor (line 13) | constructor(t){super(t),this.start=void 0,this.end=void 0,this._startV...
    method parse (line 13) | parse(t,s){const n=Wi.prototype.parse.apply(this,[t,s]);if(n===0){this...
    method determineDataLimits (line 13) | determineDataLimits(){const{min:t,max:s}=this.getMinMax(!0);this.min=T...
    method handleTickRangeOptions (line 13) | handleTickRangeOptions(){const{minDefined:t,maxDefined:s}=this.getUser...
    method buildTicks (line 13) | buildTicks(){const t=this.options,s={min:this._userMin,max:this._userM...
    method getLabelForValue (line 13) | getLabelForValue(t){return t===void 0?"0":ei(t,this.chart.options.loca...
    method configure (line 13) | configure(){const t=this.min;super.configure(),this._startValue=hs(t),...
    method getPixelForValue (line 13) | getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||...
    method getValueForPixel (line 13) | getValueForPixel(t){const s=this.getDecimalForPixel(t);return Math.pow...
  function dr (line 13) | function dr(e){const t=e.ticks;if(t.display&&e.display){const s=Yt(t.bac...
  function Vv (line 13) | function Vv(e,t,s){return s=At(s)?s:[s],{w:I_(e,t.string,s),h:s.length*t...
  function ac (line 13) | function ac(e,t,s,n,i){return e===n||e===i?{start:t-s/2,end:t+s/2}:e<n||...
  function jv (line 13) | function jv(e){const t={l:e.left+e._padding.left,r:e.right-e._padding.ri...
  function Hv (line 13) | function Hv(e,t,s,n,i){const o=Math.abs(Math.sin(s)),r=Math.abs(Math.cos...
  function zv (line 13) | function zv(e,t,s){const n=e.drawingArea,{extra:i,additionalAngle:o,padd...
  function Wv (line 13) | function Wv(e,t){if(!t)return!0;const{left:s,top:n,right:i,bottom:o}=e;r...
  function qv (line 13) | function qv(e,t,s){const n=[],i=e._pointLabels.length,o=e.options,{cente...
  function Uv (line 13) | function Uv(e){return e===0||e===180?"center":e<180?"left":"right"}
  function Kv (line 13) | function Kv(e,t,s){return s==="right"?e-=t:s==="center"&&(e-=t/2),e}
  function Gv (line 13) | function Gv(e,t,s){return s===90||s===270?e-=t/2:(s>270||s<90)&&(e-=t),e}
  function Yv (line 13) | function Yv(e,t,s){const{left:n,top:i,right:o,bottom:r}=s,{backdropColor...
  function Xv (line 13) | function Xv(e,t){const{ctx:s,options:{pointLabels:n}}=e;for(let i=t-1;i>...
  function jh (line 13) | function jh(e,t,s,n){const{ctx:i}=e;if(s)i.arc(e.xCenter,e.yCenter,t,0,M...
  function Jv (line 13) | function Jv(e,t,s,n,i){const o=e.ctx,r=t.circular,{color:a,lineWidth:l}=...
  function Qv (line 13) | function Qv(e,t,s){return xs(e,{label:s,index:t,type:"pointLabel"})}
  class Zv (line 13) | class Zv extends Wi{static id="radialLinear";static defaults={display:!0...
    method callback (line 13) | callback(t){return t}
    method constructor (line 13) | constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.d...
    method setDimensions (line 13) | setDimensions(){const t=this._padding=Yt(dr(this.options)/2),s=this.wi...
    method determineDataLimits (line 13) | determineDataLimits(){const{min:t,max:s}=this.getMinMax(!1);this.min=T...
    method computeTickLimit (line 13) | computeTickLimit(){return Math.ceil(this.drawingArea/dr(this.options))}
    method generateTickLabels (line 13) | generateTickLabels(t){Wi.prototype.generateTickLabels.call(this,t),thi...
    method fit (line 13) | fit(){const t=this.options;t.display&&t.pointLabels.display?jv(this):t...
    method setCenterPoint (line 13) | setCenterPoint(t,s,n,i){this.xCenter+=Math.floor((t-s)/2),this.yCenter...
    method getIndexAngle (line 13) | getIndexAngle(t){const s=Mt/(this._pointLabels.length||1),n=this.optio...
    method getDistanceFromCenterForValue (line 13) | getDistanceFromCenterForValue(t){if(it(t))return NaN;const s=this.draw...
    method getValueForDistanceFromCenter (line 13) | getValueForDistanceFromCenter(t){if(it(t))return NaN;const s=t/(this.d...
    method getPointLabelContext (line 13) | getPointLabelContext(t){const s=this._pointLabels||[];if(t>=0&&t<s.len...
    method getPointPosition (line 13) | getPointPosition(t,s,n=0){const i=this.getIndexAngle(t)-Dt+n;return{x:...
    method getPointPositionForValue (line 13) | getPointPositionForValue(t,s){return this.getPointPosition(t,this.getD...
    method getBasePosition (line 13) | getBasePosition(t){return this.getPointPositionForValue(t||0,this.getB...
    method getPointLabelPosition (line 13) | getPointLabelPosition(t){const{left:s,top:n,right:i,bottom:o}=this._po...
    method drawBackground (line 13) | drawBackground(){const{backgroundColor:t,grid:{circular:s}}=this.optio...
    method drawGrid (line 13) | drawGrid(){const t=this.ctx,s=this.options,{angleLines:n,grid:i,border...
    method drawBorder (line 13) | drawBorder(){}
    method drawLabels (line 13) | drawLabels(){const t=this.ctx,s=this.options,n=s.ticks;if(!n.display)r...
    method drawTitle (line 13) | drawTitle(){}
  function lc (line 13) | function lc(e,t){return e-t}
  function cc (line 13) | function cc(e,t){if(it(t))return null;const s=e._adapter,{parser:n,round...
  function uc (line 13) | function uc(e,t,s,n){const i=ce.length;for(let o=ce.indexOf(e);o<i-1;++o...
  function t1 (line 13) | function t1(e,t,s,n,i){for(let o=ce.length-1;o>=ce.indexOf(s);o--){const...
  function e1 (line 13) | function e1(e){for(let t=ce.indexOf(e)+1,s=ce.length;t<s;++t)if(fo[ce[t]...
  function hc (line 13) | function hc(e,t,s){if(!s)e[t]=!0;else if(s.length){const{lo:n,hi:i}=zr(s...
  function s1 (line 13) | function s1(e,t,s,n){const i=e._adapter,o=+i.startOf(t[0].value,n),r=t[t...
  function dc (line 13) | function dc(e,t,s){const n=[],i={},o=t.length;let r,a;for(r=0;r<o;++r)a=...
  class fr (line 13) | class fr extends js{static id="time";static defaults={bounds:"data",adap...
    method constructor (line 13) | constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._u...
    method init (line 13) | init(t,s={}){const n=t.time||(t.time={}),i=this._adapter=new ny._date(...
    method parse (line 13) | parse(t,s){return t===void 0?null:cc(this,t)}
    method beforeLayout (line 13) | beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all...
    method determineDataLimits (line 13) | determineDataLimits(){const t=this.options,s=this._adapter,n=t.time.un...
    method _getLabelBounds (line 13) | _getLabelBounds(){const t=this.getLabelTimestamps();let s=Number.POSIT...
    method buildTicks (line 13) | buildTicks(){const t=this.options,s=t.time,n=t.ticks,i=n.source==="lab...
    method afterAutoSkip (line 13) | afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(thi...
    method initOffsets (line 13) | initOffsets(t=[]){let s=0,n=0,i,o;this.options.offset&&t.length&&(i=th...
    method _generate (line 13) | _generate(){const t=this._adapter,s=this.min,n=this.max,i=this.options...
    method getLabelForValue (line 13) | getLabelForValue(t){const s=this._adapter,n=this.options.time;return n...
    method format (line 13) | format(t,s){const i=this.options.time.displayFormats,o=this._unit,r=s|...
    method _tickFormatFunction (line 13) | _tickFormatFunction(t,s,n,i){const o=this.options,r=o.ticks.callback;i...
    method generateTickLabels (line 13) | generateTickLabels(t){let s,n,i;for(s=0,n=t.length;s<n;++s)i=t[s],i.la...
    method getDecimalForValue (line 13) | getDecimalForValue(t){return t===null?NaN:(t-this.min)/(this.max-this....
    method getPixelForValue (line 13) | getPixelForValue(t){const s=this._offsets,n=this.getDecimalForValue(t)...
    method getValueForPixel (line 13) | getValueForPixel(t){const s=this._offsets,n=this.getDecimalForPixel(t)...
    method _getLabelSize (line 13) | _getLabelSize(t){const s=this.options.ticks,n=this.ctx.measureText(t)....
    method _getLabelCapacity (line 13) | _getLabelCapacity(t){const s=this.options.time,n=s.displayFormats,i=n[...
    method getDataTimestamps (line 13) | getDataTimestamps(){let t=this._cache.data||[],s,n;if(t.length)return ...
    method getLabelTimestamps (line 13) | getLabelTimestamps(){const t=this._cache.labels||[];let s,n;if(t.lengt...
    method normalize (line 13) | normalize(t){return Qu(t.sort(lc))}
  function xi (line 13) | function xi(e,t,s){let n=0,i=e.length-1,o,r,a,l;s?(t>=e[n].pos&&t<=e[i]....
  class n1 (line 13) | class n1 extends fr{static id="timeseries";static defaults=fr.defaults;c...
    method constructor (line 13) | constructor(t){super(t),this._table=[],this._minPos=void 0,this._table...
    method initOffsets (line 13) | initOffsets(){const t=this._getTimestampsForTable(),s=this._table=this...
    method buildLookupTable (line 13) | buildLookupTable(t){const{min:s,max:n}=this,i=[],o=[];let r,a,l,c,u;fo...
    method _generate (line 13) | _generate(){const t=this.min,s=this.max;let n=super.getDataTimestamps(...
    method _getTimestampsForTable (line 13) | _getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return ...
    method getDecimalForValue (line 13) | getDecimalForValue(t){return(xi(this._table,t)-this._minPos)/this._tab...
    method getValueForPixel (line 13) | getValueForPixel(t){const s=this._offsets,n=this.getDecimalForPixel(t)...
  method setup (line 13) | setup(e){Ai.register(...o1);const t=et(!1),s=et({routes:[],...window.Api...
  method setup (line 13) | setup(e){const{toasts:t}=io(),s=n=>({success:"✓",error:"✕",info:"ℹ"})[n]...
  function Hh (line 13) | function Hh(e){return typeof e=="object"||"displayName"in e||"props"in e...
  function z1 (line 13) | function z1(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e....
  function Vo (line 13) | function Vo(e,t){const s={};for(const n in t){const i=t[n];s[n]=Me(i)?i....
  function fc (line 13) | function fc(e,t){const s={};for(const n in e)s[n]=n in t?t[n]:e[n];retur...
  function ea (line 13) | function ea(e){return e==null?"":encodeURI(""+e).replace(J1,"|").replace...
  function Z1 (line 13) | function Z1(e){return ea(e).replace(Uh,"{").replace(Kh,"}").replace(qh,"...
  function pr (line 13) | function pr(e){return ea(e).replace(Wh,"%2B").replace(Q1,"+").replace(zh...
  function tw (line 13) | function tw(e){return pr(e).replace(U1,"%3D")}
  function ew (line 13) | function ew(e){return ea(e).replace(zh,"%23").replace(K1,"%3F")}
  function sw (line 13) | function sw(e){return ew(e).replace(q1,"%2F")}
  function Xn (line 13) | function Xn(e){if(e==null)return null;try{return decodeURIComponent(""+e...
  function jo (line 13) | function jo(e,t,s="/"){let n,i={},o="",r="";const a=t.indexOf("#");let l...
  function ow (line 13) | function ow(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+...
  function pc (line 13) | function pc(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?...
  function rw (line 13) | function rw(e,t,s){const n=t.matched.length-1,i=s.matched.length-1;retur...
  function an (line 13) | function an(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}
  function Gh (line 13) | function Gh(e,t){if(Object.keys(e).length!==Object.keys(t).length)return...
  function aw (line 13) | function aw(e,t){return Me(e)?gc(e,t):Me(t)?gc(t,e):e?.valueOf()===t?.va...
  function gc (line 13) | function gc(e,t){return Me(t)?e.length===t.length&&e.every((s,n)=>s===t[...
  function lw (line 13) | function lw(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t....
  function cw (line 13) | function cw(e){if(!e)if(Us){const t=document.querySelector("base");e=t&&...
  function hw (line 13) | function hw(e,t){return e.replace(uw,"#")+t}
  function dw (line 13) | function dw(e,t){const s=document.documentElement.getBoundingClientRect(...
  function fw (line 13) | function fw(e){let t;if("el"in e){const s=e.el,n=typeof s=="string"&&s.s...
  function mc (line 13) | function mc(e,t){return(history.state?history.state.position-t:-1)+e}
  function pw (line 13) | function pw(e,t){mr.set(e,t)}
  function gw (line 13) | function gw(e){const t=mr.get(e);return mr.delete(e),t}
  function mw (line 13) | function mw(e){return typeof e=="string"||e&&typeof e=="object"}
  function Yh (line 13) | function Yh(e){return typeof e=="string"||typeof e=="symbol"}
  function ln (line 13) | function ln(e,t){return ft(new Error,{type:e,[Xh]:!0},t)}
  function Ve (line 13) | function Ve(e,t){return e instanceof Error&&Xh in e&&(t==null||!!(e.type...
  function _w (line 13) | function _w(e){if(typeof e=="string")return e;if(e.path!=null)return e.p...
  function yw (line 13) | function yw(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?...
  function bc (line 13) | function bc(e){let t="";for(let s in e){const n=e[s];if(s=tw(s),n==null)...
  function xw (line 13) | function xw(e){const t={};for(const s in e){const n=e[s];n!==void 0&&(t[...
  function yn (line 13) | function yn(){let e=[];function t(n){return e.push(n),()=>{const i=e.ind...
  function cs (line 13) | function cs(e,t,s,n,i,o=r=>r()){const r=n&&(n.enterCallbacks[i]=n.enterC...
  function zo (line 13) | function zo(e,t,s,n,i=o=>o()){const o=[];for(const r of e)for(const a in...
  function ww (line 13) | function ww(e,t){const s=[],n=[],i=[],o=Math.max(t.matched.length,e.matc...
  function Qh (line 13) | function Qh(e,t){const{pathname:s,search:n,hash:i}=t,o=e.indexOf("#");if...
  function kw (line 13) | function kw(e,t,s,n){let i=[],o=[],r=null;const a=({state:d})=>{const f=...
  function yc (line 13) | function yc(e,t,s,n=!1,i=!1){return{back:e,current:t,forward:s,replaced:...
  function Mw (line 13) | function Mw(e){const{history:t,location:s}=window,n={value:Qh(e,s)},i={v...
  function Cw (line 13) | function Cw(e){e=cw(e);const t=Mw(e),s=kw(e,t.state,t.location,t.replace...
  function Rw (line 13) | function Rw(e){if(!e)return[[]];if(e==="/")return[[Pw]];if(!e.startsWith...
  function Ew (line 13) | function Ew(e,t){const s=ft({},Ow,t),n=[];let i=s.start?"^":"";const o=[...
  function Dw (line 13) | function Dw(e,t){let s=0;for(;s<e.length&&s<t.length;){const n=t[s]-e[s]...
  function Zh (line 13) | function Zh(e,t){let s=0;const n=e.score,i=t.score;for(;s<n.length&&s<i....
  function vc (line 13) | function vc(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}
  function Lw (line 13) | function Lw(e,t,s){const n=Ew(Rw(e.path),s),i=ft(n,{record:e,parent:t,ch...
  function Fw (line 13) | function Fw(e,t){const s=[],n=new Map;t=fc(Iw,t);function i(h){return n....
  function wc (line 13) | function wc(e,t){const s={};for(const n of t)n in e&&(s[n]=e[n]);return s}
  function Sc (line 13) | function Sc(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta...
  function Nw (line 13) | function Nw(e){const t={},s=e.props||!1;if("component"in e)t.default=s;e...
  function kc (line 13) | function kc(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}
  function Bw (line 13) | function Bw(e){return e.reduce((t,s)=>ft(t,s.meta),{})}
  function $w (line 13) | function $w(e,t){let s=0,n=t.length;for(;s!==n;){const o=s+n>>1;Zh(e,t[o...
  function Vw (line 13) | function Vw(e){let t=e;for(;t=t.parent;)if(td(t)&&Zh(e,t)===0)return t}
  function td (line 13) | function td({record:e}){return!!(e.name||e.components&&Object.keys(e.com...
  function Mc (line 13) | function Mc(e){const t=Je(sa),s=Je(Jh),n=qt(()=>{const l=_e(e.to);return...
  function jw (line 13) | function jw(e){return e.length===1?e[0]:e}
  method setup (line 13) | setup(e,{slots:t}){const s=Zs(Mc(e)),{options:n}=Je(sa),i=qt(()=>({[Pc(e...
  function Ww (line 13) | function Ww(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defa...
  function qw (line 13) | function qw(e,t){for(const s in t){const n=t[s],i=e[s];if(typeof n=="str...
  function Cc (line 13) | function Cc(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}
  method setup (line 13) | setup(e,{attrs:t,slots:s}){const n=Je(br),i=qt(()=>e.route||n.value),o=J...
  function Ac (line 13) | function Ac(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}
  function Gw (line 13) | function Gw(e){const t=Fw(e.routes,e),s=e.parseQuery||yw,n=e.stringifyQu...

FILE: resources/js/app.js
  method created (line 22) | created() {

FILE: resources/js/composables/activityLogs.js
  function useActivityLogs (line 5) | function useActivityLogs() {

FILE: resources/js/composables/auth.js
  function useAuth (line 12) | function useAuth() {

FILE: resources/js/composables/categories.js
  function useCategories (line 4) | function useCategories() {

FILE: resources/js/composables/permissions.js
  function usePermissions (line 4) | function usePermissions() {

FILE: resources/js/composables/posts.js
  function usePosts (line 4) | function usePosts() {

FILE: resources/js/composables/profile.js
  function useProfile (line 5) | function useProfile() {

FILE: resources/js/composables/roles.js
  function useRoles (line 4) | function useRoles() {

FILE: resources/js/composables/users.js
  function useUsers (line 4) | function useUsers() {

FILE: resources/js/plugins/i18n.js
  function loadMessages (line 16) | async function loadMessages(locale) {

FILE: resources/js/routes/routes.js
  function requireLogin (line 10) | function requireLogin(to, from, next) {
  function guest (line 22) | function guest(to, from, next) {

FILE: resources/js/store/lang.js
  function getLocale (line 25) | function getLocale (locales, fallback) {

FILE: tests/CreatesApplication.php
  type CreatesApplication (line 7) | trait CreatesApplication
    method createApplication (line 14) | public function createApplication()

FILE: tests/Feature/ExampleTest.php
  class ExampleTest (line 8) | class ExampleTest extends TestCase
    method test_the_application_returns_a_successful_response (line 15) | public function test_the_application_returns_a_successful_response()

FILE: tests/TestCase.php
  class TestCase (line 7) | abstract class TestCase extends BaseTestCase

FILE: tests/Unit/ExampleTest.php
  class ExampleTest (line 7) | class ExampleTest extends TestCase
    method test_that_true_is_true (line 14) | public function test_that_true_is_true()
Condensed preview — 227 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (924K chars).
[
  {
    "path": ".editorconfig",
    "chars": 258,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntrim_"
  },
  {
    "path": ".gitattributes",
    "chars": 179,
    "preview": "* text=auto\n\n*.blade.php diff=html\n*.css diff=css\n*.html diff=html\n*.md diff=markdown\n*.php diff=php\n\n/.github export-ig"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 834,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/custom.md",
    "chars": 126,
    "preview": "---\nname: Custom issue template\nabout: Describe this issue template's purpose here.\ntitle: ''\nlabels: ''\nassignees: ''\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 595,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
  },
  {
    "path": ".gitignore",
    "chars": 283,
    "preview": "/node_modules\n/public/build\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n.env\n.env.backup\n.phpunit.result.cache\nHo"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5223,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 190,
    "preview": "## Contributing\n\nThank you for considering contributing to the Laravel framework! The contribution guide can be found in"
  },
  {
    "path": "LICENSE",
    "chars": 1068,
    "preview": "MIT License\n\nCopyright (c) 2023 Fazle Rabbi\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
  },
  {
    "path": "README.md",
    "chars": 3447,
    "preview": "## Laravel 11 Vue.js 3 SPA Starter Boilerplate\n\nA simple and clean boilerplate to start a new SPA project with authentic"
  },
  {
    "path": "SECURITY.md",
    "chars": 480,
    "preview": "# Reporting Security Issues\n\nThe Laravel Vue3 SPA Starter highly values the contributions from the security research com"
  },
  {
    "path": "app/Console/Kernel.php",
    "chars": 681,
    "preview": "<?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as C"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "chars": 1050,
    "preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\nuse Throwable;\n\nclas"
  },
  {
    "path": "app/Helpers/Misc.php",
    "chars": 2355,
    "preview": "<?php\n\nnamespace App\\Helpers;\n\nuse Illuminate\\Support\\Str;\nuse InvalidArgumentException;\n\nclass Misc\n{\n    /**\n     * Re"
  },
  {
    "path": "app/Http/Controllers/Api/ActivityLogController.php",
    "chars": 1084,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Resources\\ActivityLogResou"
  },
  {
    "path": "app/Http/Controllers/Api/BrowserSessionController.php",
    "chars": 440,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse Cjmellor\\BrowserSessions\\Facades\\Br"
  },
  {
    "path": "app/Http/Controllers/Api/CategoryController.php",
    "chars": 2305,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreCategoryRequ"
  },
  {
    "path": "app/Http/Controllers/Api/PermissionController.php",
    "chars": 4130,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StorePermissionRe"
  },
  {
    "path": "app/Http/Controllers/Api/PostController.php",
    "chars": 4935,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StorePostRequest;"
  },
  {
    "path": "app/Http/Controllers/Api/ProfileController.php",
    "chars": 877,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\UpdateProfileRequ"
  },
  {
    "path": "app/Http/Controllers/Api/RoleController.php",
    "chars": 3235,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Auth\\Access\\Authorizatio"
  },
  {
    "path": "app/Http/Controllers/Api/UserController.php",
    "chars": 3422,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreUserRequest;"
  },
  {
    "path": "app/Http/Controllers/Auth/AuthenticatedSessionController.php",
    "chars": 3527,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Auth\\LoginReques"
  },
  {
    "path": "app/Http/Controllers/Auth/ConfirmPasswordController.php",
    "chars": 1024,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Auth/ForgotPasswordController.php",
    "chars": 667,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\SendsPa"
  },
  {
    "path": "app/Http/Controllers/Auth/LoginController.php",
    "chars": 1002,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Auth/RegisterController.php",
    "chars": 1964,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Auth/ResetPasswordController.php",
    "chars": 844,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Auth/VerificationController.php",
    "chars": 2955,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "chars": 816,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundat"
  },
  {
    "path": "app/Http/Controllers/HomeController.php",
    "chars": 467,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass HomeController extends Controller\n{\n    /**\n"
  },
  {
    "path": "app/Http/Kernel.php",
    "chars": 2934,
    "preview": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n    "
  },
  {
    "path": "app/Http/Middleware/Authenticate.php",
    "chars": 469,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Auth\\Middleware\\Authenticate as Middleware;\n\nclass Authenticate ex"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "chars": 307,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCook"
  },
  {
    "path": "app/Http/Middleware/EnsureEmailIsVerified.php",
    "chars": 812,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Http\\R"
  },
  {
    "path": "app/Http/Middleware/HandleInvalidSignature.php",
    "chars": 2053,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Routing\\Exceptions\\Inval"
  },
  {
    "path": "app/Http/Middleware/PreventRequestsDuringMaintenance.php",
    "chars": 366,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance as Mid"
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "chars": 877,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Providers\\RouteServiceProvider;\nuse Closure;\nuse Illuminate\\Http\\Request;"
  },
  {
    "path": "app/Http/Middleware/TrimStrings.php",
    "chars": 381,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as Middleware;\n\nclass TrimS"
  },
  {
    "path": "app/Http/Middleware/TrustHosts.php",
    "chars": 372,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Middleware\\TrustHosts as Middleware;\n\nclass TrustHosts extend"
  },
  {
    "path": "app/Http/Middleware/TrustProxies.php",
    "chars": 649,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Middleware\\TrustProxies as Middleware;\nuse Illuminate\\Http\\Re"
  },
  {
    "path": "app/Http/Middleware/ValidateSignature.php",
    "chars": 460,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Routing\\Middleware\\ValidateSignature as Middleware;\n\nclass Validat"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "chars": 345,
    "preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass V"
  },
  {
    "path": "app/Http/Requests/Auth/LoginRequest.php",
    "chars": 2567,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Auth;\n\nuse Illuminate\\Auth\\Events\\Lockout;\nuse Illuminate\\Foundation\\Http\\FormRequest"
  },
  {
    "path": "app/Http/Requests/Auth/RegisterRequest.php",
    "chars": 705,
    "preview": "<?php\n\nnamespace App\\Http\\Requests\\Auth;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass RegisterRequest extends For"
  },
  {
    "path": "app/Http/Requests/StoreCategoryRequest.php",
    "chars": 511,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCategoryRequest extends For"
  },
  {
    "path": "app/Http/Requests/StorePermissionRequest.php",
    "chars": 528,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePermissionRequest extends F"
  },
  {
    "path": "app/Http/Requests/StorePostRequest.php",
    "chars": 585,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePostRequest extends FormReq"
  },
  {
    "path": "app/Http/Requests/StoreRoleRequest.php",
    "chars": 522,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreRoleRequest extends FormReq"
  },
  {
    "path": "app/Http/Requests/StoreUserRequest.php",
    "chars": 729,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreUserRequest extends FormReq"
  },
  {
    "path": "app/Http/Requests/UpdateProfileRequest.php",
    "chars": 611,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateProfileRequest extends For"
  },
  {
    "path": "app/Http/Requests/UpdateUserRequest.php",
    "chars": 739,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateUserRequest extends FormRe"
  },
  {
    "path": "app/Http/Resources/ActivityLogResource.php",
    "chars": 882,
    "preview": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\ncla"
  },
  {
    "path": "app/Http/Resources/CategoryResource.php",
    "chars": 546,
    "preview": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass CategoryResource extends J"
  },
  {
    "path": "app/Http/Resources/PermissionResource.php",
    "chars": 590,
    "preview": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass PermissionResource extends"
  },
  {
    "path": "app/Http/Resources/PostResource.php",
    "chars": 1098,
    "preview": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Exception;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass PostResourc"
  },
  {
    "path": "app/Http/Resources/RoleResource.php",
    "chars": 584,
    "preview": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass RoleResource extends JsonR"
  },
  {
    "path": "app/Http/Resources/UserResource.php",
    "chars": 650,
    "preview": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass UserResource extends JsonR"
  },
  {
    "path": "app/Models/Category.php",
    "chars": 685,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
  },
  {
    "path": "app/Models/CategoryPost.php",
    "chars": 183,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
  },
  {
    "path": "app/Models/Post.php",
    "chars": 1611,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
  },
  {
    "path": "app/Models/User.php",
    "chars": 1746,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse App\\Notifications\\UserResetPasswordNoti"
  },
  {
    "path": "app/Notifications/UserResetPasswordNotification.php",
    "chars": 1123,
    "preview": "<?php\n\nnamespace App\\Notifications;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illum"
  },
  {
    "path": "app/Notifications/VerifyEmailNotification.php",
    "chars": 943,
    "preview": "<?php\n\nnamespace App\\Notifications;\n\nuse Illuminate\\Auth\\Notifications\\VerifyEmail;\nuse Illuminate\\Notifications\\Message"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "chars": 469,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Vite;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass App"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "chars": 1323,
    "preview": "<?php\n\nnamespace App\\Providers;\n\n\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Foundation\\Support\\Providers\\AuthS"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "chars": 380,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\ServiceProvider;\n\nclas"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "chars": 926,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illuminate\\Auth\\Listeners\\SendEmailVerificat"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "chars": 1332,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Cache\\RateLimiting\\Limit;\nuse Illuminate\\Foundation\\Support\\Providers\\Ro"
  },
  {
    "path": "artisan",
    "chars": 1686,
    "preview": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|-----------------------------------------------"
  },
  {
    "path": "bootstrap/app.php",
    "chars": 1620,
    "preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "chars": 2091,
    "preview": "{\n    \"name\": \"laravel/laravel\",\n    \"type\": \"project\",\n    \"description\": \"A Laravel Vue SPA starter project\",\n    \"key"
  },
  {
    "path": "config/activitylog.php",
    "chars": 1614,
    "preview": "<?php\n\nreturn [\n\n    /*\n     * If set to false, no activity-log will be saved to the database.\n     */\n    'enabled' => "
  },
  {
    "path": "config/api-inspector.php",
    "chars": 4693,
    "preview": "<?php\n\n// config for Irabbi360/LaravelApiInspector\nreturn [\n    // changes doc title\n    'title' => 'Laravel API Inspect"
  },
  {
    "path": "config/app.php",
    "chars": 7959,
    "preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Facade;\n\nreturn [\n\n    /*\n    |---------------------------------------------------"
  },
  {
    "path": "config/auth.php",
    "chars": 3665,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "config/broadcasting.php",
    "chars": 2146,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Br"
  },
  {
    "path": "config/browser-sessions.php",
    "chars": 121,
    "preview": "<?php\n\nreturn [\n    'include_session_id' => true,\n    'browser_session_guard' => env('BROWSER_SESSION_GUARD', 'web'),\n];"
  },
  {
    "path": "config/cache.php",
    "chars": 3272,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/cors.php",
    "chars": 846,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cross-Orig"
  },
  {
    "path": "config/database.php",
    "chars": 5289,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/filesystems.php",
    "chars": 2370,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Fi"
  },
  {
    "path": "config/hashing.php",
    "chars": 1572,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ha"
  },
  {
    "path": "config/logging.php",
    "chars": 3749,
    "preview": "<?php\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn"
  },
  {
    "path": "config/mail.php",
    "chars": 3600,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ma"
  },
  {
    "path": "config/media-library.php",
    "chars": 10459,
    "preview": "<?php\n\nreturn [\n\n    /*\n     * The disk on which to store added files and derived images by default. Choose\n     * one o"
  },
  {
    "path": "config/permission.php",
    "chars": 5580,
    "preview": "<?php\n\nreturn [\n\n    'models' => [\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we ne"
  },
  {
    "path": "config/queue.php",
    "chars": 2906,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Qu"
  },
  {
    "path": "config/sanctum.php",
    "chars": 2994,
    "preview": "<?php\n\nuse Laravel\\Sanctum\\Sanctum;\n\nreturn [\n\n    /*\n    |-------------------------------------------------------------"
  },
  {
    "path": "config/services.php",
    "chars": 979,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Part"
  },
  {
    "path": "config/session.php",
    "chars": 7023,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/view.php",
    "chars": 1053,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Stora"
  },
  {
    "path": "database/.gitignore",
    "chars": 10,
    "preview": "*.sqlite*\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "chars": 970,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Str;\n\n/"
  },
  {
    "path": "database/migrations/2014_10_12_000000_create_users_table.php",
    "chars": 793,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "chars": 669,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2019_08_19_000000_create_failed_jobs_table.php",
    "chars": 810,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php",
    "chars": 898,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2022_09_30_181156_create_posts_table.php",
    "chars": 698,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2022_09_30_181227_create_categories_table.php",
    "chars": 615,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2023_09_25_045349_create_jobs_table.php",
    "chars": 814,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2023_10_02_010617_create_category_post_table.php",
    "chars": 839,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2023_10_02_175025_create_media_table.php",
    "chars": 1038,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_11_25_022836_create_permission_tables.php",
    "chars": 6552,
    "preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
  },
  {
    "path": "database/migrations/2025_01_22_091913_create_sessions_table.php",
    "chars": 787,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2025_01_23_093055_create_activity_log_table.php",
    "chars": 909,
    "preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
  },
  {
    "path": "database/migrations/2025_01_23_093056_add_event_column_to_activity_log_table.php",
    "chars": 692,
    "preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
  },
  {
    "path": "database/migrations/2025_01_23_093057_add_batch_uuid_column_to_activity_log_table.php",
    "chars": 702,
    "preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
  },
  {
    "path": "database/migrations/2026_01_05_114017_create_api_inspector_analytics_table.php",
    "chars": 1167,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/seeders/CreateAdminUserSeeder.php",
    "chars": 1105,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Category;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Console\\Seeds\\"
  },
  {
    "path": "database/seeders/DatabaseSeeder.php",
    "chars": 637,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\n// use Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database"
  },
  {
    "path": "database/seeders/PermissionTableSeeder.php",
    "chars": 1062,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Se"
  },
  {
    "path": "lang/en/auth.php",
    "chars": 674,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "lang/en/pagination.php",
    "chars": 534,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination"
  },
  {
    "path": "lang/en/passwords.php",
    "chars": 744,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password R"
  },
  {
    "path": "lang/en/validation.php",
    "chars": 9373,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation"
  },
  {
    "path": "package.json",
    "chars": 1064,
    "preview": "{\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev\": \"vite\",\n        \"build\": \"vite build\"\n    }"
  },
  {
    "path": "phpunit.xml",
    "chars": 1175,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "public/.htaccess",
    "chars": 603,
    "preview": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    Rewr"
  },
  {
    "path": "public/index.php",
    "chars": 1710,
    "preview": "<?php\n\nuse Illuminate\\Contracts\\Http\\Kernel;\nuse Illuminate\\Http\\Request;\n\ndefine('LARAVEL_START', microtime(true));\n\n/*"
  },
  {
    "path": "public/robots.txt",
    "chars": 24,
    "preview": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "public/vendor/api-inspector/.vite/manifest.json",
    "chars": 172,
    "preview": "{\n  \"resources/js/app.js\": {\n    \"file\": \"js/app.js\",\n    \"name\": \"app\",\n    \"src\": \"resources/js/app.js\",\n    \"isEntry\""
  },
  {
    "path": "public/vendor/api-inspector/css/app.css",
    "chars": 42854,
    "preview": ".topbar[data-v-0325c2e2]{background:#1e1e1e;border-bottom:1px solid #3e3e42;position:sticky;top:0;z-index:100}.topbar-to"
  },
  {
    "path": "public/vendor/api-inspector/js/app.js",
    "chars": 351117,
    "preview": "function _r(e){const t=Object.create(null);for(const s of e.split(\",\"))t[s]=1;return s=>s in t}const _t={},Ks=[],Le=()=>"
  },
  {
    "path": "resources/css/app.css",
    "chars": 44,
    "preview": "a {\n    text-decoration: none !important;\n}\n"
  },
  {
    "path": "resources/js/app.js",
    "chars": 1069,
    "preview": "import './bootstrap';\n\nimport { createApp } from 'vue';\nimport { createPinia } from 'pinia'\nimport piniaPluginPersisteds"
  },
  {
    "path": "resources/js/bootstrap.js",
    "chars": 1940,
    "preview": "import _ from 'lodash';\nwindow._ = _;\n\nimport 'bootstrap';\n\n/**\n * We'll load the axios HTTP library which allows us to "
  },
  {
    "path": "resources/js/components/Admin/Create.vue",
    "chars": 5215,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-6\">\n            <div class=\"card"
  },
  {
    "path": "resources/js/components/Admin/Edit.vue",
    "chars": 294,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-6\">\n            <div class=\"card"
  },
  {
    "path": "resources/js/components/Admin/Index.vue",
    "chars": 407,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-12\">\n            <div class=\"car"
  },
  {
    "path": "resources/js/components/DropZone.vue",
    "chars": 4977,
    "preview": "<template>\n    <div\n        class=\"dropzone-container\"\n        @dragover=\"dragover\"\n        @dragleave=\"dragleave\"\n     "
  },
  {
    "path": "resources/js/components/DualListBox.vue",
    "chars": 2585,
    "preview": "<template>\n  <div class=\"container\">\n    <div>\n      <h2>{{ props.leftLabel }}</h2>\n      <select class=\"form-select\" mu"
  },
  {
    "path": "resources/js/components/ExampleComponent.vue",
    "chars": 552,
    "preview": "<template>\n    <div class=\"container\">\n        <div class=\"row justify-content-center\">\n            <div class=\"col-md-8"
  },
  {
    "path": "resources/js/components/Footer.vue",
    "chars": 281,
    "preview": "<template>\n    <footer class=\"footer footer-dark bg-dark\">\n        <div class=\"container text-center py-5\">\n            "
  },
  {
    "path": "resources/js/components/LocaleSwitcher.vue",
    "chars": 1071,
    "preview": "<template>\n    <li v-if=\"Object.keys(locales).length > 1\" class=\"nav-item dropdown\">\n        <a class=\"nav-link dropdown"
  },
  {
    "path": "resources/js/components/Nav.vue",
    "chars": 2837,
    "preview": "<template>\n    <nav class=\"navbar navbar-expand-md navbar-light bg-white shadow-sm\">\n        <div class=\"container\">\n   "
  },
  {
    "path": "resources/js/components/TextEditorComponent.vue",
    "chars": 1169,
    "preview": "<script setup>\nimport {onBeforeMount, onMounted, ref, watch} from \"vue\";\nimport ClassicEditor from '@ckeditor/ckeditor5-"
  },
  {
    "path": "resources/js/components/includes/AdminNavbar.vue",
    "chars": 2586,
    "preview": "<template>\n    <nav class=\"navbar navbar-expand-lg sticky-top flex-md-nowrap shadow-sm\" style=\"background-color: #e3f2fd"
  },
  {
    "path": "resources/js/components/includes/AdminSidebar.vue",
    "chars": 7509,
    "preview": "<template>\n    <nav class=\"bg-white sidebar\">\n        <div class=\"pt-3 sidebar-sticky\">\n            <ul id=\"menu\" class="
  },
  {
    "path": "resources/js/components/includes/Breadcrumb.vue",
    "chars": 1021,
    "preview": "<template>\n    <nav class=\"mx-2\">\n      <ol class=\"breadcrumb border-radius-0\">\n        <li\n          v-for=\"(crumb, ci)"
  },
  {
    "path": "resources/js/composables/activityLogs.js",
    "chars": 2303,
    "preview": "import {ref, inject, computed} from 'vue'\nimport {useRoute, useRouter} from \"vue-router\";\nimport axios from \"axios\";\n\nex"
  },
  {
    "path": "resources/js/composables/auth.js",
    "chars": 6537,
    "preview": "import { ref, reactive, inject } from 'vue'\nimport { useRouter } from \"vue-router\";\nimport { AbilityBuilder, createMongo"
  },
  {
    "path": "resources/js/composables/categories.js",
    "chars": 4192,
    "preview": "import { ref, inject } from 'vue'\nimport { useRouter } from 'vue-router'\n\nexport default function useCategories() {\n    "
  },
  {
    "path": "resources/js/composables/permissions.js",
    "chars": 4251,
    "preview": "import { ref, inject,markRaw } from 'vue'\nimport { useRouter } from 'vue-router'\n\nexport default function usePermissions"
  },
  {
    "path": "resources/js/composables/posts.js",
    "chars": 4315,
    "preview": "import { ref, inject } from 'vue'\nimport { useRouter } from 'vue-router'\n\nexport default function usePosts() {\n    const"
  },
  {
    "path": "resources/js/composables/profile.js",
    "chars": 1521,
    "preview": "import { ref, inject } from 'vue'\nimport { useRouter } from 'vue-router'\nimport {useAuthStore} from \"@/store/auth\";\n\nexp"
  },
  {
    "path": "resources/js/composables/roles.js",
    "chars": 5182,
    "preview": "import {ref, inject} from 'vue'\nimport {useRouter} from 'vue-router'\n\nexport default function useRoles() {\n    const rol"
  },
  {
    "path": "resources/js/composables/users.js",
    "chars": 3981,
    "preview": "import { ref, inject } from 'vue'\nimport { useRouter } from 'vue-router'\n\nexport default function useUsers() {\n    const"
  },
  {
    "path": "resources/js/lang/bn.json",
    "chars": 107,
    "preview": "{\n    \"welcome_starter_title\": \"Laravel Vue 3 Starter-এ স্বাগতম\",\n    \"ok\": \"Ok\",\n    \"cancel\": \"Cancel\"\n}\n"
  },
  {
    "path": "resources/js/lang/en.json",
    "chars": 2239,
    "preview": "{\n    \"welcome_starter_title\": \"Welcome to Laravel Vue 3 Boilerplate\",\n    \"ok\": \"Ok\",\n    \"cancel\": \"Cancel\",\n    \"erro"
  },
  {
    "path": "resources/js/lang/es.json",
    "chars": 1414,
    "preview": "{\n    \"welcome_starter_title\": \"Bienvenido a Laravel Vue 3 Starter\",\n    \"ok\": \"De Acuerdo\",\n    \"cancel\": \"Cancelar\",\n "
  },
  {
    "path": "resources/js/lang/fr.json",
    "chars": 2487,
    "preview": "{\n    \"welcome_starter_title\": \"Bienvenue dans Laravel Vue 3 Starter\",\n    \"ok\": \"Ok\",\n    \"cancel\": \"Annuler\",\n    \"err"
  },
  {
    "path": "resources/js/lang/pt-BR.json",
    "chars": 2271,
    "preview": "{\n    \"welcome_starter_title\": \"Bem-vindo ao Laravel Vue 3 Starter\",\n    \"ok\": \"Ok\",\n    \"cancel\": \"Cancelar\",\n    \"erro"
  },
  {
    "path": "resources/js/lang/zh-CN.json",
    "chars": 948,
    "preview": "{\n    \"welcome_starter_title\": \"欢迎来到Laravel Vue 3入门版\",\n    \"ok\": \"确定\",\n    \"cancel\": \"取消\",\n    \"error_alert_title\": \"错误."
  },
  {
    "path": "resources/js/layouts/Admin.vue",
    "chars": 2815,
    "preview": "<template>\n    <nav class=\"navbar navbar-expand-lg navbar-dark bg-primary\">\n        <div class=\"container-fluid\">\n      "
  },
  {
    "path": "resources/js/layouts/Authenticated.vue",
    "chars": 3074,
    "preview": "<template>\n    <AdminNavbar />\n    <div class=\"d-flex align-items-stretch w-100\">\n        <AdminSidebar />\n        <div "
  },
  {
    "path": "resources/js/layouts/Error.vue",
    "chars": 1067,
    "preview": "<template>\n    <nav class=\"navbar navbar-expand-lg bg-light\">\n        <div class=\"container-fluid\">\n            <a class"
  },
  {
    "path": "resources/js/layouts/Guest.vue",
    "chars": 138,
    "preview": "<template>\n    <Navbar/>\n    <router-view></router-view>\n</template>\n<script setup>\nimport Navbar from '../components/Na"
  },
  {
    "path": "resources/js/plugins/i18n.js",
    "chars": 1224,
    "preview": "import {createI18n} from 'vue-i18n'\nimport {useLangStore} from \"@/store/lang\";\n\nconst i18n = createI18n({\n    legacy: fa"
  },
  {
    "path": "resources/js/routes/index.js",
    "chars": 519,
    "preview": "import { createRouter, createWebHistory } from \"vue-router\";\nimport routes from './routes.js'\n\nconst router = createRout"
  },
  {
    "path": "resources/js/routes/routes.js",
    "chars": 7630,
    "preview": "import {useAuthStore} from \"@/store/auth\";\n\nconst AuthenticatedLayout = () => import('../layouts/Authenticated.vue')\ncon"
  },
  {
    "path": "resources/js/services/ability.js",
    "chars": 164,
    "preview": "import { AbilityBuilder, createMongoAbility } from '@casl/ability'\n\nconst { can, cannot, build } = new AbilityBuilder(cr"
  },
  {
    "path": "resources/js/store/auth.js",
    "chars": 1135,
    "preview": "import {defineStore} from 'pinia'\nimport axios from 'axios';\nimport {ref} from \"vue\";\n\nexport const useAuthStore = defin"
  },
  {
    "path": "resources/js/store/lang.js",
    "chars": 846,
    "preview": "import Cookies from 'js-cookie'\nimport {defineStore} from \"pinia\";\nimport {ref} from \"vue\";\n\nexport const useLangStore ="
  },
  {
    "path": "resources/js/validation/rules.js",
    "chars": 542,
    "preview": "const required = (value, args, { field }) => {\n    if (!value) {\n        return `The ${field} field is required.`\n    }\n"
  },
  {
    "path": "resources/js/views/admin/activity-log/Index.vue",
    "chars": 9841,
    "preview": "<template>\n    <div class=\"container my-2\">\n        <div class=\"row justify-content-center\">\n            <div class=\"col"
  },
  {
    "path": "resources/js/views/admin/browser-sessions/Index.vue",
    "chars": 4026,
    "preview": "<script setup>\nimport {inject, onMounted, ref} from \"vue\";\nimport axios from \"axios\";\nconst swal = inject('$swal')\n\ncons"
  },
  {
    "path": "resources/js/views/admin/categories/Create.vue",
    "chars": 2448,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-6\">\n            <div class=\"card"
  },
  {
    "path": "resources/js/views/admin/categories/Edit.vue",
    "chars": 2807,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-6\">\n            <div class=\"card"
  },
  {
    "path": "resources/js/views/admin/categories/Index.vue",
    "chars": 9378,
    "preview": "<template>\n    <div class=\"row justify-content-center my-2\">\n        <div class=\"col-md-12\">\n            <div class=\"car"
  },
  {
    "path": "resources/js/views/admin/index.vue",
    "chars": 90,
    "preview": "<template>\n<h1>Admin</h1>\n</template>\n\n<script setup>\n</script>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "resources/js/views/admin/permissions/Create.vue",
    "chars": 2456,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-6\">\n            <div class=\"card"
  },
  {
    "path": "resources/js/views/admin/permissions/Edit.vue",
    "chars": 2853,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-6\">\n            <div class=\"card"
  },
  {
    "path": "resources/js/views/admin/permissions/Index.vue",
    "chars": 9372,
    "preview": "<template>\n    <div class=\"row justify-content-center my-2\">\n        <div class=\"col-md-12\">\n            <div class=\"car"
  },
  {
    "path": "resources/js/views/admin/posts/Create.vue",
    "chars": 8385,
    "preview": "<template>\n    <form @submit.prevent=\"submitForm\">\n        <div class=\"row my-5\">\n            <div class=\"col-md-8\">\n   "
  },
  {
    "path": "resources/js/views/admin/posts/Edit.vue",
    "chars": 9287,
    "preview": "<template>\n    <form @submit.prevent=\"submitForm\">\n        <div class=\"row my-5\">\n            <div class=\"col-md-8\">\n   "
  },
  {
    "path": "resources/js/views/admin/posts/Index.vue",
    "chars": 12507,
    "preview": "<template>\n    <div class=\"row justify-content-center my-2\">\n        <div class=\"col-md-12\">\n            <div class=\"car"
  },
  {
    "path": "resources/js/views/admin/profile/index.vue",
    "chars": 2972,
    "preview": "<template>\n    <div class=\"card border-0\">\n        <div class=\"card-header bg-transparent\">\n            <h5 class=\"float"
  },
  {
    "path": "resources/js/views/admin/roles/Create.vue",
    "chars": 2419,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-6\">\n            <div class=\"card"
  },
  {
    "path": "resources/js/views/admin/roles/Edit.vue",
    "chars": 4208,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col\">\n            <div class=\"card bord"
  },
  {
    "path": "resources/js/views/admin/roles/Index.vue",
    "chars": 9245,
    "preview": "<template>\n    <div class=\"row justify-content-center my-2\">\n        <div class=\"col-md-12\">\n            <div class=\"car"
  },
  {
    "path": "resources/js/views/admin/users/Create.vue",
    "chars": 5013,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-10\">\n            <div class=\"car"
  },
  {
    "path": "resources/js/views/admin/users/Edit.vue",
    "chars": 5418,
    "preview": "<template>\n    <div class=\"row justify-content-center my-5\">\n        <div class=\"col-md-10\">\n            <div class=\"car"
  },
  {
    "path": "resources/js/views/admin/users/Index.vue",
    "chars": 10569,
    "preview": "<template>\n    <div class=\"row justify-content-center my-2\">\n        <div class=\"col-md-12\">\n            <div class=\"car"
  },
  {
    "path": "resources/js/views/auth/Verify.vue",
    "chars": 4368,
    "preview": "<template>\n    <div class=\"container\">\n        <div class=\"row justify-content-center my-5\">\n            <div class=\"col"
  },
  {
    "path": "resources/js/views/auth/passwords/Confirm.vue",
    "chars": 125,
    "preview": "<template>\n<h1>Confirm</h1>\n</template>\n\n<script>\nexport default {\n    name: \"Confirm\"\n}\n</script>\n\n<style scoped>\n\n</st"
  },
  {
    "path": "resources/js/views/auth/passwords/Email.vue",
    "chars": 1869,
    "preview": "<template>\n    <div class=\"container\">\n        <div class=\"row justify-content-center my-5\">\n            <div class=\"col"
  },
  {
    "path": "resources/js/views/auth/passwords/Reset.vue",
    "chars": 3509,
    "preview": "<template>\n    <div class=\"container\">\n        <div class=\"row justify-content-center my-5\">\n            <div class=\"col"
  },
  {
    "path": "resources/js/views/category/posts.vue",
    "chars": 1878,
    "preview": "<template>\n    <div class=\"container\">\n        <h2 class=\"text-center my-4\">Category Posts</h2>\n        <div class=\"row "
  },
  {
    "path": "resources/js/views/errors/404.vue",
    "chars": 559,
    "preview": "<template>\n    <div class=\"d-flex align-items-center justify-content-center vh-100\">\n        <div class=\"text-center\">\n "
  },
  {
    "path": "resources/js/views/home/index.vue",
    "chars": 4550,
    "preview": "<template>\n    <div class=\"relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-cen"
  },
  {
    "path": "resources/js/views/login/Login.vue",
    "chars": 3290,
    "preview": "<template>\n    <div class=\"container\">\n        <div class=\"row justify-content-center my-5\">\n            <div class=\"col"
  },
  {
    "path": "resources/js/views/posts/details.vue",
    "chars": 3368,
    "preview": "<template>\n    <div class=\"container\">\n        <div class=\"row g-5 mt-4\">\n            <div class=\"col-md-8\">\n           "
  },
  {
    "path": "resources/js/views/posts/index.vue",
    "chars": 1792,
    "preview": "<template>\n    <div class=\"container\">\n        <h2 class=\"text-center my-4\">Blog Posts</h2>\n        <div class=\"row mb-2"
  },
  {
    "path": "resources/js/views/register/index.vue",
    "chars": 4298,
    "preview": "<template>\n    <div class=\"container\">\n        <div class=\"row justify-content-center my-5\">\n            <div class=\"col"
  },
  {
    "path": "resources/sass/_custom.scss",
    "chars": 1337,
    "preview": ".activity-timeline {\n    position: relative;\n}\n\n.activity-item {\n    padding: 1.5rem;\n    border-radius: 12px;\n    trans"
  },
  {
    "path": "resources/sass/_variables.scss",
    "chars": 138,
    "preview": "// Body\n$body-bg: #f8fafc;\n\n// Typography\n$font-family-sans-serif: 'Nunito', sans-serif;\n$font-size-base: 0.9rem;\n$line-"
  },
  {
    "path": "resources/sass/app.scss",
    "chars": 269,
    "preview": "// Fonts\n@import url('https://fonts.bunny.net/css?family=Nunito');\n\n// Variables\n//@import 'variables';\n\n// Bootstrap\n@i"
  },
  {
    "path": "resources/views/auth/login.blade.php",
    "chars": 3344,
    "preview": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row justify-content-center\">\n      "
  }
]

// ... and 27 more files (download for full content)

About this extraction

This page contains the full source code of the irabbi360/laravel-vue3-spa-starter GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 227 files (861.0 KB), approximately 251.7k tokens, and a symbol index with 1689 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!