[
  {
    "path": ".gitattributes",
    "content": "* text=auto\n*.css linguist-vendored\n*.scss linguist-vendored\n"
  },
  {
    "path": ".github/config.yml",
    "content": "# Configuration for welcome - https://github.com/behaviorbot/welcome\n\n# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome\n\n# Comment to be posted to on first time issues\nnewIssueWelcomeComment: >\n  Hello there! Thanks for opening your first issue on this repo!\n\n\n  Just a heads-up: **Here at Backpack we use Github Issues only for tracking bugs**. Talk about new features is also acceptable. This helps _a lot_ in keeping our focus on improving Backpack. **If you issue is not a bug/feature, please help us out by closing the issue yourself and posting in the appropriate medium (see below)**. If you're not sure where it fits, it's ok, a community member will probably reply to help you with that.\n\n\n  Backpack communication mediums:\n   - Bug Reports, Feature Requests - Github Issues (here);\n   - Quick help (_How do I do X_) - [Gitter Chatroom](https://gitter.im/BackpackForLaravel/Lobby);\n   - Long questions (_I have done X and Y and it won't do Z wtf_) - [Stackoverflow](https://stackoverflow.com/questions/tagged/backpack-for-laravel), using the ```backpack-for-laravel``` tag;\n\n\n  Please keep in mind Backpack offers no official / paid support. Whatever help you receive here, on Gitter, Slack or Stackoverflow is thanks to our awesome _awesome_ community members, who give up some of their time to help their peers. If you want to join our community, just start pitching in. We take pride in being a welcoming bunch.\n\n\n  Thank you!\n\n\n  --\n\n  Justin Case\n\n  The Backpack Robot\n\n# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome\n\n# Comment to be posted to on PRs from first time contributors in your repository\nnewPRWelcomeComment: >\n  BOOM! Your first PR with us, thank you so much! Someone will take a look at it shortly.\n\n\n  Please keep in mind that:\n    - **if this constitutes a breaking change, it might take quite a while for this to get merged**; we try to emulate the Laravel release cycle as much as possible, so developers can upgrade both software once; this means a new big release every ~6 months;\n    - **even if it's a non-breaking change, it might take a few days/weeks for the PR to get merged**; unless it's a no-brainer, **we like to have some community feedback on new features, before we merge them**; this leads to higher-quality code, in the end; we learnt this the hard way :-)\n    - **not all PRs get merged**; sometimes we just have to hold out new features, to keep the packages lean; sometimes we don't include features that only apply to niche use cases;\n    - **we're not perfect**; if you think we're wrong, call us out on it; but in a kind way :-) we all make mistakes, best we learn from them and build better software together;\n\n\n  Thank you!\n\n\n  --\n\n  Justin Case\n\n  The Backpack Robot\n\n# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge\n\n# Comment to be posted to on pull requests merged by a first time user\nfirstPRMergeComment: >\n  WHOOP-WHOOP! Congrats, your first PR on this repo has officialy been merged.\n\n\n  ![party](https://media1.giphy.com/media/3KC2jD2QcBOSc/giphy.gif \"Party!!!\")\n\n\n  If you want to help out the community in other ways, you can:\n   - **give your opinion on other Github Issues & PRs**;\n   - **chat with others** in the [Gitter Chatroom](https://gitter.im/BackpackForLaravel/Lobby) (usually for quick help: _How do I do X_);\n   - **answer Backpack questions on [Stackoverflow](https://stackoverflow.com/questions/tagged/backpack-for-laravel)**; you get points, people get help; you can subscribe to the ```backpack-for-laravel``` tag by [adding a new filter](https://stackexchange.com/filters/256210/my-filter-3); that will send you emails when new questions come up with our tag;\n\n\n  Again. Thank you for the PR. You are a wonderful person. Keep 'em coming :-)\n\n  Cheers!\n\n\n  --\n\n  Justin Case\n\n  The Backpack Robot\n\n\n  P.S. **Help in the Backpack community is rewarded with free Backpack commercial licenses**. It's the least we can do. If you feel you've helped the community with PRs, help & other stuff, please [shoot Tabacitu an email](mailto:hello@tabacitu.ro) and ask him if you qualify for free licenses. You scratch my back, I scratch your back. Thank you!\n\n# It is recommend to include as many gifs and emojis as possible\n#\n# ---------------------------------------------------------------------------------------------\n#\n# Configuration for request-info - https://github.com/behaviorbot/request-info\n\n# *OPTIONAL* Comment to reply with\n# Can be either a string :\nrequestInfoReplyComment: >\n  Hi there!\n\n\n  Could you please provide us with more info about this? Looks like you skipped the title/body.\n\n\n  Thank you!\n\n\n  --\n\n  Justin Case\n\n  The Backpack Robot\n\n# Or an array:\n# requestInfoReplyComment:\n#  - Ah no! young blade! That was a trifle short!\n#  - Tell me more !\n#  - I am sure you can be more effusive\n\n\n# *OPTIONAL* default titles to check against for lack of descriptiveness\n# MUST BE ALL LOWERCASE\nrequestInfoDefaultTitles:\n  # - update readme.md\n  - updates\n\n# *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given\nrequestInfoLabelToAdd: needs-more-info\n\n# *OPTIONAL* Only warn about insufficient information on these events type\n# Keys must be lowercase. Valid values are 'issue' and 'pullRequest'\nrequestInfoOn:\n  pullRequest: true\n  issue: true\n\n# *OPTIONAL* Add a list of people whose Issues/PRs will not be commented on\n# keys must be GitHub usernames\nrequestInfoUserstoExclude:\n  - tabacitu\n\n# ---------------------------------------------------------------------------------------------\n#\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: composer\n  directory: \"/\"\n  schedule:\n    interval: monthly\n  open-pull-requests-limit: 10\n  ignore:\n  - dependency-name: symfony/dom-crawler\n    versions:\n    - 5.2.2\n  - dependency-name: laravel/framework\n    versions:\n    - 8.25.0\n  - dependency-name: backpack/pagemanager\n    versions:\n    - 3.0.6\n  - dependency-name: backpack/generators\n    versions:\n    - 3.1.6\n  - dependency-name: facade/ignition\n    versions:\n    - 2.5.9\n  - dependency-name: laravel/tinker\n    versions:\n    - 2.6.0\n  - dependency-name: barryvdh/laravel-debugbar\n    versions:\n    - 3.5.2\n  - dependency-name: phpunit/phpunit\n    versions:\n    - 9.5.1\n  - dependency-name: backpack/crud\n    versions:\n    - 4.1.31\n"
  },
  {
    "path": ".github/issue_template.md",
    "content": "# Bug report\n\n### What I did:\n\n### What I expected to happen:\n\n### What happened:\n\n### What I've already tried to fix it:\n\n### Backpack, Laravel, PHP, DB version:\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "## WHY\n\n### BEFORE - What was wrong? What was happening before this PR?\n\n??\n\n### AFTER - What is happening after this PR?\n\n??\n\n\n## HOW\n\n### How did you achieve that, in technical terms?\n\n??\n\n\n\n### Is it a breaking change or non-breaking change?\n\n??\n\n\n### How can we test the before & after?\n\n??\n"
  },
  {
    "path": ".github/stale.yml",
    "content": "#####################################\n# Github Stale Probot Configuration #\n# ###################################\n# https://probot.github.io/apps/stale/\n\n# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 60\n# Number of days of inactivity before a stale issue is closed\ndaysUntilClose: 14\n# Issues with these labels will never be considered stale\nexemptLabels:\n  - pinned\n  - security\n  - feature\n  - urgent\n  - ready\n  - working on it\n  - bug\n\n# Label to use when marking an issue as stale\nstaleLabel: stale\n# Comment to post when marking an issue as stale. Set to `false` to disable\nmarkComment: >\n  Hi there!\n\n\n  **Is this still an issue?** No activity in 60 days. I'm going to mark it as stale for now, and close it in 14 days if no further activity occurs. I know you guys are all busy, but if this is important to you please reply or something, so I know not to close it.\n\n\n  Thank you!\n\n\n  --\n  \n  Justin Case\n  \n  The Backpack Robot\n\n# Comment to post when closing a stale issue. Set to `false` to disable\ncloseComment: true\n"
  },
  {
    "path": ".github/support.yml",
    "content": "# Configuration for support-requests - https://github.com/dessant/support-requests\n\n# Label used to mark issues as support requests\nsupportLabel: Ask-It-On-Stack-Overflow\n# Comment to post on issues marked as support requests. Add a link\n# to a support page, or set to `false` to disable\nsupportComment: >\n  Oups!\n\n\n  Looks like this is a support request, not a bug/feature. **Could you please [repost on StackOverflow](https://stackoverflow.com/questions/tagged/backpack-for-laravel), using the ```backpack-for-laravel``` tag**?\n\n\n  Background: **Here at Backpack we use Github Issues only for tracking bugs and features**, not individual implementation issues. This helps _a lot_ in keeping our focus on improving Backpack. Thanks a lot for understanding!\n\n\n  Here are all the Backpack communication mediums:\n   - Long questions (_I have done X and Y and it won't do Z wtf_) - [Stackoverflow](https://stackoverflow.com/questions/tagged/backpack-for-laravel), using the ```backpack-for-laravel``` tag; this is recommended for most questions, since other developers can then find the answer on a simple Google search; also, people get points for answering - and who doesn't like StackOverflow points?!\n   - Quick help (_How do I do X_) - [Gitter Chatroom](https://gitter.im/BackpackForLaravel/Lobby);\n   - Bug Reports, Feature Requests - Github Issues (here);\n\n  Please keep in mind Backpack offers no official / paid support. Whatever help you receive here, on Gitter, Slack or StackOverflow is thanks to our awesome _awesome_ community members, who give up some of their time to help their peers. If you want to join our community, just start pitching in. We take pride in being a welcoming bunch.\n\n\n  Thank you!\n\n\n  --\n\n  Justin Case\n\n  The Backpack Robot\n\n\n  PS. In case I mistakenly closed your issue, yell :-) I'm a robot, I make mistakes.\n\n# Whether to close issues marked as support requests\nclose: true\n# Whether to lock issues marked as support requests\nlock: false\n"
  },
  {
    "path": ".github/workflows/add-to-project.yml",
    "content": "name: Add new bugs & PRs to This Week project\n\non:\n  issues:\n    types:\n      - opened\n      - transferred\n  pull_request:\n    types:\n      - opened\n\njobs:\n  add-to-project:\n    name: Add new bugs and PRs to This Week project\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/add-to-project@main\n        with:\n          project-url: https://github.com/orgs/Laravel-Backpack/projects/13\n          github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}\n"
  },
  {
    "path": ".gitignore",
    "content": "/vendor\n/node_modules\n/public/storage\n/storage/backups\nHomestead.yaml\nHomestead.json\n.env\n.idea\n.DS_Store\n.packages\n.quarantine\n.tmb\n/.vapor\n/packages\n/.vscode\n/packages\n/_volumes\n/public/basset\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: php\n\nphp:\n  - 7.3\n  - 7.4\n  - 8.0\n  - nightly\n\nmatrix:\n    allow_failures:\n        - php: 7.2\n        - php: 7.3\n        - php: 8.0\n        - php: nightly\n\nenv:\n  global:\n    - APP_ENV=local\n    - APP_DEBUG=true\n    - APP_KEY=base64:jNI+qJRj1eqN3RWMeBWo6sxMwKzgDP7Py2AfRJ1luyA=\n    - APP_URL=http://localhost\n    - DB_CONNECTION=mysql\n    - DB_HOST=127.0.0.1\n    - DB_PORT=3306\n    - DB_DATABASE=test\n    - DB_USERNAME=root\n    - DB_PASSWORD=\n    - CACHE_DRIVER=file\n    - SESSION_DRIVER=file\n    - QUEUE_DRIVER=sync\n    - REDIS_HOST=127.0.0.1\n    - REDIS_PASSWORD=null\n    - REDIS_PORT=6379\n    - MAIL_DRIVER=smtp\n    - MAIL_HOST=mailtrap.io\n    - MAIL_PORT=2525\n    - MAIL_USERNAME=null\n    - MAIL_PASSWORD=null\n    - MAIL_ENCRYPTION=null\n\nsudo: false\n\nservices: mysql\n\nbefore_install:\n  - mysql -e \"create database IF NOT EXISTS test;\" -uroot\n\ninstall: travis_retry composer install --no-interaction --prefer-source\n\nscript: vendor/bin/phpunit --coverage-clover=coverage.clover\n\nafter_script:\n    - wget https://scrutinizer-ci.com/ocular.phar\n    - php ocular.phar code-coverage:upload --format=php-clover coverage.clover\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM serversideup/php:8.3-fpm-nginx as base\n\nENV S6_CMD_WAIT_FOR_SERVICES=1\n\nCOPY --chmod=755 ./entrypoint.d/ /etc/entrypoint.d/\nCOPY ./docker/infra/certs /etc/nginx/certs\n\nUSER root\n\n# run the docker-php-serversideup-s6-init script\nRUN docker-php-serversideup-s6-init\n\nUSER www-data\n\n# uncomment if you need to install chrome. eg. for spatie browser shot projects.\n#USER root\n# ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true\n#RUN apt-get update \\\n#    && apt-get install -y wget gnupg \\\n#    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \\\n#    && sh -c 'echo \"deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main\" >> /etc/apt/sources.list.d/google.list' \\\n#    && apt-get -y update \\\n#    && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \\\n#--no-install-recommends \\\n#    && rm -rf /var/lib/apt/lists/* \\\n#    && usermod -a -G video www-data \\\n#    && usermod -a -G audio www-data \\\n#    && mkdir -p /home/www-data/Downloads \\\n#    && chown -R www-data:www-data /home/www-data\n\nFROM base as development\n\n# We can pass USER_ID and GROUP_ID as build arguments\n# to ensure the www-data user has the same UID and GID\n# as the user running Docker.\nARG USER_ID\nARG GROUP_ID\n\n# Switch to root so we can set the user ID and group ID\nUSER root\n\nRUN docker-php-serversideup-set-id www-data $USER_ID:$GROUP_ID  && \\\n    docker-php-serversideup-set-file-permissions --owner $USER_ID:$GROUP_ID --service nginx\n\n\n# make npm & node available in the container\nCOPY --chown=www-data:www-data --from=node:22.4.1 /usr/local/bin /usr/local/bin\n\nCOPY --chown=www-data:www-data --from=node:22.4.1 /usr/local/lib/node_modules/npm /usr/local/lib/node_modules/npm\n\nUSER www-data"
  },
  {
    "path": "LICENSE.md",
    "content": "# YUMMY License\n\n**YoU make Money, I make MoneY.** The license holder is allowed to use the software for free, as long as he doesn't make money by using it.\n\nCopyright (c) 2015-2017 Cristian Tabacitu <hello@tabacitu.ro>\n\n## FREE for non-commercial use, PAID for commercial use\n\n> Permission is hereby granted to any person obtaining a copy of this software \n> and associated documentation files (the \"Software\"), to use the Software. \n> This includes the rights to use, copy, modify and/or merge the Sofware \n> or copies of the Software, and to permit persons to whom the Software is \n> furnished to do so, subject to the following conditions:\n>\n> **1. Should the Sofware be used for non-commercial purposes (personal use, not-profits,\n> testing, education), no financial reward is expected and the above rights are given FREE OF CHARGE.**\n>\n> **2. Should the Software be used for commercial purposes (the user of this Sofware, \n> its employer, employees or clients make money by using this Software), the user is \n> required to purchase a \"Single Domain License\" on [backpackforlaravel.com](https://backpackforlaravel.com), for each\n> domain name this sofware will be used on, before its usage in production.\n> Failure to do so will constitute as illegal commercial use.**\n> \n> **3. This license does not include the rights to publish or sublicense\n> this Sofware, its copies or any derivations, with or without the purpose of commercial profit. \n> For inclusion in commercial packages or SaaS products, an \"Unlimited License\" is required, which can be purchased on [backpackforlaravel.com](https://backpackforlaravel.com). For inclusion in free open-source packages, express permission is needed from <hello@tabacitu.ro>.**\n>\n> **4. The above copyright notice and this permission notice shall be included in\n> all copies or substantial portions of the Software.**\n>\n> THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n> THE SOFTWARE.\n"
  },
  {
    "path": "app/Console/Commands/Inspire.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Foundation\\Inspiring;\n\nclass Inspire extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'inspire';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Display an inspiring quote';\n\n    /**\n     * Execute the console command.\n     *\n     * @return mixed\n     */\n    public function handle()\n    {\n        $this->comment(PHP_EOL.Inspiring::quote().PHP_EOL);\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/RefreshDb.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\Artisan;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass RefreshDb extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'db:fresh';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Refresh database structure and entries';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return mixed\n     */\n    public function handle()\n    {\n        Artisan::call('down');\n        Log::warning('Cleanup time. Refreshing the database.');\n        Artisan::call('db:wipe --force');\n        Artisan::call('migrate --force');\n        Artisan::call('db:seed --force');\n        Artisan::call('backup:clean');\n        Artisan::call('up');\n    }\n}\n"
  },
  {
    "path": "app/Console/Kernel.php",
    "content": "<?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\n\nclass Kernel extends ConsoleKernel\n{\n    /**\n     * The Artisan commands provided by your application.\n     *\n     * @var array\n     */\n    protected $commands = [\n        Commands\\RefreshDb::class,\n    ];\n\n    /**\n     * Define the application's command schedule.\n     *\n     * @param \\Illuminate\\Console\\Scheduling\\Schedule $schedule\n     *\n     * @return void\n     */\n    protected function schedule(Schedule $schedule)\n    {\n        $schedule->command('db:fresh')->hourly();\n    }\n}\n"
  },
  {
    "path": "app/Enums/MonsterStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum MonsterStatus: string\n{\n    case WORKING = 'working';\n    case NOTWORKING = 'not-working';\n    case DONTKNOW = 'dont-know';\n\n    public function getReadableStatus()\n    {\n        return match ($this) {\n            MonsterStatus::WORKING    => 'Is working',\n            MonsterStatus::NOTWORKING => 'Is not working',\n            MonsterStatus::DONTKNOW   => 'We didn\\'t know',\n        };\n    }\n}\n"
  },
  {
    "path": "app/Enums/ProductCondition.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum ProductCondition\n{\n    case NEW;\n    case USED;\n    case BROKEN;\n\n    public function getReadableCondition()\n    {\n        return match ($this) {\n            ProductCondition::NEW    => 'New Product',\n            ProductCondition::USED   => 'Used Product',\n            ProductCondition::BROKEN => '!!BROKEN!!',\n        };\n    }\n}\n"
  },
  {
    "path": "app/Enums/ProductStatus.php",
    "content": "<?php\n\nnamespace App\\Enums;\n\nenum ProductStatus: string\n{\n    case NOSTOCK = 'out-of-stock';\n    case INSTOCK = 'in-stock';\n    case ONHOLD = 'on-hold';\n\n    public function getReadableStatus()\n    {\n        return match ($this) {\n            ProductStatus::INSTOCK => 'Is in Stock',\n            ProductStatus::NOSTOCK => 'Is out of stock',\n            ProductStatus::ONHOLD  => 'Is on hold',\n        };\n    }\n}\n"
  },
  {
    "path": "app/Events/Event.php",
    "content": "<?php\n\nnamespace App\\Events;\n\nabstract class Event\n{\n    //\n}\n"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "content": "<?php\n\nnamespace App\\Exceptions;\n\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Database\\Eloquent\\ModelNotFoundException;\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\nuse Illuminate\\Validation\\ValidationException;\nuse Symfony\\Component\\HttpKernel\\Exception\\HttpException;\nuse Throwable;\n\nclass Handler extends ExceptionHandler\n{\n    /**\n     * A list of the exception types that should not be reported.\n     *\n     * @var array\n     */\n    protected $dontReport = [\n        AuthorizationException::class,\n        HttpException::class,\n        ModelNotFoundException::class,\n        ValidationException::class,\n    ];\n\n    /**\n     * Report or log an exception.\n     *\n     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.\n     *\n     * @param \\Throwable $exception\n     *\n     * @return void\n     */\n    public function report(Throwable $exception)\n    {\n        parent::report($exception);\n    }\n\n    /**\n     * Render an exception into an HTTP response.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     * @param \\Throwable               $exception\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function render($request, Throwable $exception)\n    {\n        return parent::render($request, $exception);\n    }\n\n    protected function whoopsHandler()\n    {\n        try {\n            return app(\\Whoops\\Handler\\HandlerInterface::class);\n        } catch (\\Illuminate\\Contracts\\Container\\BindingResolutionException $e) {\n            return parent::whoopsHandler();\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/AdminPageController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nclass AdminPageController\n{\n    /**\n     * Show the new in v7 page.\n     *\n     * @return \\Illuminate\\View\\View\n     */\n    public function newInV7()\n    {\n        return view('admin.new-in-v7', [\n            'title'       => 'New in v7',\n            'description' => 'Discover the new features and improvements in Backpack v7.',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/CaveCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\CaveRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class CaveCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass CaveCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; }\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\Cave::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/cave');\n        CRUD::setEntityNameStrings('cave', 'caves');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('name');\n        CRUD::column('monster')->attribute('text');\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(CaveRequest::class);\n        CRUD::setOperationSetting('contentClass', 'col-md-12');\n\n        CRUD::field('name');\n        if (env('GOOGLE_PLACES_KEY')) {\n            CRUD::field('location')->label('Cave Location')->type('google_map')->map_options([\n                'default_lat' => 38.6915837,\n                'default_lng' => -9.2159772,\n            ]);\n        }\n        CRUD::field('monster')\n            ->label('Monster '.backpack_new_badge())\n            ->subfields(self::getMonsterSubfields())\n            ->hint('<small class=\"float-right\">Define the related Monster over a <code>hasOne</code> relationship (1-1).</small>');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    public static function getMonsterSubfields()\n    {\n        $field_types_that_dont_work = [\n            'date_range', // TODO\n            'upload',\n            'upload_multiple',\n            'select_grouped', // TODO\n            'select2_grouped', // TODO\n        ];\n\n        $subfields = array_merge(\n            MonsterCrudController::getFieldsArrayForSimpleTab(),\n            [[   // CustomHTML\n                'name'  => 'separator',\n                'type'  => 'custom_html',\n                'value' => '<hr>',\n            ]],\n            MonsterCrudController::getFieldsArrayForTimeAndSpaceTab(),\n            [[   // CustomHTML\n                'name'  => 'separator',\n                'type'  => 'custom_html',\n                'value' => '<hr>',\n            ]],\n            MonsterCrudController::getFieldsArrayForSelectsTab(),\n            [[   // CustomHTML\n                'name'  => 'separator',\n                'type'  => 'custom_html',\n                'value' => '<hr>',\n            ]],\n            MonsterCrudController::getFieldsArrayForRelationshipsTab(),\n            [[   // CustomHTML\n                'name'  => 'separator',\n                'type'  => 'custom_html',\n                'value' => '<hr>',\n            ]],\n            MonsterCrudController::getFieldsArrayForUploadsTab(),\n            [[   // CustomHTML\n                'name'  => 'separator',\n                'type'  => 'custom_html',\n                'value' => '<hr>',\n            ]],\n            MonsterCrudController::getFieldsArrayForWysiwygEditorsTab(),\n            [[   // CustomHTML\n                'name'  => 'separator',\n                'type'  => 'custom_html',\n                'value' => '<hr>',\n            ]],\n            MonsterCrudController::getFieldsArrayForMiscellaneousTab(),\n        );\n\n        foreach ($subfields as $key => $subfield) {\n            if (isset($subfield['subfields'])) {\n                unset($subfields[$key]);\n            }\n\n            if (!isset($subfield['type'])) {\n                continue;\n            }\n\n            if (in_array($subfield['type'], $field_types_that_dont_work)) {\n                unset($subfields[$key]);\n            }\n        }\n\n        return $subfields;\n    }\n\n    public function ajaxUpload()\n    {\n        if (app('env') === 'production') {\n            return response()->json(['errors' => [\n                'message' => 'Uploads are disabled in production.',\n            ]], 500);\n        }\n\n        return $this->traitAjaxUpload();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/LatestUsersChartController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts;\n\nuse App\\User;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Chartjs\\Chart;\n\nclass LatestUsersChartController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['6 days ago', '5 days ago', '4 days ago', '3 days ago', '2 days ago', 'Yesterday', 'Today']);\n\n        // RECOMMENDED. Set URL that the ChartJS library should call, to get its data using AJAX.\n        $this->chart->load(backpack_url('charts/users'));\n\n        // OPTIONAL\n        $this->chart->minimalist(false);\n        $this->chart->displayLegend(true);\n    }\n\n    /**\n     * Respond to AJAX calls with all the chart data points.\n     *\n     * @return json\n     */\n    public function data()\n    {\n        $today_users = User::whereDate('created_at', today())->count();\n        $yesterday_users = User::whereDate('created_at', today()->subDays(1))->count();\n        $users_2_days_ago = User::whereDate('created_at', today()->subDays(2))->count();\n        $users_3_days_ago = User::whereDate('created_at', today()->subDays(3))->count();\n        $users_4_days_ago = User::whereDate('created_at', today()->subDays(4))->count();\n        $users_5_days_ago = User::whereDate('created_at', today()->subDays(5))->count();\n        $users_6_days_ago = User::whereDate('created_at', today()->subDays(6))->count();\n\n        $this->chart->dataset('Users Created', 'bar', [\n            $users_6_days_ago,\n            $users_5_days_ago,\n            $users_4_days_ago,\n            $users_3_days_ago,\n            $users_2_days_ago,\n            $yesterday_users,\n            $today_users,\n        ])->color('rgb(66, 186, 150, 1)')\n            ->backgroundColor('rgb(66, 186, 150, 0.4)');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Lines/ChartjsLineChartController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Lines;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Chartjs\\Chart;\n\nclass ChartjsLineChartController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        $this->chart->dataset('Red', 'line', [1, 2, 8, 3])\n                    ->color('rgba(205, 32, 31, 1)')\n                    ->backgroundColor('rgba(205, 32, 31, 0.4)');\n        $this->chart->dataset('Blue', 'line', [4, 3, 5, 1])\n                    ->color('rgba(70, 127, 208, 1)')\n                    ->backgroundColor('rgba(70, 127, 208, 0.4)');\n        $this->chart->dataset('Yellow', 'line', [8, 1, 4, 3])\n                    ->color('rgb(255, 193, 7)')\n                    ->backgroundColor('rgba(255, 193, 7, 0.4)');\n        $this->chart->dataset('Green', 'line', [1, 4, 7, 11])\n                    ->color('rgb(66, 186, 150)')\n                    ->backgroundColor('rgba(66, 186, 150, 0.4)');\n        $this->chart->dataset('Purple', 'line', [2, 10, 5, 3])\n                    ->color('rgb(96, 92, 168)')\n                    ->backgroundColor('rgba(96, 92, 168, 0.4)');\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['One', 'Two', 'Three', 'Four']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Lines/EchartsLineChartController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Lines;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Echarts\\Chart;\n\nclass EchartsLineChartController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        $this->chart->dataset('Red', 'line', [1, 2, 8, 3])\n                    ->color('rgba(205, 32, 31, 1)');\n        $this->chart->dataset('Blue', 'line', [4, 3, 5, 1])\n                    ->color('rgba(70, 127, 208, 1)');\n        $this->chart->dataset('Yellow', 'line', [8, 1, 4, 3])\n                    ->color('rgb(255, 193, 7)');\n        $this->chart->dataset('Green', 'line', [1, 4, 7, 11])\n                    ->color('rgb(66, 186, 150)');\n        $this->chart->dataset('Purple', 'line', [2, 10, 5, 3])\n                    ->color('rgb(96, 92, 168)');\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['One', 'Two', 'Three', 'Four']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Lines/FrappeLineChartController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Lines;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Frappe\\Chart;\n\nclass FrappeLineChartController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        $this->chart->dataset('Red', 'line', [1, 2, 8, 3])\n                    ->color('rgba(205, 32, 31, 1)');\n        $this->chart->dataset('Blue', 'line', [4, 3, 5, 1])\n                    ->color('rgba(70, 127, 208, 1)');\n        $this->chart->dataset('Yellow', 'line', [8, 1, 4, 3])\n                    ->color('#FFC107');\n        $this->chart->dataset('Green', 'line', [1, 4, 7, 11])\n                    ->color('rgb(66, 186, 150)');\n        $this->chart->dataset('Purple', 'line', [2, 10, 5, 3])\n                    ->color('rgb(96, 92, 168)');\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['One', 'Two', 'Three', 'Four']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Lines/HighchartsLineChartController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Lines;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Highcharts\\Chart;\n\nclass HighchartsLineChartController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        $this->chart->dataset('Red', 'line', [1, 2, 8, 3])\n                    ->color('rgba(205, 32, 31, 1)');\n        $this->chart->dataset('Blue', 'line', [4, 3, 5, 1])\n                    ->color('rgba(70, 127, 208, 1)');\n        $this->chart->dataset('Yellow', 'line', [8, 1, 4, 3])\n                    ->color('rgb(255, 193, 7)');\n        $this->chart->dataset('Green', 'line', [1, 4, 7, 11])\n                    ->color('rgb(66, 186, 150)');\n        $this->chart->dataset('Purple', 'line', [2, 10, 5, 3])\n                    ->color('rgb(96, 92, 168)');\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['One', 'Two', 'Three', 'Four']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/NewEntriesChartController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts;\n\nuse App\\User;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse Backpack\\NewsCRUD\\app\\Models\\Article;\nuse Backpack\\NewsCRUD\\app\\Models\\Category;\nuse Backpack\\NewsCRUD\\app\\Models\\Tag;\nuse ConsoleTVs\\Charts\\Classes\\Chartjs\\Chart;\n\nclass NewEntriesChartController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        // MANDATORY. Set the labels for the dataset points\n        $labels = [];\n        for ($days_backwards = 30; $days_backwards >= 0; $days_backwards--) {\n            if ($days_backwards == 1) {\n            }\n            $labels[] = $days_backwards.' days ago';\n        }\n        $this->chart->labels($labels);\n\n        // RECOMMENDED. Set URL that the ChartJS library should call, to get its data using AJAX.\n        $this->chart->load(backpack_url('charts/new-entries'));\n\n        // OPTIONAL\n        $this->chart->minimalist(false);\n        $this->chart->displayLegend(true);\n    }\n\n    /**\n     * Respond to AJAX calls with all the chart data points.\n     *\n     * @return json\n     */\n    public function data()\n    {\n        for ($days_backwards = 30; $days_backwards >= 0; $days_backwards--) {\n            // Could also be an array_push if using an array rather than a collection.\n            $users[] = User::whereDate('created_at', today()->subDays($days_backwards))\n                            ->count();\n            $articles[] = Article::whereDate('created_at', today()->subDays($days_backwards))\n                            ->count();\n            $categories[] = Category::whereDate('created_at', today()->subDays($days_backwards))\n                            ->count();\n            $tags[] = Tag::whereDate('created_at', today()->subDays($days_backwards))\n                            ->count();\n        }\n\n        $this->chart->dataset('Users', 'line', $users)\n            ->color('rgb(66, 186, 150)')\n            ->backgroundColor('rgba(66, 186, 150, 0.4)');\n\n        $this->chart->dataset('Articles', 'line', $articles)\n            ->color('rgb(96, 92, 168)')\n            ->backgroundColor('rgba(96, 92, 168, 0.4)');\n\n        $this->chart->dataset('Categories', 'line', $categories)\n            ->color('rgb(255, 193, 7)')\n            ->backgroundColor('rgba(255, 193, 7, 0.4)');\n\n        $this->chart->dataset('Tags', 'line', $tags)\n            ->color('rgba(70, 127, 208, 1)')\n            ->backgroundColor('rgba(70, 127, 208, 0.4)');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Pies/ChartjsPieController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Pies;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Chartjs\\Chart;\n\nclass ChartjsPieController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        $this->chart->dataset('Red', 'pie', [10, 20, 80, 30])\n                    ->backgroundColor([\n                        'rgb(70, 127, 208)',\n                        'rgb(66, 186, 150)',\n                        'rgb(96, 92, 168)',\n                        'rgb(255, 193, 7)',\n                    ]);\n\n        // OPTIONAL\n        $this->chart->displayAxes(false);\n        $this->chart->displayLegend(true);\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['HTML', 'CSS', 'PHP', 'JS']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Pies/EchartsPieController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Pies;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Echarts\\Chart;\n\nclass EchartsPieController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        $this->chart->dataset('Red', 'pie', [10, 20, 80, 30])\n                    ->color([\n                        'rgb(70, 127, 208)',\n                        'rgb(66, 186, 150)',\n                        'rgb(96, 92, 168)',\n                        'rgb(255, 193, 7)',\n                    ]);\n\n        // OPTIONAL\n        $this->chart->displayAxes(false);\n        $this->chart->displayLegend(true);\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['HTML', 'CSS', 'PHP', 'JS']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Pies/FrappePieController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Pies;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Frappe\\Chart;\n\nclass FrappePieController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        $this->chart->dataset('Red', 'pie', [10, 20, 80, 30]);\n        // ->color([\n        // \t'rgb(70, 127, 208)',\n        // \t'rgb(66, 186, 150)',\n        // \t'rgb(96, 92, 168)',\n        // \t'rgb(255, 193, 7)'\n        // ]);\n\n        // OPTIONAL\n        // $this->chart->displayAxes(false);\n        // $this->chart->displayLegend(true);\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['HTML', 'CSS', 'PHP', 'JS']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Charts/Pies/HighchartsPieController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Charts\\Pies;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\ChartController;\nuse ConsoleTVs\\Charts\\Classes\\Highcharts\\Chart;\n\nclass HighchartsPieController extends ChartController\n{\n    public function setup()\n    {\n        $this->chart = new Chart();\n\n        $this->chart->dataset('Red', 'pie', [10, 20, 80, 30])\n                    ->color([\n                        'rgb(70, 127, 208)',\n                        'rgb(66, 186, 150)',\n                        'rgb(96, 92, 168)',\n                        'rgb(255, 193, 7)',\n                    ]);\n\n        // OPTIONAL\n        $this->chart->displayAxes(false);\n        $this->chart->displayLegend(true);\n\n        // MANDATORY. Set the labels for the dataset points\n        $this->chart->labels(['HTML', 'CSS', 'PHP', 'JS']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/ColumnMonsterCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class ColumnMonsterCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass ColumnMonsterCrudController extends MonsterCrudController\n{\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\Monster::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/column-monster');\n        CRUD::setEntityNameStrings('column monster', 'column monsters');\n        $this->crud->set('show.setFromDb', false);\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    public function setupListOperation()\n    {\n        $this->crud->disableResponsiveTable();\n\n        $timeSpaceColumns = static::getFieldsArrayForTimeAndSpaceTab();\n\n        foreach ($timeSpaceColumns as $columnKey => $column) {\n            // transform field array names into comma separated string\n            if (is_array($column['name'])) {\n                $timeSpaceColumns[$columnKey]['name'] = implode(',', $column['name']);\n            }\n        }\n\n        $this->crud->addColumns(static::getFieldsArrayForSimpleTab());\n        $this->crud->addColumns($timeSpaceColumns);\n        $this->crud->addColumns(static::getFieldsArrayForSelectsTab());\n        $this->crud->addColumns(static::getFieldsArrayForRelationshipsTab());\n        $this->crud->addColumns(static::getFieldsArrayForUploadsTab());\n        $this->crud->addColumns(static::getFieldsArrayForWysiwygEditorsTab());\n        $this->crud->addColumns(static::getFieldsArrayForMiscellaneousTab());\n\n        foreach ($this->crud->columns() as $columnKey => $column) {\n            // remove all custom_html columns\n            if (isset($column['type']) && $column['type'] === 'custom_html') {\n                $this->crud->removeColumn($columnKey);\n                continue;\n            }\n            // unset the `col-` bootstrap size classes as they would break the columns in the table.\n            if (isset($column['wrapper']['class'])) {\n                $column['wrapper']['class'] = $this->removeBootstrapSizingClasses($column['wrapper']['class']);\n            }\n\n            if (isset($column['subfields'])) {\n                $subfields = $column['subfields'];\n                foreach ($subfields as $subfieldKey => $subfield) {\n                    if (isset($subfield['wrapper']['class'])) {\n                        $subfields[$subfieldKey]['wrapper']['class'] = $this->removeBootstrapSizingClasses($subfield['wrapper']['class']);\n                    }\n                }\n                $column['subfields'] = $subfields;\n            }\n            $this->crud->modifyColumn($columnKey, $column);\n        }\n    }\n\n    private function removeBootstrapSizingClasses($classes)\n    {\n        $classes = explode(' ', $classes);\n        $newClasses = [];\n        foreach ($classes as $class) {\n            if (!str_starts_with($class, 'col-')) {\n                array_push($newClasses, $class);\n            }\n        }\n\n        return implode(' ', $newClasses);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/DummyCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\DummyRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\n\n/**\n * Class DummyCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass DummyCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\FetchOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; }\n\n    public function setup()\n    {\n        $this->crud->setModel(\\App\\Models\\Dummy::class);\n        $this->crud->setRoute(config('backpack.base.route_prefix').'/dummy');\n        $this->crud->setEntityNameStrings('dummy', 'dummies');\n    }\n\n    public function fetchProduct()\n    {\n        return $this->fetch(\\App\\Models\\Product::class);\n    }\n\n    public function fetchProducts()\n    {\n        return $this->fetch(\\App\\Models\\Product::class);\n    }\n\n    public function fetchIcon()\n    {\n        return $this->fetch(\\App\\Models\\Icon::class);\n    }\n\n    protected function setupListOperation()\n    {\n        CRUD::addColumn('name');\n        CRUD::addColumn('description');\n\n        foreach ($this->groups() as $groupKey => $groupFields) {\n            CRUD::addColumn([\n                'name'     => $groupKey,\n                'label'    => str_replace('_', ' ', Str::title($groupKey)),\n                'type'     => 'array_count',\n            ]);\n        }\n    }\n\n    protected function setupCreateOperation()\n    {\n        $this->crud->setValidation(DummyRequest::class);\n        $this->crud->setOperationSetting('contentClass', 'col-md-12');\n\n        CRUD::addField('name');\n        CRUD::addField('description');\n\n        foreach ($this->groups() as $groupKey => $groupFields) {\n            CRUD::addField([\n                'name'        => $groupKey,\n                'label'       => str_replace('_', ' ', Str::title($groupKey)),\n                'type'        => 'repeatable',\n                'fake'        => true,\n                'store_in'    => 'extras',\n                'subfields'   => $groupFields,\n            ]);\n        }\n    }\n\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    protected function setupShowOperation()\n    {\n        $this->setupListOperation();\n        $this->crud->setOperationSetting('contentClass', 'col-md-12');\n\n        // for field types that have multiple name (ex: date_range)\n        // split those into two separate text columns\n        foreach ($this->groups() as $groupKey => $groupFields) {\n            CRUD::removeColumn($groupKey);\n\n            foreach ($groupFields as $key => $field) {\n                if (is_array($field['name'])) {\n                    foreach ($field['name'] as $name) {\n                        $newField = $field;\n                        $newField['name'] = $name;\n                        $newField['type'] = 'text';\n                        $groupFields[] = $newField;\n                    }\n                    unset($groupFields[$key]);\n                }\n            }\n\n            // only consider fields that have both name and label (needed for table column)\n            // reject custom_html fields (since they have no value)\n            $validFields = collect($groupFields)->reject(function ($value, $key) {\n                $is_custom_html_field = $value['type'] ?? '' == 'custom_html';\n                $does_not_have_label = !isset($value['label']);\n                $does_not_have_name = !isset($value['name']);\n\n                return $is_custom_html_field || $does_not_have_label || $does_not_have_name;\n            })->pluck('label', 'name');\n\n            CRUD::addColumn([\n                'name'     => $groupKey,\n                'label'    => str_replace('_', ' ', Str::title($groupKey)),\n                'type'     => 'table',\n                'columns'  => $validFields,\n            ]);\n        }\n\n        CRUD::addColumn([\n            'name' => 'created_at',\n            'type' => 'datetime',\n        ]);\n        CRUD::addColumn([\n            'name' => 'updated_at',\n            'type' => 'datetime',\n        ]);\n    }\n\n    protected function groups()\n    {\n        // instead of manually defining all the field type here too\n        // let's pull all field types defined in MonsterCrudController instead\n        // since they're already nicely split by tab,\n        // we can split them exactly the same here, but into groups instead of tabs\n        // (one repeatable field for each tab in MonsterCrudController)\n        $groups['simple'] = MonsterCrudController::getFieldsArrayForSimpleTab();\n        $groups['time_and_space'] = MonsterCrudController::getFieldsArrayForTimeAndSpaceTab();\n        $groups['selects'] = MonsterCrudController::getFieldsArrayForSelectsTab();\n        $groups['uploads'] = MonsterCrudController::getFieldsArrayForUploadsTab();\n        $groups['big_texts'] = MonsterCrudController::getFieldsArrayForWysiwygEditorsTab();\n        $groups['miscellaneous'] = MonsterCrudController::getFieldsArrayForMiscellaneousTab();\n\n        // some fields do not make sense, or do not work inside repeatable, so let's exclude them\n        $excludedFieldTypes = [\n            'address', // TODO\n            'address_google', // TODO\n            'checklist_dependency', // only available in PermissionManager package\n            // 'custom_html', // this works (of course), it's only used for heading, but the page looks better without them\n            'enum', // doesn't make sense inside repeatable\n            'page_or_link', // only available in PageManager package\n            'upload', // currently impossible to make it work inside repeatable;\n            'upload_multiple',  // currently impossible to make it work inside repeatable;\n        ];\n\n        foreach ($groups as $groupKey => $fields) {\n            $groups[$groupKey] = Arr::where($fields, function ($field) use ($excludedFieldTypes) {\n                // eliminate fields that have 1-1 relationships\n                // (determined by the fact that their names use dot notation)\n                if (is_string($field['name']) && strpos($field['name'], '.') != 0) {\n                    return false;\n                }\n\n                // eliminate the heading for 1-1 relationships\n                // since those are not available inside repeatable, the heading should be hidden too\n                if (is_string($field['name']) && $field['name'] == 'select_1_1_heading') {\n                    return false;\n                }\n\n                // if no field type was set, the system will probably use text, number or relationship\n                // and all of those are fine, they work well inside repeatable fields\n                if (!isset($field['type'])) {\n                    return true;\n                }\n\n                // exclude all field types that we KNOW don't work inside repeatable\n                return !in_array($field['type'], $excludedFieldTypes);\n            });\n        }\n\n        return $groups;\n    }\n\n    public function ajaxUpload()\n    {\n        if (app('env') === 'production') {\n            return response()->json(['errors' => [\n                'message' => 'Uploads are disabled in production.',\n            ]], 500);\n        }\n\n        return $this->traitAjaxUpload();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/EditableMonsterCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\MonsterRequest;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\nclass EditableMonsterCrudController extends MonsterCrudController\n{\n    use \\Backpack\\EditableColumns\\Http\\Controllers\\Operations\\MinorUpdateOperation;\n\n    public function setup()\n    {\n        parent::setup();\n\n        CRUD::setRoute(config('backpack.base.route_prefix').'/editable-monster');\n        CRUD::setEntityNameStrings('editable monster', 'editable monsters');\n    }\n\n    public function setupListOperation()\n    {\n        CRUD::addButtonFromView('top', 'fake-editable-columns', 'fake-editable-columns');\n\n        if (request()->query->get('fake')) {\n            return $this->setupListOperationFake();\n        }\n\n        // demo editable_text column\n        CRUD::column('text')\n            ->label('Text')\n            ->type('editable_text');\n\n        CRUD::column('email')\n            ->label('Email')\n            ->type('editable_text');\n\n        // demo editable_switch column\n        CRUD::column('checkbox')\n            ->label('Switch')\n            ->type('editable_switch');\n\n        // demo editable_checkbox column\n        // CRUD::column('editable_checkbox')\n        //     ->label('Editable checkbox')\n        //     ->type('editable_checkbox');\n\n        // demo editable_select column\n        CRUD::column('select_from_array')\n            ->label('Select')\n            ->type('editable_select')\n            ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three']);\n\n        CRUD::column('text_and_email');\n    }\n\n    public function setupListOperationFake()\n    {\n        CRUD::addButtonFromView('top', 'fake-editable-columns', 'fake-editable-columns');\n\n        // demo fake editable_text column\n        CRUD::column('fake-text')\n            ->label('Fake Text')\n            ->type('editable_text')\n            ->fake(true);\n\n        // demo fake editable_switch column\n        CRUD::column('fake-switch')\n            ->label('Fake Switch')\n            ->type('editable_switch')\n            ->fake(true);\n\n        // demo fake editable_checkbox column\n        CRUD::column('fake-checkbox')\n            ->label('Fake Checkbox')\n            ->type('editable_checkbox')\n            ->fake(true);\n\n        // demo fake editable_select column\n        CRUD::column('fake-select')\n            ->label('Fake Select')\n            ->type('editable_select')\n            ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three'])\n            ->fake(true);\n    }\n\n    protected function setupMinorUpdateOperation()\n    {\n        $this->crud->setValidation(MonsterRequest::class);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/FieldMonsterCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Backpack\\CRUD\\app\\Library\\Widget;\n\nclass FieldMonsterCrudController extends MonsterCrudController\n{\n    public function setup()\n    {\n        $this->crud->setModel(\\App\\Models\\Monster::class);\n        $this->crud->setRoute(config('backpack.base.route_prefix').'/field-monster');\n        $this->crud->setEntityNameStrings('field monster', 'field monsters');\n\n        $this->crud->set('show.setFromDb', false);\n    }\n\n    protected function setupCreateOperation()\n    {\n        $this->setupFieldsForTopScenarios();\n\n        parent::setupCreateOperation();\n\n        // load all the fields as a JS array\n        Widget::add()->type('script')->content('assets/js/monster/fields.js');\n        // then test each crud.field() method individually\n        Widget::add()->type('script')->content('assets/js/monster/test-hide-field.js');\n        Widget::add()->type('script')->content('assets/js/monster/test-show-field.js');\n        Widget::add()->type('script')->content('assets/js/monster/test-disable-field.js');\n        Widget::add()->type('script')->content('assets/js/monster/test-enable-field.js');\n        Widget::add()->type('script')->content('assets/js/monster/test-require-field.js');\n        Widget::add()->type('script')->content('assets/js/monster/test-unrequire-field.js');\n        Widget::add()->type('script')->content('assets/js/monster/test-custom-field.js');\n        Widget::add()->type('script')->content('assets/js/monster/test-onchange-field.js');\n    }\n\n    protected function setupFieldsForTopScenarios()\n    {\n        Widget::add()->type('script')->content('assets/js/monster/test-top-scenarios.js');\n\n        CRUD::field('notice')->type('custom_html')->value('<i class=\"text-small\">This tab shows the Top 10 Scenarios that the crud.field() JS library covers. These fields will NOT hide/show/etc when the buttons above are clicked, that\\'s ok, don\\'t worry.</i><hr>')->tab('Top 10 Scenarios');\n\n        // MUST: when a checkbox is checked, show a second field;\n        CRUD::field('visible')->type('checkbox')->fake(true)->tab('Top 10 Scenarios');\n        CRUD::field('visible_where')->type('text')->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-11 offset-1'])->tab('Top 10 Scenarios');\n\n        // MUST: when a checkbox is checked, show a second field AND un-disable/un-readonly it;\n        CRUD::field('displayed')->type('checkbox')->fake(true)->tab('Top 10 Scenarios');\n        CRUD::field('displayed_where')->type('text')->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-11 offset-1'])->tab('Top 10 Scenarios');\n\n        // MUST: when a radio has something specific selected, show a second field;\n        CRUD::field('type')->type('radio')->options(['Type A', 'Type B', 'Type C', 'Other'])->inline(true)->fake(true)->tab('Top 10 Scenarios');\n        // when type is Other, show an input to specify its type\n        CRUD::field('custom_type')->type('text')->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-11 offset-1'])->tab('Top 10 Scenarios');\n\n        // MUST: when a select has something specific selected, show a second field;\n        CRUD::field('parent')->type('select_from_array')->options([\n            1 => 'Parent 1',\n            2 => 'Parent 2',\n            3 => 'Parent 3',\n            4 => 'Parent 4',\n            5 => 'Parent 5',\n            6 => 'Parent 6',\n            6 => 'Other',\n        ])->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-6'])->tab('Top 10 Scenarios');\n        CRUD::field('custom_parent')->type('text')->fake(true)->wrapperAttributes(['class' => 'form-group col-sm-6'])->tab('Top 10 Scenarios');\n        CRUD::field('another_separator')->type('custom_html')->value('<hr>')->tab('Top 10 Scenarios');\n\n        // MUST: when a checkbox is checked AND a select has a certain value, then show a third field;\n        // done, re-used displayed and parent\n\n        // MUST: when a checkbox is checked OR a select has a certain value, then show a third field;\n        // done, re-used displayed and parent\n\n        // SHOULD: when a select is a certain value, show a second field; if it's another value, show a third field;\n        // done, re-used category\n\n        // SHOULD: when a checkbox is checked, automatically check a different checkbox or radio;\n        // done, re-used visible, it now checks displayed\n\n        // COULD: when a text input is written into, write into a second input (eg. slug);\n        CRUD::field('title')->size(6)->tab('Top 10 Scenarios');\n        CRUD::field('title_url_segment')->size(6)->tab('Top 10 Scenarios');\n\n        // COULD: when multiple inputs change, change a last input to calculate the total or smth;\n        CRUD::field('full_price')->type('number')->size(4)->tab('Top 10 Scenarios');\n        CRUD::field('discounted_price')->type('number')->size(4)->tab('Top 10 Scenarios');\n        CRUD::field('discount_percentage')->type('number')->size(4)->tab('Top 10 Scenarios');\n        CRUD::field('repeatable_example_1')->type('repeatable')->tab('Top 10 Scenarios')->store_in('extras')->subfields([\n            [\n                'name'    => 'yes_or_no',\n                'type'    => 'select2_from_array',\n                'label'   => 'Yes or No',\n                'options' => ['no' => 'no', 'yes'=> 'yes'],\n            ],\n            [\n                'name' => 'if_no',\n                'type' => 'text',\n            ],\n            [\n                'name' => 'if_yes',\n                'type' => 'text',\n            ],\n        ]);\n\n        CRUD::field('repeatable_example_2')->type('repeatable')->tab('Top 10 Scenarios')->store_in('extras')->subfields([\n            [\n                'name'  => 'how_many',\n                'type'  => 'number',\n                'label' => 'How Many?',\n                'min'   => 1,\n                'step'  => 1,\n            ],\n            [\n                'name' => 'if_more_than_10',\n                'type' => 'text',\n            ],\n            [\n                'name' => 'if_more_than_20',\n                'type' => 'text',\n            ],\n        ]);\n\n        CRUD::field('live_validation_select')->type('select2_from_array')->options([\n            'Zero', 'One', 'Two', 'Three',\n        ])->tab('Top 10 Scenarios')->size(4);\n        CRUD::field('live_validation_text')->type('text')->tab('Top 10 Scenarios')->size(4);\n        CRUD::field('live_validation_number')->type('number')->step(1)->tab('Top 10 Scenarios')->size(4);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/FluentMonsterCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\MonsterRequest as StoreRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\nclass FluentMonsterCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\FetchOperation;\n\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\Monster::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/fluent-monster');\n        CRUD::setEntityNameStrings('fluent monster', 'fluent monsters');\n    }\n\n    public function fetchProduct()\n    {\n        return $this->fetch(\\App\\Models\\Product::class);\n    }\n\n    public function fetchIcon()\n    {\n        return $this->fetch(\\App\\Models\\Icon::class);\n    }\n\n    public function setupListOperation()\n    {\n        CRUD::setOperationSetting('responsiveTable', false);\n        CRUD::column('text');\n        CRUD::column('textarea');\n        CRUD::column('image')->type('image');\n        CRUD::column('base64_image')->type('image')->label('Base64 Image');\n        CRUD::column('checkbox')\n                ->type('boolean')\n                ->label('Boolean')\n                ->options([0 => 'Yes', 1 => 'No'])\n                ->wrapper([\n                    'element' => 'span',\n                    'class'   => static function ($crud, $column, $entry) {\n                        return 'badge rounded-pill bg-'.($entry->{$column['name']} ? 'danger' : 'success');\n                    },\n                ]);\n        CRUD::column('checkbox')->key('check')->label('Agreed')->type('check');\n        CRUD::column('created_at')->type('closure')->label('Created At')->function(function ($entry) {\n            return 'Created on '.$entry->created_at;\n        });\n        CRUD::column('date')->type('date');\n        CRUD::column('datetime')->type('datetime');\n        CRUD::column('email')->type('email')->label('Email Address');\n        // show both text and email values in one column\n        // this column is here to demo and test the custom searchLogic functionality\n        CRUD::column('model_function')\n                ->type('model_function')\n                ->label('Text and Email')\n                ->function_name('getTextAndEmailAttribute')\n                ->searchLogic(function ($query, $column, $searchTerm) {\n                    $query->orWhere('email', 'like', '%'.$searchTerm.'%');\n                    $query->orWhere('text', 'like', '%'.$searchTerm.'%');\n                });\n        CRUD::column('number')->type('number');\n        CRUD::column('radio')\n                ->type('radio')\n                ->options([0 => 'Draft', 1 => 'Published', 2 => 'Other']);\n        CRUD::column('select')\n                ->type('select')\n                ->entity('category')\n                ->attribute('name')\n                ->model(\"Backpack\\NewsCRUD\\app\\Models\\Category\")\n                ->wrapper([\n                    'href' => function ($crud, $column, $entry, $related_key) {\n                        return backpack_url('category/'.$related_key.'/show');\n                    },\n                ]);\n        CRUD::column('select_from_array')\n                ->type('select_from_array')\n                ->label('Select_from_array')\n                ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three']);\n        CRUD::column('tags')\n                ->type('select_multiple')\n                ->label('Select_multiple')\n                ->entity('tags')\n                ->attribute('name')\n                ->model('Backpack\\NewsCRUD\\app\\Models\\Tag')\n                ->wrapper([\n                    'href' => function ($crud, $column, $entry, $related_key) {\n                        return backpack_url('tag/'.$related_key.'/show');\n                    },\n                ]);\n        CRUD::column('video')->type('video');\n\n        CRUD::enableDetailsRow();\n        CRUD::setDetailsRowView('vendor.backpack.crud.details_row.monster');\n        CRUD::enableExportButtons();\n        CRUD::button('open_google')->stack('line')->modelFunction('openGoogle')->makeFirst();\n\n        $this->addCustomCrudFilters();\n    }\n\n    public function setupShowOperation()\n    {\n        $this->setupListOperation();\n\n        CRUD::set('show.contentClass', 'col-md-12');\n\n        CRUD::column('easymde')->type('markdown')->label('Markdown (EasyMDE)');\n        CRUD::column('table')->type('table')->columns([\n            'name'  => 'Name',\n            'desc'  => 'Description',\n            'price' => 'Price',\n        ]);\n        CRUD::column('name')->type('array_count')->key('table_count')->label('Array count');\n        CRUD::column('extras')->type('array')->key('array')->label('Array');\n        CRUD::column('table')\n                ->key('multidimensional_array')\n                ->type('multidimensional_array')\n                ->label('Multidimensional Array')\n                ->visible_key('name');\n        CRUD::column('category')\n                ->label('Model Function Attribute')\n                ->type('model_function_attribute')\n                ->function_name('getCategory')\n                ->attribute('name');\n        CRUD::column('number')->type('phone')->label('Phone')->key('phone');\n        CRUD::column('upload_multiple')->type('upload_multiple')->prefix('uploads/');\n    }\n\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(StoreRequest::class);\n        CRUD::setOperationSetting('contentClass', 'col-md-12 bold-labels');\n\n        CRUD::field('text')->type('text')->label('Text')\n            ->tab('Simple')->size(6);\n\n        CRUD::field('email')->type('email')->label('Email')\n            ->tab('Simple')->wrapper(['class' => 'form-group col-md-6']);\n\n        CRUD::field('textarea')->type('textarea')->label('Textarea')->tab('Simple');\n        CRUD::field('number')->type('number')->label('Number')\n            ->tab('Simple')->wrapper(['class' => 'form-group col-md-3']);\n\n        CRUD::field('float')->type('number')->label('Float')->attributes(['step' => 'any'])\n            ->tab('Simple')->wrapper(['class' => 'form-group col-md-3']);\n\n        CRUD::field('number_with_prefix')->type('number')\n            ->prefix('$')->fake(true)->store_in('extras')\n            ->tab('Simple')->wrapper(['class' => 'form-group col-md-3']);\n\n        CRUD::field('number_with_suffix')->type('number')\n            ->suffix('.00')->fake(true)->store_in('extras')\n            ->tab('Simple')->wrapper(['class' => 'form-group col-md-3']);\n\n        CRUD::field('text_with_both_prefix_and_suffix')->type('number')\n            ->prefix('@')->suffix(\"<i class='la la-home'></i>\")->fake(true)->store_in('extras')\n            ->tab('Simple')->wrapper(['class' => 'form-group col-md-6']);\n\n        CRUD::field('password')->type('password')\n            ->tab('Simple')->wrapper(['class' => 'form-group col-md-6']);\n\n        CRUD::field('radio')->type('radio')->label('Status (radio)')->options([\n            // the key will be stored in the db, the value will be shown as label;\n            0 => 'Draft',\n            1 => 'Published',\n            2 => 'Other',\n        ])->inline(true)->tab('Simple');\n\n        CRUD::field('checkbox')->type('checkbox')->label('I have not read the terms and conditions and I never will (checkbox)')->tab('Simple');\n\n        CRUD::field('switch')->type('switch')->label('I have not read the terms and conditions and I never will (switch)')->tab('Simple')->fake(true);\n\n        CRUD::field('hidden')->type('hidden')->default('hidden value')->tab('Simple');\n\n        // -----------------\n        // DATE, TIME AND SPACE tab\n        // -----------------\n\n        CRUD::field('week')\n            ->type('week')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->tab('Time and space');\n\n        CRUD::field('month')\n            ->type('month')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->tab('Time and space');\n\n        CRUD::field('date')\n            ->type('date')\n            ->label('Date (HTML5 spec)')\n            ->attributes([\n                'pattern'     => '[0-9]{4}-[0-9]{2}-[0-9]{2}',\n                'placeholder' => 'yyyy-mm-dd',\n            ])\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->tab('Time and space');\n\n        CRUD::field('date_picker')\n            ->type('date_picker')\n            ->label('Date (jQuery plugin)')\n            ->date_picker_options([\n                'todayBtn' => true,\n                'format'   => 'dd-mm-yyyy',\n                'language' => 'en',\n            ])\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->tab('Time and space');\n\n        CRUD::field('datetime')\n            ->type('datetime')\n            ->label('Datetime (HTML5 spec)')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->tab('Time and space');\n\n        CRUD::field('datetime_picker')\n            ->type('datetime_picker')\n            ->label('Datetime picker (jQuery plugin)')\n            ->datetime_picker_options([\n                'format'   => 'DD/MM/YYYY HH:mm',\n                'language' => 'en',\n            ])\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->tab('Time and space');\n\n        CRUD::field('start_date,end_date')\n            ->type('date_range')\n            ->label('Date Range')\n            ->default(['2020-03-28 01:01', '2020-04-05 02:00'])\n            ->date_range_options([\n                'timePicker' => true,\n                'locale'     => ['format' => 'DD/MM/YYYY HH:mm'],\n            ])\n            ->tab('Time and space');\n\n        // -----------------\n        // SELECTS tab\n        // -----------------\n\n        CRUD::field('select_1_n_heading')->type('custom_html')->tab('Selects')\n                ->value('<h5 class=\"mb-0 text-primary\">1-n Relationships (HasOne, BelongsTo)</h5>');\n\n        CRUD::field('select')\n                ->type('select')\n                ->label('Select (HTML Spec Select Input for 1-n relationship)')\n                ->entity('category')\n                ->attribute('name')\n                ->model('Backpack\\NewsCRUD\\app\\Models\\Category')\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('select2')\n                ->type('select2')\n                ->label('Select2 (1-n relationship)')\n                ->entity('category')\n                ->attribute('name')\n                ->model('Backpack\\NewsCRUD\\app\\Models\\Category')\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('select2_from_ajax')\n                ->type('select2_from_ajax')\n                ->label(\"Article <small class='font-light'>(select2_from_ajax for a 1-n relationship)</small>\")\n                ->entity('article')\n                ->attribute('title')\n                ->model('Backpack\\NewsCRUD\\app\\Models\\Article')\n                ->data_source(url('api/article'))\n                ->method('POST')\n                ->placeholder('Select an article')\n                ->minimum_input_length(2)\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('icon_id')\n                ->type('relationship')\n                ->label('Relationship (1-n with InlineCreate; no AJAX)'.backpack_new_badge('New in 4.1'))\n                // ->entity('icon')\n                ->attribute('name')\n                // ->data_source(backpack_url('monster/fetch/icon'))\n                ->inline_create(true)\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('select_n_n_heading')->type('custom_html')->tab('Selects')\n            ->value('<h5 class=\"mb-0 mt-3 text-primary\">n-n Relationship with Pivot Table (HasMany, BelongsToMany)</h5>');\n\n        CRUD::field('tags')\n                ->type('select_multiple')\n                ->label('Select_multiple (n-n relationship with pivot table)')\n                ->entity('tags')\n                ->attribute('name')\n                ->model('Backpack\\NewsCRUD\\app\\Models\\Tag')\n                ->pivot(true)\n                ->tab('Selects');\n\n        CRUD::field('categories')\n                ->type('select2_multiple')\n                ->label('Select2_multiple (n-n relationship with pivot table)')\n                ->entity('categories')\n                ->attribute('name')\n                ->model(\\Backpack\\NewsCRUD\\app\\Models\\Category::class)\n                ->allows_null(true)\n                ->pivot(true)\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('articles')\n                ->type('select2_from_ajax_multiple')\n                ->label(\"Articles <small class='font-light'>(select2_from_ajax_multiple for an n-n relationship with pivot table)</small>\")\n                ->entity('articles')\n                ->attribute('title')\n                ->model(\\Backpack\\NewsCRUD\\app\\Models\\Article::class)\n                ->data_source(url('api/article'))\n                ->placeholder('Select one or more articles')\n                ->minimum_input_length(2)\n                ->method('post')\n                ->pivot(true)\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('products')\n                ->type('relationship')\n                ->label('Relationship (n-n with InlineCreate; Fetch using AJAX)'.backpack_new_badge('New in 4.1'))\n                ->entity('products')\n                // ->attribute('name')\n                ->ajax(true)\n                ->data_source(backpack_url('monster/fetch/product'))\n                // ->inline_create(true) // TODO: make it work this way too\n                ->inline_create(['entity' => 'product'])\n                // ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('select_heading')->type('custom_html')->tab('Selects')\n            ->value('<h5 class=\"mb-0 mt-3 text-primary\">No Relationship</h5>');\n\n        CRUD::field('select_from_array')\n                ->type('select_from_array')\n                ->label('Select_from_array (no relationship, 1-1 or 1-n)')\n                ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three'])\n                ->allows_null(true)\n                ->allows_multiple(false)\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('select2_from_array')\n                ->type('select2_from_array')\n                ->label('Select2_from_array (no relationship, 1-1 or 1-n)')\n                ->options(['one' => 'One', 'two' => 'Two', 'three' => 'Three'])\n                ->allows_null(true)\n                ->allows_multiple(false)\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Selects');\n\n        CRUD::field('select_and_order')\n                ->type('select_and_order')\n                ->label('Select and order')\n                ->options([\n                    1 => 'Option 1',\n                    2 => 'Option 2',\n                    3 => 'Option 3',\n                    4 => 'Option 4',\n                    5 => 'Option 5',\n                    6 => 'Option 6',\n                    7 => 'Option 7',\n                    8 => 'Option 8',\n                    9 => 'Option 9',\n                ])\n                ->fake(true)\n                ->tab('Selects');\n        CRUD::field('wysiwyg')->type('summernote')->label('WYSIWYG')->tab('Editors');\n\n        CRUD::field('icondummy')\n                ->type('relationship')\n                ->label('Relationship to non-nullable model (belongs_to_non_nullable)')\n                ->entity('icondummy')\n                ->attribute('icon')\n                ->model(\\App\\Models\\Icon::class)\n                ->allows_null(false)\n                ->tab('Selects');\n\n        // -----------------\n        // UPLOADS tab\n        // -----------------\n\n        if (app('env') == 'production') {\n            CRUD::field('separator')\n                ->type('custom_html')\n                ->value('<p><small><strong>Note: </strong>In the online demo we\\'ve restricted the upload and media library fields a lot, or hidden them entirely. To test them out, you can <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs/demo\">download and install this demo admin panel</a> in your local environment.</small></p>')\n                ->tab('Uploads');\n        }\n\n        CRUD::field('browse')\n                ->type('browse')\n                ->label('Browse (using elFinder)')\n                ->tab('Uploads');\n\n        CRUD::field('browse_multiple')\n                ->type('browse_multiple')\n                ->label('Browse multiple')\n                ->sortable(true)\n                // ->multiple(true)\n                // ->mime_types(null)\n                ->tab('Uploads');\n\n        CRUD::field('upload')\n                ->type('upload')\n                ->label('Upload')\n                ->upload(true)\n                ->disk('uploads')\n                ->tab('Uploads');\n\n        CRUD::field('upload_multiple')\n                ->type('upload_multiple')\n                ->upload(true)\n                ->tab('Uploads');\n\n        CRUD::field('base64_image')\n                ->type('base64_image')\n                ->label('Base64 Image - includes cropping')\n                ->crop(true)\n                ->filename(null)\n                ->aspect_ratio(1)\n                ->src(null) // null to read straight from DB, else model accessor\n                ->tab('Uploads');\n\n        CRUD::field('image')\n                ->type('image')\n                ->label('Image - includes cropping')\n                ->upload(true)\n                ->crop(true)\n                ->aspect_ratio(1)\n                ->src(null) // null to read straight from DB, else model accessor\n                ->tab('Uploads');\n\n        // -----------------\n        // BIG TEXTS tab\n        // -----------------\n\n        CRUD::field('easymde')\n                ->type('easymde')\n                ->label('EasyMDE - markdown editor')\n                ->tab('Big texts')\n                ->fake(true);\n\n        CRUD::field('summernote')\n                ->type('summernote')\n                ->label('Summernote editor')\n                ->tab('Big texts');\n        CRUD::field('tinymce')\n                ->type('tinymce')\n                ->label('TinyMCE')\n                ->tab('Big texts');\n\n        // -----------------\n        // MISCELLANEOUS tab\n        // -----------------\n\n        CRUD::field('color')\n                ->type('color')\n                ->label('Color picker (HTML5 spec)')\n                ->wrapper(['class' => 'form-group col-md-6'])\n                ->tab('Miscellaneous');\n\n        CRUD::field('video')\n                ->type('video')\n                ->label('Video - link to video file on Youtube or Vimeo')\n                ->tab('Miscellaneous')\n                ->wrapper(['class' => 'form-group col-md-5']);\n\n        CRUD::field('range')\n                ->type('range')\n                ->label('range')\n                // optional\n                ->attributes([\n                    'min' => 0,\n                    'max' => 10,\n                ])\n                ->tab('Miscellaneous')\n                ->wrapper(['class' => 'form-group col-md-5']);\n\n        CRUD::field('icon_picker')\n                ->type('icon_picker')\n                ->label('Icon Picker')\n                ->iconset('fontawesome')\n                ->wrapper(['class' => 'form-group col-md-2'])\n                ->tab('Miscellaneous');\n\n        CRUD::field('table')\n                ->type('table')\n                ->label('Table')\n                ->columns([\n                    'name'  => 'Name',\n                    'desc'  => 'Description',\n                    'price' => 'Price',\n                ])\n                ->min(0)\n                ->max(5)\n                ->tab('Miscellaneous');\n\n        CRUD::field('fake_table')\n                ->type('table')\n                ->label('Fake Table')\n                ->fake(true)\n                ->columns([\n                    'name'  => 'Name',\n                    'desc'  => 'Description',\n                    'price' => 'Price',\n                ])\n                ->min(0)\n                ->max(5)\n                ->tab('Miscellaneous');\n\n        CRUD::field('url')\n                ->type('url')\n                ->label('URL')\n                ->tab('Miscellaneous');\n\n        CRUD::field('url')->remove();\n    }\n\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    protected function addCustomCrudFilters()\n    {\n        CRUD::filter('checkbox')\n                ->type('simple')\n                ->label('Simple')\n                ->whenActive(function () {\n                    CRUD::addClause('where', 'checkbox', '1');\n                });\n\n        CRUD::filter('select_from_array')\n                ->type('dropdown')\n                ->label('Dropdown')\n                ->values(['one' => 'One', 'two' => 'Two', 'three' => 'Three'])\n                ->whenActive(function ($value) {\n                    CRUD::addClause('where', 'select_from_array', $value);\n                });\n\n        CRUD::filter('text')\n                ->type('text')\n                ->label('Text')\n                ->whenActive(function ($value) {\n                    CRUD::addClause('where', 'text', 'LIKE', \"%$value%\");\n                });\n\n        CRUD::filter('number')\n                ->type('range')\n                ->label('Range')\n                ->label_from('min value')\n                ->label_to('max value')\n                ->whenActive(function ($value) {\n                    $range = json_decode($value);\n                    if ($range->from && $range->to) {\n                        CRUD::addClause('where', 'number', '>=', (float) $range->from);\n                        CRUD::addClause('where', 'number', '<=', (float) $range->to);\n                    }\n                });\n\n        CRUD::filter('date')\n                ->type('date')\n                ->label('Date')\n                ->whenActive(function ($value) {\n                    CRUD::addClause('where', 'date', '=', $value);\n                });\n\n        CRUD::filter('date_range')\n                ->type('date_range')\n                ->label('Date range')\n                ->whenActive(function ($value) {\n                    $dates = json_decode($value);\n                    CRUD::addClause('where', 'date', '>=', $dates->from);\n                    CRUD::addClause('where', 'date', '<=', $dates->to);\n                });\n\n        CRUD::filter('select2')\n                ->type('select2')\n                ->label('Select2')\n                ->values(function () {\n                    return \\Backpack\\NewsCRUD\\app\\Models\\Category::all()->keyBy('id')->pluck('name', 'id')->toArray();\n                })->whenActive(function ($value) {\n                    CRUD::addClause('where', 'select2', $value);\n                });\n\n        CRUD::filter('select2_multiple')\n                ->type('select2_multiple')\n                ->label('S2 multiple')\n                ->values(function () {\n                    return \\Backpack\\NewsCRUD\\app\\Models\\Category::all()->keyBy('id')->pluck('name', 'id')->toArray();\n                })->whenActive(function ($values) {\n                    foreach (json_decode($values) as $key => $value) {\n                        CRUD::addClause('orWhere', 'select2', $value);\n                    }\n                });\n\n        CRUD::filter('select2_from_ajax')\n                ->type('select2_ajax')\n                ->label('S2 Ajax')\n                ->placeholder('Pick an article')\n                ->values(url('api/article-search'))\n                ->method('POST')\n                ->whenActive(function ($value) {\n                    CRUD::addClause('where', 'select2_from_ajax', $value);\n                });\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/HeroCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\HeroRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class HeroCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass HeroCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\Hero::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/hero');\n        CRUD::setEntityNameStrings('hero', 'heroes');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('name');\n        CRUD::column('monster');\n        CRUD::column('stories');\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(HeroRequest::class);\n        CRUD::setOperationSetting('contentClass', 'col-md-12');\n\n        CRUD::field('name');\n        CRUD::field('stories')\n            ->label('Stories'.backpack_new_badge())\n            ->subfields([\n                [\n                    'name' => 'name',\n                ],\n                [\n                    'name'      => 'monsters',\n                    'type'      => 'select2_multiple',\n                    'model'     => \\App\\Models\\Monster::class,\n                    'entity'    => 'monsters',\n                    'attribute' => 'text',\n                    'pivot'     => true,\n                ],\n            ])\n            ->hint('<small class=\"float-right\">Select the related Story over a <code>belongsToMany</code> relationship (n-n) with extra pivot fields.</small>');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    public static function getMonsterSubfields()\n    {\n        $subfields = CaveCrudController::getMonsterSubfields();\n\n        /* foreach ($subfields as $key => $subfield) {\n            // fake fields don't work here for some reason\n            // TODO: fix the problem and remove this\n            if (isset($subfield['fake']) && $subfield['fake']) {\n                unset($subfields[$key]);\n                continue;\n            }\n            // multiple fields don't work here for some reason\n            // TODO: fix the problem and remove this\n            if (isset($subfield['pivot']) && $subfield['pivot']) {\n                unset($subfields[$key]);\n                continue;\n            }\n            // fields from the \"relationship\" tab don't work here for some reason\n            // TODO: fix the problem and remove this\n            if (isset($subfield['tab']) && $subfield['tab'] == 'Relationships') {\n                unset($subfields[$key]);\n                continue;\n            }\n        }\n */\n        return $subfields;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/IconCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\IconRequest as StoreRequest;\n// VALIDATION: change the requests to match your own file names if you need form validation\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\n\nclass IconCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\InlineCreateOperation;\n    use \\Backpack\\ReviseOperation\\ReviseOperation;\n\n    public function setup()\n    {\n        $this->crud->setModel(\\App\\Models\\Icon::class);\n        $this->crud->setRoute(config('backpack.base.route_prefix').'/icon');\n        $this->crud->setEntityNameStrings('icon', 'icons');\n    }\n\n    protected function setupListOperation()\n    {\n        $this->crud->addColumns(['name', 'icon']);\n\n        $this->crud->addFilter([\n            'type'  => 'date_range',\n            'name'  => 'created_at',\n            'label' => 'Created At',\n        ], null, function ($value) {\n            $value = json_decode($value, true);\n\n            // if the filter is active\n            if ($value) {\n                $this->crud->addClause('where', 'created_at', '>=', $value['from']);\n                $this->crud->addClause('where', 'created_at', '<=', $value['to']);\n            }\n        });\n    }\n\n    protected function setupCreateOperation()\n    {\n        $this->crud->setValidation(StoreRequest::class);\n        $this->crud->addField('name');\n        $this->crud->addField([\n            'label'   => 'Icon',\n            'name'    => 'icon',\n            'type'    => 'icon_picker',\n            'iconset' => 'fontawesome4', // options: fontawesome, glyphicon, ionicon, weathericon, mapicon, octicon, typicon, elusiveicon, materialdesign\n        ]);\n    }\n\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/MeetingCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\MeetingRequest;\nuse App\\Models\\Meeting;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Backpack\\CRUD\\app\\Library\\Widget;\nuse Carbon\\Carbon;\n\n/**\n * Class MeetingCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass MeetingCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\FetchOperation;\n    use \\Backpack\\CalendarOperation\\CalendarOperation;\n    use Operations\\SMSOperation;\n\n    protected array $meetingTypes = [\n        ['id' => 'informational', 'title' => 'Informational', 'location' => 'In-person'],\n        ['id' => 'brainstorming', 'title' => 'Brainstorming', 'location' => 'In-person'],\n        ['id' => 'decision-making', 'title' => 'Decision Making', 'location' => 'In-person'],\n        ['id' => 'problem-solving', 'title' => 'Problem Solving', 'location' => 'In-person'],\n        ['id' => 'status-update', 'title' => 'Status Update', 'location' => 'In-person'],\n        ['id' => 'training', 'title' => 'Training', 'location' => 'Virtual'],\n        ['id' => 'feedback', 'title' => 'Feedback', 'location' => 'Virtual'],\n        ['id' => 'performance-review', 'title' => 'Performance Review', 'location' => 'Virtual'],\n        ['id' => 'planning', 'title' => 'Planning', 'location' => 'Virtual'],\n        ['id' => 'social', 'title' => 'Social', 'location' => 'Virtual'],\n        ['id' => 'networking', 'title' => 'Networking', 'location' => 'Hybrid'],\n        ['id' => 'interview', 'title' => 'Interview', 'location' => 'Hybrid'],\n        ['id' => 'presentation', 'title' => 'Presentation', 'location' => 'Hybrid'],\n        ['id' => 'review', 'title' => 'Review', 'location' => 'Hybrid'],\n        ['id' => 'other', 'title' => 'Other', 'location' => 'Hybrid'],\n    ];\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     */\n    public function setup(): void\n    {\n        CRUD::setModel(Meeting::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/meeting');\n        CRUD::setEntityNameStrings(__('meeting'), __('meetings'));\n    }\n\n    public function getCalendarFieldsMap()\n    {\n        return [\n            'title'            => 'title',\n            'start'            => 'start',\n            'end'              => 'end',\n            'background_color' => 'background_color',\n            'text_color'       => 'text_color',\n            'all_day'          => 'all_day',\n            'email'            => 'email',\n            'number'           => 'number',\n        ];\n    }\n\n    public function setupCalendarOperation()\n    {\n        $this->crud->setOperationSetting('initial-view', 'dayGridMonth');\n\n        $this->crud->setOperationSetting('views', ['dayGridMonth', 'timeGridWeek', 'timeGridDay']);\n\n        $this->crud->setOperationSetting('editable', true);\n\n        $this->crud->setOperationSetting('background_color', '#3788d8');\n\n        $this->crud->setOperationSetting('text_color', '#ffffff');\n\n        $this->addCalendarLineButton(\n            action: 'sms',\n            label: 'Send SMS',\n            url: fn (Meeting $entry) => url($this->crud->route.'/'.$entry->id.'/s-m-s'),\n            group: 'send'\n        );\n\n        $this->addCalendarLineButton(\n            action: 'email',\n            label: 'Send Email',\n            url: fn (Meeting $entry) => url($this->crud->route.'/'.$entry->id.'/s-m-s?email='.$entry->email),\n            group: 'send'\n        );\n\n        $this->addCalendarLineButton(\n            action: 'call',\n            label: 'Call',\n            url: fn (Meeting $entry) => url($this->crud->route.'/'.$entry->id.'/s-m-s?call='.$entry->number),\n            group: 'call'\n        );\n\n        $this->addCalendarLineButton(\n            action: 'alert',\n            label: 'Javascript Event',\n            group: 'alert',\n            properties: [\n                'message' => 'Alert message!',\n            ],\n        );\n\n        Widget::add()\n            ->type('script')\n            ->content('assets/js/meetings.js');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     */\n    protected function setupListOperation(): void\n    {\n        CRUD::column('title')\n            ->type('text');\n\n        CRUD::column('types')\n            ->type('text')\n            ->value(fn (Meeting $entry): string => collect($entry->types)->map(fn ($type) => ($type['title'] ?? '').' ('.($type['location'] ?? '').')')->join(', '));\n\n        CRUD::column('start')\n            ->type('datetime');\n\n        CRUD::column('end')\n            ->type('datetime');\n\n        CRUD::column('background_color')\n            ->showColorHex(false)\n            ->type('color');\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     */\n    protected function setupCreateOperation(): void\n    {\n        CRUD::setValidation(MeetingRequest::class);\n\n        $start = request()->has('start') ? Carbon::parse(request('start')) : null;\n        $end = request()->has('end') ? Carbon::parse(request('end')) : null;\n\n        CRUD::field('title')\n            ->type('text');\n\n        CRUD::field('types')\n            ->type('select2_json_from_api')\n            ->data_source(backpack_url('meeting/fetch/types'))\n            ->method('POST')\n            ->default($this->meetingTypes[0])\n            ->attributes_to_store(['id', 'title', 'location'])\n            ->attribute('title')\n            ->multiple(true)\n            ->minimum_input_length(0);\n\n        CRUD::field('email')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->type('text');\n\n        CRUD::field('number')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->type('phone');\n\n        CRUD::field('all_day')\n            ->type('switch');\n\n        CRUD::field('start')\n            ->type('datetime')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->value($start);\n\n        CRUD::field('end')\n            ->type('datetime')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->value($end);\n\n        CRUD::field('separator')\n            ->type('custom_html')\n            ->value('');\n\n        CRUD::field('background_color')\n            ->type('color')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->default('#3788d8');\n\n        CRUD::field('text_color')\n            ->type('color')\n            ->wrapper(['class' => 'form-group col-md-6'])\n            ->default('#ffffff');\n\n        Widget::add()\n            ->type('script')\n            ->content('assets/js/meeting.js');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     */\n    protected function setupUpdateOperation(): void\n    {\n        $this->setupCreateOperation();\n    }\n\n    /**\n     * Define the types to fetch.\n     */\n    public function fetchTypes()\n    {\n        return collect($this->meetingTypes)\n            ->filter(fn ($value): bool => str_contains(strtolower($value['title']), strtolower(request('q'))));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/MonsterCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\MonsterRequest as StoreRequest;\n// VALIDATION: change the requests to match your own file names if you need form validation\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Backpack\\CRUD\\app\\Library\\Widget;\nuse Illuminate\\Support\\Collection;\n\nclass MonsterCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\DataformModal\\Http\\Controllers\\Operations\\CreateInModalOperation;\n    use \\Backpack\\DataformModal\\Http\\Controllers\\Operations\\UpdateInModalOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\FetchOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; }\n    use Operations\\SMSOperation; //Custom Form Operation Example\n    use \\Backpack\\ActivityLog\\Http\\Controllers\\Operations\\ModelActivityOperation;\n    use \\Backpack\\ActivityLog\\Http\\Controllers\\Operations\\EntryActivityOperation;\n    use \\Backpack\\ReportOperation\\Http\\Controllers\\Operations\\ReportOperation;\n\n    public function setup()\n    {\n        $this->crud->setModel(\\App\\Models\\Monster::class);\n        $this->crud->setRoute(config('backpack.base.route_prefix').'/monster');\n        $this->crud->setEntityNameStrings('monster', 'monsters');\n\n        $this->crud->set('show.setFromDb', false);\n    }\n\n    public function fetchProduct()\n    {\n        return $this->fetch(\\App\\Models\\Product::class);\n    }\n\n    public function fetchProducts()\n    {\n        return $this->fetch(\\App\\Models\\Product::class);\n    }\n\n    public function fetchIcon()\n    {\n        return $this->fetch(\\App\\Models\\Icon::class);\n    }\n\n    public function fetchArticle()\n    {\n        return $this->fetch(\\App\\Models\\Article::class);\n    }\n\n    public function fetchPaginatedTypes()\n    {\n        $types = [\n            ['id' => 'informational', 'title' => 'Informational', 'location' => 'In-person'],\n            ['id' => 'brainstorming', 'title' => 'Brainstorming', 'location' => 'In-person'],\n            ['id' => 'decision-making', 'title' => 'Decision Making', 'location' => 'In-person'],\n            ['id' => 'problem-solving', 'title' => 'Problem Solving', 'location' => 'In-person'],\n            ['id' => 'training', 'title' => 'Training', 'location' => 'Virtual'],\n            ['id' => 'planning', 'title' => 'Planning', 'location' => 'Virtual'],\n            ['id' => 'social', 'title' => 'Social', 'location' => 'Virtual'],\n            ['id' => 'networking', 'title' => 'Networking', 'location' => 'Hybrid'],\n            ['id' => 'interview', 'title' => 'Interview', 'location' => 'Hybrid'],\n            ['id' => 'review', 'title' => 'Review', 'location' => 'Hybrid'],\n        ];\n\n        Collection::macro('paginate', function (int $perPage = 15, ?int $page = null, array $options = []) {\n            $page ??= \\Illuminate\\Pagination\\Paginator::resolveCurrentPage() ?? 1;\n\n            return new \\Illuminate\\Pagination\\LengthAwarePaginator($this->forPage($page, $perPage)->toArray(), $this->count(), $perPage, $page, $options);\n        });\n\n        return collect($types)\n            ->filter(fn (array $value): bool => str_contains(strtolower($value['title']), strtolower(request('q'))))\n            ->paginate(4);\n    }\n\n    public function fetchSimpleTypes()\n    {\n        $types = [\n            'informational'   => 'Informational',\n            'brainstorming'   => 'Brainstorming',\n            'decision-making' => 'Decision Making',\n            'problem-solving' => 'Problem Solving',\n            'training'        => 'Training',\n            'planning'        => 'Planning',\n            'social'          => 'Social',\n            'networking'      => 'Networking',\n            'interview'       => 'Interview',\n            'review'          => 'Review',\n        ];\n\n        return collect($types)->filter(fn (string $value): bool => str_contains(strtolower($value), strtolower(request('q'))));\n    }\n\n    public function setupListOperation()\n    {\n        $this->crud->addColumns([\n            [\n                'name'  => 'text',\n                'tab'   => 'Simple',\n            ],\n            [\n                'name'  => 'textarea',\n                'tab'   => 'Simple',\n            ],\n            [\n                'name'  => 'articles', // relationship column\n                'tab'   => 'Simple',\n            ],\n            [\n                'name'  => 'image', // The db column name\n                'label' => 'Image', // Table column heading\n                'type'  => 'image',\n                'tab'   => 'Uploads',\n            ],\n            [\n                'name'  => 'base64_image', // The db column name\n                'label' => 'Base64 Image'.backpack_pro_badge(), // Table column heading\n                'type'  => 'image',\n                'tab'   => 'Uploads',\n            ],\n            [\n                'name'  => 'checkbox',\n                'label' => 'Boolean',\n                'type'  => 'boolean',\n                // optionally override the Yes/No texts\n                'options' => [0 => 'Yes', 1 => 'No'],\n                'tab'     => 'Simple',\n                'wrapper' => [\n                    'element' => 'span',\n                    'class'   => function ($crud, $column, $entry, $related_key) {\n                        if ($column['text'] == 'Yes') {\n                            return 'badge rounded-pill bg-success text-white';\n                        }\n\n                        return 'badge rounded-pill bg-danger text-white';\n                    },\n                ],\n            ],\n            [\n                'name'  => 'checkbox', // The db column name\n                'key'   => 'agreed',\n                'label' => 'Agreed', // Table column heading\n                'type'  => 'checkbox',\n                'tab'   => 'Simple',\n            ],\n            [\n                'name'     => 'created_at',\n                'label'    => 'Created At',\n                'type'     => 'closure',\n                'function' => function ($entry) {\n                    return 'Created on '.$entry->created_at;\n                },\n                'tab' => 'Miscellaneous',\n            ],\n            [\n                'name'  => 'date', // The db column name\n                'label' => 'Date', // Table column heading\n                'type'  => 'date',\n                'tab'   => 'Time and space',\n            ],\n            [\n                'name'  => 'datetime', // The db column name\n                'label' => 'Datetime', // Table column heading\n                'type'  => 'datetime',\n                'tab'   => 'Time and space',\n            ],\n            [\n                'name'  => 'email', // The db column name\n                'label' => 'Email Address', // Table column heading\n                'type'  => 'email',\n                'tab'   => 'Simple',\n            ],\n            [\n                'name'          => 'status',\n                'type'          => 'enum',\n                'label'         => 'Enum',\n                'enum_function' => 'getReadableStatus',\n                'tab'           => 'Simple',\n            ],\n            [\n                // show both text and email values in one column\n                // this column is here to demo and test the custom searchLogic functionality\n                'name'          => 'model_function',\n                'label'         => 'Text and Email', // Table column heading\n                'type'          => 'model_function',\n                'function_name' => 'getTextAndEmailAttribute', // the method in your Model\n                'searchLogic'   => function ($query, $column, $searchTerm) {\n                    $query->orWhere('email', 'like', '%'.$searchTerm.'%');\n                    $query->orWhere('text', 'like', '%'.$searchTerm.'%');\n                },\n                'escaped'       => true,\n                'tab'           => 'Miscellaneous',\n            ],\n            [\n                'name'  => 'number', // The db column name\n                'label' => 'Number', // Table column heading\n                'type'  => 'number',\n                'tab'   => 'Simple',\n            ],\n            [\n                'name'        => 'radio',\n                'label'       => 'Radio',\n                'type'        => 'radio',\n                'options'     => [0 => 'Draft', 1 => 'Published', 2 => 'Other'],\n                'tab'         => 'Simple',\n            ],\n            [   // 1-n relationship\n                'label'     => 'Select', // Table column heading\n                'type'      => 'select',\n                'name'      => 'select', // the column that contains the ID of that connected entity;\n                'entity'    => 'category', // the method that defines the relationship in your Model\n                'attribute' => 'name', // foreign key attribute that is shown to user\n                'model'     => \"Backpack\\NewsCRUD\\app\\Models\\Category\", // foreign key model\n                'tab'       => 'Selects',\n                'wrapper'   => [\n                    'href' => function ($crud, $column, $entry, $related_key) {\n                        return backpack_url('category/'.$related_key.'/show');\n                    },\n                ],\n            ],\n            [   // select_from_array\n                'name'      => 'select_from_array',\n                'label'     => 'Select_from_array',\n                'type'      => 'select_from_array',\n                'options'   => ['one' => 'One', 'two' => 'Two', 'three' => 'Three'],\n                'tab'       => 'Selects',\n            ],\n            [   // select_multiple: n-n relationship (with pivot table)\n                'label'     => 'Select_multiple', // Table column heading\n                'type'      => 'select_multiple',\n                'name'      => 'tags', // the method that defines the relationship in your Model\n                'entity'    => 'tags', // the method that defines the relationship in your Model\n                'attribute' => 'name', // foreign key attribute that is shown to user\n                'model'     => \"Backpack\\NewsCRUD\\app\\Models\\Tag\", // foreign key model\n                'tab'       => 'Selects',\n                'wrapper'   => [\n                    'href' => function ($crud, $column, $entry, $related_key) {\n                        return backpack_url('tag/'.$related_key.'/show');\n                    },\n                ],\n            ],\n            [   // select_multiple: n-n relationship (with pivot table)\n                'label'     => 'Relationship_count', // Table column heading\n                'type'      => 'relationship_count',\n                'name'      => 'categories', // the method that defines the relationship in your Model\n                'entity'    => 'categories', // the method that defines the relationship in your Model\n                'tab'       => 'Relationship',\n                'wrapper'   => [\n                    'href' => function ($crud, $column, $entry, $related_key) {\n                        return backpack_url('category');\n                    },\n                ],\n            ],\n\n        ]);\n\n        $this->crud->enableDetailsRow();\n        $this->crud->setDetailsRowView('vendor.backpack.crud.details_row.monster');\n        $this->crud->enableExportButtons();\n        $this->crud->addButtonFromModelFunction('line', 'open_google', 'openGoogle', 'beginning');\n\n        //quickly create a button\n        $this->crud->button('email')->stack('top')->view('crud::buttons.quick')->meta([\n            'access'  => true,\n            'label'   => 'Quick Button',\n            'icon'    => 'la la-fast-forward',\n            'wrapper' => [\n                // 'element' => 'a',\n                'href'   => 'https://backpackforlaravel.com/docs/crud-buttons#creating-a-quick-button-1',\n                'target' => '_blank',\n                'title'  => 'Creating a quick button',\n            ],\n        ]);\n\n        $this->addCustomCrudFilters();\n    }\n\n    public function setupShowOperation()\n    {\n        // add a widget\n        Widget::add([\n            'type'       => 'datatable',\n            'controller' => 'App\\Http\\Controllers\\Admin\\IconCrudController',\n            'name'       => 'icon_crud',\n            'section'    => 'after_content',\n            'content'    => [\n                'header' => 'Icons for this monster',\n            ],\n            'wrapper'    => ['class'=> 'mb-3'],\n        ]);\n\n        Widget::add([\n            'type'       => 'datatable',\n            'controller' => 'App\\Http\\Controllers\\Admin\\ProductCrudController',\n            'name'       => 'products_datatable',\n            'section'    => 'after_content',\n            'content'    => [\n                'header' => 'Products for this monster',\n            ],\n            'wrapper'    => ['class'=> 'mb-3'],\n            'configure'  => function ($crud, $entry = null) {\n                // Customize which columns to show\n                $crud->removeAllColumns();\n                $crud->addColumn(['name' => 'name', 'label' => 'Product Name']);\n                $crud->addColumn(['name' => 'price', 'label' => 'Price']);\n\n                // Get the current monster's products\n                if ($entry) {\n                    $productIds = $entry->products->pluck('id')->toArray();\n                    if (count($productIds) > 0) {\n                        // Configure the controller to only show products related to this monster\n                        $crud->addClause('whereIn', 'id', $productIds);\n                    } else {\n                        // Force an empty result when there are no products\n                        $crud->addClause('where', 'id', 0); // This will match no products\n                    }\n\n                    // Remove buttons that aren't needed for this embedded view\n\n                    // Disable features that aren't needed\n                    $crud->denyAccess(['create', 'update', 'delete']);\n                    $crud->disableResponsiveTable();\n                }\n            },\n        ]);\n\n        $this->crud->setOperationSetting('tabsEnabled', true);\n        $this->setupListOperation();\n\n        $this->crud->set('show.contentClass', 'col-md-12');\n\n        $this->crud->addColumn([   // EasyMDE\n            'name'    => 'easymde',\n            'key'     => 'easymde_markdown',\n            'label'   => 'Markdown'.backpack_pro_badge(),\n            'type'    => 'markdown',\n            'tab'     => 'WYSIWYG Editors',\n        ]);\n\n        $this->crud->addColumn([   // EasyMDE\n            'name'    => 'easymde',\n            'label'   => 'EasyMDE'.backpack_pro_badge(),\n            'type'    => 'easymde',\n            'tab'     => 'WYSIWYG Editors',\n        ]);\n\n        $this->crud->addColumn([\n            'name'    => 'ckeditor',\n            'type'    => 'ckeditor',\n            'label'   => 'Ckeditor'.backpack_pro_badge(),\n            'tab'     => 'WYSIWYG Editors',\n        ]);\n\n        $this->crud->addColumn([\n            'name'   => 'summernote',\n            'type'   => 'summernote',\n            'label'  => 'Summernote',\n            'tab'    => 'WYSIWYG Editors',\n        ]);\n\n        $this->crud->addColumn([\n            'name'   => 'tinymce',\n            'type'   => 'tinymce',\n            'label'  => 'TinyMCE'.backpack_pro_badge(),\n            'tab'    => 'WYSIWYG Editors',\n        ]);\n\n        $this->crud->addColumn([\n            'name'      => 'features',\n            'label'     => 'Features'.backpack_pro_badge(),\n            'type'      => 'repeatable',\n            'fake'      => true,\n            'subfields' => [\n                [\n                    'name'    => 'feature',\n                    'wrapper' => [\n                        'class' => 'col-md-3',\n                    ],\n                ],\n                [\n                    'name'    => 'value',\n                    'wrapper' => [\n                        'class' => 'col-md-6',\n                    ],\n                ],\n                [\n                    'name'    => 'quantity',\n                    'type'    => 'number',\n                    'wrapper' => [\n                        'class' => 'col-md-3',\n                    ],\n                ],\n            ],\n            'tab' => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'            => 'table',\n            'label'           => 'Table'.backpack_pro_badge(),\n            'type'            => 'table',\n            'tab'             => 'Miscellaneous',\n            'columns'         => [\n                'name'  => 'Name',\n                'desc'  => 'Description',\n                'price' => 'Price',\n            ],\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'browse_multiple', // The db column name\n            'key'   => 'browse_multiple_array',\n            'label' => 'Array'.backpack_pro_badge(), // Table column heading\n            'type'  => 'array',\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'table', // The db column name\n            'key'   => 'table_count',\n            'label' => 'Array count'.backpack_pro_badge(), // Table column heading\n            'type'  => 'array_count',\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'        => 'table', // The db column name\n            'key'         => 'multidimensional_array',\n            'label'       => 'Multidimensional Array', // Table column heading\n            'type'        => 'multidimensional_array',\n            'visible_key' => 'name',\n            'tab'         => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'          => 'category',\n            'key'           => 'category_name',\n            'label'         => 'Model Function Attribute', // Table column heading\n            'type'          => 'model_function_attribute',\n            'function_name' => 'getCategory', // the method in your Model\n            'attribute'     => 'name',\n            'tab'           => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'number', // The db column name\n            'key'   => 'phone',\n            'label' => 'Phone', // Table column heading\n            'type'  => 'phone',\n            'tab'   => 'Simple',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'switch',\n            'label' => 'Switch',\n            'type'  => 'switch',\n            'tab'   => 'Simple',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'switch',\n            'key'   => 'check',\n            'label' => 'Check',\n            'type'  => 'check',\n            'tab'   => 'Simple',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'my_custom_html',\n            'label' => 'Custom HTML',\n            'type'  => 'custom_html',\n            'value' => '<span class=\"text-danger\">Something</span>',\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'view',\n            'label' => 'Custom View',\n            'type'  => 'view',\n            'view'  => 'crud::columns.custom_view_column_example',\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'features',\n            'key'   => 'json_features',\n            'label' => 'JSON',\n            'type'  => 'json',\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'      => 'id',\n            'type'      => 'number',\n            'label'     => '#',\n            'orderable' => false,\n            'tab'       => 'Simple',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'dummyproducts',\n            'type'  => 'relationship',\n            'label' => 'Relationship'.backpack_pro_badge(),\n            'tab'   => 'Relationship',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'address_google',\n            'type'  => 'address_google',\n            'label' => 'Address Google'.backpack_pro_badge(),\n            'tab'   => 'Time and space',\n        ]);\n\n        $this->crud->addColumn([\n            'name'      => 'roles',\n            'type'      => 'checklist',\n            'label'     => 'Checklist',\n            'entity'    => 'roles',\n            'attribute' => 'name',\n            'tab'       => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'color',\n            'type'  => 'color',\n            'label' => 'Color',\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'date_picker',\n            'type'  => 'date_picker',\n            'label' => 'Date Picker'.backpack_pro_badge(),\n            'tab'   => 'Time and space',\n        ]);\n\n        $this->crud->addColumn([ // Date_range\n            'name'       => 'start_date,end_date', // two columns with a comma\n            'label'      => 'Date Range'.backpack_pro_badge(),\n            'type'       => 'date_range',\n            'tab'        => 'Time and space',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'datetime_picker',\n            'type'  => 'datetime_picker',\n            'label' => 'Datetime Picker'.backpack_pro_badge(),\n            'tab'   => 'Time and space',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'location',\n            'type'  => 'google_map',\n            'label' => 'Google Map'.backpack_pro_badge(),\n            'tab'   => 'Time and space',\n        ]);\n\n        $this->crud->addColumn([\n            'name'    => 'icon_picker',\n            'type'    => 'icon_picker',\n            'label'   => 'Icon Picker'.backpack_pro_badge(),\n            'iconset' => 'fontawesome',\n            'tab'     => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'month',\n            'type'  => 'month',\n            'label' => 'Month',\n            'tab'   => 'Time and space',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'range',\n            'type'  => 'range',\n            'label' => 'Range',\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'select_and_order',\n            'type'  => 'select_and_order',\n            'label' => 'Select And Order'.backpack_pro_badge(),\n            'tab'   => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'   => 'select_grouped_id',\n            'type'   => 'select_grouped',\n            'label'  => 'Select Grouped',\n            'entity' => 'article',\n            'tab'    => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'   => 'select2',\n            'type'   => 'select2',\n            'label'  => 'Select2'.backpack_pro_badge(),\n            'entity' => 'categorySelect2',\n            'tab'    => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'   => 'select2_from_ajax',\n            'type'   => 'select2_from_ajax',\n            'label'  => 'Select2 From Ajax'.backpack_pro_badge(),\n            'entity' => 'article',\n            'tab'    => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'select2_from_array',\n            'type'  => 'select2_from_array',\n            'label' => 'Select2 From Array'.backpack_pro_badge(),\n            'tab'   => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'   => 'select2_grouped_id',\n            'type'   => 'select2_grouped',\n            'label'  => 'Select2 Grouped'.backpack_pro_badge(),\n            'entity' => 'article',\n            'tab'    => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'categories',\n            'type'  => 'select2_multiple',\n            'label' => 'Select2 Multiple'.backpack_pro_badge(),\n            'tab'   => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'   => 'select2_nested_id',\n            'type'   => 'select2_nested',\n            'label'  => 'Select2 Nested'.backpack_pro_badge(),\n            'entity' => 'category',\n            'tab'    => 'Selects',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'slug',\n            'type'  => 'slug',\n            'label' => 'Slug'.backpack_pro_badge(),\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'time',\n            'type'  => 'time',\n            'label' => 'Time',\n            'tab'   => 'Time and space',\n        ]);\n\n        $this->crud->addColumn([\n            'name'   => 'upload',\n            'type'   => 'upload',\n            'label'  => 'Upload',\n            'disk'   => 'uploads',\n            'tab'    => 'Uploads',\n        ]);\n\n        $this->crud->addColumn([   // Upload\n            'name'   => 'upload_multiple',\n            'label'  => 'Upload Multiple',\n            'type'   => 'upload_multiple',\n            'disk'   => 'public',\n            'tab'    => 'Uploads',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'browse',\n            'type'  => 'browse',\n            'label' => 'Browse'.backpack_pro_badge(),\n            'tab'   => 'Uploads',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'browse_multiple',\n            'type'  => 'browse_multiple',\n            'label' => 'Browse Multiple'.backpack_pro_badge(),\n            'tab'   => 'Uploads',\n        ]);\n\n        $this->crud->addColumn([\n            'label'        => 'Dropzone'.backpack_pro_badge(),\n            'name'         => 'dropzone',\n            'type'         => 'dropzone',\n            'tab'          => 'Uploads',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'url',\n            'type'  => 'url',\n            'label' => 'URL',\n            'tab'   => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'week',\n            'type'  => 'week',\n            'label' => 'Week',\n            'tab'   => 'Time and space',\n        ]);\n\n        $this->crud->addColumn([\n            'name'            => 'video', // The db column name\n            'label'           => 'Video'.backpack_pro_badge(), // Table column heading\n            'type'            => 'video',\n            'youtube_api_key' => env('YOUTUBE_API_KEY'),\n            'tab'             => 'Miscellaneous',\n        ]);\n\n        $this->crud->addColumn([\n            'name'  => 'browse_multiple',\n            'key'   => 'browse_multiple_array',\n            'type'  => 'array',\n            'label' => 'Array'.backpack_pro_badge(),\n            'tab'   => 'Miscellaneous',\n        ]);\n    }\n\n    protected function setupCreateOperation()\n    {\n        $this->crud->setValidation(StoreRequest::class);\n        $this->crud->setOperationSetting('contentClass', 'col-md-12 bold-labels');\n\n        $this->crud->addFields(static::getFieldsArrayForSimpleTab());\n        $this->crud->addFields(static::getFieldsArrayForTimeAndSpaceTab());\n        $this->crud->addFields(static::getFieldsArrayForSelectsTab());\n        $this->crud->addFields(static::getFieldsArrayForRelationshipsTab());\n        $this->crud->addFields(static::getFieldsArrayForUploadsTab());\n        $this->crud->addFields(static::getFieldsArrayForWysiwygEditorsTab());\n        $this->crud->addFields(static::getFieldsArrayForMiscellaneousTab());\n\n        if (env('GOOGLE_PLACES_KEY')) {\n            $this->crud->addField([   // Address_google\n                'name'          => 'address_google',\n                'label'         => 'Address_google '.backpack_pro_badge(),\n                'type'          => 'address_google',\n                'fake'          => true,\n                'store_as_json' => true,\n                'tab'           => 'Time and space',\n            ]);\n\n            $this->crud->addField([\n                'name'    => 'location',\n                'label'   => 'Google_map '.backpack_pro_badge(),\n                'type'    => 'google_map',\n                'fake'    => true,\n                'tab'     => 'Time and space',\n            ]);\n        }\n\n        // if you want to test removeField, uncomment the following line\n        // $this->crud->removeField('url');\n    }\n\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n\n        // disable editing the slug when editing\n        $this->crud->field('slug')->target('')->attributes(['readonly' => 'readonly']);\n    }\n\n    protected function addCustomCrudFilters()\n    {\n        $this->crud->addFilter(\n            [ // add a \"simple\" filter called Draft\n                'type'  => 'simple',\n                'name'  => 'checkbox_filter',\n                'label' => 'Simple',\n            ],\n            false, // the simple filter has no values, just the \"Draft\" label specified above\n            function () { // if the filter is active (the GET parameter \"draft\" exits)\n                $this->crud->addClause('where', 'checkbox', '1');\n            }\n        );\n\n        $this->crud->addFilter([ // dropdown filter\n            'name' => 'select_from_array',\n            'type' => 'dropdown',\n            'label'=> 'Dropdown',\n        ], ['one' => 'One', 'two' => 'Two', 'three' => 'Three'], function ($value) {\n            // if the filter is active\n            $this->crud->addClause('where', 'select_from_array', $value);\n        });\n\n        $this->crud->addFilter(\n            [ // text filter\n                'type'  => 'text',\n                'name'  => 'text',\n                'label' => 'Text',\n            ],\n            false,\n            function ($value) { // if the filter is active\n                $this->crud->addClause('where', 'text', 'LIKE', \"%$value%\");\n            }\n        );\n\n        $this->crud->addFilter(\n            [\n                'name'       => 'number',\n                'type'       => 'range',\n                'label'      => 'Range',\n                'label_from' => 'min value',\n                'label_to'   => 'max value',\n            ],\n            false,\n            function ($value) { // if the filter is active\n                $range = json_decode($value);\n                if ($range->from && $range->to) {\n                    $this->crud->addClause('where', 'number', '>=', (float) $range->from);\n                    $this->crud->addClause('where', 'number', '<=', (float) $range->to);\n                }\n            }\n        );\n\n        $this->crud->addFilter(\n            [ // date filter\n                'type'  => 'date',\n                'name'  => 'date',\n                'label' => 'Date',\n            ],\n            false,\n            function ($value) { // if the filter is active, apply these constraints\n                $this->crud->addClause('where', 'date', '=', $value);\n            }\n        );\n\n        $this->crud->addFilter(\n            [ // daterange filter\n                'type' => 'date_range',\n                'name' => 'date_range',\n                'label'=> 'Date range',\n                // 'date_range_options' => [\n                // 'format' => 'YYYY/MM/DD',\n                // 'locale' => ['format' => 'YYYY/MM/DD'],\n                // 'showDropdowns' => true,\n                // 'showWeekNumbers' => true\n                // ]\n            ],\n            false,\n            function ($value) { // if the filter is active, apply these constraints\n                $dates = json_decode($value);\n                $this->crud->addClause('where', 'date', '>=', $dates->from);\n                $this->crud->addClause('where', 'date', '<=', $dates->to);\n            }\n        );\n\n        $this->crud->addFilter([ // select2 filter\n            'name' => 'select2',\n            'type' => 'select2',\n            'label'=> 'Select2',\n        ], function () {\n            return \\Backpack\\NewsCRUD\\app\\Models\\Category::all()->keyBy('id')->pluck('name', 'id')->toArray();\n        }, function ($value) { // if the filter is active\n            $this->crud->addClause('where', 'select2', $value);\n        });\n\n        $this->crud->addFilter([ // select2_multiple filter\n            'name' => 'select2_multiple',\n            'type' => 'select2_multiple',\n            'label'=> 'S2 multiple',\n        ], function () {\n            return \\Backpack\\NewsCRUD\\app\\Models\\Category::all()->keyBy('id')->pluck('name', 'id')->toArray();\n        }, function ($values) { // if the filter is active\n            foreach (json_decode($values) as $key => $value) {\n                $this->crud->addClause('orWhere', 'select2', $value);\n            }\n        });\n\n        $this->crud->addFilter(\n            [ // select2_ajax filter\n                'name'        => 'select2_from_ajax',\n                'type'        => 'select2_ajax',\n                'label'       => 'S2 Ajax',\n                'placeholder' => 'Pick an article',\n                'method'      => 'POST',\n            ],\n            url('api/article-search'), // the ajax route\n            function ($value) { // if the filter is active\n                $this->crud->addClause('where', 'select2_from_ajax', $value);\n            }\n        );\n    }\n\n    public static function getFieldsArrayForSimpleTab()\n    {\n        return [\n            [\n                'name'              => 'text',\n                'label'             => 'Text'.backpack_free_badge(),\n                'type'              => 'text',\n                'tab'               => 'Simple',\n                'wrapperAttributes' => [\n                    'class' => 'form-group col-md-4',\n                ],\n            ],\n            [\n                'name'              => 'slug',\n                'label'             => 'Slug'.backpack_pro_badge(),\n                'type'              => 'slug',\n                'target'            => 'text',\n                'tab'               => 'Simple',\n                'fake'              => true,\n                'wrapperAttributes' => [\n                    'class' => 'form-group col-md-4',\n                ],\n            ],\n            [\n                'name'              => 'email',\n                'label'             => 'Email'.backpack_free_badge(),\n                'type'              => 'email',\n                'tab'               => 'Simple',\n                'wrapperAttributes' => [\n                    'class' => 'form-group col-md-4',\n                ],\n            ],\n            [   // Textarea\n                'name'  => 'textarea',\n                'label' => 'Textarea'.backpack_free_badge(),\n                'type'  => 'textarea',\n                'tab'   => 'Simple',\n            ],\n            [   // Number\n                'name'              => 'number',\n                'label'             => 'Number'.backpack_free_badge(),\n                'type'              => 'number',\n                'tab'               => 'Simple',\n                'wrapperAttributes' => ['class' => 'form-group col-md-3'],\n            ],\n            [   // Number\n                'name'              => 'float',\n                'label'             => 'Float'.backpack_free_badge(),\n                'type'              => 'number',\n                'attributes'        => ['step' => 'any'], // allow decimals\n                'tab'               => 'Simple',\n                'wrapperAttributes' => ['class' => 'form-group col-md-3'],\n            ],\n            [   // Number\n                'name'              => 'number_with_prefix',\n                'label'             => 'Number with prefix'.backpack_free_badge(),\n                'type'              => 'number',\n                'prefix'            => '$',\n                'fake'              => true,\n                'store_in'          => 'extras',\n                'tab'               => 'Simple',\n                'wrapperAttributes' => ['class' => 'form-group col-md-3'],\n            ],\n            [   // Number\n                'name'              => 'number_with_suffix',\n                'label'             => 'Number with suffix'.backpack_free_badge(),\n                'type'              => 'number',\n                'suffix'            => '.00',\n                'fake'              => true,\n                'store_in'          => 'extras',\n                'tab'               => 'Simple',\n                'wrapperAttributes' => ['class' => 'form-group col-md-3'],\n            ],\n            [   // Number\n                'name'              => 'text_with_both_prefix_and_suffix',\n                'label'             => 'Text with both prefix and suffix'.backpack_free_badge(),\n                'type'              => 'number',\n                'prefix'            => '@',\n                'suffix'            => \"<i class='fa fa-home'></i>\",\n                'fake'              => true,\n                'store_in'          => 'extras',\n                'tab'               => 'Simple',\n                'wrapperAttributes' => ['class' => 'form-group col-md-4'],\n            ],\n            [   // Phone\n                'name'              => 'phone',\n                'label'             => 'Phone'.backpack_pro_badge(),\n                'type'              => 'phone',\n                'fake'              => true,\n                'store_in'          => 'extras',\n                'tab'               => 'Simple',\n                'wrapperAttributes' => ['class' => 'form-group col-md-4'],\n            ],\n            [   // Password\n                'name'              => 'password',\n                'label'             => 'Password'.backpack_free_badge(),\n                'type'              => 'password',\n                'tab'               => 'Simple',\n                'wrapperAttributes' => ['class' => 'form-group col-md-4'],\n            ],\n            [\n                'name'    => 'radio', // the name of the db column\n                'label'   => 'Status (radio)'.backpack_free_badge(), // the input label\n                'type'    => 'radio',\n                'options' => [ // the key will be stored in the db, the value will be shown as label;\n                    0 => 'Draft',\n                    1 => 'Published',\n                    2 => 'Other',\n                ],\n                // optional\n                'inline' => true, // show the radios all on the same line?\n                'tab'    => 'Simple',\n            ],\n            [\n                'name'  => 'status',\n                'label' => 'Status (enum)'.backpack_free_badge(),\n                'type'  => 'enum',\n                'tab'   => 'Simple',\n            ],\n            [   // Checkbox\n                'name'  => 'checkbox',\n                'label' => 'I have not read the terms and conditions and I never will (checkbox)'.backpack_free_badge(),\n                'type'  => 'checkbox',\n                'tab'   => 'Simple',\n            ],\n            [   // Switch\n                'name'  => 'switch',\n                'label' => 'I have not read the terms and conditions and I never will (switch)'.backpack_free_badge(),\n                'type'  => 'switch',\n                'tab'   => 'Simple',\n                'fake'  => true,\n            ],\n            [   // Hidden\n                'name'    => 'hidden',\n                'type'    => 'hidden',\n                'default' => '6318',\n                'tab'     => 'Simple',\n            ],\n        ];\n    }\n\n    public static function getFieldsArrayForTimeAndSpaceTab()\n    {\n        // -----------------\n        // DATE, TIME AND SPACE tab\n        // -----------------\n\n        $fields = [\n            [   // Time\n                'name'              => 'time',\n                'label'             => 'Time'.backpack_free_badge(),\n                'type'              => 'time',\n                'wrapperAttributes' => ['class' => 'form-group col-md-4'],\n                'tab'               => 'Time and space',\n                'fake'              => true,\n            ],\n            [   // Month\n                'name'              => 'week',\n                'label'             => 'Week'.backpack_free_badge(),\n                'type'              => 'week',\n                'wrapperAttributes' => ['class' => 'form-group col-md-4'],\n                'tab'               => 'Time and space',\n            ],\n            [   // Month\n                'name'              => 'month',\n                'label'             => 'Month'.backpack_free_badge(),\n                'type'              => 'month',\n                'wrapperAttributes' => ['class' => 'form-group col-md-4'],\n                'tab'               => 'Time and space',\n            ],\n            [   // Date\n                'name'       => 'date',\n                'label'      => 'Date (HTML5 spec)'.backpack_free_badge(),\n                'type'       => 'date',\n                'attributes' => [\n                    'pattern'     => '[0-9]{4}-[0-9]{2}-[0-9]{2}',\n                    'placeholder' => 'yyyy-mm-dd',\n                ],\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n                'tab'               => 'Time and space',\n            ],\n            [   // Date\n                // <span class=\"badge badge-pill bg-primary\">PRO</span>\n                'name'  => 'date_picker',\n                'label' => 'Date picker (jQuery plugin)'.backpack_pro_badge(),\n                'type'  => 'date_picker',\n                // optional:\n                'date_picker_options' => [\n                    'todayBtn' => true,\n                    'format'   => 'dd-mm-yyyy',\n                    'language' => 'en',\n                ],\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n                'tab'               => 'Time and space',\n            ],\n            [   // DateTime\n                'name'              => 'datetime',\n                'label'             => 'Datetime (HTML5 spec)'.backpack_free_badge(),\n                'type'              => 'datetime',\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n                'tab'               => 'Time and space',\n            ],\n            [   // DateTime\n                'name'  => 'datetime_picker',\n                'label' => 'Datetime picker (jQuery plugin)'.backpack_pro_badge(),\n                'type'  => 'datetime_picker',\n                // optional:\n                'datetime_picker_options' => [\n                    'format'   => 'DD/MM/YYYY HH:mm',\n                    'language' => 'en',\n                ],\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n                'tab'               => 'Time and space',\n            ],\n            [ // Date_range\n                'name'       => 'start_date,end_date', // a unique name for this field\n                'label'      => 'Date Range'.backpack_pro_badge(),\n                'type'       => 'date_range',\n                'default'    => ['2020-03-28 01:01', '2020-04-05 02:00'],\n                // OPTIONALS\n                'date_range_options' => [ // options sent to daterangepicker.js\n                    'timePicker' => true,\n                    'locale'     => ['format' => 'DD/MM/YYYY HH:mm'],\n                ],\n                'tab' => 'Time and space',\n            ],\n        ];\n\n        if (env('GOOGLE_PLACES_KEY')) {\n            $fields[] = [   // Address_google\n                'name'          => 'address_google',\n                'label'         => 'Address_google '.backpack_pro_badge(),\n                'type'          => 'address_google',\n                'fake'          => true,\n                'store_as_json' => true,\n                'tab'           => 'Time and space',\n            ];\n        }\n\n        return $fields;\n    }\n\n    public static function getFieldsArrayForRelationshipsTab()\n    {\n        // -----------------\n        // RELATIONSHIPS tab\n        // -----------------\n\n        return [\n            [   // CustomHTML\n                'name'  => 'relationship_heading',\n                'type'  => 'custom_html',\n                'value' => \"<p class='text-muted mb-0'>All the examples in this tab <strong>relationship</strong> field type. This field type changes its interface depending on what relationship it is used on, and whether or not you've defined 'subfields' for it. So we've provided examples for each relationship type. Then examples for a few <i>extra features</i> of the repeatable field.</p>\",\n                'tab'   => 'Relationship',\n            ],\n            [   // CustomHTML\n                'name'  => 'relationship_direct_relationships',\n                'type'  => 'custom_html',\n                'value' => '<h5 class=\"mb-0 mt-3 text-primary\">Direct Relationships '.backpack_pro_badge().'</h5>',\n                'tab'   => 'Relationship',\n            ],\n\n            // --------------------\n            // Direct relationships\n            // --------------------\n\n            [\n                'name'    => 'address.street',\n                'label'   => 'HasOne (1-1) <small>towards an attribute on related model</small>',\n                'wrapper' => [\n                    'class' => 'form-group col-md-6',\n                ],\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'     => 'address.country',\n                'label'    => 'HasOne (1-1) <small>towards a relationship on related model</small>',\n                'wrapper'  => [\n                    'class' => 'form-group col-md-6',\n                ],\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'              => 'categoryRelationship',\n                'label'             => 'BelongsTo (n-1)',\n                'tab'               => 'Relationship',\n                'wrapper'           => [\n                    'class' => 'form-group col-md-6',\n                ],\n            ],\n            [\n                'name'    => 'postalboxer',\n                'label'   => 'HasMany (1-n)',\n                'tab'     => 'Relationship',\n                'wrapper' => [\n                    'class' => 'form-group col-md-6',\n                ],\n            ],\n            [\n                'name'    => 'countries',\n                'label'   => 'BelongsToMany (n-n)',\n                'tab'     => 'Relationship',\n            ],\n\n            // -----------------------------------\n            // Direct relationships with subfields\n            // -----------------------------------\n\n            [   // CustomHTML\n                'name'  => 'relationship_direct_relationships_with_subfields',\n                'type'  => 'custom_html',\n                'value' => '<h5 class=\"mb-0 mt-4 text-primary\">Direct Relationships + Subfields '.backpack_pro_badge().'</h5>',\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'      => 'wish',\n                'label'     => 'HasOne (1-1) <small>+ subfields</small>'.backpack_new_badge(),\n                'subfields' => [\n                    [\n                        'name' => 'country',\n                    ],\n                    [\n                        'name'    => 'body',\n                        'wrapper' => [\n                            'class' => 'text-danger',\n                        ],\n                    ],\n                    [\n                        'name' => 'universes',\n                    ],\n                ],\n                'wrapper' => [\n                    'class' => 'form-group col-md-4',\n                ],\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'      => 'postalboxes',\n                'label'     => 'HasMany (1-n) <small>+ subfields</small>'.backpack_new_badge(),\n                'subfields' => [\n                    [\n                        'name' => 'postal_name',\n                        'type' => 'text',\n                    ],\n                ],\n                'wrapper' => [\n                    'class' => 'form-group col-md-4',\n                ],\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'    => 'dummyproducts',\n                'label'   => 'BelongsToMany (n-n) <small>+ subfields for pivot table</small>'.backpack_new_badge(),\n                'wrapper' => [\n                    'class' => 'form-group col-md-4',\n                ],\n                'pivotSelect' => [\n                    'wrapper' => [\n                        'class' => 'form-group col-md-6',\n                    ],\n                ],\n                'subfields' => [\n                    [\n                        'name'    => 'notes',\n                        'type'    => 'text',\n                        'wrapper' => [\n                            'class' => 'form-group col-md-6',\n                        ],\n                    ],\n                ],\n                'tab'   => 'Relationship',\n            ],\n\n            // -------------------------\n            // Polymorphic Relationships\n            // -------------------------\n\n            [   // CustomHTML\n                'name'  => 'relationship_polymorphic_relationships',\n                'type'  => 'custom_html',\n                'value' => '<hr class=\"mt-5 mb-5\"><h5 class=\"mb-0 mt-3 text-primary\">Polymorphic Relationships '.backpack_pro_badge().'</h5>',\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'    => 'sentiment.text',\n                'label'   => 'MorphOne (1-1 polymorphic) <small>towards an attribute</small>'.backpack_new_badge(),\n                'type'    => 'relationship',\n                'wrapper' => [\n                    'class' => 'form-group col-md-6',\n                ],\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'    => 'sentiment.user',\n                'label'   => 'MorphOne (1-1 polymorphic) <small>towards a relation</small>'.backpack_new_badge(),\n                'wrapper' => [\n                    'class' => 'form-group col-md-6',\n                ],\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'    => 'universes',\n                'label'   => 'MorphMany (1-n)'.backpack_new_badge(),\n                'wrapper' => [\n                    'class' => 'form-group col-md-6',\n                ],\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'    => 'bills',\n                'label'   => 'MorphToMany (n-n)'.backpack_new_badge(),\n                'wrapper' => [\n                    'class' => 'form-group col-md-6',\n                ],\n                'tab'   => 'Relationship',\n            ],\n\n            // -------------------------------------\n            // Polymorphic Relationships + Subfields\n            // -------------------------------------\n\n            [   // CustomHTML\n                'name'  => 'relationship_polymorphic_relationships_with_subfields',\n                'type'  => 'custom_html',\n                'value' => '<hr class=\"mt-5 mb-5\"><h5 class=\"mb-0 mt-3 text-primary\">Polymorphic Relationships + Subfields  '.backpack_pro_badge().'</h5>',\n                'tab'   => 'Relationship',\n            ],\n\n            [\n                'name'    => 'ball',\n                'label'   => 'MorphOne (1-1 polymorphic) <small>+ subfields</small>'.backpack_new_badge(),\n                'wrapper' => [\n                    'class' => 'form-group col-md-4',\n                ],\n                'subfields' => [\n                    [\n                        'name'    => 'name',\n                        'wrapper' => [\n                            'class' => 'form-group col-md-6',\n                        ],\n                    ],\n                    [\n                        'name'    => 'country_id',\n                        'entity'  => 'country',\n                        'type'    => 'relationship',\n                        'wrapper' => [\n                            'class' => 'form-group col-md-6',\n                        ],\n\n                    ],\n                ],\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'    => 'stars',\n                'label'   => 'MorphMany (1-n) <small>+ subfields</small>'.backpack_new_badge(),\n                'wrapper' => [\n                    'class' => 'form-group col-md-4',\n                ],\n                'subfields' => [\n                    [\n                        'name' => 'title',\n                        'type' => 'text',\n                    ],\n                ],\n\n                'tab'   => 'Relationship',\n            ],\n            [\n                'name'    => 'recommends',\n                'label'   => 'MorphToMany (n-n) <small>+ subfields for pivot table</small>'.backpack_new_badge(),\n                'wrapper' => [\n                    'class' => 'form-group col-md-4',\n                ],\n                'subfields' => [\n                    [\n                        'name' => 'text',\n                        'type' => 'text',\n                    ],\n                ],\n                'tab'   => 'Relationship',\n            ],\n\n            // ----------------------------\n            // Relationships Extra Features\n            // ----------------------------\n\n            [\n                'name'  => 'relationship_extra_features',\n                'type'  => 'custom_html',\n                'value' => '<hr class=\"mt-5 mb-5\"><h5 class=\"mb-0 mt-3 text-primary\">Extra Features  '.backpack_pro_badge().'</a></h5>',\n                'tab'   => 'Relationship',\n            ],\n\n            [    // Relationship - everything is explicitly defined\n                'label'         => 'BelongsTo + InlineCreate',\n                'type'          => 'relationship',\n                'name'          => 'fallback_icon',\n                'fake'          => true,\n                'entity'        => 'icon',\n                'attribute'     => 'name',\n                'tab'           => 'Relationship',\n                'inline_create' => true,\n                // 'data_source' => backpack_url('monster/fetch/icon'),\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n            ],\n            [    // Relationship\n                'label'     => 'BelongsToMany + AJAX + InlineCreate',\n                'type'      => 'relationship',\n                'name'      => 'products',\n                'entity'    => 'products',\n                // 'attribute' => 'name',\n                'tab'       => 'Relationship',\n                'ajax'      => true,\n                // 'inline_create' => true, // TODO: make it work like this too\n                'inline_create'     => [\n                    'entity'      => 'product',\n                    'modal_class' => 'modal-dialog modal-xl',\n                ],\n                'data_source'       => backpack_url('monster/fetch/product'),\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n            ],\n            [    // Relationship - nothing is explicitly defined, not even the field type\n                'label'         => 'Relationship (all field attributes are guessed)',\n                'name'          => 'icondummy',\n                'tab'           => 'Relationship',\n                // 'data_source' => backpack_url('monster/fetch/icon'),\n                'wrapperAttributes' => ['class' => 'form-group col-md-12'],\n            ],\n        ];\n    }\n\n    public static function getFieldsArrayForSelectsTab()\n    {\n        // -----------------\n        // SELECTS tab\n        // -----------------\n\n        return [\n            [ // CustomHTML\n                'name'  => 'selects_no_relationship_heading',\n                'type'  => 'custom_html',\n                'value' => '<h5 class=\"mb-0 text-primary\">No Relationship</h5>',\n                'tab'   => 'Selects',\n            ],\n\n            [ // select_from_array\n                'name'              => 'select_from_array',\n                'label'             => 'Select_from_array (no relationship, 1-1 or 1-n)'.backpack_free_badge(),\n                'type'              => 'select_from_array',\n                'options'           => ['one' => 'One', 'two' => 'Two', 'three' => 'Three'],\n                'allows_null'       => true,\n                'tab'               => 'Selects',\n                'allows_multiple'   => false, // OPTIONAL; needs you to cast this to array in your model;\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n            ],\n            [ // select2_from_array\n                'name'              => 'select2_from_array',\n                'label'             => 'Select2_from_array (no relationship, 1-1 or 1-n)'.backpack_pro_badge(),\n                'type'              => 'select2_from_array',\n                'options'           => ['one' => 'One', 'two' => 'Two', 'three' => 'Three'],\n                'allows_null'       => true,\n                'tab'               => 'Selects',\n                'allows_multiple'   => false, // OPTIONAL; needs you to cast this to array in your model;\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n            ],\n            [ // select_and_order\n                'name'    => 'select_and_order',\n                'label'   => 'Select_and_order'.backpack_pro_badge(),\n                'type'    => 'select_and_order',\n                'options' => [\n                    1 => 'Option 1',\n                    2 => 'Option 2',\n                    3 => 'Option 3',\n                    4 => 'Option 4',\n                    5 => 'Option 5',\n                    6 => 'Option 6',\n                    7 => 'Option 7',\n                    8 => 'Option 8',\n                    9 => 'Option 9',\n                ],\n                'fake' => true,\n                'tab'  => 'Selects',\n            ],\n\n            // -----------------\n            // 1-n relationships\n            // -----------------\n\n            [ // CustomHTML\n                'name'  => 'selects_1_n_heading',\n                'type'  => 'custom_html',\n                'value' => '<h5 class=\"mb-0 text-primary\">1-n Relationship (belongsTo, morphTo)</h5>',\n                'tab'   => 'Selects',\n            ],\n            [   // select\n                'label'                      => 'Select'.backpack_free_badge(),\n                'type'                       => 'select', //https://github.com/Laravel-Backpack/CRUD/issues/502\n                'name'                       => 'select',\n                'entity'                     => 'category',\n                'attribute'                  => 'name',\n                'model'                      => 'Backpack\\NewsCRUD\\app\\Models\\Category',\n                'fake'                       => true,\n                'tab'                        => 'Selects',\n                'wrapperAttributes'          => ['class' => 'form-group col-md-4'],\n            ],\n            [   // select_grouped\n                'label'                      => 'Select_grouped'.backpack_free_badge(),\n                'type'                       => 'select_grouped', //https://github.com/Laravel-Backpack/CRUD/issues/502\n                'name'                       => 'select_grouped_id',\n                'fake'                       => true,\n                'entity'                     => 'article',\n                'model'                      => 'Backpack\\NewsCRUD\\app\\Models\\Article',\n                'attribute'                  => 'title',\n                'group_by'                   => 'category', // the relationship to entity you want to use for grouping\n                'group_by_attribute'         => 'name', // the attribute on related model, that you want shown\n                'group_by_relationship_back' => 'articles', // relationship from related model back to this model\n                'tab'                        => 'Selects',\n                'wrapperAttributes'          => ['class' => 'form-group col-md-4'],\n            ],\n            [   // select2_grouped\n                'label'                      => 'Select2_grouped'.backpack_pro_badge(),\n                'type'                       => 'select2_grouped', //https://github.com/Laravel-Backpack/CRUD/issues/502\n                'name'                       => 'select2_grouped_id',\n                'fake'                       => true,\n                'entity'                     => 'article',\n                'model'                      => 'Backpack\\NewsCRUD\\app\\Models\\Article',\n                'attribute'                  => 'title',\n                'group_by'                   => 'category', // the relationship to entity you want to use for grouping\n                'group_by_attribute'         => 'name', // the attribute on related model, that you want shown\n                'group_by_relationship_back' => 'articles', // relationship from related model back to this model\n                'tab'                        => 'Selects',\n                'wrapperAttributes'          => ['class' => 'form-group col-md-4'],\n            ],\n            [    // SELECT2\n                'label'             => 'Select2'.backpack_pro_badge(),\n                'type'              => 'select2',\n                'name'              => 'select2',\n                'entity'            => 'categorySelect2',\n                'attribute'         => 'name',\n                'model'             => \"Backpack\\NewsCRUD\\app\\Models\\Category\",\n                'tab'               => 'Selects',\n                'wrapperAttributes' => ['class' => 'form-group col-md-4'],\n            ],\n            [   // select2_nested\n                'name'                       => 'select2_nested_id',\n                'label'                      => 'Select2_nested'.backpack_pro_badge(),\n                'type'                       => 'select2_nested',\n                'fake'                       => true,\n                'entity'                     => 'category', // the method that defines the relationship in your Model\n                'attribute'                  => 'name', // foreign key attribute that is shown to user\n                'model'                      => \"Backpack\\NewsCRUD\\app\\Models\\Category\", // force foreign key model\n                'tab'                        => 'Selects',\n                'wrapperAttributes'          => ['class' => 'form-group col-md-4'],\n            ],\n            [ // select2_from_ajax: 1-n relationship\n                'label'                => 'Select2_from_ajax'.backpack_pro_badge(), // Table column heading\n                'type'                 => 'select2_from_ajax',\n                'name'                 => 'select2_from_ajax', // the column that contains the ID of that connected entity;\n                'entity'               => 'article', // the method that defines the relationship in your Model\n                'attribute'            => 'title', // foreign key attribute that is shown to user\n                'model'                => \"Backpack\\NewsCRUD\\app\\Models\\Article\", // foreign key model\n                'data_source'          => url('api/article'), // url to controller search function (with /{id} should return model)\n                'method'               => 'POST', // route method, either GET or POST\n                'placeholder'          => 'Select an article', // placeholder for the select\n                'minimum_input_length' => 2, // minimum characters to type before querying results\n                'tab'                  => 'Selects',\n                'wrapperAttributes'    => ['class' => 'form-group col-md-4'],\n            ],\n\n            [ // CustomHTML\n                'name'  => 'selects_n_n_heading',\n                'type'  => 'custom_html',\n                'value' => '<h5 class=\"mb-0 text-primary mt-3\">n-n Relationship (belongsToMany, morphToMany)</h5>',\n                'tab'   => 'Selects',\n            ],\n            [\n                'label'     => 'Checklist'.backpack_free_badge(),\n                'type'      => 'checklist',\n                'name'      => 'roles',\n                'entity'    => 'roles',\n                'attribute' => 'name',\n                'model'     => \"Backpack\\PermissionManager\\app\\Models\\Role\",\n                'pivot'     => true,\n                'tab'       => 'Selects',\n            ],\n            [       // Select_Multiple = n-n relationship\n                'label'     => 'Select_multiple'.backpack_free_badge(),\n                'type'      => 'select_multiple',\n                'name'      => 'tags', // the method that defines the relationship in your Model\n                'entity'    => 'tags', // the method that defines the relationship in your Model\n                'attribute' => 'name', // foreign key attribute that is shown to user\n                'model'     => \"Backpack\\NewsCRUD\\app\\Models\\Tag\", // foreign key model\n                'pivot'     => true, // on create&update, do you need to add/delete pivot table entries?\n                'tab'       => 'Selects',\n                // 'wrapperAttributes' => ['class' => 'form-group col-md-12'],\n            ],\n            [       // Select2Multiple = n-n relationship (with pivot table)\n                'label'             => 'Select2_multiple'.backpack_pro_badge(),\n                'type'              => 'select2_multiple',\n                'name'              => 'categories', // the method that defines the relationship in your Model\n                'entity'            => 'categories', // the method that defines the relationship in your Model\n                'attribute'         => 'name', // foreign key attribute that is shown to user\n                'model'             => \"Backpack\\NewsCRUD\\app\\Models\\Category\", // foreign key model\n                'allows_null'       => true,\n                'pivot'             => true, // on create&update, do you need to add/delete pivot table entries?\n                'tab'               => 'Selects',\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n            ],\n            [ // Select2_from_ajax_multiple: n-n relationship with pivot table\n                'label'                => 'Select2_from_ajax_multiple'.backpack_pro_badge(), // Table column heading\n                'type'                 => 'select2_from_ajax_multiple',\n                'name'                 => 'articles', // the column that contains the ID of that connected entity;\n                'entity'               => 'articles', // the method that defines the relationship in your Model\n                'attribute'            => 'title', // foreign key attribute that is shown to user\n                'model'                => \"Backpack\\NewsCRUD\\app\\Models\\Article\", // foreign key model\n                'data_source'          => url('api/article'), // url to controller search function (with /{id} should return model)\n                'method'               => 'POST', // route method, either GET or POST\n                'placeholder'          => 'Select one or more articles', // placeholder for the select\n                'minimum_input_length' => 2, // minimum characters to type before querying results\n                'pivot'                => true, // on create&update, do you need to add/delete pivot table entries?\n                'tab'                  => 'Selects',\n                'wrapperAttributes'    => ['class' => 'form-group col-md-6'],\n            ],\n            [ // Select2_json_from_api paginated\n                'label'                  => 'Select2_json_from_api (paginated)'.backpack_pro_badge(), // Table column heading\n                'type'                   => 'select2_json_from_api',\n                'name'                   => 'select2_json_from_api', // the column that contains the ID of that connected entity;\n                'attribute'              => 'title', // foreign key attribute that is shown to user\n                'data_source'            => backpack_url('monster/fetch/paginated-types'), // url to controller search function (with /{id} should return model)\n                'method'                 => 'POST', // route method, either GET or POST\n                'placeholder'            => 'Select one or more types', // placeholder for the select\n                'minimum_input_length'   => 0, // minimum characters to type before querying results\n                'tab'                    => 'Selects',\n                'wrapperAttributes'      => ['class' => 'form-group col-md-6'],\n                'attributes_to_store'    => ['id', 'title', 'location'],\n                'multiple'               => true,\n            ],\n            [ // Select2_json_from_api not paginated\n                'label'                => 'Select2_json_from_api (simple array)'.backpack_pro_badge(), // Table column heading\n                'type'                 => 'select2_json_from_api',\n                'name'                 => 'select2_json_from_api_simple', // the column that contains the ID of that connected entity;\n                'data_source'          => backpack_url('monster/fetch/simple-types'), // url to controller search function (with /{id} should return model)\n                'method'               => 'POST', // route method, either GET or POST\n                'placeholder'          => 'Select one or more types', // placeholder for the select\n                'minimum_input_length' => 0, // minimum characters to type before querying results\n                'tab'                  => 'Selects',\n                'wrapperAttributes'    => ['class' => 'form-group col-md-6'],\n                'multiple'             => true,\n            ],\n        ];\n    }\n\n    public static function getFieldsArrayForUploadsTab()\n    {\n        // -----------------\n        // UPLOADS tab\n        // -----------------\n\n        $fields = [];\n\n        if (app('env') == 'production') {\n            $fields[] = [   // CustomHTML\n                'name'      => 'separator',\n                'type'      => 'custom_html',\n                'value'     => '<p><small><strong>Note: </strong>In the online demo we\\'ve restricted the upload and media library fields a lot, or hidden them entirely. To test them out, you can <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs/demo\">download and install this demo admin panel</a> in your local environment.</small></p>',\n                'tab'       => 'Uploads',\n            ];\n        }\n\n        $fields[] = [   // Browse\n            'name'       => 'browse',\n            'label'      => 'Browse (using elFinder)'.backpack_pro_badge(),\n            'type'       => 'browse',\n            'tab'        => 'Uploads',\n            'mime_types' => ['image/png', 'image/jpeg'], // visible mime prefixes; ex. ['image'] or ['application/pdf']\n        ];\n\n        $fields[] = [   // Browse multiple\n            'name'     => 'browse_multiple',\n            'label'    => 'Browse multiple'.backpack_pro_badge(),\n            'type'     => 'browse_multiple',\n            'tab'      => 'Uploads',\n            'sortable' => true,\n            // 'multiple' => true, // enable/disable the multiple selection functionality\n            // 'mime_types' => null, // visible mime prefixes; ex. ['image'] or ['application/pdf']\n        ];\n\n        $fields[] = [   // Upload\n            'name'   => 'upload',\n            'label'  => 'Upload'.backpack_free_badge(),\n            'type'   => 'upload',\n            'upload' => true,\n            'disk'   => 'uploads', // if you store files in the /public folder, please ommit this; if you store them in /storage or S3, please specify it;\n            // optional:\n            // 'temporary' => 10 // if using a service, such as S3, that requires you to make temporary URL's this will make a URL that is valid for the number of minutes specified\n            'tab' => 'Uploads',\n        ];\n\n        $fields[] = [   // Upload\n            'name'   => 'upload_multiple',\n            'label'  => 'Upload Multiple'.backpack_free_badge(),\n            'type'   => 'upload_multiple',\n            'upload' => true,\n            // 'disk' => 'uploads', // if you store files in the /public folder, please ommit this; if you store them in /storage or S3, please specify it;\n            // optional:\n            // 'temporary' => 10 // if using a service, such as S3, that requires you to make temporary URL's this will make a URL that is valid for the number of minutes specified\n            'tab' => 'Uploads',\n        ];\n\n        $fields[] = [ // base64_image\n            'label'        => 'Base64 Image - includes cropping'.backpack_pro_badge(),\n            'name'         => 'base64_image',\n            'filename'     => null, // set to null if not needed\n            'type'         => 'base64_image',\n            'aspect_ratio' => 1, // set to 0 to allow any aspect ratio\n            'crop'         => true, // set to true to allow cropping, false to disable\n            'src'          => null, // null to read straight from DB, otherwise set to model accessor function\n            'tab'          => 'Uploads',\n        ];\n\n        $fields[] = [ // image\n            'label'        => 'Image - includes cropping'.backpack_pro_badge(),\n            'name'         => 'image',\n            'type'         => 'image',\n            'upload'       => true,\n            'crop'         => true, // set to true to allow cropping, false to disable\n            'aspect_ratio' => 1, // ommit or set to 0 to allow any aspect ratio\n            // 'disk' => config('backpack.base.root_disk_name'), // in case you need to show images from a different disk\n            // 'prefix' => 'uploads/images/profile_pictures/' // in case your db value is only the file name (no path), you can use this to prepend your path to the image src (in HTML), before it's shown to the user;\n            'tab' => 'Uploads',\n        ];\n\n        $fields[] = [\n            'label'        => 'Dropzone - drag&drop '.backpack_pro_badge(),\n            'name'         => 'dropzone',\n            'type'         => 'dropzone',\n            'tab'          => 'Uploads',\n            'withFiles'    => true,\n        ];\n\n        return $fields;\n    }\n\n    public static function getFieldsArrayForWysiwygEditorsTab()\n    {\n        // -----------------\n        // BIG TEXTS tab\n        // -----------------\n\n        return [\n            [   // EasyMDE\n                'name'  => 'easymde',\n                'label' => 'EasyMDE - markdown editor'.backpack_pro_badge(),\n                'type'  => 'easymde',\n                'tab'   => 'WYSIWYG Editors',\n            ],\n            [   // Summernote\n                'name'      => 'summernote',\n                'label'     => 'Summernote editor'.backpack_free_badge(),\n                'type'      => 'summernote',\n                'tab'       => 'WYSIWYG Editors',\n                'withFiles' => true,\n            ],\n            [   // CKEditor\n                'name'  => 'ckeditor',\n                'label' => 'CKEditor - also called the WYSIWYG field'.backpack_pro_badge(),\n                'type'  => 'ckeditor',\n                'tab'   => 'WYSIWYG Editors',\n            ],\n            [   // TinyMCE\n                'name'  => 'tinymce',\n                'label' => 'TinyMCE'.backpack_pro_badge(),\n                'type'  => 'tinymce',\n                'tab'   => 'WYSIWYG Editors',\n            ],\n        ];\n    }\n\n    public static function getFieldsArrayForMiscellaneousTab()\n    {\n        // -----------------\n        // MISCELLANEOUS tab\n        // -----------------\n\n        return [\n            [   // Color\n                'name'  => 'color',\n                'label' => 'Color picker (HTML5 spec)'.backpack_free_badge(),\n                'type'  => 'color',\n                // 'wrapperAttributes' => ['class' => 'col-md-6'],\n                'tab'               => 'Miscellaneous',\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n            ],\n            [   // Video\n                'name'              => 'video',\n                'label'             => 'Video - link to video file on Youtube or Vimeo'.backpack_pro_badge(),\n                'type'              => 'video',\n                'tab'               => 'Miscellaneous',\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n            ],\n            [   // Range\n                'name'  => 'range',\n                'label' => 'Range'.backpack_free_badge(),\n                'type'  => 'range',\n                //optional\n                'attributes' => [\n                    'min' => 0,\n                    'max' => 10,\n                ],\n                'tab'               => 'Miscellaneous',\n                'wrapperAttributes' => ['class' => 'form-group col-md-6'],\n            ],\n            [   // Icon picker\n                'label'             => 'Icon Picker'.backpack_pro_badge(),\n                'name'              => 'icon_picker',\n                'type'              => 'icon_picker',\n                'iconset'           => 'fontawesome', // options: fontawesome, glyphicon, ionicon, weathericon, mapicon, octicon, typicon, elusiveicon, materialdesign\n                'tab'               => 'Miscellaneous',\n                'wrapperAttributes' => ['class' => 'form-group col-md-2'],\n            ],\n            [ // Table\n                'name'            => 'table',\n                'label'           => 'Table'.backpack_pro_badge(),\n                'type'            => 'table',\n                'entity_singular' => 'subentry', // used on the \"Add X\" button\n                'columns'         => [\n                    'name'  => 'Name',\n                    'desc'  => 'Description',\n                    'price' => 'Price',\n                ],\n                'max' => 5, // maximum rows allowed in the table\n                'min' => 0, // minimum rows allowed in the table\n                'tab' => 'Miscellaneous',\n            ],\n            [ // Table\n                'name'            => 'fake_table',\n                'label'           => 'Fake Table'.backpack_pro_badge(),\n                'type'            => 'table',\n                'entity_singular' => 'subentry', // used on the \"Add X\" button\n                'columns'         => [\n                    'name'  => 'Name',\n                    'desc'  => 'Description',\n                    'price' => 'Price',\n                ],\n                'fake' => true,\n                'max'  => 5, // maximum rows allowed in the table\n                'min'  => 0, // minimum rows allowed in the table\n                'tab'  => 'Miscellaneous',\n            ],\n            [\n                'name'  => 'url',\n                'type'  => 'url',\n                'label' => 'URL'.backpack_free_badge(),\n                'tab'   => 'Miscellaneous',\n            ],\n            [\n                'name'      => 'features',\n                'label'     => 'Features'.backpack_pro_badge(),\n                'type'      => 'repeatable',\n                'fake'      => true,\n                'subfields' => [\n                    [\n                        'name'    => 'feature',\n                        'wrapper' => [\n                            'class' => 'col-md-3',\n                        ],\n                    ],\n                    [\n                        'name'    => 'value',\n                        'wrapper' => [\n                            'class' => 'col-md-6',\n                        ],\n                    ],\n                    [\n                        'name'    => 'quantity',\n                        'type'    => 'number',\n                        'wrapper' => [\n                            'class' => 'col-md-3',\n                        ],\n                    ],\n                ],\n                'tab' => 'Miscellaneous',\n            ],\n        ];\n    }\n\n    public function ajaxUpload()\n    {\n        if (app('env') === 'production') {\n            return response()->json(['errors' => [\n                'dropzone'   => ['Uploads are disabled in production'],\n                'easymde'    => ['Uploads are disabled in production'],\n                'summernote' => ['Uploads are disabled in production'],\n            ],\n            ], 500);\n        }\n\n        return $this->traitAjaxUpload();\n    }\n\n    protected function setupReportOperation()\n    {\n        // --- Override the content class for a narrower layout ---\n        $this->crud->setOperationSetting('contentClass', 'col-md-10 mx-auto');\n\n        // --- Remove the interval filter (not needed for stat-heavy reports) ---\n        $this->crud->removeFilter('report_interval');\n\n        // --- Stat: total monsters (count + previous period comparison + custom wrapper) ---\n        $this->addMetric('total_monsters', [\n            'type'      => 'stat',\n            'label'     => 'Total Monsters',\n            'aggregate' => 'count',\n            'period'    => 'created_at',\n            'compare'   => 'previous_period',\n            'wrapper'   => ['class' => 'col-md-3'],\n        ]);\n\n        // --- Stat: query scope to filter rows ---\n        $this->addMetric('working_monsters', [\n            'type'      => 'stat',\n            'label'     => 'Working',\n            'aggregate' => 'count',\n            'period'    => 'created_at',\n            'query'     => fn ($q) => $q->where('status', 'working'),\n            'wrapper'   => ['class' => 'col-md-3'],\n        ]);\n\n        // --- Stat: min aggregate ---\n        $this->addMetric('min_number', [\n            'type'      => 'stat',\n            'label'     => 'Min Number',\n            'column'    => 'number',\n            'aggregate' => 'min',\n            'wrapper'   => ['class' => 'col-md-3'],\n        ]);\n\n        // --- Stat: max aggregate ---\n        $this->addMetric('max_number', [\n            'type'      => 'stat',\n            'label'     => 'Max Number',\n            'column'    => 'number',\n            'aggregate' => 'max',\n            'wrapper'   => ['class' => 'col-md-3'],\n        ]);\n\n        // --- Demonstrate removeMetric (add then remove) ---\n        $this->addMetric('temp_metric', [\n            'type'  => 'stat',\n            'label' => 'Should Not Appear',\n        ]);\n        $this->removeMetric('temp_metric');\n\n        // --- Line chart: full width ---\n        $this->addMetric('monsters_over_time', [\n            'type'      => 'line',\n            'label'     => 'Monsters Created Over Time',\n            'aggregate' => 'count',\n            'period'    => 'created_at',\n            'wrapper'   => ['class' => 'col-md-12'],\n        ]);\n\n        // --- Group stats into one request ---\n        $this->groupMetrics('monster_stats', ['total_monsters', 'working_monsters', 'min_number', 'max_number']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/Operations/SMSOperation.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\Operations;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\Concerns\\HasForm;\n\ntrait SMSOperation //Custom Form Operation Example\n{\n    use HasForm;\n\n    /**\n     * Define which routes are needed for this operation.\n     *\n     * @param string $segment    Name of the current entity (singular). Used as first URL segment.\n     * @param string $routeName  Prefix of the route name.\n     * @param string $controller Name of the current CrudController.\n     */\n    protected function setupSMSRoutes(string $segment, string $routeName, string $controller): void\n    {\n        $this->formRoutes(\n            operationName: 'SMS',\n            routesHaveIdSegment: true,\n            segment: $segment,\n            routeName: $routeName,\n            controller: $controller\n        );\n    }\n\n    /**\n     * Add the default settings, buttons, etc that this operation needs.\n     */\n    protected function setupSMSDefaults(): void\n    {\n        $this->formDefaults(\n            operationName: 'SMS',\n            buttonStack: 'line', // alternatives: top, bottom\n            buttonMeta: [\n                'icon'    => 'las la-sms',\n                'label'   => 'SMS',\n            ],\n        );\n    }\n\n    /**\n     * Method to handle the GET request and display the View with a Backpack form.\n     */\n    public function getSMSForm(?int $id = null): \\Illuminate\\Contracts\\View\\View\n    {\n        $this->crud->hasAccessOrFail('SMS');\n        $this->crud->addField('text');\n\n        return $this->formView($id);\n    }\n\n    /**\n     * Method to handle the POST request and perform the operation.\n     *\n     * @return array|\\Illuminate\\Http\\RedirectResponse\n     */\n    public function postSMSForm(?int $id = null)\n    {\n        $this->crud->hasAccessOrFail('SMS');\n\n        return $this->formAction($id, function ($inputs, $entry) {\n            // You logic goes here...\n            // dd('got to ' . __METHOD__, $inputs, $entry);\n\n            // show a success message\n            \\Alert::success('SMS Sent: '.$inputs['text'])->flash();\n        });\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/BadgeCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\BadgeRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class BadgeCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass BadgeCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\PetShop\\Badge::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/badge');\n        CRUD::setEntityNameStrings('badge', 'badges');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('name');\n\n        /**\n         * Columns can be defined using the fluent syntax or array syntax:\n         * - CRUD::column('price')->type('number');\n         * - CRUD::addColumn(['name' => 'price', 'type' => 'number']);.\n         */\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(BadgeRequest::class);\n\n        CRUD::field('name');\n\n        /**\n         * Fields can be defined using the fluent syntax or array syntax:\n         * - CRUD::field('price')->type('number');\n         * - CRUD::addField(['name' => 'price', 'type' => 'number']));.\n         */\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/CommentCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\CommentRequest;\nuse App\\Models\\PetShop\\Pet;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\FetchOperation;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class CommentCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass CommentCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use FetchOperation;\n\n    public function fetchPets()\n    {\n        return $this->fetch(Pet::class);\n    }\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\PetShop\\Comment::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/comment');\n        CRUD::setEntityNameStrings('comment', 'comments');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('body');\n        // CRUD::column('commentable_type');\n        // CRUD::column('commentable_id');\n        CRUD::column('user');\n\n        CRUD::setOperationSetting('showEntryCount', false);\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(CommentRequest::class);\n\n        CRUD::field('body')->type('easymde');\n        CRUD::field('commentable')\n            ->label('For')\n            ->addMorphOption('App\\Models\\PetShop\\Owner', 'Owner', ['attribute' => 'name'])\n            ->addMorphOption('monster')\n            ->addMorphOption('App\\Models\\PetShop\\Pet', 'Pet', [\n                'data_source'          => backpack_url('pet-shop/comment/fetch/pets'),\n                'minimum_input_length' => 2,\n                'placeholder'          => 'Select a fluffy pet',\n            ])\n            ->addMorphOption('user')\n            ->morphTypeField(['wrapper' => ['class' => 'form-group col-md-4']])\n            ->morphIdField(['wrapper' => ['class' => 'form-group col-md-8']]);\n        CRUD::field('user');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/InvoiceCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\InvoiceRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Backpack\\CRUD\\app\\Library\\Widget;\n\n/**\n * Class InvoiceCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass InvoiceCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    // use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    // use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\FetchOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\TrashOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\CustomViewOperation;\n    use \\Backpack\\DataformModal\\Http\\Controllers\\Operations\\CreateInModalOperation;\n    use \\Backpack\\DataformModal\\Http\\Controllers\\Operations\\UpdateInModalOperation;\n    use \\Backpack\\ReportOperation\\Http\\Controllers\\Operations\\ReportOperation;\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\PetShop\\Invoice::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/invoice');\n        CRUD::setEntityNameStrings('invoice', 'invoices');\n\n        // enable db transactions for create and update operations\n        CRUD::operation(['create', 'update'], function () {\n            CRUD::set('useDatabaseTransactions', true);\n        });\n    }\n\n    public function setupLast5YearsView()\n    {\n        CRUD::addClause('where', 'issuance_date', '>=', now()->subYears(5)->format('Y-m-d'));\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::addColumn([\n            'name' => 'info',\n            'type' => 'view',\n            'view' => 'crud::chips.invoice',\n        ]);\n        CRUD::column('issuance_date');\n        CRUD::column('due_date');\n        CRUD::column('total');\n\n        CRUD::filter('series')\n            ->type('dropdown')\n            ->values(\\App\\Models\\PetShop\\Invoice::select('series')->distinct()->pluck('series', 'series')->toArray())\n            ->label('Series')\n            ->placeholder('Search by series')\n            ->whenActive(function ($value) {\n                CRUD::addClause('where', 'series', '=', $value);\n            });\n\n        CRUD::filter('issuance_date')\n            ->type('date_range')\n            ->label('Issuance Date')\n            ->placeholder('Search by issuance date')\n            ->whenActive(function ($value) {\n                $dates = json_decode($value);\n                CRUD::addClause('whereBetween', 'issuance_date', [$dates->from, $dates->to]);\n            });\n\n        $this->runCustomViews();\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(InvoiceRequest::class);\n        CRUD::setOperationSetting('contentClass', 'col-md-12');\n\n        CRUD::field('owner')->ajax(true)->minimum_input_length(0)->inline_create(true);\n        CRUD::field('series')->size(3)->default('INV');\n        CRUD::field('number')->size(3)->default((\\App\\Models\\PetShop\\Invoice::max('number') ?? 0) + 1);\n        CRUD::field('issuance_date')->size(3)->default(date('Y-m-d'));\n        CRUD::field('due_date')->size(3);\n        CRUD::field('items')->subfields([\n            [\n                'name'    => 'description',\n                'type'    => 'text',\n                'wrapper' => [\n                    'class' => 'form-group col-md-8',\n                ],\n            ],\n            [\n                'name'       => 'quantity',\n                'type'       => 'number',\n                'attributes' => ['step' => 'any'],\n                'wrapper'    => [\n                    'class' => 'form-group col-md-2',\n                ],\n            ],\n            [\n                'name'       => 'unit_price',\n                'type'       => 'number',\n                'attributes' => ['step' => 'any'],\n                'wrapper'    => [\n                    'class' => 'form-group col-md-2',\n                ],\n            ],\n        ])->reorder('order')->hint('<small class=\"float-right\">Create/update/delete InvoiceItem entries over a <code>hasMany</code> relationship (1-n).</small>');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    protected function setupShowOperation()\n    {\n        $this->autoSetupShowOperation();\n\n        CRUD::column('total');\n\n        // get the owner with important relationships\n        $owner = CRUD::getCurrentEntry()->owner()->with('avatar', 'invoices')->first();\n\n        // add a chip widget for the owner\n        Widget::add()\n            ->to('after_content')\n            ->type('chip')\n            ->view('crud::chips.owner')\n            ->title('Owner')\n            ->entry($owner);\n    }\n\n    public function fetchOwner()\n    {\n        return $this->fetch(\\App\\Models\\PetShop\\Owner::class);\n    }\n\n    protected function setupReportOperation()\n    {\n        // --- Stat cards row ---\n        $this->addMetricGroup([\n            'class' => 'row',\n        ], function () {\n            $this->addMetric('total_invoices', [\n                'type'            => 'stat',\n                'label'           => 'Total Invoices',\n                'aggregate'       => 'count',\n                'period'          => 'issuance_date',\n                'compare'         => 'previous_period',\n                'refreshInterval' => 5,\n                'wrapper'         => ['class' => 'col-md-4'],\n            ]);\n\n            $this->addMetric('series_count', [\n                'type'    => 'stat',\n                'label'   => 'Unique Series',\n                'wrapper' => ['class' => 'col-md-4'],\n                'resolve' => fn ($query, $filters) => [\n                    'value' => $query->distinct('series')->count('series'),\n                ],\n            ]);\n\n            $this->addMetric('total_items_value', [\n                'type'      => 'stat',\n                'label'     => 'Total Items Value',\n                'column'    => 'unit_price',\n                'aggregate' => 'sum',\n                'format'    => '$:value',\n                'period'    => 'created_at',\n                'wrapper'   => ['class' => 'col-md-4'],\n                'query'     => fn ($q) => $q->setModel(new \\App\\Models\\PetShop\\InvoiceItem()),\n            ]);\n        });\n\n        // --- Charts row ---\n        $this->addMetricGroup([\n            'class' => 'row mt-2',\n        ], function () {\n            $this->addMetric('invoices_bar', [\n                'type'      => 'bar',\n                'label'     => 'Invoices Per Period',\n                'aggregate' => 'count',\n                'period'    => 'issuance_date',\n            ]);\n\n            $this->addMetric('items_per_invoice', [\n                'type'    => 'line',\n                'label'   => 'Avg Items Per Invoice',\n                'resolve' => function ($query, $filters) {\n                    $rows = $query\n                        ->selectRaw('DATE_FORMAT(issuance_date, \"%Y-%m\") as label')\n                        ->selectRaw('AVG((SELECT COUNT(*) FROM invoice_items WHERE invoice_items.invoice_id = invoices.id)) as value')\n                        ->groupBy('label')\n                        ->orderBy('label')\n                        ->get();\n\n                    return [\n                        'labels' => $rows->pluck('label')->toArray(),\n                        'data'   => $rows->pluck('value')->map(fn ($v) => round((float) $v, 1))->toArray(),\n                    ];\n                },\n            ]);\n        });\n\n        // --- Stacked chart row ---\n        $this->addMetricGroup([\n            'class' => 'row mt-2',\n        ], function () {\n            $this->addMetric('invoices_by_series', [\n                'type'      => 'stacked-bar',\n                'label'     => 'Invoices by Series',\n                'aggregate' => 'count',\n                'period'    => 'issuance_date',\n                'stack_by'  => 'series',\n            ]);\n        });\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/OwnerCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\OwnerRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Backpack\\CRUD\\app\\Library\\Widget;\n\n/**\n * Class OwnerCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass OwnerCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\InlineCreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\FetchOperation;\n    use \\Backpack\\ReportOperation\\Http\\Controllers\\Operations\\ReportOperation;\n\n    public function fetchComments()\n    {\n        return $this->fetch('App\\Models\\PetShop\\Comment');\n    }\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\PetShop\\Owner::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/owner');\n        CRUD::setEntityNameStrings('owner', 'owners');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('name')->size(6);\n        CRUD::column('avatar.url')->type('image')->label('Avatar')->size(6);\n        CRUD::column('pets')->label('Pets')->linkTo('pet.show');\n        CRUD::column('invoices')->linkTo('invoice.show');\n        CRUD::column('badges')->label('Badges')->linkTo('badge.show');\n\n        CRUD::button('view_pets')->stack('line')->view('crud::buttons.quick')->meta([\n            'access'  => true,\n            'label'   => 'View Pets',\n            'icon'    => 'la la-paw',\n            'wrapper' => [\n                'href' => function ($entry, $crud) {\n                    return url($crud->route.'/'.$entry->getKey().'/pets');\n                },\n                'title' => 'view owner pets',\n            ],\n        ]);\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(OwnerRequest::class);\n\n        CRUD::field('name');\n        CRUD::field('avatar.url')->type('browse')->label('Avatar')->hint('<small class=\"float-right\">Edit one attribute on a <code>morphOne</code> related item (1-1).</small>');\n        CRUD::field('pets')->subfields([\n            ['name' => 'role', 'type' => 'text'],\n        ])->hint('<small class=\"float-right\">Choose related entries with a <code>belongsToMany</code> relationship and pivot fields (n-n with pivot).</small>');\n        CRUD::field('comments')->ajax('true')->hint('<small class=\"float-right\">Choose related entries with a <code>morphMany</code> relationship (1-n).</small>');\n        CRUD::field('badges')->subfields([\n            ['name' => 'note', 'type' => 'text'],\n        ])->hint('<small class=\"float-right\">Choose related entries with a <code>morphToMany</code> relationship and pivot fields (n-n with pivot).</small>');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    protected function setupReportOperation()\n    {\n        // --- Grouped stats with different refreshIntervals ---\n        // Both metrics share a group, so the lowest interval (30s) wins for the whole group.\n        $this->addMetricGroup([\n            'class' => 'row',\n        ], function () {\n            $this->addMetric('total_owners', [\n                'type'            => 'stat',\n                'label'           => 'Total Owners',\n                'aggregate'       => 'count',\n                'period'          => 'created_at',\n                'compare'         => true,\n                'refreshInterval' => 30,\n                'wrapper'         => ['class' => 'col-md-4'],\n            ]);\n\n            $this->addMetric('total_invoices', [\n                'type'            => 'stat',\n                'label'           => 'Total Invoices',\n                'aggregate'       => 'count',\n                'period'          => 'issuance_date',\n                'query'           => fn ($q) => $q->setModel(new \\App\\Models\\PetShop\\Invoice()),\n                'refreshInterval' => 60,\n                'wrapper'         => ['class' => 'col-md-4'],\n            ]);\n\n            $this->addMetric('avg_pets_per_owner', [\n                'type'    => 'stat',\n                'label'   => 'Avg Pets Per Owner',\n                'wrapper' => ['class' => 'col-md-4'],\n                'resolve' => fn ($query, $filters) => [\n                    'value' => round($query->withCount('pets')->get()->avg('pets_count'), 1),\n                ],\n            ]);\n        });\n\n        // --- Charts ---\n        $this->addMetricGroup([\n            'class' => 'row mt-2',\n        ], function () {\n            $this->addMetric('owners_over_time', [\n                'type'      => 'line',\n                'label'     => 'Owners Over Time',\n                'aggregate' => 'count',\n                'period'    => 'created_at',\n            ]);\n\n            $this->addMetric('invoices_by_series', [\n                'type'   => 'pie',\n                'label'  => 'Invoices by Series',\n                'column' => 'series',\n                'query'  => fn ($q) => $q->setModel(new \\App\\Models\\PetShop\\Invoice()),\n            ]);\n        });\n    }\n\n    protected function setupShowOperation()\n    {\n        $this->setupListOperation();\n\n        Widget::add([\n            'type'       => 'datatable',\n            'controller' => 'App\\Http\\Controllers\\Admin\\PetShop\\PetCrudController',\n            'name'       => 'pets_crud',\n            'section'    => 'after_content',\n            'wrapper'    => ['class' => 'mt-3'],\n            'content'    => [\n                'header' => 'Pets for this owner',\n                // COULD-DO: maybe add support for a subheader?\n                // 'subheader' => 'This is a list of all pets owned by this owner.',\n            ],\n            'setup' => function ($crud, $parent) {\n                // change some column attributes just inside this instance\n                $crud->column('skills')->label('Pet skills');\n                $crud->column('passport.number')->label('Passport Number');\n\n                // only show the pets of this owner (owner is an n-n relationship)\n                $crud->addClause('whereHas', 'owners', function ($query) use ($parent) {\n                    $query->where('id', $parent->id);\n                });\n            },\n        ]);\n        Widget::add([\n            'type'       => 'datatable',\n            'controller' => 'App\\Http\\Controllers\\Admin\\PetShop\\InvoiceCrudController',\n            'name'       => 'invoices_crud',\n            'section'    => 'after_content',\n            'wrapper'    => ['class' => 'mt-3'],\n            'content'    => [\n                'header' => 'Invoices for this owner',\n            ],\n            // MUST-DO: How the fuck do I make this only show related pets?!?!\n            'setup' => function ($crud, $parent) {\n                // only show the pets of this owner (owner is an n-n relationship)\n                $crud->addClause('where', 'owner_id', $parent->id);\n            },\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/OwnerPetsCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Illuminate\\Database\\Eloquent\\Builder;\n\nclass OwnerPetsCrudController extends PetCrudController\n{\n    use CreateOperation {store as traitStore; }\n    use UpdateOperation {update as traitUpdate; }\n\n    private int $owner;\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        parent::setup();\n\n        // get the owner parameter\n        $this->owner = \\Route::current()?->parameter('owner');\n\n        if (!$this->owner) {\n            abort(404);\n        }\n\n        // set a different route for the admin panel\n        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/owner/'.$this->owner.'/pets');\n\n        // show only that owner's pets\n        CRUD::addBaseClause(function (Builder $query) {\n            $query->whereHas('owners', function (Builder $query) {\n                $query->where('owner_id', $this->owner)\n                  ->where('role', 'Owner');\n            });\n        });\n    }\n\n    protected function setupCreateOperation()\n    {\n        parent::setupCreateOperation();\n        // remove the relationship field\n        CRUD::removeField('owners');\n        // add an hidden field so that our stripRequest allow that key to go through.\n        CRUD::field('owners')->type('hidden');\n    }\n\n    protected function setupUpdateOperation()\n    {\n        parent::setupUpdateOperation();\n        // remove the relationship field\n        CRUD::removeField('owners');\n        // add an hidden field so that our stripRequest allow that key to go through.\n        CRUD::field('owners')->type('hidden');\n    }\n\n    public function store()\n    {\n        CRUD::setRequest($this->addOwnerToRequest());\n\n        return $this->traitStore();\n    }\n\n    public function update()\n    {\n        CRUD::setRequest($this->addOwnerToRequest());\n\n        return $this->traitUpdate();\n    }\n\n    private function addOwnerToRequest()\n    {\n        return CRUD::getRequest()->merge([\n            'owners' => [\n                [\n                    'owners' => $this->owner,\n                    'role'   => 'Owner',\n                ],\n            ],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/PassportCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\PassportRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class PassportCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass PassportCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\PetShop\\Passport::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/passport');\n        CRUD::setEntityNameStrings('passport', 'passports');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('pet');\n        CRUD::column('number');\n        CRUD::column('issuance_date');\n        CRUD::column('expiry_date');\n        CRUD::column('first_name');\n        CRUD::column('middle_name');\n        CRUD::column('last_name');\n        CRUD::column('birth_date');\n        CRUD::column('species');\n        CRUD::column('breed');\n        CRUD::column('colour');\n        CRUD::column('notes');\n        CRUD::column('country');\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(PassportRequest::class);\n\n        CRUD::field('pet');\n        CRUD::addFields(self::passportFields());\n    }\n\n    public static function passportFields()\n    {\n        return [\n            ['name' => 'number', 'type' => 'number', 'wrapperAttributes' => ['class' => 'form-group col-md-6']],\n            ['name' => 'country', 'type' => 'select_from_array', 'options' => [\n                'Austria'            => 'Austria',\n                'Belgium'            => 'Belgium',\n                'Bulgaria'           => 'Bulgaria',\n                'Croatia'            => 'Croatia',\n                'Republic of Cyprus' => 'Republic of Cyprus',\n                'Czech Republic'     => 'Czech Republic',\n                'Denmark'            => 'Denmark',\n                'Estonia'            => 'Estonia',\n                'Finland'            => 'Finland',\n                'France'             => 'France',\n                'Germany'            => 'Germany',\n                'Greece'             => 'Greece',\n                'Hungary'            => 'Hungary',\n                'Ireland'            => 'Ireland',\n                'Italy'              => 'Italy',\n                'Latvia'             => 'Latvia',\n                'Lithuania'          => 'Lithuania',\n                'Luxembourg'         => 'Luxembourg',\n                'Malta'              => 'Malta',\n                'Netherlands'        => 'Netherlands',\n                'Poland'             => 'Poland',\n                'Portugal'           => 'Portugal',\n                'Romania'            => 'Romania',\n                'Slovakia'           => 'Slovakia',\n                'Slovenia'           => 'Slovenia',\n                'Spain'              => 'Spain',\n                'Sweden'             => 'Sweden',\n            ], 'wrapperAttributes' => ['class' => 'form-group col-md-6']],\n            ['name' => 'issuance_date', 'type' => 'date', 'wrapperAttributes' => ['class' => 'form-group col-md-6']],\n            ['name' => 'expiry_date', 'type' => 'date', 'wrapperAttributes' => ['class' => 'form-group col-md-6']],\n            ['name' => 'first_name', 'type' => 'text', 'wrapperAttributes' => ['class' => 'form-group col-md-4']],\n            ['name' => 'middle_name', 'type' => 'text', 'wrapperAttributes' => ['class' => 'form-group col-md-4']],\n            ['name' => 'last_name', 'type' => 'text', 'wrapperAttributes' => ['class' => 'form-group col-md-4']],\n            ['name' => 'birth_date', 'type' => 'date'],\n            ['name' => 'species', 'type' => 'text', 'wrapperAttributes' => ['class' => 'form-group col-md-4']],\n            ['name' => 'breed', 'type' => 'text', 'wrapperAttributes' => ['class' => 'form-group col-md-4']],\n            ['name' => 'colour', 'type' => 'text', 'wrapperAttributes' => ['class' => 'form-group col-md-4']],\n            ['name' => 'notes', 'type' => 'textarea'],\n        ];\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/PetCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\PetRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class PetCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass PetCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\FetchOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\TrashOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\BulkTrashOperation;\n    use \\Backpack\\ReportOperation\\Http\\Controllers\\Operations\\ReportOperation;\n\n    public function fetchComments()\n    {\n        return $this->fetch('App\\Models\\PetShop\\Comment');\n    }\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\PetShop\\Pet::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/pet');\n        CRUD::setEntityNameStrings('pet', 'pets');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('nickname');\n        CRUD::column('passport.number')->attribute('number')->linkTo('passport.show');\n        CRUD::column('owners')->linkTo('owner.show');\n        CRUD::column('skills')->linkTo('skill.show');\n        CRUD::column('avatar.url')->type('image')->label('Avatar');\n\n        CRUD::addButtonFromView('top', 'passports', 'passports');\n\n        CRUD::filter('skills')\n            ->type('select2_multiple')\n            ->values(function () {\n                return \\App\\Models\\Petshop\\Skill::all()->keyBy('id')->pluck('name', 'id')->toArray();\n            })\n            ->whenActive(function ($values) {\n                $values = json_decode($values, true);\n\n                $this->crud->addClause('whereHas', 'skills', function ($query) use ($values) {\n                    $query->whereIn('id', $values);\n                });\n            });\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(PetRequest::class);\n\n        CRUD::field('nickname');\n        CRUD::field('avatar.url')->type('browse')->label('Avatar')->hint('<small class=\"float-right\">Edit one attribute on a <code>morphMany</code> related item (1-1).</small>');\n        CRUD::field('owners')->subfields([['name' => 'role', 'type' => 'text']])->hint('<small class=\"float-right\">Choose related Owners over a <code>belongsToMany</code> relationship, and edit \"role\" on the pivot table (n-n).</small>');\n        CRUD::field('skills')->hint('<small class=\"float-right\">Choose related Skills over a <code>belongsToMany</code> relationship (n-n).</small>');\n        CRUD::field('passport')->subfields(\\App\\Http\\Controllers\\Admin\\PetShop\\PassportCrudController::passportFields())->hint('<small class=\"float-right\">Create, update or delete a related <code>hasOne</code> entry entirely (1-n).</small>');\n        CRUD::field('comments')->ajax('true')->hint('<small class=\"float-right\">Choose related Comments over a <code>morphMany</code> relationship (n-n).</small>');\n        CRUD::field('badges')->hint('<small class=\"float-right\">Choose related Badges over a <code>morphToMany</code> relationship (n-n).</small>');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    protected function setupReportOperation()\n    {\n        // --- Static metric with auto-refresh: always shows the current total, polls every 30s ---\n        $this->addMetric('total_pets_ever', [\n            'type'            => 'stat',\n            'label'           => 'Total Pets (All Time)',\n            'aggregate'       => 'count',\n            'section'         => 'static',\n            'refreshInterval' => 5,\n            'wrapper'         => ['class' => 'col-md-4'],\n        ]);\n\n        // --- Stat cards ---\n        $this->addMetricGroup([\n            'class' => 'row',\n        ], function () {\n            $this->addMetric('new_pets', [\n                'type'      => 'stat',\n                'label'     => 'New Pets',\n                'aggregate' => 'count',\n                'period'    => 'created_at',\n                'compare'   => true,\n                'wrapper'   => ['class' => 'col-md-4'],\n            ]);\n\n            $this->addMetric('trashed_pets', [\n                'type'        => 'stat',\n                'label'       => 'Trashed Pets',\n                'description' => 'Soft-deleted pets in the selected period.',\n                'aggregate'   => 'count',\n                'period'      => 'deleted_at',\n                'query'       => fn ($q) => $q->onlyTrashed(),\n                'wrapper'     => ['class' => 'col-md-4'],\n            ]);\n\n            $this->addMetric('avg_skills', [\n                'type'    => 'stat',\n                'label'   => 'Avg Skills Per Pet',\n                'wrapper' => ['class' => 'col-md-4'],\n                'resolve' => fn ($query, $filters) => [\n                    'value' => round($query->withCount('skills')->get()->avg('skills_count'), 1),\n                ],\n            ]);\n        });\n\n        // --- Chart ---\n        $this->addMetric('pets_over_time', [\n            'type'      => 'line',\n            'label'     => 'Pets Over Time',\n            'aggregate' => 'count',\n            'period'    => 'created_at',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/PetShop/SkillCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin\\PetShop;\n\nuse App\\Http\\Requests\\SkillRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class SkillCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass SkillCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\PetShop\\Skill::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/pet-shop/skill');\n        CRUD::setEntityNameStrings('skill', 'skills');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('name');\n        CRUD::column('pets')->type('relationship_count');\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(SkillRequest::class);\n\n        CRUD::field('name');\n        CRUD::field('pets');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/ProductCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\ProductRequest as StoreRequest;\n// VALIDATION: change the requests to match your own file names if you need form validation\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\nclass ProductCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CloneOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\BulkDeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\BulkCloneOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\InlineCreateOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; }\n    use \\Backpack\\ReportOperation\\Http\\Controllers\\Operations\\ReportOperation;\n\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\Product::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/product');\n        CRUD::setEntityNameStrings('product', 'products');\n    }\n\n    protected function setupListOperation()\n    {\n        CRUD::addColumns(['name']); // add multiple columns, at the end of the stack\n        CRUD::addColumn([\n            'name'          => 'status',\n            'type'          => 'enum',\n            'enum_function' => 'getReadableStatus',\n        ]);\n        CRUD::addColumn([\n            'name'          => 'condition',\n            'type'          => 'enum',\n            'enum_class'    => 'App\\Enums\\ProductCondition',\n            'enum_function' => 'getReadableCondition',\n        ]);\n        CRUD::addColumn([\n            'name'           => 'price',\n            'type'           => 'number',\n            'label'          => 'Price',\n            'visibleInTable' => false,\n            'visibleInModal' => true,\n        ]);\n        CRUD::addColumn([\n            // 1-n relationship\n            'label'          => 'Category', // Table column heading\n            'type'           => 'select',\n            'name'           => 'category_id', // the column that contains the ID of that connected entity;\n            'entity'         => 'category', // the method that defines the relationship in your Model\n            'attribute'      => 'name', // foreign key attribute that is shown to user\n            'visibleInTable' => true,\n            'visibleInModal' => false,\n        ]);\n    }\n\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(StoreRequest::class);\n\n        CRUD::addField([ // Text\n            'name'  => 'name',\n            'label' => 'Name',\n            'type'  => 'text',\n            'tab'   => 'Texts',\n\n            // optional\n            //'prefix' => '',\n            //'suffix' => '',\n            //'default'    => 'some value', // default value\n            //'hint'       => 'Some hint text', // helpful text, show up after input\n            //'attributes' => [\n            //'placeholder' => 'Some text when empty',\n            //'class' => 'form-control some-class'\n            //], // extra HTML attributes and values your input might need\n            //'wrapperAttributes' => [\n            //'class' => 'form-group col-md-12'\n            //], // extra HTML attributes for the field wrapper - mostly for resizing fields\n            //'readonly'=>'readonly',\n        ]);\n\n        CRUD::addField([   // Textarea\n            'name'  => 'description',\n            'label' => 'Description',\n            'type'  => 'textarea',\n            'tab'   => 'Texts',\n        ]);\n\n        CRUD::addField([   // summernote\n            'name'  => 'details',\n            'label' => 'Details',\n            'type'  => 'summernote',\n            'tab'   => 'Texts',\n        ]);\n\n        CRUD::addField([ // Table\n            'name'            => 'features',\n            'label'           => 'Features',\n            'type'            => 'table',\n            'entity_singular' => 'feature', // used on the \"Add X\" button\n            'columns'         => [\n                'name' => 'Feature',\n                'desc' => 'Value',\n            ],\n            'max' => 25, // maximum rows allowed in the table\n            'min' => 0, // minimum rows allowed in the table\n            'tab' => 'Texts',\n        ]);\n\n        // Fake repeatable with translations\n        CRUD::addField([ // Extra Features\n            'name'      => 'extra_features',\n            'label'     => 'Extra Features',\n            'type'      => 'repeatable',\n            'tab'       => 'Texts',\n            'store_in'  => 'extras',\n            'fake'      => true,\n            'subfields' => [\n                [\n                    'name'    => 'feature',\n                    'wrapper' => [\n                        'class' => 'col-md-3',\n                    ],\n                ],\n                [\n                    'name'    => 'value',\n                    'wrapper' => [\n                        'class' => 'col-md-6',\n                    ],\n                ],\n                [\n                    'name'    => 'quantity',\n                    'type'    => 'number',\n                    'wrapper' => [\n                        'class' => 'col-md-3',\n                    ],\n                ],\n            ],\n        ]);\n\n        CRUD::addField([  // Select2\n            'label'     => 'Category',\n            'type'      => 'select2',\n            'name'      => 'category_id', // the db column for the foreign key\n            'entity'    => 'category', // the method that defines the relationship in your Model\n            'attribute' => 'name', // foreign key attribute that is shown to user\n            // 'wrapperAttributes' => [\n            //     'class' => 'form-group col-md-6'\n            //   ], // extra HTML attributes for the field wrapper - mostly for resizing fields\n            'tab' => 'Basic Info',\n        ]);\n\n        CRUD::addField([   // Number\n            'name'  => 'price',\n            'label' => 'Price',\n            'type'  => 'number',\n            // optionals\n            // 'attributes' => [\"step\" => \"any\"], // allow decimals\n            'prefix' => '$',\n            'suffix' => '.00',\n            // 'wrapperAttributes' => [\n            //    'class' => 'form-group col-md-6'\n            //  ], // extra HTML attributes for the field wrapper - mostly for resizing fields\n            'tab' => 'Basic Info',\n        ]);\n        CRUD::addField([   // Number\n            'name'  => 'status',\n            'label' => 'Status',\n            'type'  => 'enum',\n            'tab'   => 'Basic Info',\n        ]);\n        CRUD::addField([   // Number\n            'name'          => 'condition',\n            'label'         => 'Condition',\n            'type'          => 'enum',\n            'tab'           => 'Basic Info',\n            'enum_class'    => 'App\\Enums\\ProductCondition',\n            'enum_function' => 'getReadableCondition',\n        ]);\n\n        CRUD::addFields([\n            [ // Text\n                'name'  => 'meta_title',\n                'label' => 'Meta Title',\n                'type'  => 'text',\n                'fake'  => true,\n                'tab'   => 'Metas',\n            ],\n            [ // Text\n                'name'  => 'meta_description',\n                'label' => 'Meta Description',\n                'type'  => 'text',\n                'fake'  => true,\n                'tab'   => 'Metas',\n            ],\n            [ // Text\n                'name'  => 'meta_keywords',\n                'label' => 'Meta Keywords',\n                'type'  => 'text',\n                'fake'  => true,\n                'tab'   => 'Metas',\n            ],\n        ]);\n\n        CRUD::field('main_image')\n                ->label('Main Image')\n                ->type('image')\n                ->tab('Media')\n                ->wrapper(['class' => 'form-group col-md-4'])\n                ->disabledInProduction()\n                ->withMedia();\n\n        CRUD::field('privacy_policy')\n                ->label('Privacy policy document')\n                ->type('upload')\n                ->tab('Media')\n                ->wrapper(['class' => 'form-group col-md-4'])\n                ->disabledInProduction()\n                ->withMedia();\n\n        CRUD::field('specifications')\n                ->label('Specifications')\n                ->type('upload_multiple')\n                ->tab('Media')\n                ->wrapper(['class' => 'form-group col-md-4'])\n                ->disabledInProduction()\n                ->withMedia();\n\n        CRUD::field('gallery')\n            ->type('repeatable')\n            ->tab('Media')\n            ->subfields([\n                [\n                    'name'    => 'image_title',\n                    'type'    => 'text',\n                    'wrapper' => [\n                        'class' => 'form-group col-md-6',\n                    ],\n                ],\n                [\n                    'name'    => 'gallery_image',\n                    'label'   => 'image',\n                    'type'    => 'image',\n                    'wrapper' => [\n                        'class' => 'form-group col-md-6',\n                    ],\n                    'withMedia' => true,\n                ],\n\n                [\n                    'name'    => 'gallery_image_drm',\n                    'label'   => 'Image DRM',\n                    'type'    => 'upload',\n                    'wrapper' => [\n                        'class' => 'form-group col-md-6',\n                    ],\n                    'withMedia' => true,\n                ],\n                [\n                    'name'    => 'gallery_image_specifications',\n                    'label'   => 'Image Specifications',\n                    'type'    => 'upload_multiple',\n                    'wrapper' => [\n                        'class' => 'form-group col-md-6',\n                    ],\n                    'withMedia' => true,\n                ],\n                [\n                    'name'    => 'gallery_image_certificates',\n                    'label'   => 'Image Certificates',\n                    'type'    => 'dropzone',\n                    'wrapper' => [\n                        'class' => 'form-group col-md-6',\n                    ],\n                    'withMedia' => true,\n                ],\n            ])\n            ->when(app('env') == 'production', function ($field) {\n                return $field->remove();\n            });\n\n        $this->crud->setOperationSetting('contentClass', 'col-md-12');\n    }\n\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    public function ajaxUpload()\n    {\n        if (app('env') === 'production') {\n            return response()->json(['errors' => [\n                'dropzone' => ['Uploads are disabled in production'],\n            ],\n            ], 500);\n        }\n\n        return $this->traitAjaxUpload();\n    }\n\n    protected function setupReportOperation()\n    {\n        // --- Stat cards ---\n        $this->addMetricGroup([\n            'class' => 'row',\n        ], function () {\n            $this->addMetric('total_products', [\n                'type'      => 'stat',\n                'label'     => 'Total Products',\n                'aggregate' => 'count',\n                'period'    => 'created_at',\n                'compare'   => 'previous_period',\n                'wrapper'   => ['class' => 'col-md-6'],\n            ]);\n\n            $this->addMetric('avg_price', [\n                'type'      => 'stat',\n                'label'     => 'Avg Price',\n                'column'    => 'price',\n                'aggregate' => 'avg',\n                'format'    => '$:value',\n                'period'    => 'created_at',\n                'wrapper'   => ['class' => 'col-md-6'],\n            ]);\n        });\n\n        // --- Charts ---\n        $this->addMetricGroup([\n            'class' => 'row mt-2',\n        ], function () {\n            $this->addMetric('products_over_time', [\n                'type'      => 'line',\n                'label'     => 'Products Over Time',\n                'aggregate' => 'count',\n                'period'    => 'created_at',\n            ]);\n\n            $this->addMetric('price_sum_over_time', [\n                'type'      => 'bar',\n                'label'     => 'Total Price Per Period',\n                'column'    => 'price',\n                'aggregate' => 'sum',\n                'period'    => 'created_at',\n            ]);\n        });\n\n        // --- Pie chart ---\n        $this->addMetricGroup([\n            'class' => 'row mt-2',\n        ], function () {\n            $this->addMetric('products_by_status', [\n                'type'     => 'pie',\n                'label'    => 'Products by Status',\n                'column'   => 'status',\n                'colors'   => [\n                    'in-stock'     => 'rgba(0, 200, 83, 0.8)',\n                    'out-of-stock' => 'rgba(255, 99, 132, 0.8)',\n                    'on-hold'      => 'rgba(255, 206, 86, 0.8)',\n                ],\n            ]);\n        });\n\n        // --- Table metric ---\n        $this->addMetric('top_products_table', [\n            'type'     => 'table',\n            'label'    => 'Top Products by Price',\n            'group_by' => 'status',\n            'columns'  => [\n                'status'        => 'Status',\n                'product_count' => ['label' => 'Products', 'aggregate' => 'count'],\n                'avg_price'     => ['label' => 'Avg Price', 'aggregate' => 'avg', 'column' => 'price', 'format' => '$:value'],\n                'total_price'   => ['label' => 'Total Price', 'aggregate' => 'sum', 'column' => 'price', 'format' => '$:value'],\n            ],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/StoryCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\StoryRequest;\nuse Backpack\\CRUD\\app\\Http\\Controllers\\CrudController;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\n\n/**\n * Class StoryCrudController.\n *\n * @property-read \\Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanel $crud\n */\nclass StoryCrudController extends CrudController\n{\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ListOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\CreateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\UpdateOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\DeleteOperation;\n    use \\Backpack\\CRUD\\app\\Http\\Controllers\\Operations\\ShowOperation;\n    use \\Backpack\\Pro\\Http\\Controllers\\Operations\\AjaxUploadOperation { ajaxUpload as traitAjaxUpload; }\n\n    /**\n     * Configure the CrudPanel object. Apply settings to all operations.\n     *\n     * @return void\n     */\n    public function setup()\n    {\n        CRUD::setModel(\\App\\Models\\Story::class);\n        CRUD::setRoute(config('backpack.base.route_prefix').'/story');\n        CRUD::setEntityNameStrings('story', 'stories');\n    }\n\n    /**\n     * Define what happens when the List operation is loaded.\n     *\n     * @see  https://backpackforlaravel.com/docs/crud-operation-list-entries\n     *\n     * @return void\n     */\n    protected function setupListOperation()\n    {\n        CRUD::column('name');\n        CRUD::column('monsters')->attribute('text');\n        CRUD::column('heroes');\n    }\n\n    /**\n     * Define what happens when the Create operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-create\n     *\n     * @return void\n     */\n    protected function setupCreateOperation()\n    {\n        CRUD::setValidation(StoryRequest::class);\n        CRUD::setOperationSetting('contentClass', 'col-md-12');\n\n        CRUD::field('name');\n        CRUD::field('monsters')\n            ->label('Monsters'.backpack_new_badge())\n            ->subfields(self::getMonsterSubfields())\n            ->hint('<small class=\"float-right\">Create/update/delete related Monsters over a <code>hasMany</code> relationship (1-n).</small>');\n    }\n\n    /**\n     * Define what happens when the Update operation is loaded.\n     *\n     * @see https://backpackforlaravel.com/docs/crud-operation-update\n     *\n     * @return void\n     */\n    protected function setupUpdateOperation()\n    {\n        $this->setupCreateOperation();\n    }\n\n    public static function getMonsterSubfields()\n    {\n        return CaveCrudController::getMonsterSubfields();\n    }\n\n    public function ajaxUpload()\n    {\n        if (app('env') === 'production') {\n            return response()->json(['errors' => [\n                'message' => 'This operation is not available in production.',\n            ]], 500);\n        }\n\n        return $this->traitAjaxUpload();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/UserCrudController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse Backpack\\ActivityLog\\Enums\\ActivityLogEnum;\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudPanelFacade as CRUD;\nuse Backpack\\PermissionManager\\app\\Http\\Controllers\\UserCrudController as OriginalUserCrudController;\n\nclass UserCrudController extends OriginalUserCrudController\n{\n    use \\Backpack\\ActivityLog\\Http\\Controllers\\Operations\\ModelActivityOperation;\n    use \\Backpack\\ActivityLog\\Http\\Controllers\\Operations\\EntryActivityOperation;\n\n    public function setupListOperation()\n    {\n        CRUD::set('activity-log.options', ActivityLogEnum::CAUSER);\n\n        parent::setupListOperation();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/ArticleController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse Backpack\\NewsCRUD\\app\\Models\\Article;\nuse Illuminate\\Http\\Request;\n\nclass ArticleController extends Controller\n{\n    // used by the select2_from_ajax and select2_fromAjax FIELDS\n    // inside MonsterCrudController, FluentMonsterCrudController and DummyCrudController\n    public function index(Request $request)\n    {\n        $search_term = $request->input('q');\n        $keys = $request->input('keys');\n\n        // keys are present when select2_from_ajax fields are initialized inside a repeatable field\n        if ($keys) {\n            return Article::findMany($keys);\n        }\n\n        if ($search_term) {\n            return Article::where('title', 'LIKE', '%'.$search_term.'%')->paginate(10);\n        } else {\n            return Article::paginate(10);\n        }\n    }\n\n    // used by the select2_from_ajax FILTER\n    // inside MonsterCrudController and FluentMonsterCrudController\n    public function search(Request $request)\n    {\n        $term = $request->input('term');\n        $options = Article::where('title', 'like', '%'.$term.'%')->get()->pluck('title', 'id');\n\n        return $options;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Foundation\\Validation\\ValidatesRequests;\nuse Illuminate\\Routing\\Controller as BaseController;\n\nclass Controller extends BaseController\n{\n    use AuthorizesRequests;\n    use DispatchesJobs;\n    use ValidatesRequests;\n}\n"
  },
  {
    "path": "app/Http/Kernel.php",
    "content": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n    /**\n     * The application's global HTTP middleware stack.\n     *\n     * These middleware are run during every request to your application.\n     *\n     * @var array\n     */\n    protected $middleware = [\n        \\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode::class,\n        \\Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull::class,\n    ];\n\n    /**\n     * The application's route middleware groups.\n     *\n     * @var array\n     */\n    protected $middlewareGroups = [\n        'web' => [\n            \\App\\Http\\Middleware\\EncryptCookies::class,\n            \\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::class,\n            \\Illuminate\\Session\\Middleware\\StartSession::class,\n            \\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,\n            \\App\\Http\\Middleware\\VerifyCsrfToken::class,\n            \\App\\Http\\Middleware\\Theme::class,\n        ],\n\n        'api' => [\n            'throttle:60,1',\n        ],\n    ];\n\n    /**\n     * The application's route middleware.\n     *\n     * These middleware may be assigned to groups or used individually.\n     *\n     * @var array\n     */\n    protected $middlewareAliases = [\n        'auth'       => \\App\\Http\\Middleware\\Authenticate::class,\n        'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class,\n        'can'        => \\Illuminate\\Foundation\\Http\\Middleware\\Authorize::class,\n        'guest'      => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class,\n        'throttle'   => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class,\n        'verified'   => \\Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified::class,\n        'signed'     => \\App\\Http\\Middleware\\ValidateSignature::class,\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/Authenticate.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass Authenticate\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     * @param \\Closure                 $next\n     * @param string|null              $guard\n     *\n     * @return mixed\n     */\n    public function handle($request, Closure $next, $guard = null)\n    {\n        if (Auth::guard($guard)->guest()) {\n            if ($request->ajax() || $request->wantsJson()) {\n                return response('Unauthorized.', 401);\n            } else {\n                return redirect()->guest('login');\n            }\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/CheckIfAdmin.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\n\nclass CheckIfAdmin\n{\n    /**\n     * Checked that the logged in user is an administrator.\n     *\n     * --------------\n     * VERY IMPORTANT\n     * --------------\n     * If you have both regular users and admins inside the same table,\n     * change the contents of this method to check that the logged in user\n     * is an admin, and not a regular user.\n     *\n     * @param [type] $user [description]\n     *\n     * @return bool [description]\n     */\n    private function checkIfUserIsAdmin($user)\n    {\n        // return ($user->is_admin == 1);\n        return true;\n    }\n\n    /**\n     * Answer to unauthorized access request.\n     *\n     * @param [type] $request [description]\n     *\n     * @return [type] [description]\n     */\n    private function respondToUnauthorizedRequest($request)\n    {\n        if ($request->ajax() || $request->wantsJson()) {\n            return response(trans('backpack::base.unauthorized'), 401);\n        } else {\n            return redirect()->guest(backpack_url('login'));\n        }\n    }\n\n    /**\n     * Handle an incoming request.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     * @param \\Closure                 $next\n     *\n     * @return mixed\n     */\n    public function handle($request, Closure $next)\n    {\n        if (backpack_auth()->guest()) {\n            return $this->respondToUnauthorizedRequest($request);\n        }\n\n        if (!$this->checkIfUserIsAdmin(backpack_user())) {\n            return $this->respondToUnauthorizedRequest($request);\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as BaseEncrypter;\n\nclass EncryptCookies extends BaseEncrypter\n{\n    /**\n     * The names of the cookies that should not be encrypted.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass RedirectIfAuthenticated\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     * @param \\Closure                 $next\n     * @param string|null              $guard\n     *\n     * @return mixed\n     */\n    public function handle($request, Closure $next, $guard = null)\n    {\n        if (Auth::guard($guard)->check()) {\n            return redirect('/');\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/Theme.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Config;\nuse Illuminate\\Support\\Facades\\Session;\n\nclass Theme\n{\n    public function handle($request, Closure $next): mixed\n    {\n        // Set theme if exists\n        if (Session::has('backpack.ui.view_namespace')) {\n            Config::set('backpack.ui.view_namespace', Session::get('backpack.ui.view_namespace'));\n        }\n\n        // Set layout if exist in session — only for Tabler\n        if (Session::get('backpack.ui.view_namespace') === 'backpack.theme-tabler::') {\n            Config::set('backpack.theme-tabler.layout', Session::get('backpack.theme-tabler.layout') ?? config('backpack.theme-tabler.layout'));\n\n            // Set styles if exist in session — only for Tabler\n            $sessionStyles = Session::get('backpack.theme-tabler.styles');\n            if ($sessionStyles !== null && !empty($sessionStyles)) {\n                Config::set('backpack.theme-tabler.styles', $sessionStyles);\n            }\n        }\n\n        // Set HTML direction if exists in session\n        if (Session::has('backpack.ui.html_direction')) {\n            Config::set('backpack.ui.html_direction', Session::get('backpack.ui.html_direction'));\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/ValidateSignature.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Routing\\Middleware\\ValidateSignature as Middleware;\n\nclass ValidateSignature extends Middleware\n{\n    /**\n     * The names of the query string parameters that should be ignored.\n     *\n     * @var array<int, string>\n     */\n    protected $except = [\n        // 'fbclid',\n        // 'utm_campaign',\n        // 'utm_content',\n        // 'utm_medium',\n        // 'utm_source',\n        // 'utm_term',\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as BaseVerifier;\n\nclass VerifyCsrfToken extends BaseVerifier\n{\n    /**\n     * The URIs that should be excluded from CSRF verification.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "app/Http/Requests/BadgeRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass BadgeRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required|string',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/CaveRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass CaveRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name'             => 'required|string',\n            'monster.*.text'   => 'required|string',\n            'monster.*.status' => 'required',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            'monster.*.text.required'   => 'The \"Monster > Text\" field is required.',\n            'monster.*.status.required' => 'The \"Monster > Status\" field is required.',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/CommentRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass CommentRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'body'                         => 'required|string',\n            'commentable.commentable_type' => 'required|string',\n            'commentable.commentable_id'   => 'required|integer',\n            'user'                         => 'required',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            'commentable.commentable_id' => 'This field is required.',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/DummyRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass DummyRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name'               => 'required|min:5|max:255',\n            'description'        => 'required',\n            'simple.*.text'      => 'required|min:10|max:255',\n            'simple.*.email'     => 'required|email',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            'simple.*.text.required'  => 'The \"Simple > Text\" field is required.',\n            'simple.*.text.min'       => 'The \"Simple > Text\" field must be at least :min characters long.',\n            'simple.*.email.required' => 'The \"Simple > Email\" field is required.',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/HeroRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass HeroRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required|string',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/IconRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nclass IconRequest extends \\Backpack\\CRUD\\app\\Http\\Requests\\CrudRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required|min:5|max:255',\n            'icon' => 'required',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/InvoiceRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass InvoiceRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'owner'         => 'required|integer|exists:owners,id',\n            'series'        => 'required|string',\n            'number'        => 'required|integer',\n            'issuance_date' => 'required|date',\n            'due_date'      => 'nullable|date',\n\n            'items'               => 'required',\n            'items.*.order'       => 'nullable|integer',\n            'items.*.description' => 'required|string',\n            'items.*.quantity'    => 'required|numeric',\n            'items.*.unit_price'  => 'required|numeric',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/MeetingRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MeetingRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'start'            => 'required|date',\n            'end'              => 'nullable|date|after:start',\n            'background_color' => 'nullable|hex_color',\n            'text_color'       => 'nullable|hex_color',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/MonsterRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nclass MonsterRequest extends \\Backpack\\CRUD\\app\\Http\\Requests\\CrudRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'text'            => 'required|min:5|max:255',\n            'email'           => 'nullable|email',\n            // 'icondummy'       => 'required',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            'icondummy.required' => 'The field \"Relationships (all field attributes are guessed)\" in #Relationships tab is required.',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/OwnerRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass OwnerRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name'       => 'required|string',\n            'avatar.url' => 'required|string',\n\n            'pets.*.pets' => 'required',\n            'pets.*.role' => 'required|string',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/PassportRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass PassportRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'pet'           => 'required|integer|exists:pets,id',\n            'number'        => 'required|string',\n            'issuance_date' => 'required|date',\n            'expiry_date'   => 'nullable|date',\n            'first_name'    => 'required|string',\n            'middle_name'   => 'nullable|string',\n            'last_name'     => 'required|string',\n            'birth_date'    => 'required|date',\n            'species'       => 'required|string',\n            'breed'         => 'nullable|string',\n            'colour'        => 'nullable|string',\n            'notes'         => 'nullable|string',\n            'country'       => 'required|string',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/PetRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass PetRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'nickname'   => 'required|string',\n            'avatar.url' => 'required',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ProductRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nclass ProductRequest extends \\Backpack\\CRUD\\app\\Http\\Requests\\CrudRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name'        => 'required|min:3|max:255',\n            'category_id' => 'required',\n            'price'       => 'required|integer',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Request.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nabstract class Request extends FormRequest\n{\n    //\n}\n"
  },
  {
    "path": "app/Http/Requests/SkillRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass SkillRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name' => 'required|string',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoryRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoryRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        // only allow updates if the user is logged in\n        return backpack_auth()->check();\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'name'              => 'required|string',\n            'monsters.*.text'   => 'required|string',\n            'monsters.*.status' => 'required',\n        ];\n    }\n\n    /**\n     * Get the validation attributes that apply to the request.\n     *\n     * @return array\n     */\n    public function attributes()\n    {\n        return [\n            //\n        ];\n    }\n\n    /**\n     * Get the validation messages that apply to the request.\n     *\n     * @return array\n     */\n    public function messages()\n    {\n        return [\n            'monsters.*.text.required'   => 'The \"Monsters > Text\" field is required.',\n            'monsters.*.status.required' => 'The \"Monsters > Status\" field is required.',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Job.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\n\nabstract class Job\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Queueable Jobs\n    |--------------------------------------------------------------------------\n    |\n    | This job base class provides a central location to place any logic that\n    | is shared across all of your jobs. The trait included with the class\n    | provides access to the \"onQueue\" and \"delay\" queue helper methods.\n    |\n    */\n\n    use Queueable;\n}\n"
  },
  {
    "path": "app/Library/Elfinder.php",
    "content": "<?php\n\nnamespace App\\Library;\n\nclass Elfinder\n{\n    public static function checkAccess($attr, $path, $data, $volume)\n    {\n        // on production / staging environments disable writing\n        // since it could be a security vulnerability\n        switch ($attr) {\n            case 'read':\n                return true;\n                break;\n\n            case 'write':\n                return (app('env') == 'local') ? true : false;\n                break;\n\n            default:\n                return false;\n                break;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Listeners/.gitkeep",
    "content": "\n"
  },
  {
    "path": "app/Models/Address.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Address extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'addresses';\n    protected $primaryKey = 'id';\n    public $timestamps = false;\n    // protected $guarded = ['id'];\n    protected $fillable = ['monster_id', 'street', 'country_id'];\n\n    public function monster()\n    {\n        return $this->belongsTo(\\App\\Models\\Monster::class, 'monster_id');\n    }\n\n    public function country()\n    {\n        return $this->belongsTo(\\App\\Models\\Country::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Article.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\NewsCRUD\\app\\Models\\Article as OriginalArticle;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\n\nclass Article extends OriginalArticle\n{\n    use HasFactory;\n    use LogsActivity;\n}\n"
  },
  {
    "path": "app/Models/Ball.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Ball extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    protected $fillable = [\n        'name',\n        'country_id',\n    ];\n\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'balls';\n    protected $primaryKey = 'id';\n    public $timestamps = true;\n    protected $guarded = ['id'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function ballable()\n    {\n        return $this->morphTo();\n    }\n\n    public function country()\n    {\n        return $this->belongsTo(\\App\\Models\\Country::class);\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Bill.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Bill extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'bills';\n    protected $primaryKey = 'id';\n    public $timestamps = true;\n    protected $fillable = ['title'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function monsters()\n    {\n        return $this->morphedByMany(\\App\\Models\\Monster::class, 'billable');\n    }\n\n    public function icons()\n    {\n        return $this->morphedByMany(\\App\\Models\\Icon::class, 'billable');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Category.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\NewsCRUD\\app\\Models\\Category as OriginalCategory;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\n\nclass Category extends OriginalCategory\n{\n    use HasFactory;\n    use LogsActivity;\n}\n"
  },
  {
    "path": "app/Models/Cave.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Cave extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name', 'location', 'lat', 'lng', 'full_address',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    public function monster()\n    {\n        return $this->hasOne(\\App\\Models\\Monster::class);\n    }\n\n    public function category()\n    {\n        return $this->monster()->getRelated()->category();\n    }\n\n    protected function location(): \\Illuminate\\Database\\Eloquent\\Casts\\Attribute\n    {\n        return \\Illuminate\\Database\\Eloquent\\Casts\\Attribute::make(\n            get: function ($value, $attributes) {\n                return json_encode([\n                    'lat'               => $attributes['lat'],\n                    'lng'               => $attributes['lng'],\n                    'formatted_address' => $attributes['full_address'] ?? '',\n                ], JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT | JSON_THROW_ON_ERROR);\n            },\n            set: function ($value) {\n                $location = json_decode($value);\n\n                return [\n                    'lat'          => $location->lat,\n                    'lng'          => $location->lng,\n                    'full_address' => $location->formatted_address ?? '',\n                ];\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/Models/Country.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Country extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'countries';\n    protected $primaryKey = 'id';\n    public $timestamps = false;\n    protected $fillable = ['name', 'code'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function addresses()\n    {\n        return $this->hasMany(\\App\\Models\\Address::class);\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Dummy.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Spatie\\Permission\\Traits\\HasRoles;\n\nclass Dummy extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasRoles;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'dummies';\n    // protected $primaryKey = 'id';\n    // public $timestamps = false;\n    protected $guarded = ['id'];\n    // protected $fillable = [];\n    // protected $hidden = [];\n    protected $casts = [\n        'extras' => 'array',\n    ];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function article()\n    {\n        return $this->belongsTo(\\Backpack\\NewsCRUD\\app\\Models\\Article::class, 'select2_from_ajax');\n    }\n\n    public function category()\n    {\n        return $this->belongsTo(\\Backpack\\NewsCRUD\\app\\Models\\Category::class, 'select');\n    }\n\n    public function categories()\n    {\n        return $this->belongsToMany(\\Backpack\\NewsCRUD\\app\\Models\\Category::class, 'monster_category', 'monster_id', 'category_id');\n    }\n\n    public function tags()\n    {\n        return $this->belongsToMany(\\Backpack\\NewsCRUD\\app\\Models\\Tag::class, 'monster_tag', 'monster_id', 'category_id');\n    }\n\n    public function icon()\n    {\n        return $this->belongsTo(\\App\\Models\\Icon::class, 'icon_id');\n    }\n\n    public function products()\n    {\n        return $this->belongsToMany(\\App\\Models\\Product::class, 'monster_product', 'monster_id', 'product_id');\n    }\n\n    public function articles()\n    {\n        return $this->belongsToMany(\\Backpack\\NewsCRUD\\app\\Models\\Article::class, 'monster_article', 'monster_id', 'article_id');\n    }\n\n    public function categorySelect2()\n    {\n        return $this->belongsTo(\\Backpack\\NewsCRUD\\app\\Models\\Category::class, 'select2');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESSORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Graffiti.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Graffiti extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    protected $fillable = [\n        'image',\n        'user_id',\n    ];\n\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'graffitis';\n    protected $primaryKey = 'id';\n    public $timestamps = true;\n    protected $guarded = ['id'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function user()\n    {\n        return $this->belongsTo(\\App\\User::class);\n    }\n\n    public function monsters()\n    {\n        return $this->hasMany(\\App\\Models\\Monster::class, 'graffiti_id');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Hero.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Hero extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name',\n        'story_id',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    public function stories()\n    {\n        return $this->belongsToMany(\\App\\Models\\Story::class, 'monsters')\n                    ->withPivot(array_filter((new \\App\\Models\\Monster())->getFillable(), function ($item) {\n                        // fields that are on fillable but are not part of model table\n                        $columnsToRemove = ['fake-text', 'fake-switch', 'fake-select', 'fake-checkbox', 'editable_checkbox'];\n\n                        return !in_array($item, $columnsToRemove);\n                    }));\n    }\n}\n"
  },
  {
    "path": "app/Models/Icon.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Venturecraft\\Revisionable\\RevisionableTrait;\n\nclass Icon extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use RevisionableTrait;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'icons';\n    protected $primaryKey = 'id';\n    public $timestamps = true;\n    // protected $guarded = ['id'];\n    protected $fillable = ['name', 'icon'];\n    // protected $hidden = [];\n\n    public function identifiableAttribute()\n    {\n        return 'icon';\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function recommends()\n    {\n        return $this->morphToMany(\\App\\Models\\Recommend::class, 'recommendable');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Meeting.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Meeting extends Model\n{\n    use CrudTrait;\n    use HasFactory;\n\n    protected $fillable = [\n        'title',\n        'types',\n        'email',\n        'number',\n        'start',\n        'end',\n        'background_color',\n        'text_color',\n    ];\n\n    protected $casts = [\n        'types' => 'array',\n    ];\n}\n"
  },
  {
    "path": "app/Models/MenuItem.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\MenuCRUD\\app\\Models\\MenuItem as OriginalMenuItem;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\n\nclass MenuItem extends OriginalMenuItem\n{\n    use HasFactory;\n    use LogsActivity;\n\n    public static $pageLink = 'page_link';\n    public static $externalLink = 'external_link';\n    public static $internalLink = 'internal_link';\n}\n"
  },
  {
    "path": "app/Models/Monster.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\MonsterStatus;\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Str;\nuse Spatie\\Permission\\Traits\\HasRoles;\n\nclass Monster extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasRoles;\n    use HasFactory;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'monsters';\n\n    protected $primaryKey = 'id';\n\n    public $timestamps = true;\n\n    // protected $guarded = ['id'];\n    protected $fillable = ['address_google', 'base64_image', 'browse', 'browse_multiple', 'checkbox', 'wysiwyg', 'color', 'date', 'date_picker', 'easymde', 'start_date', 'end_date', 'datetime', 'datetime_picker', 'email', 'hidden', 'icon_picker', 'image', 'month', 'number', 'float', 'password', 'radio', 'range', 'select', 'select_from_array', 'select2', 'select2_from_ajax', 'select2_from_array', 'summernote', 'table', 'textarea', 'text', 'tinymce', 'upload', 'upload_multiple', 'url', 'video', 'week', 'extras', 'icon_id', 'editable_checkbox', 'fake-text', 'fake-switch', 'fake-checkbox', 'fake-select', 'status', 'features', 'ckeditor', 'dropzone', 'category_relationship', 'select2_json_from_api', 'select2_json_from_api_simple', 'belongs_to_non_nullable'];\n\n    // protected $hidden = [];\n    protected $casts = [\n        'address_google'        => 'object',\n        'video'                 => 'array',\n        'upload_multiple'       => 'array',\n        'browse_multiple'       => 'array',\n        'status'                => MonsterStatus::class,\n        'features'              => 'array',\n        'table'                 => 'array',\n        'extras'                => 'array',\n        // optional casts for select from array fields that allow multiple selection\n        // 'select_from_array'     => 'array',\n        // 'select2_from_array'    => 'array'\n    ];\n\n    public $identifiableAttribute = 'text';\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function openGoogle($crud = false)\n    {\n        return '<a class=\"btn btn-sm btn-link\" target=\"_blank\" href=\"http://google.com?q='.urlencode($this->text).'\" data-toggle=\"tooltip\" title=\"Just a demo custom button.\"><i class=\"la la-search\"></i> Google it</a>';\n    }\n\n    public function getCategory()\n    {\n        return $this->category;\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function article()\n    {\n        return $this->belongsTo(\\Backpack\\NewsCRUD\\app\\Models\\Article::class, 'select2_from_ajax');\n    }\n\n    public function wish()\n    {\n        return $this->hasOne(\\App\\Models\\Wish::class);\n    }\n\n    public function address()\n    {\n        return $this->hasOne(\\App\\Models\\Address::class);\n    }\n\n    public function cave()\n    {\n        return $this->belongsTo(\\App\\Models\\Cave::class, 'cave_id');\n    }\n\n    public function hero()\n    {\n        return $this->belongsTo(\\App\\Models\\Hero::class, 'hero_id');\n    }\n\n    public function story()\n    {\n        return $this->belongsTo(\\App\\Models\\Story::class, 'story_id');\n    }\n\n    public function graffiti()\n    {\n        return $this->belongsTo(\\App\\Models\\Graffiti::class, 'graffiti_id');\n    }\n\n    public function category()\n    {\n        return $this->belongsTo(\\Backpack\\NewsCRUD\\app\\Models\\Category::class, 'select');\n    }\n\n    public function categorySelect2()\n    {\n        return $this->belongsTo(\\Backpack\\NewsCRUD\\app\\Models\\Category::class, 'select2');\n    }\n\n    public function categoryRelationship()\n    {\n        return $this->belongsTo(\\Backpack\\NewsCRUD\\app\\Models\\Category::class, 'category_relationship');\n    }\n\n    public function icon()\n    {\n        return $this->belongsTo(\\App\\Models\\Icon::class, 'icon_id');\n    }\n\n    public function icondummy()\n    {\n        return $this->belongsTo(\\App\\Models\\Icon::class, 'belongs_to_non_nullable');\n    }\n\n    public function postalboxes()\n    {\n        return $this->hasMany(\\App\\Models\\PostalBox::class);\n    }\n\n    public function postalboxer()\n    {\n        return $this->hasMany(\\App\\Models\\PostalBoxer::class);\n    }\n\n    public function articles()\n    {\n        return $this->belongsToMany(\\Backpack\\NewsCRUD\\app\\Models\\Article::class, 'monster_article');\n    }\n\n    public function categories()\n    {\n        return $this->belongsToMany(\\Backpack\\NewsCRUD\\app\\Models\\Category::class, 'monster_category');\n    }\n\n    public function tags()\n    {\n        return $this->belongsToMany(\\Backpack\\NewsCRUD\\app\\Models\\Tag::class, 'monster_tag');\n    }\n\n    public function products()\n    {\n        return $this->belongsToMany(\\App\\Models\\Product::class, 'monster_product');\n    }\n\n    public function dummyproducts()\n    {\n        return $this->belongsToMany(\\App\\Models\\Product::class, 'monster_productdummy')->withPivot('notes');\n    }\n\n    public function countries()\n    {\n        return $this->belongsToMany(\\App\\Models\\Country::class, 'countries_monsters');\n    }\n\n    public function sentiment()\n    {\n        return $this->morphOne(\\App\\Models\\Sentiment::class, 'sentimentable');\n    }\n\n    public function ball()\n    {\n        return $this->morphOne(\\App\\Models\\Ball::class, 'ballable');\n    }\n\n    public function recommends()\n    {\n        return $this->morphToMany(\\App\\Models\\Recommend::class, 'recommendable')->withPivot('text');\n    }\n\n    public function bills()\n    {\n        return $this->morphToMany(\\App\\Models\\Bill::class, 'billable');\n    }\n\n    public function stars()\n    {\n        return $this->morphMany(\\App\\Models\\Star::class, 'starable');\n    }\n\n    public function universes()\n    {\n        return $this->morphMany(\\App\\Models\\Universe::class, 'universable');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    public function getTextAndEmailAttribute()\n    {\n        return $this->text.' '.$this->email;\n    }\n\n    /**\n     * Because we don't trust that the 'easymde' db column does not already\n     * have some JS or HTML stored inside it, we will run strip_tags() on\n     * the value before it's ever used (both in Backpack and in the app).\n     */\n    public function getEasymdeAttribute($value)\n    {\n        return strip_tags($value);\n    }\n\n    /**\n     * Because we don't trust that the 'summernote' db column does not already\n     * have some JS stored inside the HTML, we will sanitize the output using\n     * https://github.com/mewebstudio/Purifier.\n     */\n    public function getSummernoteAttribute($value)\n    {\n        return clean($value);\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n\n    public function setBase64ImageAttribute($value)\n    {\n        if (app('env') == 'production') {\n            \\Alert::warning('In the online demo the base64 images don\\'t get stored.');\n\n            return true;\n        }\n\n        $this->attributes['base64_image'] = $value;\n    }\n\n    public function setDropzoneAttribute($value)\n    {\n        if (app('env') === 'production') {\n            \\Alert::warning('In the online demo the dropzone files don\\'t get stored.');\n\n            return true;\n        }\n\n        $this->attributes['dropzone'] = $value;\n    }\n\n    public function setImageAttribute($value)\n    {\n        if (app('env') == 'production') {\n            \\Alert::warning('In the online demo the images don\\'t get uploaded.')->flash();\n\n            return true;\n        }\n\n        $attribute_name = 'image';\n        $disk = 'public'; // use Backpack's root disk; or your own\n        $destination_path = 'uploads/monsters/image_field';\n\n        // if the image was erased\n        if ($value == null) {\n            // delete the image from disk\n            if ($this->{$attribute_name}) {\n                \\Storage::disk($disk)->delete($this->{$attribute_name});\n            }\n\n            // set null in the database column\n            $this->attributes[$attribute_name] = null;\n        }\n\n        // if a base64 was sent, store it in the db\n        if (Str::startsWith($value, 'data:image')) {\n            // 0. Make the image\n            $image = \\Image::make($value)->encode('jpg', 90);\n\n            // 1. Generate a filename.\n            $filename = md5($value.time()).'.jpg';\n\n            // 2. Store the image on disk.\n            \\Storage::disk($disk)->put($destination_path.'/'.$filename, $image->stream());\n\n            // delete previous image from the disk\n            if ($this->{$attribute_name}) {\n                \\Storage::disk($disk)->delete($this->{$attribute_name});\n            }\n\n            // 4. Save the public path to the database\n            // but first, remove \"public/\" from the path, since we're pointing to it from the root folder\n            // that way, what gets saved in the database is the user-accesible URL\n            $public_destination_path = Str::replaceFirst('public/', '', $destination_path);\n            $this->attributes[$attribute_name] = $public_destination_path.'/'.$filename;\n        }\n    }\n\n    public function setUploadAttribute($value)\n    {\n        if (app('env') == 'production') {\n            \\Alert::warning('In the online demo the files don\\'t get uploaded.');\n\n            return true;\n        }\n\n        $attribute_name = 'upload';\n        $disk = 'public';\n        $destination_path = 'uploads/monsters/upload_field';\n\n        $this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);\n\n        // return $this->attributes[{$attribute_name}]; // uncomment if this is a translatable field\n    }\n\n    public function setUploadMultipleAttribute($value)\n    {\n        if (app('env') == 'production') {\n            \\Alert::warning('In the online demo the files don\\'t get uploaded.')->flash();\n\n            return true;\n        }\n\n        $attribute_name = 'upload_multiple';\n        $disk = 'public';\n        $destination_path = 'uploads/monsters/upload_multiple_field';\n\n        $this->uploadMultipleFilesToDisk($value, $attribute_name, $disk, $destination_path);\n    }\n\n    public function setIcondummyAttribute($value)\n    {\n        $this->attributes['belongs_to_non_nullable'] = $value;\n    }\n}\n"
  },
  {
    "path": "app/Models/Page.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\PageManager\\app\\Models\\Page as OriginalPage;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\n\nclass Page extends OriginalPage\n{\n    use HasFactory;\n    use LogsActivity;\n}\n"
  },
  {
    "path": "app/Models/PetShop/Avatar.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Avatar extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n    use HasFactory;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'url',\n        'avatarable_id',\n        'avatarable_type',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    public function avatarable()\n    {\n        return $this->morphTo();\n    }\n}\n"
  },
  {
    "path": "app/Models/PetShop/Badge.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Badge extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n    use HasFactory;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    public function owners()\n    {\n        return $this->morphedByMany(\\App\\Models\\PetShop\\Owner::class, 'badgeable');\n    }\n\n    public function pets()\n    {\n        return $this->morphedByMany(\\App\\Models\\PetShop\\Pet::class, 'badgeable');\n    }\n}\n"
  },
  {
    "path": "app/Models/PetShop/Comment.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Comment extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n\n    protected $fillable = [\n        'body',\n        'commentable_type',\n        'commentable_id',\n        'user_id',\n    ];\n\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'comments';\n\n    protected $primaryKey = 'id';\n\n    public $timestamps = true;\n\n    protected $guarded = ['id'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function commentable()\n    {\n        return $this->morphTo();\n    }\n\n    public function user()\n    {\n        return $this->belongsTo(\\App\\User::class);\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/PetShop/Invoice.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Invoice extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n    use HasFactory;\n    use SoftDeletes;\n\n    protected $fillable = [\n        'owner_id',\n        'series',\n        'number',\n        'issuance_date',\n        'due_date',\n    ];\n\n    protected $casts = [\n        'id'            => 'integer',\n        'owner_id'      => 'integer',\n        'issuance_date' => 'date',\n        'due_date'      => 'date',\n    ];\n\n    protected $appends = [\n        'total',\n    ];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    protected static function booted()\n    {\n        static::forceDeleting(function (Invoice $invoice) {\n            $invoice->items()->delete();\n        });\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function owner()\n    {\n        return $this->belongsTo(\\App\\Models\\PetShop\\Owner::class, 'owner_id');\n    }\n\n    public function items()\n    {\n        return $this->hasMany(\\App\\Models\\PetShop\\InvoiceItem::class);\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    public function getTotalAttribute()\n    {\n        return $this->items->sum('subtotal');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/PetShop/InvoiceItem.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass InvoiceItem extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n    use HasFactory;\n\n    protected $fillable = [\n        'invoice_id',\n        'order',\n        'description',\n        'quantity',\n        'unit_price',\n    ];\n\n    protected $casts = [\n        'id'         => 'integer',\n        'invoice_id' => 'integer',\n        'quantity'   => 'float',\n        'unit_price' => 'float',\n    ];\n\n    protected $appends = [\n        'subtotal',\n    ];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function invoice()\n    {\n        return $this->belongsTo(\\App\\Models\\PetShop\\Invoice::class);\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    public function getSubtotalAttribute()\n    {\n        return $this->quantity * $this->unit_price;\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/PetShop/Owner.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Owner extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n    use HasFactory;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    public function invoices()\n    {\n        return $this->hasMany(\\App\\Models\\PetShop\\Invoice::class);\n    }\n\n    public function pets()\n    {\n        return $this->belongsToMany(\\App\\Models\\PetShop\\Pet::class)->withPivot('role');\n    }\n\n    public function avatar()\n    {\n        return $this->morphOne(\\App\\Models\\PetShop\\Avatar::class, 'avatarable');\n    }\n\n    public function comments()\n    {\n        return $this->morphMany(Comment::class, 'commentable');\n    }\n\n    public function badges()\n    {\n        return $this->morphToMany(\\App\\Models\\PetShop\\Badge::class, 'badgeable')->withPivot('note');\n    }\n}\n"
  },
  {
    "path": "app/Models/PetShop/Passport.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Passport extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n    use HasFactory;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'pet_id',\n        'number',\n        'issuance_date',\n        'expiry_date',\n        'first_name',\n        'middle_name',\n        'last_name',\n        'birth_date',\n        'species',\n        'breed',\n        'colour',\n        'notes',\n        'country',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id'            => 'integer',\n        'pet_id'        => 'integer',\n        'issuance_date' => 'date:Y-m-d',\n        'expiry_date'   => 'date:Y-m-d',\n        'birth_date'    => 'date:Y-m-d',\n    ];\n\n    public function pet()\n    {\n        return $this->belongsTo(\\App\\Models\\PetShop\\Pet::class, 'pet_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/PetShop/Pet.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Pet extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n    use HasFactory;\n    use SoftDeletes;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'nickname',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    public function owners()\n    {\n        return $this->belongsToMany(\\App\\Models\\PetShop\\Owner::class)->withPivot('role');\n    }\n\n    public function skills()\n    {\n        return $this->belongsToMany(\\App\\Models\\PetShop\\Skill::class);\n    }\n\n    public function passport()\n    {\n        return $this->hasOne(\\App\\Models\\PetShop\\Passport::class);\n    }\n\n    public function avatar()\n    {\n        return $this->morphOne(\\App\\Models\\PetShop\\Avatar::class, 'avatarable');\n    }\n\n    public function comments()\n    {\n        return $this->morphMany(\\App\\Models\\PetShop\\Comment::class, 'commentable');\n    }\n\n    public function badges()\n    {\n        return $this->morphToMany(\\App\\Models\\PetShop\\Badge::class, 'badgeable')->withPivot('note');\n    }\n}\n"
  },
  {
    "path": "app/Models/PetShop/Skill.php",
    "content": "<?php\n\nnamespace App\\Models\\PetShop;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Skill extends Model\n{\n    use \\Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\n    use \\App\\Models\\Traits\\LogsActivity;\n    use HasFactory;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    public function pets()\n    {\n        return $this->belongsToMany(\\App\\Models\\PetShop\\Pet::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/PostalBox.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PostalBox extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'postalboxes';\n    protected $primaryKey = 'id';\n    public $timestamps = false;\n    // protected $guarded = ['id'];\n    protected $fillable = ['monster_id', 'postal_name'];\n\n    public function monster()\n    {\n        return $this->belongsTo(\\App\\Models\\Monster::class, 'monster_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/PostalBoxer.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PostalBoxer extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'postalboxers';\n    protected $primaryKey = 'id';\n    public $timestamps = false;\n    protected $fillable = ['monster_id', 'postal_name'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function monster()\n    {\n        return $this->belongsTo(\\App\\Models\\Monster::class, 'monster_id');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Product.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Enums\\ProductStatus;\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Backpack\\CRUD\\app\\Models\\Traits\\SpatieTranslatable\\HasTranslations;\nuse Illuminate\\Database\\Eloquent\\Casts\\Attribute;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Spatie\\MediaLibrary\\HasMedia;\nuse Spatie\\MediaLibrary\\InteractsWithMedia;\n\nclass Product extends Model implements HasMedia\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasTranslations;\n    use HasFactory;\n    use InteractsWithMedia;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'products';\n\n    protected $primaryKey = 'id';\n\n    public $timestamps = true;\n\n    // protected $guarded = ['id'];\n    protected $fillable = ['name', 'description', 'details', 'features', 'price', 'category_id', 'extras', 'status', 'condition', 'gallery', 'main_image', 'privacy_policy', 'specifications'];\n\n    // protected $hidden = [];\n    public $translatable = ['name', 'description', 'details', 'features', 'extras'];\n\n    public $casts = [\n        'features'       => 'object',\n        'extra_features' => 'object',\n        'status'         => ProductStatus::class,\n        'gallery'        => 'json',\n        'specifications' => 'array',\n    ];\n\n    public function mainImage(): Attribute\n    {\n        return Attribute::make(\n            set: function ($item) {\n                if (app('env') === 'production') {\n                    return null;\n                }\n\n                return $item;\n            },\n        );\n    }\n\n    public function privacyPolicy(): Attribute\n    {\n        return Attribute::make(\n            set: function ($item) {\n                if (app('env') === 'production') {\n                    return null;\n                }\n\n                return $item;\n            },\n        );\n    }\n\n    public function specifications(): Attribute\n    {\n        return Attribute::make(\n            set: function ($item) {\n                if (app('env') === 'production') {\n                    return null;\n                }\n\n                return json_encode($item);\n            },\n        );\n    }\n\n    public function gallery(): Attribute\n    {\n        return Attribute::make(\n            set: function ($item) {\n                if (app('env') === 'production') {\n                    $item = is_string($item) ? json_decode($item, true) : ($item ?? []);\n                    array_walk($item, function (&$row) {\n                        unset($row['gallery_image'], $row['gallery_image_drm'], $row['gallery_image_specifications'], $row['gallery_image_certificates']);\n\n                        return $row;\n                    });\n                }\n\n                return json_encode($item);\n            },\n        );\n    }\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function category()\n    {\n        return $this->belongsTo('Backpack\\NewsCRUD\\app\\Models\\Category', 'category_id');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Recommend.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Recommend extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'recommends';\n    protected $primaryKey = 'id';\n    public $timestamps = true;\n    protected $fillable = ['title'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function monsters()\n    {\n        return $this->morphedByMany(\\App\\Models\\Monster::class, 'recommendable');\n    }\n\n    public function icons()\n    {\n        return $this->morphedByMany(\\App\\Models\\Icon::class, 'recommendable');\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Sentiment.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Sentiment extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    protected $fillable = [\n        'text',\n        'user_id',\n    ];\n\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'sentiments';\n    protected $primaryKey = 'id';\n    public $timestamps = true;\n    protected $guarded = ['id'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function sentimentable()\n    {\n        return $this->morphTo();\n    }\n\n    public function user()\n    {\n        return $this->belongsTo(\\App\\User::class);\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Star.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Star extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'stars';\n    protected $primaryKey = 'id';\n    public $timestamps = false;\n    protected $fillable = ['title'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function starable()\n    {\n        return $this->morphTo();\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Story.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Story extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    public function monsters()\n    {\n        return $this->hasMany(\\App\\Models\\Monster::class);\n    }\n\n    public function heroes()\n    {\n        return $this->belongsToMany(\\App\\Models\\Hero::class, 'monsters')\n                    ->withPivot(array_filter((new \\App\\Models\\Monster())->getFillable(), function ($item) {\n                        // fields that are on fillable but are not part of model table\n                        $columnsToRemove = ['fake-text', 'fake-switch', 'fake-select', 'fake-checkbox', 'editable_checkbox'];\n\n                        return !in_array($item, $columnsToRemove);\n                    }));\n    }\n}\n"
  },
  {
    "path": "app/Models/Tag.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\NewsCRUD\\app\\Models\\Tag as OriginalTag;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\n\nclass Tag extends OriginalTag\n{\n    use HasFactory;\n    use LogsActivity;\n}\n"
  },
  {
    "path": "app/Models/Traits/LogsActivity.php",
    "content": "<?php\n\nnamespace App\\Models\\Traits;\n\nuse Spatie\\Activitylog\\LogOptions;\nuse Spatie\\Activitylog\\Traits\\LogsActivity as OriginalLogsActivity;\n\ntrait LogsActivity\n{\n    use OriginalLogsActivity;\n\n    /**\n     * Spatie Log Options\n     * By default will log only the changes between fillables.\n     *\n     * @return LogOptions\n     */\n    public function getActivitylogOptions(): LogOptions\n    {\n        return LogOptions::defaults()\n            ->logAll()\n            ->logOnlyDirty();\n    }\n}\n"
  },
  {
    "path": "app/Models/Universe.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Universe extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'universes';\n    protected $primaryKey = 'id';\n    public $timestamps = false;\n    protected $fillable = ['title'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function universable()\n    {\n        return $this->morphTo();\n    }\n\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/Models/Wish.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Wish extends Model\n{\n    use CrudTrait;\n    use LogsActivity;\n    use HasFactory;\n\n    protected $fillable = [\n        'body',\n        'monster_id',\n        'country_id',\n    ];\n\n    protected $casts = [\n        'id' => 'integer',\n    ];\n\n    /*\n    |--------------------------------------------------------------------------\n    | GLOBAL VARIABLES\n    |--------------------------------------------------------------------------\n    */\n\n    protected $table = 'wishes';\n    protected $primaryKey = 'id';\n    public $timestamps = true;\n    protected $guarded = ['id'];\n    // protected $hidden = [];\n\n    /*\n    |--------------------------------------------------------------------------\n    | FUNCTIONS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | RELATIONS\n    |--------------------------------------------------------------------------\n    */\n\n    public function monster()\n    {\n        return $this->belongsTo(\\App\\Models\\Monster::class);\n    }\n\n    public function country()\n    {\n        return $this->belongsTo(\\App\\Models\\Country::class);\n    }\n\n    public function universes()\n    {\n        return $this->belongsToMany(\\App\\Models\\Universe::class, 'universes_wishes');\n    }\n    /*\n    |--------------------------------------------------------------------------\n    | SCOPES\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | ACCESORS\n    |--------------------------------------------------------------------------\n    */\n\n    /*\n    |--------------------------------------------------------------------------\n    | MUTATORS\n    |--------------------------------------------------------------------------\n    */\n}\n"
  },
  {
    "path": "app/PageTemplates.php",
    "content": "<?php\n\nnamespace App;\n\ntrait PageTemplates\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Page Templates for Backpack\\PageManager\n    |--------------------------------------------------------------------------\n    |\n    | Each page template has its own method, that define what fields should show up using the Backpack\\CRUD API.\n    | Use snake_case for naming and PageManager will make sure it looks pretty in the create/update form\n    | template dropdown.\n    |\n    | Any fields defined here will show up after the standard page fields:\n    | - select template\n    | - page name (only seen by admins)\n    | - page title\n    | - page slug\n    */\n\n    private function services()\n    {\n        $this->crud->addField([   // CustomHTML\n            'name'  => 'metas_separator',\n            'type'  => 'custom_html',\n            'value' => '<br><h2>Metas</h2><hr>',\n        ]);\n        $this->crud->addField([\n            'name'     => 'meta_title',\n            'label'    => 'Meta Title',\n            'fake'     => true,\n            'store_in' => 'extras',\n        ]);\n        $this->crud->addField([\n            'name'     => 'meta_description',\n            'label'    => 'Meta Description',\n            'fake'     => true,\n            'store_in' => 'extras',\n        ]);\n        $this->crud->addField([\n            'name'     => 'meta_keywords',\n            'type'     => 'textarea',\n            'label'    => 'Meta Keywords',\n            'fake'     => true,\n            'store_in' => 'extras',\n        ]);\n        $this->crud->addField([   // CustomHTML\n            'name'  => 'content_separator',\n            'type'  => 'custom_html',\n            'value' => '<br><h2>Content</h2><hr>',\n        ]);\n        $this->crud->addField([\n            'name'        => 'content',\n            'label'       => 'Content',\n            'type'        => 'summernote',\n            'placeholder' => 'Your content here',\n        ]);\n    }\n\n    private function about_us()\n    {\n        $this->crud->addField([\n            'name'        => 'content',\n            'label'       => 'Content',\n            'type'        => 'summernote',\n            'placeholder' => 'Your content here',\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Policies/.gitkeep",
    "content": "\n"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Backpack\\CRUD\\app\\Library\\CrudPanel\\CrudField;\nuse Illuminate\\Database\\Eloquent\\Relations\\Relation;\nuse Illuminate\\Support\\ServiceProvider;\nuse Pan\\PanConfiguration;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        Relation::morphMap([\n            'monster' => 'App\\Models\\Monster',\n            'user'    => 'App\\User',\n        ]);\n\n        PanConfiguration::allowedAnalytics([\n            'my-button',\n            'welcome-page',\n            'welcome-login-link',\n            'welcome-docs-link',\n            'welcome-github-link',\n            'welcome-contact-link',\n            'login-form',\n            'menu-item-dashboard',\n            'menu-item-addons',\n            'menu-item-petshop',\n            'menu-item-news',\n            'menu-item-auth',\n            'menu-item-filemanager',\n            'menu-item-activity-log',\n            'menu-item-translation-manager',\n            'menu-item-calendar-operation',\n            'menu-item-backup-manager',\n            'menu-item-log-manager',\n            'menu-item-settings',\n            'menu-item-page-manager',\n            'menu-item-menu-manager',\n            'menu-item-analytics',\n        ]);\n    }\n\n    /**\n     * Register any application services.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        // override user crud controller\n        $this->app->bind(\n            \\Backpack\\PermissionManager\\app\\Http\\Controllers\\UserCrudController::class,\n            \\App\\Http\\Controllers\\Admin\\UserCrudController::class\n        );\n\n        // a simple helper to make fields disabled in production\n        CrudField::macro('disabledInProduction', function () {\n            if (app('env') !== 'production') {\n                return $this;\n            }\n\n            return $this->attributes(['disabled' => 'disabled'])\n                ->hint('Uploads are disabled in production.');\n        });\n    }\n}\n"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\n\nclass AuthServiceProvider extends ServiceProvider\n{\n    /**\n     * The policy mappings for the application.\n     *\n     * @var array\n     */\n    protected $policies = [\n        //'App\\Model' => 'App\\Policies\\ModelPolicy',\n    ];\n\n    /**\n     * Register any authentication / authorization services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        $this->registerPolicies();\n\n        //\n    }\n}\n"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass BroadcastServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        Broadcast::routes();\n\n        /*\n         * Authenticate the user's personal channel...\n         */\n        Broadcast::channel('App.User.*', function ($user, $userId) {\n            return (int) $user->id === (int) $userId;\n        });\n    }\n}\n"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass EventServiceProvider extends ServiceProvider\n{\n    /**\n     * The event listener mappings for the application.\n     *\n     * @var array\n     */\n    protected $listen = [\n        'App\\Events\\SomeEvent' => [\n            'App\\Listeners\\EventListener',\n        ],\n    ];\n\n    /**\n     * Register any events for your application.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        parent::boot();\n\n        //\n    }\n}\n"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\nuse Illuminate\\Support\\Facades\\Route;\n\nclass RouteServiceProvider extends ServiceProvider\n{\n    /**\n     * This namespace is applied to your controller routes.\n     *\n     * In addition, it is set as the URL generator's root namespace.\n     *\n     * @var string\n     */\n    protected $namespace = 'App\\Http\\Controllers';\n\n    /**\n     * Define your route model bindings, pattern filters, etc.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        //\n\n        parent::boot();\n    }\n\n    /**\n     * Define the routes for the application.\n     *\n     * @return void\n     */\n    public function map()\n    {\n        $this->mapWebRoutes();\n\n        $this->mapApiRoutes();\n\n        //\n    }\n\n    /**\n     * Define the \"web\" routes for the application.\n     *\n     * These routes all receive session state, CSRF protection, etc.\n     *\n     * @return void\n     */\n    protected function mapWebRoutes()\n    {\n        Route::group([\n            'middleware' => 'web',\n            'namespace'  => $this->namespace,\n        ], function ($router) {\n            require base_path('routes/web.php');\n        });\n    }\n\n    /**\n     * Define the \"api\" routes for the application.\n     *\n     * These routes are typically stateless.\n     *\n     * @return void\n     */\n    protected function mapApiRoutes()\n    {\n        Route::group([\n            'middleware' => 'api',\n            'namespace'  => $this->namespace,\n            'prefix'     => 'api',\n        ], function ($router) {\n            require base_path('routes/api.php');\n        });\n    }\n}\n"
  },
  {
    "path": "app/User.php",
    "content": "<?php\n\nnamespace App;\n\nuse Alert;\nuse App\\Models\\Traits\\LogsActivity;\nuse Backpack\\CRUD\\app\\Models\\Traits\\CrudTrait;\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Spatie\\Activitylog\\Traits\\CausesActivity;\nuse Spatie\\Permission\\Traits\\HasRoles;\n\nclass User extends Authenticatable implements MustVerifyEmail\n{\n    use HasRoles;\n    use CrudTrait;\n    use Notifiable;\n    use HasFactory;\n    use CausesActivity;\n    use LogsActivity;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name', 'email', 'password',\n    ];\n\n    public $timestamps = true;\n\n    /**\n     * The attributes that should be hidden for arrays.\n     *\n     * @var array\n     */\n    protected $hidden = [\n        'password', 'remember_token',\n    ];\n\n    public function save(array $options = [])\n    {\n        if (app('env') == 'production' &&\n            !app()->runningInConsole() &&\n            !app()->runningUnitTests()) {\n            Alert::warning('User editing is disabled in the demo.');\n\n            return true;\n        }\n\n        return parent::save($options);\n    }\n}\n"
  },
  {
    "path": "app/helpers.php",
    "content": "<?php\n\nif (!function_exists('backpack_pro_badge')) {\n    /**\n     * Echo a purple badge to tell the viewer this is a PRO feature.\n     *\n     * @param string $string\n     *\n     * @return string\n     */\n    function backpack_pro_badge(string $string = 'PRO')\n    {\n        return '<a href=\"https://backpackforlaravel.com/pricing\" target=\"_blank\" class=\"badge badge-pill badge-sm bg-primary bg-primary-lt mx-2\" tabindex=\"-1\">'.$string.'</a>';\n    }\n}\n\nif (!function_exists('backpack_new_badge')) {\n    /**\n     * Echo a yellow badge to tell the viewer this is a NEW feature.\n     *\n     * @param string $string\n     *\n     * @return string\n     */\n    function backpack_new_badge(string $string = 'NEW')\n    {\n        return '<span class=\"badge badge-pill badge-sm bg-warning bg-warning-lt mx-2\">'.$string.'</span>';\n    }\n}\n\nif (!function_exists('backpack_free_badge')) {\n    /**\n     * Echo a green badge to tell the viewer this is a FREE feature.\n     *\n     * @param string $string\n     *\n     * @return string\n     */\n    function backpack_free_badge(string $string = 'FREE')\n    {\n        return '<span class=\"badge badge-pill badge-sm bg-success bg-success-lt mx-2\">'.$string.'</span>';\n    }\n}\n"
  },
  {
    "path": "artisan",
    "content": "#!/usr/bin/env php\n<?php\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so that we do not have to worry about the\n| loading of any our classes \"manually\". Feels great to relax.\n|\n*/\n\nrequire __DIR__.'/bootstrap/autoload.php';\n\n$app = require_once __DIR__.'/bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Artisan Application\n|--------------------------------------------------------------------------\n|\n| When we run the console application, the current CLI command will be\n| executed in this console and the response sent back to a terminal\n| or another output device for the developers. Here goes nothing!\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Console\\Kernel::class);\n\n$status = $kernel->handle(\n    $input = new Symfony\\Component\\Console\\Input\\ArgvInput,\n    new Symfony\\Component\\Console\\Output\\ConsoleOutput\n);\n\n/*\n|--------------------------------------------------------------------------\n| Shutdown The Application\n|--------------------------------------------------------------------------\n|\n| Once Artisan has finished running. We will fire off the shutdown events\n| so that any final work may be done by the application before we shut\n| down the process. This is the last thing to happen to the request.\n|\n*/\n\n$kernel->terminate($input, $status);\n\nexit($status);\n"
  },
  {
    "path": "bootstrap/app.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------------------------------------------------------------------------\n|\n| The first thing we will do is create a new Laravel application instance\n| which serves as the \"glue\" for all the components of Laravel, and is\n| the IoC container for the system binding all of the various parts.\n|\n*/\n\n$app = new Illuminate\\Foundation\\Application(\n    realpath(__DIR__.'/../')\n);\n\n/*\n|--------------------------------------------------------------------------\n| Bind Important Interfaces\n|--------------------------------------------------------------------------\n|\n| Next, we need to bind some important interfaces into the container so\n| we will be able to resolve them when needed. The kernels serve the\n| incoming requests to this application from both the web and CLI.\n|\n*/\n\n$app->singleton(\n    Illuminate\\Contracts\\Http\\Kernel::class,\n    App\\Http\\Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Console\\Kernel::class,\n    App\\Console\\Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Debug\\ExceptionHandler::class,\n    App\\Exceptions\\Handler::class\n);\n\n/*\n|--------------------------------------------------------------------------\n| Return The Application\n|--------------------------------------------------------------------------\n|\n| This script returns the application instance. The instance is given to\n| the calling script so we can separate the building of the instances\n| from the actual running of the application and sending responses.\n|\n*/\n\nreturn $app;\n"
  },
  {
    "path": "bootstrap/autoload.php",
    "content": "<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Register The Composer Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so that we do not have to worry about the\n| loading of any our classes \"manually\". Feels great to relax.\n|\n*/\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/*\n|--------------------------------------------------------------------------\n| Include The Compiled Class File\n|--------------------------------------------------------------------------\n|\n| To dramatically increase your application's performance, you may use a\n| compiled class file which contains all of the classes commonly used\n| by a request. The Artisan \"optimize\" is used to create this file.\n|\n*/\n\n$compiledPath = __DIR__.'/cache/compiled.php';\n\nif (file_exists($compiledPath)) {\n    require $compiledPath;\n}\n"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"backpack/demo\",\n    \"description\": \"A Laravel + Backpack installation to show off most features.\",\n    \"keywords\": [\n        \"backpack\",\n        \"laravel\",\n        \"backpack for laravel\",\n        \"admin panel\",\n        \"crud\"\n    ],\n    \"license\": \"proprietary\",\n    \"type\": \"project\",\n    \"require\": {\n        \"php\": \"^8.2\",\n        \"laravel/framework\": \"^13\",\n        \"backpack/crud\": \"^7.0\",\n        \"backpack/pro\": \"^3.0\",\n        \"backpack/medialibrary-uploaders\": \"^2.0\",\n        \"backpack/ckeditor-field\": \"^1.0\",\n        \"backpack/tinymce-field\": \"^1.0\",\n        \"backpack/activity-log\": \"^2.1\",\n        \"backpack/backupmanager\": \"^5.1\",\n        \"backpack/calendar-operation\": \"^1.1\",\n        \"backpack/editable-columns\": \"^3.1\",\n        \"backpack/filemanager\": \"^4.0\",\n        \"backpack/language-switcher\": \"^2.1\",\n        \"backpack/logmanager\": \"^5.1\",\n        \"backpack/menucrud\": \"^4.1\",\n        \"backpack/newscrud\": \"^5.2\",\n        \"backpack/pagemanager\": \"^3.4\",\n        \"backpack/permissionmanager\": \"^7.3\",\n        \"backpack/revise-operation\": \"^2.1\",\n        \"backpack/settings\": \"^3.2\",\n        \"backpack/theme-coreuiv2\": \"^2.0\",\n        \"backpack/theme-coreuiv4\": \"^1.2\",\n        \"backpack/theme-tabler\": \"^2.0\",\n        \"backpack/translation-manager\": \"^1.1\",\n        \"consoletvs/charts\": \"6.*\",\n        \"intervention/image\": \"^2.3\",\n        \"laravel/legacy-factories\": \"^1.0\",\n        \"laravel/tinker\": \"^3.0\",\n        \"league/flysystem-aws-s3-v3\": \"^3.0\",\n        \"mews/purifier\": \"^3.4\",\n        \"spatie/laravel-ignition\": \"^2.0\",\n        \"spatie/laravel-translatable\": \"^6.0\",\n        \"backpack/pan-panel\": \"^1.1\",\n        \"backpack/dataform-modal\": \"^1.0\",\n        \"backpack/report-operation\": \"^1.0\"\n    },\n    \"require-dev\": {\n        \"fakerphp/faker\": \"~1.4\",\n        \"mockery/mockery\": \"1.6.*\",\n        \"phpunit/phpunit\": \"^11\",\n        \"symfony/css-selector\": \"^7\",\n        \"symfony/dom-crawler\": \"^7\",\n        \"backpack/generators\": \"^4.1\",\n        \"barryvdh/laravel-debugbar\": \"^4.0\",\n        \"backpack/test-generators\": \"^1.0\"\n    },\n    \"repositories\": [\n        {\n            \"type\": \"composer\",\n            \"url\": \"https://repo.backpackforlaravel.com/\"\n        }\n    ],\n    \"autoload\": {\n        \"files\": [\n            \"app/helpers.php\"\n        ],\n        \"classmap\": [\n            \"database\"\n        ],\n        \"psr-4\": {\n            \"App\\\\\": \"app/\",\n            \"Database\\\\Factories\\\\\": \"database/factories/\",\n            \"Database\\\\Seeders\\\\\": \"database/seeders/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Tests\\\\\": \"tests/\"\n        }\n    },\n    \"scripts\": {\n        \"post-root-package-install\": [\n            \"php -r \\\"copy('.env.example', '.env');\\\"\"\n        ],\n        \"post-create-project-cmd\": [\n            \"php artisan key:generate\"\n        ],\n        \"post-install-cmd\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postInstall\",\n            \"php artisan storage:link -q\",\n            \"@php artisan basset:cache\"\n        ],\n        \"post-update-cmd\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postUpdate\",\n            \"@php artisan basset:cache\"\n        ],\n        \"post-autoload-dump\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postAutoloadDump\",\n            \"@php artisan package:discover\"\n        ],\n        \"fresh\": \"php artisan key:generate --force && php artisan db:wipe --force && php artisan migrate --force && php artisan db:seed --force && php artisan backup:clean && php artisan cache:clear && php artisan view:clear && php artisan config:clear\"\n    },\n    \"config\": {\n        \"preferred-install\": \"dist\",\n        \"allow-plugins\": {\n            \"composer/package-versions-deprecated\": true\n        }\n    },\n    \"minimum-stability\": \"dev\",\n    \"prefer-stable\": true\n}\n"
  },
  {
    "path": "config/app.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Facade;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services your application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stack traces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    */\n\n    'debug' => env('APP_DEBUG', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | your application so that it is used when running Artisan tasks.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. We have gone\n    | ahead and set this to a sensible default for you out of the box.\n    |\n    */\n\n    'timezone' => 'UTC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by the translation service provider. You are free to set this value\n    | to any of the locales which will be supported by the application.\n    |\n    */\n\n    'locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Fallback Locale\n    |--------------------------------------------------------------------------\n    |\n    | The fallback locale determines the locale to use when the current one\n    | is not available. You may change the value to correspond to any of\n    | the language folders that are provided through your application.\n    |\n    */\n\n    'fallback_locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is used by the Illuminate encrypter service and should be set\n    | to a random, 32 character string, otherwise these encrypted strings\n    | will not be safe. Please do this before deploying an application!\n    |\n    */\n\n    'key' => env('APP_KEY'),\n\n    'cipher' => 'AES-256-CBC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Logging Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log settings for your application. Out of\n    | the box, Laravel uses the Monolog PHP logging library. This gives\n    | you a variety of powerful log handlers / formatters to utilize.\n    |\n    | Available Settings: \"single\", \"daily\", \"syslog\", \"errorlog\"\n    |\n    */\n\n    'log' => env('APP_LOG', 'daily'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Autoloaded Service Providers\n    |--------------------------------------------------------------------------\n    |\n    | The service providers listed here will be automatically loaded on the\n    | request to your application. Feel free to add your own services to\n    | this array to grant expanded functionality to your applications.\n    |\n    */\n\n    'providers' => [\n\n        /*\n         * Laravel Framework Service Providers...\n         */\n        Illuminate\\Auth\\AuthServiceProvider::class,\n        Illuminate\\Broadcasting\\BroadcastServiceProvider::class,\n        Illuminate\\Bus\\BusServiceProvider::class,\n        Illuminate\\Cache\\CacheServiceProvider::class,\n        Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider::class,\n        Illuminate\\Cookie\\CookieServiceProvider::class,\n        Illuminate\\Database\\DatabaseServiceProvider::class,\n        Illuminate\\Encryption\\EncryptionServiceProvider::class,\n        Illuminate\\Filesystem\\FilesystemServiceProvider::class,\n        Illuminate\\Foundation\\Providers\\FoundationServiceProvider::class,\n        Illuminate\\Hashing\\HashServiceProvider::class,\n        Illuminate\\Mail\\MailServiceProvider::class,\n        Illuminate\\Pagination\\PaginationServiceProvider::class,\n        Illuminate\\Pipeline\\PipelineServiceProvider::class,\n        Illuminate\\Queue\\QueueServiceProvider::class,\n        Illuminate\\Redis\\RedisServiceProvider::class,\n        Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider::class,\n        Illuminate\\Session\\SessionServiceProvider::class,\n        // Illuminate\\Translation\\TranslationServiceProvider::class,\n        Spatie\\TranslationLoader\\TranslationServiceProvider::class,\n        Illuminate\\Validation\\ValidationServiceProvider::class,\n        Illuminate\\View\\ViewServiceProvider::class,\n        Illuminate\\Notifications\\NotificationServiceProvider::class,\n\n        /*\n         * Application Service Providers...\n         */\n        App\\Providers\\AppServiceProvider::class,\n        App\\Providers\\AuthServiceProvider::class,\n        App\\Providers\\EventServiceProvider::class,\n        App\\Providers\\RouteServiceProvider::class,\n\n        /*\n        * Other Service Providers...\n        */\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Class Aliases\n    |--------------------------------------------------------------------------\n    |\n    | This array of class aliases will be registered when this application\n    | is started. However, feel free to register as many as you wish as\n    | the aliases are \"lazy\" loaded so they don't hinder performance.\n    |\n    */\n\n    'aliases' => Facade::defaultAliases()->merge([\n\n        /*\n        * Other Aliases...\n        */\n\n    ])->toArray(),\n\n];\n"
  },
  {
    "path": "config/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Defaults\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default authentication \"guard\" and password\n    | reset options for your application. You may change these defaults\n    | as required, but they're a perfect start for most applications.\n    |\n    */\n\n    'defaults' => [\n        'guard'     => 'web',\n        'passwords' => 'users',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Guards\n    |--------------------------------------------------------------------------\n    |\n    | Next, you may define every authentication guard for your application.\n    | Of course, a great default configuration has been defined for you\n    | here which uses session storage and the Eloquent user provider.\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | Supported: \"session\", \"token\"\n    |\n    */\n\n    'guards' => [\n        'web' => [\n            'driver'   => 'session',\n            'provider' => 'users',\n        ],\n\n        'api' => [\n            'driver'   => 'token',\n            'provider' => 'users',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Providers\n    |--------------------------------------------------------------------------\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | If you have multiple user tables or models you may configure multiple\n    | sources which represent each model / table. These sources may then\n    | be assigned to any extra authentication guards you have defined.\n    |\n    | Supported: \"database\", \"eloquent\"\n    |\n    */\n\n    'providers' => [\n        'users' => [\n            'driver' => 'eloquent',\n            'model'  => App\\User::class,\n        ],\n\n        // 'users' => [\n        //     'driver' => 'database',\n        //     'table' => 'users',\n        // ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Resetting Passwords\n    |--------------------------------------------------------------------------\n    |\n    | Here you may set the options for resetting passwords including the view\n    | that is your password reset e-mail. You may also set the name of the\n    | table that maintains all of the reset tokens for your application.\n    |\n    | You may specify multiple password reset configurations if you have more\n    | than one user table or model in the application and you want to have\n    | separate password reset settings based on the specific user types.\n    |\n    | The expire time is the number of minutes that the reset token should be\n    | considered valid. This security feature keeps tokens short-lived so\n    | they have less time to be guessed. You may change this as needed.\n    |\n    */\n\n    'passwords' => [\n        'users' => [\n            'provider' => 'users',\n            'email'    => 'auth.emails.password',\n            'table'    => 'password_resets',\n            'expire'   => 60,\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/backpack/base.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Registration Open\n    |--------------------------------------------------------------------------\n    |\n    | Choose whether new users/admins are allowed to register.\n    | This will show the Register button on the login page and allow access to the\n    | Register functions in AuthController.\n    |\n    | By default the registration is open only on localhost.\n    */\n\n    'registration_open' => env('BACKPACK_REGISTRATION_OPEN', env('APP_ENV') === 'local'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Routing\n    |--------------------------------------------------------------------------\n    */\n\n    // The prefix used in all base routes (the 'admin' in admin/dashboard)\n    // You can make sure all your URLs use this prefix by using the backpack_url() helper instead of url()\n    'route_prefix' => 'admin',\n\n    // Set this to false if you would like to use your own AuthController and PasswordController\n    // (you then need to setup your auth routes manually in your routes.php file)\n    'setup_auth_routes' => true,\n\n    // Set this to false if you would like to skip adding the dashboard routes\n    // (you then need to overwrite the login route on your AuthController)\n    'setup_dashboard_routes' => true,\n\n    // Set this to false if you would like to skip adding \"my account\" routes\n    // (you then need to manually define the routes in your web.php)\n    'setup_my_account_routes' => true,\n\n    // Set this to true if you would like to enable email verification for your user model.\n    // Make sure your user model implements the MustVerifyEmail contract and your database\n    // table contains the `email_verified_at` column. Read the following before enabling:\n    // https://backpackforlaravel.com/docs/6.x/base-how-to#enable-email-verification-in-backpack-routes\n    'setup_email_verification_routes' => (env('APP_ENV') === 'local'),\n\n    // When email verification is enabled, automatically add the Verified middleware to Backpack routes?\n    // Set false if you want to use your own Verified middleware in `middleware_class`.\n    'setup_email_verification_middleware' => true,\n\n    // How many times in any given time period should the user be allowed to\n    // request a new verification email?\n    // Defaults to 1,10 - 1 time in 10 minutes.\n    'email_verification_throttle_access' => '3,15',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication\n    |--------------------------------------------------------------------------\n    */\n\n    // Fully qualified namespace of the User model\n    'user_model_fqn' => App\\User::class,\n\n    // The classes for the middleware to check if the visitor is an admin\n    // Can be a single class or an array of clases\n    'middleware_class' => [\n        App\\Http\\Middleware\\CheckIfAdmin::class,\n        \\Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull::class,\n        \\Backpack\\LanguageSwitcher\\Http\\Middleware\\LanguageSwitcherMiddleware::class,\n        // \\Backpack\\CRUD\\app\\Http\\Middleware\\UseBackpackAuthGuardInsteadOfDefaultAuthGuard::class,\n    ],\n\n    // Alias for that middleware\n    'middleware_key' => 'admin',\n    // Note: It's recommended to use the backpack_middleware() helper everywhere, which pulls this key for you.\n\n    // Username column for authentication\n    // The Backpack default is the same as the Laravel default (email)\n    // If you need to switch to username, you also need to create that column in your db\n    'authentication_column'      => 'email',\n    'authentication_column_name' => 'Email',\n\n    // The guard that protects the Backpack admin panel.\n    // If null, the config.auth.defaults.guard value will be used.\n    'guard' => 'backpack',\n\n    // The password reset configuration for Backpack.\n    // If null, the config.auth.defaults.passwords value will be used.\n    'passwords' => 'backpack',\n\n    // What kind of avatar will you like to show to the user?\n    // Default: gravatar (automatically use the gravatar for his email)\n    // Other options:\n    // - placehold (generic image with his first letter)\n    // - example_method_name (specify the method on the User model that returns the URL)\n    'avatar_type' => 'gravatar',\n\n    /*\n    |--------------------------------------------------------------------------\n    | File System\n    |--------------------------------------------------------------------------\n    */\n\n    // Backpack\\Base sets up its own filesystem disk, just like you would by\n    // adding an entry to your config/filesystems.php. It points to the root\n    // of your project and it's used throughout all Backpack packages.\n    //\n    // You can rename this disk here. Default: root\n    'root_disk_name' => 'root',\n];\n"
  },
  {
    "path": "config/backpack/crud.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Backpack\\CRUD preferences\n    |--------------------------------------------------------------------------\n    */\n\n    // --------------------------\n    // Default operation settings\n    // --------------------------\n    'operations' => [\n\n        /*\n         * List Operation\n         */\n        'list' => [\n            // Define the size/looks of the content div for all CRUDs\n            // To override per view use $this->crud->setListContentClass('class-string')\n            'contentClass' => 'col-md-12',\n\n            // enable the datatables-responsive plugin, which hides columns if they don't fit?\n            // if not, a horizontal scrollbar will be shown instead\n            'responsiveTable' => true,\n\n            // stores pagination and filters in localStorage for two hours\n            // whenever the user tries to see that page, backpack loads the previous pagination and filtration\n            'persistentTable' => true,\n\n            // How many items should be shown by default by the Datatable?\n            // This value can be overwritten on a specific CRUD by calling\n            // $this->crud->setDefaultPageLength(50);\n            'defaultPageLength' => 10,\n\n            // A 1D array of options which will be used for both the displayed option and the value, or\n            // A 2D array in which the first array is used to define the value options and the second array the displayed options\n            // If a 2D array is used, strings in the right hand array will be automatically run through trans()\n            'pageLengthMenu' => [[10, 25, 50, 100, -1], [10, 25, 50, 100, 'backpack::crud.all']],\n\n            // How important is it for the action buttons to be visible?\n            // - 0 - most important\n            // - 1 - as important as bulk buttons\n            // - 2-3 - more important than the rest of the columns\n            // - 4 - less important than most columns\n            'actionsColumnPriority' => 1,\n        ],\n\n        /*\n         * Create Operation\n         */\n        'create' => [\n            // Define the size/looks of the content div for all CRUDs\n            // To override per view use $this->crud->setCreateContentClass('class-string')\n            'contentClass' => 'col-md-8 bold-labels',\n\n            // When using tabbed forms (create & update), what kind of tabs would you like?\n            'tabsType' => 'horizontal', //options: horizontal, vertical\n\n            // How would you like the validation errors to be shown?\n            'groupedErrors' => true,\n            'inlineErrors'  => true,\n\n            // when the page loads, put the cursor on the first input?\n            'autoFocusOnFirstField' => true,\n\n            // Where do you want to redirect the user by default, save?\n            // options: save_and_back, save_and_edit, save_and_new\n            'defaultSaveAction' => 'save_and_back',\n\n            // When the user chooses \"save and back\" or \"save and new\", show a bubble\n            // for the fact that the default save action has been changed?\n            'showSaveActionChange' => true, //options: true, false\n        ],\n\n        /*\n         * Update Operation\n         */\n        'update' => [\n            // Define the size/looks of the content div for all CRUDs\n            // To override per view use $this->crud->setEditContentClass('class-string')\n            'contentClass'   => 'col-md-8 bold-labels',\n\n            // When using tabbed forms (create & update), what kind of tabs would you like?\n            'tabsType' => 'horizontal', //options: horizontal, vertical\n\n            // How would you like the validation errors to be shown?\n            'groupedErrors' => true,\n            'inlineErrors'  => true,\n\n            // when the page loads, put the cursor on the first input?\n            'autoFocusOnFirstField' => true,\n\n            // Where do you want to redirect the user by default, save?\n            // options: save_and_back, save_and_edit, save_and_new\n            'defaultSaveAction' => 'save_and_back',\n\n            // When the user chooses \"save and back\" or \"save and new\", show a bubble\n            // for the fact that the default save action has been changed?\n            'showSaveActionChange' => true, //options: true, false\n        ],\n\n        /*\n         * Show Operation\n         */\n        'show' => [\n            // Define the size/looks of the content div for all CRUDs\n            // To override per Controller use $this->crud->setShowContentClass('class-string')\n            'contentClass' => 'col-md-8',\n        ],\n\n        /*\n         * Reorder Operation\n         */\n        'reorder' => [\n            // Define the size/looks of the content div for all CRUDs\n            // To override per Controller use $this->crud->setReorderContentClass('class-string')\n            'contentClass'   => 'col-md-8 col-md-offset-2',\n        ],\n\n        /*\n         * Revise Operation\n         */\n        'revise' => [\n            // Define the size/looks of the content div for all CRUDs\n            // To override per view use $this->crud->set('revise.timelineContentClass')\n            'timelineContentClass' => 'col-md-11',\n        ],\n\n    ],\n\n    /*\n    |-------------------\n    | TRANSLATABLE CRUDS\n    |-------------------\n    */\n\n    'show_translatable_field_icon'     => true,\n    'translatable_field_icon_position' => 'right', // left or right\n\n    'locales' => [\n        // \"af_NA\" => \"Afrikaans (Namibia)\",\n        // \"af_ZA\" => \"Afrikaans (South Africa)\",\n        // \"af\" => \"Afrikaans\",\n        // \"ak_GH\" => \"Akan (Ghana)\",\n        // \"ak\" => \"Akan\",\n        // \"sq_AL\" => \"Albanian (Albania)\",\n        // \"sq\" => \"Albanian\",\n        // \"am_ET\" => \"Amharic (Ethiopia)\",\n        // \"am\" => \"Amharic\",\n        // \"ar_DZ\" => \"Arabic (Algeria)\",\n        // \"ar_BH\" => \"Arabic (Bahrain)\",\n        // \"ar_EG\" => \"Arabic (Egypt)\",\n        // \"ar_IQ\" => \"Arabic (Iraq)\",\n        // \"ar_JO\" => \"Arabic (Jordan)\",\n        // \"ar_KW\" => \"Arabic (Kuwait)\",\n        // \"ar_LB\" => \"Arabic (Lebanon)\",\n        // \"ar_LY\" => \"Arabic (Libya)\",\n        // \"ar_MA\" => \"Arabic (Morocco)\",\n        // \"ar_OM\" => \"Arabic (Oman)\",\n        // \"ar_QA\" => \"Arabic (Qatar)\",\n        // \"ar_SA\" => \"Arabic (Saudi Arabia)\",\n        // \"ar_SD\" => \"Arabic (Sudan)\",\n        // \"ar_SY\" => \"Arabic (Syria)\",\n        // \"ar_TN\" => \"Arabic (Tunisia)\",\n        // \"ar_AE\" => \"Arabic (United Arab Emirates)\",\n        // \"ar_YE\" => \"Arabic (Yemen)\",\n        // \"ar\" => \"Arabic\",\n        // \"hy_AM\" => \"Armenian (Armenia)\",\n        // \"hy\" => \"Armenian\",\n        // \"as_IN\" => \"Assamese (India)\",\n        // \"as\" => \"Assamese\",\n        // \"asa_TZ\" => \"Asu (Tanzania)\",\n        // \"asa\" => \"Asu\",\n        // \"az_Cyrl\" => \"Azerbaijani (Cyrillic)\",\n        // \"az_Cyrl_AZ\" => \"Azerbaijani (Cyrillic, Azerbaijan)\",\n        // \"az_Latn\" => \"Azerbaijani (Latin)\",\n        // \"az_Latn_AZ\" => \"Azerbaijani (Latin, Azerbaijan)\",\n        // \"az\" => \"Azerbaijani\",\n        // \"bm_ML\" => \"Bambara (Mali)\",\n        // \"bm\" => \"Bambara\",\n        // \"eu_ES\" => \"Basque (Spain)\",\n        // \"eu\" => \"Basque\",\n        // \"be_BY\" => \"Belarusian (Belarus)\",\n        // \"be\" => \"Belarusian\",\n        // \"bem_ZM\" => \"Bemba (Zambia)\",\n        // \"bem\" => \"Bemba\",\n        // \"bez_TZ\" => \"Bena (Tanzania)\",\n        // \"bez\" => \"Bena\",\n        // \"bn_BD\" => \"Bengali (Bangladesh)\",\n        // \"bn_IN\" => \"Bengali (India)\",\n        // \"bn\" => \"Bengali\",\n        // \"bs_BA\" => \"Bosnian (Bosnia and Herzegovina)\",\n        // \"bs\" => \"Bosnian\",\n        // \"bg_BG\" => \"Bulgarian (Bulgaria)\",\n        // \"bg\" => \"Bulgarian\",\n        // \"my_MM\" => \"Burmese (Myanmar [Burma])\",\n        // \"my\" => \"Burmese\",\n        // \"ca_ES\" => \"Catalan (Spain)\",\n        // \"ca\" => \"Catalan\",\n        // \"tzm_Latn\" => \"Central Morocco Tamazight (Latin)\",\n        // \"tzm_Latn_MA\" => \"Central Morocco Tamazight (Latin, Morocco)\",\n        // \"tzm\" => \"Central Morocco Tamazight\",\n        // \"chr_US\" => \"Cherokee (United States)\",\n        // \"chr\" => \"Cherokee\",\n        // \"cgg_UG\" => \"Chiga (Uganda)\",\n        // \"cgg\" => \"Chiga\",\n        // \"zh_Hans\" => \"Chinese (Simplified Han)\",\n        // \"zh_Hans_CN\" => \"Chinese (Simplified Han, China)\",\n        // \"zh_Hans_HK\" => \"Chinese (Simplified Han, Hong Kong SAR China)\",\n        // \"zh_Hans_MO\" => \"Chinese (Simplified Han, Macau SAR China)\",\n        // \"zh_Hans_SG\" => \"Chinese (Simplified Han, Singapore)\",\n        // \"zh_Hant\" => \"Chinese (Traditional Han)\",\n        // \"zh_Hant_HK\" => \"Chinese (Traditional Han, Hong Kong SAR China)\",\n        // \"zh_Hant_MO\" => \"Chinese (Traditional Han, Macau SAR China)\",\n        // \"zh_Hant_TW\" => \"Chinese (Traditional Han, Taiwan)\",\n        // \"zh\" => \"Chinese\",\n        // \"kw_GB\" => \"Cornish (United Kingdom)\",\n        // \"kw\" => \"Cornish\",\n        // \"hr_HR\" => \"Croatian (Croatia)\",\n        // \"hr\" => \"Croatian\",\n        // \"cs_CZ\" => \"Czech (Czech Republic)\",\n        // \"cs\" => \"Czech\",\n        // \"da_DK\" => \"Danish (Denmark)\",\n        // \"da\" => \"Danish\",\n        // \"nl_BE\" => \"Dutch (Belgium)\",\n        // \"nl_NL\" => \"Dutch (Netherlands)\",\n        // \"nl\" => \"Dutch\",\n        // \"ebu_KE\" => \"Embu (Kenya)\",\n        // \"ebu\" => \"Embu\",\n        // \"en_AS\" => \"English (American Samoa)\",\n        // \"en_AU\" => \"English (Australia)\",\n        // \"en_BE\" => \"English (Belgium)\",\n        // \"en_BZ\" => \"English (Belize)\",\n        // \"en_BW\" => \"English (Botswana)\",\n        // \"en_CA\" => \"English (Canada)\",\n        // \"en_GU\" => \"English (Guam)\",\n        // \"en_HK\" => \"English (Hong Kong SAR China)\",\n        // \"en_IN\" => \"English (India)\",\n        // \"en_IE\" => \"English (Ireland)\",\n        // \"en_JM\" => \"English (Jamaica)\",\n        // \"en_MT\" => \"English (Malta)\",\n        // \"en_MH\" => \"English (Marshall Islands)\",\n        // \"en_MU\" => \"English (Mauritius)\",\n        // \"en_NA\" => \"English (Namibia)\",\n        // \"en_NZ\" => \"English (New Zealand)\",\n        // \"en_MP\" => \"English (Northern Mariana Islands)\",\n        // \"en_PK\" => \"English (Pakistan)\",\n        // \"en_PH\" => \"English (Philippines)\",\n        // \"en_SG\" => \"English (Singapore)\",\n        // \"en_ZA\" => \"English (South Africa)\",\n        // \"en_TT\" => \"English (Trinidad and Tobago)\",\n        // \"en_UM\" => \"English (U.S. Minor Outlying Islands)\",\n        // \"en_VI\" => \"English (U.S. Virgin Islands)\",\n        // \"en_GB\" => \"English (United Kingdom)\",\n        // \"en_US\" => \"English (United States)\",\n        // \"en_ZW\" => \"English (Zimbabwe)\",\n        'en' => 'English',\n        // \"eo\" => \"Esperanto\",\n        // \"et_EE\" => \"Estonian (Estonia)\",\n        // \"et\" => \"Estonian\",\n        // \"ee_GH\" => \"Ewe (Ghana)\",\n        // \"ee_TG\" => \"Ewe (Togo)\",\n        // \"ee\" => \"Ewe\",\n        // \"fo_FO\" => \"Faroese (Faroe Islands)\",\n        // \"fo\" => \"Faroese\",\n        // \"fil_PH\" => \"Filipino (Philippines)\",\n        // \"fil\" => \"Filipino\",\n        // \"fi_FI\" => \"Finnish (Finland)\",\n        // \"fi\" => \"Finnish\",\n        // \"fr_BE\" => \"French (Belgium)\",\n        // \"fr_BJ\" => \"French (Benin)\",\n        // \"fr_BF\" => \"French (Burkina Faso)\",\n        // \"fr_BI\" => \"French (Burundi)\",\n        // \"fr_CM\" => \"French (Cameroon)\",\n        // \"fr_CA\" => \"French (Canada)\",\n        // \"fr_CF\" => \"French (Central African Republic)\",\n        // \"fr_TD\" => \"French (Chad)\",\n        // \"fr_KM\" => \"French (Comoros)\",\n        // \"fr_CG\" => \"French (Congo - Brazzaville)\",\n        // \"fr_CD\" => \"French (Congo - Kinshasa)\",\n        // \"fr_CI\" => \"French (Côte d’Ivoire)\",\n        // \"fr_DJ\" => \"French (Djibouti)\",\n        // \"fr_GQ\" => \"French (Equatorial Guinea)\",\n        // \"fr_FR\" => \"French (France)\",\n        // \"fr_GA\" => \"French (Gabon)\",\n        // \"fr_GP\" => \"French (Guadeloupe)\",\n        // \"fr_GN\" => \"French (Guinea)\",\n        // \"fr_LU\" => \"French (Luxembourg)\",\n        // \"fr_MG\" => \"French (Madagascar)\",\n        // \"fr_ML\" => \"French (Mali)\",\n        // \"fr_MQ\" => \"French (Martinique)\",\n        // \"fr_MC\" => \"French (Monaco)\",\n        // \"fr_NE\" => \"French (Niger)\",\n        // \"fr_RW\" => \"French (Rwanda)\",\n        // \"fr_RE\" => \"French (Réunion)\",\n        // \"fr_BL\" => \"French (Saint Barthélemy)\",\n        // \"fr_MF\" => \"French (Saint Martin)\",\n        // \"fr_SN\" => \"French (Senegal)\",\n        // \"fr_CH\" => \"French (Switzerland)\",\n        // \"fr_TG\" => \"French (Togo)\",\n        'fr' => 'French',\n        // \"ff_SN\" => \"Fulah (Senegal)\",\n        // \"ff\" => \"Fulah\",\n        // \"gl_ES\" => \"Galician (Spain)\",\n        // \"gl\" => \"Galician\",\n        // \"lg_UG\" => \"Ganda (Uganda)\",\n        // \"lg\" => \"Ganda\",\n        // \"ka_GE\" => \"Georgian (Georgia)\",\n        // \"ka\" => \"Georgian\",\n        // \"de_AT\" => \"German (Austria)\",\n        // \"de_BE\" => \"German (Belgium)\",\n        // \"de_DE\" => \"German (Germany)\",\n        // \"de_LI\" => \"German (Liechtenstein)\",\n        // \"de_LU\" => \"German (Luxembourg)\",\n        // \"de_CH\" => \"German (Switzerland)\",\n        // \"de\" => \"German\",\n        // \"el_CY\" => \"Greek (Cyprus)\",\n        // \"el_GR\" => \"Greek (Greece)\",\n        // \"el\" => \"Greek\",\n        // \"gu_IN\" => \"Gujarati (India)\",\n        // \"gu\" => \"Gujarati\",\n        // \"guz_KE\" => \"Gusii (Kenya)\",\n        // \"guz\" => \"Gusii\",\n        // \"ha_Latn\" => \"Hausa (Latin)\",\n        // \"ha_Latn_GH\" => \"Hausa (Latin, Ghana)\",\n        // \"ha_Latn_NE\" => \"Hausa (Latin, Niger)\",\n        // \"ha_Latn_NG\" => \"Hausa (Latin, Nigeria)\",\n        // \"ha\" => \"Hausa\",\n        // \"haw_US\" => \"Hawaiian (United States)\",\n        // \"haw\" => \"Hawaiian\",\n        // \"he_IL\" => \"Hebrew (Israel)\",\n        // \"he\" => \"Hebrew\",\n        // \"hi_IN\" => \"Hindi (India)\",\n        // \"hi\" => \"Hindi\",\n        // \"hu_HU\" => \"Hungarian (Hungary)\",\n        // \"hu\" => \"Hungarian\",\n        // \"is_IS\" => \"Icelandic (Iceland)\",\n        // \"is\" => \"Icelandic\",\n        // \"ig_NG\" => \"Igbo (Nigeria)\",\n        // \"ig\" => \"Igbo\",\n        // \"id_ID\" => \"Indonesian (Indonesia)\",\n        // \"id\" => \"Indonesian\",\n        // \"ga_IE\" => \"Irish (Ireland)\",\n        // \"ga\" => \"Irish\",\n        // \"it_IT\" => \"Italian (Italy)\",\n        // \"it_CH\" => \"Italian (Switzerland)\",\n        // 'it' => 'Italian',\n        // \"ja_JP\" => \"Japanese (Japan)\",\n        // \"ja\" => \"Japanese\",\n        // \"kea_CV\" => \"Kabuverdianu (Cape Verde)\",\n        // \"kea\" => \"Kabuverdianu\",\n        // \"kab_DZ\" => \"Kabyle (Algeria)\",\n        // \"kab\" => \"Kabyle\",\n        // \"kl_GL\" => \"Kalaallisut (Greenland)\",\n        // \"kl\" => \"Kalaallisut\",\n        // \"kln_KE\" => \"Kalenjin (Kenya)\",\n        // \"kln\" => \"Kalenjin\",\n        // \"kam_KE\" => \"Kamba (Kenya)\",\n        // \"kam\" => \"Kamba\",\n        // \"kn_IN\" => \"Kannada (India)\",\n        // \"kn\" => \"Kannada\",\n        // \"kk_Cyrl\" => \"Kazakh (Cyrillic)\",\n        // \"kk_Cyrl_KZ\" => \"Kazakh (Cyrillic, Kazakhstan)\",\n        // \"kk\" => \"Kazakh\",\n        // \"km_KH\" => \"Khmer (Cambodia)\",\n        // \"km\" => \"Khmer\",\n        // \"ki_KE\" => \"Kikuyu (Kenya)\",\n        // \"ki\" => \"Kikuyu\",\n        // \"rw_RW\" => \"Kinyarwanda (Rwanda)\",\n        // \"rw\" => \"Kinyarwanda\",\n        // \"kok_IN\" => \"Konkani (India)\",\n        // \"kok\" => \"Konkani\",\n        // \"ko_KR\" => \"Korean (South Korea)\",\n        // \"ko\" => \"Korean\",\n        // \"khq_ML\" => \"Koyra Chiini (Mali)\",\n        // \"khq\" => \"Koyra Chiini\",\n        // \"ses_ML\" => \"Koyraboro Senni (Mali)\",\n        // \"ses\" => \"Koyraboro Senni\",\n        // \"lag_TZ\" => \"Langi (Tanzania)\",\n        // \"lag\" => \"Langi\",\n        // \"lv_LV\" => \"Latvian (Latvia)\",\n        // \"lv\" => \"Latvian\",\n        // \"lt_LT\" => \"Lithuanian (Lithuania)\",\n        // \"lt\" => \"Lithuanian\",\n        // \"luo_KE\" => \"Luo (Kenya)\",\n        // \"luo\" => \"Luo\",\n        // \"luy_KE\" => \"Luyia (Kenya)\",\n        // \"luy\" => \"Luyia\",\n        // \"mk_MK\" => \"Macedonian (Macedonia)\",\n        // \"mk\" => \"Macedonian\",\n        // \"jmc_TZ\" => \"Machame (Tanzania)\",\n        // \"jmc\" => \"Machame\",\n        // \"kde_TZ\" => \"Makonde (Tanzania)\",\n        // \"kde\" => \"Makonde\",\n        // \"mg_MG\" => \"Malagasy (Madagascar)\",\n        // \"mg\" => \"Malagasy\",\n        // \"ms_BN\" => \"Malay (Brunei)\",\n        // \"ms_MY\" => \"Malay (Malaysia)\",\n        // \"ms\" => \"Malay\",\n        // \"ml_IN\" => \"Malayalam (India)\",\n        // \"ml\" => \"Malayalam\",\n        // \"mt_MT\" => \"Maltese (Malta)\",\n        // \"mt\" => \"Maltese\",\n        // \"gv_GB\" => \"Manx (United Kingdom)\",\n        // \"gv\" => \"Manx\",\n        // \"mr_IN\" => \"Marathi (India)\",\n        // \"mr\" => \"Marathi\",\n        // \"mas_KE\" => \"Masai (Kenya)\",\n        // \"mas_TZ\" => \"Masai (Tanzania)\",\n        // \"mas\" => \"Masai\",\n        // \"mer_KE\" => \"Meru (Kenya)\",\n        // \"mer\" => \"Meru\",\n        // \"mfe_MU\" => \"Morisyen (Mauritius)\",\n        // \"mfe\" => \"Morisyen\",\n        // \"naq_NA\" => \"Nama (Namibia)\",\n        // \"naq\" => \"Nama\",\n        // \"ne_IN\" => \"Nepali (India)\",\n        // \"ne_NP\" => \"Nepali (Nepal)\",\n        // \"ne\" => \"Nepali\",\n        // \"nd_ZW\" => \"North Ndebele (Zimbabwe)\",\n        // \"nd\" => \"North Ndebele\",\n        // \"nb_NO\" => \"Norwegian Bokmål (Norway)\",\n        // \"nb\" => \"Norwegian Bokmål\",\n        // \"nn_NO\" => \"Norwegian Nynorsk (Norway)\",\n        // \"nn\" => \"Norwegian Nynorsk\",\n        // \"nyn_UG\" => \"Nyankole (Uganda)\",\n        // \"nyn\" => \"Nyankole\",\n        // \"or_IN\" => \"Oriya (India)\",\n        // \"or\" => \"Oriya\",\n        // \"om_ET\" => \"Oromo (Ethiopia)\",\n        // \"om_KE\" => \"Oromo (Kenya)\",\n        // \"om\" => \"Oromo\",\n        // \"ps_AF\" => \"Pashto (Afghanistan)\",\n        // \"ps\" => \"Pashto\",\n        // \"fa_AF\" => \"Persian (Afghanistan)\",\n        // \"fa_IR\" => \"Persian (Iran)\",\n        // \"fa\" => \"Persian\",\n        // \"pl_PL\" => \"Polish (Poland)\",\n        // \"pl\" => \"Polish\",\n        // \"pt_BR\" => \"Portuguese (Brazil)\",\n        // \"pt_GW\" => \"Portuguese (Guinea-Bissau)\",\n        // \"pt_MZ\" => \"Portuguese (Mozambique)\",\n        // \"pt_PT\" => \"Portuguese (Portugal)\",\n        'pt' => 'Portuguese',\n        // \"pa_Arab\" => \"Punjabi (Arabic)\",\n        // \"pa_Arab_PK\" => \"Punjabi (Arabic, Pakistan)\",\n        // \"pa_Guru\" => \"Punjabi (Gurmukhi)\",\n        // \"pa_Guru_IN\" => \"Punjabi (Gurmukhi, India)\",\n        // \"pa\" => \"Punjabi\",\n        // \"ro_MD\" => \"Romanian (Moldova)\",\n        // \"ro_RO\" => \"Romanian (Romania)\",\n        'ro' => 'Romanian',\n        // \"rm_CH\" => \"Romansh (Switzerland)\",\n        // \"rm\" => \"Romansh\",\n        // \"rof_TZ\" => \"Rombo (Tanzania)\",\n        // \"rof\" => \"Rombo\",\n        // \"ru_MD\" => \"Russian (Moldova)\",\n        // \"ru_RU\" => \"Russian (Russia)\",\n        // \"ru_UA\" => \"Russian (Ukraine)\",\n        // \"ru\" => \"Russian\",\n        // \"rwk_TZ\" => \"Rwa (Tanzania)\",\n        // \"rwk\" => \"Rwa\",\n        // \"saq_KE\" => \"Samburu (Kenya)\",\n        // \"saq\" => \"Samburu\",\n        // \"sg_CF\" => \"Sango (Central African Republic)\",\n        // \"sg\" => \"Sango\",\n        // \"seh_MZ\" => \"Sena (Mozambique)\",\n        // \"seh\" => \"Sena\",\n        // \"sr_Cyrl\" => \"Serbian (Cyrillic)\",\n        // \"sr_Cyrl_BA\" => \"Serbian (Cyrillic, Bosnia and Herzegovina)\",\n        // \"sr_Cyrl_ME\" => \"Serbian (Cyrillic, Montenegro)\",\n        // \"sr_Cyrl_RS\" => \"Serbian (Cyrillic, Serbia)\",\n        // \"sr_Latn\" => \"Serbian (Latin)\",\n        // \"sr_Latn_BA\" => \"Serbian (Latin, Bosnia and Herzegovina)\",\n        // \"sr_Latn_ME\" => \"Serbian (Latin, Montenegro)\",\n        // \"sr_Latn_RS\" => \"Serbian (Latin, Serbia)\",\n        // \"sr\" => \"Serbian\",\n        // \"sn_ZW\" => \"Shona (Zimbabwe)\",\n        // \"sn\" => \"Shona\",\n        // \"ii_CN\" => \"Sichuan Yi (China)\",\n        // \"ii\" => \"Sichuan Yi\",\n        // \"si_LK\" => \"Sinhala (Sri Lanka)\",\n        // \"si\" => \"Sinhala\",\n        // \"sk_SK\" => \"Slovak (Slovakia)\",\n        // \"sk\" => \"Slovak\",\n        // \"sl_SI\" => \"Slovenian (Slovenia)\",\n        // \"sl\" => \"Slovenian\",\n        // \"xog_UG\" => \"Soga (Uganda)\",\n        // \"xog\" => \"Soga\",\n        // \"so_DJ\" => \"Somali (Djibouti)\",\n        // \"so_ET\" => \"Somali (Ethiopia)\",\n        // \"so_KE\" => \"Somali (Kenya)\",\n        // \"so_SO\" => \"Somali (Somalia)\",\n        // \"so\" => \"Somali\",\n        // \"es_AR\" => \"Spanish (Argentina)\",\n        // \"es_BO\" => \"Spanish (Bolivia)\",\n        // \"es_CL\" => \"Spanish (Chile)\",\n        // \"es_CO\" => \"Spanish (Colombia)\",\n        // \"es_CR\" => \"Spanish (Costa Rica)\",\n        // \"es_DO\" => \"Spanish (Dominican Republic)\",\n        // \"es_EC\" => \"Spanish (Ecuador)\",\n        // \"es_SV\" => \"Spanish (El Salvador)\",\n        // \"es_GQ\" => \"Spanish (Equatorial Guinea)\",\n        // \"es_GT\" => \"Spanish (Guatemala)\",\n        // \"es_HN\" => \"Spanish (Honduras)\",\n        // \"es_419\" => \"Spanish (Latin America)\",\n        // \"es_MX\" => \"Spanish (Mexico)\",\n        // \"es_NI\" => \"Spanish (Nicaragua)\",\n        // \"es_PA\" => \"Spanish (Panama)\",\n        // \"es_PY\" => \"Spanish (Paraguay)\",\n        // \"es_PE\" => \"Spanish (Peru)\",\n        // \"es_PR\" => \"Spanish (Puerto Rico)\",\n        // \"es_ES\" => \"Spanish (Spain)\",\n        // \"es_US\" => \"Spanish (United States)\",\n        // \"es_UY\" => \"Spanish (Uruguay)\",\n        // \"es_VE\" => \"Spanish (Venezuela)\",\n        // \"es\" => \"Spanish\",\n        // \"sw_KE\" => \"Swahili (Kenya)\",\n        // \"sw_TZ\" => \"Swahili (Tanzania)\",\n        // \"sw\" => \"Swahili\",\n        // \"sv_FI\" => \"Swedish (Finland)\",\n        // \"sv_SE\" => \"Swedish (Sweden)\",\n        // \"sv\" => \"Swedish\",\n        // \"gsw_CH\" => \"Swiss German (Switzerland)\",\n        // \"gsw\" => \"Swiss German\",\n        // \"shi_Latn\" => \"Tachelhit (Latin)\",\n        // \"shi_Latn_MA\" => \"Tachelhit (Latin, Morocco)\",\n        // \"shi_Tfng\" => \"Tachelhit (Tifinagh)\",\n        // \"shi_Tfng_MA\" => \"Tachelhit (Tifinagh, Morocco)\",\n        // \"shi\" => \"Tachelhit\",\n        // \"dav_KE\" => \"Taita (Kenya)\",\n        // \"dav\" => \"Taita\",\n        // \"ta_IN\" => \"Tamil (India)\",\n        // \"ta_LK\" => \"Tamil (Sri Lanka)\",\n        // \"ta\" => \"Tamil\",\n        // \"te_IN\" => \"Telugu (India)\",\n        // \"te\" => \"Telugu\",\n        // \"teo_KE\" => \"Teso (Kenya)\",\n        // \"teo_UG\" => \"Teso (Uganda)\",\n        // \"teo\" => \"Teso\",\n        // \"th_TH\" => \"Thai (Thailand)\",\n        // \"th\" => \"Thai\",\n        // \"bo_CN\" => \"Tibetan (China)\",\n        // \"bo_IN\" => \"Tibetan (India)\",\n        // \"bo\" => \"Tibetan\",\n        // \"ti_ER\" => \"Tigrinya (Eritrea)\",\n        // \"ti_ET\" => \"Tigrinya (Ethiopia)\",\n        // \"ti\" => \"Tigrinya\",\n        // \"to_TO\" => \"Tonga (Tonga)\",\n        // \"to\" => \"Tonga\",\n        // \"tr_TR\" => \"Turkish (Turkey)\",\n        // \"tr\" => \"Turkish\",\n        // \"uk_UA\" => \"Ukrainian (Ukraine)\",\n        // \"uk\" => \"Ukrainian\",\n        // \"ur_IN\" => \"Urdu (India)\",\n        // \"ur_PK\" => \"Urdu (Pakistan)\",\n        // \"ur\" => \"Urdu\",\n        // \"uz_Arab\" => \"Uzbek (Arabic)\",\n        // \"uz_Arab_AF\" => \"Uzbek (Arabic, Afghanistan)\",\n        // \"uz_Cyrl\" => \"Uzbek (Cyrillic)\",\n        // \"uz_Cyrl_UZ\" => \"Uzbek (Cyrillic, Uzbekistan)\",\n        // \"uz_Latn\" => \"Uzbek (Latin)\",\n        // \"uz_Latn_UZ\" => \"Uzbek (Latin, Uzbekistan)\",\n        // \"uz\" => \"Uzbek\",\n        // \"vi_VN\" => \"Vietnamese (Vietnam)\",\n        // \"vi\" => \"Vietnamese\",\n        // \"vun_TZ\" => \"Vunjo (Tanzania)\",\n        // \"vun\" => \"Vunjo\",\n        // \"cy_GB\" => \"Welsh (United Kingdom)\",\n        // \"cy\" => \"Welsh\",\n        // \"yo_NG\" => \"Yoruba (Nigeria)\",\n        // \"yo\" => \"Yoruba\",\n        // \"zu_ZA\" => \"Zulu (South Africa)\",\n        // \"zu\" => \"Zulu\"\n    ],\n\n];\n"
  },
  {
    "path": "config/backpack/pagemanager.php",
    "content": "<?php\n\nreturn [\n    // Change this class if you wish to extend PageCrudController\n    'admin_controller_class' => 'Backpack\\PageManager\\app\\Http\\Controllers\\Admin\\PageCrudController',\n\n    // Change this class if you wish to extend the Page model\n    'page_model_class' => 'Backpack\\PageManager\\app\\Models\\Page',\n];\n"
  },
  {
    "path": "config/backpack/permissionmanager.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Models\n    |--------------------------------------------------------------------------\n    |\n    | Models used in the User, Role and Permission CRUDs.\n    |\n    */\n\n    'models' => [\n        'user'       => App\\User::class,\n        'permission' => Backpack\\PermissionManager\\app\\Models\\Permission::class,\n        'role'       => Backpack\\PermissionManager\\app\\Models\\Role::class,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Disallow the user interface for creating/updating permissions or roles.\n    |--------------------------------------------------------------------------\n    | Roles and permissions are used in code by their name\n    | - ex: $user->hasPermissionTo('edit articles');\n    |\n    | So after the developer has entered all permissions and roles, the administrator should either:\n    | - not have access to the panels\n    | or\n    | - creating and updating should be disabled\n    */\n\n    'allow_permission_create' => true,\n    'allow_permission_update' => true,\n    'allow_permission_delete' => true,\n    'allow_role_create'       => true,\n    'allow_role_update'       => true,\n    'allow_role_delete'       => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Multiple-guards functionality\n    |--------------------------------------------------------------------------\n    |\n    */\n    'multiple_guards' => false,\n\n];\n"
  },
  {
    "path": "config/backpack/testing.php",
    "content": "<?php\n\nreturn [\n    'controllers_path' => app_path('Http/Controllers'),\n];\n"
  },
  {
    "path": "config/backpack/theme-tabler.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Theme Configuration Values\n    |--------------------------------------------------------------------------\n    |\n    | The file provides extra configs on top of config/backpack/ui.php\n    |\n    | Any value set here will override the ones defined in\n    | config/backpack/ui.php when this theme is in use.\n    |\n    */\n\n    /**\n     * 1st layer of customization.\n     *\n     * Simple pick a layout and let Backpack decide the best look for it.\n     * No extra step is required.\n     *\n     * Possible values: horizontal, horizontal_dark, horizontal_overlap, vertical,\n     * vertical_dark, vertical_transparent (legacy theme), right_vertical, right_vertical_dark, right_vertical_transparent\n     */\n    'layout' => 'horizontal',\n\n    /**\n     * Pick a login page layout.\n     * Possible values: default, illustration, cover.\n     */\n    'auth_layout' => 'default', // default, illustration, cover\n\n    /**\n     * Here you can easily load your own extra css styles.\n     * Note: if you want to customize the style to create your own custom skin colors:\n     *   - make a copy of the file \"vendor/backpack/theme-tabler/resources/assets/css/colors.css\" into your project\n     *   - adjust colors variables as you wish\n     *   - replace \"base_path('vendor/backpack/theme-tabler/resources/assets/css/backpack-color-palette.css'),\" with the path to the file created above\n     *   - boom!\n     */\n    'styles' => [\n        base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/backpack-color-palette.css'),\n        base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/glass.css'),\n        base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/vertical-lines-background.css'),\n        base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/pinstripe-background.css'),\n        base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/paper-background.css'),\n        base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/dotted-background.css'),\n        base_path('vendor/backpack/theme-tabler/resources/assets/css/skins/fuzzy-background.css'),\n    ],\n\n    /**\n     * 2nd Layer of customization.\n     *\n     * If you need to further customize the way your panel looks,\n     * these options will help you achieve that.\n     */\n    'options' => [\n        /**\n         * The available color modes.\n         */\n        'colorModes' => [\n            'system' => 'la-desktop',\n            'light'  => 'la-sun',\n            'dark'   => 'la-moon',\n        ],\n\n        /**\n         * The color mode used by default.\n         */\n        'defaultColorMode' => 'system', // system, light, dark\n\n        /**\n         * When true, a switch is displayed to let admins choose their favorite theme mode.\n         * When false, the theme will only use the \"defaultColorMode\" set above.\n         * In case \"defaultColorMode\" is null, system is the default.\n         */\n        'showColorModeSwitcher' => true,\n\n        /**\n         * Fix the top-header component (present in \"vertical_transparent\") and the menu when the layout type is set as \"horizontal\".\n         * This value is skipped when the layout type is horizontal-overlap, using false as default.\n         */\n        'useStickyHeader' => false,\n\n        /**\n         * When true, the content area will take the whole screen width.\n         */\n        'useFluidContainers' => true,\n\n        /**\n         * When true, the sidebar content for vertical layouts will not scroll with the rest of the content.\n         */\n        'sidebarFixed' => false,\n\n        /**\n         * When true, horizontal layouts will display the classic top bar on top to free some space when multiple nav items are used.\n         */\n        'doubleTopBarInHorizontalLayouts' => false,\n\n        /**\n         * When true, the password input will have a toggle button to show/hide the password.\n         */\n        'showPasswordVisibilityToggler' => false,\n    ],\n\n    /**\n     * 3rd Layer of customization.\n     *\n     * In case the first two steps were not enough, here you have full control over\n     * the classes that make up the look of your panel.\n     */\n    'classes' => [\n        /**\n         * Use this to pass classes to the <body> HTML element, on all pages.\n         */\n        'body' => null,\n\n        /**\n         * For background colors use:\n         * bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, bg-info, bg-blue, bg-light-blue,\n         * bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan, bg-white.\n         *\n         * For links to be visible on different background colors use: \"navbar-dark\", \"navbar-light\".\n         */\n        'topHeader' => null,\n\n        /**\n         * Applies only for Vertical Menu Layout\n         * For standard sidebar look (transparent):\n         *      - Remove \"navbar-dark/light\"\n         *      - Remove \"navbar-light/dark\" from 'classes.topHeader' and instead use \"bg-light\"\n         * You can also add a background class like bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success,\n         * bg-info, bg-blue, bg-light-blue, bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan.\n         */\n        'sidebar' => null,\n\n        /**\n         * Used in the top container menu when the layout is of horizontal type.\n         */\n        'menuHorizontalContainer' => null,\n\n        /**\n         * Used in the top menu content when the layout is of horizontal type.\n         */\n        'menuHorizontalContent' => null,\n\n        /**\n         * Make transparent with footer-transparent.\n         * Hide it with d-none.\n         *\n         * Change background color with bg-dark, bg-primary, bg-secondary, bg-danger, bg-warning, bg-success, bg-info,\n         * bg-blue, bg-light-blue, bg-indigo, bg-purple, bg-pink, bg-red, bg-orange, bg-yellow, bg-green, bg-teal, bg-cyan, bg-white.\n         */\n        'footer' => null,\n\n        /**\n         * Use this to pass classes to the table displayed in List Operation\n         * It defaults to: \"table table-striped table-hover nowrap rounded card-table table-vcenter card-table shadow-xs border-xs\".\n         */\n        'table' => null,\n\n        /**\n         * Use this to pass classes to the table wrapper component displayed in List Operation.\n         */\n        'tableWrapper' => null,\n    ],\n\n/**\n * 4th Layer of customization.\n *\n * Alright, if nothing so far met your need, then you still have an easy way to build\n * a custom layout using the already existing components of this theme.\n *\n * 1. Create a new blade file in resources/views/layouts/your-custom-layout.blade.php\n * 2. Replace the value of layout on this file with \"your-custom-layout\"\n * 3. Customize the blade and place components such as sidebar, header, top-bar, where you need them!\n */\n];\n"
  },
  {
    "path": "config/backpack/ui.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Theme (User Interface)\n    |--------------------------------------------------------------------------\n    */\n    // Change the view namespace in order to load a different theme than the one Backpack provides.\n    // You can create child themes yourself, by creating a view folder anywhere in your resources/views\n    // and choosing that view_namespace instead of the default one. Backpack will load a file from there\n    // if it exists, otherwise it will load it from the fallback namespace.\n\n    'view_namespace'          => 'backpack.theme-tabler::',\n    'view_namespace_fallback' => 'backpack.theme-tabler::',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Look & feel customizations\n    |--------------------------------------------------------------------------\n    |\n    | To make the UI feel yours.\n    |\n    | Note that values set here might be overriden by theme config files\n    | (eg. config/backpack/theme-tabler.php) when that theme is in use.\n    |\n    */\n\n    // Date & Datetime Format Syntax: https://carbon.nesbot.com/docs/#api-localization\n    'default_date_format'     => 'D MMM YYYY',\n    'default_datetime_format' => 'D MMM YYYY, HH:mm',\n\n    // Direction, according to language\n    // (left-to-right vs right-to-left)\n    'html_direction' => 'ltr',\n\n    // ----\n    // HEAD\n    // ----\n\n    // Project name - shown in the window title\n    'project_name' => 'Backpack Admin Panel',\n\n    // Content of the HTML meta robots tag to prevent indexing and link following\n    'meta_robots_content' => 'noindex, nofollow',\n\n    // ------\n    // HEADER\n    // ------\n\n    // When clicking on the admin panel's top-left logo/name,\n    // where should the user be redirected?\n    // The string below will be passed through the url() helper.\n    // - default: '' (project root)\n    // - alternative: 'admin' (the admin's dashboard)\n    'home_link' => '',\n\n    // Menu logo. You can replace this with an <img> tag if you have a logo.\n    'project_logo'   => '<img src=\"/assets/img/backpack_logo.svg\" class=\"project-logo\" style=\"width: 142px; height: auto;\" alt=\"Backpack for Laravel\">',\n\n    // Show / hide breadcrumbs on admin panel pages.\n    'breadcrumbs' => true,\n\n    // ------\n    // FOOTER\n    // ------\n\n    // Developer or company name. Shown in footer.\n    'developer_name' => 'Cristian Tabacitu',\n\n    // Developer website. Link in footer. Type false if you want to hide it.\n    'developer_link' => 'http://tabacitu.ro',\n\n    // Show powered by Laravel Backpack in the footer? true/false\n    'show_powered_by' => true,\n\n    // ---------\n    // DASHBOARD\n    // ---------\n\n    // Show \"Getting Started with Backpack\" info block?\n    'show_getting_started' => env('APP_ENV') == 'local',\n\n    // -------------\n    // GLOBAL STYLES\n    // -------------\n\n    // CSS files that are loaded in all pages, using Laravel's asset() helper\n    'styles' => [\n        // 'styles/example.css',\n        // 'https://some-cdn.com/example.css',\n    ],\n\n    // CSS files that are loaded in all pages, using Laravel's mix() helper\n    'mix_styles' => [ // file_path => manifest_directory_path\n        // 'css/app.css' => '',\n    ],\n\n    // CSS files that are loaded in all pages, using Laravel's @vite() helper\n    // Please note that support for Vite was added in Laravel 9.19. Earlier versions are not able to use this feature.\n    'vite_styles' => [ // resource file_path\n        // 'resources/css/app.css' => '',\n    ],\n\n    // --------------\n    // GLOBAL SCRIPTS\n    // --------------\n\n    // JS files that are loaded in all pages, using Laravel's asset() helper\n    'scripts' => [\n        // 'js/example.js',\n        // 'https://unpkg.com/vue@2.4.4/dist/vue.min.js',\n        // 'https://unpkg.com/react@16/umd/react.production.min.js',\n        // 'https://unpkg.com/react-dom@16/umd/react-dom.production.min.js',\n    ],\n\n    // JS files that are loaded in all pages, using Laravel's mix() helper\n    'mix_scripts' => [ // file_path => manifest_directory_path\n        // 'js/app.js' => '',\n    ],\n\n    // JS files that are loaded in all pages, using Laravel's @vite() helper\n    'vite_scripts' => [ // resource file_path\n        // 'resources/js/app.js',\n    ],\n\n];\n"
  },
  {
    "path": "config/backup.php",
    "content": "<?php\n\nreturn [\n\n    'backup' => [\n\n        /* --------------------------------------\n         * Backpack\\BackupManager Command Flags\n         * --------------------------------------\n         * These flags will be attached every time a backup is triggered\n         * by Backpack\\BackupManager. By default only notifications are disabled.\n         *\n         * https://docs.spatie.be/laravel-backup/v4/taking-backups/overview\n         * --only-to-disk=name-of-your-disk\n         * --only-db\n         * --only-files\n         * --disable-notifications\n         */\n        'backpack_flags' => [\n            '--disable-notifications'=> true,\n        ],\n\n        /*\n         * The name of this application. You can use this name to monitor\n         * the backups.\n         */\n        'name' => env('APP_NAME', 'laravel-backup'),\n\n        'source' => [\n\n            'files' => [\n\n                /*\n                 * The list of directories and files that will be included in the backup.\n                 */\n                'include' => [\n                    base_path(),\n                ],\n\n                /*\n                 * These directories and files will be excluded from the backup.\n                 *\n                 * Directories used by the backup process will automatically be excluded.\n                 */\n                'exclude' => [\n                    base_path('vendor'),\n                    base_path('node_modules'),\n                ],\n\n                /*\n                 * Determines if symlinks should be followed.\n                 */\n                'follow_links' => false,\n\n                /*\n                 * Determines if it should avoid unreadable folders.\n                 */\n                'ignore_unreadable_directories' => false,\n\n                /*\n                 * This path is used to make directories in resulting zip-file relative\n                 * Set to `null` to include complete absolute path\n                 * Example: base_path()\n                 */\n                'relative_path' => null,\n            ],\n\n            /*\n             * The names of the connections to the databases that should be backed up\n             * MySQL, PostgreSQL, SQLite and Mongo databases are supported.\n             *\n             * The content of the database dump may be customized for each connection\n             * by adding a 'dump' key to the connection settings in config/database.php.\n             * E.g.\n             * 'mysql' => [\n             *       ...\n             *      'dump' => [\n             *           'excludeTables' => [\n             *                'table_to_exclude_from_backup',\n             *                'another_table_to_exclude'\n             *            ]\n             *       ],\n             * ],\n             *\n             * If you are using only InnoDB tables on a MySQL server, you can\n             * also supply the useSingleTransaction option to avoid table locking.\n             *\n             * E.g.\n             * 'mysql' => [\n             *       ...\n             *      'dump' => [\n             *           'useSingleTransaction' => true,\n             *       ],\n             * ],\n             *\n             * For a complete list of available customization options, see https://github.com/spatie/db-dumper\n             */\n            'databases' => [\n                'mysql',\n            ],\n        ],\n\n        /*\n         * The database dump can be compressed to decrease diskspace usage.\n         *\n         * Out of the box Laravel-backup supplies\n         * Spatie\\DbDumper\\Compressors\\GzipCompressor::class.\n         *\n         * You can also create custom compressor. More info on that here:\n         * https://github.com/spatie/db-dumper#using-compression\n         *\n         * If you do not want any compressor at all, set it to null.\n         */\n        'database_dump_compressor' => null,\n\n        /*\n         * The file extension used for the database dump files.\n         *\n         * If not specified, the file extension will be .archive for MongoDB and .sql for all other databases\n         * The file extension should be specified without a leading .\n         */\n        'database_dump_file_extension' => '',\n\n        'destination' => [\n            /*\n             * The compression algorithm to be used for creating the zip archive.\n             *\n             * If backing up only database, you may choose gzip compression for db dump and no compression at zip.\n             *\n             * Some common algorithms are listed below:\n             * ZipArchive::CM_STORE (no compression at all; set 0 as compression level)\n             * ZipArchive::CM_DEFAULT\n             * ZipArchive::CM_DEFLATE\n             * ZipArchive::CM_BZIP2\n             * ZipArchive::CM_XZ\n             *\n             * For more check https://www.php.net/manual/zip.constants.php and confirm it's supported by your system.\n             */\n            'compression_method' => ZipArchive::CM_DEFAULT,\n\n            /*\n             * The compression level corresponding to the used algorithm; an integer between 0 and 9.\n             *\n             * Check supported levels for the chosen algorithm, usually 1 means the fastest and weakest compression,\n             * while 9 the slowest and strongest one.\n             *\n             * Setting of 0 for some algorithms may switch to the strongest compression.\n             */\n            'compression_level' => 9,\n\n            /*\n             * The filename prefix used for the backup zip file.\n             */\n            'filename_prefix' => '',\n\n            /*\n             * The disk names on which the backups will be stored.\n             */\n            'disks' => [\n                'local',\n            ],\n        ],\n\n        /*\n         * The directory where the temporary files will be stored.\n         */\n        'temporary_directory' => storage_path('app/backup-temp'),\n\n        /*\n         * The password to be used for archive encryption.\n         * Set to `null` to disable encryption.\n         */\n        'password' => env('BACKUP_ARCHIVE_PASSWORD'),\n\n        /*\n         * The encryption algorithm to be used for archive encryption.\n         * You can set it to `null` or `false` to disable encryption.\n         *\n         * When set to 'default', we'll use ZipArchive::EM_AES_256 if it is\n         * available on your system.\n         */\n        'encryption' => 'default',\n    ],\n\n    /*\n     * You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'.\n     * For Slack you need to install laravel/slack-notification-channel.\n     *\n     * You can also use your own notification classes, just make sure the class is named after one of\n     * the `Spatie\\Backup\\Notifications\\Notifications` classes.\n     */\n    'notifications' => [\n\n        'notifications' => [\n            Spatie\\Backup\\Notifications\\Notifications\\BackupHasFailedNotification::class         => [],\n            Spatie\\Backup\\Notifications\\Notifications\\UnhealthyBackupWasFoundNotification::class => [],\n            Spatie\\Backup\\Notifications\\Notifications\\CleanupHasFailedNotification::class        => [],\n            Spatie\\Backup\\Notifications\\Notifications\\BackupWasSuccessfulNotification::class     => [],\n            Spatie\\Backup\\Notifications\\Notifications\\HealthyBackupWasFoundNotification::class   => [],\n            Spatie\\Backup\\Notifications\\Notifications\\CleanupWasSuccessfulNotification::class    => [],\n        ],\n\n        /*\n         * Here you can specify the notifiable to which the notifications should be sent. The default\n         * notifiable will use the variables specified in this config file.\n         */\n        'notifiable' => Spatie\\Backup\\Notifications\\Notifiable::class,\n\n        'mail' => [\n            'to' => 'your@example.com',\n\n            'from' => [\n                'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),\n                'name'    => env('MAIL_FROM_NAME', 'Example'),\n            ],\n        ],\n\n        'slack' => [\n            'webhook_url' => '',\n\n            /*\n             * If this is set to null the default channel of the webhook will be used.\n             */\n            'channel' => null,\n\n            'username' => null,\n\n            'icon' => null,\n\n        ],\n\n        'discord' => [\n            'webhook_url' => '',\n\n            'username' => '',\n\n            'avatar_url' => '',\n        ],\n    ],\n\n    /*\n     * Here you can specify which backups should be monitored.\n     * If a backup does not meet the specified requirements the\n     * UnHealthyBackupWasFound event will be fired.\n     */\n    'monitor_backups' => [\n        [\n            'name'          => env('APP_NAME', 'laravel-backup'),\n            'disks'         => ['local'],\n            'health_checks' => [\n                Spatie\\Backup\\Tasks\\Monitor\\HealthChecks\\MaximumAgeInDays::class          => 1,\n                Spatie\\Backup\\Tasks\\Monitor\\HealthChecks\\MaximumStorageInMegabytes::class => 5000,\n            ],\n        ],\n\n        /*\n        [\n            'name' => 'name of the second app',\n            'disks' => ['local', 's3'],\n            'health_checks' => [\n                \\Spatie\\Backup\\Tasks\\Monitor\\HealthChecks\\MaximumAgeInDays::class => 1,\n                \\Spatie\\Backup\\Tasks\\Monitor\\HealthChecks\\MaximumStorageInMegabytes::class => 5000,\n            ],\n        ],\n        */\n    ],\n\n    'cleanup' => [\n        /*\n         * The strategy that will be used to cleanup old backups. The default strategy\n         * will keep all backups for a certain amount of days. After that period only\n         * a daily backup will be kept. After that period only weekly backups will\n         * be kept and so on.\n         *\n         * No matter how you configure it the default strategy will never\n         * delete the newest backup.\n         */\n        'strategy' => Spatie\\Backup\\Tasks\\Cleanup\\Strategies\\DefaultStrategy::class,\n\n        'default_strategy' => [\n\n            /*\n             * The number of days for which backups must be kept.\n             */\n            'keep_all_backups_for_days' => 7,\n\n            /*\n             * The number of days for which daily backups must be kept.\n             */\n            'keep_daily_backups_for_days' => 16,\n\n            /*\n             * The number of weeks for which one weekly backup must be kept.\n             */\n            'keep_weekly_backups_for_weeks' => 8,\n\n            /*\n             * The number of months for which one monthly backup must be kept.\n             */\n            'keep_monthly_backups_for_months' => 4,\n\n            /*\n             * The number of years for which one yearly backup must be kept.\n             */\n            'keep_yearly_backups_for_years' => 2,\n\n            /*\n             * After cleaning up the backups remove the oldest backup until\n             * this amount of megabytes has been reached.\n             */\n            'delete_oldest_backups_when_using_more_megabytes_than' => 5000,\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/broadcasting.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Broadcaster\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default broadcaster that will be used by the\n    | framework when an event needs to be broadcast. You may set this to\n    | any of the connections defined in the \"connections\" array below.\n    |\n    */\n\n    'default' => env('BROADCAST_DRIVER', 'pusher'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Broadcast Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the broadcast connections that will be used\n    | to broadcast events to other systems or over websockets. Samples of\n    | each available type of connection are provided inside this array.\n    |\n    */\n\n    'connections' => [\n        'pusher' => [\n            'driver'  => 'pusher',\n            'key'     => env('PUSHER_APP_KEY'),\n            'secret'  => env('PUSHER_APP_SECRET'),\n            'app_id'  => env('PUSHER_APP_ID'),\n            'options' => [\n                'cluster' => env('PUSHER_APP_CLUSTER'),\n                'useTLS'  => true,\n            ],\n            'client_options' => [\n                // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html\n            ],\n        ],\n\n        'redis' => [\n            'driver'     => 'redis',\n            'connection' => 'default',\n        ],\n\n        'log' => [\n            'driver' => 'log',\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/cache.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default cache connection that gets used while\n    | using this caching library. This connection is used when another is\n    | not explicitly specified when executing a given caching function.\n    |\n    */\n\n    'default' => env('CACHE_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Stores\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the cache \"stores\" for your application as\n    | well as their drivers. You may even define multiple stores for the\n    | same cache driver to group types of items stored in your caches.\n    |\n    */\n\n    'stores' => [\n\n        'apc' => [\n            'driver' => 'apc',\n        ],\n\n        'array' => [\n            'driver' => 'array',\n        ],\n\n        'database' => [\n            'driver'     => 'database',\n            'table'      => 'cache',\n            'connection' => null,\n        ],\n\n        'file' => [\n            'driver' => 'file',\n            'path'   => storage_path('framework/cache'),\n        ],\n\n        'memcached' => [\n            'driver'  => 'memcached',\n            'servers' => [\n                [\n                    'host'   => env('MEMCACHED_HOST', '127.0.0.1'),\n                    'port'   => env('MEMCACHED_PORT', 11211),\n                    'weight' => 100,\n                ],\n            ],\n        ],\n\n        'redis' => [\n            'driver'     => 'redis',\n            'connection' => 'default',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Key Prefix\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing a RAM based store such as APC or Memcached, there might\n    | be other applications utilizing the same cache. So, we'll specify a\n    | value to get prefixed to all our keys so we can avoid collisions.\n    |\n    */\n\n    'prefix' => 'laravel',\n\n];\n"
  },
  {
    "path": "config/compile.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Additional Compiled Classes\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify additional classes to include in the compiled file\n    | generated by the `artisan optimize` command. These should be classes\n    | that are included on basically every request into the application.\n    |\n    */\n\n    'files' => [\n        //\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Compiled File Providers\n    |--------------------------------------------------------------------------\n    |\n    | Here you may list service providers which define a \"compiles\" function\n    | that returns additional files that should be compiled, providing an\n    | easy way to get common files from any packages you are utilizing.\n    |\n    */\n\n    'providers' => [\n        //\n    ],\n\n];\n"
  },
  {
    "path": "config/database.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | PDO Fetch Style\n    |--------------------------------------------------------------------------\n    |\n    | By default, database results will be returned as instances of the PHP\n    | stdClass object; however, you may desire to retrieve records in an\n    | array format for simplicity. Here you can tweak the fetch style.\n    |\n    */\n\n    'fetch' => PDO::FETCH_CLASS,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Database Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which of the database connections below you wish\n    | to use as your default connection for all database work. Of course\n    | you may use many connections at once using the Database library.\n    |\n    */\n\n    'default' => env('DB_CONNECTION', 'mysql'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here are each of the database connections setup for your application.\n    | Of course, examples of configuring each database platform that is\n    | supported by Laravel is shown below to make development simple.\n    |\n    |\n    | All database work in Laravel is done through the PHP PDO facilities\n    | so make sure you have the driver for your particular database of\n    | choice installed on your machine before you begin development.\n    |\n    */\n\n    'connections' => [\n\n        'sqlite' => [\n            'driver'                  => 'sqlite',\n            'url'                     => env('DATABASE_URL'),\n            'database'                => env('DB_DATABASE', database_path('database.sqlite')),\n            'prefix'                  => '',\n            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),\n        ],\n\n        'mysql' => [\n            'driver'                        => 'mysql',\n            'host'                          => env('DB_HOST', 'localhost'),\n            'port'                          => env('DB_PORT', '3306'),\n            'database'                      => env('DB_DATABASE', 'backpack_demo'),\n            'username'                      => env('DB_USERNAME', 'root'),\n            'password'                      => env('DB_PASSWORD', ''),\n            'charset'                       => 'utf8',\n            'collation'                     => 'utf8_unicode_ci',\n            'prefix'                        => '',\n            'strict'                        => false,\n            'engine'                        => null,\n            'options'                       => extension_loaded('pdo_mysql') ? array_filter([\n                Pdo\\Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n            'dump'                          => [\n                'dump_binary_path' => env('MYSQL_DUMP_PATH', '/opt/homebrew/bin/'),\n                'use_single_transaction',\n                'timeout' => 60 * 5, // 5 minute timeout\n                // 'exclude_tables' => ['table1', 'table2'],\n                // 'add_extra_option' => '--optionname=optionvalue',\n            ],\n        ],\n\n        'pgsql' => [\n            'driver'         => 'pgsql',\n            'url'            => env('DATABASE_URL'),\n            'host'           => env('DB_HOST', '127.0.0.1'),\n            'port'           => env('DB_PORT', '5432'),\n            'database'       => env('DB_DATABASE', 'forge'),\n            'username'       => env('DB_USERNAME', 'forge'),\n            'password'       => env('DB_PASSWORD', ''),\n            'charset'        => 'utf8',\n            'prefix'         => '',\n            'prefix_indexes' => true,\n            'search_path'    => 'public',\n            'sslmode'        => 'prefer',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Migration Repository Table\n    |--------------------------------------------------------------------------\n    |\n    | This table keeps track of all the migrations that have already run for\n    | your application. Using this information, we can determine which of\n    | the migrations on disk haven't actually been run in the database.\n    |\n    */\n\n    'migrations' => 'migrations',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Redis Databases\n    |--------------------------------------------------------------------------\n    |\n    | Redis is an open source, fast, and advanced key-value store that also\n    | provides a richer set of commands than a typical key-value systems\n    | such as APC or Memcached. Laravel makes it easy to dig right in.\n    |\n    */\n\n    'redis' => [\n\n        'cluster' => false,\n\n        'default' => [\n            'host'     => env('REDIS_HOST', 'localhost'),\n            'password' => env('REDIS_PASSWORD', null),\n            'port'     => env('REDIS_PORT', 6379),\n            'database' => 0,\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/debugbar.php",
    "content": "<?php\n\nreturn [\n\n    /*\n     |--------------------------------------------------------------------------\n     | Debugbar Settings\n     |--------------------------------------------------------------------------\n     |\n     | Debugbar is enabled by default, when debug is set to true in app.php.\n     | You can override the value by setting enable to true or false instead of null.\n     |\n     | You can provide an array of URI's that must be ignored (eg. 'api/*')\n     |\n     */\n\n    'enabled' => env('DEBUGBAR_ENABLED', null),\n    'except'  => [\n        'telescope*',\n    ],\n\n    /*\n     |--------------------------------------------------------------------------\n     | Storage settings\n     |--------------------------------------------------------------------------\n     |\n     | DebugBar stores data for session/ajax requests.\n     | You can disable this, so the debugbar stores data in headers/session,\n     | but this can cause problems with large data collectors.\n     | By default, file storage (in the storage folder) is used. Redis and PDO\n     | can also be used. For PDO, run the package migrations first.\n     |\n     */\n    'storage' => [\n        'enabled'    => true,\n        'driver'     => 'file', // redis, file, pdo, custom\n        'path'       => storage_path('debugbar'), // For file driver\n        'connection' => null,   // Leave null for default connection (Redis/PDO)\n        'provider'   => '', // Instance of StorageInterface for custom driver\n        'open'       => true,\n    ],\n\n    /*\n     |--------------------------------------------------------------------------\n     | Vendors\n     |--------------------------------------------------------------------------\n     |\n     | Vendor files are included by default, but can be set to false.\n     | This can also be set to 'js' or 'css', to only include javascript or css vendor files.\n     | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)\n     | and for js: jquery and and highlight.js\n     | So if you want syntax highlighting, set it to true.\n     | jQuery is set to not conflict with existing jQuery scripts.\n     |\n     */\n\n    'include_vendors' => true,\n\n    /*\n     |--------------------------------------------------------------------------\n     | Capture Ajax Requests\n     |--------------------------------------------------------------------------\n     |\n     | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors),\n     | you can use this option to disable sending the data through the headers.\n     |\n     | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools.\n     */\n\n    'capture_ajax'    => true,\n    'add_ajax_timing' => false,\n\n    /*\n     |--------------------------------------------------------------------------\n     | Custom Error Handler for Deprecated warnings\n     |--------------------------------------------------------------------------\n     |\n     | When enabled, the Debugbar shows deprecated warnings for Symfony components\n     | in the Messages tab.\n     |\n     */\n    'error_handler' => false,\n\n    /*\n     |--------------------------------------------------------------------------\n     | Clockwork integration\n     |--------------------------------------------------------------------------\n     |\n     | The Debugbar can emulate the Clockwork headers, so you can use the Chrome\n     | Extension, without the server-side code. It uses Debugbar collectors instead.\n     |\n     */\n    'clockwork' => false,\n\n    /*\n     |--------------------------------------------------------------------------\n     | DataCollectors\n     |--------------------------------------------------------------------------\n     |\n     | Enable/disable DataCollectors\n     |\n     */\n\n    'collectors' => [\n        'phpinfo'         => true,  // Php version\n        'messages'        => true,  // Messages\n        'time'            => true,  // Time Datalogger\n        'memory'          => true,  // Memory usage\n        'exceptions'      => true,  // Exception displayer\n        'log'             => true,  // Logs from Monolog (merged in messages if enabled)\n        'db'              => true,  // Show database (PDO) queries and bindings\n        'views'           => true,  // Views with their data\n        'route'           => true,  // Current route information\n        'auth'            => false, // Display Laravel authentication status\n        'gate'            => false, // Display Laravel Gate checks\n        'session'         => true,  // Display session data\n        'symfony_request' => true,  // Only one can be enabled..\n        'mail'            => true,  // Catch mail messages\n        'laravel'         => false, // Laravel version and environment\n        'events'          => false, // All events fired\n        'default_request' => false, // Regular or special Symfony request logger\n        'logs'            => false, // Add the latest log messages\n        'files'           => false, // Show the included files\n        'config'          => false, // Display config settings\n        'cache'           => false, // Display cache events\n        'models'          => true, // Display models\n    ],\n\n    /*\n     |--------------------------------------------------------------------------\n     | Extra options\n     |--------------------------------------------------------------------------\n     |\n     | Configure some DataCollectors\n     |\n     */\n\n    'options' => [\n        'auth' => [\n            'show_name' => true,   // Also show the users name/email in the debugbar\n        ],\n        'db' => [\n            'with_params'       => true,   // Render SQL with the parameters substituted\n            'backtrace'         => true,   // Use a backtrace to find the origin of the query in your files.\n            'timeline'          => false,  // Add the queries to the timeline\n            'explain'           => [                 // Show EXPLAIN output on queries\n                'enabled' => false,\n                'types'   => ['SELECT'],     // // workaround ['SELECT'] only. https://github.com/barryvdh/laravel-debugbar/issues/888 ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+\n            ],\n            'hints'             => true,    // Show hints for common mistakes\n        ],\n        'mail' => [\n            'full_log' => false,\n        ],\n        'views' => [\n            'data' => false,    //Note: Can slow down the application, because the data can be quite large..\n        ],\n        'route' => [\n            'label' => true,  // show complete route on bar\n        ],\n        'logs' => [\n            'file' => null,\n        ],\n        'cache' => [\n            'values' => true, // collect cache values\n        ],\n    ],\n\n    /*\n     |--------------------------------------------------------------------------\n     | Inject Debugbar in Response\n     |--------------------------------------------------------------------------\n     |\n     | Usually, the debugbar is added just before </body>, by listening to the\n     | Response after the App is done. If you disable this, you have to add them\n     | in your template yourself. See http://phpdebugbar.com/docs/rendering.html\n     |\n     */\n\n    'inject' => true,\n\n    /*\n     |--------------------------------------------------------------------------\n     | DebugBar route prefix\n     |--------------------------------------------------------------------------\n     |\n     | Sometimes you want to set route prefix to be used by DebugBar to load\n     | its resources from. Usually the need comes from misconfigured web server or\n     | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97\n     |\n     */\n    'route_prefix' => '_debugbar',\n\n    /*\n     |--------------------------------------------------------------------------\n     | DebugBar route domain\n     |--------------------------------------------------------------------------\n     |\n     | By default DebugBar route served from the same domain that request served.\n     | To override default domain, specify it as a non-empty value.\n     */\n    'route_domain' => null,\n];\n"
  },
  {
    "path": "config/elfinder.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Upload dir\n    |--------------------------------------------------------------------------\n    |\n    | The dir where to store the images (relative from public).\n    |\n    */\n    'dir' => ['uploads'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem disks (Flysytem)\n    |--------------------------------------------------------------------------\n    |\n    | Define an array of Filesystem disks, which use Flysystem.\n    | You can set extra options, example:\n    |\n    | 'my-disk' => [\n    |        'URL' => url('to/disk'),\n    |        'alias' => 'Local storage',\n    |    ]\n    */\n    'disks' => [\n        // 'uploads',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Routes group config\n    |--------------------------------------------------------------------------\n    |\n    | The default group settings for the elFinder routes.\n    |\n    */\n\n    'route' => [\n        'prefix'     => config('backpack.base.route_prefix', 'admin').'/elfinder',\n        'middleware' => ['web', config('backpack.base.middleware_key', 'admin')], //Set to null to disable middleware filter\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Access filter\n    |--------------------------------------------------------------------------\n    |\n    | Filter callback to check the files\n    |\n    */\n\n    'access' => 'App\\Library\\Elfinder::checkAccess',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Roots\n    |--------------------------------------------------------------------------\n    |\n    | By default, the roots file is LocalFileSystem, with the above public dir.\n    | If you want custom options, you can set your own roots below.\n    |\n    */\n\n    'roots' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Options\n    |--------------------------------------------------------------------------\n    |\n    | These options are merged, together with 'roots' and passed to the Connector.\n    | See https://github.com/Studio-42/elFinder/wiki/Connector-configuration-options-2.1\n    |\n    */\n\n    'options' => [],\n\n];\n"
  },
  {
    "path": "config/filesystems.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. A \"local\" driver, as well as a variety of cloud\n    | based drivers are available for your choosing. Just store away!\n    |\n    | Supported: \"local\", \"ftp\", \"s3\", \"rackspace\"\n    |\n    */\n\n    'default' => env('FILESYSTEM_DISK', 'local'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cloud Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Many applications store files both locally and in the cloud. For this\n    | reason, you may specify a default \"cloud\" driver here. This driver\n    | will be bound as the Cloud disk implementation in the container.\n    |\n    */\n\n    'cloud' => 's3',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure as many filesystem \"disks\" as you wish, and you\n    | may even configure multiple disks of the same driver. Defaults have\n    | been setup for each driver as an example of the required options.\n    |\n    */\n\n    'disks' => [\n\n        'local' => [\n            'driver' => 'local',\n            'root'   => storage_path('app'),\n        ],\n\n        'public' => [\n            'driver'     => 'local',\n            'root'       => storage_path('app/public'),\n            'url'        => env('APP_URL').'/storage',\n            'visibility' => 'public',\n            'throw'      => false,\n        ],\n\n        'uploads' => [ // used for Backpack/CRUD (in elFinder)\n            'driver' => 'local',\n            'root'   => public_path('uploads'),\n        ],\n\n        'backups' => [ // used for Backpack/BackupManager\n            'driver' => 'local',\n            'root'   => storage_path('backups'), // that's where your backups are stored by default: storage/backups\n        ],\n\n        'storage' => [ // used for Backpack/LogManager\n            'driver' => 'local',\n            'root'   => storage_path(),\n        ],\n\n        's3' => [\n            'driver'                  => 's3',\n            'key'                     => env('AWS_ACCESS_KEY_ID'),\n            'secret'                  => env('AWS_SECRET_ACCESS_KEY'),\n            'region'                  => env('AWS_DEFAULT_REGION'),\n            'bucket'                  => env('AWS_BUCKET'),\n            'url'                     => env('AWS_URL'),\n            'endpoint'                => env('AWS_ENDPOINT'),\n            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),\n            'visibility'              => 'public',\n        ],\n\n    ],\n    'links' => [\n        public_path('storage') => storage_path('app/public'),\n    ],\n\n];\n"
  },
  {
    "path": "config/gravatar.php",
    "content": "<?php\n\nreturn [\n    'default' => [\n\n        // By default, images are presented at 80px by 80px if no size parameter is supplied.\n        // You may request a specific image size, which will be dynamically delivered from Gravatar\n        // by passing a single pixel dimension (since the images are square):\n        'size' => 45,\n\n        // the fallback image, can be a string or a url\n        // for more info, visit: http://en.gravatar.com/site/implement/images/#default-image\n        'fallback' => 'mm',\n\n        // would you like to return a https://... image\n        'secure' => true,\n\n        // Gravatar allows users to self-rate their images so that they can indicate if an image\n        // is appropriate for a certain audience. By default, only 'G' rated images are displayed\n        // unless you indicate that you would like to see higher ratings.\n        // Available options:\n        // g: suitable for display on all websites with any audience type.\n        // pg: may contain rude gestures, provocatively dressed individuals, the lesser swear words, or mild violence.\n        // r: may contain such things as harsh profanity, intense violence, nudity, or hard drug use.\n        // x: may contain hardcore sexual imagery or extremely disturbing violence.\n        'maximumRating' => 'g',\n\n        // If for some reason you wanted to force the default image to always load, you can do that setting this to true\n        'forceDefault' => false,\n\n        // If you require a file-type extension (some places do) then you may also add an (optional) .jpg extension to that URL\n        'forceExtension' => 'jpg',\n    ],\n];\n"
  },
  {
    "path": "config/image.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Image Driver\n    |--------------------------------------------------------------------------\n    |\n    | Intervention Image supports \"GD Library\" and \"Imagick\" to process images\n    | internally. You may choose one of them according to your PHP\n    | configuration. By default PHP's \"GD Library\" implementation is used.\n    |\n    | Supported: \"gd\", \"imagick\"\n    |\n    */\n\n    'driver' => 'gd',\n\n];\n"
  },
  {
    "path": "config/logging.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Default Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default log channel that gets used when writing\n    | messages to the logs. The name specified in this option should match\n    | one of the channels defined in the \"channels\" configuration array.\n    |\n    */\n    'default' => env('LOG_CHANNEL', 'stack'),\n    /*\n    |--------------------------------------------------------------------------\n    | Log Channels\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log channels for your application. Out of\n    | the box, Laravel uses the Monolog PHP logging library. This gives\n    | you a variety of powerful log handlers / formatters to utilize.\n    |\n    | Available Drivers: \"single\", \"daily\", \"slack\", \"syslog\",\n    |                    \"errorlog\", \"custom\", \"stack\"\n    |\n    */\n    'channels' => [\n        'stack' => [\n            'driver'   => 'stack',\n            'channels' => ['single'],\n        ],\n        'single' => [\n            'driver' => 'single',\n            'path'   => storage_path('logs/laravel.log'),\n            'level'  => 'debug',\n        ],\n        'daily' => [\n            'driver' => 'daily',\n            'path'   => storage_path('logs/laravel.log'),\n            'level'  => 'debug',\n            'days'   => 7,\n        ],\n        'slack' => [\n            'driver'   => 'slack',\n            'url'      => env('LOG_SLACK_WEBHOOK_URL'),\n            'username' => 'Laravel Log',\n            'emoji'    => ':boom:',\n            'level'    => 'critical',\n        ],\n        'syslog' => [\n            'driver' => 'syslog',\n            'level'  => 'debug',\n        ],\n        'errorlog' => [\n            'driver' => 'errorlog',\n            'level'  => 'debug',\n        ],\n    ],\n];\n"
  },
  {
    "path": "config/mail.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Mailer\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default mailer that is used to send any email\n    | messages sent by your application. Alternative mailers may be setup\n    | and used as needed; however, this mailer will be used by default.\n    |\n    */\n\n    'default' => env('MAIL_MAILER', 'smtp'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mailer Configurations\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure all of the mailers used by your application plus\n    | their respective settings. Several examples have been configured for\n    | you and you are free to add your own as your application requires.\n    |\n    | Laravel supports a variety of mail \"transport\" drivers to be used while\n    | sending an e-mail. You will specify which one you are using for your\n    | mailers below. You are free to add additional mailers as required.\n    |\n    | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"ses\",\n    |            \"postmark\", \"log\", \"array\"\n    |\n    */\n\n    'mailers' => [\n        'smtp' => [\n            'transport'  => 'smtp',\n            'host'       => env('MAIL_HOST', 'smtp.mailgun.org'),\n            'port'       => env('MAIL_PORT', 587),\n            'encryption' => env('MAIL_ENCRYPTION', 'tls'),\n            'username'   => env('MAIL_USERNAME'),\n            'password'   => env('MAIL_PASSWORD'),\n            'auth_mode'  => null,\n        ],\n\n        'ses' => [\n            'transport' => 'ses',\n        ],\n\n        'sendmail' => [\n            'transport' => 'sendmail',\n            'path'      => '/usr/sbin/sendmail -bs',\n        ],\n\n        'log' => [\n            'transport' => 'log',\n            'channel'   => env('MAIL_LOG_CHANNEL'),\n        ],\n\n        'array' => [\n            'transport' => 'array',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"From\" Address\n    |--------------------------------------------------------------------------\n    |\n    | You may wish for all e-mails sent by your application to be sent from\n    | the same address. Here, you may specify a name and address that is\n    | used globally for all e-mails that are sent by your application.\n    |\n    */\n\n    'from' => [\n        'address' => env('MAIL_FROM_ADDRESS', 'demo@backpackforlaravel.com'),\n        'name'    => env('MAIL_FROM_NAME', 'Backpack Demo'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Markdown Mail Settings\n    |--------------------------------------------------------------------------\n    |\n    | If you are using Markdown based email rendering, you may configure your\n    | theme and component paths here, allowing you to customize the design\n    | of the emails. Or, you may simply stick with the Laravel defaults!\n    |\n    */\n\n    'markdown' => [\n        'theme' => 'default',\n\n        'paths' => [\n            resource_path('views/vendor/mail'),\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/permission.php",
    "content": "<?php\n\nreturn [\n\n    'models' => [\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * Eloquent model should be used to retrieve your permissions. Of course, it\n         * is often just the \"Permission\" model but you may use whatever you like.\n         *\n         * The model you want to use as a Permission model needs to implement the\n         * `Spatie\\Permission\\Contracts\\Permission` contract.\n         */\n\n        'permission' => Spatie\\Permission\\Models\\Permission::class,\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * Eloquent model should be used to retrieve your roles. Of course, it\n         * is often just the \"Role\" model but you may use whatever you like.\n         *\n         * The model you want to use as a Role model needs to implement the\n         * `Spatie\\Permission\\Contracts\\Role` contract.\n         */\n\n        'role' => Spatie\\Permission\\Models\\Role::class,\n\n    ],\n\n    'table_names' => [\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your roles. We have chosen a basic\n         * default value but you may easily change it to any table you like.\n         */\n\n        'roles' => 'roles',\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * table should be used to retrieve your permissions. We have chosen a basic\n         * default value but you may easily change it to any table you like.\n         */\n\n        'permissions' => 'permissions',\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * table should be used to retrieve your models permissions. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'model_has_permissions' => 'model_has_permissions',\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your models roles. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'model_has_roles' => 'model_has_roles',\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your roles permissions. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'role_has_permissions' => 'role_has_permissions',\n    ],\n\n    'column_names' => [\n\n        /*\n         * Change this if you want to name the related model primary key other than\n         * `model_id`.\n         *\n         * For example, this would be nice if your primary keys are all UUIDs. In\n         * that case, name this `model_uuid`.\n         */\n        'model_morph_key' => 'model_id',\n    ],\n\n    /*\n     * When set to true, the required permission/role names are added to the exception\n     * message. This could be considered an information leak in some contexts, so\n     * the default setting is false here for optimum safety.\n     */\n\n    'display_permission_in_exception' => false,\n\n    'cache' => [\n\n        /*\n         * By default all permissions will be cached for 24 hours unless a permission or\n         * role is updated. Then the cache will be flushed immediately.\n         */\n\n        'expiration_time' => 60 * 24,\n\n        /*\n         * The key to use when tagging and prefixing entries in the cache.\n         */\n\n        'key' => 'spatie.permission.cache',\n\n        /*\n         * When checking for a permission against a model by passing a Permission\n         * instance to the check, this key determines what attribute on the\n         * Permissions model is used to cache against.\n         *\n         * Ideally, this should match your preferred way of checking permissions, eg:\n         * `$user->can('view-posts')` would be 'name'.\n         */\n\n        'model_key' => 'name',\n\n        /*\n         * You may optionally indicate a specific cache driver to use for permission and\n         * role caching using any of the `store` drivers listed in the cache.php config\n         * file. Using 'default' here means to use the `default` set in cache.php.\n         */\n        'store' => 'default',\n    ],\n];\n"
  },
  {
    "path": "config/prologue/alerts.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Alert Levels\n    |--------------------------------------------------------------------------\n    |\n    | The default sort of alert levels which can be called as functions on the\n    | AlertsMessageBag class. This gives a convenient way to add certain type's\n    | of messages.\n    |\n    | For example:\n    |\n    |     Alerts::info($message);\n    |\n    */\n\n    'levels' => [\n        'info',\n        'warning',\n        'error',\n        'success',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Key\n    |--------------------------------------------------------------------------\n    |\n    | The session key which is used to store flashed messages into the current\n    | session. This can be changed if it conflicts with another key.\n    |\n    */\n\n    'session_key' => 'alert_messages',\n\n];\n"
  },
  {
    "path": "config/queue.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Driver\n    |--------------------------------------------------------------------------\n    |\n    | The Laravel queue API supports a variety of back-ends via an unified\n    | API, giving you convenient access to each back-end using the same\n    | syntax for each one. Here you may set the default queue driver.\n    |\n    | Supported: \"null\", \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\"\n    |\n    */\n\n    'default' => env('QUEUE_DRIVER', 'sync'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the connection information for each server that\n    | is used by your application. A default configuration has been added\n    | for each back-end shipped with Laravel. You are free to add more.\n    |\n    */\n\n    'connections' => [\n\n        'sync' => [\n            'driver' => 'sync',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table'  => 'jobs',\n            'queue'  => 'default',\n            'expire' => 60,\n        ],\n\n        'beanstalkd' => [\n            'driver' => 'beanstalkd',\n            'host'   => 'localhost',\n            'queue'  => 'default',\n            'ttr'    => 60,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key'    => 'your-public-key',\n            'secret' => 'your-secret-key',\n            'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',\n            'queue'  => 'your-queue-name',\n            'region' => 'us-east-1',\n        ],\n\n        'redis' => [\n            'driver'     => 'redis',\n            'connection' => 'default',\n            'queue'      => 'default',\n            'expire'     => 60,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Failed Queue Jobs\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of failed queue job logging so you\n    | can control which database and table are used to store the jobs that\n    | have failed. You may change them to any database / table you wish.\n    |\n    */\n\n    'failed' => [\n        'database' => env('DB_CONNECTION', 'mysql'),\n        'table'    => 'failed_jobs',\n    ],\n\n];\n"
  },
  {
    "path": "config/services.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Party Services\n    |--------------------------------------------------------------------------\n    |\n    | This file is for storing the credentials for third party services such\n    | as Stripe, Mailgun, Mandrill, and others. This file provides a sane\n    | default location for this type of information, allowing packages\n    | to have a conventional place to find your various credentials.\n    |\n    */\n\n    'mailgun' => [\n        'domain' => env('MAILGUN_DOMAIN'),\n        'secret' => env('MAILGUN_SECRET'),\n    ],\n\n    'ses' => [\n        'key'    => env('SES_KEY'),\n        'secret' => env('SES_SECRET'),\n        'region' => 'us-east-1',\n    ],\n\n    'sparkpost' => [\n        'secret' => env('SPARKPOST_SECRET'),\n    ],\n\n    'stripe' => [\n        'model'  => App\\User::class,\n        'key'    => env('STRIPE_KEY'),\n        'secret' => env('STRIPE_SECRET'),\n    ],\n\n    'google_places' => [\n        'key' => env('GOOGLE_PLACES_KEY'),\n    ],\n\n];\n"
  },
  {
    "path": "config/session.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Session Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default session \"driver\" that will be used on\n    | requests. By default, we will use the lightweight native driver but\n    | you may specify any of the other wonderful drivers provided here.\n    |\n    | Supported: \"file\", \"cookie\", \"database\", \"apc\",\n    |            \"memcached\", \"redis\", \"array\"\n    |\n    */\n\n    'driver' => env('SESSION_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Lifetime\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the number of minutes that you wish the session\n    | to be allowed to remain idle before it expires. If you want them\n    | to immediately expire on the browser closing, set that option.\n    |\n    */\n\n    'lifetime' => 120,\n\n    'expire_on_close' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Encryption\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to easily specify that all of your session data\n    | should be encrypted before it is stored. All encryption will be run\n    | automatically by Laravel and you can use the Session like normal.\n    |\n    */\n\n    'encrypt' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session File Location\n    |--------------------------------------------------------------------------\n    |\n    | When using the native session driver, we need a location where session\n    | files may be stored. A default has been set for you but a different\n    | location may be specified. This is only needed for file sessions.\n    |\n    */\n\n    'files' => storage_path('framework/sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" or \"redis\" session drivers, you may specify a\n    | connection that should be used to manage these sessions. This should\n    | correspond to a connection in your database configuration options.\n    |\n    */\n\n    'connection' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Table\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" session driver, you may specify the table we\n    | should use to manage the sessions. Of course, a sensible default is\n    | provided for you; however, you are free to change this as needed.\n    |\n    */\n\n    'table' => 'sessions',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Sweeping Lottery\n    |--------------------------------------------------------------------------\n    |\n    | Some session drivers must manually sweep their storage location to get\n    | rid of old sessions from storage. Here are the chances that it will\n    | happen on a given request. By default, the odds are 2 out of 100.\n    |\n    */\n\n    'lottery' => [2, 100],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the name of the cookie used to identify a session\n    | instance by ID. The name specified here will get used every time a\n    | new session cookie is created by the framework for every driver.\n    |\n    */\n\n    'cookie' => 'laravel_session',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Path\n    |--------------------------------------------------------------------------\n    |\n    | The session cookie path determines the path for which the cookie will\n    | be regarded as available. Typically, this will be the root path of\n    | your application but you are free to change this when necessary.\n    |\n    */\n\n    'path' => '/',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Domain\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the domain of the cookie used to identify a session\n    | in your application. This will determine which domains the cookie is\n    | available to in your application. A sensible default has been set.\n    |\n    */\n\n    'domain' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTPS Only Cookies\n    |--------------------------------------------------------------------------\n    |\n    | By setting this option to true, session cookies will only be sent back\n    | to the server if the browser has a HTTPS connection. This will keep\n    | the cookie from being sent to you if it can not be done securely.\n    |\n    */\n\n    'secure'    => env('SESSION_SECURE_COOKIE', null),\n    'same_site' => 'lax',\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Access Only\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will prevent JavaScript from accessing the\n    | value of the cookie and the cookie will only be accessible through\n    | the HTTP protocol. You are free to modify this option if needed.\n    |\n    */\n\n    'http_only' => true,\n\n];\n"
  },
  {
    "path": "config/sluggable.php",
    "content": "<?php\n\nreturn [\n\n    /*\n     * What attributes do we use to build the slug?\n     * This can be a single field, like \"name\" which will build a slug from:\n     *\n     *     $model->name;\n     *\n     * Or it can be an array of fields, like (\"name\", \"company\"), which builds a slug from:\n     *\n     *     $model->name . ' ' . $model->company;\n     *\n     * If you've defined custom getters in your model, you can use those too,\n     * since Eloquent will call them when you request a custom attribute.\n     *\n     * Defaults to null, which uses the toString() method on your model.\n     */\n\n    'source' => null,\n\n    /*\n     * The maximum length of a generated slug.  Defaults to \"null\", which means\n     * no length restrictions are enforced.  Set it to a positive integer if you\n     * want to make sure your slugs aren't too long.\n     */\n\n    'maxLength' => null,\n\n    /*\n     * If left to \"null\", then use the cocur/slugify package to generate the slug\n     * (with the separator defined below).\n     *\n     * Set this to a closure that accepts two parameters (string and separator)\n     * to define a custom slugger.  e.g.:\n     *\n     *    'method' => function( $string, $sep ) {\n     *       return preg_replace('/[^a-z]+/i', $sep, $string);\n     *    },\n     *\n     * Otherwise, this will be treated as a callable to be used.  e.g.:\n     *\n     *    'method' => array('Str','slug'),\n     */\n\n    'method' => null,\n\n    /*\n     * Separator to use when generating slugs.  Defaults to a hyphen.\n     */\n\n    'separator' => '-',\n\n    /*\n     * Enforce uniqueness of slugs?  Defaults to true.\n     * If a generated slug already exists, an incremental numeric\n     * value will be appended to the end until a unique slug is found.  e.g.:\n     *\n     *     my-slug\n     *     my-slug-1\n     *     my-slug-2\n     */\n\n    'unique' => true,\n\n    /*\n     * If you are enforcing unique slugs, the default is to add an\n     * incremental value to the end of the base slug.  Alternatively, you\n     * can change this value to a closure that accepts three parameters:\n     * the base slug, the separator, and a Collection of the other\n     * \"similar\" slugs.  The closure should return the new unique\n     * suffix to append to the slug.\n     */\n\n    'uniqueSuffix' => null,\n\n    /*\n     * Should we include the trashed items when generating a unique slug?\n     * This only applies if the softDelete property is set for the Eloquent model.\n     * If set to \"false\", then a new slug could duplicate one that exists on a trashed model.\n     * If set to \"true\", then uniqueness is enforced across trashed and existing models.\n     */\n\n    'includeTrashed' => false,\n\n    /*\n     * An array of slug names that can never be used for this model,\n     * e.g. to prevent collisions with existing routes or controller methods, etc..\n     * Defaults to null (i.e. no reserved names).\n     * Can be a static array, e.g.:\n     *\n     *    'reserved' => array('add', 'delete'),\n     *\n     * or a closure that returns an array of reserved names.\n     * If using a closure, it will accept one parameter: the model itself, and should\n     * return an array of reserved names, or null. e.g.\n     *\n     *    'reserved' => function( Model $model) {\n     *      return $model->some_method_that_returns_an_array();\n     *    }\n     *\n     * In the case of a slug that gets generated with one of these reserved names,\n     * we will do:\n     *\n     *    $slug .= $separator + \"1\"\n     *\n     * and continue from there.\n     */\n\n    'reserved' => null,\n\n    /*\n     * Whether to update the slug value when a model is being\n     * re-saved (i.e. already exists).  Defaults to false, which\n     * means slugs are not updated.\n     *\n     * Be careful! If you are using slugs to generate URLs, then\n     * updating your slug automatically might change your URLs which\n     * is probably not a good idea from an SEO point of view.\n     * Only set this to true if you understand the possible consequences.\n     */\n\n    'onUpdate' => false,\n\n];\n"
  },
  {
    "path": "config/view.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Storage Paths\n    |--------------------------------------------------------------------------\n    |\n    | Most templating systems load templates from disk. Here you may specify\n    | an array of paths that should be checked for your views. Of course\n    | the usual Laravel view path has already been registered for you.\n    |\n    */\n\n    'paths' => [\n        realpath(base_path('resources/views')),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Compiled View Path\n    |--------------------------------------------------------------------------\n    |\n    | This option determines where all the compiled Blade templates will be\n    | stored for your application. Typically, this is within the storage\n    | directory. However, as usual, you are free to change this value.\n    |\n    */\n\n    'compiled' => realpath(storage_path('framework/views')),\n\n];\n"
  },
  {
    "path": "database/.gitignore",
    "content": "*.sqlite\n"
  },
  {
    "path": "database/factories/ArticleFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Article;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ArticleFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Article::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'category_id' => rand(1, 8),\n            'title'       => ucfirst($this->faker->unique()->sentence()),\n            'content'     => $this->faker->text(800),\n            'status'      => $this->faker->randomElement(['PUBLISHED', 'DRAFT']),\n            'date'        => $this->faker->date(),\n            'featured'    => $this->faker->boolean(),\n            'created_at'  => Carbon::now()->subDays(rand(0, 30)),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/BillFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Bill;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass BillFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Bill::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        $title = ucfirst($this->faker->unique()->words(rand(1, 3), true));\n\n        return [\n            'title' => $title,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/CategoryFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Category;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CategoryFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Category::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name'       => ucfirst($this->faker->unique()->word),\n            'created_at' => Carbon::now()->subDays(rand(0, 30)),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/CaveFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Cave;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CaveFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Cave::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name' => $this->faker->name,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/HeroFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Hero;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass HeroFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Hero::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name' => $this->faker->name,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/MeetingFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Meeting;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass MeetingFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Meeting::class;\n\n    /**\n     * Define the model's default state.\n     */\n    public function definition(): array\n    {\n        $title = $this->faker->randomElement([\n            'Meeting with '.$this->faker->name,\n            'Lunch with '.$this->faker->name,\n            'Dinner with '.$this->faker->name,\n            'Drink with '.$this->faker->name,\n        ]);\n\n        $start = Carbon::now()->addDays(30)->subMinutes(rand(0, Carbon::now()->diffInMinutes(Carbon::now()->subDays(90))))->floorHour();\n        $end = rand(0, 2) ? $start->copy()->addMinutes($this->faker->randomElement([60, 60, 60, 120, 240])) : null;\n\n        [$backgroundColor, $textColor] = $this->faker->randomElement([\n            ['#5e9ecd', '#ffffff'],\n            ['#009688', '#ffffff'],\n        ]);\n\n        return [\n            'title'            => $title,\n            'start'            => $start,\n            'end'              => $end,\n            'email'            => $this->faker->email,\n            'number'           => $this->faker->phoneNumber,\n            'background_color' => $backgroundColor,\n            'text_color'       => $textColor,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/MenuItemFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\MenuItem;\nuse App\\Models\\Page;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass MenuItemFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = MenuItem::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        $name = ucfirst($this->faker->unique()->words(rand(1, 3), true));\n        $type = $this->faker->randomElement([MenuItem::$pageLink, MenuItem::$externalLink, MenuItem::$internalLink]);\n\n        $link = null;\n        $page_id = null;\n\n        switch ($type) {\n            case MenuItem::$externalLink:\n                $link = $this->faker->url;\n                break;\n\n            case MenuItem::$internalLink:\n                $link = $this->faker->slug;\n                break;\n\n            case MenuItem::$pageLink:\n                $page_id = Page::all()->random()->id;\n                break;\n        }\n\n        return [\n            'name'    => $name,\n            'type'    => $type,\n            'link'    => $link,\n            'page_id' => $page_id,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/MonsterFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Monster;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass MonsterFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Monster::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'text'                         => ucfirst($this->faker->unique()->sentence()),\n            'summernote'                   => '<p>'.$this->faker->text(800).'</p>',\n            'tinymce'                      => $this->faker->text(800),\n            'textarea'                     => $this->faker->text(250),\n            'text'                         => $this->faker->text(120),\n            'date'                         => $this->faker->date(),\n            'start_date'                   => $this->faker->date(),\n            'end_date'                     => $this->faker->date(),\n            'datetime'                     => $this->faker->dateTime()->format('Y-m-d H:i:s'),\n            'datetime_picker'              => $this->faker->dateTime()->format('Y-m-d H:i:s'),\n            'email'                        => $this->faker->email(),\n            'checkbox'                     => 0,\n            'number'                       => rand(),\n            'float'                        => rand(),\n            'belongs_to_non_nullable'      => 0,\n            'select'                       => null,\n            'icon_id'                      => null,\n            'status'                       => \\App\\Enums\\MonsterStatus::WORKING->value,\n            'select2_json_from_api'        => null,\n            'select2_json_from_api_simple' => null,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PageFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Page;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Str;\n\nclass PageFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Page::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        $title = ucfirst($this->faker->unique()->words(rand(2, 5), true));\n\n        return [\n            'template' => $this->faker->randomElement(['services', 'about_us']),\n            'name'     => $title,\n            'title'    => $title,\n            'slug'     => Str::slug($title),\n            'content'  => $this->faker->paragraphs(rand(3, 18), true),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PetShop/BadgeFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Badge;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass BadgeFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Badge::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name' => $this->faker->name,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PetShop/InvoiceFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Invoice;\nuse App\\Models\\PetShop\\Owner;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Arr;\n\nclass InvoiceFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Invoice::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        $date = $this->faker->date();\n\n        return [\n            'owner_id'      => Owner::factory(),\n            'series'        => Arr::random(['SRV', 'PRD']),\n            'number'        => $this->faker->randomNumber(4),\n            'issuance_date' => $date,\n            'due_date'      => Carbon::parse($date)->addDays(15),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PetShop/InvoiceItemFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Invoice;\nuse App\\Models\\PetShop\\InvoiceItem;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass InvoiceItemFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = InvoiceItem::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'invoice_id'  => Invoice::factory(),\n            'order'       => $this->faker->randomNumber(),\n            'description' => $this->faker->text,\n            'quantity'    => $this->faker->randomFloat(0, 0, 9999999999.),\n            'unit_price'  => $this->faker->randomFloat(0, 0, 9999999999.),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PetShop/OwnerFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Owner;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass OwnerFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Owner::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name' => $this->faker->name,\n        ];\n    }\n\n    public function configure()\n    {\n        return $this->afterCreating(function (Owner $owner) {\n            $owner->avatar()->create([\n                'url' => 'https://placekitten.com/'.rand(200, 400).'/'.rand(200, 400),\n            ]);\n        });\n    }\n}\n"
  },
  {
    "path": "database/factories/PetShop/PassportFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Passport;\nuse App\\Models\\PetShop\\Pet;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass PassportFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Passport::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'pet_id'        => Pet::factory(),\n            'number'        => $this->faker->word,\n            'issuance_date' => $this->faker->date(),\n            'expiry_date'   => $this->faker->date(),\n            'first_name'    => $this->faker->firstName,\n            'middle_name'   => $this->faker->word,\n            'last_name'     => $this->faker->lastName,\n            'birth_date'    => $this->faker->date(),\n            'species'       => $this->faker->word,\n            'breed'         => $this->faker->word,\n            'colour'        => $this->faker->colorName(),\n            'notes'         => $this->faker->text,\n            'country'       => $this->faker->country,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PetShop/PetFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Pet;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Arr;\n\nclass PetFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Pet::class;\n\n    protected $petNames = ['Juliet', 'Rose', 'Belle', 'Nicky', 'Stella', 'Bepi', 'Trix', 'Susy', 'Rex', 'Black', 'Chip', 'Charlie', 'Kobe', 'Alf', 'Arlo', 'Ben', 'Snowflake', 'Curly', 'Rover', 'Slick', 'Yoda', 'Yogi', 'Bosco', 'Lucky', 'Snoopy', 'Bud', 'Zeus', 'Tyson', 'Booster', 'Blanche', 'Lady', 'Lexie', 'Tess', 'Dusty', 'Duffy', 'Cupcake', 'Clover', 'Dakota', 'Bullet', 'Foxy', 'Freckles', 'Giant', 'Gracie', 'Fuzzy', 'Fritz', 'Furball', 'Garfield', 'Flint', 'Fifi', 'Nosy', 'Mack', 'Magic', 'Napoleon', 'Muffin', 'Shorty', 'Scooter', 'Shadow', 'Simba', 'Rusty', 'Roscoe', 'Rolex', 'Ringo', 'Rico', 'Rex', 'Rags', 'Turbo', 'Tux', 'Ying', 'Yang', 'Violet', 'Teddy', 'T-bone', 'T-bird', 'Stuart', 'Spike', 'Troy', 'Whitie'];\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'nickname' => Arr::random($this->petNames),\n        ];\n    }\n\n    public function configure()\n    {\n        return $this->afterCreating(function (Pet $pet) {\n            $pet->avatar()->create([\n                'url' => 'https://placekitten.com/'.rand(200, 400).'/'.rand(200, 400),\n            ]);\n        });\n    }\n}\n"
  },
  {
    "path": "database/factories/PetShop/SkillFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\PetShop\\Skill;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Arr;\n\nclass SkillFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Skill::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        $skills = ['Jump', 'Sit', 'Bark', 'Lay Down', 'Fly', 'Run'];\n\n        return [\n            'name' => Arr::random($skills),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PetShop/StoryFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories\\PetShop;\n\nuse App\\Models\\Story;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass StoryFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Story::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name' => $this->faker->name,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/PostalBoxerFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\PostalBoxer;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass PostalBoxerFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = PostalBoxer::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        $title = ucfirst($this->faker->unique()->words(rand(1, 3), true));\n\n        return [\n            'postal_name' => $title,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ProductFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Category;\nuse App\\Models\\Product;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass ProductFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Product::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name'        => ucfirst($this->faker->unique()->sentence()),\n            'description' => $this->faker->text(50),\n            'details'     => $this->faker->text(800),\n            'price'       => random_int(10, 1000),\n            'category_id' => function () {\n                if (rand(1, 100) % 50 == 0) {\n                    return Category::factory()->create()->id;\n                } else {\n                    return Category::inRandomOrder()->first()->id ?? Category::factory()->create()->id;\n                }\n            },\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/RecommendFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Recommend;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass RecommendFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Recommend::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        $title = ucfirst($this->faker->unique()->words(rand(1, 3), true));\n\n        return [\n            'title' => $title,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/TagFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Tag;\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass TagFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = Tag::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name'       => ucfirst($this->faker->unique()->word),\n            'created_at' => Carbon::now()->subDays(rand(0, 30)),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\User;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Str;\n\nclass UserFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = User::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name'              => $this->faker->name,\n            'email'             => $this->faker->unique()->safeEmail,\n            'password'          => bcrypt(Str::random(10)),\n            'remember_token'    => null,\n            'email_verified_at' => null,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/migrations/.gitkeep",
    "content": "\n"
  },
  {
    "path": "database/migrations/2013_04_09_062329_create_backpack_revisions_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateBackpackRevisionsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        if (!Schema::hasTable('revisions')) {\n            Schema::create(\n                'revisions',\n                function ($table) {\n                    $table->increments('id');\n                    $table->string('revisionable_type');\n                    $table->integer('revisionable_id');\n                    $table->integer('user_id')->nullable();\n                    $table->string('key');\n                    $table->text('old_value')->nullable();\n                    $table->text('new_value')->nullable();\n                    $table->timestamps();\n\n                    $table->index(['revisionable_id', 'revisionable_type']);\n                }\n            );\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        if (Schema::hasTable('revisions')) {\n            Schema::drop('revisions');\n        }\n    }\n}\n"
  },
  {
    "path": "database/migrations/2014_10_12_000000_create_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('users', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('email')->unique();\n            $table->string('password');\n            $table->rememberToken();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('users');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreatePasswordResetsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('password_resets', function (Blueprint $table) {\n            $table->string('email')->index();\n            $table->string('token')->index();\n            $table->timestamp('created_at');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('password_resets');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2015_08_04_130507_create_article_tag_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateArticleTagTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('article_tag', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('article_id')->unsigned();\n            $table->integer('tag_id')->unsigned();\n            $table->nullableTimestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('article_tag');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2015_08_04_130520_create_articles_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateArticlesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('articles', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('category_id')->unsigned();\n            $table->string('title');\n            $table->string('slug')->default('');\n            $table->text('content');\n            $table->string('image')->nullable();\n            $table->string('status')->default('PUBLISHED');\n            $table->date('date');\n            $table->boolean('featured')->default(0);\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('articles');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2015_08_04_130551_create_categories_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateCategoriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('categories', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('parent_id')->default(0)->nullable();\n            $table->integer('lft')->unsigned()->nullable();\n            $table->integer('rgt')->unsigned()->nullable();\n            $table->integer('depth')->unsigned()->nullable();\n            $table->string('name');\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('categories');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2015_08_04_131614_create_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateSettingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('settings', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('key');\n            $table->string('name');\n            $table->string('description')->nullable();\n            $table->string('value')->nullable();\n            $table->text('field');\n            $table->tinyInteger('active');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('settings');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2015_08_04_131626_create_tags_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateTagsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('tags', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('tags');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2016_05_05_115641_create_menu_items_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateMenuItemsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('menu_items', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name', 100);\n            $table->string('type', 20)->nullable();\n            $table->string('link', 255)->nullable();\n            $table->integer('page_id')->unsigned()->nullable();\n            $table->integer('parent_id')->unsigned()->nullable();\n            $table->integer('lft')->unsigned()->nullable();\n            $table->integer('rgt')->unsigned()->nullable();\n            $table->integer('depth')->unsigned()->nullable();\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('menu_items');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2016_05_25_121918_create_pages_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreatePagesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // TODO: use JSON data type for 'extras' instead of string\n        Schema::create('pages', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('template');\n            $table->string('name');\n            $table->string('title');\n            $table->string('slug');\n            $table->text('content')->nullable();\n            $table->text('extras')->nullable();\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('pages');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2016_07_24_060017_add_slug_to_categories_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass AddSlugToCategoriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('categories', function (Blueprint $table) {\n            $table->string('slug')->unique()->after('name');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('categories', function (Blueprint $table) {\n            $table->dropColumn('slug');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2016_07_24_060101_add_slug_to_tags_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass AddSlugToTagsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('tags', function (Blueprint $table) {\n            $table->string('slug')->unique()->after('name');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('tags', function (Blueprint $table) {\n            $table->dropColumn('slug');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_04_20_100848_create_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateMonstersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        $driver = DB::getDriverName();\n        $prefix = DB::getTablePrefix();\n\n        switch ($driver) {\n            case 'pgsql':\n                $columnType = 'BYTEA';\n                break;\n            case 'mysql':\n            case 'mariadb':\n                $columnType = 'MEDIUMBLOB';\n                break;\n            case 'sqlite':\n                $columnType = 'BLOB';\n                break;\n        }\n\n        Schema::create('monsters', function (Blueprint $table) use ($columnType) {\n            $table->increments('id');\n            $table->string('address')->nullable();\n            if (!isset($columnType)) {\n                $table->binary('base64_image');\n            }\n            $table->string('browse')->nullable();\n            $table->boolean('checkbox')->nullable();\n            $table->text('wysiwyg')->nullable();\n            $table->string('color')->nullable();\n            $table->date('date')->nullable();\n            $table->date('date_picker')->nullable();\n            $table->date('start_date')->nullable();\n            $table->date('end_date')->nullable();\n            $table->dateTime('datetime')->nullable();\n            $table->dateTime('datetime_picker')->nullable();\n            $table->string('email')->nullable();\n            $table->integer('hidden')->nullable();\n            $table->string('icon_picker')->nullable();\n            $table->string('image')->nullable();\n            $table->string('month')->nullable();\n            $table->integer('number')->nullable();\n            $table->float('float')->nullable();\n            $table->string('password')->nullable();\n            $table->string('radio')->nullable();\n            $table->string('range')->nullable();\n            $table->integer('select')->nullable();\n            $table->string('select_from_array')->nullable();\n            // select_multiple\n            $table->integer('select2')->nullable();\n            $table->string('select2_from_ajax')->nullable();\n            $table->string('select2_from_array')->nullable();\n            // select2_from_ajax_multiple\n            $table->text('simplemde')->nullable();\n            $table->text('summernote')->nullable();\n            $table->text('table')->nullable();\n            $table->text('textarea')->nullable();\n            $table->string('text');\n            $table->text('tinymce')->nullable();\n            $table->string('upload')->nullable();\n            $table->string('upload_multiple')->nullable();\n            $table->string('url')->nullable();\n            $table->text('video')->nullable();\n            $table->string('week')->nullable();\n            $table->text('extras')->nullable();\n            $table->timestamps();\n        });\n\n        if (isset($columnType)) {\n            DB::statement(\"ALTER TABLE {$prefix}monsters ADD base64_image {$columnType} NULL\");\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('monsters');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_04_21_052454_create_monster_tag_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateMonsterTagTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('monster_tag', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('monster_id')->unsigned();\n            $table->integer('tag_id')->unsigned();\n            $table->nullableTimestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('monster_tag');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_04_21_052455_create_monster_articles_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateMonsterArticlesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('monster_article', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('monster_id')->unsigned();\n            $table->integer('article_id')->unsigned();\n            $table->nullableTimestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('monster_article');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_04_21_052456_create_monster_category_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateMonsterCategoryTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('monster_category', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('monster_id')->unsigned();\n            $table->integer('category_id')->unsigned();\n            $table->nullableTimestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('monster_category');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_12_18_075638_create_icons_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateIconsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('icons', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('icon');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('icons');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_12_19_081247_create_products_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateProductsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('products', function (Blueprint $table) {\n            $table->increments('id');\n            $table->json('name');\n            $table->json('description')->nullable();\n            $table->json('details')->nullable();\n            $table->json('features')->nullable();\n            $table->integer('price');\n            $table->integer('category_id');\n            $table->json('gallery')->nullable();\n            $table->json('extras')->nullable();\n            $table->string('main_image')->nullable();\n            $table->string('privacy_policy')->nullable();\n            $table->text('specifications')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('products');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2018_12_12_075319_create_permission_tables.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePermissionTables extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        $tableNames = config('permission.table_names');\n        $columnNames = config('permission.column_names');\n\n        Schema::create($tableNames['permissions'], function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('guard_name');\n            $table->timestamps();\n        });\n\n        Schema::create($tableNames['roles'], function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('guard_name');\n            $table->timestamps();\n        });\n\n        Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames) {\n            $table->unsignedInteger('permission_id');\n\n            $table->string('model_type');\n            $table->unsignedBigInteger($columnNames['model_morph_key']);\n            $table->index([$columnNames['model_morph_key'], 'model_type']);\n\n            $table->foreign('permission_id')\n                ->references('id')\n                ->on($tableNames['permissions'])\n                ->onDelete('cascade');\n\n            $table->primary(\n                ['permission_id', $columnNames['model_morph_key'], 'model_type'],\n                'model_has_permissions_permission_model_type_primary'\n            );\n        });\n\n        Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames) {\n            $table->unsignedInteger('role_id');\n\n            $table->string('model_type');\n            $table->unsignedBigInteger($columnNames['model_morph_key']);\n            $table->index([$columnNames['model_morph_key'], 'model_type']);\n\n            $table->foreign('role_id')\n                ->references('id')\n                ->on($tableNames['roles'])\n                ->onDelete('cascade');\n\n            $table->primary(\n                ['role_id', $columnNames['model_morph_key'], 'model_type'],\n                'model_has_roles_role_model_type_primary'\n            );\n        });\n\n        Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {\n            $table->unsignedInteger('permission_id');\n            $table->unsignedInteger('role_id');\n\n            $table->foreign('permission_id')\n                ->references('id')\n                ->on($tableNames['permissions'])\n                ->onDelete('cascade');\n\n            $table->foreign('role_id')\n                ->references('id')\n                ->on($tableNames['roles'])\n                ->onDelete('cascade');\n\n            $table->primary(['permission_id', 'role_id']);\n\n            app('cache')->forget('spatie.permission.cache');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        $tableNames = config('permission.table_names');\n\n        Schema::drop($tableNames['role_has_permissions']);\n        Schema::drop($tableNames['model_has_roles']);\n        Schema::drop($tableNames['model_has_permissions']);\n        Schema::drop($tableNames['roles']);\n        Schema::drop($tableNames['permissions']);\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_09_13_093251_create_failed_jobs_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateFailedJobsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('failed_jobs', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->text('connection');\n            $table->text('queue');\n            $table->longText('payload');\n            $table->longText('exception');\n            $table->timestamp('failed_at')->useCurrent();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('failed_jobs');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_12_02_101119_add_browse_multiple_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddBrowseMultipleToMonstersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->text('browse_multiple')->nullable()->after('week');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('browse_multiple');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_12_100831_alter_monsters_table_add_relationship_columns.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AlterMonstersTableAddRelationshipColumns extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->integer('icon_id')->nullable()->after('week');\n        });\n\n        Schema::create('monster_product', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('monster_id')->unsigned();\n            $table->integer('product_id')->unsigned();\n            $table->string('notes');\n            $table->nullableTimestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('icon_id');\n        });\n\n        Schema::drop('monster_product');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_12_100831_alter_monsters_table_remove_address.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AlterMonstersTableRemoveAddress extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('address');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->text('address')->nullable();\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_29_054416_create_dummy_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateDummyTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('dummies', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->text('description');\n            $table->json('extras');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('dummies');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_31_114745_add_columns_to_monster_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddColumnsToMonsterTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            if (!Schema::hasColumn('belongs_to_nullable', 'belongs_to_non_nullable')) {\n                $table->integer('belongs_to_nullable')->nullable();\n                $table->integer('belongs_to_non_nullable');\n            }\n        });\n    }\n\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('belongs_to_nullable');\n            $table->dropColumn('belongs_to_non_nullable');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_31_114745_create_address_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateAddressTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('addresses', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('street')->nullable();\n            $table->string('country');\n            $table->integer('icon_id')->nullable();\n            $table->integer('monster_id')->unique();\n        });\n\n        Schema::create('postalboxes', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('postal_name')->nullable();\n            $table->integer('monster_id');\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('addresses');\n        Schema::dropIfExists('postalboxes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_31_114745_create_pivotable_relations_tables.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePivotableRelationsTables extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sentiments', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('text')->nullable();\n            $table->string('sentimentable_type');\n            $table->bigInteger('sentimentable_id');\n            $table->bigInteger('user_id')->nullable();\n            $table->timestamps();\n        });\n\n        Schema::create('recommendables', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('text')->nullable();\n            $table->string('recommendable_type');\n            $table->bigInteger('recommendable_id');\n            $table->bigInteger('recommend_id');\n            $table->timestamps();\n        });\n\n        Schema::create('billables', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('text')->nullable();\n            $table->string('billable_type');\n            $table->bigInteger('billable_id');\n            $table->bigInteger('bill_id');\n            $table->timestamps();\n        });\n\n        Schema::create('monster_productdummy', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('monster_id')->unsigned();\n            $table->integer('product_id')->unsigned();\n            $table->string('notes');\n            $table->nullableTimestamps();\n        });\n\n        Schema::create('recommends', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('title')->nullable();\n            $table->timestamps();\n        });\n\n        Schema::create('postalboxers', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('postal_name')->nullable();\n            $table->integer('monster_id')->nullable();\n        });\n\n        Schema::create('bills', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('title')->nullable();\n            $table->timestamps();\n        });\n\n        Schema::create('stars', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('starable_type');\n            $table->bigInteger('starable_id');\n            $table->string('title')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('recommendables');\n        Schema::dropIfExists('sentiments');\n        Schema::dropIfExists('recommends');\n        Schema::dropIfExists('stars');\n        Schema::dropIfExists('billables');\n        Schema::dropIfExists('bills');\n        Schema::dropIfExists('monster_productdummy');\n        Schema::dropIfExists('postalboxers');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_31_114745_remove_backpackuser_model.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass RemoveBackpackuserModel extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // establish the table names\n        $model_has_roles = config('permission.table_names.model_has_roles');\n        $model_has_permissions = config('permission.table_names.model_has_permissions');\n\n        // replace the BackpackUser model with User\n        $this->replaceModels($model_has_roles);\n        $this->replaceModels($model_has_permissions);\n    }\n\n    public function replaceModels($table_name)\n    {\n        Log::info('Replacing BackpackUser model in '.$table_name);\n\n        // if you've ended up with duplicate entries (both for App\\User and App\\Models\\BackpackUser)\n        // we can just delete them\n        $userEntries = DB::table($table_name)\n            ->where('model_type', \\App\\User::class)\n            ->get();\n\n        foreach ($userEntries as $entry) {\n            DB::table($table_name)\n                ->where('role_id', $entry->role_id)\n                ->where('model_type', 'App\\Models\\BackpackUser')\n                ->where('model_id', $entry->model_id)\n                ->delete();\n        }\n\n        // for the rest of them, we can just replace the BackpackUser model with User\n        DB::table($table_name)\n            ->where('model_type', \"App\\Models\\BackpackUser\")\n            ->update([\n                'model_type' => \\App\\User::class,\n            ]);\n    }\n}\n"
  },
  {
    "path": "database/migrations/2020_03_31_114745_rename_address_column_from_monsters.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass RenameAddressColumnFromMonsters extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            if (!Schema::hasColumn('monsters', 'address_algolia')) {\n                $table->text('address_algolia')->nullable()->after('week');\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_05_07_151146_make_notes_nullable_on_monster_product.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass MakeNotesNullableOnMonsterProduct extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monster_product', function (Blueprint $table) {\n            $table->string('notes')->nullable()->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_08_08_130950_change_upload_multiple_column_in_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass ChangeUploadMultipleColumnInMonstersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->text('upload_multiple')->nullable()->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_10_13_081033_remove_simplemde_attribute_from_monsters.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass RemoveSimplemdeAttributeFromMonsters extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('simplemde');\n            $table->text('easymde')->nullable();\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_083405_create_owners_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateOwnersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('owners', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('owners');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_083526_create_invoices_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateInvoicesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::disableForeignKeyConstraints();\n\n        Schema::create('invoices', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('owner_id')->constrained();\n            $table->string('series');\n            $table->unsignedInteger('number');\n            $table->date('issuance_date');\n            $table->date('due_date')->nullable();\n            $table->timestamps();\n        });\n\n        Schema::enableForeignKeyConstraints();\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('invoices');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_083644_create_invoice_items_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateInvoiceItemsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::disableForeignKeyConstraints();\n\n        Schema::create('invoice_items', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('invoice_id')->constrained();\n            $table->unsignedInteger('order')->nullable();\n            $table->text('description');\n            $table->float('quantity');\n            $table->float('unit_price');\n            $table->timestamps();\n        });\n\n        Schema::enableForeignKeyConstraints();\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('invoice_items');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_114317_create_pets_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePetsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('pets', function (Blueprint $table) {\n            $table->id();\n            $table->string('nickname');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('pets');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_114318_create_owner_pet_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateOwnerPetTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('owner_pet', function (Blueprint $table) {\n            $table->foreignId('owner_id');\n            $table->foreignId('pet_id');\n            $table->string('role');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('owner_pet');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_114741_create_passports_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePassportsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::disableForeignKeyConstraints();\n\n        Schema::create('passports', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('pet_id')->constrained()->onDelete('cascade');\n            $table->string('number');\n            $table->date('issuance_date');\n            $table->date('expiry_date')->nullable();\n            $table->string('first_name');\n            $table->string('middle_name')->nullable();\n            $table->string('last_name');\n            $table->date('birth_date');\n            $table->string('species');\n            $table->string('breed')->nullable();\n            $table->string('colour')->nullable();\n            $table->text('notes')->nullable();\n            $table->string('country');\n            $table->timestamps();\n        });\n\n        Schema::enableForeignKeyConstraints();\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('passports');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_120235_create_skills_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateSkillsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('skills', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('skills');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_120236_create_pet_skill_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePetSkillTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('pet_skill', function (Blueprint $table) {\n            $table->foreignId('pet_id');\n            $table->foreignId('skill_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('pet_skill');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_133436_create_avatars_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateAvatarsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('avatars', function (Blueprint $table) {\n            $table->id();\n            $table->string('url');\n            $table->integer('avatarable_id');\n            $table->string('avatarable_type');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('avatars');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_135143_create_comments_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCommentsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('comments', function (Blueprint $table) {\n            $table->id();\n            $table->text('body');\n            $table->string('commentable_type');\n            $table->integer('commentable_id');\n            $table->string('user_id');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('comments');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_141636_create_badges_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateBadgesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('badges', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('badges');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_17_141725_create_badgeables_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateBadgeablesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('badgeables', function (Blueprint $table) {\n            $table->id();\n            $table->integer('badge_id');\n            $table->integer('badgeable_id');\n            $table->string('badgeable_type');\n            $table->text('note');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('badgeables');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_21_153540_create_countries_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCountriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('countries', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->string('code');\n        });\n\n        Schema::create('countries_monsters', function (Blueprint $table) {\n            $table->id();\n            $table->bigInteger('monster_id');\n            $table->bigInteger('country_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('countries');\n        Schema::dropIfExists('countries_monsters');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_21_155236_create_graffitis_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateGraffitisTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->bigInteger('graffiti_id')->nullable();\n        });\n\n        Schema::create('graffitis', function (Blueprint $table) {\n            $table->id();\n            $table->string('image');\n            $table->bigInteger('user_id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('graffiti_id');\n        });\n\n        Schema::dropIfExists('graffitis');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_21_165125_add_country_id_addresses_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddCountryIdAddressesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('addresses', function (Blueprint $table) {\n            $table->dropColumn('country');\n            $table->dropColumn('icon_id');\n        });\n        Schema::table('addresses', function (Blueprint $table) {\n            $table->bigInteger('country_id')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('addresses', function (Blueprint $table) {\n            $table->string('country')->nullable();\n            $table->bigInteger('icon_id')->nullable();\n        });\n        Schema::table('addresses', function (Blueprint $table) {\n            $table->dropColumn('country_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_21_165552_create_wishes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateWishesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('wishes', function (Blueprint $table) {\n            $table->id();\n            $table->bigInteger('monster_id');\n            $table->bigInteger('country_id')->nullable();\n            $table->text('body');\n            $table->timestamps();\n        });\n\n        Schema::create('universes_wishes', function (Blueprint $table) {\n            $table->id();\n            $table->bigInteger('universe_id');\n            $table->bigInteger('wish_id');\n            $table->string('name')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('wishes');\n        Schema::dropIfExists('universes_wishes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_21_165553_create_balls_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateBallsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('balls', function (Blueprint $table) {\n            $table->id();\n            $table->morphs('ballable');\n            $table->bigInteger('country_id')->nullable();\n            $table->text('name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('balls');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_21_165554_create_universes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateUniversesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('universes', function (Blueprint $table) {\n            $table->id();\n            $table->morphs('universable');\n            $table->string('title')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('universes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_22_063032_create_heroes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateHeroesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('heroes', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('heroes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_22_063323_add_hero_id_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddHeroIdToMonstersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->integer('hero_id')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('hero_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_22_072809_create_stories_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateStoriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('stories', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('stories');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_22_074008_add_story_id_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddStoryIdToMonstersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->integer('story_id')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('story_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_22_145356_create_caves_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateCavesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('caves', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->string('lat')->nullable();\n            $table->string('lng')->nullable();\n            $table->string('full_address')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('caves');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_22_145812_add_cave_id_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddCaveIdToMonstersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->integer('cave_id')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('cave_id');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_10_08_084702_add_status_to_products.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('products', function (Blueprint $table) {\n            $table->string('status')->default('out-of-stock');\n            $table->string('condition')->default('NEW');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2022_11_20_221518_create_activity_log_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateActivityLogTable extends Migration\n{\n    public function up()\n    {\n        Schema::connection(config('activitylog.database_connection'))->create(config('activitylog.table_name'), function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('log_name')->nullable();\n            $table->text('description');\n            $table->nullableMorphs('subject', 'subject');\n            $table->nullableMorphs('causer', 'causer');\n            $table->json('properties')->nullable();\n            $table->timestamps();\n            $table->index('log_name');\n        });\n    }\n\n    public function down()\n    {\n        Schema::connection(config('activitylog.database_connection'))->dropIfExists(config('activitylog.table_name'));\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_11_20_221519_add_event_column_to_activity_log_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddEventColumnToActivityLogTable extends Migration\n{\n    public function up()\n    {\n        Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) {\n            $table->string('event')->nullable()->after('subject_type');\n        });\n    }\n\n    public function down()\n    {\n        Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) {\n            $table->dropColumn('event');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_11_20_221520_add_batch_uuid_column_to_activity_log_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddBatchUuidColumnToActivityLogTable extends Migration\n{\n    public function up()\n    {\n        Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) {\n            $table->uuid('batch_uuid')->nullable()->after('properties');\n        });\n    }\n\n    public function down()\n    {\n        Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) {\n            $table->dropColumn('batch_uuid');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_12_30_162821_add_soft_deletes_to_pets.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('pets', function (Blueprint $table) {\n            $table->softDeletes();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_01_23_174016_add_status_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->string('status')->default('working');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('status');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_01_23_194158_add_features_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->json('features')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('features');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_01_23_195752_add_ckeditor_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->text('ckeditor')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('ckeditor');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_02_22_191429_create_media_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    public function up(): void\n    {\n        Schema::create('media', function (Blueprint $table) {\n            $table->id();\n\n            $table->morphs('model');\n            $table->uuid('uuid')->nullable()->unique();\n            $table->string('collection_name');\n            $table->string('name');\n            $table->string('file_name');\n            $table->string('mime_type')->nullable();\n            $table->string('disk');\n            $table->string('conversions_disk')->nullable();\n            $table->unsignedBigInteger('size');\n            $table->json('manipulations');\n            $table->json('custom_properties');\n            $table->json('generated_conversions');\n            $table->json('responsive_images');\n            $table->unsignedInteger('order_column')->nullable()->index();\n\n            $table->nullableTimestamps();\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::dropIfExists('media');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_05_31_101941_add_dropzone_column_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->text('dropzone')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('dropzone');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_07_13_071933_add_soft_deletes_to_invoices_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('invoices', function (Blueprint $table) {\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('invoices', function (Blueprint $table) {\n            $table->dropSoftDeletes();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_07_16_114745_rename_address_to_google_column_from_monsters.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass RenameAddressToGoogleColumnFromMonsters extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            if (Schema::hasColumn('monsters', 'address_algolia') && !Schema::hasColumn('monsters', 'address_google')) {\n                $table->renameColumn('address_algolia', 'address_google');\n            }\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            if (Schema::hasColumn('monsters', 'address_google') && !Schema::hasColumn('monsters', 'address_algolia')) {\n                $table->renameColumn('address_google', 'address_algolia');\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2023_08_30_093542_add_email_verified_at_column_to_users.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->addColumn('timestamp', 'email_verified_at', ['nullable' => true])->after('email');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropColumn(['email_verified_at']);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_11_23_111148_add_category_relationship_column_to_monsters_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->integer('category_relationship')->nullable()->unsigned();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('category_relationship');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_02_03_225118_create_meetings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('meetings', function (Blueprint $table) {\n            $table->id();\n            $table->string('title');\n            $table->string('email')->nullable();\n            $table->string('number')->nullable();\n            $table->json('types')->nullable();\n            $table->dateTime('start');\n            $table->dateTime('end')->nullable();\n            $table->string('background_color')->nullable();\n            $table->string('text_color')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('meetings');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_11_085730_create_language_lines_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up(): void\n    {\n        Schema::create('language_lines', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('group')->index();\n            $table->string('key');\n            $table->json('text');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('language_lines');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_24_115407_add_json_api_fields_to_monster_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->json('select2_json_from_api')->nullable();\n            $table->json('select2_json_from_api_simple')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('monsters', function (Blueprint $table) {\n            $table->dropColumn('select2_json_from_api');\n            $table->dropColumn('select2_json_from_api_simple');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_10_14_000001_create_pan_analytics_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class() extends Migration {\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('pan_analytics', function (Blueprint $table): void {\n            $table->id();\n            $table->string('name');\n\n            $table->unsignedBigInteger('impressions')->default(0);\n            $table->unsignedBigInteger('hovers')->default(0);\n            $table->unsignedBigInteger('clicks')->default(0);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('pan_analytics');\n    }\n};\n"
  },
  {
    "path": "database/seeders/.gitkeep",
    "content": "\n"
  },
  {
    "path": "database/seeders/BadgeSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\Badge;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Carbon;\n\nclass BadgeSeeder extends Seeder\n{\n    private $badges = ['Hero', 'First', 'Cleanest', 'Healer', 'Boring'];\n\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Badge::insert(array_map(function ($badge) { return ['name' => $badge, 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()]; }, $this->badges));\n    }\n}\n"
  },
  {
    "path": "database/seeders/CaveSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Cave;\nuse Illuminate\\Database\\Seeder;\n\nclass CaveSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Cave::factory()->count(5)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/CountryTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Country;\nuse Illuminate\\Database\\Seeder;\n\nclass CountryTableSeeder extends Seeder\n{\n    public $countries = [\n        ['code' => 'US', 'name' => 'United States'],\n        ['code' => 'CA', 'name' => 'Canada'],\n        ['code' => 'AU', 'name' => 'Australia'],\n        ['code' => 'FR', 'name' => 'France'],\n        ['code' => 'DE', 'name' => 'Germany'],\n        ['code' => 'IS', 'name' => 'Iceland'],\n        ['code' => 'IE', 'name' => 'Ireland'],\n        ['code' => 'IT', 'name' => 'Italy'],\n        ['code' => 'ES', 'name' => 'Spain'],\n        ['code' => 'SE', 'name' => 'Sweden'],\n        ['code' => 'AT', 'name' => 'Austria'],\n        ['code' => 'BE', 'name' => 'Belgium'],\n        ['code' => 'FI', 'name' => 'Finland'],\n        ['code' => 'CZ', 'name' => 'Czech Republic'],\n        ['code' => 'DK', 'name' => 'Denmark'],\n        ['code' => 'NO', 'name' => 'Norway'],\n        ['code' => 'GB', 'name' => 'United Kingdom'],\n        ['code' => 'CH', 'name' => 'Switzerland'],\n        ['code' => 'NZ', 'name' => 'New Zealand'],\n        ['code' => 'RU', 'name' => 'Russian Federation'],\n        ['code' => 'PT', 'name' => 'Portugal'],\n        ['code' => 'NL', 'name' => 'Netherlands'],\n        ['code' => 'IM', 'name' => 'Isle of Man'],\n        ['code' => 'AF', 'name' => 'Afghanistan'],\n        ['code' => 'AX', 'name' => 'Aland Islands '],\n        ['code' => 'AL', 'name' => 'Albania'],\n        ['code' => 'DZ', 'name' => 'Algeria'],\n        ['code' => 'AS', 'name' => 'American Samoa'],\n        ['code' => 'AD', 'name' => 'Andorra'],\n        ['code' => 'AO', 'name' => 'Angola'],\n        ['code' => 'AI', 'name' => 'Anguilla'],\n        ['code' => 'AQ', 'name' => 'Antarctica'],\n        ['code' => 'AG', 'name' => 'Antigua and Barbuda'],\n        ['code' => 'AR', 'name' => 'Argentina'],\n        ['code' => 'AM', 'name' => 'Armenia'],\n        ['code' => 'AW', 'name' => 'Aruba'],\n        ['code' => 'AZ', 'name' => 'Azerbaijan'],\n        ['code' => 'BS', 'name' => 'Bahamas'],\n        ['code' => 'BH', 'name' => 'Bahrain'],\n        ['code' => 'BD', 'name' => 'Bangladesh'],\n        ['code' => 'BB', 'name' => 'Barbados'],\n        ['code' => 'BY', 'name' => 'Belarus'],\n        ['code' => 'BZ', 'name' => 'Belize'],\n        ['code' => 'BJ', 'name' => 'Benin'],\n        ['code' => 'BM', 'name' => 'Bermuda'],\n        ['code' => 'BT', 'name' => 'Bhutan'],\n        ['code' => 'BO', 'name' => 'Bolivia, Plurinational State of'],\n        ['code' => 'BQ', 'name' => 'Bonaire, Sint Eustatius and Saba'],\n        ['code' => 'BA', 'name' => 'Bosnia and Herzegovina'],\n        ['code' => 'BW', 'name' => 'Botswana'],\n        ['code' => 'BV', 'name' => 'Bouvet Island'],\n        ['code' => 'BR', 'name' => 'Brazil'],\n        ['code' => 'IO', 'name' => 'British Indian Ocean Territory'],\n        ['code' => 'BN', 'name' => 'Brunei Darussalam'],\n        ['code' => 'BG', 'name' => 'Bulgaria'],\n        ['code' => 'BF', 'name' => 'Burkina Faso'],\n        ['code' => 'BI', 'name' => 'Burundi'],\n        ['code' => 'KH', 'name' => 'Cambodia'],\n        ['code' => 'CM', 'name' => 'Cameroon'],\n        ['code' => 'CV', 'name' => 'Cape Verde'],\n        ['code' => 'KY', 'name' => 'Cayman Islands'],\n        ['code' => 'CF', 'name' => 'Central African Republic'],\n        ['code' => 'TD', 'name' => 'Chad'],\n        ['code' => 'CL', 'name' => 'Chile'],\n        ['code' => 'CN', 'name' => 'China'],\n        ['code' => 'CX', 'name' => 'Christmas Island'],\n        ['code' => 'CC', 'name' => 'Cocos (Keeling) Islands'],\n        ['code' => 'CO', 'name' => 'Colombia'],\n        ['code' => 'KM', 'name' => 'Comoros'],\n        ['code' => 'CG', 'name' => 'Congo'],\n        ['code' => 'CD', 'name' => 'Congo, the Democratic Republic of the'],\n        ['code' => 'CK', 'name' => 'Cook Islands'],\n        ['code' => 'CR', 'name' => 'Costa Rica'],\n        ['code' => 'CI', 'name' => 'Cote d\\'Ivoire'],\n        ['code' => 'HR', 'name' => 'Croatia'],\n        ['code' => 'CU', 'name' => 'Cuba'],\n        ['code' => 'CW', 'name' => 'Curaçao'],\n        ['code' => 'CY', 'name' => 'Cyprus'],\n        ['code' => 'DJ', 'name' => 'Djibouti'],\n        ['code' => 'DM', 'name' => 'Dominica'],\n        ['code' => 'DO', 'name' => 'Dominican Republic'],\n        ['code' => 'EC', 'name' => 'Ecuador'],\n        ['code' => 'EG', 'name' => 'Egypt'],\n        ['code' => 'SV', 'name' => 'El Salvador'],\n        ['code' => 'GQ', 'name' => 'Equatorial Guinea'],\n        ['code' => 'ER', 'name' => 'Eritrea'],\n        ['code' => 'EE', 'name' => 'Estonia'],\n        ['code' => 'ET', 'name' => 'Ethiopia'],\n        ['code' => 'FK', 'name' => 'Falkland Islands (Malvinas)'],\n        ['code' => 'FO', 'name' => 'Faroe Islands'],\n        ['code' => 'FJ', 'name' => 'Fiji'],\n        ['code' => 'GF', 'name' => 'French Guiana'],\n        ['code' => 'PF', 'name' => 'French Polynesia'],\n        ['code' => 'TF', 'name' => 'French Southern Territories'],\n        ['code' => 'GA', 'name' => 'Gabon'],\n        ['code' => 'GM', 'name' => 'Gambia'],\n        ['code' => 'GE', 'name' => 'Georgia'],\n        ['code' => 'GH', 'name' => 'Ghana'],\n        ['code' => 'GI', 'name' => 'Gibraltar'],\n        ['code' => 'GR', 'name' => 'Greece'],\n        ['code' => 'GL', 'name' => 'Greenland'],\n        ['code' => 'GD', 'name' => 'Grenada'],\n        ['code' => 'GP', 'name' => 'Guadeloupe'],\n        ['code' => 'GU', 'name' => 'Guam'],\n        ['code' => 'GT', 'name' => 'Guatemala'],\n        ['code' => 'GG', 'name' => 'Guernsey'],\n        ['code' => 'GN', 'name' => 'Guinea'],\n        ['code' => 'GW', 'name' => 'Guinea-Bissau'],\n        ['code' => 'GY', 'name' => 'Guyana'],\n        ['code' => 'HT', 'name' => 'Haiti'],\n        ['code' => 'HM', 'name' => 'Heard Island and McDonald Islands'],\n        ['code' => 'VA', 'name' => 'Holy See (Vatican City State)'],\n        ['code' => 'HN', 'name' => 'Honduras'],\n        ['code' => 'HK', 'name' => 'Hong Kong'],\n        ['code' => 'HU', 'name' => 'Hungary'],\n        ['code' => 'IN', 'name' => 'India'],\n        ['code' => 'ID', 'name' => 'Indonesia'],\n        ['code' => 'IR', 'name' => 'Iran, Islamic Republic of'],\n        ['code' => 'IQ', 'name' => 'Iraq'],\n        ['code' => 'IL', 'name' => 'Israel'],\n        ['code' => 'JM', 'name' => 'Jamaica'],\n        ['code' => 'JP', 'name' => 'Japan'],\n        ['code' => 'JE', 'name' => 'Jersey'],\n        ['code' => 'JO', 'name' => 'Jordan'],\n        ['code' => 'KZ', 'name' => 'Kazakhstan'],\n        ['code' => 'KE', 'name' => 'Kenya'],\n        ['code' => 'KI', 'name' => 'Kiribati'],\n        ['code' => 'KP', 'name' => 'Korea, Democratic People\\'s Republic of'],\n        ['code' => 'KR', 'name' => 'Korea, Republic of'],\n        ['code' => 'KW', 'name' => 'Kuwait'],\n        ['code' => 'KG', 'name' => 'Kyrgyzstan'],\n        ['code' => 'LA', 'name' => 'Lao People\\'s Democratic Republic'],\n        ['code' => 'LV', 'name' => 'Latvia'],\n        ['code' => 'LB', 'name' => 'Lebanon'],\n        ['code' => 'LS', 'name' => 'Lesotho'],\n        ['code' => 'LR', 'name' => 'Liberia'],\n        ['code' => 'LY', 'name' => 'Libyan Arab Jamahiriya'],\n        ['code' => 'LI', 'name' => 'Liechtenstein'],\n        ['code' => 'LT', 'name' => 'Lithuania'],\n        ['code' => 'LU', 'name' => 'Luxembourg'],\n        ['code' => 'MO', 'name' => 'Macao'],\n        ['code' => 'MK', 'name' => 'Macedonia'],\n        ['code' => 'MG', 'name' => 'Madagascar'],\n        ['code' => 'MW', 'name' => 'Malawi'],\n        ['code' => 'MY', 'name' => 'Malaysia'],\n        ['code' => 'MV', 'name' => 'Maldives'],\n        ['code' => 'ML', 'name' => 'Mali'],\n        ['code' => 'MT', 'name' => 'Malta'],\n        ['code' => 'MH', 'name' => 'Marshall Islands'],\n        ['code' => 'MQ', 'name' => 'Martinique'],\n        ['code' => 'MR', 'name' => 'Mauritania'],\n        ['code' => 'MU', 'name' => 'Mauritius'],\n        ['code' => 'YT', 'name' => 'Mayotte'],\n        ['code' => 'MX', 'name' => 'Mexico'],\n        ['code' => 'FM', 'name' => 'Micronesia, Federated States of'],\n        ['code' => 'MD', 'name' => 'Moldova, Republic of'],\n        ['code' => 'MC', 'name' => 'Monaco'],\n        ['code' => 'MN', 'name' => 'Mongolia'],\n        ['code' => 'ME', 'name' => 'Montenegro'],\n        ['code' => 'MS', 'name' => 'Montserrat'],\n        ['code' => 'MA', 'name' => 'Morocco'],\n        ['code' => 'MZ', 'name' => 'Mozambique'],\n        ['code' => 'MM', 'name' => 'Myanmar'],\n        ['code' => 'NA', 'name' => 'Namibia'],\n        ['code' => 'NR', 'name' => 'Nauru'],\n        ['code' => 'NP', 'name' => 'Nepal'],\n        ['code' => 'NC', 'name' => 'New Caledonia'],\n        ['code' => 'NI', 'name' => 'Nicaragua'],\n        ['code' => 'NE', 'name' => 'Niger'],\n        ['code' => 'NG', 'name' => 'Nigeria'],\n        ['code' => 'NU', 'name' => 'Niue'],\n        ['code' => 'NF', 'name' => 'Norfolk Island'],\n        ['code' => 'MP', 'name' => 'Northern Mariana Islands'],\n        ['code' => 'OM', 'name' => 'Oman'],\n        ['code' => 'PK', 'name' => 'Pakistan'],\n        ['code' => 'PW', 'name' => 'Palau'],\n        ['code' => 'PS', 'name' => 'Palestinian Territory, Occupied'],\n        ['code' => 'PA', 'name' => 'Panama'],\n        ['code' => 'PG', 'name' => 'Papua New Guinea'],\n        ['code' => 'PY', 'name' => 'Paraguay'],\n        ['code' => 'PE', 'name' => 'Peru'],\n        ['code' => 'PH', 'name' => 'Philippines'],\n        ['code' => 'PN', 'name' => 'Pitcairn'],\n        ['code' => 'PL', 'name' => 'Poland'],\n        ['code' => 'PR', 'name' => 'Puerto Rico'],\n        ['code' => 'QA', 'name' => 'Qatar'],\n        ['code' => 'RE', 'name' => 'Reunion'],\n        ['code' => 'RO', 'name' => 'Romania'],\n        ['code' => 'RW', 'name' => 'Rwanda'],\n        ['code' => 'BL', 'name' => 'Saint Barthélemy'],\n        ['code' => 'SH', 'name' => 'Saint Helena'],\n        ['code' => 'KN', 'name' => 'Saint Kitts and Nevis'],\n        ['code' => 'LC', 'name' => 'Saint Lucia'],\n        ['code' => 'MF', 'name' => 'Saint Martin (French part)'],\n        ['code' => 'PM', 'name' => 'Saint Pierre and Miquelon'],\n        ['code' => 'VC', 'name' => 'Saint Vincent and the Grenadines'],\n        ['code' => 'WS', 'name' => 'Samoa'],\n        ['code' => 'SM', 'name' => 'San Marino'],\n        ['code' => 'ST', 'name' => 'Sao Tome and Principe'],\n        ['code' => 'SA', 'name' => 'Saudi Arabia'],\n        ['code' => 'SN', 'name' => 'Senegal'],\n        ['code' => 'RS', 'name' => 'Serbia'],\n        ['code' => 'SC', 'name' => 'Seychelles'],\n        ['code' => 'SL', 'name' => 'Sierra Leone'],\n        ['code' => 'SG', 'name' => 'Singapore'],\n        ['code' => 'SX', 'name' => 'Sint Maarten (Dutch part)'],\n        ['code' => 'SK', 'name' => 'Slovakia'],\n        ['code' => 'SI', 'name' => 'Slovenia'],\n        ['code' => 'SB', 'name' => 'Solomon Islands'],\n        ['code' => 'SO', 'name' => 'Somalia'],\n        ['code' => 'ZA', 'name' => 'South Africa'],\n        ['code' => 'GS', 'name' => 'South Georgia and the South Sandwich Islands'],\n        ['code' => 'LK', 'name' => 'Sri Lanka'],\n        ['code' => 'SD', 'name' => 'Sudan'],\n        ['code' => 'SR', 'name' => 'Suriname'],\n        ['code' => 'SJ', 'name' => 'Svalbard and Jan Mayen'],\n        ['code' => 'SZ', 'name' => 'Swaziland'],\n        ['code' => 'SY', 'name' => 'Syrian Arab Republic'],\n        ['code' => 'TW', 'name' => 'Taiwan, Province of China'],\n        ['code' => 'TJ', 'name' => 'Tajikistan'],\n        ['code' => 'TZ', 'name' => 'Tanzania, United Republic of'],\n        ['code' => 'TH', 'name' => 'Thailand'],\n        ['code' => 'TL', 'name' => 'Timor-Leste'],\n        ['code' => 'TG', 'name' => 'Togo'],\n        ['code' => 'TK', 'name' => 'Tokelau'],\n        ['code' => 'TO', 'name' => 'Tonga'],\n        ['code' => 'TT', 'name' => 'Trinidad and Tobago'],\n        ['code' => 'TN', 'name' => 'Tunisia'],\n        ['code' => 'TR', 'name' => 'Turkey'],\n        ['code' => 'TM', 'name' => 'Turkmenistan'],\n        ['code' => 'TC', 'name' => 'Turks and Caicos Islands'],\n        ['code' => 'TV', 'name' => 'Tuvalu'],\n        ['code' => 'UG', 'name' => 'Uganda'],\n        ['code' => 'UA', 'name' => 'Ukraine'],\n        ['code' => 'AE', 'name' => 'United Arab Emirates'],\n        ['code' => 'UM', 'name' => 'United States Minor Outlying Islands'],\n        ['code' => 'UY', 'name' => 'Uruguay'],\n        ['code' => 'UZ', 'name' => 'Uzbekistan'],\n        ['code' => 'VU', 'name' => 'Vanuatu'],\n        ['code' => 'VE', 'name' => 'Venezuela, Bolivarian Republic of'],\n        ['code' => 'VN', 'name' => 'Viet Nam'],\n        ['code' => 'VG', 'name' => 'Virgin Islands, British'],\n        ['code' => 'VI', 'name' => 'Virgin Islands, U.S.'],\n        ['code' => 'WF', 'name' => 'Wallis and Futuna'],\n        ['code' => 'EH', 'name' => 'Western Sahara'],\n        ['code' => 'YE', 'name' => 'Yemen'],\n        ['code' => 'ZM', 'name' => 'Zambia'],\n        ['code' => 'ZW', 'name' => 'Zimbabwe'],\n    ];\n\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Country::insert($this->countries);\n    }\n}\n"
  },
  {
    "path": "database/seeders/DatabaseSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Article;\nuse App\\Models\\Bill;\nuse App\\Models\\Category;\nuse App\\Models\\Meeting;\nuse App\\Models\\MenuItem;\nuse App\\Models\\Monster;\nuse App\\Models\\Page;\nuse App\\Models\\PostalBoxer;\nuse App\\Models\\Product;\nuse App\\Models\\Recommend;\nuse App\\Models\\Tag;\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->call([\n            IconsTableSeeder::class,\n            \\Backpack\\Settings\\database\\seeds\\SettingsTableSeeder::class,\n            PermissionManagerTablesSeeder::class,\n            UsersTableSeeder::class,\n            CountryTableSeeder::class,\n            UniversesSeeder::class,\n            PetShopSeeder::class,\n        ]);\n\n        // Faker factories\n        Recommend::factory()->count(30)->create();\n\n        PostalBoxer::factory()->count(30)->create();\n\n        Bill::factory()->count(30)->create();\n\n        Tag::factory()->count(21)->create();\n\n        Category::factory()->count(40)->create();\n\n        Article::factory()->count(1031)->create();\n\n        Product::factory()->count(210)->create();\n\n        Monster::factory()->count(140)->create();\n\n        Page::factory()->count(16)->create();\n\n        MenuItem::factory()->count(7)->create();\n\n        Meeting::factory()->count(50)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/HeroSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Hero;\nuse Illuminate\\Database\\Seeder;\n\nclass HeroSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Hero::factory()->count(5)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/IconsTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Icon;\nuse Illuminate\\Database\\Seeder;\n\nclass IconsTableSeeder extends Seeder\n{\n    protected $icons = [\n        [\n            'name' => 'Tao',\n            'icon' => 'fa-fas fa-adjust',\n        ],\n        [\n            'name' => 'Left',\n            'icon' => 'fa-fas fa-angle-left',\n        ],\n        [\n            'name' => 'Right',\n            'icon' => 'fa-fas fa-angle-right',\n        ],\n        [\n            'name' => 'Home page',\n            'icon' => 'fa-fas fa-home',\n        ],\n    ];\n\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        foreach ($this->icons as $icon) {\n            Icon::create($icon);\n        }\n\n        $entry = Icon::find(rand(1, 4));\n        $entry->name = 'Archive';\n        $entry->icon = 'fa-fas fa-archive';\n        $entry->save();\n    }\n}\n"
  },
  {
    "path": "database/seeders/InvoiceItemSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\InvoiceItem;\nuse Illuminate\\Database\\Seeder;\n\nclass InvoiceItemSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        InvoiceItem::factory()->count(5)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/InvoiceSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\Invoice;\nuse Illuminate\\Database\\Seeder;\n\nclass InvoiceSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Invoice::factory()->count(5)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/MeetingSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Meeting;\nuse Illuminate\\Database\\Seeder;\n\nclass MeetingSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        Meeting::factory()->count(5)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/MillionCommentsSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\Owner;\nuse App\\Models\\PetShop\\Pet;\nuse Faker\\Generator;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass MillionCommentsSeeder extends Seeder\n{\n    public $faker;\n    public $owners;\n    public $pets;\n    public $texts;\n\n    public function __construct()\n    {\n        $this->faker = app()->make(Generator::class);\n        $this->owners = Owner::all();\n        $this->pets = Pet::all();\n    }\n\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        DB::disableQueryLog();\n        DB::beginTransaction();\n\n        for ($i = 1; $i <= 100; $i++) {\n            $body = $this->faker->text;\n            $commentable = $i % 2 == 0 ? $this->owners->random() : $this->pets->random();\n            $commentable_type = get_class($commentable);\n            $commentable_id = $commentable->getKey();\n\n            $comments = array_fill(0, 100, [\n                'body'             => $body,\n                'commentable_type' => $commentable_type,\n                'commentable_id'   => $commentable_id,\n                'user_id'          => rand(1, 50),\n            ]);\n\n            DB::table('comments')->insertOrIgnore($comments);\n        }\n\n        DB::commit();\n        DB::enableQueryLog();\n    }\n}\n"
  },
  {
    "path": "database/seeders/OwnerSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\Invoice;\nuse App\\Models\\PetShop\\InvoiceItem;\nuse App\\Models\\PetShop\\Owner;\nuse Carbon\\CarbonImmutable;\nuse Faker\\Generator;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Arr;\n\nclass OwnerSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $faker = app()->make(Generator::class);\n\n        Owner::factory()->count(5)->create();\n\n        $owners = Owner::all();\n\n        foreach ($owners as $owner) {\n            // owner avatars\n            $avatar = rand(1, 2);\n            $owner->avatar()->create([\n                'url' => 'uploads/person'.$avatar.'.jpg',\n            ]);\n\n            // owner invoices\n            $invoices = rand(1, 3);\n            while ($invoices) {\n                $inssuanceDate = CarbonImmutable::parse($faker->dateTimeThisDecade());\n                $dueDate = $inssuanceDate->addMonths(1);\n                $invoice = Invoice::create([\n                    'owner_id'      => $owner->id,\n                    'series'        => Arr::random(['SRV', 'PRD']),\n                    'number'        => $faker->numerify('####'),\n                    'issuance_date' => $inssuanceDate->toDateString(),\n                    'due_date'      => $dueDate->addDays(15)->toDateString(),\n\n                ]);\n                // invoice items\n                $invoiceItems = rand(2, 5);\n                while ($invoiceItems) {\n                    InvoiceItem::create([\n                        'invoice_id'  => $invoice->id,\n                        'order'       => $faker->randomNumber(2),\n                        'description' => $faker->text,\n                        'quantity'    => $faker->randomFloat(0, 0, 999),\n                        'unit_price'  => $faker->randomFloat(0, 0, 9999),\n                    ]);\n                    $invoiceItems--;\n                }\n                $invoices--;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/PassportSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\Passport;\nuse Illuminate\\Database\\Seeder;\n\nclass PassportSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Passport::factory()->count(5)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/PermissionManagerTablesSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Backpack\\PermissionManager\\app\\Models\\Permission;\nuse Backpack\\PermissionManager\\app\\Models\\Role;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Facades\\Config;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass PermissionManagerTablesSeeder extends Seeder\n{\n    protected $roles = [\n        'superadmin',\n        'admin',\n        'member',\n    ];\n\n    protected $permissionsRoles = [\n        'manage news'        => [1, 2],\n        'manage pages'       => [1, 2],\n        'manage menu items'  => [1, 2],\n        'manage users'       => [1, 2],\n        'manage roles'       => [1],\n        'manage permissions' => [1],\n        'file manager'       => [1, 2],\n        'logs'               => [1],\n        'backups'            => [1],\n    ];\n\n    /**\n     * Disable foreign key checks based on database driver.\n     */\n    protected function disableForeignKeyChecks()\n    {\n        $driver = DB::getDriverName();\n\n        switch ($driver) {\n            case 'mysql':\n                DB::statement('SET FOREIGN_KEY_CHECKS=0;');\n                break;\n            case 'sqlite':\n                DB::statement('PRAGMA foreign_keys=OFF;');\n                break;\n            case 'pgsql':\n                // PostgreSQL doesn't have a global setting, would need to defer constraints\n                break;\n        }\n    }\n\n    /**\n     * Enable foreign key checks based on database driver.\n     */\n    protected function enableForeignKeyChecks()\n    {\n        $driver = DB::getDriverName();\n\n        switch ($driver) {\n            case 'mysql':\n                DB::statement('SET FOREIGN_KEY_CHECKS=1;');\n                break;\n            case 'sqlite':\n                DB::statement('PRAGMA foreign_keys=ON;');\n                break;\n            case 'pgsql':\n                // PostgreSQL doesn't have a global setting, would need to defer constraints\n                break;\n        }\n    }\n\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->disableForeignKeyChecks();\n\n        DB::table(Config::get('permission.table_names.model_has_roles'))->truncate();\n        DB::table(Config::get('permission.table_names.role_has_permissions'))->truncate();\n        Permission::truncate();\n        Role::truncate();\n\n        $this->enableForeignKeyChecks();\n\n        foreach ($this->roles as $role) {\n            Role::create(['name' => $role, 'guard_name' => 'web']);\n        }\n\n        foreach ($this->permissionsRoles as $permission => $roles) {\n            Permission::create(['name' => $permission, 'guard_name' => 'web'])->roles()->sync($roles);\n        }\n\n        // Super admin on first user\n        Role::find(1)->users()->sync([1]);\n    }\n}\n"
  },
  {
    "path": "database/seeders/PetSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\Pet;\nuse Illuminate\\Database\\Seeder;\n\nclass PetSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Pet::factory()->count(30)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/PetShopSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\Badge;\nuse App\\Models\\PetShop\\Comment;\nuse App\\Models\\PetShop\\Owner;\nuse App\\Models\\PetShop\\Pet;\nuse App\\Models\\PetShop\\Skill;\nuse Carbon\\CarbonImmutable;\nuse Faker\\Generator;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Arr;\n\nclass PetShopSeeder extends Seeder\n{\n    private $ownerRoles = ['Owner', 'Caretaker', 'Traineer'];\n\n    private $petSpeciesAndBreeds = [\n        'Dog'  => ['Yorkshire', 'Bulldog', 'Bull Terrier'],\n        'Cat'  => ['Sphynx', 'Persa', 'Ragdoll'],\n        'Bird' => ['Pidgeon', 'Parrot'],\n    ];\n\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $faker = app()->make(Generator::class);\n\n        $this->call(PetSeeder::class);\n        $this->call(OwnerSeeder::class);\n        $this->call(SkillSeeder::class);\n        $this->call(BadgeSeeder::class);\n        $this->call(MillionCommentsSeeder::class);\n\n        $pets = Pet::all();\n        $owners = Owner::all();\n        $skills = Skill::all();\n        $badges = Badge::all();\n\n        // deal with pet stuff\n        foreach ($pets as $pet) {\n            // add one owner for the pet owners list\n            $owner = $owners->random();\n            $pet->owners()->sync([$owner->id => ['role' => Arr::random($this->ownerRoles)]]);\n\n            // add 1-3 skills for each pet\n            $petSkills = $skills->random(rand(1, 3))->pluck('id')->toArray();\n            $pet->skills()->sync($petSkills);\n\n            // add the pet passport\n            $petSpecie = array_rand($this->petSpeciesAndBreeds, 1);\n            $petBreed = Arr::random($this->petSpeciesAndBreeds[$petSpecie]);\n            $birthDate = CarbonImmutable::parse($faker->dateTimeThisDecade());\n            $passportDate = $birthDate->addDays(rand(11, 25));\n            $passportExpiryDate = $passportDate->addYears(5);\n\n            $pet->passport()->create([\n                'number'        => $faker->ean13(),\n                'issuance_date' => $passportDate->toDateString(),\n                'expiry_date'   => $passportExpiryDate->toDateString(),\n                'first_name'    => $faker->firstName,\n                'middle_name'   => $faker->word,\n                'last_name'     => $faker->lastName,\n                'birth_date'    => $birthDate->toDateString(),\n                'species'       => $petSpecie,\n                'breed'         => $petBreed,\n                'colour'        => $faker->colorName(),\n                'notes'         => $faker->text,\n                'country'       => $faker->country,\n            ]);\n\n            // add the avatar\n            $avatar = rand(1, 3);\n            $pet->avatar()->create([\n                'url' => 'uploads/animal'.$avatar.'.jpg',\n            ]);\n\n            // add comments\n            $comments = rand(1, 5);\n            while ($comments) {\n                Comment::create([\n                    'body'             => $faker->text,\n                    'commentable_type' => get_class($pet),\n                    'commentable_id'   => $pet->id,\n                    'user_id'          => 1,\n                ]);\n                $comments--;\n            }\n\n            // add badges\n            $petBadges = [];\n            $badgesToAdd = array_map(function ($badge) use ($faker) {\n                return [$badge => ['note' => $faker->sentence]];\n            }, $badges->random(3)->pluck('id')->toArray());\n            foreach ($badgesToAdd as $badge) {\n                $petBadges[array_key_first($badge)] = $badge[array_key_first($badge)];\n            }\n            $pet->badges()->sync($petBadges);\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeders/ReportDemoSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Monster;\nuse App\\Models\\PetShop\\Invoice;\nuse App\\Models\\PetShop\\InvoiceItem;\nuse App\\Models\\PetShop\\Owner;\nuse App\\Models\\Product;\nuse Backpack\\NewsCRUD\\app\\Models\\Category;\nuse Carbon\\Carbon;\nuse Carbon\\CarbonPeriod;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Arr;\n\n/**\n * Seeds realistic time-distributed data for Invoices, Monsters, and Products\n * so that the Report Operation pages look impressive with trends, comparisons,\n * and meaningful date-range / interval testing.\n *\n * Run with: php artisan db:seed --class=ReportDemoSeeder\n */\nclass ReportDemoSeeder extends Seeder\n{\n    public function run(): void\n    {\n        $this->command?->info('Seeding report demo data...');\n\n        $this->seedInvoices();\n        $this->seedMonsters();\n        $this->seedProducts();\n\n        $this->command?->info('Report demo data seeded successfully!');\n    }\n\n    // ─── INVOICES ────────────────────────────────────────────────────────\n\n    private function seedInvoices(): void\n    {\n        $this->command?->info('  → Invoices & Invoice Items...');\n\n        // Ensure we have owners to attach invoices to\n        $ownerIds = Owner::pluck('id')->toArray();\n        if (count($ownerIds) < 10) {\n            Owner::factory()->count(10 - count($ownerIds))->create();\n            $ownerIds = Owner::pluck('id')->toArray();\n        }\n\n        $faker = fake();\n        $series = ['SRV', 'PRD', 'WEB', 'CON'];\n        $itemDescriptions = [\n            'Consultation fee', 'Vaccination', 'Grooming service', 'Pet food (premium)',\n            'Medication', 'Surgery', 'X-Ray', 'Blood test', 'Dental cleaning',\n            'Boarding (per night)', 'Training session', 'Microchip implant',\n            'Nail trimming', 'Flea treatment', 'Pet insurance premium',\n        ];\n\n        $period = CarbonPeriod::create(\n            Carbon::now()->subMonths(24)->startOfMonth(),\n            '1 day',\n            Carbon::now()\n        );\n\n        $invoiceNumber = Invoice::max('number') ?? 1000;\n        $invoices = [];\n        $items = [];\n        $now = Carbon::now()->format('Y-m-d H:i:s');\n\n        foreach ($period as $day) {\n            // More invoices on weekdays, seasonal bump in spring/summer\n            $month = (int) $day->format('m');\n            $dayOfWeek = (int) $day->format('N'); // 1=Mon, 7=Sun\n\n            $baseRate = 3;\n            // Seasonal: more activity in spring (Mar-May) and winter holidays (Nov-Dec)\n            if (in_array($month, [3, 4, 5])) {\n                $baseRate = 5;\n            } elseif (in_array($month, [11, 12])) {\n                $baseRate = 6;\n            } elseif (in_array($month, [7, 8])) {\n                $baseRate = 4;\n            }\n\n            // Weekends are quieter\n            if ($dayOfWeek >= 6) {\n                $baseRate = max(1, intdiv($baseRate, 2));\n            }\n\n            // Add growth trend: more recent = slightly more invoices\n            $monthsAgo = Carbon::now()->diffInMonths($day);\n            $growthMultiplier = 1 + (24 - $monthsAgo) * 0.015; // ~1.0 to ~1.36\n            $count = max(0, (int) round($baseRate * $growthMultiplier + rand(-1, 2)));\n\n            for ($i = 0; $i < $count; $i++) {\n                $invoiceNumber++;\n                $issuanceDate = $day->copy()->addHours(rand(8, 18))->addMinutes(rand(0, 59));\n                $dueDate = $issuanceDate->copy()->addDays(rand(7, 30));\n                $createdAt = $issuanceDate->format('Y-m-d H:i:s');\n\n                $invoiceId = null;\n                $invoices[] = [\n                    'owner_id'      => Arr::random($ownerIds),\n                    'series'        => Arr::random($series),\n                    'number'        => $invoiceNumber,\n                    'issuance_date' => $issuanceDate->format('Y-m-d'),\n                    'due_date'      => $dueDate->format('Y-m-d'),\n                    'created_at'    => $createdAt,\n                    'updated_at'    => $createdAt,\n                ];\n            }\n        }\n\n        // Bulk insert invoices in chunks\n        foreach (array_chunk($invoices, 500) as $chunk) {\n            Invoice::insert($chunk);\n        }\n\n        // Now create items for the newly created invoices\n        $newInvoices = Invoice::where('number', '>', 1000)\n            ->select('id', 'issuance_date')\n            ->get();\n\n        foreach ($newInvoices as $invoice) {\n            $itemCount = rand(1, 5);\n            for ($j = 1; $j <= $itemCount; $j++) {\n                $quantity = rand(1, 4);\n                $unitPrice = Arr::random([15, 25, 35, 50, 75, 100, 150, 200, 299, 499]);\n                $items[] = [\n                    'invoice_id'  => $invoice->id,\n                    'order'       => $j,\n                    'description' => Arr::random($itemDescriptions),\n                    'quantity'    => $quantity,\n                    'unit_price'  => $unitPrice,\n                    'created_at'  => $invoice->issuance_date.' 12:00:00',\n                    'updated_at'  => $invoice->issuance_date.' 12:00:00',\n                ];\n            }\n        }\n\n        foreach (array_chunk($items, 500) as $chunk) {\n            InvoiceItem::insert($chunk);\n        }\n\n        $this->command?->info('    ✓ '.count($invoices).' invoices with '.count($items).' items');\n    }\n\n    // ─── MONSTERS ────────────────────────────────────────────────────────\n\n    private function seedMonsters(): void\n    {\n        $this->command?->info('  → Monsters...');\n\n        $faker = fake();\n        $statuses = ['working', 'not-working', 'dont-know'];\n        $statusWeights = [60, 25, 15]; // working is most common\n\n        $period = CarbonPeriod::create(\n            Carbon::now()->subMonths(24)->startOfMonth(),\n            '1 day',\n            Carbon::now()\n        );\n\n        $monsters = [];\n\n        foreach ($period as $day) {\n            $month = (int) $day->format('m');\n            $dayOfWeek = (int) $day->format('N');\n\n            // Base: 1-2 monsters per day, with some variation\n            $baseRate = 2;\n\n            // Seasonal spikes\n            if (in_array($month, [1, 2])) {\n                $baseRate = 3; // New year burst\n            } elseif (in_array($month, [6, 7])) {\n                $baseRate = 1; // Summer dip\n            } elseif ($month === 10) {\n                $baseRate = 4; // Halloween spike!\n            }\n\n            // Growth trend\n            $monthsAgo = Carbon::now()->diffInMonths($day);\n            $growthMultiplier = 1 + (24 - $monthsAgo) * 0.02;\n            $count = max(0, (int) round($baseRate * $growthMultiplier + rand(-1, 1)));\n\n            for ($i = 0; $i < $count; $i++) {\n                $createdAt = $day->copy()->addHours(rand(0, 23))->addMinutes(rand(0, 59))->addSeconds(rand(0, 59));\n\n                // Weighted random status\n                $roll = rand(1, 100);\n                if ($roll <= $statusWeights[0]) {\n                    $status = $statuses[0];\n                } elseif ($roll <= $statusWeights[0] + $statusWeights[1]) {\n                    $status = $statuses[1];\n                } else {\n                    $status = $statuses[2];\n                }\n\n                $number = rand(1, 10000);\n                $ts = $createdAt->format('Y-m-d H:i:s');\n\n                $monsters[] = [\n                    'text'                    => $faker->unique()->sentence(rand(3, 6)),\n                    'textarea'                => $faker->text(200),\n                    'email'                   => $faker->email(),\n                    'number'                  => $number,\n                    'float'                   => round($faker->randomFloat(2, 0, 1000), 2),\n                    'status'                  => $status,\n                    'checkbox'                => rand(0, 1),\n                    'date'                    => $createdAt->format('Y-m-d'),\n                    'datetime'                => $ts,\n                    'start_date'              => $createdAt->format('Y-m-d'),\n                    'end_date'                => $createdAt->copy()->addDays(rand(1, 90))->format('Y-m-d'),\n                    'select'                  => null,\n                    'icon_id'                 => null,\n                    'belongs_to_non_nullable' => 0,\n                    'created_at'              => $ts,\n                    'updated_at'              => $ts,\n                ];\n            }\n        }\n\n        foreach (array_chunk($monsters, 500) as $chunk) {\n            Monster::insert($chunk);\n        }\n\n        $this->command?->info('    ✓ '.count($monsters).' monsters');\n    }\n\n    // ─── PRODUCTS ────────────────────────────────────────────────────────\n\n    private function seedProducts(): void\n    {\n        $this->command?->info('  → Products...');\n\n        $faker = fake();\n        $statuses = ['in-stock', 'out-of-stock', 'on-hold'];\n        $conditions = ['NEW', 'USED', 'BROKEN'];\n\n        $categoryIds = Category::pluck('id')->toArray();\n        if (empty($categoryIds)) {\n            Category::factory()->count(10)->create();\n            $categoryIds = Category::pluck('id')->toArray();\n        }\n\n        $productNames = [\n            'Widget', 'Gadget', 'Gizmo', 'Thingamajig', 'Doohickey',\n            'Contraption', 'Apparatus', 'Device', 'Mechanism', 'Instrument',\n            'Module', 'Component', 'Unit', 'Assembly', 'Kit',\n            'Tool', 'Accessory', 'Attachment', 'Adapter', 'Connector',\n        ];\n\n        $adjectives = [\n            'Premium', 'Deluxe', 'Ultra', 'Pro', 'Basic', 'Advanced',\n            'Compact', 'Heavy-Duty', 'Lightweight', 'Portable', 'Smart',\n            'Digital', 'Analog', 'Wireless', 'Turbo', 'Eco', 'Mini', 'Mega',\n        ];\n\n        $period = CarbonPeriod::create(\n            Carbon::now()->subMonths(24)->startOfMonth(),\n            '1 day',\n            Carbon::now()\n        );\n\n        $products = [];\n\n        foreach ($period as $day) {\n            $month = (int) $day->format('m');\n\n            // Products added more frequently over time (catalog growth)\n            $baseRate = 1;\n\n            // Q4 and Q1 see more product launches\n            if (in_array($month, [1, 10, 11, 12])) {\n                $baseRate = 2;\n            }\n\n            $monthsAgo = Carbon::now()->diffInMonths($day);\n            $growthMultiplier = 1 + (24 - $monthsAgo) * 0.025;\n            $count = max(0, (int) round($baseRate * $growthMultiplier + rand(-1, 1)));\n\n            for ($i = 0; $i < $count; $i++) {\n                $createdAt = $day->copy()->addHours(rand(8, 20))->addMinutes(rand(0, 59));\n                $ts = $createdAt->format('Y-m-d H:i:s');\n\n                // Price distribution: mostly mid-range, some cheap, some expensive\n                $priceRoll = rand(1, 100);\n                if ($priceRoll <= 20) {\n                    $price = rand(5, 50);       // budget\n                } elseif ($priceRoll <= 70) {\n                    $price = rand(50, 300);      // mid-range\n                } elseif ($priceRoll <= 90) {\n                    $price = rand(300, 800);     // premium\n                } else {\n                    $price = rand(800, 2500);    // luxury\n                }\n\n                // Status weighted: 60% in-stock, 25% out-of-stock, 15% on-hold\n                $statusRoll = rand(1, 100);\n                if ($statusRoll <= 60) {\n                    $status = 'in-stock';\n                } elseif ($statusRoll <= 85) {\n                    $status = 'out-of-stock';\n                } else {\n                    $status = 'on-hold';\n                }\n\n                // Condition weighted: 70% new, 20% used, 10% broken\n                $conditionRoll = rand(1, 100);\n                if ($conditionRoll <= 70) {\n                    $condition = 'NEW';\n                } elseif ($conditionRoll <= 90) {\n                    $condition = 'USED';\n                } else {\n                    $condition = 'BROKEN';\n                }\n\n                $name = Arr::random($adjectives).' '.Arr::random($productNames).' #'.rand(10000, 99999).'-'.rand(100, 999);\n\n                $products[] = [\n                    'name'        => json_encode(['en' => $name]),\n                    'description' => json_encode(['en' => $faker->sentence(10)]),\n                    'details'     => json_encode(['en' => $faker->paragraph(3)]),\n                    'price'       => $price,\n                    'category_id' => Arr::random($categoryIds),\n                    'status'      => $status,\n                    'condition'   => $condition,\n                    'created_at'  => $ts,\n                    'updated_at'  => $ts,\n                ];\n            }\n        }\n\n        foreach (array_chunk($products, 500) as $chunk) {\n            Product::insert($chunk);\n        }\n\n        $this->command?->info('    ✓ '.count($products).' products');\n    }\n}\n"
  },
  {
    "path": "database/seeders/SkillSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\PetShop\\Skill;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Carbon;\n\nclass SkillSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $skills = ['Jump', 'Sit', 'Bark', 'Lay Down', 'Fly', 'Run'];\n        Skill::insert(array_map(function ($skill) { return ['name' => $skill, 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()]; }, $skills));\n    }\n}\n"
  },
  {
    "path": "database/seeders/StorySeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Story;\nuse Illuminate\\Database\\Seeder;\n\nclass StorySeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Story::factory()->count(5)->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/UniversesSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Universe;\nuse Illuminate\\Database\\Seeder;\n\nclass UniversesSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Universe::insert([\n            [\n                'title'            => 'universe 1',\n                'universable_type' => '',\n                'universable_id'   => 0,\n            ],\n            [\n                'title'            => 'universe 2',\n                'universable_type' => '',\n                'universable_id'   => 0,\n            ],\n            [\n                'title'            => 'universe 3',\n                'universable_type' => '',\n                'universable_id'   => 0,\n            ],\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/seeders/UsersTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\User;\nuse Illuminate\\Database\\Seeder;\n\nclass UsersTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        User::truncate();\n\n        // Create admin\n        User::create([\n            'name'              => 'Demo Admin',\n            'email'             => 'admin@example.com',\n            'password'          => bcrypt('admin'),\n            'email_verified_at' => now(),\n        ]);\n\n        User::factory()->count(131)->create();\n    }\n}\n"
  },
  {
    "path": "docker/infra/certs/local-dev-key.pem",
    "content": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCwirez1D5LTCkc\nGRSRMWuG5iJTfh6mqFCqBgLKloSsOLLy+7KdmcvWFkNIxM9ceHTf+EDvsc4dCCpM\n9vClIZP1azX1DUJtng31bK+xIm30QeTg2ggPfM2OhPayN5lDgz48HZgN7anmEm53\nphhXtcLiU5jCX5LjgzN9MOgJ6JobixdBDlTvku69pvAw+pUd6eBsvBS+bjsDJyM7\n2dwRvANMWJEfsPFelXXpFEAopasprE7qJmO4U2V4KCc+1Z/BhdDvtB22qKqyyok2\nuhGJf1r2z4Grrt9W9pNmuel2UfjKpRX6jFUqPygcYqGXGE4eRy7nynj+BU2srm94\nAlcjsE9fAgMBAAECggEAD0uVauEinId2sFaD76hmdoONycoNgcbnZjOrHj44NGud\nJWwlJ35hqKS5I57ZkFtnVNg/WAUBpIZGk/B5HPVxyjuFqzuA29prvy2xcxlWiWkE\nGW8Kb70SWhyu+vXSM4U1aSPvPpWuuJ40L+2WAlNfFRjFDWIWadu+JESOdf1PDL+1\nZ58cRhEcKQS9hBrizPFgxb2QZa3gXQpdTwKXU8IsNKGocuX9tnZPQfctRkRNvHs6\nOX2ZEatXlcO/zD6heKHGYRypDUyX+WgtArMG1PS7Kuec253S0/bDxCMKXIGcGH/J\ncLgzyhp4D5odu6dCbdDz//i0WO3auNtLrMgntkDXYQKBgQDVVeDwIBSZ/QybisZF\n/1AsCAq5O7xYrIg0LkXqChzDHAm6taMNtZGbHY42dVP8ybnbAOkNrQrHGxB1MdrM\n5Q39FrWe+ctxNvAay6c+49Wtp9mqt2/CX3r+wJUhJAf+am7QTwCJglWW1Kz/RD61\nOFZMeoVxq/YgbjWyPh5axmyp1wKBgQDT2R6cNq3AaaLIZIpiEEFCGB8ASjwG0SHw\nV/mOAznl+td9kbXacTJ8jWAE8kdPqH4ZKkMU+PXImsz2T8dB/LGVIz/c4Tg9z+Mo\nw/tmK5a8NA2/AL/zIt/GSx+HsCjynbcKlY9hJfZGQNkxKtvZDXbjpcausojs6z3V\nHk4v1Z6luQKBgBQmTl6fyRJaUkyGqP+Hg90EzW59c+a0NREopbXbSqgrB8g4y7PJ\nyHzsJ7iBEHO54fILffeqtm/j4IQRN2dO4ylaccEYOtzwoXEGdz97aX1Dc02qkcW8\nGvPg4LUGoDKpftnx/E0AoHDkmYpqubmIHq6Oi/gWk+KwRiYVs+xC/ZR1AoGAbJ/z\nth3DUdnYgfArlMTI8V705m0qAkTRpi814r98vJO2UsiX+n34aS0EgwTH0+yNW9Hz\nu5k8TbQyTEnz3b34QIRmhpdlAyzJSWnUSjsnezElqz5zLfQ/0alLbYPCO0TrSh4N\n+r5AXR17QF69g7oHsAqcqY8Z7oFgnxp+9MAQLOECgYEA1IfgKXmUY10XK2GFPUl2\nYdxF9Bf0F1oCt8ExtY3bv8BXRcDgp7YaLk9uI9xWpXQ2Bv0sRSi+m8a9YYyrzeoL\neOaJ35qkxm2lUbDTSxk4g5VhF3Yfe4rQQUY5Hy49RKBzDIPstod34P5vnKd+zhzC\nrUE1ChWqXUJawuhVE3rg3MU=\n-----END PRIVATE KEY-----"
  },
  {
    "path": "docker/infra/certs/local-dev.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIIEbzCCAtegAwIBAgIQLnQ/klzIW/vkgsn5Oh1qITANBgkqhkiG9w0BAQsFADCB\nhTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMS0wKwYDVQQLDCRMQVBU\nT1AtTk5RNk5QOEpcQVNVU0BMQVBUT1AtTk5RNk5QOEoxNDAyBgNVBAMMK21rY2Vy\ndCBMQVBUT1AtTk5RNk5QOEpcQVNVU0BMQVBUT1AtTk5RNk5QOEowHhcNMjQwNzEx\nMDg1MTE4WhcNMjYxMDExMDg1MTE4WjBIMScwJQYDVQQKEx5ta2NlcnQgZGV2ZWxv\ncG1lbnQgY2VydGlmaWNhdGUxHTAbBgNVBAsMFHB4cG1ATEFQVE9QLU5OUTZOUDhK\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsIq3s9Q+S0wpHBkUkTFr\nhuYiU34epqhQqgYCypaErDiy8vuynZnL1hZDSMTPXHh03/hA77HOHQgqTPbwpSGT\n9Ws19Q1CbZ4N9WyvsSJt9EHk4NoID3zNjoT2sjeZQ4M+PB2YDe2p5hJud6YYV7XC\n4lOYwl+S44MzfTDoCeiaG4sXQQ5U75LuvabwMPqVHengbLwUvm47AycjO9ncEbwD\nTFiRH7DxXpV16RRAKKWrKaxO6iZjuFNleCgnPtWfwYXQ77QdtqiqssqJNroRiX9a\n9s+Bq67fVvaTZrnpdlH4yqUV+oxVKj8oHGKhlxhOHkcu58p4/gVNrK5veAJXI7BP\nXwIDAQABo4GWMIGTMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcD\nATAfBgNVHSMEGDAWgBT8EZlbG4vysChbCCfU5S4B8n7ENzBLBgNVHREERDBCggVs\nb2NhbIILKi5kZW1vLnRlc3SCCWRlbW8udGVzdIIJbG9jYWxob3N0hwR/AAABhxAA\nAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBgQA1TSqxEkDYwBoQiwaC\nxmxWoJmd/q9XROXjReTKTpdSSXUCnWB45OmzzZGMtyOZIO1qJUOBRphVURjun3ut\ni2szlA+k1gLBihGm8jMJQ3C9epK3qwIOqATKBzdVCI/qncXKXbENCXsFwyLvvrrB\nWTeY0SsYaFq5kGm013Mx9TwGZbXNhC4P0d/a1+S2miR4Jssh9a5w+geDddWbePR3\nrv8HIn6BRlxUtaovBxGXP9KhHCz5YD64h1Tz7gs0KeIvudgRz9BHBEiAhrcQ4mLt\nEipQvluy31GOw23jE3WQyGFEa67VOu8oyNx6Hn5LARhut0T40yJ7suYkCHxpPxAk\nf5Ik2BQ41bmkk393OckilU6BH8zOLqWzcRChNtycPSl1nlQDtdJcRLYZfTd6XlwG\nudpbFujlhapJK1NkpoHKiPGBaKxfmaYAdi8gOPD9zQrnFtZcA1LDbP4Y0meB9tOH\nB+CfkWfG3vuCrCJG3oIiJfuUk1KXv8hVKXG09qCtBJ4+yFc=\n-----END CERTIFICATE-----"
  },
  {
    "path": "docker-compose.yml",
    "content": "services:\n  php:\n    build:\n      context: .\n      dockerfile: Dockerfile\n      target: development\n      args:\n        USER_ID: ${UID:-1000}\n        GROUP_ID: ${GID:-1000}\n    volumes:\n      - .:/var/www/html/\n    restart: unless-stopped\n    networks:\n      - development\n    ports:\n      - 80:8080\n      - 443:8443\n      - 5173:5173\n    depends_on:\n      - mariadb\n    environment:\n      SSL_MODE: \"full\"\n      SSL_CERTIFICATE_FILE: \"certs/local-dev.pem\"\n      SSL_PRIVATE_KEY_FILE: \"certs/local-dev-key.pem\"\n      # docker-php configs\n      AUTORUN_ENABLED: \"true\"\n      AUTORUN_LARAVEL_MIGRATION: \"true\"\n      AUTORUN_LARAVEL_CONFIG_CACHE: \"false\"\n      AUTORUN_LARAVEL_EVENT_CACHE: \"false\"\n      AUTORUN_LARAVEL_ROUTE_CACHE: \"false\"\n      AUTORUN_LARAVEL_STORAGE_LINK: \"true\"\n      AUTORUN_LARAVEL_VIEW_CACHE: \"false\"\n\n  mariadb:\n    image: mariadb:11\n    networks:\n      - development\n    volumes:\n      - ./_volumes/mysql/mysqsl_data:/var/lib/mysql\n    environment:\n        MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASSWORD}'\n        MYSQL_ROOT_HOST: \"%\"\n        MYSQL_DATABASE: '${DB_DATABASE}'\n        MYSQL_USER: '${DB_USERNAME}'\n        MYSQL_PASSWORD: '${DB_PASSWORD}'\n        MYSQL_ALLOW_EMPTY_PASSWORD: 'no'\n    ports:\n      - \"3306:3306\"\n\n  mailpit:\n      image: axllent/mailpit\n      networks:\n        - development\nnetworks:\n  development:"
  },
  {
    "path": "entrypoint.d/51-after.sh",
    "content": "#!/bin/sh\n\necho \"hey there after running laravel automations\""
  },
  {
    "path": "install.sh",
    "content": "#!/usr/bin/env bash\n\n# if env file exists abort\nif [ -f .env ]; then\n    echo \"Env file already exists. Use the start.sh script to start the project.\"\n    exit 1\nfi\n\n# copy the env file\ncp .env.docker.example .env\n\n# Install the dependencies\ncomposer install --no-interaction --ansi\n\n# remove backpack packages and install with --prefer-source so they are cloned from the git repositories\n# comment the following line if you are not a backpack maintainer.\nrm -rf vendor/backpack\n\ncomposer install --no-interaction --prefer-source --ansi\n\nphp artisan key:generate \n\nbash start.sh\n"
  },
  {
    "path": "lang/en/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'failed'   => 'These credentials do not match our records.',\n    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',\n\n];\n"
  },
  {
    "path": "lang/en/pagination.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; Previous',\n    'next'     => 'Next &raquo;',\n\n];\n"
  },
  {
    "path": "lang/en/passwords.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'password' => 'Passwords must be at least six characters and match the confirmation.',\n    'reset'    => 'Your password has been reset!',\n    'sent'     => 'We have e-mailed your password reset link!',\n    'token'    => 'This password reset token is invalid.',\n    'user'     => \"We can't find a user with that e-mail address.\",\n\n];\n"
  },
  {
    "path": "lang/en/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'   => 'The :attribute must be accepted.',\n    'active_url' => 'The :attribute is not a valid URL.',\n    'after'      => 'The :attribute must be a date after :date.',\n    'alpha'      => 'The :attribute may only contain letters.',\n    'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',\n    'alpha_num'  => 'The :attribute may only contain letters and numbers.',\n    'array'      => 'The :attribute must be an array.',\n    'before'     => 'The :attribute must be a date before :date.',\n    'between'    => [\n        'numeric' => 'The :attribute must be between :min and :max.',\n        'file'    => 'The :attribute must be between :min and :max kilobytes.',\n        'string'  => 'The :attribute must be between :min and :max characters.',\n        'array'   => 'The :attribute must have between :min and :max items.',\n    ],\n    'boolean'        => 'The :attribute field must be true or false.',\n    'confirmed'      => 'The :attribute confirmation does not match.',\n    'date'           => 'The :attribute is not a valid date.',\n    'date_format'    => 'The :attribute does not match the format :format.',\n    'different'      => 'The :attribute and :other must be different.',\n    'digits'         => 'The :attribute must be :digits digits.',\n    'digits_between' => 'The :attribute must be between :min and :max digits.',\n    'distinct'       => 'The :attribute field has a duplicate value.',\n    'email'          => 'The :attribute must be a valid email address.',\n    'exists'         => 'The selected :attribute is invalid.',\n    'filled'         => 'The :attribute field is required.',\n    'image'          => 'The :attribute must be an image.',\n    'in'             => 'The selected :attribute is invalid.',\n    'in_array'       => 'The :attribute field does not exist in :other.',\n    'integer'        => 'The :attribute must be an integer.',\n    'ip'             => 'The :attribute must be a valid IP address.',\n    'json'           => 'The :attribute must be a valid JSON string.',\n    'max'            => [\n        'numeric' => 'The :attribute may not be greater than :max.',\n        'file'    => 'The :attribute may not be greater than :max kilobytes.',\n        'string'  => 'The :attribute may not be greater than :max characters.',\n        'array'   => 'The :attribute may not have more than :max items.',\n    ],\n    'mimes' => 'The :attribute must be a file of type: :values.',\n    'min'   => [\n        'numeric' => 'The :attribute must be at least :min.',\n        'file'    => 'The :attribute must be at least :min kilobytes.',\n        'string'  => 'The :attribute must be at least :min characters.',\n        'array'   => 'The :attribute must have at least :min items.',\n    ],\n    'not_in'               => 'The selected :attribute is invalid.',\n    'numeric'              => 'The :attribute must be a number.',\n    'present'              => 'The :attribute field must be present.',\n    'regex'                => 'The :attribute format is invalid.',\n    'required'             => 'The :attribute field is required.',\n    'required_if'          => 'The :attribute field is required when :other is :value.',\n    'required_unless'      => 'The :attribute field is required unless :other is in :values.',\n    'required_with'        => 'The :attribute field is required when :values is present.',\n    'required_with_all'    => 'The :attribute field is required when :values is present.',\n    'required_without'     => 'The :attribute field is required when :values is not present.',\n    'required_without_all' => 'The :attribute field is required when none of :values are present.',\n    'same'                 => 'The :attribute and :other must match.',\n    'size'                 => [\n        'numeric' => 'The :attribute must be :size.',\n        'file'    => 'The :attribute must be :size kilobytes.',\n        'string'  => 'The :attribute must be :size characters.',\n        'array'   => 'The :attribute must contain :size items.',\n    ],\n    'string'   => 'The :attribute must be a string.',\n    'timezone' => 'The :attribute must be a valid zone.',\n    'unique'   => 'The :attribute has already been taken.',\n    'url'      => 'The :attribute format is invalid.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "lang/vendor/backpack/en/crud.php",
    "content": "<?php\n\nreturn [\n    // Confirmation messages and bubbles\n    'delete_confirm'                              => 'Are you sure you want to delete this item?',\n    'delete_confirmation_title'                   => 'Item Deleted',\n    'delete_confirmation_message'                 => 'The item has been deleted successfully.',\n    'delete_confirmation_not_title'               => 'Not Deleted',\n    'delete_confirmation_not_message'             => \"Deleting entries is disabled in the online demo. Dooh.\",\n    'delete_confirmation_not_deleted_title'       => 'Not deleted',\n    'delete_confirmation_not_deleted_message'     => 'Nothing happened. Your item is safe.',\n\n    // Bulk actions\n    'bulk_no_entries_selected_title'   => 'No entries selected',\n    'bulk_no_entries_selected_message' => 'Please select one or more items to perform a bulk action on them.',\n\n    // Bulk confirmation\n    'bulk_delete_are_you_sure'   => 'Are you sure you want to delete these :number entries?',\n    'bulk_delete_sucess_title'   => 'Entries deleted',\n    'bulk_delete_sucess_message' => ' items have been deleted',\n    'bulk_delete_error_title'    => 'Delete failed',\n    'bulk_delete_error_message'  => 'You can\\'t bulk delete items in the online Demo.',\n\n    // Ajax errors\n    'ajax_error_title' => 'Error',\n    'ajax_error_text'  => 'Error loading page. Please refresh the page.',\n];"
  },
  {
    "path": "lang/vendor/backpack/tr/crud.php",
    "content": "<?php\n\nreturn [\n    // Confirmation messages and bubbles\n    'delete_confirm'                              => 'Bu öğeyi silmek istediğinizden emin misiniz?',\n    'delete_confirmation_title'                   => 'Öğe Silindi',\n    'delete_confirmation_message'                 => 'Öğe başarıyla silindi.',\n    'delete_confirmation_not_title'               => 'Sillinmedi',\n    'delete_confirmation_not_message'             => \"Demo sürümde verileri silme devre dışı bırakılmıştır.\",\n    'delete_confirmation_not_deleted_title'       => 'Sillinmedi',\n    'delete_confirmation_not_deleted_message'     => 'Öğeniz silinmedi, güvende!',\n\n    // Bulk actions\n    'bulk_no_entries_selected_title'   => 'Hiç bir öğe seçilmedi',\n    'bulk_no_entries_selected_message' => 'Lütfen öğelerin üzerinde toplu işlem yapmak için bir veya daha fazla öğe seçin.',\n\n    // Bulk confirmation\n    'bulk_delete_are_you_sure'   => ':number adet öğeyi gerçekten silmek istediğinize eminmisiniz?',\n    'bulk_delete_sucess_title'   => 'Öğeler silindi',\n    'bulk_delete_sucess_message' => ' öğe silindi',\n    'bulk_delete_error_title'    => 'Silinemedi',\n    'bulk_delete_error_message'  => 'Demo sürümünde toplu olarak öğeleri silemezsiniz.',\n\n    // Ajax errors\n    'ajax_error_title' => 'Hata',\n    'ajax_error_text'  => 'Sayfa yüklenirken hata oluştu. Lütfen sayfayı yenileyin.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ar/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'رسالة استثناء: :message',\n    'exception_trace' => 'تتبع الإستثناء: :trace',\n    'exception_message_title' => 'رسالة استثناء',\n    'exception_trace_title' => 'تتبع الإستثناء',\n\n    'backup_failed_subject' => 'أخفق النسخ الاحتياطي لل :application_name',\n    'backup_failed_body' => 'مهم: حدث خطأ أثناء النسخ الاحتياطي :application_name',\n\n    'backup_successful_subject' => 'نسخ احتياطي جديد ناجح ل :application_name',\n    'backup_successful_subject_title' => 'نجاح النسخ الاحتياطي الجديد!',\n    'backup_successful_body' => 'أخبار عظيمة، نسخة احتياطية جديدة ل :application_name تم إنشاؤها بنجاح على القرص المسمى :disk_name.',\n\n    'cleanup_failed_subject' => 'فشل تنظيف النسخ الاحتياطي للتطبيق :application_name .',\n    'cleanup_failed_body' => 'حدث خطأ أثناء تنظيف النسخ الاحتياطية ل :application_name',\n\n    'cleanup_successful_subject' => 'تنظيف النسخ الاحتياطية ل :application_name تمت بنجاح',\n    'cleanup_successful_subject_title' => 'تنظيف النسخ الاحتياطية تم بنجاح!',\n    'cleanup_successful_body' => 'تنظيف النسخ الاحتياطية ل :application_name على القرص المسمى :disk_name تم بنجاح.',\n\n    'healthy_backup_found_subject' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name صحية',\n    'healthy_backup_found_subject_title' => 'النسخ الاحتياطية ل :application_name صحية',\n    'healthy_backup_found_body' => 'تعتبر النسخ الاحتياطية ل :application_name صحية. عمل جيد!',\n\n    'unhealthy_backup_found_subject' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية',\n    'unhealthy_backup_found_subject_title' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية. :problem',\n    'unhealthy_backup_found_body' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name غير صحية.',\n    'unhealthy_backup_found_not_reachable' => 'لا يمكن الوصول إلى وجهة النسخ الاحتياطي. :error',\n    'unhealthy_backup_found_empty' => 'لا توجد نسخ احتياطية لهذا التطبيق على الإطلاق.',\n    'unhealthy_backup_found_old' => 'تم إنشاء أحدث النسخ الاحتياطية في :date وتعتبر قديمة جدا.',\n    'unhealthy_backup_found_unknown' => 'عذرا، لا يمكن تحديد سبب دقيق.',\n    'unhealthy_backup_found_full' => 'النسخ الاحتياطية تستخدم الكثير من التخزين. الاستخدام الحالي هو :disk_usage وهو أعلى من الحد المسموح به من :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/bg/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Съобщение за изключение: :message',\n    'exception_trace' => 'Проследяване на изключение: :trace',\n    'exception_message_title' => 'Съобщение за изключение',\n    'exception_trace_title' => 'Проследяване на изключение',\n\n    'backup_failed_subject' => 'Неуспешно резервно копие на :application_name',\n    'backup_failed_body' => 'Важно: Възникна грешка при архивиране на :application_name',\n\n    'backup_successful_subject' => 'Успешно ново резервно копие на :application_name',\n    'backup_successful_subject_title' => 'Успешно ново резервно копие!',\n    'backup_successful_body' => 'Чудесни новини, ново резервно копие на :application_name беше успешно създадено на диска с име :disk_name.',\n\n    'cleanup_failed_subject' => 'Почистването на резервните копия на :application_name не бе успешно.',\n    'cleanup_failed_body' => 'Възникна грешка при почистването на резервните копия на :application_name',\n\n    'cleanup_successful_subject' => 'Почистването на архивите на :application_name е успешно',\n    'cleanup_successful_subject_title' => 'Почистването на резервните копия е успешно!',\n    'cleanup_successful_body' => 'Почистването на резервни копия на :application_name на диска с име :disk_name беше успешно.',\n\n    'healthy_backup_found_subject' => 'Резервните копия за :application_name на диск :disk_name са здрави',\n    'healthy_backup_found_subject_title' => 'Резервните копия за :application_name са здрави',\n    'healthy_backup_found_body' => 'Резервните копия за :application_name се считат за здрави. Добра работа!',\n\n    'unhealthy_backup_found_subject' => 'Важно: Резервните копия за :application_name не са здрави',\n    'unhealthy_backup_found_subject_title' => 'Важно: Резервните копия за :application_name не са здрави. :проблем',\n    'unhealthy_backup_found_body' => 'Резервните копия за :application_name на диск :disk_name не са здрави.',\n    'unhealthy_backup_found_not_reachable' => 'Дестинацията за резервни копия не може да бъде достигната. :грешка',\n    'unhealthy_backup_found_empty' => 'Изобщо няма резервни копия на това приложение.',\n    'unhealthy_backup_found_old' => 'Последното резервно копие, направено на :date, се счита за твърде старо.',\n    'unhealthy_backup_found_unknown' => 'За съжаление не може да се определи точна причина.',\n    'unhealthy_backup_found_full' => 'Резервните копия използват твърде много място за съхранение. Текущото използване е :disk_usage, което е по-високо от разрешеното ограничение на :disk_limit.',\n\n    'no_backups_info' => 'Все още не са правени резервни копия',\n    'application_name' => 'Име на приложението',\n    'backup_name' => 'Име на резервно копие',\n    'disk' => 'Диск',\n    'newest_backup_size' => 'Най-новият размер на резервно копие',\n    'number_of_backups' => 'Брой резервни копия',\n    'total_storage_used' => 'Общо използвано дисково пространство',\n    'newest_backup_date' => 'Най-нова дата на резервно копие',\n    'oldest_backup_date' => 'Най-старата дата на резервно копие',\n];\n"
  },
  {
    "path": "lang/vendor/backup/bn/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'এক্সসেপশন বার্তা: :message',\n    'exception_trace' => 'এক্সসেপশন ট্রেস: :trace',\n    'exception_message_title' => 'এক্সসেপশন message',\n    'exception_trace_title' => 'এক্সসেপশন ট্রেস',\n\n    'backup_failed_subject' => ':application_name এর ব্যাকআপ ব্যর্থ হয়েছে।',\n    'backup_failed_body' => 'গুরুত্বপূর্ণঃ :application_name ব্যাক আপ করার সময় একটি ত্রুটি ঘটেছে।',\n\n    'backup_successful_subject' => ':application_name এর নতুন ব্যাকআপ সফল হয়েছে।',\n    'backup_successful_subject_title' => 'নতুন ব্যাকআপ সফল হয়েছে!',\n    'backup_successful_body' => 'খুশির খবর, :application_name এর নতুন ব্যাকআপ :disk_name ডিস্কে সফলভাবে তৈরি হয়েছে।',\n\n    'cleanup_failed_subject' => ':application_name ব্যাকআপগুলি সাফ করতে ব্যর্থ হয়েছে।',\n    'cleanup_failed_body' => ':application_name ব্যাকআপগুলি সাফ করার সময় একটি ত্রুটি ঘটেছে।',\n\n    'cleanup_successful_subject' => ':application_name এর ব্যাকআপগুলি সফলভাবে সাফ করা হয়েছে।',\n    'cleanup_successful_subject_title' => 'ব্যাকআপগুলি সফলভাবে সাফ করা হয়েছে!',\n    'cleanup_successful_body' => ':application_name এর ব্যাকআপগুলি :disk_name ডিস্ক থেকে সফলভাবে সাফ করা হয়েছে।',\n\n    'healthy_backup_found_subject' => ':application_name এর ব্যাকআপগুলি :disk_name ডিস্কে স্বাস্থ্যকর অবস্থায় আছে।',\n    'healthy_backup_found_subject_title' => ':application_name এর ব্যাকআপগুলি স্বাস্থ্যকর অবস্থায় আছে।',\n    'healthy_backup_found_body' => ':application_name এর ব্যাকআপগুলি  স্বাস্থ্যকর বিবেচনা করা হচ্ছে। Good job!',\n\n    'unhealthy_backup_found_subject' => 'গুরুত্বপূর্ণঃ :application_name এর ব্যাকআপগুলি অস্বাস্থ্যকর অবস্থায় আছে।',\n    'unhealthy_backup_found_subject_title' => 'গুরুত্বপূর্ণঃ :application_name এর ব্যাকআপগুলি অস্বাস্থ্যকর অবস্থায় আছে। :problem',\n    'unhealthy_backup_found_body' => ':disk_name ডিস্কের :application_name এর ব্যাকআপগুলি অস্বাস্থ্যকর অবস্থায় আছে।',\n    'unhealthy_backup_found_not_reachable' => 'ব্যাকআপ গন্তব্যে পৌঁছানো যায় নি। :error',\n    'unhealthy_backup_found_empty' => 'এই অ্যাপ্লিকেশনটির কোনও ব্যাকআপ নেই।',\n    'unhealthy_backup_found_old' => 'সর্বশেষ ব্যাকআপ যেটি :date এই তারিখে করা হয়েছে, সেটি খুব পুরানো।',\n    'unhealthy_backup_found_unknown' => 'দুঃখিত, সঠিক কারণ নির্ধারণ করা সম্ভব হয়নি।',\n    'unhealthy_backup_found_full' => 'ব্যাকআপগুলি অতিরিক্ত স্টোরেজ ব্যবহার করছে। বর্তমান ব্যবহারের পরিমান :disk_usage যা অনুমোদিত সীমা :disk_limit এর বেশি।',\n\n    'no_backups_info' => 'কোনো ব্যাকআপ এখনও তৈরি হয়নি',\n    'application_name' => 'আবেদনের নাম',\n    'backup_name' => 'ব্যাকআপের নাম',\n    'disk' => 'ডিস্ক',\n    'newest_backup_size' => 'নতুন ব্যাকআপ আকার',\n    'number_of_backups' => 'ব্যাকআপের সংখ্যা',\n    'total_storage_used' => 'ব্যবহৃত মোট সঞ্চয়স্থান',\n    'newest_backup_date' => 'নতুন ব্যাকআপের তারিখ',\n    'oldest_backup_date' => 'পুরানো ব্যাকআপের তারিখ',\n];\n"
  },
  {
    "path": "lang/vendor/backup/cs/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Zpráva výjimky: :message',\n    'exception_trace' => 'Stopa výjimky: :trace',\n    'exception_message_title' => 'Zpráva výjimky',\n    'exception_trace_title' => 'Stopa výjimky',\n\n    'backup_failed_subject' => 'Záloha :application_name neuspěla',\n    'backup_failed_body' => 'Důležité: Při záloze :application_name se vyskytla chyba',\n\n    'backup_successful_subject' => 'Úspěšná nová záloha :application_name',\n    'backup_successful_subject_title' => 'Úspěšná nová záloha!',\n    'backup_successful_body' => 'Dobrá zpráva, na disku jménem :disk_name byla úspěšně vytvořena nová záloha :application_name.',\n\n    'cleanup_failed_subject' => 'Vyčištění záloh :application_name neuspělo.',\n    'cleanup_failed_body' => 'Při vyčištění záloh :application_name se vyskytla chyba',\n\n    'cleanup_successful_subject' => 'Vyčištění záloh :application_name úspěšné',\n    'cleanup_successful_subject_title' => 'Vyčištění záloh bylo úspěšné!',\n    'cleanup_successful_body' => 'Vyčištění záloh :application_name na disku jménem :disk_name bylo úspěšné.',\n\n    'healthy_backup_found_subject' => 'Zálohy pro :application_name na disku :disk_name jsou zdravé',\n    'healthy_backup_found_subject_title' => 'Zálohy pro :application_name jsou zdravé',\n    'healthy_backup_found_body' => 'Zálohy pro :application_name jsou považovány za zdravé. Dobrá práce!',\n\n    'unhealthy_backup_found_subject' => 'Důležité: Zálohy pro :application_name jsou nezdravé',\n    'unhealthy_backup_found_subject_title' => 'Důležité: Zálohy pro :application_name jsou nezdravé. :problem',\n    'unhealthy_backup_found_body' => 'Zálohy pro :application_name na disku :disk_name Jsou nezdravé.',\n    'unhealthy_backup_found_not_reachable' => 'Nelze se dostat k cíli zálohy. :error',\n    'unhealthy_backup_found_empty' => 'Tato aplikace nemá vůbec žádné zálohy.',\n    'unhealthy_backup_found_old' => 'Poslední záloha vytvořená dne :date je považována za příliš starou.',\n    'unhealthy_backup_found_unknown' => 'Omlouváme se, nemůžeme určit přesný důvod.',\n    'unhealthy_backup_found_full' => 'Zálohy zabírají příliš mnoho místa na disku. Aktuální využití disku je :disk_usage, což je vyšší než povolený limit :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/da/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Fejlbesked: :message',\n    'exception_trace' => 'Fejl trace: :trace',\n    'exception_message_title' => 'Fejlbesked',\n    'exception_trace_title' => 'Fejl trace',\n\n    'backup_failed_subject' => 'Backup af :application_name fejlede',\n    'backup_failed_body' => 'Vigtigt: Der skete en fejl under backup af :application_name',\n\n    'backup_successful_subject' => 'Ny backup af :application_name oprettet',\n    'backup_successful_subject_title' => 'Ny backup!',\n    'backup_successful_body' => 'Gode nyheder - der blev oprettet en ny backup af :application_name på disken :disk_name.',\n\n    'cleanup_failed_subject' => 'Oprydning af backups for :application_name fejlede.',\n    'cleanup_failed_body' => 'Der skete en fejl under oprydning af backups for :application_name',\n\n    'cleanup_successful_subject' => 'Oprydning af backups for :application_name gennemført',\n    'cleanup_successful_subject_title' => 'Backup oprydning gennemført!',\n    'cleanup_successful_body' => 'Oprydningen af backups for :application_name på disken :disk_name er gennemført.',\n\n    'healthy_backup_found_subject' => 'Alle backups for :application_name på disken :disk_name er OK',\n    'healthy_backup_found_subject_title' => 'Alle backups for :application_name er OK',\n    'healthy_backup_found_body' => 'Alle backups for :application_name er ok. Godt gået!',\n\n    'unhealthy_backup_found_subject' => 'Vigtigt: Backups for :application_name fejlbehæftede',\n    'unhealthy_backup_found_subject_title' => 'Vigtigt: Backups for :application_name er fejlbehæftede. :problem',\n    'unhealthy_backup_found_body' => 'Backups for :application_name på disken :disk_name er fejlbehæftede.',\n    'unhealthy_backup_found_not_reachable' => 'Backup destinationen kunne ikke findes. :error',\n    'unhealthy_backup_found_empty' => 'Denne applikation har ingen backups overhovedet.',\n    'unhealthy_backup_found_old' => 'Den seneste backup fra :date er for gammel.',\n    'unhealthy_backup_found_unknown' => 'Beklager, en præcis årsag kunne ikke findes.',\n    'unhealthy_backup_found_full' => 'Backups bruger for meget plads. Nuværende disk forbrug er :disk_usage, hvilket er mere end den tilladte grænse på :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/de/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Fehlermeldung: :message',\n    'exception_trace' => 'Fehlerverfolgung: :trace',\n    'exception_message_title' => 'Fehlermeldung',\n    'exception_trace_title' => 'Fehlerverfolgung',\n\n    'backup_failed_subject' => 'Backup von :application_name konnte nicht erstellt werden',\n    'backup_failed_body' => 'Wichtig: Beim Backup von :application_name ist ein Fehler aufgetreten',\n\n    'backup_successful_subject' => 'Erfolgreiches neues Backup von :application_name',\n    'backup_successful_subject_title' => 'Erfolgreiches neues Backup!',\n    'backup_successful_body' => 'Gute Nachrichten, ein neues Backup von :application_name wurde erfolgreich erstellt und in :disk_name gepeichert.',\n\n    'cleanup_failed_subject' => 'Aufräumen der Backups von :application_name schlug fehl.',\n    'cleanup_failed_body' => 'Beim aufräumen der Backups von :application_name ist ein Fehler aufgetreten',\n\n    'cleanup_successful_subject' => 'Aufräumen der Backups von :application_name backups erfolgreich',\n    'cleanup_successful_subject_title' => 'Aufräumen der Backups erfolgreich!',\n    'cleanup_successful_body' => 'Aufräumen der Backups von :application_name in :disk_name war erfolgreich.',\n\n    'healthy_backup_found_subject' => 'Die Backups von :application_name in :disk_name sind gesund',\n    'healthy_backup_found_subject_title' => 'Die Backups von :application_name sind Gesund',\n    'healthy_backup_found_body' => 'Die Backups von :application_name wurden als gesund eingestuft. Gute Arbeit!',\n\n    'unhealthy_backup_found_subject' => 'Wichtig: Die Backups für :application_name sind nicht gesund',\n    'unhealthy_backup_found_subject_title' => 'Wichtig: Die Backups für :application_name sind ungesund. :problem',\n    'unhealthy_backup_found_body' => 'Die Backups für :application_name in :disk_name sind ungesund.',\n    'unhealthy_backup_found_not_reachable' => 'Das Backup Ziel konnte nicht erreicht werden. :error',\n    'unhealthy_backup_found_empty' => 'Es gibt für die Anwendung noch gar keine Backups.',\n    'unhealthy_backup_found_old' => 'Das letzte Backup am :date ist zu lange her.',\n    'unhealthy_backup_found_unknown' => 'Sorry, ein genauer Grund konnte nicht gefunden werden.',\n    'unhealthy_backup_found_full' => 'Die Backups verbrauchen zu viel Platz. Aktuell wird :disk_usage belegt, dass ist höher als das erlaubte Limit von :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/en/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Exception message: :message',\n    'exception_trace' => 'Exception trace: :trace',\n    'exception_message_title' => 'Exception message',\n    'exception_trace_title' => 'Exception trace',\n\n    'backup_failed_subject' => 'Failed backup of :application_name',\n    'backup_failed_body' => 'Important: An error occurred while backing up :application_name',\n\n    'backup_successful_subject' => 'Successful new backup of :application_name',\n    'backup_successful_subject_title' => 'Successful new backup!',\n    'backup_successful_body' => 'Great news, a new backup of :application_name was successfully created on the disk named :disk_name.',\n\n    'cleanup_failed_subject' => 'Cleaning up the backups of :application_name failed.',\n    'cleanup_failed_body' => 'An error occurred while cleaning up the backups of :application_name',\n\n    'cleanup_successful_subject' => 'Clean up of :application_name backups successful',\n    'cleanup_successful_subject_title' => 'Clean up of backups successful!',\n    'cleanup_successful_body' => 'The clean up of the :application_name backups on the disk named :disk_name was successful.',\n\n    'healthy_backup_found_subject' => 'The backups for :application_name on disk :disk_name are healthy',\n    'healthy_backup_found_subject_title' => 'The backups for :application_name are healthy',\n    'healthy_backup_found_body' => 'The backups for :application_name are considered healthy. Good job!',\n\n    'unhealthy_backup_found_subject' => 'Important: The backups for :application_name are unhealthy',\n    'unhealthy_backup_found_subject_title' => 'Important: The backups for :application_name are unhealthy. :problem',\n    'unhealthy_backup_found_body' => 'The backups for :application_name on disk :disk_name are unhealthy.',\n    'unhealthy_backup_found_not_reachable' => 'The backup destination cannot be reached. :error',\n    'unhealthy_backup_found_empty' => 'There are no backups of this application at all.',\n    'unhealthy_backup_found_old' => 'The latest backup made on :date is considered too old.',\n    'unhealthy_backup_found_unknown' => 'Sorry, an exact reason cannot be determined.',\n    'unhealthy_backup_found_full' => 'The backups are using too much storage. Current usage is :disk_usage which is higher than the allowed limit of :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/es/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Mensaje de la excepción: :message',\n    'exception_trace' => 'Traza de la excepción: :trace',\n    'exception_message_title' => 'Mensaje de la excepción',\n    'exception_trace_title' => 'Traza de la excepción',\n\n    'backup_failed_subject' => 'Copia de seguridad de :application_name fallida',\n    'backup_failed_body' => 'Importante: Ocurrió un error al realizar la copia de seguridad de :application_name',\n\n    'backup_successful_subject' => 'Se completó con éxito la copia de seguridad de :application_name',\n    'backup_successful_subject_title' => '¡Nueva copia de seguridad creada con éxito!',\n    'backup_successful_body' => 'Buenas noticias, una nueva copia de seguridad de :application_name fue creada con éxito en el disco llamado :disk_name.',\n\n    'cleanup_failed_subject' => 'La limpieza de copias de seguridad de :application_name falló.',\n    'cleanup_failed_body' => 'Ocurrió un error mientras se realizaba la limpieza de copias de seguridad de :application_name',\n\n    'cleanup_successful_subject' => 'La limpieza de copias de seguridad de :application_name se completó con éxito',\n    'cleanup_successful_subject_title' => '!Limpieza de copias de seguridad completada con éxito!',\n    'cleanup_successful_body' => 'La limpieza de copias de seguridad de :application_name en el disco llamado :disk_name se completo con éxito.',\n\n    'healthy_backup_found_subject' => 'Las copias de seguridad de :application_name en el disco :disk_name están en buen estado',\n    'healthy_backup_found_subject_title' => 'Las copias de seguridad de :application_name están en buen estado',\n    'healthy_backup_found_body' => 'Las copias de seguridad de :application_name se consideran en buen estado. ¡Buen trabajo!',\n\n    'unhealthy_backup_found_subject' => 'Importante: Las copias de seguridad de :application_name están en mal estado',\n    'unhealthy_backup_found_subject_title' => 'Importante: Las copias de seguridad de :application_name están en mal estado. :problem',\n    'unhealthy_backup_found_body' => 'Las copias de seguridad de :application_name en el disco :disk_name están en mal estado.',\n    'unhealthy_backup_found_not_reachable' => 'No se puede acceder al destino de la copia de seguridad. :error',\n    'unhealthy_backup_found_empty' => 'No existe ninguna copia de seguridad de esta aplicación.',\n    'unhealthy_backup_found_old' => 'La última copia de seguriad hecha en :date es demasiado antigua.',\n    'unhealthy_backup_found_unknown' => 'Lo siento, no es posible determinar la razón exacta.',\n    'unhealthy_backup_found_full' => 'Las copias de seguridad  están ocupando demasiado espacio. El espacio utilizado actualmente es :disk_usage el cual es mayor que el límite permitido de :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/fa/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'پیغام خطا: :message',\n    'exception_trace' => 'جزییات خطا: :trace',\n    'exception_message_title' => 'پیغام خطا',\n    'exception_trace_title' => 'جزییات خطا',\n\n    'backup_failed_subject' => 'پشتیبان‌گیری :application_name با خطا مواجه شد.',\n    'backup_failed_body' => 'پیغام مهم: هنگام پشتیبان‌گیری از :application_name خطایی رخ داده است. ',\n\n    'backup_successful_subject' => 'نسخه پشتیبان جدید :application_name با موفقیت ساخته شد.',\n    'backup_successful_subject_title' => 'پشتیبان‌گیری موفق!',\n    'backup_successful_body' => 'خبر خوب, به تازگی نسخه پشتیبان :application_name بر روی دیسک :disk_name با موفقیت ساخته شد. ',\n\n    'cleanup_failed_subject' => 'پاک‌‌سازی نسخه پشتیبان :application_name انجام نشد.',\n    'cleanup_failed_body' => 'هنگام پاک‌سازی نسخه پشتیبان :application_name خطایی رخ داده است.',\n\n    'cleanup_successful_subject' => 'پاک‌سازی نسخه پشتیبان :application_name با موفقیت انجام شد.',\n    'cleanup_successful_subject_title' => 'پاک‌سازی نسخه پشتیبان!',\n    'cleanup_successful_body' => 'پاک‌سازی نسخه پشتیبان :application_name بر روی دیسک :disk_name با موفقیت انجام شد.',\n\n    'healthy_backup_found_subject' => 'نسخه پشتیبان :application_name بر روی دیسک :disk_name سالم بود.',\n    'healthy_backup_found_subject_title' => 'نسخه پشتیبان :application_name سالم بود.',\n    'healthy_backup_found_body' => 'نسخه پشتیبان :application_name به نظر سالم میاد. دمت گرم!',\n\n    'unhealthy_backup_found_subject' => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود.',\n    'unhealthy_backup_found_subject_title' => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود. :problem',\n    'unhealthy_backup_found_body' => 'نسخه پشتیبان :application_name بر روی دیسک :disk_name سالم نبود.',\n    'unhealthy_backup_found_not_reachable' => 'مقصد پشتیبان‌گیری در دسترس نبود. :error',\n    'unhealthy_backup_found_empty' => 'برای این برنامه هیچ نسخه پشتیبانی وجود ندارد.',\n    'unhealthy_backup_found_old' => 'آخرین نسخه پشتیبان برای تاریخ :date است. که به نظر خیلی قدیمی میاد. ',\n    'unhealthy_backup_found_unknown' => 'متاسفانه دلیل دقیق مشخص نشده است.',\n    'unhealthy_backup_found_full' => 'نسخه‌های پشتیبانی که تهیه کرده اید حجم زیادی اشغال کرده اند. میزان دیسک استفاده شده :disk_usage است که از میزان مجاز :disk_limit فراتر رفته است. ',\n];\n"
  },
  {
    "path": "lang/vendor/backup/fi/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Virheilmoitus: :message',\n    'exception_trace' => 'Virhe, jäljitys: :trace',\n    'exception_message_title' => 'Virheilmoitus',\n    'exception_trace_title' => 'Virheen jäljitys',\n\n    'backup_failed_subject' => ':application_name varmuuskopiointi epäonnistui',\n    'backup_failed_body' => 'HUOM!: :application_name varmuuskoipionnissa tapahtui virhe',\n\n    'backup_successful_subject' => ':application_name varmuuskopioitu onnistuneesti',\n    'backup_successful_subject_title' => 'Uusi varmuuskopio!',\n    'backup_successful_body' => 'Hyviä uutisia! :application_name on varmuuskopioitu levylle :disk_name.',\n\n    'cleanup_failed_subject' => ':application_name varmuuskopioiden poistaminen epäonnistui.',\n    'cleanup_failed_body' => ':application_name varmuuskopioiden poistamisessa tapahtui virhe.',\n\n    'cleanup_successful_subject' => ':application_name varmuuskopiot poistettu onnistuneesti',\n    'cleanup_successful_subject_title' => 'Varmuuskopiot poistettu onnistuneesti!',\n    'cleanup_successful_body' => ':application_name varmuuskopiot poistettu onnistuneesti levyltä :disk_name.',\n\n    'healthy_backup_found_subject' => ':application_name varmuuskopiot levyllä :disk_name ovat kunnossa',\n    'healthy_backup_found_subject_title' => ':application_name varmuuskopiot ovat kunnossa',\n    'healthy_backup_found_body' => ':application_name varmuuskopiot ovat kunnossa. Hieno homma!',\n\n    'unhealthy_backup_found_subject' => 'HUOM!: :application_name varmuuskopiot ovat vialliset',\n    'unhealthy_backup_found_subject_title' => 'HUOM!: :application_name varmuuskopiot ovat vialliset. :problem',\n    'unhealthy_backup_found_body' => ':application_name varmuuskopiot levyllä :disk_name ovat vialliset.',\n    'unhealthy_backup_found_not_reachable' => 'Varmuuskopioiden kohdekansio ei ole saatavilla. :error',\n    'unhealthy_backup_found_empty' => 'Tästä sovelluksesta ei ole varmuuskopioita.',\n    'unhealthy_backup_found_old' => 'Viimeisin varmuuskopio, luotu :date, on liian vanha.',\n    'unhealthy_backup_found_unknown' => 'Virhe, tarkempaa tietoa syystä ei valitettavasti ole saatavilla.',\n    'unhealthy_backup_found_full' => 'Varmuuskopiot vievät liikaa levytilaa. Tällä hetkellä käytössä :disk_usage, mikä on suurempi kuin sallittu tilavuus (:disk_limit).',\n\n    'no_backups_info' => 'Varmuuskopioita ei vielä tehty',\n    'application_name' => 'Sovelluksen nimi',\n    'backup_name' => 'Varmuuskopion nimi',\n    'disk' => 'Levy',\n    'newest_backup_size' => 'Uusin varmuuskopion koko',\n    'number_of_backups' => 'Varmuuskopioiden määrä',\n    'total_storage_used' => 'Käytetty tallennustila yhteensä',\n    'newest_backup_date' => 'Uusin varmuuskopion koko',\n    'oldest_backup_date' => 'Vanhin varmuuskopion koko',\n];\n"
  },
  {
    "path": "lang/vendor/backup/fr/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Message de l\\'exception : :message',\n    'exception_trace' => 'Trace de l\\'exception : :trace',\n    'exception_message_title' => 'Message de l\\'exception',\n    'exception_trace_title' => 'Trace de l\\'exception',\n\n    'backup_failed_subject' => 'Échec de la sauvegarde de :application_name',\n    'backup_failed_body' => 'Important : Une erreur est survenue lors de la sauvegarde de :application_name',\n\n    'backup_successful_subject' => 'Succès de la sauvegarde de :application_name',\n    'backup_successful_subject_title' => 'Sauvegarde créée avec succès !',\n    'backup_successful_body' => 'Bonne nouvelle, une nouvelle sauvegarde de :application_name a été créée avec succès sur le disque nommé :disk_name.',\n\n    'cleanup_failed_subject' => 'Le nettoyage des sauvegardes de :application_name a echoué.',\n    'cleanup_failed_body' => 'Une erreur est survenue lors du nettoyage des sauvegardes de :application_name',\n\n    'cleanup_successful_subject' => 'Succès du nettoyage des sauvegardes de :application_name',\n    'cleanup_successful_subject_title' => 'Sauvegardes nettoyées avec succès !',\n    'cleanup_successful_body' => 'Le nettoyage des sauvegardes de :application_name sur le disque nommé :disk_name a été effectué avec succès.',\n\n    'healthy_backup_found_subject' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont saines',\n    'healthy_backup_found_subject_title' => 'Les sauvegardes pour :application_name sont saines',\n    'healthy_backup_found_body' => 'Les sauvegardes pour :application_name sont considérées saines. Bon travail !',\n\n    'unhealthy_backup_found_subject' => 'Important : Les sauvegardes pour :application_name sont corrompues',\n    'unhealthy_backup_found_subject_title' => 'Important : Les sauvegardes pour :application_name sont corrompues. :problem',\n    'unhealthy_backup_found_body' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont corrompues.',\n    'unhealthy_backup_found_not_reachable' => 'La destination de la sauvegarde n\\'est pas accessible. :error',\n    'unhealthy_backup_found_empty' => 'Il n\\'y a aucune sauvegarde pour cette application.',\n    'unhealthy_backup_found_old' => 'La dernière sauvegarde du :date est considérée trop vieille.',\n    'unhealthy_backup_found_unknown' => 'Désolé, une raison exacte ne peut être déterminée.',\n    'unhealthy_backup_found_full' => 'Les sauvegardes utilisent trop d\\'espace disque. L\\'utilisation actuelle est de :disk_usage alors que la limite autorisée est de :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/hi/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'गलती संदेश: :message',\n    'exception_trace' => 'गलती निशान: :trace',\n    'exception_message_title' => 'गलती संदेश',\n    'exception_trace_title' => 'गलती निशान',\n\n    'backup_failed_subject' => ':application_name का बैकअप असफल रहा',\n    'backup_failed_body' => 'जरूरी सुचना: :application_name का बैकअप लेते समय असफल रहे',\n\n    'backup_successful_subject' => ':application_name का बैकअप सफल रहा',\n    'backup_successful_subject_title' => 'बैकअप सफल रहा!',\n    'backup_successful_body' => 'खुशखबरी, :application_name का बैकअप :disk_name पर संग्रहित करने मे सफल रहे.',\n\n    'cleanup_failed_subject' => ':application_name के बैकअप की सफाई असफल रही.',\n    'cleanup_failed_body' => ':application_name के बैकअप की सफाई करते समय कुछ बाधा आयी है.',\n\n    'cleanup_successful_subject' => ':application_name के बैकअप की सफाई सफल रही',\n    'cleanup_successful_subject_title' => 'बैकअप की सफाई सफल रही!',\n    'cleanup_successful_body' => ':application_name का बैकअप जो :disk_name नाम की डिस्क पर संग्रहित है, उसकी सफाई सफल रही.',\n\n    'healthy_backup_found_subject' => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप स्वस्थ है',\n    'healthy_backup_found_subject_title' => ':application_name के सभी बैकअप स्वस्थ है',\n    'healthy_backup_found_body' => 'बहुत बढ़िया! :application_name के सभी बैकअप स्वस्थ है.',\n\n    'unhealthy_backup_found_subject' => 'जरूरी सुचना :  :application_name के बैकअप अस्वस्थ है',\n    'unhealthy_backup_found_subject_title' => 'जरूरी सुचना : :application_name के बैकअप :problem के बजेसे अस्वस्थ है',\n    'unhealthy_backup_found_body' => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप अस्वस्थ है',\n    'unhealthy_backup_found_not_reachable' => ':error के बजेसे बैकअप की मंजिल तक पोहोच नहीं सकते.',\n    'unhealthy_backup_found_empty' => 'इस एप्लीकेशन का कोई भी बैकअप नहीं है.',\n    'unhealthy_backup_found_old' => 'हालहीमें :date को लिया हुआ बैकअप बहुत पुराना है.',\n    'unhealthy_backup_found_unknown' => 'माफ़ कीजिये, सही कारण निर्धारित नहीं कर सकते.',\n    'unhealthy_backup_found_full' => 'सभी बैकअप बहुत ज्यादा जगह का उपयोग कर रहे है. फ़िलहाल सभी बैकअप :disk_usage जगह का उपयोग कर रहे है, जो की :disk_limit अनुमति सीमा से अधिक का है.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/id/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Pesan pengecualian: :message',\n    'exception_trace' => 'Jejak pengecualian: :trace',\n    'exception_message_title' => 'Pesan pengecualian',\n    'exception_trace_title' => 'Jejak pengecualian',\n\n    'backup_failed_subject' => 'Gagal backup :application_name',\n    'backup_failed_body' => 'Penting: Sebuah error terjadi ketika membackup :application_name',\n\n    'backup_successful_subject' => 'Backup baru sukses dari :application_name',\n    'backup_successful_subject_title' => 'Backup baru sukses!',\n    'backup_successful_body' => 'Kabar baik, sebuah backup baru dari :application_name sukses dibuat pada disk bernama :disk_name.',\n\n    'cleanup_failed_subject' => 'Membersihkan backup dari :application_name yang gagal.',\n    'cleanup_failed_body' => 'Sebuah error teradi ketika membersihkan backup dari :application_name',\n\n    'cleanup_successful_subject' => 'Sukses membersihkan backup :application_name',\n    'cleanup_successful_subject_title' => 'Sukses membersihkan backup!',\n    'cleanup_successful_body' => 'Pembersihan backup :application_name pada disk bernama :disk_name telah sukses.',\n\n    'healthy_backup_found_subject' => 'Backup untuk :application_name pada disk :disk_name sehat',\n    'healthy_backup_found_subject_title' => 'Backup untuk :application_name sehat',\n    'healthy_backup_found_body' => 'Backup untuk :application_name dipertimbangkan sehat. Kerja bagus!',\n\n    'unhealthy_backup_found_subject' => 'Penting: Backup untuk :application_name tidak sehat',\n    'unhealthy_backup_found_subject_title' => 'Penting: Backup untuk :application_name tidak sehat. :problem',\n    'unhealthy_backup_found_body' => 'Backup untuk :application_name pada disk :disk_name tidak sehat.',\n    'unhealthy_backup_found_not_reachable' => 'Tujuan backup tidak dapat terjangkau. :error',\n    'unhealthy_backup_found_empty' => 'Tidak ada backup pada aplikasi ini sama sekali.',\n    'unhealthy_backup_found_old' => 'Backup terakhir dibuat pada :date dimana dipertimbahkan sudah sangat lama.',\n    'unhealthy_backup_found_unknown' => 'Maaf, sebuah alasan persisnya tidak dapat ditentukan.',\n    'unhealthy_backup_found_full' => 'Backup menggunakan terlalu banyak kapasitas penyimpanan. Penggunaan terkini adalah :disk_usage dimana lebih besar dari batas yang diperbolehkan yaitu :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/it/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Messaggio dell\\'eccezione: :message',\n    'exception_trace' => 'Traccia dell\\'eccezione: :trace',\n    'exception_message_title' => 'Messaggio dell\\'eccezione',\n    'exception_trace_title' => 'Traccia dell\\'eccezione',\n\n    'backup_failed_subject' => 'Fallito il backup di :application_name',\n    'backup_failed_body' => 'Importante: Si è verificato un errore durante il backup di :application_name',\n\n    'backup_successful_subject' => 'Creato nuovo backup di :application_name',\n    'backup_successful_subject_title' => 'Nuovo backup creato!',\n    'backup_successful_body' => 'Grande notizia, un nuovo backup di :application_name è stato creato con successo sul disco :disk_name.',\n\n    'cleanup_failed_subject' => 'Pulizia dei backup di :application_name fallita.',\n    'cleanup_failed_body' => 'Si è verificato un errore durante la pulizia dei backup di :application_name',\n\n    'cleanup_successful_subject' => 'Pulizia dei backup di :application_name avvenuta con successo',\n    'cleanup_successful_subject_title' => 'Pulizia dei backup avvenuta con successo!',\n    'cleanup_successful_body' => 'La pulizia dei backup di :application_name sul disco :disk_name è avvenuta con successo.',\n\n    'healthy_backup_found_subject' => 'I backup per :application_name sul disco :disk_name sono sani',\n    'healthy_backup_found_subject_title' => 'I backup per :application_name sono sani',\n    'healthy_backup_found_body' => 'I backup per :application_name sono considerati sani. Bel Lavoro!',\n\n    'unhealthy_backup_found_subject' => 'Importante: i backup per :application_name sono corrotti',\n    'unhealthy_backup_found_subject_title' => 'Importante: i backup per :application_name sono corrotti. :problem',\n    'unhealthy_backup_found_body' => 'I backup per :application_name sul disco :disk_name sono corrotti.',\n    'unhealthy_backup_found_not_reachable' => 'Impossibile raggiungere la destinazione di backup. :error',\n    'unhealthy_backup_found_empty' => 'Non esiste alcun backup di questa applicazione.',\n    'unhealthy_backup_found_old' => 'L\\'ultimo backup fatto il :date è considerato troppo vecchio.',\n    'unhealthy_backup_found_unknown' => 'Spiacenti, non è possibile determinare una ragione esatta.',\n    'unhealthy_backup_found_full' => 'I backup utilizzano troppa memoria. L\\'utilizzo corrente è :disk_usage che è superiore al limite consentito di :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ja/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => '例外のメッセージ: :message',\n    'exception_trace' => '例外の追跡: :trace',\n    'exception_message_title' => '例外のメッセージ',\n    'exception_trace_title' => '例外の追跡',\n\n    'backup_failed_subject' => ':application_name のバックアップに失敗しました。',\n    'backup_failed_body' => '重要: :application_name のバックアップ中にエラーが発生しました。',\n\n    'backup_successful_subject' => ':application_name のバックアップに成功しました。',\n    'backup_successful_subject_title' => 'バックアップに成功しました！',\n    'backup_successful_body' => '朗報です。ディスク :disk_name へ :application_name のバックアップが成功しました。',\n\n    'cleanup_failed_subject' => ':application_name のバックアップ削除に失敗しました。',\n    'cleanup_failed_body' => ':application_name のバックアップ削除中にエラーが発生しました。',\n\n    'cleanup_successful_subject' => ':application_name のバックアップ削除に成功しました。',\n    'cleanup_successful_subject_title' => 'バックアップ削除に成功しました！',\n    'cleanup_successful_body' => 'ディスク :disk_name に保存された :application_name のバックアップ削除に成功しました。',\n\n    'healthy_backup_found_subject' => 'ディスク :disk_name への :application_name のバックアップは正常です。',\n    'healthy_backup_found_subject_title' => ':application_name のバックアップは正常です。',\n    'healthy_backup_found_body' => ':application_name へのバックアップは正常です。いい仕事してますね！',\n\n    'unhealthy_backup_found_subject' => '重要: :application_name のバックアップに異常があります。',\n    'unhealthy_backup_found_subject_title' => '重要: :application_name のバックアップに異常があります。 :problem',\n    'unhealthy_backup_found_body' => ':disk_name への :application_name のバックアップに異常があります。',\n    'unhealthy_backup_found_not_reachable' => 'バックアップ先にアクセスできませんでした。 :error',\n    'unhealthy_backup_found_empty' => 'このアプリケーションのバックアップは見つかりませんでした。',\n    'unhealthy_backup_found_old' => ':date に保存された直近のバックアップが古すぎます。',\n    'unhealthy_backup_found_unknown' => '申し訳ございません。予期せぬエラーです。',\n    'unhealthy_backup_found_full' => 'バックアップがディスク容量を圧迫しています。現在の使用量 :disk_usage　は、許可された限界値 :disk_limit を超えています。',\n\n    'no_backups_info' => 'バックアップはまだ作成されていません',\n    'application_name' => 'アプリケーション名',\n    'backup_name' => 'バックアップ名',\n    'disk' => 'ディスク',\n    'newest_backup_size' => '最新のバックアップサイズ',\n    'number_of_backups' => 'バックアップ数',\n    'total_storage_used' => '使用された合計ストレージ',\n    'newest_backup_date' => '最新のバックアップ日時',\n    'oldest_backup_date' => '最も古いバックアップ日時',\n];\n"
  },
  {
    "path": "lang/vendor/backup/nl/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Fout bericht: :message',\n    'exception_trace' => 'Fout trace: :trace',\n    'exception_message_title' => 'Fout bericht',\n    'exception_trace_title' => 'Fout trace',\n\n    'backup_failed_subject' => 'Back-up van :application_name mislukt',\n    'backup_failed_body' => 'Belangrijk: Er ging iets fout tijdens het maken van een back-up van :application_name',\n\n    'backup_successful_subject' => 'Succesvolle nieuwe back-up van :application_name',\n    'backup_successful_subject_title' => 'Succesvolle nieuwe back-up!',\n    'backup_successful_body' => 'Goed nieuws, een nieuwe back-up van :application_name was succesvol aangemaakt op de schijf genaamd :disk_name.',\n\n    'cleanup_failed_subject' => 'Het opschonen van de back-ups van :application_name is mislukt.',\n    'cleanup_failed_body' => 'Er ging iets fout tijdens het opschonen van de back-ups van :application_name',\n\n    'cleanup_successful_subject' => 'Opschonen van :application_name back-ups was succesvol.',\n    'cleanup_successful_subject_title' => 'Opschonen van back-ups was succesvol!',\n    'cleanup_successful_body' => 'Het opschonen van de :application_name back-ups op de schijf genaamd :disk_name was succesvol.',\n\n    'healthy_backup_found_subject' => 'De back-ups voor :application_name op schijf :disk_name zijn gezond',\n    'healthy_backup_found_subject_title' => 'De back-ups voor :application_name zijn gezond',\n    'healthy_backup_found_body' => 'De back-ups voor :application_name worden als gezond beschouwd. Goed gedaan!',\n\n    'unhealthy_backup_found_subject' => 'Belangrijk: De back-ups voor :application_name zijn niet meer gezond',\n    'unhealthy_backup_found_subject_title' => 'Belangrijk: De back-ups voor :application_name zijn niet gezond. :problem',\n    'unhealthy_backup_found_body' => 'De back-ups voor :application_name op schijf :disk_name zijn niet gezond.',\n    'unhealthy_backup_found_not_reachable' => 'De back-upbestemming kon niet worden bereikt. :error',\n    'unhealthy_backup_found_empty' => 'Er zijn geen back-ups van deze applicatie beschikbaar.',\n    'unhealthy_backup_found_old' => 'De laatste back-up gemaakt op :date is te oud.',\n    'unhealthy_backup_found_unknown' => 'Sorry, een exacte reden kon niet worden bepaald.',\n    'unhealthy_backup_found_full' => 'De back-ups gebruiken te veel opslagruimte. Momenteel wordt er :disk_usage gebruikt wat hoger is dan de toegestane limiet van :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/no/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Exception: :message',\n    'exception_trace' => 'Exception trace: :trace',\n    'exception_message_title' => 'Exception',\n    'exception_trace_title' => 'Exception trace',\n\n    'backup_failed_subject' => 'Backup feilet for :application_name',\n    'backup_failed_body' => 'Viktg: En feil oppstod under backing av :application_name',\n\n    'backup_successful_subject' => 'Gjennomført backup av :application_name',\n    'backup_successful_subject_title' => 'Gjennomført backup!',\n    'backup_successful_body' => 'Gode nyheter, en ny backup av :application_name ble opprettet på disken :disk_name.',\n\n    'cleanup_failed_subject' => 'Opprydding av backup for :application_name feilet.',\n    'cleanup_failed_body' => 'En feil oppstod under opprydding av backups for :application_name',\n\n    'cleanup_successful_subject' => 'Opprydding av backup for :application_name gjennomført',\n    'cleanup_successful_subject_title' => 'Opprydding av backup gjennomført!',\n    'cleanup_successful_body' => 'Oppryddingen av backup for :application_name på disken :disk_name har blitt gjennomført.',\n\n    'healthy_backup_found_subject' => 'Alle backups for :application_name på disken :disk_name er OK',\n    'healthy_backup_found_subject_title' => 'Alle backups for :application_name er OK',\n    'healthy_backup_found_body' => 'Alle backups for :application_name er ok. Godt jobba!',\n\n    'unhealthy_backup_found_subject' => 'Viktig: Backups for :application_name ikke OK',\n    'unhealthy_backup_found_subject_title' => 'Viktig: Backups for :application_name er ikke OK. :problem',\n    'unhealthy_backup_found_body' => 'Backups for :application_name på disken :disk_name er ikke OK.',\n    'unhealthy_backup_found_not_reachable' => 'Kunne ikke finne backup-destinasjonen. :error',\n    'unhealthy_backup_found_empty' => 'Denne applikasjonen mangler backups.',\n    'unhealthy_backup_found_old' => 'Den siste backupem fra :date er for gammel.',\n    'unhealthy_backup_found_unknown' => 'Beklager, kunne ikke finne nøyaktig årsak.',\n    'unhealthy_backup_found_full' => 'Backups bruker for mye lagringsplass. Nåværende diskbruk er :disk_usage, som er mer enn den tillatte grensen på :disk_limit.',\n\n    'no_backups_info' => 'Ingen sikkerhetskopier ble gjort ennå',\n    'application_name' => 'Programnavn',\n    'backup_name' => 'Navn på sikkerhetskopi',\n    'disk' => 'Disk',\n    'newest_backup_size' => 'Nyeste backup-størrelse',\n    'number_of_backups' => 'Antall sikkerhetskopier',\n    'total_storage_used' => 'Total lagring brukt',\n    'newest_backup_date' => 'Nyeste backup-størrelse',\n    'oldest_backup_date' => 'Eldste sikkerhetskopistørrelse',\n];\n"
  },
  {
    "path": "lang/vendor/backup/pl/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Błąd: :message',\n    'exception_trace' => 'Zrzut błędu: :trace',\n    'exception_message_title' => 'Błąd',\n    'exception_trace_title' => 'Zrzut błędu',\n\n    'backup_failed_subject' => 'Tworzenie kopii zapasowej aplikacji :application_name nie powiodło się',\n    'backup_failed_body' => 'Ważne: Wystąpił błąd podczas tworzenia kopii zapasowej aplikacji :application_name',\n\n    'backup_successful_subject' => 'Pomyślnie utworzono kopię zapasową aplikacji :application_name',\n    'backup_successful_subject_title' => 'Nowa kopia zapasowa!',\n    'backup_successful_body' => 'Wspaniała wiadomość, nowa kopia zapasowa aplikacji :application_name została pomyślnie utworzona na dysku o nazwie :disk_name.',\n\n    'cleanup_failed_subject' => 'Czyszczenie kopii zapasowych aplikacji :application_name nie powiodło się.',\n    'cleanup_failed_body' => 'Wystąpił błąd podczas czyszczenia kopii zapasowej aplikacji :application_name',\n\n    'cleanup_successful_subject' => 'Kopie zapasowe aplikacji :application_name zostały pomyślnie wyczyszczone',\n    'cleanup_successful_subject_title' => 'Kopie zapasowe zostały pomyślnie wyczyszczone!',\n    'cleanup_successful_body' => 'Czyszczenie kopii zapasowych aplikacji :application_name na dysku :disk_name zakończone sukcecem.',\n\n    'healthy_backup_found_subject' => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są poprawne',\n    'healthy_backup_found_subject_title' => 'Kopie zapasowe aplikacji :application_name są poprawne',\n    'healthy_backup_found_body' => 'Kopie zapasowe aplikacji :application_name są poprawne. Dobra robota!',\n\n    'unhealthy_backup_found_subject' => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne',\n    'unhealthy_backup_found_subject_title' => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne. :problem',\n    'unhealthy_backup_found_body' => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są niepoprawne.',\n    'unhealthy_backup_found_not_reachable' => 'Miejsce docelowe kopii zapasowej nie jest osiągalne. :error',\n    'unhealthy_backup_found_empty' => 'W aplikacji nie ma żadnej kopii zapasowych tej aplikacji.',\n    'unhealthy_backup_found_old' => 'Ostatnia kopia zapasowa wykonania dnia :date jest zbyt stara.',\n    'unhealthy_backup_found_unknown' => 'Niestety, nie można ustalić dokładnego błędu.',\n    'unhealthy_backup_found_full' => 'Kopie zapasowe zajmują zbyt dużo miejsca. Obecne użycie dysku :disk_usage jest większe od ustalonego limitu :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/pt/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Exception message: :message',\n    'exception_trace' => 'Exception trace: :trace',\n    'exception_message_title' => 'Exception message',\n    'exception_trace_title' => 'Exception trace',\n\n    'backup_failed_subject' => 'Falha no backup da aplicação :application_name',\n    'backup_failed_body' => 'Importante: Ocorreu um erro ao executar o backup da aplicação :application_name',\n\n    'backup_successful_subject' => 'Backup realizado com sucesso: :application_name',\n    'backup_successful_subject_title' => 'Backup Realizado com Sucesso!',\n    'backup_successful_body' => 'Boas notícias, foi criado um novo backup no disco :disk_name referente à aplicação :application_name.',\n\n    'cleanup_failed_subject' => 'Falha na limpeza dos backups da aplicação :application_name.',\n    'cleanup_failed_body' => 'Ocorreu um erro ao executar a limpeza dos backups da aplicação :application_name',\n\n    'cleanup_successful_subject' => 'Limpeza dos backups da aplicação :application_name concluída!',\n    'cleanup_successful_subject_title' => 'Limpeza dos backups concluída!',\n    'cleanup_successful_body' => 'Concluída a limpeza dos backups da aplicação :application_name no disco :disk_name.',\n\n    'healthy_backup_found_subject' => 'Os backups da aplicação :application_name no disco :disk_name estão em dia',\n    'healthy_backup_found_subject_title' => 'Os backups da aplicação :application_name estão em dia',\n    'healthy_backup_found_body' => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!',\n\n    'unhealthy_backup_found_subject' => 'Importante: Os backups da aplicação :application_name não estão em dia',\n    'unhealthy_backup_found_subject_title' => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem',\n    'unhealthy_backup_found_body' => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.',\n    'unhealthy_backup_found_not_reachable' => 'O destino dos backups não pode ser alcançado. :error',\n    'unhealthy_backup_found_empty' => 'Não existem backups para essa aplicação.',\n    'unhealthy_backup_found_old' => 'O último backup realizado em :date é demasiado antigo.',\n    'unhealthy_backup_found_unknown' => 'Desculpe, impossível determinar a razão exata.',\n    'unhealthy_backup_found_full' => 'Os backups estão a utilizar demasiado espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.',\n\n    'no_backups_info' => 'Nenhum backup foi feito ainda',\n    'application_name' => 'Nome da Aplicação',\n    'backup_name' => 'Nome de backup',\n    'disk' => 'Disco',\n    'newest_backup_size' => 'Tamanho de backup mais recente',\n    'number_of_backups' => 'Número de backups',\n    'total_storage_used' => 'Armazenamento total usado',\n    'newest_backup_date' => 'Tamanho de backup mais recente',\n    'oldest_backup_date' => 'Tamanho de backup mais antigo',\n];\n"
  },
  {
    "path": "lang/vendor/backup/pt-BR/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Exception message: :message',\n    'exception_trace' => 'Exception trace: :trace',\n    'exception_message_title' => 'Exception message',\n    'exception_trace_title' => 'Exception trace',\n\n    'backup_failed_subject' => 'Falha no backup da aplicação :application_name',\n    'backup_failed_body' => 'Importante: Ocorreu um erro ao fazer o backup da aplicação :application_name',\n\n    'backup_successful_subject' => 'Backup realizado com sucesso: :application_name',\n    'backup_successful_subject_title' => 'Backup Realizado com sucesso!',\n    'backup_successful_body' => 'Boas notícias, um novo backup da aplicação :application_name foi criado no disco :disk_name.',\n\n    'cleanup_failed_subject' => 'Falha na limpeza dos backups da aplicação :application_name.',\n    'cleanup_failed_body' => 'Um erro ocorreu ao fazer a limpeza dos backups da aplicação :application_name',\n\n    'cleanup_successful_subject' => 'Limpeza dos backups da aplicação :application_name concluída!',\n    'cleanup_successful_subject_title' => 'Limpeza dos backups concluída!',\n    'cleanup_successful_body' => 'A limpeza dos backups da aplicação :application_name no disco :disk_name foi concluída.',\n\n    'healthy_backup_found_subject' => 'Os backups da aplicação :application_name no disco :disk_name estão em dia',\n    'healthy_backup_found_subject_title' => 'Os backups da aplicação :application_name estão em dia',\n    'healthy_backup_found_body' => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!',\n\n    'unhealthy_backup_found_subject' => 'Importante: Os backups da aplicação :application_name não estão em dia',\n    'unhealthy_backup_found_subject_title' => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem',\n    'unhealthy_backup_found_body' => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.',\n    'unhealthy_backup_found_not_reachable' => 'O destino dos backups não pode ser alcançado. :error',\n    'unhealthy_backup_found_empty' => 'Não existem backups para essa aplicação.',\n    'unhealthy_backup_found_old' => 'O último backup realizado em :date é considerado muito antigo.',\n    'unhealthy_backup_found_unknown' => 'Desculpe, a exata razão não pode ser encontrada.',\n    'unhealthy_backup_found_full' => 'Os backups estão usando muito espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ro/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Cu excepția mesajului: :message',\n    'exception_trace' => 'Urmă excepţie: :trace',\n    'exception_message_title' => 'Mesaj de excepție',\n    'exception_trace_title' => 'Urmă excepţie',\n\n    'backup_failed_subject' => 'Nu s-a putut face copie de rezervă pentru :application_name',\n    'backup_failed_body' => 'Important: A apărut o eroare în timpul generării copiei de rezervă pentru :application_name',\n\n    'backup_successful_subject' => 'Copie de rezervă efectuată cu succes pentru :application_name',\n    'backup_successful_subject_title' => 'O nouă copie de rezervă a fost efectuată cu succes!',\n    'backup_successful_body' => 'Vești bune, o nouă copie de rezervă pentru :application_name a fost creată cu succes pe discul cu numele :disk_name.',\n\n    'cleanup_failed_subject' => 'Curățarea copiilor de rezervă pentru :application_name nu a reușit.',\n    'cleanup_failed_body' => 'A apărut o eroare în timpul curățirii copiilor de rezervă pentru :application_name',\n\n    'cleanup_successful_subject' => 'Curățarea copiilor de rezervă pentru :application_name a fost făcută cu succes',\n    'cleanup_successful_subject_title' => 'Curățarea copiilor de rezervă a fost făcută cu succes!',\n    'cleanup_successful_body' => 'Curățarea copiilor de rezervă pentru :application_name de pe discul cu numele :disk_name a fost făcută cu succes.',\n\n    'healthy_backup_found_subject' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name sunt în regulă',\n    'healthy_backup_found_subject_title' => 'Copiile de rezervă pentru :application_name sunt în regulă',\n    'healthy_backup_found_body' => 'Copiile de rezervă pentru :application_name sunt considerate în regulă. Bună treabă!',\n\n    'unhealthy_backup_found_subject' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă',\n    'unhealthy_backup_found_subject_title' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă. :problem',\n    'unhealthy_backup_found_body' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name nu sunt în regulă.',\n    'unhealthy_backup_found_not_reachable' => 'Nu se poate ajunge la destinația copiilor de rezervă. :error',\n    'unhealthy_backup_found_empty' => 'Nu există copii de rezervă ale acestei aplicații.',\n    'unhealthy_backup_found_old' => 'Cea mai recentă copie de rezervă făcută la :date este considerată prea veche.',\n    'unhealthy_backup_found_unknown' => 'Ne pare rău, un motiv exact nu poate fi determinat.',\n    'unhealthy_backup_found_full' => 'Copiile de rezervă folosesc prea mult spațiu de stocare. Utilizarea curentă este de :disk_usage care este mai mare decât limita permisă de :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/ru/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Сообщение об ошибке: :message',\n    'exception_trace' => 'Сведения об ошибке: :trace',\n    'exception_message_title' => 'Сообщение об ошибке',\n    'exception_trace_title' => 'Сведения об ошибке',\n\n    'backup_failed_subject' => 'Не удалось сделать резервную копию :application_name',\n    'backup_failed_body' => 'Внимание: Произошла ошибка во время резервного копирования :application_name',\n\n    'backup_successful_subject' => 'Успешно создана новая резервная копия :application_name',\n    'backup_successful_subject_title' => 'Успешно создана новая резервная копия!',\n    'backup_successful_body' => 'Отличная новость, новая резервная копия :application_name успешно создана и сохранена на диск :disk_name.',\n\n    'cleanup_failed_subject' => 'Не удалось очистить резервные копии :application_name',\n    'cleanup_failed_body' => 'Произошла ошибка при очистке резервных копий :application_name',\n\n    'cleanup_successful_subject' => 'Очистка от резервных копий :application_name прошла успешно',\n    'cleanup_successful_subject_title' => 'Очистка резервных копий прошла удачно!',\n    'cleanup_successful_body' => 'Очистка от старых резервных копий :application_name на диске :disk_name прошла удачно.',\n\n    'healthy_backup_found_subject' => 'Резервная копия :application_name с диска :disk_name установлена',\n    'healthy_backup_found_subject_title' => 'Резервная копия :application_name установлена',\n    'healthy_backup_found_body' => 'Резервная копия :application_name успешно установлена. Хорошая работа!',\n\n    'unhealthy_backup_found_subject' => 'Внимание: резервная копия :application_name не установилась',\n    'unhealthy_backup_found_subject_title' => 'Внимание: резервная копия для :application_name не установилась. :problem',\n    'unhealthy_backup_found_body' => 'Резервная копия для :application_name на диске :disk_name не установилась.',\n    'unhealthy_backup_found_not_reachable' => 'Резервная копия не смогла установиться. :error',\n    'unhealthy_backup_found_empty' => 'Резервные копии для этого приложения отсутствуют.',\n    'unhealthy_backup_found_old' => 'Последнее резервное копирование создано :date является устаревшим.',\n    'unhealthy_backup_found_unknown' => 'Извините, точная причина не может быть определена.',\n    'unhealthy_backup_found_full' => 'Резервные копии используют слишком много памяти. Используется :disk_usage что выше допустимого предела: :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/tr/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Hata mesajı: :message',\n    'exception_trace' => 'Hata izleri: :trace',\n    'exception_message_title' => 'Hata mesajı',\n    'exception_trace_title' => 'Hata izleri',\n\n    'backup_failed_subject' => 'Yedeklenemedi :application_name',\n    'backup_failed_body' => 'Önemli: Yedeklenirken bir hata oluştu :application_name',\n\n    'backup_successful_subject' => 'Başarılı :application_name yeni yedeklemesi',\n    'backup_successful_subject_title' => 'Başarılı bir yeni yedekleme!',\n    'backup_successful_body' => 'Harika bir haber, :application_name âit yeni bir yedekleme :disk_name adlı diskte başarıyla oluşturuldu.',\n\n    'cleanup_failed_subject' => ':application_name yedeklemeleri temizlenmesi başarısız.',\n    'cleanup_failed_body' => ':application_name yedeklerini temizlerken bir hata oluştu ',\n\n    'cleanup_successful_subject' => ':application_name yedeklemeleri temizlenmesi başarılı.',\n    'cleanup_successful_subject_title' => 'Yedeklerin temizlenmesi başarılı!',\n    'cleanup_successful_body' => ':application_name yedeklemeleri temizlenmesi ,:disk_name diskinden silindi',\n\n    'healthy_backup_found_subject' => ':application_name yedeklenmesi ,:disk_name adlı diskte sağlıklı',\n    'healthy_backup_found_subject_title' => ':application_name yedeklenmesi sağlıklı',\n    'healthy_backup_found_body' => ':application_name için yapılan yedeklemeler sağlıklı sayılır. Aferin!',\n\n    'unhealthy_backup_found_subject' => 'Önemli: :application_name için yedeklemeler sağlıksız',\n    'unhealthy_backup_found_subject_title' => 'Önemli: :application_name için yedeklemeler sağlıksız. :problem',\n    'unhealthy_backup_found_body' => 'Yedeklemeler: :application_name disk: :disk_name sağlıksız.',\n    'unhealthy_backup_found_not_reachable' => 'Yedekleme hedefine ulaşılamıyor. :error',\n    'unhealthy_backup_found_empty' => 'Bu uygulamanın yedekleri yok.',\n    'unhealthy_backup_found_old' => ':date tarihinde yapılan en son yedekleme çok eski kabul ediliyor.',\n    'unhealthy_backup_found_unknown' => 'Üzgünüm, kesin bir sebep belirlenemiyor.',\n    'unhealthy_backup_found_full' => 'Yedeklemeler çok fazla depolama alanı kullanıyor. Şu anki kullanım: :disk_usage, izin verilen sınırdan yüksek: :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/uk/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Повідомлення про помилку: :message',\n    'exception_trace' => 'Деталі помилки: :trace',\n    'exception_message_title' => 'Повідомлення помилки',\n    'exception_trace_title' => 'Деталі помилки',\n\n    'backup_failed_subject' => 'Не вдалось зробити резервну копію :application_name',\n    'backup_failed_body' => 'Увага: Трапилась помилка під час резервного копіювання :application_name',\n\n    'backup_successful_subject' => 'Успішне резервне копіювання :application_name',\n    'backup_successful_subject_title' => 'Успішно створена резервна копія!',\n    'backup_successful_body' => 'Чудова новина, нова резервна копія :application_name успішно створена і збережена на диск :disk_name.',\n\n    'cleanup_failed_subject' => 'Не вдалось очистити резервні копії :application_name',\n    'cleanup_failed_body' => 'Сталася помилка під час очищення резервних копій :application_name',\n\n    'cleanup_successful_subject' => 'Успішне очищення від резервних копій :application_name',\n    'cleanup_successful_subject_title' => 'Очищення резервних копій пройшло вдало!',\n    'cleanup_successful_body' => 'Очищенно від старих резервних копій :application_name на диску :disk_name пойшло успішно.',\n\n    'healthy_backup_found_subject' => 'Резервна копія :application_name з диску :disk_name установлена',\n    'healthy_backup_found_subject_title' => 'Резервна копія :application_name установлена',\n    'healthy_backup_found_body' => 'Резервна копія :application_name успішно установлена. Хороша робота!',\n\n    'unhealthy_backup_found_subject' => 'Увага: резервна копія :application_name не установилась',\n    'unhealthy_backup_found_subject_title' => 'Увага: резервна копія для :application_name не установилась. :problem',\n    'unhealthy_backup_found_body' => 'Резервна копія для :application_name на диску :disk_name не установилась.',\n    'unhealthy_backup_found_not_reachable' => 'Резервна копія не змогла установитись. :error',\n    'unhealthy_backup_found_empty' => 'Резервні копії для цього додатку відсутні.',\n    'unhealthy_backup_found_old' => 'Останнє резервне копіювання створено :date є застарілим.',\n    'unhealthy_backup_found_unknown' => 'Вибачте, але ми не змогли визначити точну причину.',\n    'unhealthy_backup_found_full' => 'Резервні копії використовують занадто багато пам`яті. Використовується :disk_usage що вище за допустиму межу :disk_limit.',\n];\n"
  },
  {
    "path": "lang/vendor/backup/zh-CN/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => '异常信息: :message',\n    'exception_trace' => '异常跟踪: :trace',\n    'exception_message_title' => '异常信息',\n    'exception_trace_title' => '异常跟踪',\n\n    'backup_failed_subject' => ':application_name 备份失败',\n    'backup_failed_body' => '重要说明：备份 :application_name 时发生错误',\n\n    'backup_successful_subject' => ':application_name 备份成功',\n    'backup_successful_subject_title' => '备份成功！',\n    'backup_successful_body' => '好消息, :application_name 备份成功，位于磁盘 :disk_name 中。',\n\n    'cleanup_failed_subject' => '清除 :application_name 的备份失败。',\n    'cleanup_failed_body' => '清除备份 :application_name 时发生错误',\n\n    'cleanup_successful_subject' => '成功清除 :application_name 的备份',\n    'cleanup_successful_subject_title' => '成功清除备份！',\n    'cleanup_successful_body' => '成功清除 :disk_name 磁盘上 :application_name 的备份。',\n\n    'healthy_backup_found_subject' => ':disk_name 磁盘上 :application_name 的备份是健康的',\n    'healthy_backup_found_subject_title' => ':application_name 的备份是健康的',\n    'healthy_backup_found_body' => ':application_name 的备份是健康的。干的好！',\n\n    'unhealthy_backup_found_subject' => '重要说明：:application_name 的备份不健康',\n    'unhealthy_backup_found_subject_title' => '重要说明：:application_name 备份不健康。 :problem',\n    'unhealthy_backup_found_body' => ':disk_name 磁盘上 :application_name 的备份不健康。',\n    'unhealthy_backup_found_not_reachable' => '无法访问备份目标。 :error',\n    'unhealthy_backup_found_empty' => '根本没有此应用程序的备份。',\n    'unhealthy_backup_found_old' => '最近的备份创建于 :date ，太旧了。',\n    'unhealthy_backup_found_unknown' => '对不起，确切原因无法确定。',\n    'unhealthy_backup_found_full' => '备份占用了太多存储空间。当前占用了 :disk_usage ，高于允许的限制 :disk_limit。',\n\n    'no_backups_info' => '尚未进行任何备份',\n    'application_name' => '应用名称',\n    'backup_name' => '备份名称',\n    'disk' => '磁盘',\n    'newest_backup_size' => '最新备份大小',\n    'number_of_backups' => '备份数量',\n    'total_storage_used' => '使用的总存储量',\n    'newest_backup_date' => '最新备份大小',\n    'oldest_backup_date' => '最旧的备份大小',\n];\n"
  },
  {
    "path": "lang/vendor/backup/zh-TW/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => '異常訊息: :message',\n    'exception_trace' => '異常追蹤: :trace',\n    'exception_message_title' => '異常訊息',\n    'exception_trace_title' => '異常追蹤',\n\n    'backup_failed_subject' => ':application_name 備份失敗',\n    'backup_failed_body' => '重要說明：備份 :application_name 時發生錯誤',\n\n    'backup_successful_subject' => ':application_name 備份成功',\n    'backup_successful_subject_title' => '備份成功！',\n    'backup_successful_body' => '好消息, :application_name 備份成功，位於磁盤 :disk_name 中。',\n\n    'cleanup_failed_subject' => '清除 :application_name 的備份失敗。',\n    'cleanup_failed_body' => '清除備份 :application_name 時發生錯誤',\n\n    'cleanup_successful_subject' => '成功清除 :application_name 的備份',\n    'cleanup_successful_subject_title' => '成功清除備份！',\n    'cleanup_successful_body' => '成功清除 :disk_name 磁盤上 :application_name 的備份。',\n\n    'healthy_backup_found_subject' => ':disk_name 磁盤上 :application_name 的備份是健康的',\n    'healthy_backup_found_subject_title' => ':application_name 的備份是健康的',\n    'healthy_backup_found_body' => ':application_name 的備份是健康的。幹的好！',\n\n    'unhealthy_backup_found_subject' => '重要說明：:application_name 的備份不健康',\n    'unhealthy_backup_found_subject_title' => '重要說明：:application_name 備份不健康。 :problem',\n    'unhealthy_backup_found_body' => ':disk_name 磁盤上 :application_name 的備份不健康。',\n    'unhealthy_backup_found_not_reachable' => '無法訪問備份目標。 :error',\n    'unhealthy_backup_found_empty' => '根本沒有此應用程序的備份。',\n    'unhealthy_backup_found_old' => '最近的備份創建於 :date ，太舊了。',\n    'unhealthy_backup_found_unknown' => '對不起，確切原因無法確定。',\n    'unhealthy_backup_found_full' => '備份佔用了太多存儲空間。當前佔用了 :disk_usage ，高於允許的限制 :disk_limit。',\n\n    'no_backups_info' => '尚未進行任何備份',\n    'application_name' => '應用名稱',\n    'backup_name' => '備份名稱',\n    'disk' => '磁碟',\n    'newest_backup_size' => '最新備份大小',\n    'number_of_backups' => '備份數量',\n    'total_storage_used' => '使用的總存儲量',\n    'newest_backup_date' => '最新備份大小',\n    'oldest_backup_date' => '最早的備份大小',\n];\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n      \"dev\": \"vite\",\n      \"build\": \"vite build\"\n  },\n  \"devDependencies\": {\n      \"axios\": \"^1.6.4\",\n      \"laravel-vite-plugin\": \"^1.0\",\n      \"vite\": \"^5.0\"\n  }\n}"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"vendor/phpunit/phpunit/phpunit.xsd\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n>\n    <testsuites>\n        <testsuite name=\"Feature\">\n            <directory>tests/Feature</directory>\n        </testsuite>\n    </testsuites>\n    <source>\n        <include>\n            <directory>app</directory>\n        </include>\n    </source>\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\"/>\n        <env name=\"APP_MAINTENANCE_DRIVER\" value=\"file\"/>\n        <env name=\"BCRYPT_ROUNDS\" value=\"4\"/>\n        <env name=\"BROADCAST_CONNECTION\" value=\"null\"/>\n        <env name=\"CACHE_STORE\" value=\"array\"/>\n        <env name=\"DB_CONNECTION\" value=\"sqlite\"/>\n        <env name=\"DB_DATABASE\" value=\":memory:\"/>\n        <env name=\"MAIL_MAILER\" value=\"array\"/>\n        <env name=\"QUEUE_CONNECTION\" value=\"sync\"/>\n        <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        <env name=\"PULSE_ENABLED\" value=\"false\"/>\n        <env name=\"TELESCOPE_ENABLED\" value=\"false\"/>\n        <env name=\"NIGHTWATCH_ENABLED\" value=\"false\"/>\n    </php>\n</phpunit>"
  },
  {
    "path": "public/.htaccess",
    "content": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    RewriteEngine On\n\n    # Handle Authorization Header\n    RewriteCond %{HTTP:Authorization} .\n    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n\n    # Handle X-XSRF-Token Header\n    RewriteCond %{HTTP:x-xsrf-token} .\n    RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]\n\n    # Redirect Trailing Slashes If Not A Folder...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_URI} (.+)/$\n    RewriteRule ^ %1 [L,R=301]\n\n    # Send Requests To Front Controller...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_FILENAME} !-f\n    RewriteRule ^ index.php [L]\n</IfModule>"
  },
  {
    "path": "public/assets/css/backpack_electric_purple_overlay.css",
    "content": "/*\t\n\tReplace standard blue with electric purple\t\n\tto match Backpack's 2020 front-end redesign.\n*/\n\n.btn-primary, \n.dataTables_wrapper .dataTables_paginate .paginate_button.current {\n    color: #fff;\n    background-color: #7C69EF;\n    border-color: #7C69EF;\n}\n\n.btn-primary:hover, \n.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {\n\tbackground-color: #6956de;\n}\n\n.btn-primary:not(:disabled):not(.disabled).active, \n.btn-primary:not(:disabled):not(.disabled):active, \n.btn-outline-primary:not(:disabled):not(.disabled):active, \n.dataTables_wrapper .dataTables_paginate .paginate_button.current:not(:disabled):not(.disabled).active, \n.dataTables_wrapper .dataTables_paginate .paginate_button.current:not(:disabled):not(.disabled):active, \n.dataTables_wrapper .dataTables_paginate .show>.dropdown-toggle.paginate_button.current, \n.show>.btn-primary.dropdown-toggle {\n\tbackground-color: #5844d0;\n\tborder-color: #5844d0;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n    color: #fff;\n    background-color: #5844d0;\n}\n\n.text-primary {\n    color: #7C69EF!important;\n}\n\nh1 {\n    color: #7C69EF!important;\n}\n\n.btn-link {\n    color: #7C69EF;\n}\n\n.btn-outline-primary {\n    color: #7C69EF;\n    border-color: #7C69EF;\n}\n\n.btn-outline-primary:hover {\n    color: #fff;\n    background-color: #7C69EF;\n    border-color: #7C69EF;\n}\n\n.btn:hover, \n.dataTables_wrapper \n.dataTables_paginate \n.paginate_button:hover {\n    color: #4024e8;\n}\n\n.page-item.active .page-link {\n    z-index: 1;\n    color: #fff;\n    background-color: #7C69EF;\n    border-color: #7C69EF;\n}\n\n.page-link:hover { color: #7C69EF; }\n\na { color: #7C69EF; }\na:hover { color: #4024e8; }\n\n.table-hover tbody tr:hover,\n#crudTable tbody tr:hover {\n\tbackground-color: rgba(124, 105, 239, 0.1);\n}\n\n.sidebar.sidebar-pills .nav-link.active .nav-icon, \n.sidebar.sidebar-pills .nav-link:hover .nav-icon,\n.sidebar.sidebar-pills .nav-link.active, \n.sidebar.sidebar-pills .nav-link:hover,\n.sidebar-pills .nav-link:hover .nav-icon {\n    color: #7C69EF!important;\n}\n\n.card.bg-primary {\n    border-color: #7C69EF;\n}\n\n.bg-primary {\n    background-color: #7C69EF!important;\n}\n\n.daterangepicker .ranges li.active,\n.daterangepicker td.active, .daterangepicker td.active:hover {\n    background-color: #7C69EF!important;\n}\n\n.pace .pace-progress {\n\tbackground: #7C69EF;\n}\n\nbody {\n\t/*border-top: 3px solid #7C69EF;*/\n}"
  },
  {
    "path": "public/assets/js/ga.js",
    "content": "window.dataLayer = window.dataLayer || [];\n\nfunction gtag()\n{\n\tdataLayer.push(arguments);\n}\n\ngtag('js', new Date());\ngtag('config', 'UA-16782706-13');"
  },
  {
    "path": "public/assets/js/meetings.js",
    "content": "// calendar view operation\ndocument.getElementById(\"calendar\")?.addEventListener(\"menuClick\", (e) => {\n  let { action, event, properties } = e.detail;\n  if (action === \"alert\") alert(`Event ${event.id} — ${properties?.message}`);\n});\n"
  },
  {
    "path": "public/assets/js/monster/fields.js",
    "content": "/**\n * This file includes all the fields inside Monster,\n * as an array, in order to be used for testing\n * the crud.field() JS library.\n */\n\nvar monsterFields = [\n    // ---------------------------------\n    // Monster Fields, by Name and Type\n    // ---------------------------------\n    // syntax: 'fieldName', // fieldType\n    // ---------------------------------\n    'checkbox', // checkbox\n    'roles', // checklist\n    // checklist_dependency\n    'color', // color\n    // custom_html\n    'date', // date\n    'datetime', // datetime\n    'email', // email\n    'status', //enum\n    'hidden', // hidden\n    'month', // month\n    'number', 'float', 'number_with_prefix', 'number_with_suffix', 'text_with_both_prefix_and_suffix', // number\n    'phone', // phone\n    'password', // password\n    'radio', // radio\n    'range', // range\n    'select', // select (1-n relationship)\n    'select_grouped_id', // select_grouped\n    'tags', // select_multiple (n-n relationship)\n    'select_from_array', // select_from_array\n    'summernote', // summernote\n    'text', // text\n    'textarea', // textarea\n    'time', // time\n    'upload', // upload\n    'upload_multiple', // upload_multiple\n    'url', // url\n    'switch', // switch\n    'dropzone', //dropzone\n    // view\n    'week', // week\n    'address_google',\n    'location', //google_map\n    'browse', // browse PRO\n    'browse_multiple', // browse_multiple PRO\n    'base64_image', // base64_image PRO\n    'wysiwyg', // ckeditor PRO\n    'start_date', 'end_date', // date_range PRO\n    'date_picker', // date_picker PRO\n    'datetime_picker', // datetime_picker PRO\n    'easymde', // easymde PRO\n    'icon_picker', // icon_picker PRO\n    'image', // image PRO\n    'address.street', 'address.country', 'sentiment.text', 'sentiment.user', 'category', 'postalboxer', 'countries', 'universes', 'bills', 'fallback_icon', 'icondummy', 'wish', 'postalboxes', 'ball', 'stars', 'recommends', 'products', 'dummyproducts', // relationship PRO\n    // repeatable PRO\n    'repeatable_example_2',\n    'select2', // select2 (1-n relationship) PRO\n    'categories', // select2_multiple (n-n relationship) PRO\n    'select2_nested_id', // select2_nested PRO\n    'select2_grouped_id', // select2_grouped PRO\n    'select_and_order', // select_and_order PRO\n    'select2_from_array', // select2_from_array PRO\n    'select2_from_ajax', // select2_from_ajax PRO\n    'articles', // select2_from_ajax_multiple PRO\n    'table', 'fake_table', // table PRO\n    'tinymce', // tinymce PRO\n    'video', // video PRO\n    'slug', // slug PRO\n    // 'wysiwyg', // wysiwyg PRO - included in ckeditor and summernote\n];\n\n// console.log(monsterFields);\n"
  },
  {
    "path": "public/assets/js/monster/test-custom-field.js",
    "content": "/**\n * This file tests custom crud.field('name').something() methods\n * on SOME Monster field types.\n */\n\n$('nav[aria-label=breadcrumb]').append('<a class=\"btn btn-warning ml-1 ms-1 mb-4\" href=\"javascript:testCustomFieldMethods()\">custom methods</a>');\n\nfunction testCustomFieldMethods() {\n\n    alert('Tab 1 > checkbox will been checked... then unchecked after 3 seconds');\n\n    crud.field('checkbox').check();\n\n    setTimeout(function(){\n        crud.field('checkbox').uncheck();\n        // console.log('Tab 1 > checkbox has been unchecked');\n    }, 3000);\n\n}\n\n"
  },
  {
    "path": "public/assets/js/monster/test-disable-field.js",
    "content": "/**\n * This file tests the crud.field('name').disable() method\n * on all Monster field types, assuming the fields.js\n * file is already loaded.\n */\n\n$('nav[aria-label=breadcrumb]').append('<a class=\"btn btn-warning ml-1 ms-1 mb-4\" href=\"javascript:testCrudFieldDisable()\">disable()</a>');\n\nfunction testCrudFieldDisable() {\n    // go through all Monster fields and disable them\n    for (var i = 0; i <= monsterFields.length - 1; i++) {\n        crud.field(monsterFields[i]).disable();\n    }\n\n    alert('Calling disable() on all monster fields. If you can see a field that is NOT disabled... then disable() might not work on it, please investigate.');\n}\n\n"
  },
  {
    "path": "public/assets/js/monster/test-enable-field.js",
    "content": "/**\n * This file tests the crud.field('name').enable() method\n * on all Monster field types, assuming the fields.js\n * file is already loaded.\n */\n\n$('nav[aria-label=breadcrumb]').append('<a class=\"btn btn-warning ml-1 ms-1 mb-4\" href=\"javascript:testCrudFieldEnable()\">enable()</a>');\n\nfunction testCrudFieldEnable() {\n    // go through all Monster fields and enable them\n    for (var i = 0; i <= monsterFields.length - 1; i++) {\n        crud.field(monsterFields[i]).enable();\n    }\n\n    alert('Calling enable() on all monster fields. If you can see a field that is still disabled... then enable() might not work on it, please investigate.');\n}\n\n"
  },
  {
    "path": "public/assets/js/monster/test-hide-field.js",
    "content": "/**\n * This file tests the crud.field('name').hide() method\n * on all Monster field types, assuming the fields.js\n * file is already loaded.\n */\n\n$('nav[aria-label=breadcrumb]').append('<a class=\"btn btn-warning ml-4 ms-3 mb-4\" href=\"javascript:testCrudFieldHide()\">hide()</a>');\n\nfunction testCrudFieldHide() {\n    // go through all Monster fields and hide them\n    for (var i = 0; i <= monsterFields.length - 1; i++) {\n        crud.field(monsterFields[i]).hide();\n    }\n\n    alert('Calling hide() on all monster fields. If you can see a field... then hide() doesn\\'t work on it, please investigate.');\n}\n\n"
  },
  {
    "path": "public/assets/js/monster/test-onchange-field.js",
    "content": "/**\n * This file tests the crud.field('name').onChange() method\n * on all Monster field types, assuming the fields.js\n * file is already loaded.\n */\n\n$('nav[aria-label=breadcrumb]').append('<a class=\"btn btn-warning ml-1 ms-1 mb-4\" href=\"javascript:testCrudFieldOnChange()\">onChange()</a>');\n\nfunction testCrudFieldOnChange() {\n    alert('Open your browser\\'s console, then use each field you want to test. A line should be output in your console, every time a change event is triggered.');\n\n    // add an onChange event on all fields\n    monsterFields.forEach(name => {\n        crud.field(name).onChange(field => {\n            console.log(`Value for field ${field.name} (type ${field.type}) was changed to ${field.value}`);\n        });\n    });\n}\n"
  },
  {
    "path": "public/assets/js/monster/test-require-field.js",
    "content": "/**\n * This file tests the crud.field('name').require() method\n * on all Monster field types, assuming the fields.js\n * file is already loaded.\n */\n\n$('nav[aria-label=breadcrumb]').append('<a class=\"btn btn-warning ml-1 ms-1 mb-4\" href=\"javascript:testCrudFieldRequire()\">require()</a>');\n\nfunction testCrudFieldRequire() {\n    // go through all Monster fields and require them\n    for (var i = 0; i <= monsterFields.length - 1; i++) {\n        crud.field(monsterFields[i]).require();\n    }\n\n    alert('Calling require() on all monster fields. If you can see a field WITHOUT an asterisk... then require() doesn\\'t work on it, please investigate.');\n}\n\n"
  },
  {
    "path": "public/assets/js/monster/test-show-field.js",
    "content": "/**\n * This file tests the crud.field('name').show() method\n * on all Monster field types, assuming the fields.js\n * file is already loaded.\n */\n\n$('nav[aria-label=breadcrumb]').append('<a class=\"btn btn-warning ml-1 ms-1 mb-4\" href=\"javascript:testCrudFieldShow()\">show()</a>');\n\nfunction testCrudFieldShow() {\n    // go through all Monster fields and hide them\n    for (var i = 0; i <= monsterFields.length - 1; i++) {\n        crud.field(monsterFields[i]).show();\n    }\n\n    alert('Calling show() on all monster fields. If you can\\'t see a field... then show() doesn\\'t work on it, please investigate.');\n}\n\n"
  },
  {
    "path": "public/assets/js/monster/test-top-scenarios.js",
    "content": "// EXAMPLE 1\n// when a checkbox is checked, show a second field;\ncrud.field('visible').onChange(field => {\n  crud.field('visible_where').show(field.value == 1);\n}).change();\n\n// EXAMPLE 2\n// when a checkbox is checked, show a second field AND un-disable/un-readonly it;\ncrud.field('displayed').onChange(field => {\n  crud.field('displayed_where')\n    .show(field.value == 1)\n    .enable(field.value == 1);\n}).change();\n\n// EXAMPLE 3\n// when a radio has something specific selected, show a second field;\ncrud.field('type').onChange(field => {\n  crud.field('custom_type').show(field.value == 3);\n}).change();\n\n// EXAMPLE 4\n// when a select has something specific selected, show a second field;\ncrud.field('parent').onChange(field => {\n  crud.field('custom_parent').show(field.value == 6);\n}).change();\n\n// EXAMPLE 5\n// when a checkbox is checked AND a select has a certain value, then do something;\nlet do_something = () => {\n  console.log('Displayed AND custom parent.');\n}\ncrud.field('displayed').onChange(field => {\n  if (field.value === 1 && crud.field('parent').value == 6) {\n    do_something();\n  }\n});\ncrud.field('parent').onChange(field => {\n  if (field.value === 6 && crud.field('displayed').value == 1) {\n    do_something();\n  }\n});\n\n// EXAMPLE 6\n// when a checkbox is checked OR a select has a certain value, then show a third field;\nlet do_something_else = () => {\n  console.log('Displayed OR custom parent.');\n}\ncrud.field('displayed').onChange(field => {\n  if (field.value === 1 || crud.field('parent').value == 6) {\n    do_something_else();\n  }\n});\ncrud.field('parent').onChange(field => {\n  if (field.value === 6 || crud.field('displayed').value == 1) {\n    do_something_else();\n  }\n});\n\n// EXAMPLE 7\n// when a select is a certain value, show a second field; if it's another value, show a third field;\ncrud.field('parent').onChange(field => {\n  switch(field.value) {\n    case 2:\n      console.log('fake showing a second field');\n      break;\n    case 3:\n      console.log('fake showing a third field');\n      break;\n    default:\n      console.log('not doing anything');\n  }\n});\n\n// EXAMPLE 8\n// when a checkbox is checked, automatically check a different checkbox or radio;\ncrud.field('visible').onChange(field => {\n  crud.field('displayed').check(field.value == 1);\n});\n\n// EXAMPLE 9\n// when a text input is written into, write into a second input (eg. slug);\ncrud.field('title').onChange(function(field) {\n  crud.field('title_url_segment').input.value = field.value.toString().toLowerCase().trim()\n    .normalize('NFD')                // separate accent from letter\n    .replace(/[\\u0300-\\u036f]/g, '') // remove all separated accents\n    .replace(/\\s+/g, '-')            // replace spaces with -\n    .replace(/[^\\w\\-]+/g, '')        // remove all non-word chars\n    .replace(/\\-\\-+/g, '-')          // replace multiple '-' with single '-';\n});\n\n// EXAMPLE 10\n// when multiple inputs change, change a last input to calculate the total or smth;\nlet calculate_discount_percentage = () => {\n  let full_price = Number(crud.field('full_price').value);\n  let discounted_price = Number(crud.field('discounted_price').value);\n  let discount_percentage = (full_price - discounted_price) * 100 / full_price;\n\n  crud.field('discount_percentage').input.value = discount_percentage;\n}\n\ncrud.fields(['full_price', 'discounted_price']).forEach(field => {\n  field.onChange(calculate_discount_percentage);\n});\n\n// EXAMPLE 11\n// when dropdown subfield changes, disable another subfield\n// TODO: change the example to a dedicated repeatable, in the last tab\n// (right now it's in the Relationship tab, under Direct Relationships + Subfields... HasOne)\ncrud.field('wish').subfield('country').onChange(function(field) {\n  console.log(field.value, field.rowNumber, field.value == '');\n  crud.field('wish').subfield('body', field.rowNumber).enable(field.value == '');\n});\n\n// EXAMPLE 11\n// Using subfields\ncrud.field('repeatable_example_1').subfield('yes_or_no').onChange(function(field) {\n  crud.field('repeatable_example_1').subfield('if_no', field.rowNumber).show(field.value == 'no').enable(field.value == 'no');\n  crud.field('repeatable_example_1').subfield('if_yes', field.rowNumber).show(field.value == 'yes').enable(field.value == 'yes');\n}).change();\n\n // EXAMPLE 12\n // USING LIVE VALIDATION\n // When the value of the select changes:\n //     - if empty value, we will hide and disable the `NUMBER` and disable the `TEXT` field clearing the value.\n //     - Any other selected value will update the `NUMBER` value with the selected number and enable the `TEXT` field\n // The `TEXT` field will display a error red border while it has less than 5 characters.\n // The `NUMBER` field will highlight the `odd` numbers with a red border\ncrud.field('live_validation_select').onChange(function(field) {\n  let textInput = crud.field('live_validation_text');\n  let numberInput = crud.field('live_validation_number');\n\n  if(field.value === '') {\n    textInput.input.value = '';\n    textInput.input.classList.remove('is-invalid'); // if it was invalid before the value changed, also remove the invalid class\n    textInput.disable();\n    numberInput.disable().hide();\n  } else {\n    textInput.enable();\n    numberInput.enable().show();\n    numberInput.input.value = field.value;\n    numberInput.change()\n  }\n}).change();\n\n\ncrud.field('live_validation_text').onChange(function(field) {\n  field.input.classList.toggle('is-invalid', field.value.length < 5);\n});\n\ncrud.field('live_validation_number').onChange(function(field) {\n  field.input.classList.toggle('is-invalid', field.value % 2 != 0);\n});\n\n// EXAMPLE 13\n// In date_range, when start_date and date_range are less than 7 days apart, show a bubble\nfunction checkIfOneWeekOrMore() {\n  let start_date = new Date(crud.field('start_date').value);\n  let end_date = new Date(crud.field('end_date').value);\n  let days_between = parseInt((end_date - start_date)/1000/60/60)/24;\n\n  if (days_between < 7) {\n    new Noty({\n      type: 'warning',\n      text: 'We recommend you choose a time interval that is 7 days or more.',\n    }).show();\n  }\n}\n\n// Solution 1: we target the \"fake\" date_range input directly\ncrud.field('start_date,end_date').onChange(checkIfOneWeekOrMore);\n\n// Solution 2: we can target start_date and end_date individually\n// but then when the date_range changes, there will be multiple\n// events triggered, so muultiple bubbles triggered\n// crud.field('start_date').onChange(field => checkIfOneWeekOrMore());\n// crud.field('end_date').onChange(field => checkIfOneWeekOrMore());\n"
  },
  {
    "path": "public/assets/js/monster/test-unrequire-field.js",
    "content": "/**\n * This file tests the crud.field('name').unrequire() method\n * on all Monster field types, assuming the fields.js\n * file is already loaded.\n */\n\n$('nav[aria-label=breadcrumb]').append('<a class=\"btn btn-warning ml-1 ms-1 mb-4\" href=\"javascript:testCrudFieldUnrequire()\">unrequire()</a>');\n\nfunction testCrudFieldUnrequire() {\n    // go through all Monster fields and unrequire them\n    for (var i = 0; i <= monsterFields.length - 1; i++) {\n        crud.field(monsterFields[i]).unrequire();\n    }\n\n    alert('Calling unrequire() on all monster fields. If you can see a field WITH asterisk... then unrequire() doesn\\'t work on it, please investigate.');\n}\n\n"
  },
  {
    "path": "public/index.php",
    "content": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans.\n *\n * @author   Taylor Otwell <taylorotwell@gmail.com>\n */\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader for\n| our application. We just need to utilize it! We'll simply require it\n| into the script here so that we don't have to worry about manual\n| loading any of our classes later on. It feels nice to relax.\n|\n*/\n\nrequire __DIR__.'/../bootstrap/autoload.php';\n\n/*\n|--------------------------------------------------------------------------\n| Turn On The Lights\n|--------------------------------------------------------------------------\n|\n| We need to illuminate PHP development, so let us turn on the lights.\n| This bootstraps the framework and gets it ready for use, then it\n| will load up this application so that we can run it and send\n| the responses back to the browser and delight our users.\n|\n*/\n\n$app = require_once __DIR__.'/../bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Application\n|--------------------------------------------------------------------------\n|\n| Once we have the application, we can handle the incoming request\n| through the kernel, and send the associated response back to\n| the client's browser allowing them to enjoy the creative\n| and wonderful application we have prepared for them.\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Http\\Kernel::class);\n\n$response = $kernel->handle(\n    $request = Illuminate\\Http\\Request::capture()\n);\n\n$response->send();\n\n$kernel->terminate($request, $response);\n"
  },
  {
    "path": "public/robots.txt",
    "content": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "public/uploads/.gitkeep",
    "content": ""
  },
  {
    "path": "public/web.config",
    "content": "<configuration>\n  <system.webServer>\n    <rewrite>\n      <rules>\n        <rule name=\"Imported Rule 1\" stopProcessing=\"true\">\n          <match url=\"^(.*)/$\" ignoreCase=\"false\" />\n          <conditions>\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n          </conditions>\n          <action type=\"Redirect\" redirectType=\"Permanent\" url=\"/{R:1}\" />\n        </rule>\n        <rule name=\"Imported Rule 2\" stopProcessing=\"true\">\n          <match url=\"^\" ignoreCase=\"false\" />\n          <conditions>\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" ignoreCase=\"false\" negate=\"true\" />\n          </conditions>\n          <action type=\"Rewrite\" url=\"index.php\" />\n        </rule>\n      </rules>\n    </rewrite>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "readme.md",
    "content": "<p align=\"left\">\n    <br>\n    <a href=\"https://travis-ci.org/Laravel-Backpack/Demo\" title=\"Build Status\"><img src=\"https://img.shields.io/travis/com/Laravel-Backpack/demo\"></a>\n    <a href=\"https://styleci.io/repos/61656673\" title=\"Style CI\"><img src=\"https://styleci.io/repos/61656673/shield\"></a>\n    <a href=\"https://scrutinizer-ci.com/g/laravel-backpack/demo\" title=\"Quality Score\"><img src=\"https://img.shields.io/scrutinizer/g/laravel-backpack/demo.svg?style=flat-square\"></a>\n    <a href=\"https://scrutinizer-ci.com/g/laravel-backpack/demo/code-structure\" title=\"Coverage Status\"><img src=\"https://img.shields.io/scrutinizer/coverage/g/laravel-backpack/demo.svg?style=flat-square\"></a>\n    <a href=\"LICENSE.md\" title=\"Software License\"><img src=\"https://img.shields.io/badge/License-dual-blue\"></a>\n    <br><br>\n    <a href=\"https://backpackforlaravel.com/\">Website</a> |\n    <a href=\"https://backpackforlaravel.com/docs/\">Documentation</a> |\n    <a href=\"https://backpackforlaravel.com/addons\">Add-ons</a> |\n    <a href=\"https://backpackforlaravel.com/pricing\">Pricing</a> |\n    <a href=\"https://backpackforlaravel.com/need-freelancer-or-development-team\">Services</a> |\n    <a href=\"https://stackoverflow.com/questions/tagged/backpack-for-laravel\">Stack Overflow</a> |\n    <a href=\"https://www.reddit.com/r/BackpackForLaravel/\">Reddit</a> |\n    <a href=\"https://backpackforlaravel.com/articles\">Blog</a> |\n    <a href=\"https://backpackforlaravel.com/newsletter\">Newsletter</a>\n</p>\n\n# Backpack\\Demo\n\nLaravel BackPack's demo, which includes all Backpack packages.\n\n\n> ### Security updates and breaking changes\n> Please **[subscribe to the Backpack Newsletter](http://backpackforlaravel.com/newsletter)** so you can find out about any security updates, breaking changes or major features. We send an email every 1-2 months.\n\n\n![image](https://github.com/Laravel-Backpack/demo/assets/7188159/a8caa891-75fe-4df5-bf97-5593a334540b)\n\n## How to Use\n\nYou can find the demo online at [demo.backpackforlaravel.com](https://demo.backpackforlaravel.com/admin), and play around. But some functionality is disabled, for security reasons (uploads, edits to users). If you want to run the demo without restrictions and/or make code edits and see how they're applied, you can install it on your own machine. See below.\n\n\n## Install\n\n> **IMPORTANT**. This demo requires ALL our premium packages. If you _do not_ have access to one of them, you will _not_ be able to install it. To install this demo yourself, make sure you've purchased all our premium add-ons individually, or our Everything bundle - https://backpackforlaravel.com/pricing\n\n1) Run in your terminal:\n\n``` bash\ngit clone https://github.com/Laravel-Backpack/demo.git backpack-demo\n```\n\n2) Set your database information in your .env file (use the .env.example as an example);\n\n3) Make sure the `APP_URL` in your .env file is correctly pointing to the URL you use to access your application in the browser, for example: `http:127.0.0.1:8000` or `http://something.test`\n\n4) Run in your backpack-demo folder:\n``` bash\ncomposer install\nphp artisan key:generate\nphp artisan migrate\nphp artisan db:seed\n```\n\n## Usage\n\n1. Your admin panel is available at http://localhost/backpack-demo/admin\n2. Login with email ```admin@example.com```, password ```admin```\n3. [optional] You can register a different account, to check out the process and see your gravatar inside the admin panel.\n4. By default, registration is open only in your local environment. Check out ```config/backpack/base.php``` to change this and other preferences.\n\nNote: Depending on your configuration you may need to define a site within NGINX or Apache; Your URL domain may change from localhost to what you have defined.\n\n![Example generated CRUD interface](https://backpackforlaravel.com/uploads/docs-4-0/getting_started/tag_crud_list_entries.png)\n\n## If using docker\n\nThis package provides an example `docker-compose.yml` to launch your database and web server easily\n\n```\ncomposer install\ncp .env.example .env\nphp artisan key:generate\n```\n\nUse these parameters in your .env file\n\n```\nAPP_URL=http://localhost\nDB_CONNECTION=mysql\nDB_HOST=db\nDB_PORT=3306\nDB_DATABASE=backpackdemo\nDB_USERNAME=root\nDB_PASSWORD=asdf\n```\n\nLaunch docker\n\n```\ndocker-compose up -d\n```\n\nCreate your database with following command\n\n```\ndocker-compose exec db mysql -u root -pasdf -e \"create database if not exists backpackdemo;\"\n```\n\nMigrate and seed\n\n```\nphp artisan migrate --seed\n```\n\nYou should see the demo in your browser now\n\n```\nhttp://localhost/admin\n```\n\nTo stop the server simply run\n\n```\ndocker-compose down\n```\n\nNote:\n\nIn docker, to connect to your database from your GUI use `127.0.0.1` as your database host, instead of `localhost`\n\n## Change log\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.\n\n## Contributing\n\nPlease see [CONTRIBUTING](CONTRIBUTING.md) and [CONDUCT](CONDUCT.md) for details.\n\n## Security\n\nIf you discover any security related issues, please email tabacitu@backpackforlaravel.com instead of using the issue tracker.\n\nPlease **[subscribe to the Backpack Newsletter](http://backpackforlaravel.com/newsletter)** so you can find out about any security updates, breaking changes or major features. We send an email every 1-2 months.\n\n## Credits\n\n- [Cristian Tabacitu][link-author]\n- [All Contributors][link-contributors]\n\n## License\n\nBackpack is free for non-commercial use and 69 EUR/project for commercial use. Please see [License File](LICENSE.md) and [backpackforlaravel.com](https://backpackforlaravel.com/#pricing) for more information.\n\n## Hire us\n\nWe've spend more than 10.000 hours creating, polishing and maintaining administration panels on Laravel. We've developed e-Commerce, e-Learning, ERPs, social networks, payment gateways and much more. We've worked on admin panels _so much_, that we've created one of the most popular software in its niche - just from making public what was repetitive in our projects.\n\nIf you are looking for a developer/team to help you build an admin panel on Laravel, look no further. You'll have a difficult time finding someone with more experience & enthusiasm for this. This is _what we do_. [Contact us - let's see if we can work together](https://backpackforlaravel.com/need-freelancer-or-development-team).\n\n[link-author]: http://tabacitu.ro\n[link-contributors]: ../../contributors\n"
  },
  {
    "path": "reload.sh",
    "content": "#!/usr/bin/env bash\n\ndocker compose down --remove-orphans \"${args[@]}\"\ndocker compose build\ndocker compose up --remove-orphans \"${args[@]}\""
  },
  {
    "path": "resources/assets/sass/app.scss",
    "content": "// @import \"node_modules/bootstrap-sass/assets/stylesheets/bootstrap\";\n\n"
  },
  {
    "path": "resources/views/admin/metrics/top_products.blade.php",
    "content": "{{-- Example \"view\" metric: a custom table rendered server-side --}}\n@php\n    $products = $query->clone()\n        ->orderByDesc('price')\n        ->limit(5)\n        ->get(['name', 'price', 'status']);\n@endphp\n\n<table class=\"table table-sm table-striped mb-0\">\n    <thead>\n        <tr>\n            <th>Product</th>\n            <th class=\"text-end\">Price</th>\n            <th>Status</th>\n        </tr>\n    </thead>\n    <tbody>\n        @forelse ($products as $product)\n            <tr>\n                <td>{{ $product->name }}</td>\n                <td class=\"text-end\">${{ number_format($product->price, 2) }}</td>\n                <td>\n                    <span class=\"badge bg-{{ $product->status === 'in-stock' ? 'success' : ($product->status === 'out-of-stock' ? 'danger' : 'warning') }}\">\n                        {{ $product->status }}\n                    </span>\n                </td>\n            </tr>\n        @empty\n            <tr><td colspan=\"3\" class=\"text-secondary text-center\">No products found</td></tr>\n        @endforelse\n    </tbody>\n</table>\n"
  },
  {
    "path": "resources/views/admin/new-in-v7.blade.php",
    "content": "@extends(backpack_view('blank'))\n\n@php\n    // Add the form widget to the 'after_content' section of the widgets array\n\n    // $widgets['after_content'][] = [\n    //   'type' => 'div',\n    //   'class' => 'row',\n    //   'content' => [ // widgets\n    //         [\n    //             'type' => 'dataform',\n    //             'wrapper' => [\n    //                 'class' => 'col-md-12 mt-3',\n    //             ],\n    //             'controller' => \\App\\Http\\Controllers\\Admin\\PetShop\\SkillCrudController::class,\n    //             'formOperation' => 'update',\n    //             'entry' => \\App\\Models\\PetShop\\Skill::find(1),\n    //             'content' => [\n    //                 'header' => 'Edit Skill (TODO: move this to the right place on page)', // optional\n    //                 'body' => 'This form should make it easy to update an existing skill.<br><br>', // optional\n    //             ],\n    //         ]\n    //     ]\n    // ];\n\n    $widgets['after_content'][] = [\n        'type' => 'view',\n        'view' => 'backpack.theme-tabler::inc.commercial',\n        'wrapper' => [\n            'class' => 'mt-3',\n        ],\n    ];\n@endphp\n\n@section('content')\n\n<!-- Heading for chips -->\n<div class=\"row g-2 align-items-center mt-3\">\n    <div class=\"col\">\n        <div class=\"page-pretitle\">Views</div>\n        <h2 class=\"page-title\">Chips</h2>\n        <p class=\"mt-2 mb-2\">Include more information about an Eloquent model, in a small space. Hover over the headings\n            to understand more about the examples.</p>\n    </div>\n    <div class=\"col-auto ms-auto d-print-none\">\n        <div class=\"btn-list\">\n            <span class=\"d-none d-sm-inline\">\n                <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/crud-chips\" class=\"btn btn-primary\"> See docs  <i class=\"ms-2 la la-external-link-alt\"></i></a> <!-- TODO: link to final docs -->\n            </span>\n        </div>\n    </div>\n</div>\n\n@include('admin.partials.chip-examples')\n\n<!-- Heading for Datagrid component -->\n<div class=\"row g-2 align-items-center\">\n    <div class=\"col @if(session('backpack.theme-tabler.layout') == 'horizontal_overlap') text-white @endif\">\n        <div class=\"page-pretitle\">Components</div>\n        <h2 class=\"page-title\">Datagrid</h2>\n        <p class=\"mt-2 mb-2\">Show the most important info about an Eloquent entry, anywhere you want.</p>\n    </div>\n    <div class=\"col-auto ms-auto d-print-none\">\n        <div class=\"btn-list\">\n            <span class=\"d-none d-sm-inline\">\n                <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datagrid-1\" class=\"btn btn-primary\"> See docs  <i class=\"ms-2 la la-external-link-alt\"></i></a> <!-- TODO: link to final docs -->\n            </span>\n        </div>\n    </div>\n</div>\n\n@include('admin.partials.datagrid-examples')\n\n<!-- Heading for Datalist component -->\n<div class=\"row g-2 align-items-center mt-3\">\n    <div class=\"col\">\n        <div class=\"page-pretitle\">Components</div>\n        <h2 class=\"page-title\">Datalist</h2>\n        <p class=\"mt-2 mb-2\">Show the most important info about an Eloquent entry, anywhere you want.</p>\n    </div>\n    <div class=\"col-auto ms-auto d-print-none\">\n        <div class=\"btn-list\">\n            <span class=\"d-none d-sm-inline\">\n                <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datalist-1\" class=\"btn btn-primary\"> See docs  <i class=\"ms-2 la la-external-link-alt\"></i></a> <!-- TODO: link to final docs -->\n            </span>\n        </div>\n    </div>\n</div>\n\n@include('admin.partials.datalist-examples')\n\n<!-- Heading for Datatable component -->\n<div class=\"row g-2 align-items-center mt-3\">\n    <div class=\"col\">\n        <div class=\"page-pretitle\">Components</div>\n        <h2 class=\"page-title\">Datatable</h2>\n        <p class=\"mt-2 mb-2\">Include your complex datatable, anywhere you want.</p>\n    </div>\n    <div class=\"col-auto ms-auto d-print-none\">\n        <div class=\"btn-list\">\n            <span class=\"d-none d-sm-inline\">\n                <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datatable-1\" class=\"btn btn-primary\"> See docs  <i class=\"ms-2 la la-external-link-alt\"></i></a> <!-- TODO: link to final docs -->\n            </span>\n        </div>\n    </div>\n</div>\n\n@include('admin.partials.datatable-examples')\n\n<!-- Heading for Form component -->\n<div class=\"row g-2 align-items-center mt-3\">\n    <div class=\"col\">\n        <div class=\"page-pretitle\">Components</div>\n        <h2 class=\"page-title\">Dataform</h2>\n        <p class=\"mt-2 mb-2\">Show a form for an Eloquent entry, anywhere you want.</p>\n    </div>\n    <div class=\"col-auto ms-auto d-print-none\">\n        <div class=\"btn-list\">\n            <span class=\"d-none d-sm-inline\">\n                <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#dataform-1\" class=\"btn btn-primary\"> See docs  <i class=\"ms-2 la la-external-link-alt\"></i></a> <!-- TODO: link to final docs -->\n            </span>\n        </div>\n    </div>\n</div>\n\n\n@include('admin.partials.dataform-examples')\n\n<!-- Heading for Form component -->\n<div class=\"row g-2 align-items-center mt-3\">\n    <div class=\"col\">\n        <div class=\"page-pretitle\">Components</div>\n        <h2 class=\"page-title\">Dataform Modal</h2>\n        <p class=\"mt-2 mb-2\">Show a form for an Eloquent entry, in a modal.</p>\n    </div>\n    <div class=\"col-auto ms-auto d-print-none\">\n        <div class=\"btn-list\">\n            <span class=\"d-none d-sm-inline\">\n                <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#dataform-modal-1\" class=\"btn btn-primary\"> See docs  <i class=\"ms-2 la la-external-link-alt\"></i></a> <!-- TODO: link to final docs -->\n            </span>\n        </div>\n    </div>\n</div>\n\n@include('admin.partials.dataform-modal-examples')\n\n@endsection\n"
  },
  {
    "path": "resources/views/admin/partials/chip-examples.blade.php",
    "content": "@php\n    $user = \\App\\User::inRandomOrder()->first();\n    $invoices = \\App\\Models\\PetShop\\Invoice::inRandomOrder()->take(3)->get();\n    $products = \\App\\Models\\Product::inRandomOrder()->take(3)->get();\n    $owners = \\App\\Models\\PetShop\\Owner::inRandomOrder()->take(3)->get();\n@endphp\n\n<div class=\"row\">\n\n    <div class=\"col-md-4\">\n\n        <div class=\"card mb-2\">\n            <div class=\"card-body\">\n\n                {{-- Example of General chip for a person, with hardcoded complete data --}}\n                @include('crud::chips.general', [\n                    'heading' => [\n                        'content' => 'John Doe',\n                        'href' => 'https://google.com',\n                        'target' => '_blank',\n                        'title' => 'Example of a chip without URL',\n                    ],\n                    'image' => [\n                        'content' => asset('uploads/person1.jpg'),\n                        'element' => 'a',\n                        'href' => 'https://chatgpt.com',\n                        'target' => '_blank',\n                        'title' => 'Image can have its own URL, but why?! Falls back to the one in the heading',\n                    ],\n                    'details' => [\n                        [\n                            'icon' => 'la la-hashtag',\n                            'content' => '8AH13A7',\n                            'url' => 'mailto:john.doe@example.com',\n                            'title' => 'Click to email',\n                        ],\n                        [\n                            'icon' => 'la la-envelope',\n                            'content' => 'john.doe@example.com',\n                            'url' => 'mailto:john.doe@example.com',\n                            'title' => 'Click to email',\n                        ],\n                        [\n                            'icon' => 'la la-phone',\n                            'content' => '+1 (555) 123-4567',\n                            'url' => 'tel:+15551234567',\n                            'title' => 'Click to call',\n                        ]\n                    ]\n                ])\n\n            </div>\n        </div>\n\n    </div>\n\n    <div class=\"col-md-4\">\n\n        <div class=\"card mb-2\">\n            <div class=\"card-body\">\n\n                {{-- Example of General chip for a person, with hardcoded data, missing URL and image --}}\n                @include('crud::chips.general', [\n                    'heading' => [\n                        'content' => 'Adam Mancinello',\n                        'title' => 'Example of a chip without URL or image',\n                        'element' => 'span', // can be a span, a div, or an anchor\n                    ],\n                    'details' => [\n                        [\n                            'icon' => 'la la-hashtag',\n                            'content' => '8AH13A7',\n                            'url' => 'mailto:adam.mancinello@example.com',\n                            'title' => 'Click to email',\n                        ],\n                        [\n                            'icon' => 'la la-envelope',\n                            'content' => 'adam.mancinello@example.com',\n                            'url' => 'mailto:adam.mancinello@example.com',\n                            'title' => 'Click to email',\n                        ],\n                        [\n                            'icon' => 'la la-phone',\n                            'content' => '+1 (555) 123-4567',\n                            'url' => 'tel:+15551234567',\n                            'title' => 'Click to call',\n                        ]\n                    ]\n                ])\n\n            </div>\n        </div>\n\n    </div>\n\n\n    <div class=\"col-md-4\">\n\n        <div class=\"card mb-2\">\n            <div class=\"card-body\">\n\n                {{-- Example of General chip for a person, with data from Eloquent model --}}\n                @include('crud::chips.general', [\n                    'heading' => [\n                        'content' => $user->name,\n                        'href' => backpack_url('user/'.$user->id.'/show'),\n                        'title' => 'Click to preview',\n                    ],\n                    'image' => [\n                        'content' => backpack_avatar_url($user), // doesn't work well with dummy data\n                        'element' => 'a',\n                        'href' => backpack_url('user/'.$user->id.'/show'),\n                        'title' => 'Because of dummy data, this image is not available, but it would show a profile image',\n                    ],\n                    'details' => [\n                        [\n                            'icon' => 'la la-hashtag',\n                            'content' => $user->id,\n                            'url' => backpack_url('user/'.$user->id.'/show'),\n                            'title' => 'Click to preview',\n                        ],\n                        [\n                            'icon' => 'la la-envelope',\n                            'content' => $user->email,\n                            'url' => 'mailto:'.$user->email,\n                            'title' => 'Click to email',\n                        ],\n                        [\n                            'icon' => 'la la-calendar',\n                            'content' => $user->created_at->format('F j, Y'),\n                            'title' => 'Created at '.$user->created_at,\n                        ]\n                    ]\n                ])\n\n            </div>\n        </div>\n\n    </div>\n\n</div>\n\n<div class=\"row\">\n    <div class=\"col\">\n        <p class=\"mt-2 mb-2\">Works well for people - in this demo, the most obvious example is pet owners:</p>\n    </div>\n</div>\n\n<div class=\"row\">\n\n    @foreach ($owners as $owner)\n\n    <div class=\"col-md-4\">\n\n        <div class=\"card mb-2\">\n            <div class=\"card-body\">\n\n                {{-- Example of General chip for a person, with data from Eloquent model --}}\n                @include('crud::chips.owner', ['entry' => $owner])\n\n            </div>\n        </div>\n\n    </div>\n\n    @endforeach\n</div>\n\n<div class=\"row\">\n    <div class=\"col\">\n        <p class=\"mt-2 mb-2\">But it's particularly useful for entities where the name alone can't identify an entity, eg. Invoice:</p>\n    </div>\n</div>\n\n\n<div class=\"row\">\n\n    @foreach ($invoices as $invoice)\n\n    <div class=\"col-md-4\">\n\n        <div class=\"card mb-2\">\n            <div class=\"card-body\">\n\n                {{-- Example of General chip for a person, with data from Eloquent model --}}\n                @include('crud::chips.invoice', ['entry' => $invoice])\n\n            </div>\n        </div>\n\n    </div>\n\n    @endforeach\n</div>\n\n\n<div class=\"row\">\n    <div class=\"col\">\n        <p class=\"mt-2 mb-2\">Or entities that can sometimes have duplicated names, like Products:</p>\n    </div>\n</div>\n\n<div class=\"row mb-4\">\n\n    @foreach ($products as $product)\n\n    <div class=\"col-md-4\">\n\n        <div class=\"card mb-2\">\n            <div class=\"card-body\">\n\n                {{-- Example of General chip for a person, with data from Eloquent model --}}\n                @include('crud::chips.general', [\n                    'heading' => [\n                        'content' => $product->name,\n                        'href' => backpack_url('product/'.$product->id.'/show'),\n                        'title' => 'Click to preview',\n                    ],\n                    'details' => [\n                        [\n                            'icon' => 'la la-dollar',\n                            'content' => $product->price,\n                            'title' => 'Priced at $'.$product->price,\n                        ],\n                        [\n                            'icon' => 'la la-tag',\n                            'content' => $product->category->name,\n                            'url' => backpack_url('category/'.$product->category->id.'/show'),\n                            'title' => 'Product category: '.$product->category->name,\n                        ],\n                        [\n                            'icon' => 'la la-tag',\n                            'content' => $product->status,\n                            'title' => 'Product status: '.$product->status->value,\n                        ],\n                        [\n                            'icon' => 'la la-traffic-light',\n                            'content' => $product->condition,\n                            'title' => 'Production condition: '.$product->condition,\n                        ]\n                    ]\n                ])\n\n            </div>\n        </div>\n\n    </div>\n\n    @endforeach\n</div>\n"
  },
  {
    "path": "resources/views/admin/partials/dataform-examples.blade.php",
    "content": "<div class=\"row\">\n    <div class=\"col-md-12\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Create Invoice\n\n                    <i class=\"la la-info-circle text-muted\"\n                        data-bs-toggle=\"tooltip\"\n                        data-bs-placement=\"top\"\n                        title=\"Showing the form needed to create an Invoice, with all configuration pulled directly from InvoiceCrudController.\"></i>\n                </h3>\n                <div class=\"card-actions\">\n                    <div class=\"dropdown\">\n                        <a href=\"#\" class=\"btn-action dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                            aria-expanded=\"false\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n                                stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n                                class=\"icon icon-1\">\n                                <path d=\"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                            </svg>\n                        </a>\n                        <div class=\"dropdown-menu dropdown-menu-end\" style=\"\">\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://github.com/Laravel-Backpack/demo/blob/main/resources/views/admin/partials/dataform-examples.blade.php\">See demo code</a>\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#dataform-1\">See docs</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"card-body\">\n\n                <x-bp-dataform :controller='\\App\\Http\\Controllers\\Admin\\PetShop\\InvoiceCrudController::class' />\n\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"row\">\n\n    <div class=\"col-md-6\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Quick Add Tag (With Extra Field)\n\n                    <i class=\"la la-info-circle text-muted\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                        title=\"Showing the form to create a Tag. Configuration is from TagCrudController, and one custom field is added here.\"></i>\n                </h3>\n            </div>\n            <div class=\"card-body\">\n\n                <x-backpack::dataform\n                    formId=\"quickAddTag\"\n                    :controller=\"\\Backpack\\NewsCRUD\\app\\Http\\Controllers\\Admin\\TagCrudController::class\"\n                    formOperation=\"create\"\n                    :setup=\"function($crud, $entry)  {\n                        $crud->field('custom_test_field')->type('text');\n                    }\"\n                    :saveActions=\"[\\Backpack\\CRUD\\app\\Library\\CrudPanel\\SaveActions\\SaveAndList::class]\"\n                    :showCancelButton=\"false\"\n                />\n\n            </div>\n        </div>\n    </div>\n    <div class=\"col-md-6\">\n        <div class=\"card mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Quick Edit Tag\n                </h3>\n            </div>\n            <div class=\"card-body\">\n\n                <x-backpack::dataform\n                    formId=\"quickEditTag\"\n                    :controller=\"\\Backpack\\NewsCRUD\\app\\Http\\Controllers\\Admin\\TagCrudController::class\"\n                    formOperation=\"update\"\n                    :entry=\"\\Backpack\\NewsCRUD\\app\\Models\\Tag::find(1)\"\n                    :saveActions=\"[\\Backpack\\CRUD\\app\\Library\\CrudPanel\\SaveActions\\SaveAndEdit::class]\"\n                    :formInsideCard=\"true\"\n                />\n\n            </div>\n        </div>\n    </div>\n\n</div>\n"
  },
  {
    "path": "resources/views/admin/partials/dataform-modal-examples.blade.php",
    "content": "<div class=\"row\">\n    <div class=\"col-md-12\">\n        <div class=\"card mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Quickly Add/Edit Invoices\n\n                    <span class=\"card-subtitle\">Showing latest invoices in a custom table, with buttons to create or edit an invoice in a modal form.</span>\n            </div>\n            <div class=\"card-body\">\n\n                @php\n                    $newestInvoices = \\App\\Models\\Petshop\\Invoice::orderBy('updated_at')->take(5)->get();\n                @endphp\n\n                <div class=\"table-responsive\">\n                    <table class=\"table table-vcenter card-table table-striped table-hover\">\n                        <thead>\n                            <tr>\n                                <th class=\"w-1\">Actions</th>\n                                <th>Invoice</th>\n                                <th>Customer</th>\n                                <th>Total</th>\n                                <th>Created</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            @foreach ($newestInvoices as $invoice)\n                            <tr>\n                                <td>\n                                    <a href=\"#\" data-bs-toggle=\"modal\" data-bs-target=\"#edit_invoice_{{ $invoice->id }}\" bp-button=\"create\">Edit</a>\n\n                                    <x-bp-dataform-modal\n                                        formId=\"edit_invoice_{{ $invoice->id }}\"\n                                        :controller=\"\\App\\Http\\Controllers\\Admin\\PetShop\\InvoiceCrudController::class\"\n                                        formOperation=\"updateInModal\"\n                                        :entry=\"\\App\\Models\\PetShop\\Invoice::find($invoice->id)\"\n                                    />\n\n                                </td>\n                                <td>\n                                    <a href=\"{{ url('admin/pet-shop/invoice/'.$invoice->id.'/show') }}\">\n                                    {{ $invoice->series.' '.$invoice->number }}\n                                    </a>\n                                </td>\n                                <td>{{ $invoice->owner->name }}</td>\n                                <td>${{ number_format($invoice->total, 0) }}</td>\n                                <td class=\"text-secondary\">{{ $invoice->created_at->diffForHumans() }}</td>\n\n                            </tr>\n                            @endforeach\n                        </tbody>\n                    </table>\n                </div>\n\n                <p class=\"mt-3\">\n                    Didn't find what you're looking for?\n\n                    <a href=\"#\" class=\"text-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#create_invoice\">\n                        <span>Create a new invoice</span>\n                    </a>\n                </p>\n\n                <x-bp-dataform-modal\n                    formId=\"create_invoice\"\n                    :controller='\\App\\Http\\Controllers\\Admin\\PetShop\\InvoiceCrudController::class'\n                    :formInsideCard=\"false\"\n                />\n\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/admin/partials/datagrid-examples.blade.php",
    "content": "<div class=\"row\">\n\n    <div class=\"col-md-12\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Random Pet\n\n                    <i class=\"la la-info-circle text-muted\"\n                        data-bs-toggle=\"tooltip\"\n                        data-bs-placement=\"top\"\n                        title=\"Showing a random pet from the DB, automatically loading its columns and buttons from the show operation in PetCrudController.\"></i>\n                </h3>\n                <div class=\"card-actions\">\n                    <div class=\"dropdown\">\n                        <a href=\"#\" class=\"btn-action dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                            aria-expanded=\"false\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\n                                fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" class=\"icon icon-1\">\n                                <path d=\"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                            </svg>\n                        </a>\n                        <div class=\"dropdown-menu dropdown-menu-end\">\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://github.com/Laravel-Backpack/demo/blob/main/resources/views/admin/partials/datagrid-examples.blade.php\">See demo code</a>\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datagrid-1\">See docs</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"card-body p-0\">\n                <x-bp-datagrid\n                    :entry=\"\\App\\Models\\PetShop\\Pet::inRandomOrder()->first()\"\n                    controller=\"\\App\\Http\\Controllers\\Admin\\PetShop\\PetCrudController\"\n                    operation=\"list\" :setup=\"function($crud, $entry) {\n                        $crud->removeColumn('created_at');\n                    }\" />\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-md-12\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Random Owner\n\n                    <i class=\"la la-info-circle text-muted\"\n                        data-bs-toggle=\"tooltip\"\n                        data-bs-placement=\"top\"\n                        title=\"Showing a random owner from the DB, automatically loading its columns and buttons from the show operation in OwnerCrudController.\"></i>\n                </h3>\n                <div class=\"card-actions\">\n                    <div class=\"dropdown\">\n                        <a href=\"#\" class=\"btn-action dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                            aria-expanded=\"false\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\n                                fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" class=\"icon icon-1\">\n                                <path d=\"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                            </svg>\n                        </a>\n                        <div class=\"dropdown-menu dropdown-menu-end\" style=\"\">\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://github.com/Laravel-Backpack/demo/blob/main/resources/views/admin/partials/datagrid-examples.blade.php\">See demo code</a>\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datagrid-1\">See docs</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"card-body p-0\">\n\n                <x-bp-datagrid\n                    :entry=\"\\App\\Models\\PetShop\\Owner::inRandomOrder()->first()\"\n                    controller=\"\\App\\Http\\Controllers\\Admin\\PetShop\\OwnerCrudController\"\n                    operation=\"show\"\n                    :setup=\"function($crud, $entry) {\n                        // we want to remove the datatables widgets that are used\n                        // in the Show operation of an Owner\n                        Widget::collection()->get('pets_crud')?->remove();\n                        Widget::collection()->get('invoices_crud')?->remove();\n                    }\" />\n\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-md-12\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    First User\n\n                    <i class=\"la la-info-circle text-muted\"\n                        data-bs-toggle=\"tooltip\"\n                        data-bs-placement=\"top\"\n                        title=\"Showing the first user in the DB, directly specifying what columns to show. Notice this component doesn't have any buttons - that's because it's not tied to any CRUD.\"></i>\n                </h3>\n                <div class=\"card-actions\">\n                    <div class=\"dropdown\">\n                        <a href=\"#\" class=\"btn-action dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                            aria-expanded=\"false\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n                                stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n                                class=\"icon icon-1\">\n                                <path d=\"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                            </svg>\n                        </a>\n                        <div class=\"dropdown-menu dropdown-menu-end\" style=\"\">\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://github.com/Laravel-Backpack/demo/blob/main/resources/views/admin/partials/datagrid-examples.blade.php\">See demo code</a>\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datagrid-1\">See docs</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"card-body p-0\">\n                <x-bp-datagrid :entry=\"\\App\\User::find(1)\" :columns=\"[\n                            ['label' => 'Name', 'type' => 'text', 'name' => 'name', 'size' => 6],\n                            ['label' => 'Email', 'type' => 'email', 'name' => 'email', 'size' => 6],\n                            ['label' => 'Created At', 'type' => 'datetime', 'name' => 'created_at'],\n                            ['label' => 'Updated At', 'type' => 'datetime', 'name' => 'updated_at'],\n                        ]\" />\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/admin/partials/datalist-examples.blade.php",
    "content": "<div class=\"row\">\n\n    <div class=\"col-md-4\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Random Pet\n\n                    <i class=\"la la-info-circle text-muted\"\n                        data-bs-toggle=\"tooltip\"\n                        data-bs-placement=\"top\"\n                        title=\"Showing a random pet from the DB, automatically loading its columns and buttons from the show operation in PetCrudController.\"></i>\n                </h3>\n                <div class=\"card-actions\">\n                    <div class=\"dropdown\">\n                        <a href=\"#\" class=\"btn-action dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                            aria-expanded=\"false\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\n                                fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" class=\"icon icon-1\">\n                                <path d=\"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                            </svg>\n                        </a>\n                        <div class=\"dropdown-menu dropdown-menu-end\" style=\"\">\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://github.com/Laravel-Backpack/demo/blob/main/resources/views/admin/partials/datalist-examples.blade.php\">See demo code</a>\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datalist-1\">See docs</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"card-body p-0\">\n                <x-bp-datalist\n                    :entry=\"\\App\\Models\\PetShop\\Pet::inRandomOrder()->first()\"\n                    controller=\"\\App\\Http\\Controllers\\Admin\\PetShop\\PetCrudController\"\n                    operation=\"list\"\n                    :setup=\"function($crud, $entry) {\n                        $crud->removeColumn('created_at');\n                        $crud->removeButton('trash');\n                    }\" />\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-md-4\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Random Owner\n\n                    <i class=\"la la-info-circle text-muted\"\n                        data-bs-toggle=\"tooltip\"\n                        data-bs-placement=\"top\"\n                        title=\"Showing a random owner from the DB, automatically loading its columns and buttons from the show operation in OwnerCrudController.\"></i>\n                </h3>\n                <div class=\"card-actions\">\n                    <div class=\"dropdown\">\n                        <a href=\"#\" class=\"btn-action dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                            aria-expanded=\"false\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\n                                fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" class=\"icon icon-1\">\n                                <path d=\"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                            </svg>\n                        </a>\n                        <div class=\"dropdown-menu dropdown-menu-end\" style=\"\">\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://github.com/Laravel-Backpack/demo/blob/main/resources/views/admin/partials/datalist-examples.blade.php\">See demo code</a>\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datalist-1\">See docs</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"card-body p-0\">\n\n                <x-bp-datalist\n                    :entry=\"\\App\\Models\\PetShop\\Owner::inRandomOrder()->first()\"\n                    controller=\"\\App\\Http\\Controllers\\Admin\\PetShop\\OwnerCrudController\"\n                    operation=\"show\"\n                    :setup=\"function($crud, $entry) {\n                        $crud->removeButton('delete');\n                        // we want to remove the datatables widgets that are used\n                        // in the Show operation of an Owner\n                        Widget::collection()->get('pets_crud')?->remove();\n                        Widget::collection()->get('invoices_crud')?->remove();\n                    }\"\n                />\n\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-md-4\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    First User\n\n                    <i class=\"la la-info-circle text-muted\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                        title=\"Showing the first user in the DB, directly specifying what columns to show. Notice this component doesn't have any buttons - that's because it's not tied to any CRUD.\"></i>\n                </h3>\n                <div class=\"card-actions\">\n                    <div class=\"dropdown\">\n                        <a href=\"#\" class=\"btn-action dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                            aria-expanded=\"false\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n                                stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n                                class=\"icon icon-1\">\n                                <path d=\"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                            </svg>\n                        </a>\n                        <div class=\"dropdown-menu dropdown-menu-end\" style=\"\">\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://github.com/Laravel-Backpack/demo/blob/main/resources/views/admin/partials/datalist-examples.blade.php\">See demo code</a>\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datalist-1\">See docs</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"card-body p-0\">\n                <x-bp-datalist :entry=\"\\App\\User::find(1)\" :columns=\"[\n                            ['label' => 'Name', 'type' => 'text', 'name' => 'name', 'size' => 6],\n                            ['label' => 'Email', 'type' => 'email', 'name' => 'email', 'size' => 6],\n                            ['label' => 'Created At', 'type' => 'datetime', 'name' => 'created_at'],\n                            ['label' => 'Updated At', 'type' => 'datetime', 'name' => 'updated_at'],\n                        ]\" />\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/admin/partials/datatable-examples.blade.php",
    "content": "<div class=\"row\">\n    <div class=\"col-md-12\">\n        <div class=\"card card-stacked mt-3\">\n            <div class=\"card-header\">\n                <h3 class=\"card-title\">\n                    Invoices\n                    <span class=\"card-subtitle\">Showing all invoices in the DB, pulling the entire setup from InvoiceCrudController.</span>\n                </h3>\n                <div class=\"card-actions\">\n                    <div class=\"dropdown\">\n                        <a href=\"#\" class=\"btn-action dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                            aria-expanded=\"false\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n                                stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n                                class=\"icon icon-1\">\n                                <path d=\"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                                <path d=\"M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\n                            </svg>\n                        </a>\n                        <div class=\"dropdown-menu dropdown-menu-end\" style=\"\">\n\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://github.com/Laravel-Backpack/demo/blob/main/resources/views/admin/partials/datatable-examples.blade.php\">See demo code</a>\n                            <a class=\"dropdown-item\" target=\"_blank\" href=\"https://backpackforlaravel.com/docs/7.x/base-components#datatable-1\">See docs</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"card-body\">\n\n                <x-backpack::datatable\n                    :controller=\"\\App\\Http\\Controllers\\Admin\\PetShop\\InvoiceCrudController::class\"\n                    :setup=\"function($crud, $parent) {\n                        $crud->enableExportButtons();\n                    }\"\n                    :useFixedHeader=\"false\"\n                />\n\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/admin/petshop_about.blade.php",
    "content": "@extends(backpack_view('blank'))\n\n@section('content')\n\n<div class=\"row\">\n\t<div class=\"col-12\">\n\t    <div class=\"card\">\n\t      <div class=\"card-header\">Pet Shop Example</div>\n\t      <div class=\"card-body\">This mock admin panel is here to highlight all the things you can do using the <a href=\"https://backpackforlaravel.com/docs/crud-fields#relationship\" target=\"_blank\">relationship field</a> in Backpack, as it's using all relationship types Laravel supports. You can use the diagram below to better understand the database structure and where each relationship type is being used:</div>\n\t    </div>\n\t  </div>\n</div>\n\n\t<a target=\"_blank\" href=\"{{ asset('uploads/petshop_erd_diagram.png') }}\"><img class=\"img img-fluid\" src=\"{{ asset('uploads/petshop_erd_diagram.png') }}\" alt=\"Petshop ERD Diagram\"></a>\n\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/.gitkeep",
    "content": "\n"
  },
  {
    "path": "resources/views/vendor/backpack/crud/buttons/fake-editable-columns.blade.php",
    "content": "@if(request()->boolean('fake'))\n<a href=\"{{ backpack_url('editable-monster') }}\" class=\"btn btn-warning\">\n    <span><i class=\"la la-magic\"></i> Editable Columns</span>\n</a>\n@else\n<a href=\"{{ backpack_url('editable-monster/?fake=true') }}\" class=\"btn btn-warning\">\n    <span><i class=\"la la-magic\"></i> Fake Editable Columns</span>\n</a>\n@endif"
  },
  {
    "path": "resources/views/vendor/backpack/crud/buttons/passports.blade.php",
    "content": "<a href=\"{{ backpack_url('pet-shop/passport') }}\" class=\"btn btn-outline-primary\"><span><i class=\"la la-id-card\"></i> See Passports</span></a>\n"
  },
  {
    "path": "resources/views/vendor/backpack/crud/chips/invoice.blade.php",
    "content": "@include('crud::chips.general', [\n    'heading' => [\n        'content' => 'Invoice '.$entry->series.' '.$entry->number.' - '.$entry->owner->name,\n        'href' => backpack_url('pet-shop/invoice/'.$entry->id.'/show'),\n    ],\n    'details' => [\n        [\n            'icon' => 'la la-dollar',\n            'content' => $entry->total,\n            'title' => 'Total invoice amount $'.$entry->total,\n        ],\n        [\n            'icon' => 'la la-tags',\n            'content' => $entry->items->count().' items',\n        ],\n        [\n            'icon' => 'la la-calendar',\n            'content' => $entry->issuance_date->format('F j, Y'),\n            'title' => 'Issuance date: '.$entry->issuance_date,\n        ]\n    ]\n])\n"
  },
  {
    "path": "resources/views/vendor/backpack/crud/chips/owner.blade.php",
    "content": "@php\n    $last_purchase = $entry->invoices()->orderBy('issuance_date', 'DESC')->first()->issuance_date;\n@endphp\n\n@include('crud::chips.general', [\n    'heading' => [\n        'content' => $entry->name,\n        'href' => backpack_url('pet-shop/owner/'.$entry->id.'/show'),\n    ],\n    'image' => [\n        'content' => asset($entry->avatar->url),\n    ],\n    'details' => [\n        [\n            'icon' => 'la la-dog',\n            'content' => $entry->pets->count().' pets',\n            'title' => 'Number of pets: '.$entry->pets->count(),\n        ],\n        [\n            'icon' => 'la la-shopping-cart',\n            'content' => $entry->invoices->count(). ' purchases',\n            'title' => 'Number of purchases: '.$entry->invoices->count(),\n        ],\n        [\n            'icon' => 'la la-calendar',\n            'content' => $last_purchase->format('F j, Y'),\n            'title' => 'Last purchase: '.$last_purchase,\n        ]\n    ]\n])\n"
  },
  {
    "path": "resources/views/vendor/backpack/crud/columns/custom_view_column_example.blade.php",
    "content": "{{-- Used for 'custom_view' column example --}}\n<s>Bad</s><b>Good</b>"
  },
  {
    "path": "resources/views/vendor/backpack/crud/details_row/monster.blade.php",
    "content": "<div class=\"m-t-10 m-b-10 p-l-10 p-r-10 p-t-10 p-b-10\">\n\t<div class=\"row text-wrap\">\n\t\t<div class=\"col-md-12\">\n\t\t\t<small>Use the <span class=\"label label-default\">details_row</span> functionality to show more information about the entry, when that information does not fit inside the table column.</small><br><br>\n\t\t\t<strong>Text:</strong> {{ $entry->text }} <br>\n\t\t\t<strong>Textarea:</strong> {{ $entry->textarea }} <br>\n\t\t\t<strong>Email:</strong> {{ $entry->email }} <br>\n\t\t\t<strong>Number:</strong> {{ $entry->number }} <br>\n\t\t\t<strong>Float:</strong> {{ $entry->float }} <br>\n\t\t\t<strong>Week:</strong> {{ $entry->week }} <br>\n\t\t\t<strong>Month:</strong> {{ $entry->month }} <br>\n\t\t\tetc.\n\t\t</div>\n\t</div>\n</div>\n<div class=\"clearfix\"></div>"
  },
  {
    "path": "resources/views/vendor/backpack/theme-coreuiv2/auth/login.blade.php",
    "content": "{{-- BACKPACK DEMO FILE --}}\n{{-- It makes sure the login inputs are pre-populated with the default admin user. --}}\n@extends(backpack_view('layouts.plain'))\n\n@section('content')\n    <div class=\"row justify-content-center\">\n        <div class=\"col-12 col-md-8 col-lg-4\">\n            <h3 class=\"text-center mb-4\">{{ trans('backpack::base.login') }}</h3>\n            <div class=\"card\">\n                <div class=\"card-body\">\n                    <form class=\"col-md-12 p-t-10\" role=\"form\" method=\"POST\" action=\"{{ route('backpack.auth.login') }}\">\n                        {!! csrf_field() !!}\n\n                        <div class=\"form-group\">\n                            <label class=\"control-label\" for=\"{{ $username }}\">{{ config('backpack.base.authentication_column_name') }}</label>\n\n                            <div>\n                                <input type=\"text\" class=\"form-control{{ $errors->has($username) ? ' is-invalid' : '' }}\" name=\"{{ $username }}\" value=\"{{ old($username) ?? 'admin@example.com' }}\" id=\"{{ $username }}\">\n\n                                @if ($errors->has($username))\n                                    <span class=\"invalid-feedback\">\n                                        <strong>{{ $errors->first($username) }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <label class=\"control-label\" for=\"password\">{{ trans('backpack::base.password') }}</label>\n\n                            <div>\n                                <input type=\"password\" class=\"form-control{{ $errors->has('password') ? ' is-invalid' : '' }}\" name=\"password\" id=\"password\" value=\"{{ old('username')?'':'admin' }}\">\n\n                                @if ($errors->has('password'))\n                                    <span class=\"invalid-feedback\">\n                                        <strong>{{ $errors->first('password') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div>\n                                <div class=\"checkbox\">\n                                    <label>\n                                        <input type=\"checkbox\" name=\"remember\"> {{ trans('backpack::base.remember_me') }}\n                                    </label>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div>\n                                <button type=\"submit\" class=\"btn btn-block btn-primary\">\n                                    {{ trans('backpack::base.login') }}\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n            @if (backpack_users_have_email())\n                <div class=\"text-center\"><a href=\"{{ route('backpack.auth.password.reset') }}\">{{ trans('backpack::base.forgot_your_password') }}</a></div>\n            @endif\n            @if (config('backpack.base.registration_open'))\n                <div class=\"text-center\"><a href=\"{{ route('backpack.auth.register') }}\">{{ trans('backpack::base.register') }}</a></div>\n            @endif\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-coreuiv2/dashboard.blade.php",
    "content": "@extends(backpack_view('blank'))\n\n@php\n\t// ---------------------\n\t// JUMBOTRON widget demo\n\t// ---------------------\n\t// Widget::add([\n //        'type'        => 'jumbotron',\n //        'name' \t\t  => 'jumbotron',\n //        'wrapperClass'=> 'shadow-xs',\n //        'heading'     => trans('backpack::base.welcome'),\n //        'content'     => trans('backpack::base.use_sidebar'),\n //        'button_link' => backpack_url('logout'),\n //        'button_text' => trans('backpack::base.logout'),\n //    ])->to('before_content')->makeFirst();\n\n\t// -------------------------\n\t// FLUENT SYNTAX for widgets\n\t// -------------------------\n\t// Using the progress_white widget\n\t//\n\t// Obviously, you should NOT do any big queries directly in the view.\n\t// In fact, it can be argued that you shouldn't add Widgets from blade files when you\n\t// need them to show information from the DB.\n\t//\n\t// But you do whatever you think it's best. Who am I, your mom?\n\t$productCount = App\\Models\\Product::count();\n\t$userCount = App\\User::count();\n\t$articleCount = \\Backpack\\NewsCRUD\\app\\Models\\Article::count();\n\t$lastArticle = \\Backpack\\NewsCRUD\\app\\Models\\Article::orderBy('date', 'DESC')->first();\n    $lastArticleDaysAgo = $lastArticle !== null ? \\Carbon\\Carbon::parse($lastArticle->date)->diffInDays(\\Carbon\\Carbon::today()).' days' : 'No articles';\n\n \t// notice we use Widget::add() to add widgets to a certain group\n\tWidget::add()->to('before_content')->type('div')->class('row')->content([\n\t\t// notice we use Widget::make() to add widgets as content (not in a group)\n\t\tWidget::make()\n\t\t\t->type('progress')\n\t\t\t->class('card border-0 text-white bg-primary')\n\t\t\t->progressClass('progress-bar')\n\t\t\t->value($userCount)\n\t\t\t->description('Registered users.')\n\t\t\t->progress(100*(int)$userCount/1000)\n\t\t\t->hint(1000-$userCount.' more until next milestone.'),\n\t\t// alternatively, to use widgets as content, we can use the same add() method,\n\t\t// but we need to use onlyHere() or remove() at the end\n\t\tWidget::add()\n\t\t    ->type('progress')\n\t\t    ->class('card border-0 text-white bg-success')\n\t\t    ->progressClass('progress-bar')\n\t\t    ->value($articleCount)\n\t\t    ->description('Articles.')\n\t\t    ->progress(80)\n\t\t    ->hint('Great! Don\\'t stop.')\n\t\t    ->onlyHere(),\n\t\t// alternatively, you can just push the widget to a \"hidden\" group\n\t\tWidget::make()\n\t\t\t->group('hidden')\n\t\t    ->type('progress')\n\t\t    ->class('card border-0 text-white bg-warning')\n\t\t    ->value($lastArticleDaysAgo)\n\t\t    ->progressClass('progress-bar')\n\t\t    ->description('Since last article.')\n\t\t    ->progress(30)\n\t\t    ->hint('Post an article every 3-4 days.'),\n\t\t// both Widget::make() and Widget::add() accept an array as a parameter\n\t\t// if you prefer defining your widgets as arrays\n\t    Widget::make([\n\t\t\t'type' => 'progress',\n\t\t\t'class'=> 'card border-0 text-white bg-dark',\n\t\t\t'progressClass' => 'progress-bar',\n\t\t\t'value' => $productCount,\n\t\t\t'description' => 'Products.',\n\t\t\t'progress' => (int)$productCount/75*100,\n\t\t\t'hint' => $productCount>75?'Try to stay under 75 products.':'Good. Good.',\n\t\t]),\n\t]);\n\n    $widgets['after_content'][] = [\n\t  'type' => 'div',\n\t  'class' => 'row',\n\t  'content' => [ // widgets\n\t       [\n\t\t\t  'type' => 'card',\n\t\t\t  // 'wrapperClass' => 'col-sm-6 col-md-4', // optional\n\t\t\t  // 'class' => 'card bg-dark text-white', // optional\n\t\t\t  'content' => [\n\t\t\t      'header' => 'Some card title', // optional\n\t\t\t      'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n\t\t\t  ]\n\t\t\t],\n\t\t\t[\n\t\t\t  'type' => 'card',\n\t\t\t  // 'wrapperClass' => 'col-sm-6 col-md-4', // optional\n\t\t\t  // 'class' => 'card bg-dark text-white', // optional\n\t\t\t  'content' => [\n\t\t\t      'header' => 'Another card title', // optional\n\t\t\t      'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n\t\t\t  ]\n\t\t\t],\n\t\t\t[\n\t\t\t  'type' => 'card',\n\t\t\t  // 'wrapperClass' => 'col-sm-6 col-md-4', // optional\n\t\t\t  // 'class' => 'card bg-dark text-white', // optional\n\t\t\t  'content' => [\n\t\t\t      'header' => 'Yet another card title', // optional\n\t\t\t      'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n\t\t\t  ]\n\t\t\t],\n\t  ]\n\t];\n    $widgets['after_content'][] = [\n\t  'type'         => 'alert',\n\t  'class'        => 'alert alert-warning bg-dark border-0 mb-4',\n\t  'heading'      => 'Demo Refreshes Every Hour on the Hour',\n\t  'content'      => 'At hh:00, all custom entries are deleted, all files, everything. This cleanup is necessary because developers like to joke with their test entries, and mess with stuff. But you know that :-) Go ahead - make a developer smile.' ,\n\t  'close_button' => true, // show close button or not\n\t];\n\n    $widgets['before_content'][] = [\n\t  'type' => 'div',\n\t  'class' => 'row',\n\t  'content' => [ // widgets\n\t\t  \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\LatestUsersChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'New Users Past 7 Days', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\NewEntriesChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'New Entries', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n    \t]\n\t];\n\n    $widgets['after_content'][] = [\n\t  'type' => 'div',\n\t  'class' => 'row',\n\t  'content' => [ // widgets\n\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-4',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\ChartjsPieController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Pie Chart - Chartjs', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-4',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\EchartsPieController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Pie Chart - Echarts', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-4',\n\t\t        // 'class' => 'col-md-6',\n\t\t\t\t'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\HighchartsPieController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Pie Chart - Highcharts', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\n\t  ]\n\t];\n\n\n    $widgets['after_content'][] = [\n\t  'type' => 'div',\n\t  'class' => 'row',\n\t  'content' => [ // widgets\n\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\ChartjsLineChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Line Chart - Chartjs', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\EchartsLineChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Line Chart - Echarts', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\HighchartsLineChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Line Chart - Highcharts', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\FrappeLineChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Line Chart - Frappe', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\n\n    \t]\n\t];\n@endphp\n\n@section('content')\n\t<div class=\"row\">\n\t\t<div class=\"col-md-12\">\n\t\t\t<div class=\"card card-stacked mt-3\">\n\t\t\t\t<div class=\"card-body\">\n\n\t\t\t\t\t<x-backpack::datatable\n\t\t\t\t\t\tcontroller=\"\\App\\Http\\Controllers\\Admin\\PetShop\\InvoiceCrudController\"\n\t\t\t\t\t\t:setup=\"function($crud, $parent) {\n\t\t\t\t\t\t\t$crud->enableExportButtons();\n\t\t\t\t\t\t}\"\n\t\t\t\t\t/>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t{{-- In case widgets have been added to a 'content' group, show those widgets. --}}\n\t@include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('group', 'content')->toArray() ])\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-coreuiv2/inc/alerts.blade.php",
    "content": "{{-- Bootstrap Notifications using Prologue Alerts & PNotify JS --}}\n<script type=\"text/javascript\">\n    // This is intentionaly run after dom loads so this way we can avoid showing duplicate alerts\n    // when the user is beeing redirected by persistent table, that happens before this event triggers.\ndocument.onreadystatechange = function () {\n    if (document.readyState == \"interactive\") {\n        Noty.overrideDefaults({\n            layout: 'topRight',\n            theme: 'backstrap',\n            timeout: 2500,\n            closeWith: ['click', 'button'],\n        });\n\n        // get alerts from the alert bag\n        var $alerts_from_php = JSON.parse('@json(\\Alert::getMessages())');\n\n        // get the alerts from the localstorage\n        var $alerts_from_localstorage = JSON.parse(localStorage.getItem('backpack_alerts'))\n                ? JSON.parse(localStorage.getItem('backpack_alerts')) : {};\n\n        // merge both php alerts and localstorage alerts\n        Object.entries($alerts_from_php).forEach(function(type) {\n            \n            if(typeof $alerts_from_localstorage[type[0]] !== 'undefined') {\n                type[1].map(function(msg) { \n                    $alerts_from_localstorage[type[0]].push(msg);\n                });          \n            } else {\n                $alerts_from_localstorage[type[0]] = type[1];\n            }\n        });\n\n        for (var type in $alerts_from_localstorage) {\n            let messages = new Set($alerts_from_localstorage[type]);\n            messages.forEach(function(text) {\n                    let alert = {};\n                    alert['type'] = type;\n                    alert['text'] = text;\n                    new Noty(alert).show()\n            });\n        }\n\n        // in the end, remove backpack alerts from localStorage\n        localStorage.removeItem('backpack_alerts');\n\n        @if (app('env') !== 'local')\n        @php\n            $now = \\Carbon\\Carbon::now();\n            $refreshTime = \\Carbon\\Carbon::now()->endOfHour();\n\n            if ($now->diffInMinutes($refreshTime) < 3) {\n            @endphp\n                new Noty({\n                    type: \"info\",\n                    text: \"<strong>Demo Refresh in {{ $now->diffInMinutes($refreshTime) }} Minutes</strong><br>You'll lose all changes.\",\n                    timeout : 5000, \n                }).show();\n            @php\n            }\n            if ($now->diffInMinutes($refreshTime) > 57) {\n            @endphp\n                new Noty({\n                    type: \"info\",\n                    text: \"<strong>Demo Refreshed {{ 60-$now->diffInMinutes($refreshTime) }} Minutes Ago</strong><br>All custom entries & files have been deleted.\",\n                    timeout : 5000, \n                }).show();\n            @php\n            }\n        @endphp\n        @endif\n    }\n}\n</script>\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-coreuiv2/inc/topbar_right_content.blade.php",
    "content": "<li class=\"nav-item\">\n    <button class=\"btn btn-link nav-link shadow-none border-0 bg-transparent\" data-toggle=\"tooltip\" title=\"Back to using the Tabler theme\" style=\"height: 1.25rem\" onclick=\"switchToTablerTheme()\">\n        <i class=\"la la-swatchbook\" style=\"font-size: 20px;\"></i>\n    </button>\n</li>\n\n@push('after_scripts')\n<script>\nfunction switchToTablerTheme() {\n    // Create a form to submit the theme switch request\n    const form = document.createElement('form');\n    form.method = 'POST';\n    form.action = '{{ route('tabler.switch.layout') }}';\n    form.style.display = 'none';\n\n    // Add CSRF token\n    const csrfToken = document.createElement('input');\n    csrfToken.type = 'hidden';\n    csrfToken.name = '_token';\n    csrfToken.value = '{{ csrf_token() }}';\n    form.appendChild(csrfToken);\n\n    // Add theme parameter\n    const themeInput = document.createElement('input');\n    themeInput.type = 'hidden';\n    themeInput.name = 'theme';\n    themeInput.value = 'tabler';\n    form.appendChild(themeInput);\n\n    // Add layout parameter (default to horizontal)\n    const layoutInput = document.createElement('input');\n    layoutInput.type = 'hidden';\n    layoutInput.name = 'layout';\n    layoutInput.value = 'horizontal';\n    form.appendChild(layoutInput);\n\n    // Submit the form\n    document.body.appendChild(form);\n    form.submit();\n}\n</script>\n@endpush\n\n@include('backpack.language-switcher::language-switcher')\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-coreuiv4/auth/login.blade.php",
    "content": "{{-- BACKPACK DEMO FILE --}}\n{{-- It makes sure the login inputs are pre-populated with the default admin user. --}}\n@extends(backpack_view('layouts.plain'))\n\n@section('content')\n<div class=\"row justify-content-center align-items-center d-flex flex-row min-vh-100\">\n    <div class=\"col-12 col-md-6 col-lg-4\">\n        <h3 class=\"text-center mb-4\">{{ trans('backpack::base.login') }}</h3>\n        <div class=\"card p-2\">\n            <div class=\"card-body\">\n                <form class=\"col-md-12 p-t-10\" role=\"form\" method=\"POST\" action=\"{{ route('backpack.auth.login') }}\">\n                    {!! csrf_field() !!}\n\n                    <div class=\"form-group mb-2\">\n                        <label class=\"control-label\" for=\"{{ $username }}\">{{\n                            config('backpack.base.authentication_column_name') }}</label>\n\n                        <div>\n                            <input type=\"text\" class=\"form-control{{ $errors->has($username) ? ' is-invalid' : '' }}\"\n                                name=\"{{ $username }}\" value=\"{{ old($username) ?? 'admin@example.com' }}\"\n                                id=\"{{ $username }}\">\n\n                            @if ($errors->has($username))\n                            <span class=\"invalid-feedback\">\n                                <strong>{{ $errors->first($username) }}</strong>\n                            </span>\n                            @endif\n                        </div>\n                    </div>\n\n                    <div class=\"form-group mb-2\">\n                        <label class=\"control-label\" for=\"password\">{{ trans('backpack::base.password') }}</label>\n\n                        <div>\n                            <input type=\"password\"\n                                class=\"form-control{{ $errors->has('password') ? ' is-invalid' : '' }}\" name=\"password\"\n                                id=\"password\" value=\"{{ old('username')?'':'admin' }}\">\n\n                            @if ($errors->has('password'))\n                            <span class=\"invalid-feedback\">\n                                <strong>{{ $errors->first('password') }}</strong>\n                            </span>\n                            @endif\n                        </div>\n                    </div>\n\n                    <div class=\"form-group mb-2\">\n                        <div>\n                            <div class=\"checkbox\">\n                                <label>\n                                    <input type=\"checkbox\" name=\"remember\"> {{ trans('backpack::base.remember_me') }}\n                                </label>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"form-group mt-3 mb-0\">\n                        <div>\n                            <button type=\"submit\" class=\"btn btn-block btn-primary\">\n                                {{ trans('backpack::base.login') }}\n                            </button>\n                        </div>\n                    </div>\n                </form>\n            </div>\n        </div>\n        @if (backpack_users_have_email())\n        <div class=\"text-center mt-2\"><a href=\"{{ route('backpack.auth.password.reset') }}\">{{\n                trans('backpack::base.forgot_your_password') }}</a></div>\n        @endif\n        @if (config('backpack.base.registration_open'))\n        <div class=\"text-center\"><a href=\"{{ route('backpack.auth.register') }}\">{{ trans('backpack::base.register')\n                }}</a></div>\n        @endif\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-coreuiv4/dashboard.blade.php",
    "content": "@extends(backpack_view('blank'))\n\n@php\n\t// ---------------------\n\t// JUMBOTRON widget demo\n\t// ---------------------\n\t// Widget::add([\n //        'type'        => 'jumbotron',\n //        'name' \t\t  => 'jumbotron',\n //        'wrapperClass'=> 'shadow-xs',\n //        'heading'     => trans('backpack::base.welcome'),\n //        'content'     => trans('backpack::base.use_sidebar'),\n //        'button_link' => backpack_url('logout'),\n //        'button_text' => trans('backpack::base.logout'),\n //    ])->to('before_content')->makeFirst();\n\n\t// -------------------------\n\t// FLUENT SYNTAX for widgets\n\t// -------------------------\n\t// Using the progress_white widget\n\t//\n\t// Obviously, you should NOT do any big queries directly in the view.\n\t// In fact, it can be argued that you shouldn't add Widgets from blade files when you\n\t// need them to show information from the DB.\n\t//\n\t// But you do whatever you think it's best. Who am I, your mom?\n\t$productCount = App\\Models\\Product::count();\n\t$userCount = App\\User::count();\n\t$articleCount = \\Backpack\\NewsCRUD\\app\\Models\\Article::count();\n\t$lastArticle = \\Backpack\\NewsCRUD\\app\\Models\\Article::orderBy('date', 'DESC')->first();\n    $lastArticleDaysAgo = $lastArticle !== null ? \\Carbon\\Carbon::parse($lastArticle->date)->diffInDays(\\Carbon\\Carbon::today()).' days' : 'No articles';\n\n \t// notice we use Widget::add() to add widgets to a certain group\n\tWidget::add()->to('before_content')->type('div')->class('row')->content([\n\t\t// notice we use Widget::make() to add widgets as content (not in a group)\n\t\tWidget::make()\n\t\t\t->type('progress')\n\t\t\t->class('card border-0 text-white bg-info')\n\t\t\t->progressClass('progress-bar')\n\t\t\t->value($userCount)\n\t\t\t->description('Registered users.')\n\t\t\t->progress(100*(int)$userCount/1000)\n\t\t\t->hint(1000-$userCount.' more until next milestone.'),\n\t\t// alternatively, to use widgets as content, we can use the same add() method,\n\t\t// but we need to use onlyHere() or remove() at the end\n\t\tWidget::add()\n\t\t    ->type('progress')\n\t\t    ->class('card border-0 text-white bg-success')\n\t\t    ->progressClass('progress-bar')\n\t\t    ->value($articleCount)\n\t\t    ->description('Articles.')\n\t\t    ->progress(80)\n\t\t    ->hint('Great! Don\\'t stop.')\n\t\t    ->onlyHere(),\n\t\t// alternatively, you can just push the widget to a \"hidden\" group\n\t\tWidget::make()\n\t\t\t->group('hidden')\n\t\t    ->type('progress')\n\t\t    ->class('card border-0 text-white bg-warning')\n\t\t    ->value($lastArticleDaysAgo)\n\t\t    ->progressClass('progress-bar')\n\t\t    ->description('Since last article.')\n\t\t    ->progress(30)\n\t\t    ->hint('Post an article every 3-4 days.'),\n\t\t// both Widget::make() and Widget::add() accept an array as a parameter\n\t\t// if you prefer defining your widgets as arrays\n\t    Widget::make([\n\t\t\t'type' => 'progress',\n\t\t\t'class'=> 'card border-0 text-white bg-danger',\n\t\t\t'progressClass' => 'progress-bar',\n\t\t\t'value' => $productCount,\n\t\t\t'description' => 'Products.',\n\t\t\t'progress' => (int)$productCount/75*100,\n\t\t\t'hint' => $productCount>75?'Try to stay under 75 products.':'Good. Good.',\n\t\t]),\n\t]);\n\n    $widgets['after_content'][] = [\n\t  'type' => 'div',\n\t  'class' => 'row',\n\t  'content' => [ // widgets\n\t       [\n\t\t\t  'type' => 'card',\n\t\t\t  // 'wrapperClass' => 'col-sm-6 col-md-4', // optional\n\t\t\t  // 'class' => 'card bg-dark text-white', // optional\n\t\t\t  'content' => [\n\t\t\t      'header' => 'Some card title', // optional\n\t\t\t      'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n\t\t\t  ]\n\t\t\t],\n\t\t\t[\n\t\t\t  'type' => 'card',\n\t\t\t  // 'wrapperClass' => 'col-sm-6 col-md-4', // optional\n\t\t\t  // 'class' => 'card bg-dark text-white', // optional\n\t\t\t  'content' => [\n\t\t\t      'header' => 'Another card title', // optional\n\t\t\t      'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n\t\t\t  ]\n\t\t\t],\n\t\t\t[\n\t\t\t  'type' => 'card',\n\t\t\t  // 'wrapperClass' => 'col-sm-6 col-md-4', // optional\n\t\t\t  // 'class' => 'card bg-dark text-white', // optional\n\t\t\t  'content' => [\n\t\t\t      'header' => 'Yet another card title', // optional\n\t\t\t      'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n\t\t\t  ]\n\t\t\t],\n\t  ]\n\t];\n    $widgets['after_content'][] = [\n\t  'type'         => 'alert',\n\t  'class'        => 'alert bg-dark text-bg-dark border-0 mb-4',\n\t  'heading'      => 'Demo Refreshes Every Hour on the Hour',\n\t  'content'      => 'At hh:00, all custom entries are deleted, all files, everything. This cleanup is necessary because developers like to joke with their test entries, and mess with stuff. But you know that :-) Go ahead - make a developer smile.' ,\n\t  'close_button' => true, // show close button or not\n\t];\n\n    $widgets['before_content'][] = [\n\t  'type' => 'div',\n\t  'class' => 'row',\n\t  'content' => [ // widgets\n\t\t  \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\LatestUsersChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'New Users Past 7 Days', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\NewEntriesChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'New Entries', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n    \t]\n\t];\n\n    $widgets['after_content'][] = [\n\t  'type' => 'div',\n\t  'class' => 'row',\n\t  'content' => [ // widgets\n\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-4',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\ChartjsPieController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Pie Chart - Chartjs', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-4',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\EchartsPieController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Pie Chart - Echarts', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-4',\n\t\t        // 'class' => 'col-md-6',\n\t\t\t\t'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\HighchartsPieController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Pie Chart - Highcharts', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\n\t  ]\n\t];\n\n\n    $widgets['after_content'][] = [\n\t  'type' => 'div',\n\t  'class' => 'row',\n\t  'content' => [ // widgets\n\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\ChartjsLineChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Line Chart - Chartjs', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\EchartsLineChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Line Chart - Echarts', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\HighchartsLineChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Line Chart - Highcharts', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\t    \t[\n\t\t        'type' => 'chart',\n\t\t        'wrapperClass' => 'col-md-6',\n\t\t        // 'class' => 'col-md-6',\n\t\t        'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\FrappeLineChartController::class,\n\t\t\t\t'content' => [\n\t\t\t\t    'header' => 'Line Chart - Frappe', // optional\n\t\t\t\t    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\t\t    \t]\n\t    \t],\n\n\n    \t]\n\t];\n@endphp\n\n@section('content')\n\t<div class=\"row\">\n\t\t<div class=\"col-md-12\">\n\t\t\t<div class=\"card card-stacked mt-3\">\n\t\t\t\t<div class=\"card-body\">\n\n\t\t\t\t\t<x-backpack::datatable\n\t\t\t\t\t\tcontroller=\"\\App\\Http\\Controllers\\Admin\\PetShop\\InvoiceCrudController\"\n\t\t\t\t\t\t:setup=\"function($crud, $parent) {\n\t\t\t\t\t\t\t$crud->enableExportButtons();\n\t\t\t\t\t\t}\"\n\t\t\t\t\t/>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t{{-- In case widgets have been added to a 'content' group, show those widgets. --}}\n\t@include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('group', 'content')->toArray() ])\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-coreuiv4/inc/alerts.blade.php",
    "content": "{{-- Bootstrap Notifications using Prologue Alerts & PNotify JS --}}\n<script type=\"text/javascript\">\n    // This is intentionaly run after dom loads so this way we can avoid showing duplicate alerts\n    // when the user is beeing redirected by persistent table, that happens before this event triggers.\ndocument.onreadystatechange = function () {\n    if (document.readyState == \"interactive\") {\n        Noty.overrideDefaults({\n            layout: 'topRight',\n            theme: 'backstrap',\n            timeout: 2500,\n            closeWith: ['click', 'button'],\n        });\n\n        // get alerts from the alert bag\n        var $alerts_from_php = JSON.parse('@json(\\Alert::getMessages())');\n\n        // get the alerts from the localstorage\n        var $alerts_from_localstorage = JSON.parse(localStorage.getItem('backpack_alerts'))\n                ? JSON.parse(localStorage.getItem('backpack_alerts')) : {};\n\n        // merge both php alerts and localstorage alerts\n        Object.entries($alerts_from_php).forEach(function(type) {\n            \n            if(typeof $alerts_from_localstorage[type[0]] !== 'undefined') {\n                type[1].map(function(msg) { \n                    $alerts_from_localstorage[type[0]].push(msg);\n                });          \n            } else {\n                $alerts_from_localstorage[type[0]] = type[1];\n            }\n        });\n\n        for (var type in $alerts_from_localstorage) {\n            let messages = new Set($alerts_from_localstorage[type]);\n            messages.forEach(function(text) {\n                    let alert = {};\n                    alert['type'] = type;\n                    alert['text'] = text;\n                    new Noty(alert).show()\n            });\n        }\n\n        // in the end, remove backpack alerts from localStorage\n        localStorage.removeItem('backpack_alerts');\n\n        @if (app('env') !== 'local')\n        @php\n            $now = \\Carbon\\Carbon::now();\n            $refreshTime = \\Carbon\\Carbon::now()->endOfHour();\n\n            if ($now->diffInMinutes($refreshTime) < 3) {\n            @endphp\n                new Noty({\n                    type: \"info\",\n                    text: \"<strong>Demo Refresh in {{ $now->diffInMinutes($refreshTime) }} Minutes</strong><br>You'll lose all changes.\",\n                    timeout : 5000, \n                }).show();\n            @php\n            }\n            if ($now->diffInMinutes($refreshTime) > 57) {\n            @endphp\n                new Noty({\n                    type: \"info\",\n                    text: \"<strong>Demo Refreshed {{ 60-$now->diffInMinutes($refreshTime) }} Minutes Ago</strong><br>All custom entries & files have been deleted.\",\n                    timeout : 5000, \n                }).show();\n            @php\n            }\n        @endphp\n        @endif\n    }\n}\n</script>\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-coreuiv4/inc/topbar_right_content.blade.php",
    "content": "<li class=\"nav-item me-2\">\n    <button class=\"btn-link border-0 nav-link px-0 shadow-none bg-transparent\" data-bs-toggle=\"tooltip\" data-bs-title=\"Back to using Tabler theme\" style=\"height: 1.25rem\" onclick=\"switchToTablerTheme()\">\n        <i class=\"la la-swatchbook fs-5 me-1\"></i>\n    </button>\n</li>\n\n@push('after_scripts')\n<script>\nfunction switchToTablerTheme() {\n    // Create a form to submit the theme switch request\n    const form = document.createElement('form');\n    form.method = 'POST';\n    form.action = '{{ route('tabler.switch.layout') }}';\n    form.style.display = 'none';\n\n    // Add CSRF token\n    const csrfToken = document.createElement('input');\n    csrfToken.type = 'hidden';\n    csrfToken.name = '_token';\n    csrfToken.value = '{{ csrf_token() }}';\n    form.appendChild(csrfToken);\n\n    // Add theme parameter\n    const themeInput = document.createElement('input');\n    themeInput.type = 'hidden';\n    themeInput.name = 'theme';\n    themeInput.value = 'tabler';\n    form.appendChild(themeInput);\n\n    // Add layout parameter (default to horizontal)\n    const layoutInput = document.createElement('input');\n    layoutInput.type = 'hidden';\n    layoutInput.name = 'layout';\n    layoutInput.value = 'horizontal';\n    form.appendChild(layoutInput);\n\n    // Submit the form\n    document.body.appendChild(form);\n    form.submit();\n}\n</script>\n@endpush\n\n@include('backpack.language-switcher::language-switcher')\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-tabler/auth/login/inc/form.blade.php",
    "content": "<h2 class=\"h2 text-center my-4\">{{ trans('backpack::base.login') }}</h2>\n<form method=\"POST\" action=\"{{ route('backpack.auth.login') }}\" autocomplete=\"off\" novalidate=\"\"  data-pan=\"login-form\">\n    @csrf\n    <div class=\"mb-3\">\n        <label class=\"form-label\" for=\"{{ $username }}\">{{ config('backpack.base.authentication_column_name') }}</label>\n        <input autofocus tabindex=\"1\" type=\"email\" name=\"{{ $username }}\" value=\"{{ old($username, 'admin@example.com') }}\" id=\"{{ $username }}\" class=\"form-control {{ $errors->has($username) ? 'is-invalid' : '' }}\">\n        @if ($errors->has($username))\n            <div class=\"invalid-feedback\">{{ $errors->first($username) }}</div>\n        @endif\n    </div>\n    <div class=\"mb-2\">\n        <label class=\"form-label\" for=\"password\">\n            {{ trans('backpack::base.password') }}\n        </label>\n        <input tabindex=\"2\" type=\"password\" name=\"password\" id=\"password\" class=\"form-control {{ $errors->has('password') ? 'is-invalid' : '' }}\" value=\"{{ old($username) ? '' : 'admin' }}\">\n        @if ($errors->has('password'))\n            <div class=\"invalid-feedback\">{{ $errors->first('password') }}</div>\n        @endif\n    </div>\n    <div class=\"d-flex justify-content-between align-items-center mb-2\">\n        <label class=\"form-check mb-0\">\n            <input name=\"remember\" tabindex=\"3\" type=\"checkbox\" class=\"form-check-input\">\n            <span class=\"form-check-label\">{{ trans('backpack::base.remember_me') }}</span>\n        </label>\n        @if (backpack_users_have_email())\n            <div class=\"form-label-description\">\n                <a tabindex=\"4\" href=\"{{ route('backpack.auth.password.reset') }}\">{{ trans('backpack::base.forgot_your_password') }}</a>\n            </div>\n        @endif\n    </div>\n    <div class=\"form-footer\">\n        <button tabindex=\"5\" type=\"submit\" class=\"btn btn-primary w-100\">{{ trans('backpack::base.login') }}</button>\n    </div>\n</form>"
  },
  {
    "path": "resources/views/vendor/backpack/theme-tabler/dashboard.blade.php",
    "content": "@extends(backpack_view('blank'))\n\n@php\n    // ---------------------\n    // JUMBOTRON widget demo\n    // ---------------------\n    // Widget::add([\n //        'type'        => 'jumbotron',\n //        'name' \t\t  => 'jumbotron',\n //        'wrapperClass'=> 'shadow-xs',\n //        'heading'     => trans('backpack::base.welcome'),\n //        'content'     => trans('backpack::base.use_sidebar'),\n //        'button_link' => backpack_url('logout'),\n //        'button_text' => trans('backpack::base.logout'),\n //    ])->to('before_content')->makeFirst();\n\n    // -------------------------\n    // FLUENT SYNTAX for widgets\n    // -------------------------\n    // Using the progress_white widget\n    //\n    // Obviously, you should NOT do any big queries directly in the view.\n    // In fact, it can be argued that you shouldn't add Widgets from blade files when you\n    // need them to show information from the DB.\n    //\n    // But you do whatever you think it's best. Who am I, your mom?\n    $productCount = App\\Models\\Product::count();\n    $userCount = App\\User::count();\n    $articleCount = \\Backpack\\NewsCRUD\\app\\Models\\Article::count();\n    $lastArticle = \\Backpack\\NewsCRUD\\app\\Models\\Article::orderBy('date', 'DESC')->first();\n        $lastArticleDaysAgo = $lastArticle !== null ? \\Carbon\\Carbon::parse($lastArticle->date)->diffInDays(\\Carbon\\Carbon::today()).' days' : 'No articles';\n\n     // notice we use Widget::add() to add widgets to a certain group\n    Widget::add()->to('before_content')->type('div')->class('row mt-3')->content([\n        // notice we use Widget::make() to add widgets as content (not in a group)\n        Widget::make()\n            ->type('progress')\n            ->class('card mb-1')\n            ->statusBorder('start') // start|top|bottom\n            ->accentColor('success') // primary|secondary|warning|danger|info\n            ->ribbon(['top', 'la-user']) // ['top|right|bottom']\n            ->progressClass('progress-bar')\n            ->value($userCount)\n            ->description('Registered users.')\n            ->progress(100*(int)$userCount/1000)\n            ->hint(1000-$userCount.' more until next milestone.'),\n        // alternatively, to use widgets as content, we can use the same add() method,\n        // but we need to use onlyHere() or remove() at the end\n        Widget::add()\n            ->type('progress')\n            ->class('card mb-1')\n            ->statusBorder('start') // start|top|bottom\n            ->accentColor('danger') // primary|secondary|warning|danger|info\n            ->ribbon(['top', 'la-bell']) // ['top|right|bottom']\n            ->description('Registered users.')\n            ->progressClass('progress-bar')\n            ->value($articleCount)\n            ->description('Articles.')\n            ->progress(80)\n            ->hint('Great! Don\\'t stop.')\n            ->onlyHere(),\n        // alternatively, you can just push the widget to a \"hidden\" group\n        Widget::make()\n            ->group('hidden')\n            ->type('progress')\n            ->class('card mb-1')\n            ->statusBorder('start') // start|top|bottom\n            ->accentColor('info') // primary|secondary|warning|danger|info\n            ->ribbon(['top', 'la-star']) // ['top|right|bottom']\n            ->value($lastArticleDaysAgo)\n            ->progressClass('progress-bar')\n            ->description('Since last article.')\n            ->progress(30)\n            ->hint('Post an article every 3-4 days.'),\n        // both Widget::make() and Widget::add() accept an array as a parameter\n        // if you prefer defining your widgets as arrays\n        Widget::make([\n            'type' => 'progress',\n            'class'=> 'card mb-1',\n            'statusBorder' => 'start', // start|top|bottom\n            'accentColor' => 'warning', // primary|secondary|warning|danger|info\n            'ribbon' => ['top', 'la-lock'], // ['top|right|left|bottom', 'la-xxx']\n            'progressClass' => 'progress-bar',\n            'value' => $productCount,\n            'description' => 'Products.',\n            'progress' => (int)$productCount/75*100,\n            'hint' => $productCount>75?'Try to stay under 75 products.':'Good. Good.',\n        ]),\n    ]);\n\n    $widgets['after_content'][] = [\n        'type' => 'div',\n        'class' => 'row',\n        'content' => [ // widgets\n            [\n                'type' => 'card',\n                // 'wrapperClass' => 'col-sm-6 col-md-4', // optional\n                'class' => 'card my-3', // optional\n                'accentColor' => 'warning',\n                'ribbon' => ['bottom', 'la-star'], // ['top|right|left|bottom', 'la-xxx']\n                'statusBorder' => 'top', // start|top|bottom\n                'content' => [\n                    'header' => 'Some card title', // optional\n                    'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n                    'link' => [\n                          'labelText' => 'See more',\n                          'href' => backpack_url('user'),\n                        ],\n                    ],\n                ],\n            [\n                'type' => 'card',\n                // 'wrapperClass' => 'col-sm-6 col-md-4', // optional\n                'accentColor' => 'info',\n                'ribbon' => ['right', 'la-trophy'], // ['top|right|left|bottom', 'la-xxx']\n                'statusBorder' => 'top', // start|top|bottom\n                'class' => 'card my-3', // optional\n                'content' => [\n                  'header' => 'Another card title', // optional\n                  'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n                  'link' => [\n                      'labelText' => 'See list',\n                      'href' => backpack_url('user'),\n                    ],\n                ],\n            ],\n            [\n                'type' => 'card',\n                'wrapperClass' => 'col-md-12 col-lg-4', // optional\n                'class' => 'card my-3', // optional\n                'accentColor' => 'secondary',\n                'ribbon' => ['bottom', 'la-list'], // ['top|right|left|bottom', 'la-xxx']\n                'statusBorder' => 'top', // start|top|bottom\n                'content' => [\n                    'header' => 'Yet another card title', // optional\n                    'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non mi nec orci euismod venenatis. Integer quis sapien et diam facilisis facilisis ultricies quis justo. Phasellus sem <b>turpis</b>, ornare quis aliquet ut, volutpat et lectus. Aliquam a egestas elit. <i>Nulla posuere</i>, sem et porttitor mollis, massa nibh sagittis nibh, id porttitor nibh turpis sed arcu.',\n                    'link' => [\n                        'labelText' => 'See all',\n                        'href' => backpack_url('user'),\n                    ],\n                ],\n            ],\n        ]\n    ];\n\n    $widgets['after_content'][] = [\n      'type'         => 'alert',\n      'class'        => 'alert alert-danger mb-3',\n      'heading'      => 'Demo Refreshes Every Hour on the Hour',\n      'content'      => 'At hh:00, all custom entries are deleted, all files, everything. This cleanup is necessary because developers like to joke with their test entries, and mess with stuff. But you know that :-) Go ahead - make a developer smile.' ,\n      'close_button' => true, // show close button or not\n    ];\n\n    $widgets['after_content'][] = [\n      'type' => 'div',\n      'class' => 'row',\n      'content' => [ // widgets\n              [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-6',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\LatestUsersChartController::class,\n                'content' => [\n                    'header' => 'New Users Past 7 Days', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n\n                ]\n            ],\n            [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-6',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\NewEntriesChartController::class,\n                'content' => [\n                    'header' => 'New Entries', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n                ]\n            ],\n        ]\n    ];\n\n    $widgets['after_content'][] = [\n      'type' => 'div',\n      'class' => 'row',\n      'content' => [ // widgets\n\n            [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-4 mt-3 mb-3',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\ChartjsPieController::class,\n                'content' => [\n                    'header' => 'Pie Chart - Chartjs', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n                ]\n            ],\n            [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-4 mt-3 mb-3',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\EchartsPieController::class,\n                'content' => [\n                    'header' => 'Pie Chart - Echarts', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n                ]\n            ],\n            [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-4 mt-3 mb-3',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Pies\\HighchartsPieController::class,\n                'content' => [\n                    'header' => 'Pie Chart - Highcharts', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n                ]\n            ],\n\n      ]\n    ];\n\n\n    $widgets['after_content'][] = [\n      'type' => 'div',\n      'class' => 'row',\n      'content' => [ // widgets\n\n            [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-6',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\ChartjsLineChartController::class,\n                'content' => [\n                    'header' => 'Line Chart - Chartjs', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n                ]\n            ],\n            [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-6 mb-3',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\EchartsLineChartController::class,\n                'content' => [\n                    'header' => 'Line Chart - Echarts', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n                ]\n            ],\n            [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-6 mb-3',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\HighchartsLineChartController::class,\n                'content' => [\n                    'header' => 'Line Chart - Highcharts', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n                ]\n            ],\n            [\n                'type' => 'chart',\n                'wrapperClass' => 'col-md-6 mb-3',\n                // 'class' => 'col-md-6',\n                'controller' => \\App\\Http\\Controllers\\Admin\\Charts\\Lines\\FrappeLineChartController::class,\n                'content' => [\n                    'header' => 'Line Chart - Frappe', // optional\n                    // 'body' => 'This chart should make it obvious how many new users have signed up in the past 7 days.<br><br>', // optional\n                ]\n            ]\n        ]\n    ];\n@endphp\n\n@section('content')\n\n    {{-- In case widgets have been added to a 'content' group, show those widgets. --}}\n    @include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('group', 'content')->toArray() ])\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-tabler/inc/alerts.blade.php",
    "content": "{{-- Bootstrap Notifications using Prologue Alerts & PNotify JS --}}\n<script type=\"text/javascript\">\n    // This is intentionaly run after dom loads so this way we can avoid showing duplicate alerts\n    // when the user is beeing redirected by persistent table, that happens before this event triggers.\ndocument.onreadystatechange = function () {\n    if (document.readyState == \"interactive\") {\n        Noty.overrideDefaults({\n            layout: 'topRight',\n            theme: 'backstrap',\n            timeout: 2500,\n            closeWith: ['click', 'button'],\n        });\n\n        // get alerts from the alert bag\n        var $alerts_from_php = JSON.parse('@json(\\Alert::getMessages())');\n\n        // get the alerts from the localstorage\n        var $alerts_from_localstorage = JSON.parse(localStorage.getItem('backpack_alerts'))\n                ? JSON.parse(localStorage.getItem('backpack_alerts')) : {};\n\n        // merge both php alerts and localstorage alerts\n        Object.entries($alerts_from_php).forEach(function(type) {\n            \n            if(typeof $alerts_from_localstorage[type[0]] !== 'undefined') {\n                type[1].map(function(msg) { \n                    $alerts_from_localstorage[type[0]].push(msg);\n                });          \n            } else {\n                $alerts_from_localstorage[type[0]] = type[1];\n            }\n        });\n\n        for (var type in $alerts_from_localstorage) {\n            let messages = new Set($alerts_from_localstorage[type]);\n            messages.forEach(function(text) {\n                    let alert = {};\n                    alert['type'] = type;\n                    alert['text'] = text;\n                    new Noty(alert).show()\n            });\n        }\n\n        // in the end, remove backpack alerts from localStorage\n        localStorage.removeItem('backpack_alerts');\n\n        @if (app('env') !== 'local')\n        @php\n            $now = \\Carbon\\Carbon::now();\n            $refreshTime = \\Carbon\\Carbon::now()->endOfHour();\n\n            if ($now->diffInMinutes($refreshTime) < 3) {\n            @endphp\n                new Noty({\n                    type: \"info\",\n                    text: \"<strong>Demo Refresh in {{ $now->diffInMinutes($refreshTime) }} Minutes</strong><br>You'll lose all changes.\",\n                    timeout : 5000, \n                }).show();\n            @php\n            }\n            if ($now->diffInMinutes($refreshTime) > 57) {\n            @endphp\n                new Noty({\n                    type: \"info\",\n                    text: \"<strong>Demo Refreshed {{ 60-$now->diffInMinutes($refreshTime) }} Minutes Ago</strong><br>All custom entries & files have been deleted.\",\n                    timeout : 5000, \n                }).show();\n            @php\n            }\n        @endphp\n        @endif\n    }\n}\n</script>\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-tabler/inc/commercial.blade.php",
    "content": "<a href=\"https://github.com/Laravel-Backpack/community-forum/discussions/categories/public-beta\" class=\"card border-none mt-1\" target=\"_blank\" rel=\"noopener\"\n    aria-label=\"Sponsor Backpack!\" style=\"background: color-mix(in srgb, var(--tblr-primary) 4%, var(--tblr-bg-surface))\">\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 480 373\"\n        class=\"position-absolute top-0 right-0 bottom-0 left-0 w-50 h-100\">\n        <path fill=\"var(--tblr-primary)\" opacity=\".3\"\n            d=\"M361.2 6.6a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm13.8 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2ZM361.2 21a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm13.8 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm-112 13.4a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm13.8 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2ZM165.6 6.6a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm13.8 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2ZM165.6 21a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm13.8 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2ZM165.6 34.4a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm13.8 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Zm14.1 0a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Z\">\n        </path>\n        <path stroke=\"var(--tblr-primary)\" opacity=\".3\" stroke-miterlimit=\"10\" stroke-width=\"2\"\n            d=\"M37 42c5.523 0 10-4.477 10-10s-4.477-10-10-10-10 4.477-10 10 4.477 10 10 10Z\"></path>\n        <path stroke=\"var(--tblr-primary)\" opacity=\".5\" stroke-miterlimit=\"10\" stroke-width=\"2\"\n            d=\"M416.2 360a7.5 7.5 0 1 0 0-15 7.5 7.5 0 0 0 0 15ZM113.7 28.5V46m-8.8-8.8h17.5\"></path>\n        <path stroke=\"var(--tblr-primary)\" opacity=\".2\" stroke-miterlimit=\"10\" stroke-width=\"1.692\"\n            d=\"m230.1 328.4 3.9-7.1 3.9 7.1 7.1 3.9-7.1 3.9-3.9 7.1-3.9-7.1-7.1-3.9 7.1-3.9Z\"></path>\n        <path stroke=\"var(--tblr-primary)\" opacity=\".1\" stroke-miterlimit=\"10\" stroke-width=\"2\"\n            d=\"m434.5 117 3.3-6.2 3.4 6.2 6.1 3.3-6.1 3.4-3.4 6.1-3.3-6.1-6.2-3.4 6.2-3.3Z\"></path>\n        <path stroke=\"var(--tblr-primary)\" opacity=\".4\" stroke-miterlimit=\"10\" stroke-width=\"2\"\n            d=\"M44.3 341.2v17.5m-8.7-8.8h17.5m103-111 3.3-6.2 3.4 6.2 6.1 3.3-6.1 3.4-3.4 6.1-3.3-6.1-6.2-3.4 6.2-3.3Zm5.7-170.5v17.5m-8.8-8.8h17.5\">\n        </path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M-4.726 321.534c-.897-1.194-2.236-.643-2.236-.643s-1.44-.821-1.368-2.907c.071-2.086 3.605-2.692 3.934-7.568.188-2.76-.438-6.067-1.372-8.887l-.105-.289-.108-.337-.074-.197-.075-.22-.074-.197-.087-.207-.074-.197-.087-.208-.074-.196-.074-.197-.087-.207-.072-.173-.1-.219-.057-.138a6.579 6.579 0 0 1-.156-.334l-.068-.125-.11-.206-.07-.126-.108-.182-.069-.126c-.04-.056-.069-.126-.096-.171l-.068-.126a2.773 2.773 0 0 1-.107-.158l-.067-.102-.12-.17-.054-.091-.172-.237a6.7 6.7 0 0 0-.765-.859l.722-1.326-.011.013s-3.217-.891-6.831-2.169c-1.917-.679-3.96-1.443-5.696-2.254-1.231-.574-2.32-1.16-3.089-1.733a4.695 4.695 0 0 1-.803-.737c-.425-.278-.937-.608-1.527-1.028-1.795-1.282-4.361-3.34-7.835-6.733-1.768-1.724-3.373-3.329-4.682-4.789-1.645-1.817-2.82-3.406-3.197-4.639a2.618 2.618 0 0 1-.134-1l-.203-.175a56.11 56.11 0 0 1-4.487-4.4c-1.739-1.964-2.803-3.812-3.28-6.392l.011-.013-.765.425-4.702 2.655-.478-.19-.121-.039c-.148-.06-.295-.121-.453-.169l-.036-.009-.502-.189-.098-.04-.476-.167-.036-.009c-.171-.059-.355-.128-.536-.174l-.073-.019c-.17-.058-.342-.117-.523-.163l-.013-.011-.583-.171-.013-.011-.584-.171c-.4-.101-.812-.213-1.235-.312a29.834 29.834 0 0 0-3.887-.628 24.266 24.266 0 0 0-2.314-.09l-.047.003a10.86 10.86 0 0 0-.866.029c-.284.021-.58.031-.864.052l-.047.003c-.177.025-.355.027-.532.051l-.034.015-.047.003c-.295.034-.577.079-.86.123l-.023.002c-.282.045-.575.102-.857.147l-.106.02a8.279 8.279 0 0 1-.48.095l-.093.03c-.386.088-.77.2-1.154.312-.01.012-.035.014-.058.016l-.024.002c-.162.059-.326.095-.488.155-.023.001-.034.014-.058.016l-.093.031a3.194 3.194 0 0 0-.451.164c-.024.002-.059.016-.07.029-.01.012-.034.014-.045.027-.383.135-.74.292-1.131.464-.035.014-.08.042-.115.056l-.01.013c-.14.058-.288.128-.438.199l-.16.083c-.15.07-.286.152-.436.222l-.103.044-.022.025a6.567 6.567 0 0 0-.56.315l-.01.013-.035.014c-.171.096-.343.192-.501.299-.056.04-.102.067-.159.107-.136.081-.26.173-.397.255-.034.014-.056.04-.102.067-.045.027-.045.027-.067.053-.148.094-.283.199-.43.293-.011.013-.022.025-.046.027-.022.025-.046.027-.067.053l-.542.396c-.033.039-.067.053-.113.08-.135.105-.28.223-.415.328-.057.04-.124.093-.168.143-.124.093-.246.209-.381.314-.022.025-.068.053-.09.078l-.078.065c-.157.131-.29.259-.447.39l-.043.051-.033.038c-.179.156-.345.323-.511.489l-.09.078-.054.064a5.562 5.562 0 0 0-.376.384l-.055.064-.11.127a5.879 5.879 0 0 0-.362.395l-.153.178c-.165.191-.342.37-.517.574-2.851 3.564.39 11.516 5.82 14.693l.485.285.162.095.323.19.21.115.298.168.211.115.285.158.224.126.272.146.223.126.247.125.247.124.235.113.26.136.21.115.272.146.173.083c.852.424 1.678.827 2.441 1.174l-.076-.065.394.184c.24-.124.468-.26.694-.42a7.57 7.57 0 0 0-.325.583l.234.114c-.12.14-.24.279-.338.417l-.065.076c-.11.127-.217.278-.327.405-.1.245-.201.491-.278.734l-.231-.066c-.055.063-.097.138-.163.214l-.033.038a5.144 5.144 0 0 1-.065.076l-.044.051a.62.62 0 0 0-.097.138l-.01.013-.045.051c-.065.076-.107.15-.16.238l-.055.063c-.044.051-.086.125-.13.176l-.044.051c-.043.051-.064.1-.107.151l-.044.05-.044.051c-.044.051-.064.1-.108.151l-.01.013a.782.782 0 0 0-.044.05c-.033.038-.053.087-.086.126-.033.038-.033.038-.042.074-.01.036-.022.025-.033.038l-.022.026-.053.087-.033.038-.02.049c-.022.025-.031.062-.053.087-.022.025-.031.062-.053.087l-.011.013c-.02.049-.064.1-.084.149-.011.012-.022.025-.02.049a.592.592 0 0 1-.084.149c-1.393 2.873 4.926 10.49 9.125 12.605 4.2 2.115 14.649 1.448 17.992 1.319l.284-.021.095-.007c.07-.005.129-.021.2-.026l.118-.009.024-.002c.023-.002.047-.003.058-.016.035-.015.07-.005.105-.02a.444.444 0 0 1 .13-.021l.047-.004c.024-.002.035-.014.047-.003l.082-.018.13-.022c.034-.014.081-.018.116-.032 1.773-.464 3.606-1.563 5.079-2.707l.01-.012c.136-.105.281-.223.416-.328l.022-.026c.135-.105.246-.208.381-.313l.022-.026c.111-.103.224-.183.325-.273.032-.039.089-.078.122-.116.078-.066.146-.118.211-.194.033-.039.079-.066.1-.091l.034-.038c.089-.078.178-.156.244-.232l.044-.051c.1-.091.19-.169.277-.27l.074.196.029.069.058.139.054.091.069.126.054.091.069.125.067.102.069.126.056.115.081.137.056.114.082.137.068.126.082.136.08.113.094.148.069.126.094.147.081.137.094.147.093.124.106.159.093.124.107.158.094.148.107.159.105.135.12.169.105.135.12.169.104.135.12.17.105.135.12.169.105.135.132.181.105.134.132.181.118.146.132.18.118.146.132.18.118.146.132.181.118.146.133.18.13.157.132.18.13.157.146.191.13.157.145.192.13.156.133.181.13.157.144.167.143.168.143.168.143.168.13.156.144.168.143.168.143.168.13.157.144.167.13.157.157.179.117.146.169.189.105.135.169.19.105.135.168.189.106.135.18.201.091.1.184.224.078.09.195.235.053.067.221.257c1.847 2.147 3.48 3.952 4.39 4.848l.116.122.154.155c2.354 2.251 5.088 4.807 8.476 6.887 3.388 2.079 4.53.473 7.446.839 2.916.367 4.012-1.212 3.114-2.43Z\">\n        </path>\n        <path fill=\"#091426\"\n            d=\"M-26.205 286.301c.59.42 1.091.764 1.527 1.029.247.279.502.521.804.737.089.077.188.14.301.215l.25.172.039.033.012.011c.225.15.461.287.71.435l.186.093.161.095.198.104.185.094.186.093.37.187.469.226c1.723.8 3.767 1.588 5.695 2.254l.342.117.184.07.109.028.036.009.134.049.122.039.073.018.17.059.159.048.183.069.135.05.158.047.072.019.099.04.183.07.122.038.17.059.122.039.024-.002.23.066.014.011.06.007.194.057.085.03.171.058.098.041.024-.002.194.057.05.02.036.009.17.059c.037.009.05.02.086.029l.194.057.073.019.171.058.073.019.012.011.159.047c1.313.402 2.164.649 2.164.649l-.67 1.238.026.022c.383.352.722.755 1.015 1.185.294.43.553.875.79 1.345a21.25 21.25 0 0 1 1.22 2.846 27.271 27.271 0 0 1 1.457 6.016c.135 1.024.189 2.066.158 3.103a8.63 8.63 0 0 1-.594 3.052 7.68 7.68 0 0 1-1.76 2.556c-.366.372-.732.72-1.072 1.114-.339.394-.591.84-.602 1.341l-.06-.008a3.53 3.53 0 0 0 .314 1.665 11.29 11.29 0 0 1-1.043-.434l-6.596-3.007c4.178.547 6.803-1.265 9.799-3.199.049-.134.088-.256.126-.378.134-.438.232-.885.27-1.339.048-.468.05-.932.027-1.394a21.548 21.548 0 0 0-.274-2.892 7.645 7.645 0 0 0-.125-.728c-.054-.246-.084-.493-.136-.715l-.149-.727c-.054-.245-.119-.478-.172-.724a35.214 35.214 0 0 0-.818-2.853 7.745 7.745 0 0 0-.242-.695l-.12-.348-.132-.335c-.089-.231-.177-.462-.277-.681-.1-.218-.177-.462-.287-.668-.11-.206-.199-.437-.31-.643-.095-.171-.18-.355-.263-.516a23.586 23.586 0 0 0-3.362-3.163l-1.153-.64a24 24 0 0 0-6.042 1.101c-.488.155-1.574.414-1.574.414s-.196 1.691-.26 2.1c-.52 3.736-.309 7.24.04 10.995.35 3.755 1.017 7.784 4.284 9.671-.957-.072-1.642.466-2.023 1.267a23.66 23.66 0 0 1-3.752-2.017c.693.686 1.384 1.348 2.05 1.989-1.094-.966-2.117-1.936-3.075-2.828l-.154-.155-.116-.123c-.9-.908-2.555-2.712-4.39-4.847l-.221-.257-.053-.067-.195-.236-.078-.089-.184-.224-.09-.1-.181-.201-.106-.135-.168-.19-.105-.134-.169-.19-.105-.135-.169-.19-.117-.145-.156-.179-.13-.157-.144-.168-.13-.157-.144-.167-.143-.168-.143-.168-.13-.157-.144-.167-.143-.168-.143-.168-.144-.168-.13-.156-.132-.181-.13-.157-.146-.191-.13-.157-.145-.191-.13-.157-.133-.18-.13-.157-.133-.181-.118-.145-.132-.181-.118-.146-.132-.18-.118-.146-.132-.18-.118-.146-.132-.181-.105-.135-.133-.18-.105-.135-.12-.17-.104-.134-.12-.17-.105-.135-.027-.045-.093-.124-.105-.135-.12-.17-.104-.135-.107-.158-.094-.148-.107-.158-.093-.124-.106-.159-.093-.124-.094-.147-.081-.137-.095-.148-.068-.125-.095-.148-.08-.113-.08-.137-.07-.125-.08-.137-.057-.115-.081-.136-.056-.115-.07-.126-.066-.102-.069-.125-.054-.092-.07-.125-.053-.091-.058-.139-.03-.069-.073-.197c-.09.078-.177.18-.277.271l-.044.05c-.09.078-.168.144-.245.233l-.032.038c-.033.038-.079.065-.1.09-.068.053-.134.129-.212.194-.033.038-.09.078-.122.116-.1.091-.212.194-.325.274l-.022.025c-.135.106-.246.209-.38.314l-.023.025c-.135.106-.28.223-.415.328l-.011.013c-1.486 1.133-3.306 2.242-5.08 2.707-.034.014-.081.018-.116.032-.034.015-.082.018-.129.022l-.082.017c-.023.002-.034.015-.047.004l-.047.003c-.048.004-.082.018-.13.022a.273.273 0 0 0-.105.02l-.058.016-.024.002c-.047.003-.082.018-.118.008-.037-.009-.13.022-.2.027l-.095.007-.284.021c-3.343.129-13.793.795-17.992-1.319-2.223-1.12-5.035-3.765-6.993-6.45l.156.179c2.876 3.52 5.274 5.875 8.833 6.884-2.47-1.244-2.823-3.917-3.678-5.827-.855-1.911-2.14-6.429-4.307-8.872a7.507 7.507 0 0 0-1.188-1.113c.08-.196.137-.391.242-.589.109-.127.206-.265.326-.404l.066-.077c.12-.139.24-.279.338-.417l-.235-.113c.105-.198.209-.396.326-.583a6.011 6.011 0 0 1-.694.42l-.395-.185a79.3 79.3 0 0 1-2.44-1.175l-.173-.082-.273-.147-.21-.115-.26-.135-.234-.113-.247-.125-.248-.124-.223-.126-.272-.147-.224-.126-.285-.157-.136-.073c.322.166.63.322.915.479a29.4 29.4 0 0 1-4.724-5.999c-2.172-3.644-2.107-9.19-3.564-10.069.165-.19.329-.381.506-.561l.153-.177c.12-.14.243-.256.363-.396l.11-.127.054-.063c.134-.129.256-.245.376-.385l.055-.063.09-.078c.165-.167.344-.323.51-.49l.033-.038.044-.051c.144-.141.29-.259.446-.39l.079-.065c.022-.025.067-.052.09-.078.134-.105.245-.208.38-.313a.984.984 0 0 0 .168-.144c.146-.117.28-.223.416-.328.032-.038.067-.052.112-.079l.542-.397c.022-.026.045-.027.067-.053.011-.012.035-.014.046-.027.147-.094.282-.199.43-.293.022-.026.046-.027.067-.053.022-.025.057-.04.102-.067.137-.081.261-.174.398-.255.056-.04.102-.067.158-.107.171-.096.33-.203.501-.299l.035-.014.01-.013c.183-.108.378-.206.56-.315l.022-.025.104-.044c.15-.07.286-.151.435-.222l.16-.083c.15-.071.288-.129.438-.199l.01-.013c.035-.014.08-.041.115-.056.368-.17.749-.329 1.131-.464.011-.013.035-.014.046-.027.01-.013.058-.016.069-.029.151-.047.3-.117.451-.164l.093-.031c.011-.013.035-.014.059-.016.162-.06.336-.108.487-.155l.024-.002c.024-.002.035-.014.058-.016.384-.112.769-.223 1.154-.311l.093-.031c.164-.036.328-.072.48-.095l.106-.02c.293-.057.575-.102.857-.147l.024-.001c.282-.045.564-.09.859-.123l.047-.004.035-.014c.176-.025.355-.027.531-.052l.047-.003c.284-.021.591-.044.864-.052.297-.01.58-.031.866-.029l.048-.003c.783-.011 1.547.028 2.313.09 1.316.117 2.616.33 3.887.628.41.088.823.201 1.236.313l.583.17.013.011.583.171.013.011c.17.059.352.105.523.164l.073.018c.17.059.365.116.536.174l.036.01.477.166.098.041.501.188.036.01c.148.06.306.108.453.168l.121.039.478.19.115-.056.026.022c.524-.3 1.025-.599 1.526-.898l3.024-1.71.766-.425c.059.317.129.621.199.925.549 2.111 1.55 3.749 3.067 5.456a56.125 56.125 0 0 0 4.488 4.4l.203.175a2.42 2.42 0 0 0 .133 1.001c.388 1.219 1.564 2.809 3.197 4.638-.13.331-.198.538-.276.603 0 0 1.912 1.25 3.522 4.697 1.611 3.448-.366 7.257-.366 7.257.58-5.81-5.05-10.399-7.74-11.389-2.688-.99-5.663.431-7.634 2.718-2.222 2.578-2.144 6.852-3.508 12.03-1.364 5.179-2.25 4.614-2.606 8.16-.206 2.036 1.315 3.79 5.43 3.64 3.427-.123 6.429.119 8.21-.227 3.488-2.684 9.654-7.73 10.354-13.37 2.358-.579 3.386.13 7.186-2.661Z\"\n            opacity=\".3\"></path>\n        <path fill=\"#fff\" d=\"m25.219 205.852.378-.052-.378.052Z\" opacity=\".04\"></path>\n        <path fill=\"#FFC5AF\"\n            d=\"M99.31 206.072c3.226-4.769 2.433-8.574 3.139-10.6a1.103 1.103 0 0 1 .215-.789c3.94-5.084 14.768-14.28 20.195-23.682 5.416-9.39 2.818-16.7.397-18.566-3.216-2.485-13.369-11.304-23.728-20.014-10.359-8.709-21.895-20.315-34.396-25.513-12.5-5.198-25.543 5.256-32.659 16.103-7.115 10.848-5.966 14.96-8.143 17.998-1.39 1.946-7.251 2.273-11.278 9.717-4.108 7.617 2.192 26.222 18.588 40.358 5.119 4.412 12.683 4.447 17.906 8.507 3.104 2.41 5.317 6.443 13.28 10.098.222.103.456.216.689.306 8.08 2.184 15.632 2.849 21.748 2.277 3.295-.303 6.155-1.026 8.482-2.031 2.58-1.118 4.504-2.604 5.565-4.169Z\">\n        </path>\n        <path fill=\"#8D5548\" stroke=\"#000\" stroke-miterlimit=\"10\" stroke-opacity=\".2\" stroke-width=\".372\"\n            d=\"M62.845 176.229c-.898 1.196 1.512 3.075 2.8 3.919 1.287.844 3.376 1.117 3.655.716.28-.401.467-2.365-2.185-4.142-2.653-1.778-4.27-.493-4.27-.493Z\">\n        </path>\n        <path fill=\"#000D26\"\n            d=\"M63.413 176.187c-.405-.017-.638.38-.582.804.066.412.343.783.642 1.13 1.283 1.593 2.907 3.126 4.804 3.699.049.02.109.027.13.002.023-.026-.03-.093-.064-.079-2.38-.192-4.566-1.279-6.392-3.141-.553-.565-1.093-1.274-1.073-1.965a1.165 1.165 0 0 1 1-1.109c.562-.113 1.062.207 1.535.659Zm21.837 36.074c2.988-.28 5.63-.904 7.812-1.767-22.056 2.085-30.257-3.657-41.997-12.074-12.165-8.694-3.664-4.044-15.274-11.817-10.796-7.226-21.166-20.263-21.627-37.731-.41.578-.78 1.188-1.126 1.82-4.109 7.616 2.191 26.221 18.588 40.357 5.118 4.413 12.683 4.447 17.906 8.507 3.192 2.487 5.428 6.673 13.97 10.428 8.07 2.196 15.621 2.862 21.749 2.277Zm37.597-41.271c5.416-9.39 2.818-16.7.397-18.566-3.064-2.353-7.135-13.811-17.582-20.98-.669-.533-9.56-6.759-10.228-7.268-10.033-8.805-16.806-9.219-29.146-14.345-12.501-5.198-26.71 2.346-33.814 13.18-7.116 10.848-5.967 14.96-8.144 17.998a2.27 2.27 0 0 1-.409.423c.492-.417 4.093 1.647 4.59 1.919a38.19 38.19 0 0 1 5.427 3.617c4.617 3.582 8.635 7.91 12.222 12.507.38.483.785.965 1.187 1.422l.208.401.422.563c.115.099.227.174.342.272a3.071 3.071 0 0 1-.121-.347c2.145 2.159 4.587 3.821 7.426 4.586 5.674 2.612 11.883 4.732 15.868 8.611 5.946 5.79 4.063 7.974 8.058 10.068.63.322 1.406.526 2.306.638 1.507.59 3.21.642 4.84.652.511-.002 1.012.009 1.534-.006 4.258.659 9.333 2.4 14.396 8.315 3.965-5.062 14.804-14.27 20.221-23.66Z\"\n            opacity=\".03\"></path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M76.581 264.744c-2.91-5.742-3.615-9.161-4.686-11.745a35.23 35.23 0 0 1-2.644 2.347c-.046.028-.09.078-.135.106-.113.079-.214.17-.327.25-.156.13-.315.237-.484.357a3.951 3.951 0 0 1-.396.279c-.01.012-.045.027-.056.039-.159.107-.294.212-.452.319l-.613.402a2.413 2.413 0 0 0-.147.094c-.193.122-.398.256-.603.366a10.17 10.17 0 0 1-.605.342 9.877 9.877 0 0 0-.137.082c-.195.097-.388.219-.583.316-.034.015-.058.016-.08.042-.034.014-.08.041-.115.056-.16.083-.31.154-.459.224l-.184.085c-.114.056-.218.099-.333.155l-.07.029-.172.073-.231.088c-.104.043-.197.074-.3.117l-.105.044c-.127.045-.23.088-.358.133l-.035.015-.22.076-.07.029c-.103.043-.209.063-.313.106l-.15.047-.234.065-.116.032c-.082.018-.175.049-.27.056l-.023.001c-.164.036-.317.06-.48.095l-.072.006-.458.069c-.471.059-.946.07-1.4.033-3.603-.316-5.353-6.762-8.93-22.311-3.274-14.203-1.666-27.806-3.477-32.356.203-1.597 1.369-1.742 2.536-1.555l-.049-.021a81.73 81.73 0 0 0 14.288 5.565c-7.891-3.636-10.09-7.635-13.167-10.023-5.173-4.016-12.666-4.056-17.747-8.436-16.257-14.015-22.497-32.458-18.42-40.013 3.985-7.37 9.799-7.693 11.178-9.626 2.155-3.013 1.02-7.091 8.072-17.838 7.052-10.748 19.59-13.222 31.98-8.076 12.39 5.147 15.07 22.07 25.34 30.703 10.271 8.632 27.616 5.719 30.807 8.182 2.395 1.844 6.854 7.459 1.48 16.774-5.374 9.315-16.114 18.434-20.02 23.479-.174.227-.26.507-.216.789-.695 2.013.084 5.784-3.109 10.515-1.05 1.552-2.951 3.012-5.532 4.131 2.675-1.126 4.635-2.602 5.705-4.204 3.6-5.331 2.155-9.433 3.452-11.194 1.296-1.761 11.501-8.461 20.773-19.73 9.272-11.268 8.536-21.202 7.039-31.792-1.498-10.59-8.22-25.906-26.093-40.871C86.482 87.1 53.346 84.393 43.892 88.22c-12.583 5.093-20.4 10.31-30.554 30.561-7.77 15.485-11.033 37.426 3.76 58.814 4.555 6.583 11.386 12.938 19.718 18.991.49.356.98.712 1.48 1.056.111.848-1.47.858-2.976.91-3.71-.498-9.605.021-16.414-.402-8.29-.528-38.026-6.768-49.563-3.607-11.537 3.161-12.103 14.296-11.602 22.677.3 5.02 1.797 10.449 3.214 14.661l-.267-.076-.085-.029-.218-.055-.122-.039-.218-.055-.135-.05-.218-.055-.145-.037-.231-.066-.158-.047-.242-.054-.169-.035-.255-.064-.181-.046-.267-.076-.182-.046-.278-.062-.182-.046-.29-.074-.183-.046-.301-.061-.182-.046-.325-.059-.17-.035-.338-.07-.156-.024-.385-.067-.12-.015c-.17-.035-.337-.046-.506-.081l-.516-.069c-2.426-.32-4.79-.299-6.057.579-3.288 2.325-3.512 5.563-.624 5.706-1.264 7.811.95 15.078 5.128 20.273-.035.015-.046.028-.08.042l-.16.083c-.046.027-.08.042-.126.069l-.126.069-.01.013c-.035.014-.081.041-.127.068-.045.027-.125.069-.17.096-.035.015-.057.04-.092.054l-.01.013c-.046.027-.092.055-.127.069l-.045.027c-.011.013-.035.015-.035.015-.069.028-.125.068-.182.108l-.07.029c-.045.027-.09.054-.125.069l-.01.013c-.012.012-.035.014-.046.027-.046.027-.102.067-.148.094-.01.013-.022.025-.035.014l-.112.08-.046.027-.126.069-.01.013c-.035.014-.057.039-.103.067l-.01.012-.012.013-.102.067-.422.233c.476 2.581 1.54 4.428 3.279 6.392a55.94 55.94 0 0 0 4.487 4.4l.203.175c-.022.335.015.677.134 1.001.388 1.22 1.563 2.809 3.197 4.638 1.31 1.461 2.927 3.077 4.683 4.79 3.486 3.404 6.04 5.45 7.834 6.732.59.42 1.091.764 1.527 1.029.247.279.502.521.804.737.767.573 1.846 1.171 3.088 1.733 1.724.8 3.768 1.588 5.696 2.253 3.625 1.266 6.831 2.17 6.831 2.17s23.263-19.51 35.143-38.272c.192-.3.384-.599.563-.91.064-.1.117-.187.18-.287.128-.199.255-.423.382-.622.075-.113.138-.237.201-.336.117-.187.245-.387.35-.585l.212-.349c.116-.187.232-.397.349-.584l.2-.336c.116-.211.244-.411.348-.609.064-.099.115-.21.18-.31.125-.224.251-.447.378-.67l.148-.249c.157-.285.303-.557.473-.832a.227.227 0 0 1 .053-.087c.536-.955 1.059-1.921 1.569-2.898l.051-.111c.157-.285.302-.581.448-.854.02-.049.053-.087.062-.123.147-.273.291-.569.438-.841.02-.049.042-.074.062-.124.144-.296.302-.581.446-.877l.042-.074c.465-.95.93-1.9 1.383-2.837l.031-.062.138-.545-.138.545c.194-.431.401-.85.595-1.281-.002.131-.017.251-.02.382l-.009.191c-.002.131-.017.251-.019.382-.008.06-.002.131-.01.191a3.684 3.684 0 0 1-.019.382l-.01.191c-.002.131-.015.275-.017.405l-.013.144c-.017.251-.01.5-.028.751l-.01.037-.021.667.007.095-.006.083-.011.168v.154l-.012.168c.004.047-.004.107 0 .154l-.006.084.001.178-.008.215c.004.047-.004.107 0 .154l-.011.013c-.007.06-.002.131.003.202l-.003.285.007.095c.01.784.023 1.592.048 2.41l.005.071c.004.047-.005.084-.002.131l.008.427.009.119.005.071c.01.142.01.296.02.438l.004.047.005.071.002.024c.019.415.049.817.068 1.232l.003.047c.032.426.05.84.093 1.253.797 9.81 3.482 20.538 10.229 26.221 11.199 9.456 29.694 3.437 37.065.383-.3-1.012-2.724-5.803-6.526-13.309Zm-121.498-33.962c-.123-.063-.234-.114-.357-.176.123.062.234.113.357.176Zm-.554-.257c-.11-.051-.245-.1-.356-.152.135.05.257.088.356.152Zm.616.288c4.36 2.186 5.476 5.385 6.209 8.053-.733-2.668-1.85-5.867-6.209-8.053Zm6.48 8.996c.05.198.101.397.163.583-.062-.186-.112-.385-.162-.583Zm-.127-.442.113.407-.113-.407Zm63.454-32.949-.022.025c-.056.04-.111.103-.168.143-.246.209-.492.417-.749.638-.033.038-.078.066-.1.091a12.99 12.99 0 0 1-.56.47l-.022.025-.503.43a7.476 7.476 0 0 0-.213.17.978.978 0 0 0-.168.143c-.057.04-.1.091-.157.131l-.438.353-.021.025a1.34 1.34 0 0 0-.19.169c-.022.025-.056.04-.078.065-.482.405-.998.823-1.525 1.255-.032.038-.078.065-.123.092-.09.078-.192.145-.292.236-.057.04-.113.079-.168.143-.381.313-.762.627-1.167.942-.224.183-.437.354-.662.537l-.326.25-.01.013c-.114.079-.214.17-.338.262-.057.04-.09.078-.146.118l-.01.013c-.203.158-.405.315-.619.486l-.01.012-.012.013c-.191.145-.37.301-.561.446l-.068.052c-.191.145-.37.301-.561.446l-.011.013-.022.025-.078.066c-.022.025-.057.039-.09.077-.224.184-.46.356-.696.551-.046.028-.09.078-.135.106-.405.315-.81.63-1.212.969l-.113.08c-.607.473-1.202.957-1.82 1.442-1.055.84-2.145 1.693-3.246 2.559-.022.026-.046.028-.068.053l-.572.459-.011.012-.033.038c-.191.145-.381.314-.572.459l-.011.013-.033.038-1.247.984a.31.31 0 0 1-.113.079c-.157.131-.337.263-.494.394-.057.04-.113.079-.157.13l-.438.354-.202.157a30.01 30.01 0 0 1-.427.341c-.067.053-.123.092-.19.145l-.595.484c-.214.17-.427.341-.63.498l-.021.026-.113.079a7.652 7.652 0 0 1-.483.381l-.079.065c-.045.027-.089.078-.134.105-.135.105-.27.211-.392.327-.068.052-.124.092-.192.145l-.022.025-.426.341a7.407 7.407 0 0 0-.214.17l-.448.366-.146.118-.01.013-.606.496-.057.04c-.022.026-.067.053-.1.091l-.46.379c-.067.052-.145.118-.213.17-.135.105-.27.21-.415.328l-.011.013-.225.183c-.134.105-.257.221-.38.313a9.02 9.02 0 0 1-.225.184 5.56 5.56 0 0 0-.403.338c-.033.039-.078.066-.135.106-.056.039-.056.039-.078.065l-.605.497-.673.549c-.022.025-.057.04-.078.065-.54.42-1.09.854-1.665 1.288-.022.026-.045.028-.067.053-.192.145-.394.303-.609.449-.057.04-.102.067-.146.118-.237.172-.485.357-.733.542-.067.052-.135.105-.226.159l-.248.185c-.862-6.832-3.002-15.984-4.967-20.202 10.32-2.904 13.167-3.46 22.063-5.046 4.94-.877 11.92-1.834 17.619-2.589-.195.098-.328.227-.474.345Z\">\n        </path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M68.306 256.082a3.97 3.97 0 0 1-.395.28c.124-.093.271-.187.395-.28Zm-.451.319c-.16.107-.294.212-.453.319.148-.094.294-.212.453-.319Zm-3.783 2.23-.184.085.184-.085Zm.563-.268c-.035.015-.08.042-.115.056.046-.027.08-.041.115-.056Zm-4.311 1.509.07-.006-.07.006Zm8.466-4.146c.114-.08.214-.171.328-.251-.114.08-.227.16-.328.251Zm-5.236 3.145-.068.029.068-.029Zm1.768-.868.136-.081-.136.081Zm1.331-.8Zm-5.358 2.466-.116.032.116-.032Zm2.007-.684-.232.089.232-.089Zm-2.392.772-.036.015.036-.015Zm1.164-.325c-.023.002-.057.016-.08.018l.08-.018Zm.245-.077-.036.015.036-.015Zm-.64.202-.15.046.15-.046Zm1.101-.379-.103.043.104-.043Z\">\n        </path>\n        <path fill=\"#89B7CC\"\n            d=\"M61.9 259.482c-.07.029-.152.047-.221.076.093-.031.21-.063.314-.107l-.093.031Zm1.402-.497.173-.072-.173.072Zm-2.007.684.233-.065-.233.065Zm1.185-.372-.151.047c.117-.033.232-.089.36-.135a1.17 1.17 0 0 1-.209.088Zm-.406.136.22-.076-.22.076Zm.799-.285-.104.044c.104-.044.198-.074.302-.118-.059.016-.128.045-.198.074Zm-3.009.794Zm-24.186-17.53.01-.037-.01.037Zm25.232 17.345c.081-.018.187-.038.269-.056-.095.007-.188.038-.27.056Zm-.516.11c.153-.023.317-.059.482-.095-.165.036-.318.059-.482.095Zm5.669-2.286c.193-.122.41-.245.603-.367-.217.124-.41.245-.603.367Zm1.791-1.18c.011-.013.035-.014.046-.027-.011.013-.022.025-.046.027Zm-.451.319-.613.402.612-.402Zm.903-.637c.17-.12.316-.238.485-.358-.17.12-.315.238-.485.358Zm-2.848 1.839c.206-.11.4-.231.605-.342-.217.123-.4.232-.605.342Zm3.647-2.458c.045-.027.09-.078.135-.105a.592.592 0 0 1-.135.105Zm-4.804 3.055-.138.058-.104.043c.15-.07.299-.141.46-.224l-.218.123Zm-.573.281-.174.072c.115-.056.22-.099.334-.156l-.16.084Zm.907-.437c.034-.014.058-.016.08-.041-.024.001-.046.027-.08.041Zm.09-.053Z\">\n        </path>\n        <path fill=\"#89B7CC\"\n            d=\"m35.658 243.257-.012.476c.003.047-.004.107 0 .155l-.002.464c.004.047-.004.107 0 .154v.488c-.01.036.005.071-.004.107a75.73 75.73 0 0 0 .044 2.363c-.009.036.006.071.007.094.002.179.015.368.017.546l.009.118.029.557.005.071c.04.853.103 1.705.167 2.58.016.212.043.413.059.625l.005.071c.016.213.042.413.058.626l.004.048c.106 1.109.246 2.205.4 3.311l.001.024.096.658.002.024a65.8 65.8 0 0 0 .76 3.998c.941 4.199 2.368 8.219 4.425 11.586l.013.011a25.455 25.455 0 0 0 2.134 2.969l.038.033c.118.146.26.29.377.436l.013.011a18.942 18.942 0 0 0 1.705 1.669c3.286 1.35 6.679-.197 10.692-3.645s8.906-12.847 12.682-18.691c-.046.027-.09.078-.135.105-.045.027-.09.078-.135.105-.113.08-.213.171-.326.25-.157.131-.315.238-.485.357a3.784 3.784 0 0 1-.395.279c-.011.013-.046.027-.057.04-.158.107-.293.212-.452.319l-.612.402a1.989 1.989 0 0 0-.148.094c-.193.121-.397.255-.603.366-.193.121-.399.231-.605.342l-.136.081c-.195.098-.388.219-.583.317-.035.014-.058.016-.08.041-.035.015-.08.042-.115.057-.16.083-.31.153-.46.224l-.183.085c-.115.056-.219.099-.333.155l-.07.029-.173.072-.23.089c-.105.043-.198.074-.301.117l-.104.044c-.128.045-.231.088-.359.133l-.034.015-.22.075-.07.029c-.104.044-.21.063-.313.107l-.151.047-.233.064-.117.033c-.081.018-.174.048-.269.055l-.024.002c-.163.036-.316.059-.48.095l-.071.005-.459.07a171.623 171.623 0 0 1-4.367 2.19c-2.54 1.199-5.763 1.342-9.215-1.921-3.247-3.065-3.828-9.788-4.145-16.637-.392-8.508.017-17.432.593-22.337-1.62 5.422-3.963 11.66-6.925 18.074l-.03.394-.01.191c-.002.131-.017.251-.019.382-.007.06-.002.131-.01.191-.002.131-.004.262-.019.382l-.01.191c-.002.131-.015.275-.017.406l-.013.143c-.017.251-.01.501-.028.751l-.009.037c-.004.262-.01.5-.015.762l.036.164Z\">\n        </path>\n        <path fill=\"#694E61\"\n            d=\"M37.345 235.855c.69 2.077 1.595 3.877 2.641 3.871 1.332-.004 1.472-3.403 1.01-7.233-.23-1.837-.422-3.131-.721-3.965a120.933 120.933 0 0 1-2.93 7.327Zm2.104 9.939c-1.931.262-1.88 5.133-1.803 6.97.077 1.837 1 5.467 3.004 5.247 1.829-.195 1.562-5.407 1.358-7.353-.203-1.947-.676-5.122-2.56-4.864Zm4.256 18.946c-1.622 3.628-.274 6.739 1.513 8.39 1.787 1.651 4.977 2.188 6.613-.609 1.636-2.796.248-7.093-2.176-8.518-2.611-1.543-5.236-.861-5.95.737Zm24.565-8.667c.212-.194-2.089 1.498-1.912 1.319a24.81 24.81 0 0 1-1.643.93c-.035.014-.058.016-.08.041-.115.056-.23.113-.334.156l-.138.058c-.091.054-.184.085-.288.128l-.16.083c-.08.042-.173.072-.253.114l-.173.072-.231.089c-.07.029-.128.045-.197.074l-.208.087c-.069.028-.138.057-.196.074l-.186.061-.22.076-.175.048-.186.062c-1.98 1.525-3.205 3.923-2.278 4.722 2.02 1.741 6.183-5.784 8.858-8.194Z\">\n        </path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M22.425 208.579c-.057.039-.1.09-.157.13a.802.802 0 0 1 .157-.13Zm1.566-1.329c-.032.038-.078.065-.1.09.033-.038.078-.065.1-.09Zm-1.185 1.015c-.068.053-.146.118-.214.171.079-.065.146-.118.214-.171Zm-5.865 4.774-.146.118.011-.013a.595.595 0 0 1 .135-.105Zm4.665-3.794c-.022.026-.056.04-.078.065.022-.025.056-.039.078-.065Zm-6.641 5.367-.056.039.022-.025.034-.014Zm5.039-4.047c-.033.038-.079.065-.124.092.045-.027.078-.065.124-.092Zm-.404.339-.167.143a.864.864 0 0 1 .168-.143Zm-1.997 1.599c-.113.08-.214.171-.338.263l.01-.012.328-.251Zm13.037 37.011c-.157.285-.303.557-.473.831.157-.285.316-.546.473-.831Zm-3.412 5.781c-.192.3-.371.61-.563.91.192-.3.384-.599.563-.91Zm-11.701-41.129.067-.052-.067.052Zm-2.931 2.321.112-.079-.112.079Zm-12.128 9.65c.135-.105.27-.21.392-.326-.135.105-.27.21-.392.326Zm2.638-2.109Zm24.684 30.358c-.127.2-.254.423-.382.623.14-.213.267-.412.383-.623Zm1.112-1.854c-.117.187-.233.398-.35.585.128-.2.233-.398.35-.585ZM14.84 214.705c-.02.025-.055.039-.088.077.022-.025.056-.04.089-.077Zm17.41 31.812c-.511.977-1.034 1.943-1.57 2.899a90.166 90.166 0 0 0 1.57-2.899Zm-2.22 4.065-.38.67c.116-.211.242-.434.38-.67Zm2.719-5.029Zm-3.288 6.022c-.115.211-.243.411-.348.609.105-.198.233-.398.348-.609Zm-1.109 1.877c-.117.188-.233.398-.35.586.117-.188.234-.375.35-.586Zm5.404-9.864Zm-.508 1c-.146.273-.29.569-.437.841.157-.285.303-.557.437-.841Zm-19.193-29.254-.146.118c.057-.04.1-.091.146-.118Zm-7.233 5.719c-.203.158-.405.316-.595.485l.01-.013c.203-.158.395-.303.585-.472Zm-6.545 5.229c-.146.118-.292.236-.449.366.135-.105.281-.223.427-.341l.022-.025Zm2.043-1.626.595-.484-1.269 1.01.022-.026c.237-.172.44-.329.653-.5Zm-.763.604c-.18.156-.37.301-.562.446l.078-.065c.17-.12.327-.251.484-.381Zm2.783-2.228c.157-.13.338-.263.495-.393a.325.325 0 0 1 .113-.08l1.246-.984c-.82.644-1.628 1.298-2.459 1.954l.438-.354c.067-.052.111-.103.167-.143Zm3.11-2.477c.022-.026.046-.027.068-.053 1.101-.866 2.178-1.731 3.247-2.559l-3.898 3.083.011-.013.573-.458Zm28.26 20.51c-.002.131-.016.275-.018.406l-.013.143c-.017.251-.01.5-.028.751.01-.523.03-1.036.052-1.549l-.009.036.016.213Zm.04-.585c-.006.084.001.178-.005.262l.028-.597c.003.047-.006.084-.003.131.004.047-.026.133-.02.204Zm-.016.274-.005.082.005-.082Zm.032-.858-.006.084c.008-.215.027-.442.035-.657-.002.131-.017.251-.02.382l-.01.191Zm.007.094-.011.167.01-.167Z\">\n        </path>\n        <path fill=\"#091426\"\n            d=\"m35.21 240.591.139-.546c-9.842 17.863-25.11 36.804-34.327 44.799-5.173 4.485-9.546 8.043-11.35 8.902-1.668-1.815-1.211-4.964-.137-7.314 2.321-5.106 6.496-9.101 10.306-13.212a134.638 134.638 0 0 0 12.084-15.044 141.012 141.012 0 0 0 5.2-8.137c1.023-1.752 3.482-4.836 3.98-7.108.105-.174.224-.337.332-.488 5.882-8.877 13.744-23.133 18.08-32.015-3.894 6.828-11.182 17.593-23.98 34.235-12.798 16.643-33.565 34.85-39.49 39.926a40.983 40.983 0 0 1-2.458 1.977c.59.42 1.09.764 1.527 1.029.246.279.502.521.803.737.09.076.19.14.302.215l.25.172.038.033.013.011c.225.15.461.287.71.435l.185.093.162.095.198.104.185.094.185.093.37.186.47.227c1.723.8 3.767 1.588 5.695 2.254l.342.117.183.07.11.027.036.01.134.049.122.039.072.018.171.059.158.048.184.069.134.05.159.047.072.019.098.04.184.07.122.038.17.059.122.039.024-.002.23.066.013.011.06.007.195.057.085.03.17.058.099.041.024-.002.194.057.05.02.036.009.17.059c.037.009.05.02.086.029l.194.057.073.019.17.058.073.019.013.011.158.047c1.314.402 2.165.649 2.165.649s23.262-19.51 35.142-38.273c.192-.299.384-.599.563-.909l.181-.287c.128-.2.254-.423.382-.623.075-.112.137-.236.201-.336.117-.187.245-.386.35-.584l.211-.349c.117-.187.232-.398.35-.585l.2-.336c.115-.21.243-.41.348-.608.063-.1.115-.211.179-.31l.378-.671.148-.248c.157-.285.304-.558.474-.832a.21.21 0 0 1 .053-.087c.535-.955 1.058-1.921 1.568-2.899l.052-.11c.157-.285.301-.582.448-.854.02-.049.053-.087.062-.123.146-.273.29-.569.437-.841.02-.049.042-.075.062-.124.145-.296.302-.581.447-.877l.042-.074c.464-.95.929-1.9 1.383-2.838l.03-.061-.017-.082Zm44.048 29.471-.528-1.031-.028-.045c-.363-.734-4.164.926-4.74 1.183-.897.399-1.75.772-2.613 1.157-.898.399-1.823.753-2.764 1.049-1.163.347-2.362.686-3.57.597-1.495-.115-2.39-.976-3.303-2.05-1.042-1.231-1.594-1.618-3.214-1.819-1.283-.155-3.552-.76-4.696-1.436-1.64-.949-3.044-2.248-4.435-3.536-1.837-1.695-3.702-3.436-4.91-5.605-.891-1.611-1.1-1.702-1.577-3.486-1.073-3.892-1.063-8.244-1.218-12.275-.305-7.171 2.732-19.786 2.682-29.127-1.624 5.684-5.36 18.826-8.537 25.696-.687 11.275.556 30.147 10.347 38.411.178.153.367.294.545.447.063.055.125.086.188.141.115.098.253.195.378.281.076.066.15.108.225.15l.35.236.238.16.338.225.249.148c.112.075.236.137.336.201l.248.148c.124.062.224.126.347.188l.26.136.358.175.26.136.368.163.258.111c.124.063.258.112.392.162.086.029.16.071.246.1.134.05.281.11.416.16l.22.079c.147.06.305.108.463.155.05.021.122.039.17.059.184.07.379.127.573.184l.073.018c.669.2 1.347.364 2.036.515l.036.009c.218.056.434.087.65.119l.074.018c.205.044.409.065.601.098l.097.017c.203.02.396.054.6.074l.096.017.611.062.084.005c.203.021.42.053.634.06l.06.008c.227.019.442.027.67.045l.023-.001c2.59.129 5.186.02 7.751-.336 6.345-.863 12.128-2.896 15.518-4.312-.283-.776-1.68-3.597-3.936-8.044ZM64.18 209.661l-.328-.083.328.083Zm-.887-.255-.317-.096.317.096ZM49.676 199.26c-5.172-4.016-12.666-4.056-17.746-8.436-11.265-9.712-17.717-21.54-19.265-30.402-.03-.07-.047-.152-.063-.21-2.449-8.974-.016-12.899.517-15.495.786-3.839 4.673-5.292 3.88-7.814-1.866-5.925 9.796-35.503 30.24-42.01 2.556-.808 6.556-.106 9.301-.285 2.118-.145 2.938-1.276 5.116-1.08 17.513 1.592 36.376 13.227 42.742 24.051-5.847-9.912-7.524-12.486-4.668-12.46 2.701.026 17.397 14.157 19.068 19.538-1.376-6.212 1.221-8.068-13.686-22.005l-.724-.625c-17.873-14.965-51.02-17.66-60.474-13.832-12.583 5.093-20.401 10.309-30.554 30.56-7.77 15.486-11.033 37.426 3.76 58.815 4.555 6.583 11.386 12.937 19.717 18.991a83.149 83.149 0 0 0 26.016 12.686c-7.9-3.6-10.099-7.599-13.177-9.987Zm17.977 11.225.109.027-.109-.027Zm-2.601-.604-.278-.063.278.063Zm1.972.46-.218-.055.218.055Zm-1.112-.25-.037-.009.037.009Zm-36.798 42.092-.202.337.202-.337Z\"\n            opacity=\".3\"></path>\n        <path fill=\"#091426\"\n            d=\"M30.68 249.416c-.021.025-.03.061-.052.086a.209.209 0 0 0 .052-.086Zm-.513.929-.149.25.149-.25Zm-.527.919c-.064.101-.116.212-.18.312.064-.1.129-.201.18-.312Zm-1.076 1.84-.213.35.213-.35Zm-.561.933c-.076.113-.138.237-.202.337.064-.1.14-.213.202-.337Zm4.31-7.62-.05.11.05-.11Zm-4.904 8.591-.182.288c.064-.1.128-.2.182-.288Zm6.389-11.495-.041.075.041-.075Zm-.975 1.927c-.02.049-.052.087-.061.123a.53.53 0 0 1 .061-.123Zm.487-.975c-.02.049-.042.074-.062.123a.317.317 0 0 0 .062-.123ZM3.094 224.016a.985.985 0 0 0-.168.144.984.984 0 0 0 .168-.144Zm-1.537 1.243.102-.067c-.035.015-.07.029-.102.067Zm23.194-18.66c.057-.04.112-.103.168-.143-.056.04-.111.103-.168.143ZM.86 225.811c.046-.028.079-.066.124-.093l-.124.093Zm2.863-2.293c-.068.053-.125.093-.192.145l-.011.013a.817.817 0 0 0 .203-.158Zm19.989-16.021a.94.94 0 0 0-.179.156c-.055.063-.135.105-.19.168.18-.156.382-.313.56-.47-.08.042-.123.093-.19.146Zm-4.046 3.332c-.022.025-.057.04-.079.065.09-.078.18-.156.293-.236-.068.052-.133.129-.214.171Zm-.448.365-.246.208-.202.158c-.168.143-.338.263-.505.406.392-.326.785-.629 1.166-.942-.078.065-.145.117-.213.17ZM.468 226.137c-.067.053-.124.092-.179.156a.978.978 0 0 1 .18-.156Zm24.876-20.046-.268.235c-.033.038-.079.065-.123.116.146-.118.28-.247.426-.365-.013-.011-.024.002-.035.014Zm-.76.651c-.057.04-.111.104-.168.143-.056.04-.111.104-.168.144l-.178.156c-.022.025-.046.027-.068.052.257-.221.503-.43.75-.638a.978.978 0 0 1-.168.143Zm-8.991 7.372c.192-.145.37-.301.563-.446-.192.145-.373.278-.563.446Zm-.629.499c.192-.145.37-.301.563-.447-.192.146-.384.291-.563.447Zm1.651-1.324c-.113.08-.214.171-.327.251-.033.038-.079.065-.124.092.202-.158.416-.328.619-.486l-.168.143Zm4.767-3.86c-.078.065-.146.117-.224.183-.124.092-.246.208-.37.301l-.224.183-.236.195-.202.158c-.033.038-.078.065-.135.105.527-.431 1.032-.837 1.524-1.254l-.133.129Zm.224-.183c.068-.053.135-.105.19-.169-.055.064-.122.116-.19.169Zm-3.858 3.139-.146.118c.225-.183.45-.366.663-.537-.168.144-.349.276-.517.419Zm5.247-4.288-.178.156.503-.43c-.111.103-.224.183-.325.274Zm-5.887 4.799-.168.144c.114-.08.225-.184.339-.264l-.17.12Zm5.317-4.317a.981.981 0 0 0 .168-.144c-.057.04-.112.104-.168.144Zm-11.66 9.364a170.76 170.76 0 0 0 1.82-1.442c-.608.473-1.202.957-1.82 1.442Zm3.088-2.452-.438.354-.067.052c-.213.17-.427.341-.65.524.415-.328.82-.643 1.211-.97l-.056.04Zm.607-.473c-.046.027-.079.065-.113.08-.09.078-.191.145-.28.223.223-.183.471-.368.696-.551l-.303.248Zm.381-.314.078-.065c-.021.026-.056.04-.078.065Zm7.359-5.942c-.067.052-.123.092-.178.156-.055.063-.135.105-.18.156l.439-.354c-.035.015-.058.016-.08.042Z\"\n            opacity=\".3\"></path>\n        <path fill=\"#091426\"\n            d=\"m31.515 206.407.94-1.27c-1.778.238-4.287.555-7.089.929a6.03 6.03 0 0 1-.425.364l-.022.026c-.056.04-.111.103-.168.143-.246.208-.492.417-.749.638-.033.038-.078.065-.1.091-.179.156-.358.312-.56.469l-.022.026-.503.429c-.067.053-.135.105-.213.171a.936.936 0 0 0-.168.143c-.057.04-.1.09-.157.13l-.437.354-.022.025c-.068.053-.135.105-.19.169-.022.025-.056.04-.078.065-.482.404-.998.823-1.524 1.254a.49.49 0 0 1-.124.093c-.09.078-.192.145-.292.235a.838.838 0 0 0-.168.144c-.38.313-.762.627-1.167.942-.224.183-.437.353-.662.536l-.326.251-.01.012c-.114.08-.214.171-.338.263-.056.04-.09.078-.146.118l-.01.013c-.203.157-.405.315-.619.485l-.01.013-.012.013c-.191.145-.37.301-.561.445l-.068.053c-.191.145-.37.301-.561.446l-.011.013-.022.025-.078.065c-.022.026-.057.04-.09.078-.224.183-.46.355-.696.551-.046.027-.09.078-.135.105-.405.316-.81.631-1.212.97l-.113.08c-.607.473-1.202.956-1.82 1.442-1.055.839-2.145 1.693-3.246 2.559-.022.026-.046.027-.068.053l-.572.458-.011.013-.033.038c-.191.145-.381.314-.572.459l-.011.012-.033.038-1.247.984a.3.3 0 0 1-.113.08c-.157.131-.337.263-.494.393a.842.842 0 0 0-.157.131l-.438.353-.202.158c-.146.118-.292.236-.426.341-.068.052-.124.092-.192.145l-.594.484c-.213.17-.427.34-.63.498l-.021.025-.113.08a7.652 7.652 0 0 1-.483.381l-.079.065c-.045.027-.089.078-.134.105-.135.105-.27.21-.392.326-.068.053-.124.093-.192.145l-.022.026c-.146.118-.28.223-.426.34a9.891 9.891 0 0 0-.214.171l-.448.366-.146.118-.01.012-.606.497-.057.04c-.022.025-.067.052-.1.091l-.46.378c-.067.053-.145.118-.213.171-.135.105-.27.21-.415.328l-.011.012-.225.184c-.134.105-.257.221-.38.313-.079.065-.157.131-.225.183a5.73 5.73 0 0 0-.403.339c-.033.038-.078.065-.135.105-.056.04-.056.04-.078.066l-.605.496-.673.549c-.022.026-.057.04-.078.066-.54.42-1.09.853-1.665 1.288-.022.025-.045.027-.067.053-.192.145-.394.302-.609.449-.056.04-.102.067-.146.118a70.27 70.27 0 0 0-.733.542c-.067.052-.134.105-.226.159l-.247.185c.167 1.295.28 2.5.337 3.589.398 1.207.784 3.046 1.002 5.181.01.142.033.295.044.437l.012.166c.056.757.103 1.55.128 2.368 7.077-6.873 33.509-32.396 39.29-39.257Zm-62.059 39.754c.29-2.031-.385-4.073-1.042-6.034l-3.059-9.036c-1.688-4.976-3.403-10.152-2.875-15.387.528-5.235 3.179-12.47 8.35-13.435-1.939-.344-3.416-1.02-4.763-.587a.782.782 0 0 1-1.011-.496.897.897 0 0 1 .036-.633c.364-.704.922-1.197 1.766-1.843 1.832-1.431 5.283-2.353 7.542-2.841 8.768-1.85 12.522-.606 21.734-.171 3.079.153 10.748 1.761 13.792 1.286-12.381-1.818-31.8-4.898-40.62-2.474-11.538 3.161-12.104 14.297-11.603 22.678.3 5.019 1.796 10.449 3.214 14.66l-.105-.29c1.468 3.768 3.582 9.354 4.29 11.513.769 2.369 2 7.105.382 7.26-.284.021-.547-.161-.81-.499 1.343 2.243 4.377-.787 4.782-3.671Z\"\n            opacity=\".3\"></path>\n        <path fill=\"#091426\"\n            d=\"M-14.685 212.408c.224.459.408.862.613 1.215 10.133-2.843 13.005-3.4 21.819-4.968 5.961-1.06 14.875-2.231 20.929-3.012 3.793-.317 4.045-.609 6.28-1.738-10.437.678-21.064 1.191-31.398 2.777-7.513 1.139-16.164 1.851-23.445-.285 1.818 1.102 4.263 4.095 5.202 6.011Z\"\n            opacity=\".3\"></path>\n        <path fill=\"#091426\"\n            d=\"M35.308 198.541c-3.711-.498-9.606.021-16.415-.402-2.604-.164-7.294-.887-12.872-1.71.161.095.323.19.483.261a31.313 31.313 0 0 0 13.188 3.554c2.993.123 6.002-.183 8.997.118 2.995.302 6.053 1.3 8.038 3.543a43.16 43.16 0 0 0 3.87 3.934c1.004.865 2.382 1.168 3.511 1.809.04.699.127 1.394.136 2 .117 3.023.009 6.051-.053 9.076-.099 5.892-.027 11.998 2.4 17.478 1.184 2.659 2.845 5.021 4.745 7.235-.574-2.288-1.17-4.883-1.837-7.783-3.117-13.514-1.817-26.475-3.234-31.637a2.11 2.11 0 0 0-.282.044c.006-.083.011-.167.006-.238 0-2.081 1.282-2.283 2.569-2.081a82.606 82.606 0 0 1-10.298-6.11c.134.847-1.446.857-2.952.909Z\"\n            opacity=\".3\"></path>\n        <path fill=\"#fff\"\n            d=\"M8.099 145.969a48.93 48.93 0 0 1 .207-4.914c-.41-.244-.856-.472-1.288-.69a55.753 55.753 0 0 0-.185 8.099c.462.132.914.301 1.365.446a60.937 60.937 0 0 1-.1-2.941Zm88.891 61.844a16.142 16.142 0 0 1-3.513 2.02 15.552 15.552 0 0 0 3.538-1.998l-.025-.022Zm-39.846-1.805a82.742 82.742 0 0 1-19.529-10.504c-2.79-2.028-5.39-4.071-7.714-6.075-4.89-4.216-8.83-8.454-11.692-12.582-5.46-7.895-8.735-16.32-9.743-25.115a30.327 30.327 0 0 0-1.394-.361c.916 8.517 3.94 17.413 10.04 26.235 3.035 4.389 7.087 8.678 11.913 12.839a119.771 119.771 0 0 0 7.803 6.152 83.346 83.346 0 0 0 26.028 12.697 34.409 34.409 0 0 1-5.712-3.286ZM7.389 137.341c.423.254.846.509 1.245.764a60.555 60.555 0 0 1 5.903-18.712c4.848-9.68 9.193-16.03 14.075-20.589 4.638-4.326 9.658-6.862 15.777-9.337 4.767-1.934 15.585-1.95 26.344-.048 7.783 1.374 22.389 4.977 32.759 13.674.393.339.798.666 1.179.994 7.659 6.603 13.715 13.728 17.977 21.189 3.428 5.988 5.668 12.148 6.47 17.843.695 4.895 1.306 10.093.524 15.264-.837 5.567-3.159 10.495-7.271 15.496-4.811 5.837-9.857 10.432-13.785 13.754-2.585 2.665-4.861 4.998-6.261 6.801a1.03 1.03 0 0 0-.215.789c-.384 1.087-.325 2.688-.689 4.676l.157.024c.492-2.497.281-4.384 1.059-5.44 1.297-1.761 11.502-8.462 20.774-19.73 9.272-11.269 8.536-21.202 7.039-31.792-1.468-10.343-7.92-25.227-24.901-39.866a49.5 49.5 0 0 0-1.192-1.006c-17.873-14.966-51.02-17.66-60.474-13.832-12.583 5.093-20.401 10.309-30.554 30.56a61.79 61.79 0 0 0-5.94 18.524Zm91.806 68.3a16.044 16.044 0 0 0 1.893-3.815l-.145-.036a14.674 14.674 0 0 1-1.934 3.912c-.171.25-.367.503-.564.731l.075.042c.242-.255.47-.546.675-.834ZM-7.206 242.768l4.85-4.342 4.864-4.331a1716.59 1716.59 0 0 0 9.7-8.708c1.615-1.464 3.195-2.936 4.798-4.41l2.38-2.222c.79-.736 1.59-1.485 2.354-2.243l1.177-1.133.576-.566.564-.577c.775-.771 1.54-1.529 2.276-2.332.376-.385.75-.793 1.126-1.178.376-.384.737-.803 1.1-1.199a53.036 53.036 0 0 0 2.123-2.487c-3.206 2.948-6.403 5.86-9.573 8.817-1.58 1.473-3.17 2.958-4.773 4.432l-4.785 4.421c-3.182 2.946-6.39 5.871-9.585 8.807l-4.81 4.398-4.826 4.365-.334.31c.025.176.04.365.053.555l.012.165.013.166.72-.708Z\"\n            opacity=\".04\"></path>\n        <path fill=\"#fff\"\n            d=\"M-19.398 206.729a10.93 10.93 0 0 1 3.149 3.025 16.804 16.804 0 0 1 1.99 3.907c.85 1.863 1.46 3.827 2.033 5.782.573 1.956 1.042 3.954 1.474 5.943.433 1.99.807 3.995 1.123 6.017.316 2.021.585 4.047.712 6.082l-.001-.023c.264.848.482 1.7.629 2.557.16.868.282 1.727.383 2.611.177 1.747.225 3.515.153 5.268a27.326 27.326 0 0 1-.756 5.216 17.56 17.56 0 0 1-1.992 4.88 12.395 12.395 0 0 1-3.578 3.867c-1.46 1-3.123 1.67-4.812 2.14-1.702.459-3.44.754-5.19.884-1.76.142-3.52.153-5.264.045a42.153 42.153 0 0 1-5.209-.661 30.957 30.957 0 0 1-5.076-1.431 18.994 18.994 0 0 1-2.4-1.095 12.543 12.543 0 0 1-2.2-1.454 22.955 22.955 0 0 1-3.669-3.783 25.158 25.158 0 0 1-4.47-9.478 26.622 26.622 0 0 1-.336-10.474l.01-.013c.21-.395.407-.779.628-1.164.209-.396.455-.759.715-1.111.271-.341.58-.673.928-.948.348-.276.71-.517 1.086-.747l.067.102c-.725.482-1.409 1.044-1.893 1.734a8.12 8.12 0 0 0-.654 1.118c-.198.384-.395.767-.591 1.174l.03-.086a26.435 26.435 0 0 0 .654 10.284 24.508 24.508 0 0 0 4.537 9.093 21.213 21.213 0 0 0 3.582 3.575c1.265 1.024 2.793 1.743 4.37 2.328 1.6.583 3.238 1.021 4.925 1.324 1.676.316 3.39.51 5.086.598a38.33 38.33 0 0 0 5.095-.08 27.37 27.37 0 0 0 4.977-.868 16.001 16.001 0 0 0 4.478-1.984 9.41 9.41 0 0 0 .933-.723c.301-.272.59-.555.854-.836a12.902 12.902 0 0 0 1.45-1.939 16.53 16.53 0 0 0 1.874-4.561c.413-1.636.67-3.32.77-5.004a31.87 31.87 0 0 0-.092-5.105 36.358 36.358 0 0 0-.342-2.532 21.585 21.585 0 0 0-.573-2.442l-.015-.035c-.016-.058-.021-.129-.027-.2-.088-2.003-.32-3.995-.599-6.007-.133-1.001-.29-2-.472-2.997l-.542-2.992a101.86 101.86 0 0 0-1.331-5.93c-.502-1.96-1.051-3.917-1.819-5.775l-.001-.023a16.102 16.102 0 0 0-1.834-3.883 11.166 11.166 0 0 0-1.326-1.697 9.293 9.293 0 0 0-1.65-1.4l.019-.073Zm-3.468 80.657 1.323-1.073c1.772-1.439 3.519-2.9 5.265-4.361l2.593-2.237c.86-.742 1.72-1.507 2.568-2.259a477.49 477.49 0 0 0 5.031-4.629c1.669-1.551 3.285-3.169 4.901-4.786a156.416 156.416 0 0 0 4.722-4.963c1.54-1.684 3.016-3.422 4.48-5.171a156.164 156.164 0 0 0 4.277-5.346c2.8-3.608 5.464-7.289 8.063-11.049 2.6-3.759 5.064-7.568 7.489-11.434a512.655 512.655 0 0 0 7.09-11.665l-.112-.075a460.857 460.857 0 0 1-7.316 11.516 368.662 368.662 0 0 1-7.692 11.258 245.399 245.399 0 0 1-8.194 10.892 232.345 232.345 0 0 1-4.331 5.255 132.2 132.2 0 0 1-4.534 5.08 150.769 150.769 0 0 1-4.754 4.846 235.923 235.923 0 0 1-4.97 4.66 424.464 424.464 0 0 1-5.048 4.571l-5.098 4.527c-1.707 1.518-3.417 2.988-5.139 4.471l-1.296 1.119-.649.547c-.213.17-.438.353-.65.524.246.279.502.521.803.737.18-.132.36-.265.518-.395l.66-.56Z\"\n            opacity=\".04\"></path>\n        <path fill=\"#fff\"\n            d=\"m25.976 206.592-.48-.547-.13.021c-3.113 2.763-8.042 6.683-13.703 11.169a845.934 845.934 0 0 1-13.158 10.486c-1.145.917-2.277 1.845-3.41 2.773a95.403 95.403 0 0 1-4.443 3.409c.05.353.087.695.124 1.037 13.655-10.369 27.49-21.666 35.2-28.348Z\"\n            opacity=\".04\"></path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M13.924 142.755c-4.348-5.742-15.757-10.486-20.636-8.935-2.803.683-2.519 2.921-.246 3.109 2.273.189 13.6 1.098 19.04 7.116.906 1.003 2.264-.418 1.842-1.29Zm-4.053 6.756c-8.41-3.265-18.217-4.037-22.642-1.652-1.834.92-1.481 3.439.884 3.263 2.365-.175 12.139-1.933 20.898.748 1.225.48 1.853-1.79.86-2.359Z\">\n        </path>\n        <path fill=\"#091426\"\n            d=\"M12.52 143.691c-1.046-.79-1.993-1.695-3.005-2.524a22.259 22.259 0 0 0-10.278-4.566c-1.517-.244-3.07-.343-4.49-.904-.613-.24-1.234-.598-1.468-1.199a1.19 1.19 0 0 1-.038-.675c-2.754.704-2.472 2.918-.198 3.106 2.273.189 13.6 1.098 19.04 7.116.427.479.97.415 1.363.113a2.352 2.352 0 0 1-.926-.467Zm-24.407 7.431c2.365-.175 12.139-1.933 20.898.748.563.22 1-.157 1.212-.661-.608.14-1.333-.02-1.955-.224-2.166-.671-4.33-1.474-6.585-1.735-3.034-.358-6.088.308-9.14.534-1.477.121-3.046.118-4.317-.668-.336-.201-.67-.533-.663-.925.008-.215.076-.422.182-.596-.184.084-.368.169-.529.253-1.808.942-1.468 3.449.897 3.274Z\"\n            opacity=\".3\"></path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M109.058 218.572c-.787-3.889-6.818-9.709-10.538-12.097a10.17 10.17 0 0 1-1.505 1.36c4.395 3.48 8.574 9.805 9.223 11.184.705 1.493 2.124 1.388 2.82-.447Zm5.891-11.97c-1.178-1.613-7.876-5.682-13.375-6.726a16.139 16.139 0 0 1-.498 1.939c4.627 1.156 9.84 5.074 11.648 6.855 1.923 1.879 3.548-.263 2.225-2.068Z\">\n        </path>\n        <path fill=\"#091426\"\n            d=\"M109.058 218.572c-.003-.047-.018-.082-.021-.129-.341.061-.686.05-1.013-.032-1.14-.296-1.994-1.232-2.752-2.151a60.948 60.948 0 0 1-5.043-7.093 1.042 1.042 0 0 1-.17-.368c-.097-.504.224-.671.61-.759-.089-.076-.165-.142-.265-.206-.115-.099-.24-.184-.378-.281l-.063-.055-.314-.226-.038-.033a4.043 4.043 0 0 1-.353-.26l-.025-.021-.314-.227-.038-.033-.338-.224a10.1 10.1 0 0 1-1.504 1.359c.127.11.278.218.404.327l.013.011.394.34.013.011a31.329 31.329 0 0 1 2.372 2.333 50.149 50.149 0 0 1 2.489 2.942l.315.405c.421.54.805 1.07 1.163 1.579l.252.35.013.01.226.329.026.021.213.317.026.022.201.307.013.01c.134.205.255.398.364.58l.012.011.161.25.026.021.136.228.014.035.121.193.015.035.096.171.012.011.084.16.012.011.069.126c.649 1.533 2.068 1.428 2.764-.407Zm3.882-9.716.114.099.051.044.125.086.038.032.149.084.036.01c.049.02.075.042.124.062l.049.02c.036.009.062.031.098.04l.049.02c.036.01.085.03.122.039l.012.011a.505.505 0 0 0 .144.013l.047-.003c.037.009.06.007.095-.007l.047-.004.095-.007.047-.003a.357.357 0 0 0 .117-.033l.023-.002c.035-.014.059-.016.093-.03.011-.013.024-.002.035-.015.023-.001.045-.027.08-.041l.035-.015c.034-.014.045-.027.08-.041.034-.015.011-.013.022-.026a.279.279 0 0 0 .089-.078l.022-.025.055-.064.032-.038.055-.063.022-.026s.055-.063.064-.099l.011-.013c.022-.026.031-.062.053-.087.022-.026.022-.026.02-.049-.002-.024.02-.049.029-.086.011-.012.01-.036.021-.049.009-.036.02-.049.029-.085.011-.013.009-.037.009-.037s.03-.085.026-.132c.011-.013-.002-.024.009-.037l.017-.096.007-.06.006-.084c-.002-.023.009-.036-.004-.047-.012-.011-.005-.071-.008-.118l-.002-.024a5.72 5.72 0 0 1-1.493-.091c-1.171-.235-2.27-.784-3.301-1.385a32.526 32.526 0 0 1-5.988-4.431 1.952 1.952 0 0 1-.404-.482 1.003 1.003 0 0 1-.012-.807c-.195-.057-.378-.127-.56-.173l-.194-.057c-.122-.038-.231-.066-.353-.105l-.242-.053-.303-.085-.255-.064-.29-.074-.266-.051-.156-.024c-.118.65-.297 1.294-.499 1.939l.327.083.122.038c.109.028.207.068.304.085l.145.037c.098.04.195.057.293.097l.158.048c.098.04.183.069.292.097l.171.059.282.109.16.072.294.121.16.071.283.134.173.082.283.134.173.082.296.145.16.071.272.146.149.084c.098.041.185.094.285.158l.149.084.285.157.136.073.298.168.1.064c.1.064.211.115.323.19l.013.011c.374.234.748.468 1.109.691l.087.053.251.172.138.096.238.161.15.108.225.15.151.107.201.152.164.119.189.14.163.119c.051.044.125.086.176.13l.163.118.164.119.163.119.152.131.153.131.14.121.139.12.127.11.508.438.14.12.089.077.14.12.076.066.179.177.166.142Z\"\n            opacity=\".3\"></path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M113.707 110.992c2.409 3.626 3.784 12.561 5.234 14.475 1.449 1.914 2.508 1.122 2.508 1.122 3.101 3.338 6.492 12.836 6.846 16.02.013 1.783.372 3.421 2.124 1.389 1.752-2.032 15.763-16.743 14.638-23.913-1.336-8.569-24.741-11.366-31.35-9.093Z\">\n        </path>\n        <path fill=\"#091426\"\n            d=\"M120.418 126.475a5.361 5.361 0 0 1-.765-.704c-1.224-1.431-1.063-3.595-.47-5.387 1.354-4.19 5.713-7.783 9.806-9.346-6.141-1.044-12.358-1.023-15.28-.022 2.409 3.626 3.784 12.561 5.234 14.475.485.618 1.005.888 1.475.984Zm1.292 1.379a.54.54 0 0 1 .049-.777.492.492 0 0 1 .264-.126c2.218-.39 6.703-2.613 8.227-3.38 1.835-.92 7.72-3.817 9.162-3.769 1.442.047 2.423.605 2.854 1.132.432.527.382 1.945-.523 3.689-.906 1.743-6.306 10.062-7.544 11.652-1.237 1.589-3.157 5.536-3.884 5.352-.727-.184-1.071-3.071-1.692-4.713-.591-1.55-2.621-5.359-4.167-6.98-.737-.79-2.125-1.389-2.746-2.08Z\"\n            opacity=\".3\"></path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M41.557 90.414c9.899-14.05 34.522-25.147 46.434-18.42 4.616 2.608 5.268 21.37 3.433 27.094-.77 2.435-3.088-1.555-8.137-3.916-5.05-2.361-16.179-3.32-17.418-2.396-1.24.924-4.275 6.499-6.386 6.893-2.11.394-6.484-4.55-9.568-6.699-3.02-2.095-5.248-2.31-8.358-2.556Z\">\n        </path>\n        <path fill=\"#091426\"\n            d=\"M61.21 80.767c1.942-3.485 4.646-6.468 7.662-9.093-10.465 3.177-21.461 10.436-27.315 18.74 3.11.246 5.337.461 8.358 2.556.614.418 1.26.953 1.944 1.52.73-.1 1.445-.237 2.158-.397 1.498-.325 3.064-.215 4.467.11-.733-4.595.46-9.368 2.727-13.436ZM90.93 99.79c-.484-.262-.804-.892-1.059-1.444a16.804 16.804 0 0 0-2.375-3.819 1.582 1.582 0 0 1-.366-.603 1.485 1.485 0 0 1 .024-.644 43.02 43.02 0 0 0 .311-12.97c-.26-2.063-.846-4.361-2.647-5.405-1.516-.887-3.478-.563-5.117.105-2.054.842-3.884 2.143-5.637 3.51a94.241 94.241 0 0 0-12.381 11.51c-.353.383-.692.776-.894 1.267-.201.49-.206 1.062.098 1.479.82 1.128 2.674 1.11 3.991 1.072.28-.401.61-.759.978-1.083 1.24-.924 12.368.035 17.418 2.396 4.261 1.991 6.575 5.137 7.655 4.629Z\"\n            opacity=\".3\"></path>\n        <path fill=\"#D9E9E6\"\n            d=\"M47.715 160.24c1.736 1.607 3.534 4.221 4.256 5.618 4.178.547 10.888-4.385 14.853-11.527a15.98 15.98 0 0 0 1.785-5.126c1.194-7.318-2.95-14.3-8.827-12.901-4.206 1.001-7.57 4.543-10.37 12.027-1.13 3.033-1.73 5.859-1.78 8.384-.044 1.335-.042 2.488.083 3.525Z\">\n        </path>\n        <path fill=\"#C6D9D5\"\n            d=\"M49.328 148.302c.584-1.577 1.242-3.136 2.023-4.632.793-1.486 1.721-2.922 2.889-4.174 1.144-1.25 2.553-2.293 4.148-2.911.197-.074.393-.148.603-.211l.617-.176c.093-.031.21-.063.315-.083l.316-.059c.211-.04.424-.055.637-.071a6.327 6.327 0 0 1 2.55.382c.808.32 1.545.801 2.17 1.385.626.584 1.154 1.282 1.588 2.01.882 1.469 1.397 3.131 1.629 4.814a15.8 15.8 0 0 1-.148 5.076 15.584 15.584 0 0 1-1.765 4.744l-.161-.095c.497-1.63.866-3.239.938-4.837.095-1.6.001-3.187-.335-4.672l-.136-.56c-.049-.175-.11-.361-.148-.548l-.171-.547-.193-.52c-.29-.692-.6-1.359-1-1.948a8.003 8.003 0 0 0-1.318-1.578 5.22 5.22 0 0 0-1.596-1 4.224 4.224 0 0 0-1.769-.285l-.473.035-.235.041-.118.009c-.047.003-.082.018-.13.021l-.513.133-.498.168c-.175.049-.325.119-.497.192a4.12 4.12 0 0 0-.496.215l-.48.249-.467.284c-.16.084-.306.201-.465.308-.158.107-.306.201-.44.33l-.437.354c-.145.117-.29.259-.423.388-1.136 1.035-2.136 2.298-3.084 3.628-.959 1.344-1.816 2.774-2.731 4.221l-.197-.08Z\">\n        </path>\n        <path fill=\"#8D5548\"\n            d=\"M47.632 156.715c-.051-1.816.194-3.641.621-5.421a33.7 33.7 0 0 1 .744-2.635c.134-.438.305-.866.464-1.283.147-.427.33-.844.5-1.273.092-.209.17-.429.262-.638l.275-.627c.183-.417.402-.826.598-1.233.196-.407.452-.806.671-1.215.104-.198.245-.386.373-.586l.373-.587.398-.564c.064-.1.14-.189.204-.289l.23-.266c.154-.178.294-.367.447-.545l.486-.511c.653-.655 1.367-1.279 2.162-1.789.807-.5 1.658-.896 2.564-1.177.894-.292 1.882-.437 2.84-.341.48.059.962.143 1.404.324.23.066.441.181.674.271.11.051.21.115.321.166l.15.085.16.095.3.191.278.218.15.107.14.121.267.23c.334.332.657.677.936 1.072a10.229 10.229 0 0 1 1.346 2.445c.337.867.582 1.764.732 2.668.3 1.809.26 3.679-.119 5.455.2-1.799.123-3.636-.28-5.378a13.893 13.893 0 0 0-.841-2.541 12.384 12.384 0 0 0-.61-1.168 8.318 8.318 0 0 0-.757-1.073 8.636 8.636 0 0 0-.89-.945l-.242-.208-.127-.11-.138-.096-.263-.183-.274-.17-.11-.051-.137-.073c-.098-.041-.185-.094-.296-.145-.196-.08-.382-.174-.6-.229-.403-.148-.812-.213-1.243-.253-.215-.008-.418-.028-.631-.012-.108-.004-.215-.008-.32.011l-.319.036c-.094.007-.21.039-.317.059l-.316.059-.617.177a10.92 10.92 0 0 0-2.368 1.102c-.75.46-1.409 1.044-2.029 1.661l-.452.473-.438.508-.22.254c-.076.089-.13.176-.206.265l-.4.541c-1.033 1.456-1.855 3.05-2.614 4.676-.734 1.648-1.42 3.315-1.92 5.053-.48 1.712-.836 3.486-.976 5.292Z\">\n        </path>\n        <path fill=\"#D9E9E6\"\n            d=\"M86.083 185.768c1.692-.268 3.57-.93 5.484-1.892 6.326-3.203 13.111-9.686 12.865-15.898-.181-4.85-6.12-5.1-11.077-2.509-1.705.899-3.283 1.907-4.42 2.765-4.448 3.361-10.224 11.267-10.008 14.176.138 1.869 1.783 2.734 3.18 3.141a20.138 20.138 0 0 1 3.976.217Z\">\n        </path>\n        <path fill=\"#C6D9D5\"\n            d=\"M91.513 183.785c1.141-.964 2.25-1.891 3.306-2.884 1.045-.981 2.053-1.972 2.986-3.028a30.5 30.5 0 0 0 2.566-3.233c.375-.563.726-1.124 1.051-1.707.315-.57.58-1.161.809-1.76.229-.6.4-1.183.498-1.785l.074-.445.051-.444.014-.453c-.011-.142.004-.262-.018-.391a3.27 3.27 0 0 0-.123-.704c-.087-.208-.15-.417-.269-.587a2.844 2.844 0 0 0-.454-.501 3.134 3.134 0 0 0-.637-.417c-.258-.111-.516-.223-.796-.309a9.734 9.734 0 0 0-.918-.194 9.664 9.664 0 0 0-2.004-.089c-1.388.043-2.794.314-4.242.682l-.083-.16c1.305-.691 2.681-1.209 4.146-1.496a9.881 9.881 0 0 1 2.209-.199 6.879 6.879 0 0 1 2.192.384c.355.129.689.306 1.014.52.314.226.593.467.841.77.236.292.428.634.572.98.134.359.233.732.272 1.098.17 1.497-.111 3.004-.615 4.385a13.537 13.537 0 0 1-.957 2.009 19.09 19.09 0 0 1-1.218 1.85 24.787 24.787 0 0 1-1.407 1.709 23.746 23.746 0 0 1-1.55 1.565c-.544.504-1.091.985-1.664 1.443a29.697 29.697 0 0 1-5.54 3.55l-.106-.159Z\">\n        </path>\n        <path fill=\"#8D5548\"\n            d=\"M91.567 183.876a36.42 36.42 0 0 0 6.923-5.257c1.03-1.015 1.998-2.086 2.827-3.253.42-.59.816-1.178 1.162-1.81.345-.632.644-1.26.891-1.933.26-.661.448-1.341.552-2.026l.068-.516.033-.526.009-.524c-.013-.165-.014-.344-.026-.509a4.438 4.438 0 0 0-.227-.97 3.549 3.549 0 0 0-.479-.856 3.268 3.268 0 0 0-.717-.685 4.94 4.94 0 0 0-.891-.48 6.439 6.439 0 0 0-2.04-.408 10.7 10.7 0 0 0-2.132.11c-1.423.212-2.817.649-4.165 1.236a13.564 13.564 0 0 1 4.088-1.635c.726-.148 1.48-.252 2.229-.248a7.188 7.188 0 0 1 2.249.345c.367.139.723.291 1.06.516.338.225.632.5.88.803.261.313.466.667.612 1.036.146.37.247.767.312 1.154.026.201.04.39.054.579l.008.582-.029.573c-.023.18-.043.384-.066.564a10.953 10.953 0 0 1-.586 2.195c-.537 1.419-1.308 2.725-2.196 3.908a24.36 24.36 0 0 1-1.431 1.711c-.253.269-.507.537-.773.795-.266.257-.533.515-.812.761a28.703 28.703 0 0 1-3.498 2.697c-1.262.771-2.552 1.497-3.889 2.071Zm-12.323 2.018c1.034-.326 2.117-.477 3.194-.545a17.6 17.6 0 0 1 3.266.115c.264.028.542.09.807.142l.398.077.4.102.4.101c.122.038.256.088.389.114.256.088.523.163.769.264 1.015.388 1.994.922 2.818 1.61a14.804 14.804 0 0 0-2.958-1.243 9.333 9.333 0 0 0-.765-.217c-.122-.039-.254-.064-.376-.103l-.398-.077-.387-.091a5.856 5.856 0 0 0-.386-.066 8.898 8.898 0 0 0-.782-.121 18.197 18.197 0 0 0-1.581-.168c-.539-.043-1.063-.052-1.6-.072a32.295 32.295 0 0 0-3.208.178Z\">\n        </path>\n        <path fill=\"#503B37\"\n            d=\"M88.99 179.949c3.617-3.69 5.146-8.058 3.413-9.757-1.732-1.699-6.07-.084-9.688 3.605-3.617 3.69-5.146 8.058-3.413 9.757 1.732 1.699 6.07.085 9.687-3.605Z\">\n        </path>\n        <path fill=\"#000\"\n            d=\"m92.34 170.063-.548.635.064.055c1.204 1.171.084 4.987-3.431 8.577-1.637 1.667-3.468 2.944-5.156 3.592-1.48.561-2.68.59-3.289.065l-.063-.055c-1.205-1.171-.084-4.987 3.43-8.577 1.637-1.667 3.469-2.944 5.157-3.592 1.48-.561 2.679-.591 3.288-.065l.548-.635Zm0 0c-1.79-1.544-6.046.079-9.594 3.707-3.627 3.692-5.158 8.062-3.415 9.764l.102.088c1.79 1.544 6.046-.079 9.594-3.707 3.626-3.693 5.158-8.063 3.415-9.765a7.852 7.852 0 0 1-.102-.087Z\"\n            opacity=\".16\"></path>\n        <path fill=\"#503B37\"\n            d=\"M50.225 162.227c2.747 1.721 7.326-.636 10.228-5.266 2.901-4.629 3.028-9.778.281-11.5-2.746-1.721-7.325.637-10.227 5.266-2.902 4.63-3.028 9.778-.282 11.5Z\">\n        </path>\n        <path fill=\"#503B37\"\n            d=\"m61.175 145.808-.547.635c.914.788 1.352 2.206 1.236 4.01-.118 1.935-.86 4.106-2.116 6.102-1.33 2.108-3.048 3.792-4.846 4.722-1.662.849-3.152.959-4.225.277-.112-.075-.225-.149-.326-.237-.915-.788-1.353-2.207-1.237-4.011.119-1.934.861-4.106 2.117-6.101 2.605-4.152 6.763-6.458 9.07-5 .113.075.225.15.327.238l.547-.635Zm0 0c-.14-.121-.277-.218-.428-.325-2.743-1.723-7.324.637-10.228 5.263-2.744 4.365-3.004 9.211-.718 11.182.14.121.278.218.429.325 2.743 1.723 7.324-.637 10.228-5.263 2.742-4.389 3.004-9.212.717-11.182Z\">\n        </path>\n        <path fill=\"#000\"\n            d=\"m61.175 145.808-.547.635c.914.788 1.352 2.206 1.236 4.01-.118 1.935-.86 4.106-2.116 6.102-1.33 2.108-3.048 3.792-4.846 4.722-1.662.849-3.152.959-4.225.277-.112-.075-.225-.149-.326-.237-.915-.788-1.353-2.207-1.237-4.011.119-1.934.861-4.106 2.117-6.101 2.605-4.152 6.763-6.458 9.07-5 .113.075.225.15.327.238l.547-.635Zm0 0c-.14-.121-.277-.218-.428-.325-2.743-1.723-7.324.637-10.228 5.263-2.744 4.365-3.004 9.211-.718 11.182.14.121.278.218.429.325 2.743 1.723 7.324-.637 10.228-5.263 2.742-4.389 3.004-9.212.717-11.182Z\"\n            opacity=\".16\"></path>\n        <path fill=\"#8D5548\"\n            d=\"M52.244 166.492a12.614 12.614 0 0 0-.663-1.081c-.228-.352-.478-.678-.73-1.028-.25-.326-.489-.665-.752-1.002-.25-.327-.513-.664-.763-.99-.25-.326-.523-.651-.795-.952a14.874 14.874 0 0 0-.842-.924c-.295-.3-.578-.588-.896-.862a6.255 6.255 0 0 0-1.016-.721c.41.089.806.297 1.168.52a8.12 8.12 0 0 1 1.02.769c.317.273.626.584.91.895.285.312.559.637.832.961a20.585 20.585 0 0 1 1.451 2.092c.218.365.424.742.606 1.121.196.39.38.792.47 1.202Z\">\n        </path>\n        <path fill=\"#fff\"\n            d=\"M59.54 151.512c.676.366 1.964-.703 2.878-2.389.913-1.685 1.105-3.349.43-3.715-.676-.366-1.965.703-2.878 2.389s-1.106 3.349-.43 3.715Zm30.618 23.536c.59.493 2.064-.301 3.293-1.773 1.228-1.472 1.746-3.064 1.156-3.557-.59-.492-2.065.302-3.293 1.773-1.229 1.472-1.746 3.065-1.156 3.557Z\">\n        </path>\n        <path fill=\"#8D5548\"\n            d=\"M48.273 172.433a4.596 4.596 0 0 1-1.267-.251 6.538 6.538 0 0 1-1.181-.53 6.617 6.617 0 0 1-1.053-.731 5.41 5.41 0 0 1-.878-.934c.384.198.756.408 1.104.62l1.08.622 1.08.597c.36.2.73.386 1.115.607Z\">\n        </path>\n        <path fill=\"#8D5548\"\n            d=\"M46.894 171.798c.324 1.653.86 3.266 1.556 4.796.696 1.53 1.554 3 2.536 4.378a26.627 26.627 0 0 0 3.314 3.809 25.332 25.332 0 0 0 4.007 3.056c1.421.893 2.96 1.6 4.56 2.159 1.587.572 3.234.974 4.917 1.229.422.076.84.105 1.26.157.217.031.42.052.635.06l.646.047c.836.057 1.693.065 2.548.049.427-.008.853-.039 1.268-.058l.625-.058.319-.036.318-.035c.211-.04.424-.055.635-.095l.62-.129c.212-.039.409-.113.62-.153.105-.019.21-.063.302-.093l.29-.105.139.275c-.816.381-1.657.586-2.513.757l-.316.059-.33.048-.634.095c-.437.044-.861.099-1.3.119-.864.053-1.742.07-2.612.051l-.656-.034c-.215-.008-.43-.016-.657-.035-.43-.039-.873-.066-1.305-.129l-1.298-.189-1.28-.262c-.216-.032-.424-.1-.642-.155l-.63-.167c-.424-.1-.84-.259-1.254-.395-1.66-.567-3.269-1.268-4.776-2.191-1.494-.912-2.915-1.96-4.181-3.162a25.797 25.797 0 0 1-3.41-3.98 25.43 25.43 0 0 1-2.539-4.58c-.666-1.616-1.207-3.3-1.455-5.041l.673-.062Z\">\n        </path>\n        <path fill=\"#000\"\n            d=\"M46.683 171.838c.208.401.356.794.575 1.182l.28.574c.098.194.206.377.315.559.109.182.194.366.302.548l.326.547c.204.353.433.705.66 1.057a37.488 37.488 0 0 0 2.942 3.908l.39.446.424.433c.141.144.272.301.4.434.131.157.284.288.412.421l.423.409c.076.065.141.144.218.21l.228.197c.305.262.586.527.878.779.303.239.608.502.911.741.153.131.303.239.467.358l.477.345c.303.239.628.453.953.666l.488.333c.164.119.336.201.498.296.336.201.66.415 1.008.603.346.188.692.353 1.038.541.162.095.358.176.53.258l.542.246c.173.082.345.164.541.245l.551.209a34.59 34.59 0 0 0 4.554 1.446c1.574.383 3.2.655 4.843.854.42.052.826.07 1.246.122l.632.037.311.024.322.012.644.024h.642c.215.007.428-.008.64-.024.108.004.213-.016.319-.036l.318-.035.112.229-.311.131c-.104.043-.208.086-.3.117l-.629.189-.642.155-.633.118-.317.059-.318.036-.648.083c-.426.032-.863.076-1.288.107a29.94 29.94 0 0 1-5.176-.211 26.087 26.087 0 0 1-5.057-1.171c-1.635-.569-3.245-1.27-4.715-2.184a25.517 25.517 0 0 1-4.122-3.154 26.567 26.567 0 0 1-3.372-3.948 25.293 25.293 0 0 1-2.546-4.52c-.678-1.602-1.193-3.264-1.463-4.98l.177-.025Z\"\n            opacity=\".03\"></path>\n        <path fill=\"#000\"\n            d=\"M46.765 171.82c.266 1.668.803 3.305 1.49 4.871a25.688 25.688 0 0 0 2.517 4.451 25.832 25.832 0 0 0 3.342 3.855 25.935 25.935 0 0 0 4.069 3.087c1.458.903 3.007 1.596 4.63 2.154a25.69 25.69 0 0 0 4.962 1.178c1.692.22 3.411.307 5.117.228.428-.008.852-.063 1.278-.095l.636-.071.319-.035.316-.059c.212-.04.412-.066.623-.106l.608-.14c.198-.05.407-.113.606-.164.105-.019.196-.074.29-.104l.289-.105.182.379-.296.164a2.434 2.434 0 0 1-.31.154l-.623.26-.626.213c-.21.063-.432.115-.641.178l-.315.083-.328.072-.655.144c-.435.067-.868.159-1.304.203-.885.101-1.77.179-2.66.209l-.666.002a6.217 6.217 0 0 1-.667-.022c-.442-.027-.895-.041-1.337-.068l-1.342-.138c-.445-.074-.878-.137-1.324-.211-.216-.032-.434-.087-.663-.129l-.665-.153a13.701 13.701 0 0 1-1.31-.355c-1.74-.525-3.444-1.219-5.01-2.15l-.299-.168c-.1-.064-.198-.104-.287-.181l-.575-.385c-.387-.245-.774-.49-1.127-.773l-.554-.411c-.189-.14-.365-.27-.543-.423l-1.041-.898a37.24 37.24 0 0 1-.987-.961l-.232-.245-.221-.257-.466-.512c-.143-.168-.31-.334-.442-.515l-.42-.539-.421-.54c-.133-.18-.254-.373-.399-.565a17.686 17.686 0 0 1-2.396-4.899c-.128-.443-.267-.872-.336-1.331a8.816 8.816 0 0 1-.207-1.352c-.018-.236-.057-.448-.051-.686a14.43 14.43 0 0 1-.004-.689c.005-.107-.004-.226.01-.346.016-.12.02-.227.034-.347.02-.227.038-.455.08-.684l.352-.073Z\"\n            opacity=\".03\"></path>\n        <path fill=\"#8D5548\"\n            d=\"M76.27 189.42c.311.334.663.593 1.015.852.363.247.726.493 1.102.751a17.2 17.2 0 0 1 1.082.8c.354.283.71.589.976.974l-1.19-.649a17.784 17.784 0 0 1-1.158-.711 7.54 7.54 0 0 1-1.064-.873c-.308-.31-.621-.691-.762-1.144Z\">\n        </path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"m84.319 253.945 3.632-1.517 10.417 8.205 2.652 14.132-10.097-5.495s-6.872-10.906-6.771-11.151c.1-.245.166-4.174.166-4.174Z\">\n        </path>\n        <path fill=\"#89B7CC\"\n            d=\"M107.322 284.404c4.559-4.261 6.017-7.853 4.671-13.995-1.347-6.143-9.577-24.486-19.96-27.082-1.78-.451-3.288-.577-4.624-.466-1.676.326-3.598 1.015-5.899 2.22-.625.391-1.236.817-1.88 1.257 4.596-2.148 4.596-.863 5.488 2.34.972 3.495 2.012 7.271 4.14 13.534 2.129 6.263 4.533 11.435 4.358 15.491-.175 4.055 4.992-2.272 6.056.859.366 1.091-2.295 4.177-2.015 4.905 5.104-7.666 4.618-3.635 4.904-3.3 2.096 2.449.625 8.111 4.761 4.237Z\">\n        </path>\n        <path fill=\"#091426\"\n            d=\"m108.824 287.028.367-.348a11.51 11.51 0 0 1-.653.345c-1.847.91-4.014 1.344-5.995.765-2.65-.779-4.498-3.258-5.44-5.863-.918-2.607-1.114-5.411-1.577-8.135-1.208-6.842-4.271-13.202-6.68-19.73-1.011-2.731-1.91-5.72-1.071-8.517a6.983 6.983 0 0 1 1.55-2.671 10.788 10.788 0 0 0-1.915-.013c-1.677.326-3.6 1.015-5.9 2.22-.625.391-1.235.817-1.88 1.257 4.596-2.147 4.783-1.388 5.675 1.815.972 3.495 1.836 7.783 3.964 14.046 2.129 6.263 4.533 11.435 4.358 15.491-.175 4.056 2.196 2.846 3.26 5.977.366 1.091 3.796-2.374 4.076-1.645.213.317-1.642 1.75-1.356 2.086 2.085 2.461 5.081 6.793 9.217 2.92Z\"\n            opacity=\".3\"></path>\n        <path fill=\"#EA4AAA\"\n            d=\"M134.242 248.941c1.836 1.029 3.571 1.971 5.272 2.951 6.323 3.657 9.133 9.489 7.923 16.439-1.192 6.854-6.316 12.001-13.22 13.178-8.55 1.442-16.475-.409-23.496-5.311-7.722-5.373-15.155-11.184-22.728-16.782-.767-.573-1.13-1.129-.597-2.132 4.897-9.173 9.845-18.302 16.223-26.574 4.72-6.116 10.741-10.224 18.321-11.903 6.645-1.467 13.341 1.45 17.055 7.286 3.73 5.895 3.437 12.218-.908 17.926-1.223 1.624-2.497 3.205-3.845 4.922Z\">\n        </path>\n        <path fill=\"#B93A86\"\n            d=\"M109.893 224.384c-2.306 1.776-4.386 3.88-6.263 6.313-6.378 8.272-11.326 17.402-16.224 26.575-.532 1.002-.17 1.558.598 2.131 7.562 5.611 15.006 11.409 22.728 16.783 7.021 4.902 14.946 6.752 23.495 5.311 3.922-.671 7.274-2.608 9.647-5.411-8.438 4.548-18.844 2.109-27.345-2.387-2.527-1.358 9.428-.329 7.725-2.771-3.643-5.2-18.117-4.616-18.651-5.076-3.166-2.773-5.546-7.305-6.079-9.359-2.062-7.932.435-16.606 7.278-28.242a128.447 128.447 0 0 1 3.091-3.867Z\">\n        </path>\n        <path fill=\"#F692CE\"\n            d=\"M137.675 232.195c1.126-1.177.192-4.639-2.65-7.377-2.843-2.739-6.54-3.69-7.678-2.523-1.138 1.166.273 4.331 3.115 7.069 2.866 2.737 6.075 3.998 7.213 2.831Zm1.179 26.035c1.469 1.378 3.136 1.73 3.786 1.028.649-.702-.172-2.318-1.641-3.695-1.47-1.378-3.474-2.109-4.123-1.407-.65.702.496 2.686 1.978 4.074Z\">\n        </path>\n        <path fill=\"color-mix(in srgb, black 20%, var(--tblr-primary))\"\n            d=\"M83.049 278.069c.621-.284 1.748-.795 1.748-.795s.62 1.309 1.089 2.333c1.442 3.103 4.486 7.277 12.016 9.407 7.529 2.129 12.987-1.556 15.203-2.945 2.215-1.389 5.555-3.491 8.588-7.651 0 0 4.898-1.623 4.501-4.578-.397-2.955-2.939-4.194-7.967-5.141-5.028-.948-9.279-1.667-14.506-1.613-4.871.051-10.748-1.273-13.79-6.22-.37-.341-2.495-1.908-2.784-2.445-.25-.481.496-1.654.684-2.001-1.655-4.039-2.512-7.59-2.875-12.819 0 0-1.744.379-5.092 2.696s-7.143 5.82-7.927 6.627c-.985.989-.401 2.289.057 3.658 1.617 4.981 2.321 4.858 4.683 9.772 2.36 4.914 4.098 7.983 5.134 9.607 1.036 1.624 1.238 2.108 1.238 2.108Z\">\n        </path>\n        <path fill=\"#36393E\"\n            d=\"M78.3 246.812c4.078-2.264 4.753-1.969 6.236-.89 1.496 1.09-.085-3.085-.085-3.085l-4.124.828-2.027 3.147Z\">\n        </path>\n        <path fill=\"#091426\" fill-rule=\"evenodd\"\n            d=\"M125.935 272.786a4.052 4.052 0 0 0-.918-1.436c-1.933.702-4.14.923-5.977.923-1.024 0-1.936-.214-2.66-.384-.981-.23-1.616-.379-1.717.197-.176 1 1.635 2.34 4.092 2.753 0 0-5.299 5.683-12.149 6.464-6.85.78-13.753-2.204-17.713-9.116-2.535-4.425-4.21-7.953-5.224-10.091-.57-1.201-.931-1.963-1.12-2.198-.442-.548-.48.023-.54.946a28.18 28.18 0 0 1-.039.548c-.1 1.22-1.646 3.296-4.918 3.907l.203 2.248c2.068 4.224 3.607 6.926 4.556 8.414 1.036 1.624 1.238 2.108 1.238 2.108.621-.284 1.748-.795 1.748-.795s.62 1.309 1.089 2.333c1.442 3.103 4.486 7.277 12.016 9.407 7.271 2.056 12.611-1.311 14.964-2.795l.239-.15c2.215-1.389 5.555-3.491 8.588-7.651 0 0 1.477-.489 2.742-1.42l1.5-4.212Z\"\n            clip-rule=\"evenodd\" opacity=\".3\"></path>\n    </svg>\n    <div class=\"card-body d-flex flex-column justify-content-center p-5\">\n        <div class=\"row\">\n            <div class=\"col-7 offset-5\">\n                <div class=\"h1\">Help us polish Backpack v7 public beta</div>\n                <p class=\"h3 fw-normal\">If you find any problems, let us know in a discussion on Github.</p>\n                <div class=\"mt-4\">\n                    <button class=\"btn w-100 pe-none\" type=\"button\">\n                        Open discussion\n                    </button>\n                </div>\n            </div>\n        </div>\n    </div>\n</a>\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-tabler/inc/topbar_right_content.blade.php",
    "content": "<li class=\"nav-item me-2\">\n    <button class=\"btn-link nav-link px-0 shadow-none\" data-bs-toggle=\"modal\" data-bs-target=\"#modal-layout\" title=\"Switch themes and layouts\">\n        <i class=\"la la-swatchbook fs-2 me-1 text-secondary\"></i>\n    </button>\n</li>\n\n@include('backpack.language-switcher::language-switcher')\n\n@section('before_scripts')\n    <div class=\"modal modal-blur fade pe-0\" id=\"modal-layout\" tabindex=\"-1\" style=\"display: none;\" aria-modal=\"false\" role=\"dialog\">\n        <div class=\"modal-dialog modal-lg\" role=\"document\">\n            <form method=\"POST\" action=\"{{ route('tabler.switch.layout') }}\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h5 class=\"modal-title\">Themes</h5>\n                        <button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        <p>Choose from the available <strong>Backpack</strong> themes:</p>\n                        @csrf\n                        <div class=\"row mb-4\">\n                            <div class=\"col-lg-4 mb-3\">\n                                <label class=\"form-selectgroup-item cursor-pointer\">\n                                    <input @if(config('backpack.ui.view_namespace') === 'backpack.theme-tabler::') checked @endif type=\"radio\" name=\"theme\" value=\"tabler\" class=\"form-selectgroup-input theme-choice\">\n                                    <div class=\"form-selectgroup-label p-0 border rounded\">\n                                        <div class=\"position-relative\">\n                                            <img src=\"{{ asset('screenshots/theme-tabler.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Tabler Theme\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                            <div class=\"position-absolute top-0 end-0 p-2\">\n                                                <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 20px; height: 20px; font-size: 12px;\"></span>\n                                            </div>\n                                        </div>\n                                        <div class=\"p-3\">\n                                            <div class=\"form-selectgroup-title fw-bold mb-1\">Tabler</div>\n                                            <small class=\"text-muted\">Bootstrap 5 • Default</small>\n                                        </div>\n                                    </div>\n                                </label>\n                            </div>\n                            <div class=\"col-lg-4 mb-3\">\n                                <label class=\"form-selectgroup-item cursor-pointer\">\n                                    <input @if(config('backpack.ui.view_namespace') === 'backpack.theme-coreuiv4::') checked @endif type=\"radio\" name=\"theme\" value=\"coreuiv4\" class=\"form-selectgroup-input theme-choice\">\n                                    <div class=\"form-selectgroup-label p-0 border rounded\">\n                                        <div class=\"position-relative\">\n                                            <img src=\"{{ asset('screenshots/theme-coreuiv4.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"CoreUI v4 Theme\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                            <div class=\"position-absolute top-0 end-0 p-2\">\n                                                <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 20px; height: 20px; font-size: 12px;\"></span>\n                                            </div>\n                                        </div>\n                                        <div class=\"p-3\">\n                                            <div class=\"form-selectgroup-title fw-bold mb-1\">Core UI v4</div>\n                                            <small class=\"text-muted\">Bootstrap 5 • Legacy</small>\n                                        </div>\n                                    </div>\n                                </label>\n                            </div>\n                            <div class=\"col-lg-4 mb-3\">\n                                <label class=\"form-selectgroup-item cursor-pointer\">\n                                    <input @if(config('backpack.ui.view_namespace') === 'backpack.theme-coreuiv2::') checked @endif type=\"radio\" name=\"theme\" value=\"coreuiv2\" class=\"form-selectgroup-input theme-choice\">\n                                    <div class=\"form-selectgroup-label p-0 border rounded\">\n                                        <div class=\"position-relative\">\n                                            <img src=\"{{ asset('screenshots/theme-coreuiv2.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"CoreUI v2 Theme\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                            <div class=\"position-absolute top-0 end-0 p-2\">\n                                                <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 20px; height: 20px; font-size: 12px;\"></span>\n                                            </div>\n                                        </div>\n                                        <div class=\"p-3\">\n                                            <div class=\"form-selectgroup-title fw-bold mb-1\">Core UI v2</div>\n                                            <small class=\"text-muted\">Bootstrap 4 • Legacy</small>\n                                        </div>\n                                    </div>\n                                </label>\n                            </div>\n                        </div>\n\n                        <div id=\"tabler-layouts-selection\" class=\"mb-3\">\n                            <p>Tabler comes with a few layouts baked in - <strong>which layout would you like to use?</strong></p>\n                            <div class=\"row\">\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'horizontal') checked @endif type=\"radio\" name=\"layout\" value=\"horizontal\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_horizontal_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Horizontal Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Horizontal</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'horizontal_dark') checked @endif type=\"radio\" name=\"layout\" value=\"horizontal_dark\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_horizontal_dark_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Horizontal Dark Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Horizontal Dark</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'horizontal_overlap') checked @endif type=\"radio\" name=\"layout\" value=\"horizontal_overlap\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_horizontal_overlap_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Horizontal Overlap Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Horizontal Overlap</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'vertical') checked @endif type=\"radio\" name=\"layout\" value=\"vertical\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_vertical_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Vertical Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Vertical</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'vertical_dark') checked @endif type=\"radio\" name=\"layout\" value=\"vertical_dark\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_vertical_dark_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Vertical Dark Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Vertical Dark</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'vertical_transparent') checked @endif type=\"radio\" name=\"layout\" value=\"vertical_transparent\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_vertical_transparent_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Vertical Transparent Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Vertical Transparent</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'right_vertical') checked @endif type=\"radio\" name=\"layout\" value=\"right_vertical\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_right_vertical_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Right Vertical Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Right Vertical</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'right_vertical_dark') checked @endif type=\"radio\" name=\"layout\" value=\"right_vertical_dark\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_right_vertical_dark_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Right Vertical Dark Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Right Vertical Dark</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-4 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(backpack_theme_config('layout') === 'right_vertical_transparent') checked @endif type=\"radio\" name=\"layout\" value=\"right_vertical_transparent\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label p-0 border rounded\">\n                                            <div class=\"position-relative\">\n                                                <img src=\"{{ asset('screenshots/tabler_right_vertical_transparent_layout.jpg') }}\" class=\"img-fluid rounded-top\" alt=\"Right Vertical Transparent Layout\" style=\"height: 120px; width: 100%; object-fit: cover;\">\n                                                <div class=\"position-absolute top-0 end-0 p-1\">\n                                                    <span class=\"form-selectgroup-check bg-secondary text-white rounded-circle d-flex align-items-center justify-content-center\" style=\"width: 16px; height: 16px; font-size: 10px;\"></span>\n                                                </div>\n                                            </div>\n                                            <div class=\"p-2\">\n                                                <div class=\"form-selectgroup-title fw-bold small\">Right Vertical Transparent</div>\n                                            </div>\n                                        </div>\n                                    </label>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div id=\"tabler-direction-selection\" class=\"mb-3\">\n                            <p>Choose the text <strong>direction</strong> for your admin panel:</p>\n                            <div class=\"row\">\n                                <div class=\"col-lg-6 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(Session::get('backpack.ui.html_direction', config('backpack.ui.html_direction', 'ltr')) === 'ltr') checked @endif type=\"radio\" name=\"direction\" value=\"ltr\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label border rounded p-3\">\n                                            <div class=\"form-selectgroup-title fw-bold mb-1\">LTR</div>\n                                            <small class=\"text-muted\">Left to Right (Default)</small>\n                                        </div>\n                                    </label>\n                                </div>\n                                <div class=\"col-lg-6 col-md-6 mb-3\">\n                                    <label class=\"form-selectgroup-item cursor-pointer\">\n                                        <input @if(Session::get('backpack.ui.html_direction', config('backpack.ui.html_direction', 'ltr')) === 'rtl') checked @endif type=\"radio\" name=\"direction\" value=\"rtl\" class=\"form-selectgroup-input\">\n                                        <div class=\"form-selectgroup-label border rounded p-3\">\n                                            <div class=\"form-selectgroup-title fw-bold mb-1\">RTL</div>\n                                            <small class=\"text-muted\">Right to Left</small>\n                                        </div>\n                                    </label>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div id=\"tabler-styles-selection\" class=\"mb-3\">\n                            <p>Choose which <strong>skins</strong> to apply on top of the Tabler theme:</p>\n                            <div class=\"row\">\n                                @php\n                                    // Get styles from both the vendor config and published config\n                                    $vendorConfigFile = include(base_path('vendor/backpack/theme-tabler/config/theme-tabler.php'));\n                                    $vendorStyles = $vendorConfigFile['styles'] ?? [];\n\n                                    $publishedConfigFile = [];\n                                    if (file_exists(config_path('backpack/theme-tabler.php'))) {\n                                        $publishedConfigFile = include(config_path('backpack/theme-tabler.php'));\n                                    }\n                                    $publishedStyles = $publishedConfigFile['styles'] ?? [];\n\n                                    // Merge both, with published config taking precedence\n                                    $allAvailableStyles = array_unique(array_merge($vendorStyles, $publishedStyles));\n                                    $selectedStyles = Session::get('backpack.theme-tabler.styles', $allAvailableStyles);\n                                @endphp\n                                @foreach($allAvailableStyles as $stylePath)\n                                    @php\n                                        $fileName = basename($stylePath);\n                                        $styleName = ucwords(str_replace(['-', '_', '.css'], [' ', ' ', ''], $fileName));\n                                        if (strpos($stylePath, '/skins/') !== false) {\n                                            $styleName = ucwords(str_replace(['-', '_', '.css'], [' ', ' ', ''], basename($stylePath, '.css')));\n                                        }\n                                        $isChecked = in_array($stylePath, $selectedStyles);\n                                    @endphp\n                                    <div class=\"col-lg-6 col-md-6 mb-2\">\n                                        <label class=\"form-check\">\n                                            <input type=\"checkbox\" name=\"styles[]\" value=\"{{ $stylePath }}\" class=\"form-check-input\" @if($isChecked) checked @endif>\n                                            <span class=\"form-check-label\">{{ $styleName }}</span>\n                                        </label>\n                                    </div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"modal-footer\">\n                        <a href=\"#\" class=\"btn btn-link link-secondary\" data-dismiss=\"modal\" data-bs-dismiss=\"modal\">\n                            Cancel\n                        </a>\n                        <button class=\"btn btn-primary\" type=\"submit\"><i class=\"la la-check me-2\"></i>Apply layout</button>\n                    </div>\n                </div>\n            </form>\n        </div>\n    </div>\n@endsection\n\n@section('after_scripts')\n    <script>\n        const layoutSelection = $('#tabler-layouts-selection');\n        const stylesSelection = $('#tabler-styles-selection');\n\n        // Hide layout and styles selection initially if not using Tabler theme\n        @if(config('backpack.ui.view_namespace') !== 'backpack.theme-tabler::')\n        layoutSelection.hide();\n        stylesSelection.hide();\n        @endif\n\n        // Handle theme selection changes\n        $('.theme-choice').on('click', function () {\n            const selectedTheme = $(this).val();\n\n            if (selectedTheme === 'tabler') {\n                layoutSelection.slideDown();\n                stylesSelection.slideDown();\n                directionSelection.slideDown();\n            } else {\n                // Hide layout and styles options for CoreUI themes (coreuiv2, coreuiv4)\n                layoutSelection.slideUp();\n                stylesSelection.slideUp();\n                directionSelection.slideUp();\n            }\n        });\n\n        // Get direction selection element\n        const directionSelection = $('#tabler-direction-selection');\n\n        // Also handle the case when modal is opened - ensure correct initial state\n        $('#modal-layout').on('shown.bs.modal', function () {\n            const checkedTheme = $('.theme-choice:checked').val();\n            if (checkedTheme === 'tabler') {\n                layoutSelection.show();\n                stylesSelection.show();\n                directionSelection.show();\n            } else {\n                layoutSelection.hide();\n                stylesSelection.hide();\n                directionSelection.hide();\n            }\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/backpack/theme-tabler/layouts/partials/sidebar_shortcuts.blade.php",
    "content": "<div class=\"w-100 justify-content-center d-none d-lg-flex sidebar-shortcuts\">\n    @includeWhen(backpack_theme_config('options.showColorModeSwitcher'), backpack_view('layouts.partials.switch_theme'))\n    <button class=\"btn-link text-secondary nav-link px-0 shadow-none\" data-bs-toggle=\"modal\" data-bs-target=\"#modal-layout\">\n        <i class=\"la la-swatchbook fs-2 me-1\"></i>\n    </button>\n</div>\n"
  },
  {
    "path": "resources/views/vendor/backpack/ui/inc/menu_items.blade.php",
    "content": "{{-- This file is used for menu items by any Backpack v6 theme --}}\n\n<x-backpack::menu-item title=\"Dashboard\" icon=\"la la-dashboard\" :link=\"backpack_url('dashboard')\" data-pan=\"menu-item-dashboard\" />\n<x-backpack::menu-item title=\"New in v7\" icon=\"la la-exclamation-circle\" :link=\"backpack_url('new-in-v7')\"  data-pan=\"menu-item-new-in-v7\" />\n\n@includeWhen(class_exists(\\Backpack\\DevTools\\DevToolsServiceProvider::class), 'backpack.devtools::buttons.sidebar_item')\n\n{{-- Addons --}}\n<x-backpack::menu-dropdown title=\"Add-ons\" icon=\"la la-puzzle-piece\" data-pan=\"menu-item-addons\">\n    <x-backpack::menu-dropdown title=\"News\" icon=\"la la-newspaper-o\" nested=\"true\" data-pan=\"menu-item-news\">\n        <x-backpack::menu-dropdown-item title=\"Articles\" icon=\"la la-newspaper-o\" :link=\"backpack_url('article')\" data-pan=\"menu-item-articles\" />\n        <x-backpack::menu-dropdown-item title=\"Categories\" icon=\"la la-list\" :link=\"backpack_url('category')\" data-pan=\"menu-item-categories\" />\n        <x-backpack::menu-dropdown-item title=\"Tags\" icon=\"la la-tag\" :link=\"backpack_url('tag')\" data-pan=\"menu-item-tags\" />\n    </x-backpack::menu-dropdown>\n\n    <x-backpack::menu-dropdown title=\"Authentication\" icon=\"la la-user\" nested=\"true\" data-pan=\"menu-item-auth\">\n        <x-backpack::menu-dropdown-item title=\"Users\" icon=\"la la-user\" :link=\"backpack_url('user')\" data-pan=\"menu-item-users\" />\n        <x-backpack::menu-dropdown-item title=\"Roles\" icon=\"la la-group\" :link=\"backpack_url('role')\" data-pan=\"menu-item-roles\" />\n        <x-backpack::menu-dropdown-item title=\"Permissions\" icon=\"la la-key\" :link=\"backpack_url('permission')\" data-pan=\"menu-item-permissions\" />\n    </x-backpack::menu-dropdown>\n\n    <x-backpack::menu-dropdown-item title=\"File Manager\" icon=\"la la-files-o\" :link=\"backpack_url('elfinder')\" data-pan=\"menu-item-filemanager\" />\n    <x-backpack::menu-dropdown-item title=\"Activity Logs\" icon=\"la la-stream\" :link=\"backpack_url('activity-log')\" data-pan=\"menu-item-activity-log\" />\n    <x-backpack::menu-dropdown-item title=\"Translation Manager\" icon=\"la la-language\" :link=\"backpack_url('translation-manager')\" data-pan=\"menu-item-translation-manager\" />\n    <x-backpack::menu-dropdown-item title=\"Meetings (Calendar Operation)\" icon=\"la la-calendar\" :link=\"backpack_url('meeting')\" data-pan=\"menu-item-calendar-operation\" />\n    <x-backpack::menu-dropdown-item title=\"Backups\" icon=\"la la-hdd-o\" :link=\"backpack_url('backup')\" data-pan=\"menu-item-backup-manager\" />\n    <x-backpack::menu-dropdown-item title=\"Logs\" icon=\"la la-terminal\" :link=\"backpack_url('log')\" data-pan=\"menu-item-log-manager\" />\n    <x-backpack::menu-dropdown-item title=\"Settings\" icon=\"la la-cog\" :link=\"backpack_url('setting')\" data-pan=\"menu-item-settings\" />\n    <x-backpack::menu-dropdown-item title=\"Pages\" icon=\"la la-file-o\" :link=\"backpack_url('page')\" data-pan=\"menu-item-page-manager\" />\n    <x-backpack::menu-dropdown-item title=\"Menu\" icon=\"la la-list\" :link=\"backpack_url('menu-item')\" data-pan=\"menu-item-menu-manager\" />\n    <x-backpack::menu-dropdown-item title=\"Analytics\" icon=\"la la-chart-bar\" :link=\"backpack_url(config('backpack.pan.panel_route_prefix'))\" data-pan=\"menu-item-analytics\" />\n</x-backpack::menu-dropdown>\n\n<x-backpack::menu-separator title=\"Example CRUDs\" />\n\n{{-- Pets --}}\n<x-backpack::menu-dropdown title=\"Pet Shop\" icon=\"la la-store-alt\" data-pan=\"menu-item-petshop\">\n    <x-backpack::menu-dropdown-item title=\"Invoices\" icon=\"la la-file-text\" :link=\"backpack_url('pet-shop/invoice')\" data-pan=\"menu-item-invoices\" />\n    <x-backpack::menu-dropdown-item title=\"Owners\" icon=\"la la-user\" :link=\"backpack_url('pet-shop/owner')\" data-pan=\"menu-item-owners\" />\n    <x-backpack::menu-dropdown-item title=\"Pets\" icon=\"la la-dog\" :link=\"backpack_url('pet-shop/pet')\" data-pan=\"menu-item-pets\" />\n    <x-backpack::menu-dropdown-item title=\"Badges\" icon=\"la la-certificate\" :link=\"backpack_url('pet-shop/badge')\" data-pan=\"menu-item-badges\" />\n    <x-backpack::menu-dropdown-item title=\"Skills\" icon=\"la la-ribbon\" :link=\"backpack_url('pet-shop/skill')\" data-pan=\"menu-item-dogs\" />\n    <x-backpack::menu-dropdown-item title=\"Comments\" icon=\"la la-comment\" :link=\"backpack_url('pet-shop/comment')\" data-pan=\"menu-item-comments\" />\n\n    <x-backpack::menu-dropdown-header title=\"Info\" />\n    <x-backpack::menu-dropdown-item title=\"About\" icon=\"la la-question\" :link=\"backpack_url('pet-shop/about')\" data-pan=\"menu-item-about\" />\n</x-backpack::menu-dropdown>\n\n{{-- Monsters --}}\n<x-backpack::menu-dropdown title=\"Crazy Stuff\" icon=\"la la-skull-crossbones\">\n    <x-backpack::menu-dropdown-item title=\"Monsters\" icon=\"la la-optin-monster\" :link=\"backpack_url('monster')\" data-pan=\"menu-item-mosters\"  />\n    <x-backpack::menu-dropdown-item title=\"Caves\" icon=\"la la-dungeon\" :link=\"backpack_url('cave')\" data-pan=\"menu-item-caves\"  />\n    <x-backpack::menu-dropdown-item title=\"Stories\" icon=\"la la-book\" :link=\"backpack_url('story')\" data-pan=\"menu-item-stories\" />\n    <x-backpack::menu-dropdown-item title=\"Icons\" icon=\"la la-info-circle\" :link=\"backpack_url('icon')\" data-pan=\"menu-item-icons\" />\n    <x-backpack::menu-dropdown-item title=\"Products\" icon=\"la la-shopping-cart\" :link=\"backpack_url('product')\" data-pan=\"menu-item-products\" />\n    <x-backpack::menu-dropdown-item title=\"Fluent Monsters\" icon=\"la la-pastafarianism\"\n        :link=\"backpack_url('fluent-monster')\" data-pan=\"menu-item-fluent-monsters\" />\n    <x-backpack::menu-dropdown-item title=\"Field Monsters\" icon=\"la la-list-alt\"\n        :link=\"backpack_url('field-monster')\" data-pan=\"menu-item-field-monsters\" />\n    <x-backpack::menu-dropdown-item title=\"Editable Monsters\" icon=\"la la-spell-check\"\n        :link=\"backpack_url('editable-monster')\" data-pan=\"menu-item-editable-monsters\" />\n    <x-backpack::menu-dropdown-item title=\"Dummies\" icon=\"la la-poo\" :link=\"backpack_url('dummy')\" data-pan=\"menu-item-dummies\" />\n</x-backpack::menu-dropdown>\n"
  },
  {
    "path": "resources/views/welcome.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ str_replace('_', '-', app()->getLocale()) }}\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n        <title>Backpack for Laravel</title>\n\n        <!-- Fonts -->\n        <link href=\"https://fonts.googleapis.com/css?family=Nunito:200,600\" rel=\"stylesheet\">\n\n        <!-- Styles -->\n        <style>\n            html, body {\n                background-color: #fff;\n                color: #636b6f;\n                font-family: 'Nunito', sans-serif;\n                font-weight: 200;\n                height: 100vh;\n                margin: 0;\n            }\n            .full-height {\n                height: 100vh;\n            }\n            .flex-center {\n                align-items: center;\n                display: flex;\n                justify-content: center;\n            }\n            .position-ref {\n                position: relative;\n            }\n            .top-right {\n                position: absolute;\n                right: 10px;\n                top: 18px;\n            }\n            .content {\n                text-align: center;\n            }\n            .title {\n                font-size: 84px;\n                color: #467fd0;\n            }\n            .links > a {\n                color: #636b6f;\n                padding: 0 25px;\n                font-size: 13px;\n                font-weight: 600;\n                letter-spacing: .1rem;\n                text-decoration: none;\n                text-transform: uppercase;\n            }\n            .m-b-md {\n                margin-bottom: 30px;\n            }\n            .m-t-lg {\n                margin-top: 60px;\n            }\n            a:hover {\n                color: #7C69EF;\n            }\n        </style>\n\n        {{-- Plausibile.io analytics, proxied through a CloudFlare Worker --}}\n        <script defer data-domain=\"demo.backpackforlaravel.com\" src=\"https://sweet-surf-fd04.dhcfw.workers.dev/js/script.js\"></script>\n    </head>\n    <body data-pan=\"welcome-page\">\n        <div class=\"flex-center position-ref full-height\">\n            @if (Route::has('login'))\n                <div class=\"top-right links\">\n                    @auth\n                        <a href=\"{{ url('/home') }}\" data-pan=\"welcome-home-link\">Home</a>\n                    @else\n                        <a href=\"{{ route('login') }}\" data-pan=\"welcome-login-link\">>Login</a>\n\n                        @if (Route::has('register'))\n                            <a href=\"{{ route('register') }}\" data-pan=\"welcome-register-link\">Register</a>\n                        @endif\n                    @endauth\n                </div>\n            @endif\n\n            <div class=\"content\">\n                <div class=\"title m-b-md\">\n                    <img src=\"https://backpackforlaravel.com/presentation/img/backpack/logos/backpack_logomark.svg\" width=\"160px\" alt=\"Backpack for Laravel\">\n                </div>\n\n                <div class=\"links\">\n                    <a href=\"{{ backpack_url() }}\" data-pan=\"welcome-login-link\">Login</a>\n                    <a target=\"_blank\" href=\"https://backpackforlaravel.com/docs\" data-pan=\"welcome-docs-link\">Docs</a>\n                    <a target=\"_blank\" href=\"https://github.com/laravel-backpack/crud\" data-pan=\"welcome-github-link\">GitHub</a>\n                    <a target=\"_blank\" href=\"https://backpackforlaravel.com/contact\" data-pan=\"welcome-contact-link\">Contact</a>\n                </div>\n\n                <div class=\"m-t-lg\">\n                    * No front-end pages are provided in this demo. Only the admin panel.\n                </div>\n            </div>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "routes/api.php",
    "content": "<?php\n\nuse Illuminate\\Http\\Request;\n\n/*\n|--------------------------------------------------------------------------\n| API Routes\n|--------------------------------------------------------------------------\n|\n| Here is where you can register API routes for your application. These\n| routes are loaded by the RouteServiceProvider within a group which\n| is assigned the \"api\" middleware group. Enjoy building your API!\n|\n*/\n\nRoute::get('/user', function (Request $request) {\n    return $request->user();\n})->middleware('auth:api');\n"
  },
  {
    "path": "routes/backpack/custom.php",
    "content": "<?php\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Redirect;\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Support\\Facades\\Session;\nuse Prologue\\Alerts\\Facades\\Alert;\n\n// --------------------------\n// Custom Backpack Routes\n// --------------------------\n// This route file is loaded automatically by Backpack\\Base.\n// Routes you generate using Backpack\\Generators will be placed here.\n\nRoute::post('api/article', 'App\\Http\\Controllers\\Api\\ArticleController@index');\nRoute::post('api/article-search', 'App\\Http\\Controllers\\Api\\ArticleController@search');\n\nRoute::group([\n    'prefix'     => config('backpack.base.route_prefix', 'admin'),\n    'middleware' => ['web', config('backpack.base.middleware_key', 'admin')],\n    'namespace'  => 'App\\Http\\Controllers\\Admin',\n], function () { // custom admin routes\n    // ------------\n    // Custom Pages\n    // ------------\n    Route::get('new-in-v7', 'AdminPageController@newInV7')->name('new-in-v7');\n\n    // ----------------\n    // Monsters & Stuff\n    // ----------------\n    Route::crud('monster', 'MonsterCrudController');\n    Route::crud('hero', 'HeroCrudController');\n    Route::crud('story', 'StoryCrudController');\n    Route::crud('cave', 'CaveCrudController');\n\n    // ----------------\n    // Other entities\n    // ----------------\n    Route::crud('column-monster', 'ColumnMonsterCrudController');\n    Route::crud('fluent-monster', 'FluentMonsterCrudController');\n    Route::crud('field-monster', 'FieldMonsterCrudController');\n    Route::crud('editable-monster', 'EditableMonsterCrudController');\n    Route::crud('icon', 'IconCrudController');\n    Route::crud('product', 'ProductCrudController');\n    Route::crud('dummy', 'DummyCrudController');\n    Route::crud('meeting', 'MeetingCrudController');\n\n    // Allow demo users to switch between available themes and layouts\n    Route::post('switch-layout', function (Request $request) {\n        $theme = 'backpack.theme-'.$request->get('theme', 'tabler').'::';\n\n        // if the theme has changed, let's show a success message\n        if (Session::get('backpack.ui.view_namespace') !== $theme) {\n            Alert::success('Now using theme: '.$request->get('theme', 'tabler'))->flash();\n        }\n\n        Session::put('backpack.ui.view_namespace', $theme);\n\n        if ($theme === 'backpack.theme-tabler::') {\n            // if the layout has changed, let's show a success message\n            if (Session::get('backpack.theme-tabler.layout') !== $request->get('layout', 'horizontal')) {\n                Alert::success('Now using layout: '.$request->get('layout', 'horizontal'))->flash();\n            }\n\n            Session::put('backpack.theme-tabler.layout', $request->get('layout', 'horizontal'));\n\n            // Handle styles selection\n            $selectedStyles = $request->get('styles', []);\n            $currentStyles = Session::get('backpack.theme-tabler.styles', []);\n\n            // Only show success message if styles have actually changed\n            if ($selectedStyles !== $currentStyles) {\n                $styleCount = count($selectedStyles);\n                Alert::success(\"Applied {$styleCount} style(s)\")->flash();\n            }\n\n            // Handle direction selection\n            if ($request->has('direction')) {\n                $direction = $request->get('direction', 'ltr');\n                // if the direction has changed, let's show a success message\n                if (Session::get('backpack.ui.html_direction') !== $direction) {\n                    Alert::success('Now using direction: '.$direction)->flash();\n                }\n                Session::put('backpack.ui.html_direction', $direction);\n            }\n\n            Session::put('backpack.theme-tabler.styles', $selectedStyles);\n        }\n\n        return Redirect::back();\n    })->name('tabler.switch.layout');\n\n    // ------------------\n    // AJAX Chart Widgets\n    // ------------------\n    Route::get('charts/users', 'Charts\\LatestUsersChartController@response');\n    Route::get('charts/new-entries', 'Charts\\NewEntriesChartController@response');\n\n    // ---------------------------\n    // Backpack DEMO Custom Routes\n    // Prevent people from doing nasty stuff in the online demo\n    // ---------------------------\n    if (app('env') == 'production') {\n        // disable delete and bulk delete for all CRUDs\n        $cruds = ['article', 'category', 'tag', 'monster', 'icon', 'product', 'page', 'menu-item', 'user', 'role', 'permission', 'hero', 'story', 'cave', 'owner', 'invoice', 'pet', 'passport', 'skill', 'comment', 'badge'];\n        foreach ($cruds as $name) {\n            Route::delete($name.'/{id}', function () {\n                return false;\n            });\n            Route::post($name.'/bulk-delete', function () {\n                return false;\n            });\n        }\n    }\n    Route::group([\n        'prefix'    => 'pet-shop',\n        'namespace' => 'PetShop',\n    ], function () {\n        Route::get('about', function () {\n            return view('admin.petshop_about');\n        });\n        Route::crud('invoice', 'InvoiceCrudController');\n        Route::crud('pet', 'PetCrudController');\n        Route::crud('passport', 'PassportCrudController');\n        Route::crud('skill', 'SkillCrudController');\n        Route::crud('comment', 'CommentCrudController');\n        Route::crud('badge', 'BadgeCrudController');\n        Route::crud('owner', 'OwnerCrudController');\n        // nested crud panel for owner pets\n        Route::group(['prefix' => 'owner/{owner}'], function () {\n            Route::crud('pets', 'OwnerPetsCrudController');\n        });\n    });\n}); // this should be the absolute last line of this file\n"
  },
  {
    "path": "routes/backpack/permissionmanager.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Backpack\\PermissionManager Routes\n|--------------------------------------------------------------------------\n|\n| This file is where you may define all of the routes that are\n| handled by the Backpack\\PermissionManager package.\n|\n*/\n\nRoute::group([\n    'namespace'  => 'Backpack\\PermissionManager\\app\\Http\\Controllers',\n    'prefix'     => config('backpack.base.route_prefix', 'admin'),\n    'middleware' => ['web', backpack_middleware()],\n], function () {\n    Route::crud('permission', 'PermissionCrudController');\n    Route::crud('role', 'RoleCrudController');\n    Route::crud('user', 'UserCrudController');\n\n    if (app('env') == 'production') {\n        // disable delete and bulk delete for all CRUDs\n        $cruds = ['user', 'role', 'permission'];\n        foreach ($cruds as $name) {\n            Route::delete($name.'/{id}', function () {\n                return false;\n            });\n            Route::post($name.'/bulk-delete', function () {\n                return false;\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "routes/console.php",
    "content": "<?php\n\nuse Illuminate\\Foundation\\Inspiring;\n\n/*\n|--------------------------------------------------------------------------\n| Console Routes\n|--------------------------------------------------------------------------\n|\n| This file is where you may define all of your Closure based console\n| commands. Each Closure is bound to a command instance allowing a\n| simple approach to interacting with each command's IO methods.\n|\n*/\n\nArtisan::command('inspire', function () {\n    $this->comment(Inspiring::quote());\n});\n"
  },
  {
    "path": "routes/web.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Web Routes\n|--------------------------------------------------------------------------\n|\n| This file is where you may define all of the routes that are handled\n| by your application. Just tell Laravel the URIs it should respond\n| to using a Closure or controller method. Build something great!\n|\n*/\n\nRoute::get('/', function () {\n    return view('welcome');\n});\n"
  },
  {
    "path": "start.sh",
    "content": "##!/usr/bin/env bash\n\ndocker compose up  --remove-orphans \\\n\"${args[@]}\"\n"
  },
  {
    "path": "storage/app/.gitignore",
    "content": "*\n!public/\n!.gitignore\n"
  },
  {
    "path": "storage/clockwork/.gitignore",
    "content": "*.json\nindex\n"
  },
  {
    "path": "storage/debugbar/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/.gitignore",
    "content": "config.php\nroutes.php\nschedule-*\ncompiled.php\nservices.json\nevents.scanned.php\nroutes.scanned.php\ndown\n"
  },
  {
    "path": "storage/framework/cache/.gitignore",
    "content": "*\n!data/\n!.gitignore\n"
  },
  {
    "path": "storage/framework/sessions/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/views/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/logs/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "tests/Feature/Admin/CaveCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\CaveCrudController;\nuse App\\Models\\Cave;\n\nclass CaveCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = CaveCrudController::class;\n    public string $model = Cave::class;\n    public string $route = 'cave';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/ColumnMonsterCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\ColumnMonsterCrudController;\n\nclass ColumnMonsterCrudControllerTest extends MonsterCrudControllerTest\n{\n    public string $controller = ColumnMonsterCrudController::class;\n    public string $route = 'column-monster';\n}\n"
  },
  {
    "path": "tests/Feature/Admin/DummyCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\DummyCrudController;\nuse App\\Models\\Dummy;\n\nclass DummyCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = DummyCrudController::class;\n    public string $model = Dummy::class;\n    public string $route = 'dummy';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/EditableMonsterCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\EditableMonsterCrudController;\n\nclass EditableMonsterCrudControllerTest extends MonsterCrudControllerTest\n{\n    public string $controller = EditableMonsterCrudController::class;\n    public string $route = 'editable-monster';\n}\n"
  },
  {
    "path": "tests/Feature/Admin/FieldMonsterCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\FieldMonsterCrudController;\n\nclass FieldMonsterCrudControllerTest extends MonsterCrudControllerTest\n{\n    public string $controller = FieldMonsterCrudController::class;\n    public string $route = 'field-monster';\n}\n"
  },
  {
    "path": "tests/Feature/Admin/FluentMonsterCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\FluentMonsterCrudController;\n\nclass FluentMonsterCrudControllerTest extends MonsterCrudControllerTest\n{\n    public string $controller = FluentMonsterCrudController::class;\n    public string $route = 'fluent-monster';\n}\n"
  },
  {
    "path": "tests/Feature/Admin/HeroCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\HeroCrudController;\nuse App\\Models\\Hero;\n\nclass HeroCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = HeroCrudController::class;\n    public string $model = Hero::class;\n    public string $route = 'hero';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/IconCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\IconCrudController;\nuse App\\Models\\Icon;\n\nclass IconCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n\n    public string $controller = IconCrudController::class;\n    public string $model = Icon::class;\n    public string $route = 'icon';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/MeetingCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\MeetingCrudController;\nuse App\\Models\\Meeting;\n\nclass MeetingCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = MeetingCrudController::class;\n    public string $model = Meeting::class;\n    public string $route = 'meeting';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/MonsterCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\MonsterCrudController;\nuse App\\Models\\Monster;\n\nclass MonsterCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = MonsterCrudController::class;\n    public string $model = Monster::class;\n    public string $route = 'monster';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n\n    public function setup(): void\n    {\n        parent::setUp();\n\n        $this->createInput = array_merge($this->model::factory()->make()->toArray(), [\n            'icondummy' => 1,\n        ]);\n\n        $this->assertCreateInput = array_merge($this->testHelper->getDatabaseAssertInput($this->model, $this->createInput), [\n            'belongs_to_non_nullable' => 1,\n        ]);\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Admin/PetShop/BadgeCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin\\PetShop;\n\nuse App\\Http\\Controllers\\Admin\\PetShop\\BadgeCrudController;\nuse App\\Models\\PetShop\\Badge;\n\nclass BadgeCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = BadgeCrudController::class;\n    public string $model = Badge::class;\n    public string $route = 'pet-shop/badge';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/PetShop/CommentCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin\\PetShop;\n\nuse App\\Http\\Controllers\\Admin\\PetShop\\CommentCrudController;\nuse App\\Models\\PetShop\\Comment;\n\nclass CommentCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = CommentCrudController::class;\n    public string $model = Comment::class;\n    public string $route = 'pet-shop/comment';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/PetShop/InvoiceCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin\\PetShop;\n\nuse App\\Http\\Controllers\\Admin\\PetShop\\InvoiceCrudController;\nuse App\\Models\\PetShop\\Invoice;\n\nclass InvoiceCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = InvoiceCrudController::class;\n    public string $model = Invoice::class;\n    public string $route = 'pet-shop/invoice';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/PetShop/OwnerCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin\\PetShop;\n\nuse App\\Http\\Controllers\\Admin\\PetShop\\OwnerCrudController;\nuse App\\Models\\PetShop\\Owner;\n\nclass OwnerCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = OwnerCrudController::class;\n    public string $model = Owner::class;\n    public string $route = 'pet-shop/owner';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n\n    public function setup(): void\n    {\n        parent::setUp();\n\n        $this->createInput = $this->updateInput = array_merge($this->model::factory()->make()->toArray(), [\n            'avatar' => [\n                'url' => 'https://lorempixel.com/400/200/animals',\n            ],\n        ]);\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Admin/PetShop/OwnerPetsCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin\\PetShop;\n\nuse App\\Http\\Controllers\\Admin\\PetShop\\OwnerPetsCrudController;\n\nclass OwnerPetsCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests {\n        test_show_page_loads_successfully as default_test_show_page_loads_successfully;\n    }\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests {\n        test_update_page_loads_successfully as default_test_update_page_loads_successfully;\n    }\n\n    public string $controller = OwnerPetsCrudController::class;\n    public string $route = 'pet-shop/owner/1/pets';\n    public string $model = \\App\\Models\\PetShop\\Pet::class;\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = ['owner' => 1];\n\n    public function setup(): void\n    {\n        parent::setUp();\n\n        $this->createInput = $this->updateInput = array_merge($this->model::factory()->make()->toArray(), [\n            'avatar' => [\n                'url' => 'https://lorempixel.com/400/200/animals',\n            ],\n        ]);\n\n        \\App\\Models\\PetShop\\Owner::factory()->create(['id' => 1]); // create an owner with id 1\n    }\n\n    /**\n     * Test logic for update operation.\n     */\n    public function test_update_page_loads_successfully(): void\n    {\n        $this->skipIfModelDoesNotHaveFactory();\n\n        $entry = $this->model::factory()->create();\n\n        $entry->owners()->attach(1, ['role' => 'Owner']); // attach the pet to the owner with id 1\n        $entry->save();\n\n        $response = $this->get($this->testHelper->getCrudUrl($entry->getKey().'/edit'));\n        $response->assertStatus(200);\n        $response->assertSee($this->entityName ?? '');\n    }\n\n    /**\n     * Test logic for show operation.\n     */\n    public function test_show_page_loads_successfully(): void\n    {\n        $this->skipIfModelDoesNotHaveFactory();\n\n        $entry = $this->model::factory()->create();\n\n        $entry->owners()->attach(1, ['role' => 'Owner']); // attach the pet to the owner with id 1\n        $entry->save();\n\n        $response = $this->get($this->testHelper->getCrudUrl($entry->getKey().'/show'));\n        $response->assertStatus(200);\n        $response->assertSee($this->entityName ?? '');\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Admin/PetShop/PassportCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin\\PetShop;\n\nuse App\\Http\\Controllers\\Admin\\PetShop\\PassportCrudController;\nuse App\\Models\\PetShop\\Passport;\n\nclass PassportCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = PassportCrudController::class;\n    public string $model = Passport::class;\n    public string $route = 'pet-shop/passport';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n\n    public function setup(): void\n    {\n        parent::setUp();\n\n        $this->createInput = $this->updateInput = array_merge($this->model::factory()->make()->toArray(), [\n            'pet' => 1,\n        ]);\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Admin/PetShop/PetCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin\\PetShop;\n\nuse App\\Http\\Controllers\\Admin\\PetShop\\PetCrudController;\nuse App\\Models\\PetShop\\Pet;\n\nclass PetCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = PetCrudController::class;\n    public string $model = Pet::class;\n    public string $route = 'pet-shop/pet';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n\n    public function setup(): void\n    {\n        parent::setUp();\n\n        $this->createInput = $this->updateInput = array_merge($this->model::factory()->make()->toArray(), [\n            'avatar' => [\n                'url' => 'https://lorempixel.com/400/200/animals',\n            ],\n        ]);\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Admin/PetShop/SkillCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin\\PetShop;\n\nuse App\\Http\\Controllers\\Admin\\PetShop\\SkillCrudController;\nuse App\\Models\\PetShop\\Skill;\n\nclass SkillCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = SkillCrudController::class;\n    public string $model = Skill::class;\n    public string $route = 'pet-shop/skill';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/ProductCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\ProductCrudController;\nuse App\\Models\\Product;\n\nclass ProductCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n\n    public string $controller = ProductCrudController::class;\n    public string $model = Product::class;\n    public string $route = 'product';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/StoryCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\StoryCrudController;\nuse App\\Models\\Story;\n\nclass StoryCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = StoryCrudController::class;\n    public string $model = Story::class;\n    public string $route = 'story';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n}\n"
  },
  {
    "path": "tests/Feature/Admin/UserCrudControllerTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Admin;\n\nuse App\\Http\\Controllers\\Admin\\UserCrudController;\nuse App\\User;\n\nclass UserCrudControllerTest extends \\Tests\\Feature\\Backpack\\DefaultTestBase\n{\n    use \\Tests\\Feature\\Backpack\\DefaultListTests;\n    use \\Tests\\Feature\\Backpack\\DefaultCreateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultUpdateTests;\n    use \\Tests\\Feature\\Backpack\\DefaultDeleteTests;\n    use \\Tests\\Feature\\Backpack\\DefaultShowTests;\n\n    public string $controller = UserCrudController::class;\n    public string $model = User::class;\n    public string $route = 'user';\n    // Pass additional parameters to controller routes. eg. ['owner' => 1]\n    public array $routeParameters = [];\n\n    public function setup(): void\n    {\n        parent::setUp();\n\n        $user = $this->model::factory()->raw();\n        $this->createInput = $this->updateInput = array_merge($user, ['password_confirmation' => $user['password']]);\n\n        $assertion = $this->testHelper->getDatabaseAssertInput($this->model, $this->createInput);\n        unset($assertion['password']);\n        unset($assertion['password_confirmation']);\n\n        $this->assertCreateInput = $this->assertUpdateInput = $assertion;\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Backpack/DefaultCreateTests.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Backpack;\n\ntrait DefaultCreateTests\n{\n    public ?array $createInput = null;\n\n    public ?array $assertCreateInput = null;\n\n    /**\n     * Test that the create page loads without errors.\n     */\n    public function test_create_page_loads_successfully(): void\n    {\n        $response = $this->get($this->testHelper->getCrudUrl('create'));\n        $response->assertStatus(200);\n\n        $fields = $this->testHelper->getOperationSetting('fields', [], 'create');\n        foreach ($fields as $field) {\n            $response->assertSee('name=\"'.$field['name'].'\"', false);\n        }\n    }\n\n    /**\n     * Test that entry is added to the database.\n     */\n    public function test_create_endpoint_adds_entry_to_database(): void\n    {\n        $this->skipIfModelDoesNotHaveFactory();\n\n        $data = $this->createInput ?? $this->model::factory()->raw();\n\n        $response = $this->post($this->testHelper->getCrudUrl(), $data);\n        $response->assertSessionHasNoErrors();\n        $response->assertStatus(302);\n\n        $this->assertDatabaseHasModel($this->model, $this->assertCreateInput ?? $this->testHelper->getDatabaseAssertInput($this->model, $data));\n    }\n\n    /**\n     * Test that the create form validates wrong form data.\n     */\n    public function test_create_endpoint_rejects_invalid_input(): void\n    {\n        $response = $this->post($this->testHelper->getCrudUrl(), []);\n        $response->assertStatus(302);\n        $response->assertSessionHasErrors();\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Backpack/DefaultDeleteTests.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Backpack;\n\ntrait DefaultDeleteTests\n{\n    /**\n     * Test logic for deleting an entry.\n     */\n    public function test_delete_endpoint_removes_entry_from_database(): void\n    {\n        $this->skipIfModelDoesNotHaveFactory();\n\n        $entry = $this->model::factory()->create();\n\n        $response = $this->delete($this->testHelper->getCrudUrl($entry->getKey()));\n        $response->assertStatus(200);\n\n        if ($this->testHelper->modelUsesSoftDeletes()) {\n            $this->assertSoftDeleted($entry);\n        } else {\n            $this->assertDatabaseMissing($this->model, [$entry->getKeyName() => $entry->getKey()]);\n        }\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Backpack/DefaultListTests.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Backpack;\n\ntrait DefaultListTests\n{\n    /**\n     * Test logic for list operation.\n     */\n    public function test_list_page_loads_successfully(): void\n    {\n        $response = $this->get($this->testHelper->getCrudUrl());\n        $response->assertStatus(200);\n    }\n\n    public function test_datatables_returns_compatible_data(): void\n    {\n        $this->skipIfModelDoesNotHaveFactory();\n\n        $response = $this->post($this->testHelper->getCrudUrl('search'));\n        $response->assertStatus(200);\n        $response->assertJsonStructure([\n            'draw',\n            'recordsTotal',\n            'recordsFiltered',\n            'data',\n        ]);\n    }\n\n    /**\n     * Test that filters are on page.\n     */\n    public function test_filters_are_on_page(): void\n    {\n        $filters = $this->testHelper->getOperationSetting('filters', [], 'list');\n\n        if (count($filters) > 0) {\n            $response = $this->get($this->testHelper->getCrudUrl());\n            $response->assertStatus(200);\n\n            foreach ($filters as $filter) {\n                $response->assertSee('filter-name=\"'.$filter->name.'\"', false);\n            }\n        } else {\n            $this->assertTrue(true);\n        }\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Backpack/DefaultShowTests.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Backpack;\n\ntrait DefaultShowTests\n{\n    /**\n     * Test logic for show operation.\n     */\n    public function test_show_page_loads_successfully(): void\n    {\n        $this->skipIfModelDoesNotHaveFactory();\n\n        $entry = $this->model::factory()->create();\n\n        $response = $this->get($this->testHelper->getCrudUrl($entry->getKey().'/show'));\n        $response->assertStatus(200);\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Backpack/DefaultTestBase.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Backpack;\n\nuse Backpack\\TestGenerators\\CrudFeatureTestCase;\n\nabstract class DefaultTestBase extends CrudFeatureTestCase\n{\n    use \\Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\n    protected function setUp(): void\n    {\n        $this->afterApplicationCreated(function () {\n            $userModel = config('backpack.base.user_model_fqn', 'App\\Models\\User');\n            $user = $userModel::find(1) ?? $userModel::factory()->create();\n            $guard = config('backpack.base.guard') ?? config('auth.defaults.guard');\n            $this->actingAs($user, $guard);\n        });\n\n        parent::setUp();\n    }\n}\n"
  },
  {
    "path": "tests/Feature/Backpack/DefaultUpdateTests.php",
    "content": "<?php\n\nnamespace Tests\\Feature\\Backpack;\n\ntrait DefaultUpdateTests\n{\n    public ?array $updateInput = null;\n\n    public ?array $assertUpdateInput = null;\n\n    /**\n     * Test that the update page loads without errors.\n     */\n    public function test_update_page_loads_successfully(): void\n    {\n        $this->skipIfModelDoesNotHaveFactory();\n\n        $entry = $this->model::factory()->create();\n\n        $response = $this->get($this->testHelper->getCrudUrl($entry->getKey().'/edit'));\n        $response->assertStatus(200);\n\n        $fields = $this->testHelper->getOperationSetting('fields', [], 'update');\n        foreach ($fields as $field) {\n            $response->assertSee('name=\"'.$field['name'].'\"', false);\n        }\n    }\n\n    /**\n     * Test that entry is updated in the database.\n     */\n    public function test_update_endpoint_modifies_entry_in_database(): void\n    {\n        $this->skipIfModelDoesNotHaveFactory();\n\n        $entry = $this->model::factory()->create();\n        $data = $this->updateInput ?? $this->model::factory()->raw();\n\n        $data = array_merge($data, [\n            $entry->getKeyName() => $entry->getKey(),\n        ]);\n\n        $response = $this->put($this->testHelper->getCrudUrl($entry->getKey()), $data);\n        $response->assertSessionHasNoErrors();\n        $response->assertStatus(302);\n\n        $this->assertDatabaseHasModel($this->model, $this->assertUpdateInput ?? $this->testHelper->getDatabaseAssertInput($this->model, $data));\n    }\n}\n"
  },
  {
    "path": "vite.config.js",
    "content": "import { defineConfig } from 'vite';\nimport laravel from 'laravel-vite-plugin';\n\nexport default defineConfig({\n    plugins: [\n        laravel({\n            input: ['resources/css/app.css', 'resources/js/app.js'],\n            refresh: true,\n        }),\n    ],\n});"
  }
]