├── .php_cs.dist.php ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── composer.json ├── config └── blanket.php ├── database ├── factories │ └── LogFactory.php └── migrations │ └── create_blanket_logs_table.php ├── public ├── css │ ├── app.css │ └── chunk-vendors.css ├── favicon.ico ├── fonts │ ├── boxicons.eot │ ├── boxicons.ttf │ ├── boxicons.woff │ └── boxicons.woff2 ├── img │ ├── boxicons.svg │ ├── logo-dark.png │ └── logo-light.png ├── index.html └── js │ ├── app.js │ ├── app.js.map │ ├── chunk-vendors.js │ └── chunk-vendors.js.map ├── resources └── views │ └── show.blade.php ├── routes └── api.php ├── screenshot-dark.png ├── screenshot-light.png └── src ├── BlanketServiceProvider.php ├── Console └── InstallCommand.php ├── Http ├── Controllers │ ├── FilterHostController.php │ ├── LogController.php │ ├── RetryLogController.php │ ├── TruncateLogController.php │ └── ViewLogController.php └── Middlewares │ └── Authorize.php ├── Listeners └── LogClientRequest.php └── Models └── Log.php /.php_cs.dist.php: -------------------------------------------------------------------------------- 1 | in([ 5 | __DIR__ . '/src', 6 | __DIR__ . '/tests', 7 | ]) 8 | ->name('*.php') 9 | ->notName('*.blade.php') 10 | ->ignoreDotFiles(true) 11 | ->ignoreVCS(true); 12 | 13 | return (new PhpCsFixer\Config()) 14 | ->setRules([ 15 | '@PSR2' => true, 16 | 'array_syntax' => ['syntax' => 'short'], 17 | 'ordered_imports' => ['sort_algorithm' => 'length'], 18 | 'no_unused_imports' => true, 19 | 'not_operator_with_successor_space' => true, 20 | 'trailing_comma_in_multiline' => true, 21 | 'phpdoc_scalar' => true, 22 | 'unary_operator_spaces' => true, 23 | 'binary_operator_spaces' => true, 24 | 'blank_line_before_statement' => [ 25 | 'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'try'], 26 | ], 27 | 'phpdoc_single_line_var_spacing' => true, 28 | 'phpdoc_var_without_name' => true, 29 | 'class_attributes_separation' => [ 30 | 'elements' => [ 31 | 'method' => 'one', 32 | ], 33 | ], 34 | 'method_argument_space' => [ 35 | 'on_multiline' => 'ensure_fully_multiline', 36 | 'keep_multiple_spaces_after_comma' => true, 37 | ], 38 | 'single_trait_insert_per_statement' => true, 39 | ]) 40 | ->setFinder($finder); 41 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 4 | 5 | ### [1.2.1](https://github.com/sbrow/laravel-blanket/compare/v1.2.0...v1.2.1) (2022-07-05) 6 | 7 | 8 | ### Bug Fixes 9 | 10 | * Fixed a bug causing the blanket route to crash ([ab61421](https://github.com/sbrow/laravel-blanket/commit/ab614218e1fd18b8158cf5670e036edd7b922bed)) 11 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) ahmadwaleed 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Banner](https://banners.beyondco.de/Laravel%20Blanket.png?theme=light&packageManager=composer+require&packageName=ahmadwaleed%2Flaravel-blanket&pattern=architect&style=style_1&description=A+blanket+which+wraps+your+laravel+HTTP+client+and+provide+logs.&md=1&showWatermark=1&fontSize=100px&images=https%3A%2F%2Flaravel.com%2Fimg%2Flogomark.min.svg) 2 | 3 | ## Dashboard to view your http client requests in laravel application 4 | 5 | ![Packagist License](https://img.shields.io/packagist/l/ahmadwaleed/laravel-blanket?style=for-the-badge) 6 | ![Packagist Version](https://img.shields.io/packagist/v/ahmadwaleed/laravel-blanket?style=for-the-badge) 7 | ![GitHub repo size](https://img.shields.io/github/repo-size/ahmadwaleed/laravel-blanket?style=for-the-badge) 8 | ![Packagist Downloads](https://img.shields.io/packagist/dt/ahmadwaleed/laravel-blanket?style=for-the-badge) 9 | 10 | Laravel Blanket is a package with wraps laravel http client requests and provide logs for request and response, also give option to retry any request from dashboard and more... 11 | 12 | ## Desclaimer 13 | This is highly opinionated fun project which provides very simple web interface and log monitoring. If you need advance monitoring tools consider trying [Debugbar](https://github.com/barryvdh/laravel-debugbar), [Sentry](https://sentry.io/) and [Bugsnag](https://www.bugsnag.com/). 14 | 15 | ## Live Demo 16 | Checkout the demo [here]() to find out more options and feature... 17 | 18 | ## Screenshots 19 | ![screen shot light](https://github.com/ahmadwaleed/laravel-blanket/blob/main/screenshot-light.png?raw=true) 20 | ![screen shot dark](https://github.com/ahmadwaleed/laravel-blanket/blob/main/screenshot-dark.png?raw=true) 21 | 22 | ## Requirements 23 | 24 | - PHP >= 8.0 25 | - Laravel >= 8.45 26 | 27 | ## Installation 28 | 29 | You can install the package via composer: 30 | 31 | ```bash 32 | composer require ahmadwaleed/laravel-blanket 33 | ``` 34 | 35 | The package will automatically register a service provider. 36 | 37 | After installing Blanket, publish its assets using the blanket:wrap Artisan command. 38 | 39 | ```bash 40 | php artisan blanket:wrap 41 | ``` 42 | 43 | This package comes with a migration to store all outgoing http client requests. You can publish the migration file using: 44 | 45 | ```bash 46 | php artisan vendor:publish --provider="Ahmadwaleed\Blanket\BlanketServiceProvider" --tag="blanket-migrations" 47 | ``` 48 | 49 | Run the migrations with: 50 | 51 | ```bash 52 | php artisan migrate 53 | ``` 54 | 55 | Optionally you can publish the blanket configuration file: 56 | 57 | ```bash 58 | php artisan vendor:publish --provider="Ahmadwaleed\Blanket\BlanketServiceProvider" --tag="blanket-config" 59 | ``` 60 | 61 | This is the contents of the published config file that will be published as `config/blanket.php` 62 | ```php 63 | return [ 64 | /* 65 | |-------------------------------------------------------------------------- 66 | | Dashboard Enabled 67 | |-------------------------------------------------------------------------- 68 | | 69 | | Here you can specify whether to show dashboard or not. 70 | | 71 | */ 72 | 73 | 'enabled' => env('BLANKET_ENABLED', true), 74 | 75 | /* 76 | |-------------------------------------------------------------------------- 77 | | Hide Sensitive Data 78 | |-------------------------------------------------------------------------- 79 | | 80 | | Here you can specify the fields which might contain sensitive data, those 81 | | fields will hidden when saving logs. You can also specify nested keys in 82 | | config. Example: 83 | | 'response' => [ 84 | | 'client.id', 85 | | 'client.secret', 86 | | ], 87 | */ 88 | 'hide_sensitive_data' => [ 89 | 'headers' => [ 90 | 'Authorization', 91 | 'php-auth-pw', 92 | ], 93 | 94 | 'request' => [ 95 | 'password', 96 | 'password_confirmation', 97 | ], 98 | 99 | 'response' => [] 100 | ], 101 | 102 | /* 103 | |-------------------------------------------------------------------------- 104 | | Blanket Path 105 | |-------------------------------------------------------------------------- 106 | | 107 | | This is the URI path where Blanket will be accessible from. Feel free 108 | | to change this path to anything you like. 109 | | 110 | */ 111 | 112 | 'path' => env('BLANKET_PATH', 'blanket'), 113 | 114 | /* 115 | |-------------------------------------------------------------------------- 116 | | Blanket Route Middleware 117 | |-------------------------------------------------------------------------- 118 | | 119 | | These middleware will be assigned to every Blanket route, giving you 120 | | the chance to add your own middleware to this list or change any of 121 | | the existing middleware. Or, you can simply stick with this list. 122 | | 123 | */ 124 | 125 | 'middlewares' => [ 126 | // 'web', 127 | \Ahmadwaleed\Blanket\Http\Middlewares\Authorize::class, 128 | ], 129 | 130 | /* 131 | |-------------------------------------------------------------------------- 132 | | Log Response limit 133 | |-------------------------------------------------------------------------- 134 | | 135 | | This is maximum limit blanket is allowed to log response content, 136 | | if response content exceed this limit the response should be purged. 137 | | The default limit is 64 KB which is max limit, feel free to set lower limit. 138 | | 139 | */ 140 | 141 | 'log_response_limit' => env('BLANKET_RESPONSE_LIMIT', 64), 142 | 143 | /* 144 | |-------------------------------------------------------------------------- 145 | | Logs Per Page 146 | |-------------------------------------------------------------------------- 147 | | 148 | | How many logs should be fetched per page for dashboard, setting this option 149 | | to a big number may reduce dashboard performance. 150 | | 151 | */ 152 | 153 | 'logs_per_page' => env('BLANKET_LOGS_PER_PAGE', 100), 154 | 155 | /* 156 | |-------------------------------------------------------------------------- 157 | | Prune Blanket Logs Duration 158 | |-------------------------------------------------------------------------- 159 | | 160 | | Duration in which blanket logs will be deleted periodically 161 | | that are no longer needed. You should schedule the model:prune 162 | | Artisan command in your application's App\Console\Kernel class. 163 | | You are free to specify the appropriate interval here at which 164 | | this command should be run: 165 | | ``` 166 | | $schedule->command('model:prune', [ 167 | | '--model' => [Ahmadwaleed\Blanket\Models\Log::class], 168 | | ])->daily(); 169 | | 170 | */ 171 | 172 | 'prune_logs_duration' => env('PRUNE_LOGS_DURATION', now()->subMonth()), 173 | ]; 174 | ``` 175 | 176 | ## Credits 177 | 178 | - [AhmadWaleed](https://github.com/ahmadwaleed) 179 | - [All Contributors](https://github.com/AhmadWaleed/laravel-blanket/graphs/contributors) 180 | 181 | ## License 182 | 183 | The MIT License (MIT). Please see [License File](LICENSE.md) for more information. 184 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ahmadwaleed/laravel-blanket", 3 | "description": "A blanket which wraps your laravel http client, and provides dashboard to access logs, retry and debug your http requests.", 4 | "keywords": [ 5 | "ahmadwaleed", 6 | "laravel", 7 | "blanket" 8 | ], 9 | "homepage": "https://github.com/ahmadwaleed/blanket", 10 | "license": "MIT", 11 | "authors": [ 12 | { 13 | "name": "AhmedWaleed", 14 | "email": "ahmed_waleed1@hotmail.com", 15 | "role": "Developer" 16 | } 17 | ], 18 | "require": { 19 | "php": "^8.0", 20 | "ext-json": "*", 21 | "guzzlehttp/guzzle": "^7.3", 22 | "laravel/framework": "^8.50|^9.0" 23 | }, 24 | "require-dev": { 25 | "brianium/paratest": "^6.2", 26 | "nunomaduro/collision": "^5.3", 27 | "orchestra/testbench": "^6.15", 28 | "phpunit/phpunit": "^9.3", 29 | "vimeo/psalm": "^4.4", 30 | "friendsofphp/php-cs-fixer": "^3.0" 31 | }, 32 | "autoload": { 33 | "psr-4": { 34 | "Ahmadwaleed\\Blanket\\": "src", 35 | "Ahmadwaleed\\Blanket\\Database\\Factories\\": "database/factories" 36 | } 37 | }, 38 | "autoload-dev": { 39 | "psr-4": { 40 | "Ahmadwaleed\\Blanket\\Tests\\": "tests" 41 | } 42 | }, 43 | "scripts": { 44 | "psalm": "vendor/bin/psalm", 45 | "test": "./vendor/bin/testbench package:test --parallel --no-coverage", 46 | "test-coverage": "vendor/bin/phpunit --coverage-html coverage", 47 | "cs-fix": [ 48 | "./vendor/bin/php-cs-fixer fix --config .php_cs.dist.php --diff" 49 | ], 50 | "cs-test": [ 51 | "./vendor/bin/php-cs-fixer fix --dry-run --config .php_cs.dist.php --diff" 52 | ] 53 | }, 54 | "config": { 55 | "sort-packages": true 56 | }, 57 | "extra": { 58 | "laravel": { 59 | "providers": [ 60 | "Ahmadwaleed\\Blanket\\BlanketServiceProvider" 61 | ] 62 | } 63 | }, 64 | "minimum-stability": "dev", 65 | "prefer-stable": true 66 | } 67 | -------------------------------------------------------------------------------- /config/blanket.php: -------------------------------------------------------------------------------- 1 | env('BLANKET_ENABLED', true), 13 | 14 | /* 15 | |-------------------------------------------------------------------------- 16 | | Hide Sensitive Data 17 | |-------------------------------------------------------------------------- 18 | | 19 | | Here you can specify the fields which might contain sensitive data, those 20 | | fields will hidden when saving logs. You can also specify nested keys in 21 | | config. Example: 22 | | 'response' => [ 23 | | 'client.id', 24 | | 'client.secret', 25 | | ], 26 | */ 27 | 28 | 'hide_sensitive_data' => [ 29 | 'headers' => [ 30 | 'Authorization', 31 | 'php-auth-pw', 32 | ], 33 | 34 | 'request' => [ 35 | 'password', 36 | 'password_confirmation', 37 | ], 38 | 39 | 'response' => [] 40 | ], 41 | 42 | /* 43 | |-------------------------------------------------------------------------- 44 | | Blanket Path 45 | |-------------------------------------------------------------------------- 46 | | 47 | | This is the URI path where Blanket will be accessible from. Feel free 48 | | to change this path to anything you like. 49 | | 50 | */ 51 | 52 | 'path' => env('BLANKET_PATH', 'blanket'), 53 | 54 | /* 55 | |-------------------------------------------------------------------------- 56 | | Blanket Route Middleware 57 | |-------------------------------------------------------------------------- 58 | | 59 | | These middleware will be assigned to every Blanket route, giving you 60 | | the chance to add your own middleware to this list or change any of 61 | | the existing middleware. Or, you can simply stick with this list. 62 | | 63 | */ 64 | 65 | 'middlewares' => [ 66 | // 'web', 67 | \Ahmadwaleed\Blanket\Http\Middlewares\Authorize::class, 68 | ], 69 | 70 | /* 71 | |-------------------------------------------------------------------------- 72 | | Log Response limit 73 | |-------------------------------------------------------------------------- 74 | | 75 | | This is maximum limit blanket is allowed to log response content, 76 | | if response content exceed this limit the response should be purged. 77 | | The default limit is 64 KB which is max limit, feel free to set lower limit. 78 | | 79 | */ 80 | 81 | 'log_response_limit' => env('BLANKET_RESPONSE_LIMIT', 64), 82 | 83 | /* 84 | |-------------------------------------------------------------------------- 85 | | Logs Per Page 86 | |-------------------------------------------------------------------------- 87 | | 88 | | How many logs should be fetched per page for dashboard, setting this option 89 | | to a big number may reduce dashboard performance. 90 | | 91 | */ 92 | 93 | 'logs_per_page' => env('BLANKET_LOGS_PER_PAGE', 100), 94 | 95 | /* 96 | |-------------------------------------------------------------------------- 97 | | Prune Blanket Logs Duration 98 | |-------------------------------------------------------------------------- 99 | | 100 | | Duration in which blanket logs will be deleted periodically 101 | | that are no longer needed. You should schedule the model:prune 102 | | Artisan command in your application's App\Console\Kernel class. 103 | | You are free to specify the appropriate interval here at which 104 | | this command should be run: 105 | | ``` 106 | | $schedule->command('model:prune', [ 107 | | '--model' => [Ahmadwaleed\Blanket\Models\Log::class], 108 | | ])->daily(); 109 | | 110 | */ 111 | 112 | 'prune_logs_duration' => env('PRUNE_LOGS_DURATION', now()->subMonth()), 113 | ]; 114 | -------------------------------------------------------------------------------- /database/factories/LogFactory.php: -------------------------------------------------------------------------------- 1 | faker->url; 26 | $host = parse_url($url, PHP_URL_HOST); 27 | 28 | return [ 29 | 'url' => $url, 30 | 'host' => $host, 31 | 'status' => $this->faker->randomElement(array_keys(Response::$statusTexts)), 32 | 'method' => $this->faker->randomElement(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']), 33 | 'created_at' => $this->faker->date 34 | ]; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/create_blanket_logs_table.php: -------------------------------------------------------------------------------- 1 | id(); 13 | $table->longtext('url'); 14 | $table->string('host'); 15 | $table->string('method'); 16 | $table->integer('status'); 17 | $table->longText('request')->nullable(); 18 | $table->longText('response')->nullable(); 19 | $table->timestamp('created_at'); 20 | }); 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /public/css/app.css: -------------------------------------------------------------------------------- 1 | /*! tailwindcss v2.1.4 | MIT License | https://tailwindcss.com *//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*{--tw-shadow:0 0 #0000;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.relative{position:relative}.absolute{position:absolute}.sticky{position:sticky}.fixed{position:fixed}.inset-0{right:0;left:0}.inset-0,.inset-y-0{top:0;bottom:0}.left-0{left:0}.top-0{top:0}.z-20{z-index:20}.mx-auto{margin-left:auto;margin-right:auto}.my-24{margin-top:6rem;margin-bottom:6rem}.mt-6{margin-top:1.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mb-4{margin-bottom:1rem}.flex{display:flex}.grid{display:grid}.block{display:block}.hidden{display:none}.h-screen{height:100vh}.h-96{height:24rem}.h-full{height:100%}.h-\[30vh\]{height:30vh}.w-80{width:20rem}.w-full{width:100%}.w-24{width:6rem}.w-20{width:5rem}.w-16{width:4rem}.max-w-lg{max-width:32rem}.flex-grow{flex-grow:1}.cursor-pointer{cursor:pointer}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-4{gap:1rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2rem*var(--tw-space-x-reverse));margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.break-words{overflow-wrap:break-word}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.border{border-width:1px}.border-b-4{border-bottom-width:4px}.border-r{border-right-width:1px}.border-gray-100{--tw-border-opacity:1;border-color:rgba(243,244,246,var(--tw-border-opacity))}.border-blue-600{--tw-border-opacity:1;border-color:rgba(37,99,235,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(209,213,219,var(--tw-border-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgba(37,99,235,var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(209,213,219,var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.bg-green-400{--tw-bg-opacity:1;background-color:rgba(52,211,153,var(--tw-bg-opacity))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgba(253,230,138,var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgba(99,102,241,var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgba(217,119,6,var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgba(248,113,113,var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgba(55,65,81,var(--tw-bg-opacity))}.bg-opacity-75{--tw-bg-opacity:0.75}.p-4{padding:1rem}.p-\[\.5px\]{padding:.5px}.p-1{padding:.25rem}.p-6{padding:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-right:.5rem}.pl-2,.px-2{padding-left:.5rem}.pl-1{padding-left:.25rem}.pl-10{padding-left:2.5rem}.pb-6{padding-bottom:1.5rem}.text-center{text-align:center}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-light{font-weight:300}.uppercase{text-transform:uppercase}.text-gray-500{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.text-indigo-500{--tw-text-opacity:1;color:rgba(99,102,241,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239,68,68,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(156,163,175,var(--tw-text-opacity))}.underline{text-decoration:underline}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06)}.shadow-md,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.focus-within\:text-blue-600:focus-within{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgba(239,246,255,var(--tw-bg-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.dark .dark\:border{border-width:1px}.dark .dark\:border-gray-700{--tw-border-opacity:1;border-color:rgba(55,65,81,var(--tw-border-opacity))}.dark .dark\:border-blue-400{--tw-border-opacity:1;border-color:rgba(96,165,250,var(--tw-border-opacity))}.dark .dark\:border-gray-600{--tw-border-opacity:1;border-color:rgba(75,85,99,var(--tw-border-opacity))}.dark .dark\:bg-gray-900{--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}.dark .dark\:bg-blue-400{--tw-bg-opacity:1;background-color:rgba(96,165,250,var(--tw-bg-opacity))}.dark .dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(55,65,81,var(--tw-bg-opacity))}.dark .dark\:bg-opacity-90{--tw-bg-opacity:0.9}.dark .dark\:text-gray-300{--tw-text-opacity:1;color:rgba(209,213,219,var(--tw-text-opacity))}.dark .dark\:text-blue-400{--tw-text-opacity:1;color:rgba(96,165,250,var(--tw-text-opacity))}.dark .dark\:text-gray-900{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.dark .dark\:focus-within\:text-blue-400:focus-within{--tw-text-opacity:1;color:rgba(96,165,250,var(--tw-text-opacity))}.dark .dark\:hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgba(55,65,81,var(--tw-bg-opacity))}.dark .dark\:hover\:text-blue-400:hover{--tw-text-opacity:1;color:rgba(96,165,250,var(--tw-text-opacity))}.dark .dark\:hover\:text-red-600:hover{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}@media (min-width:768px){.md\:mb-0{margin-bottom:0}.md\:flex{display:flex}.md\:w-96{width:24rem}.md\:w-40{width:10rem}.md\:w-20{width:5rem}.md\:flex-row{flex-direction:row}.md\:justify-end{justify-content:flex-end}.md\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}}@media (min-width:1024px){.lg\:flex-grow-0{flex-grow:0}}.key{color:rgba(255,255,255,var(--tw-text-opacity))}.key,.null{--tw-text-opacity:1}.null{color:rgba(219,39,119,var(--tw-text-opacity))}.string{color:rgba(96,165,250,var(--tw-text-opacity))}.boolean,.string{--tw-text-opacity:1}.boolean{color:rgba(29,78,216,var(--tw-text-opacity))}.number{--tw-text-opacity:1;color:rgba(251,191,36,var(--tw-text-opacity))}.filter-item{display:flex;cursor:pointer;align-items:center;justify-content:space-between}.filter-item:hover{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.dark .filter-item,.dark .filter-item:hover{--tw-text-opacity:1;color:rgba(96,165,250,var(--tw-text-opacity))} -------------------------------------------------------------------------------- /public/css/chunk-vendors.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:boxicons;font-weight:400;font-style:normal;src:url(/vendor/blanket/fonts/boxicons.eot);src:url(/vendor/blanket/fonts/boxicons.eot) format("embedded-opentype"),url(/vendor/blanket/fonts/boxicons.woff2) format("woff2"),url(/vendor/blanket/fonts/boxicons.woff) format("woff"),url(/vendor/blanket/fonts/boxicons.ttf) format("truetype"),url(/vendor/blanket/img/boxicons.svg?#boxicons) format("svg")}.bx{font-family:boxicons!important;font-weight:400;font-style:normal;font-variant:normal;line-height:1;display:inline-block;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bx-ul{margin-left:2em;padding-left:0;list-style:none}.bx-ul>li{position:relative}.bx-ul .bx{font-size:inherit;line-height:inherit;position:absolute;left:-2em;width:2em;text-align:center}@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}@-webkit-keyframes burst{0%{transform:scale(1);opacity:1}90%{transform:scale(1.5);opacity:0}}@keyframes burst{0%{transform:scale(1);opacity:1}90%{transform:scale(1.5);opacity:0}}@-webkit-keyframes flashing{0%{opacity:1}45%{opacity:0}90%{opacity:1}}@keyframes flashing{0%{opacity:1}45%{opacity:0}90%{opacity:1}}@-webkit-keyframes fade-left{0%{transform:translateX(0);opacity:1}75%{transform:translateX(-20px);opacity:0}}@keyframes fade-left{0%{transform:translateX(0);opacity:1}75%{transform:translateX(-20px);opacity:0}}@-webkit-keyframes fade-right{0%{transform:translateX(0);opacity:1}75%{transform:translateX(20px);opacity:0}}@keyframes fade-right{0%{transform:translateX(0);opacity:1}75%{transform:translateX(20px);opacity:0}}@-webkit-keyframes fade-up{0%{transform:translateY(0);opacity:1}75%{transform:translateY(-20px);opacity:0}}@keyframes fade-up{0%{transform:translateY(0);opacity:1}75%{transform:translateY(-20px);opacity:0}}@-webkit-keyframes fade-down{0%{transform:translateY(0);opacity:1}75%{transform:translateY(20px);opacity:0}}@keyframes fade-down{0%{transform:translateY(0);opacity:1}75%{transform:translateY(20px);opacity:0}}@-webkit-keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.95,.95,.95) rotate(-10deg)}30%,50%,70%,90%{transform:scaleX(1) rotate(10deg)}40%,60%,80%{transform:scaleX(1) rotate(-10deg)}to{transform:scaleX(1)}}@keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.95,.95,.95) rotate(-10deg)}30%,50%,70%,90%{transform:scaleX(1) rotate(10deg)}40%,60%,80%{transform:rotate(-10deg)}to{transform:scaleX(1)}}.bx-spin,.bx-spin-hover:hover{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.bx-tada,.bx-tada-hover:hover{-webkit-animation:tada 1.5s ease infinite;animation:tada 1.5s ease infinite}.bx-flashing,.bx-flashing-hover:hover{-webkit-animation:flashing 1.5s linear infinite;animation:flashing 1.5s linear infinite}.bx-burst,.bx-burst-hover:hover{-webkit-animation:burst 1.5s linear infinite;animation:burst 1.5s linear infinite}.bx-fade-up,.bx-fade-up-hover:hover{-webkit-animation:fade-up 1.5s linear infinite;animation:fade-up 1.5s linear infinite}.bx-fade-down,.bx-fade-down-hover:hover{-webkit-animation:fade-down 1.5s linear infinite;animation:fade-down 1.5s linear infinite}.bx-fade-left,.bx-fade-left-hover:hover{-webkit-animation:fade-left 1.5s linear infinite;animation:fade-left 1.5s linear infinite}.bx-fade-right,.bx-fade-right-hover:hover{-webkit-animation:fade-right 1.5s linear infinite;animation:fade-right 1.5s linear infinite}.bx-xs{font-size:1rem!important}.bx-sm{font-size:1.55rem!important}.bx-md{font-size:2.25rem!important}.bx-fw{font-size:1.2857142857em;line-height:.8em;width:1.2857142857em;height:.8em;margin-top:-.2em!important;vertical-align:middle}.bx-lg{font-size:3!important}.bx-pull-left{float:left;margin-right:.3em!important}.bx-pull-right{float:right;margin-left:.3em!important}.bx-rotate-90{transform:rotate(90deg);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"}.bx-rotate-180{transform:rotate(180deg);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"}.bx-rotate-270{transform:rotate(270deg);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"}.bx-flip-horizontal{transform:scaleX(-1);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1)"}.bx-flip-vertical{transform:scaleY(-1);-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1)"}.bx-border{padding:.25em;border:.07em solid rgba(0,0,0,.1);border-radius:.25em}.bx-border-circle{padding:.25em;border:.07em solid rgba(0,0,0,.1);border-radius:50%}.bx-abacus:before{content:"\e900"}.bx-accessibility:before{content:"\e901"}.bx-add-to-queue:before{content:"\e902"}.bx-adjust:before{content:"\e903"}.bx-alarm:before{content:"\e904"}.bx-alarm-add:before{content:"\e905"}.bx-alarm-exclamation:before{content:"\e906"}.bx-alarm-off:before{content:"\e907"}.bx-alarm-snooze:before{content:"\e908"}.bx-album:before{content:"\e909"}.bx-align-justify:before{content:"\e90a"}.bx-align-left:before{content:"\e90b"}.bx-align-middle:before{content:"\e90c"}.bx-align-right:before{content:"\e90d"}.bx-analyse:before{content:"\e90e"}.bx-anchor:before{content:"\e90f"}.bx-angry:before{content:"\e910"}.bx-aperture:before{content:"\e911"}.bx-arch:before{content:"\e912"}.bx-archive:before{content:"\e913"}.bx-archive-in:before{content:"\e914"}.bx-archive-out:before{content:"\e915"}.bx-area:before{content:"\e916"}.bx-arrow-back:before{content:"\e917"}.bx-arrow-from-bottom:before{content:"\e918"}.bx-arrow-from-left:before{content:"\e919"}.bx-arrow-from-right:before{content:"\e91a"}.bx-arrow-from-top:before{content:"\e91b"}.bx-arrow-to-bottom:before{content:"\e91c"}.bx-arrow-to-left:before{content:"\e91d"}.bx-arrow-to-right:before{content:"\e91e"}.bx-arrow-to-top:before{content:"\e91f"}.bx-at:before{content:"\e920"}.bx-atom:before{content:"\e921"}.bx-award:before{content:"\e922"}.bx-badge:before{content:"\e923"}.bx-badge-check:before{content:"\e924"}.bx-ball:before{content:"\e925"}.bx-band-aid:before{content:"\e926"}.bx-bar-chart:before{content:"\e927"}.bx-bar-chart-alt:before{content:"\e928"}.bx-bar-chart-alt-2:before{content:"\e929"}.bx-bar-chart-square:before{content:"\e92a"}.bx-barcode:before{content:"\e92b"}.bx-barcode-reader:before{content:"\e92c"}.bx-baseball:before{content:"\e92d"}.bx-basket:before{content:"\e92e"}.bx-basketball:before{content:"\e92f"}.bx-bath:before{content:"\e930"}.bx-battery:before{content:"\e931"}.bx-bed:before{content:"\e932"}.bx-been-here:before{content:"\e933"}.bx-beer:before{content:"\e934"}.bx-bell:before{content:"\e935"}.bx-bell-minus:before{content:"\e936"}.bx-bell-off:before{content:"\e937"}.bx-bell-plus:before{content:"\e938"}.bx-bible:before{content:"\e939"}.bx-bitcoin:before{content:"\e93a"}.bx-blanket:before{content:"\e93b"}.bx-block:before{content:"\e93c"}.bx-bluetooth:before{content:"\e93d"}.bx-body:before{content:"\e93e"}.bx-bold:before{content:"\e93f"}.bx-bolt-circle:before{content:"\e940"}.bx-bomb:before{content:"\e941"}.bx-bone:before{content:"\e942"}.bx-bong:before{content:"\e943"}.bx-book:before{content:"\e944"}.bx-book-add:before{content:"\e945"}.bx-book-alt:before{content:"\e946"}.bx-book-bookmark:before{content:"\e947"}.bx-book-content:before{content:"\e948"}.bx-book-heart:before{content:"\e949"}.bx-bookmark:before{content:"\e94a"}.bx-bookmark-alt:before{content:"\e94b"}.bx-bookmark-alt-minus:before{content:"\e94c"}.bx-bookmark-alt-plus:before{content:"\e94d"}.bx-bookmark-heart:before{content:"\e94e"}.bx-bookmark-minus:before{content:"\e94f"}.bx-bookmark-plus:before{content:"\e950"}.bx-bookmarks:before{content:"\e951"}.bx-book-open:before{content:"\e952"}.bx-book-reader:before{content:"\e953"}.bx-border-all:before{content:"\e954"}.bx-border-bottom:before{content:"\e955"}.bx-border-inner:before{content:"\e956"}.bx-border-left:before{content:"\e957"}.bx-border-none:before{content:"\e958"}.bx-border-outer:before{content:"\e959"}.bx-border-radius:before{content:"\e95a"}.bx-border-right:before{content:"\e95b"}.bx-border-top:before{content:"\e95c"}.bx-bot:before{content:"\e95d"}.bx-bowling-ball:before{content:"\e95e"}.bx-box:before{content:"\e95f"}.bx-bracket:before{content:"\e960"}.bx-braille:before{content:"\e961"}.bx-brain:before{content:"\e962"}.bx-briefcase:before{content:"\e963"}.bx-briefcase-alt:before{content:"\e964"}.bx-briefcase-alt-2:before{content:"\e965"}.bx-brightness:before{content:"\e966"}.bx-brightness-half:before{content:"\e967"}.bx-broadcast:before{content:"\e968"}.bx-brush:before{content:"\e969"}.bx-brush-alt:before{content:"\e96a"}.bx-bug:before{content:"\e96b"}.bx-bug-alt:before{content:"\e96c"}.bx-building:before{content:"\e96d"}.bx-building-house:before{content:"\e96e"}.bx-buildings:before{content:"\e96f"}.bx-bulb:before{content:"\e970"}.bx-bullseye:before{content:"\e971"}.bx-buoy:before{content:"\e972"}.bx-bus:before{content:"\e973"}.bx-bus-school:before{content:"\e974"}.bx-cabinet:before{content:"\e975"}.bx-cake:before{content:"\e976"}.bx-calculator:before{content:"\e977"}.bx-calendar:before{content:"\e978"}.bx-calendar-alt:before{content:"\e979"}.bx-calendar-check:before{content:"\e97a"}.bx-calendar-edit:before{content:"\e97b"}.bx-calendar-event:before{content:"\e97c"}.bx-calendar-exclamation:before{content:"\e97d"}.bx-calendar-heart:before{content:"\e97e"}.bx-calendar-minus:before{content:"\e97f"}.bx-calendar-plus:before{content:"\e980"}.bx-calendar-star:before{content:"\e981"}.bx-calendar-week:before{content:"\e982"}.bx-calendar-x:before{content:"\e983"}.bx-camera:before{content:"\e984"}.bx-camera-home:before{content:"\e985"}.bx-camera-movie:before{content:"\e986"}.bx-camera-off:before{content:"\e987"}.bx-capsule:before{content:"\e988"}.bx-captions:before{content:"\e989"}.bx-car:before{content:"\e98a"}.bx-card:before{content:"\e98b"}.bx-caret-down:before{content:"\e98c"}.bx-caret-down-circle:before{content:"\e98d"}.bx-caret-down-square:before{content:"\e98e"}.bx-caret-left:before{content:"\e98f"}.bx-caret-left-circle:before{content:"\e990"}.bx-caret-left-square:before{content:"\e991"}.bx-caret-right:before{content:"\e992"}.bx-caret-right-circle:before{content:"\e993"}.bx-caret-right-square:before{content:"\e994"}.bx-caret-up:before{content:"\e995"}.bx-caret-up-circle:before{content:"\e996"}.bx-caret-up-square:before{content:"\e997"}.bx-carousel:before{content:"\e998"}.bx-cart:before{content:"\e999"}.bx-cart-alt:before{content:"\e99a"}.bx-cast:before{content:"\e99b"}.bx-category:before{content:"\e99c"}.bx-category-alt:before{content:"\e99d"}.bx-cctv:before{content:"\e99e"}.bx-certification:before{content:"\e99f"}.bx-chair:before{content:"\e9a0"}.bx-chalkboard:before{content:"\e9a1"}.bx-chart:before{content:"\e9a2"}.bx-chat:before{content:"\e9a3"}.bx-check:before{content:"\e9a4"}.bx-checkbox:before{content:"\e9a5"}.bx-checkbox-checked:before{content:"\e9a6"}.bx-checkbox-square:before{content:"\e9a7"}.bx-check-circle:before{content:"\e9a8"}.bx-check-double:before{content:"\e9a9"}.bx-check-shield:before{content:"\e9aa"}.bx-check-square:before{content:"\e9ab"}.bx-chevron-down:before{content:"\e9ac"}.bx-chevron-down-circle:before{content:"\e9ad"}.bx-chevron-down-square:before{content:"\e9ae"}.bx-chevron-left:before{content:"\e9af"}.bx-chevron-left-circle:before{content:"\e9b0"}.bx-chevron-left-square:before{content:"\e9b1"}.bx-chevron-right:before{content:"\e9b2"}.bx-chevron-right-circle:before{content:"\e9b3"}.bx-chevron-right-square:before{content:"\e9b4"}.bx-chevrons-down:before{content:"\e9b5"}.bx-chevrons-left:before{content:"\e9b6"}.bx-chevrons-right:before{content:"\e9b7"}.bx-chevrons-up:before{content:"\e9b8"}.bx-chevron-up:before{content:"\e9b9"}.bx-chevron-up-circle:before{content:"\e9ba"}.bx-chevron-up-square:before{content:"\e9bb"}.bx-chip:before{content:"\e9bc"}.bx-church:before{content:"\e9bd"}.bx-circle:before{content:"\e9be"}.bx-clinic:before{content:"\e9bf"}.bx-clipboard:before{content:"\e9c0"}.bx-closet:before{content:"\e9c1"}.bx-cloud:before{content:"\e9c2"}.bx-cloud-download:before{content:"\e9c3"}.bx-cloud-drizzle:before{content:"\e9c4"}.bx-cloud-lightning:before{content:"\e9c5"}.bx-cloud-light-rain:before{content:"\e9c6"}.bx-cloud-rain:before{content:"\e9c7"}.bx-cloud-snow:before{content:"\e9c8"}.bx-cloud-upload:before{content:"\e9c9"}.bx-code:before{content:"\e9ca"}.bx-code-alt:before{content:"\e9cb"}.bx-code-block:before{content:"\e9cc"}.bx-code-curly:before{content:"\e9cd"}.bx-coffee:before{content:"\e9ce"}.bx-coffee-togo:before{content:"\e9cf"}.bx-cog:before{content:"\e9d0"}.bx-coin:before{content:"\e9d1"}.bx-coin-stack:before{content:"\e9d2"}.bx-collapse:before{content:"\e9d3"}.bx-collection:before{content:"\e9d4"}.bx-color-fill:before{content:"\e9d5"}.bx-columns:before{content:"\e9d6"}.bx-command:before{content:"\e9d7"}.bx-comment:before{content:"\e9d8"}.bx-comment-add:before{content:"\e9d9"}.bx-comment-check:before{content:"\e9da"}.bx-comment-detail:before{content:"\e9db"}.bx-comment-dots:before{content:"\e9dc"}.bx-comment-edit:before{content:"\e9dd"}.bx-comment-error:before{content:"\e9de"}.bx-comment-minus:before{content:"\e9df"}.bx-comment-x:before{content:"\e9e0"}.bx-compass:before{content:"\e9e1"}.bx-confused:before{content:"\e9e2"}.bx-conversation:before{content:"\e9e3"}.bx-cookie:before{content:"\e9e4"}.bx-cool:before{content:"\e9e5"}.bx-copy:before{content:"\e9e6"}.bx-copy-alt:before{content:"\e9e7"}.bx-copyright:before{content:"\e9e8"}.bx-credit-card:before{content:"\e9e9"}.bx-credit-card-alt:before{content:"\e9ea"}.bx-credit-card-front:before{content:"\e9eb"}.bx-crop:before{content:"\e9ec"}.bx-crosshair:before{content:"\e9ed"}.bx-crown:before{content:"\e9ee"}.bx-cube:before{content:"\e9ef"}.bx-cube-alt:before{content:"\e9f0"}.bx-cuboid:before{content:"\e9f1"}.bx-current-location:before{content:"\e9f2"}.bx-customize:before{content:"\e9f3"}.bx-cut:before{content:"\e9f4"}.bx-cycling:before{content:"\e9f5"}.bx-cylinder:before{content:"\e9f6"}.bx-data:before{content:"\e9f7"}.bx-desktop:before{content:"\e9f8"}.bx-detail:before{content:"\e9f9"}.bx-devices:before{content:"\e9fa"}.bx-dialpad:before{content:"\e9fb"}.bx-dialpad-alt:before{content:"\e9fc"}.bx-diamond:before{content:"\e9fd"}.bx-dice-1:before{content:"\e9fe"}.bx-dice-2:before{content:"\e9ff"}.bx-dice-3:before{content:"\ea00"}.bx-dice-4:before{content:"\ea01"}.bx-dice-5:before{content:"\ea02"}.bx-dice-6:before{content:"\ea03"}.bx-directions:before{content:"\ea04"}.bx-disc:before{content:"\ea05"}.bx-dish:before{content:"\ea06"}.bx-dislike:before{content:"\ea07"}.bx-dizzy:before{content:"\ea08"}.bx-dna:before{content:"\ea09"}.bx-dock-bottom:before{content:"\ea0a"}.bx-dock-left:before{content:"\ea0b"}.bx-dock-right:before{content:"\ea0c"}.bx-dock-top:before{content:"\ea0d"}.bx-dollar:before{content:"\ea0e"}.bx-dollar-circle:before{content:"\ea0f"}.bx-donate-blood:before{content:"\ea10"}.bx-donate-heart:before{content:"\ea11"}.bx-door-open:before{content:"\ea12"}.bx-dots-horizontal:before{content:"\ea13"}.bx-dots-horizontal-rounded:before{content:"\ea14"}.bx-dots-vertical:before{content:"\ea15"}.bx-dots-vertical-rounded:before{content:"\ea16"}.bx-doughnut-chart:before{content:"\ea17"}.bx-down-arrow:before{content:"\ea18"}.bx-down-arrow-alt:before{content:"\ea19"}.bx-down-arrow-circle:before{content:"\ea1a"}.bx-download:before{content:"\ea1b"}.bx-downvote:before{content:"\ea1c"}.bx-drink:before{content:"\ea1d"}.bx-droplet:before{content:"\ea1e"}.bx-dumbbell:before{content:"\ea1f"}.bx-duplicate:before{content:"\ea20"}.bx-edit:before{content:"\ea21"}.bx-edit-alt:before{content:"\ea22"}.bx-envelope:before{content:"\ea23"}.bx-envelope-open:before{content:"\ea24"}.bx-equalizer:before{content:"\ea25"}.bx-eraser:before{content:"\ea26"}.bx-error:before{content:"\ea27"}.bx-error-alt:before{content:"\ea28"}.bx-error-circle:before{content:"\ea29"}.bx-euro:before{content:"\ea2a"}.bx-exclude:before{content:"\ea2b"}.bx-exit:before{content:"\ea2c"}.bx-exit-fullscreen:before{content:"\ea2d"}.bx-expand:before{content:"\ea2e"}.bx-expand-alt:before{content:"\ea2f"}.bx-export:before{content:"\ea30"}.bx-extension:before{content:"\ea31"}.bx-face:before{content:"\ea32"}.bx-fast-forward:before{content:"\ea33"}.bx-fast-forward-circle:before{content:"\ea34"}.bx-female:before{content:"\ea35"}.bx-female-sign:before{content:"\ea36"}.bx-file:before{content:"\ea37"}.bx-file-blank:before{content:"\ea38"}.bx-file-find:before{content:"\ea39"}.bx-film:before{content:"\ea3a"}.bx-filter:before{content:"\ea3b"}.bx-filter-alt:before{content:"\ea3c"}.bx-fingerprint:before{content:"\ea3d"}.bx-first-aid:before{content:"\ea3e"}.bx-first-page:before{content:"\ea3f"}.bx-flag:before{content:"\ea40"}.bx-folder:before{content:"\ea41"}.bx-folder-minus:before{content:"\ea42"}.bx-folder-open:before{content:"\ea43"}.bx-folder-plus:before{content:"\ea44"}.bx-font:before{content:"\ea45"}.bx-font-color:before{content:"\ea46"}.bx-font-family:before{content:"\ea47"}.bx-font-size:before{content:"\ea48"}.bx-food-menu:before{content:"\ea49"}.bx-food-tag:before{content:"\ea4a"}.bx-football:before{content:"\ea4b"}.bx-fridge:before{content:"\ea4c"}.bx-fullscreen:before{content:"\ea4d"}.bx-game:before{content:"\ea4e"}.bx-gas-pump:before{content:"\ea4f"}.bx-ghost:before{content:"\ea50"}.bx-gift:before{content:"\ea51"}.bx-git-branch:before{content:"\ea52"}.bx-git-commit:before{content:"\ea53"}.bx-git-compare:before{content:"\ea54"}.bx-git-merge:before{content:"\ea55"}.bx-git-pull-request:before{content:"\ea56"}.bx-git-repo-forked:before{content:"\ea57"}.bx-glasses:before{content:"\ea58"}.bx-glasses-alt:before{content:"\ea59"}.bx-globe:before{content:"\ea5a"}.bx-globe-alt:before{content:"\ea5b"}.bx-grid:before{content:"\ea5c"}.bx-grid-alt:before{content:"\ea5d"}.bx-grid-horizontal:before{content:"\ea5e"}.bx-grid-small:before{content:"\ea5f"}.bx-grid-vertical:before{content:"\ea60"}.bx-group:before{content:"\ea61"}.bx-handicap:before{content:"\ea62"}.bx-happy:before{content:"\ea63"}.bx-happy-alt:before{content:"\ea64"}.bx-happy-beaming:before{content:"\ea65"}.bx-happy-heart-eyes:before{content:"\ea66"}.bx-hash:before{content:"\ea67"}.bx-hdd:before{content:"\ea68"}.bx-heading:before{content:"\ea69"}.bx-headphone:before{content:"\ea6a"}.bx-health:before{content:"\ea6b"}.bx-heart:before{content:"\ea6c"}.bx-heart-circle:before{content:"\ea6d"}.bx-heart-square:before{content:"\ea6e"}.bx-help-circle:before{content:"\ea6f"}.bx-hide:before{content:"\ea70"}.bx-highlight:before{content:"\ea71"}.bx-history:before{content:"\ea72"}.bx-hive:before{content:"\ea73"}.bx-home:before{content:"\ea74"}.bx-home-alt:before{content:"\ea75"}.bx-home-circle:before{content:"\ea76"}.bx-home-heart:before{content:"\ea77"}.bx-home-smile:before{content:"\ea78"}.bx-horizontal-center:before{content:"\ea79"}.bx-hotel:before{content:"\ea7a"}.bx-hourglass:before{content:"\ea7b"}.bx-id-card:before{content:"\ea7c"}.bx-image:before{content:"\ea7d"}.bx-image-add:before{content:"\ea7e"}.bx-image-alt:before{content:"\ea7f"}.bx-images:before{content:"\ea80"}.bx-import:before{content:"\ea81"}.bx-infinite:before{content:"\ea82"}.bx-info-circle:before{content:"\ea83"}.bx-info-square:before{content:"\ea84"}.bx-intersect:before{content:"\ea85"}.bx-italic:before{content:"\ea86"}.bx-joystick:before{content:"\ea87"}.bx-joystick-alt:before{content:"\ea88"}.bx-joystick-button:before{content:"\ea89"}.bx-key:before{content:"\ea8a"}.bx-label:before{content:"\ea8b"}.bx-landscape:before{content:"\ea8c"}.bx-laptop:before{content:"\ea8d"}.bx-last-page:before{content:"\ea8e"}.bx-laugh:before{content:"\ea8f"}.bx-layer:before{content:"\ea90"}.bx-layer-minus:before{content:"\ea91"}.bx-layer-plus:before{content:"\ea92"}.bx-layout:before{content:"\ea93"}.bx-left-arrow:before{content:"\ea94"}.bx-left-arrow-alt:before{content:"\ea95"}.bx-left-arrow-circle:before{content:"\ea96"}.bx-left-down-arrow-circle:before{content:"\ea97"}.bx-left-indent:before{content:"\ea98"}.bx-left-top-arrow-circle:before{content:"\ea99"}.bx-library:before{content:"\ea9a"}.bx-like:before{content:"\ea9b"}.bx-line-chart:before{content:"\ea9c"}.bx-line-chart-down:before{content:"\ea9d"}.bx-link:before{content:"\ea9e"}.bx-link-alt:before{content:"\ea9f"}.bx-link-external:before{content:"\eaa0"}.bx-lira:before{content:"\eaa1"}.bx-list-check:before{content:"\eaa2"}.bx-list-minus:before{content:"\eaa3"}.bx-list-ol:before{content:"\eaa4"}.bx-list-plus:before{content:"\eaa5"}.bx-list-ul:before{content:"\eaa6"}.bx-loader:before{content:"\eaa7"}.bx-loader-alt:before{content:"\eaa8"}.bx-loader-circle:before{content:"\eaa9"}.bx-location-plus:before{content:"\eaaa"}.bx-lock:before{content:"\eaab"}.bx-lock-alt:before{content:"\eaac"}.bx-lock-open:before{content:"\eaad"}.bx-lock-open-alt:before{content:"\eaae"}.bx-log-in:before{content:"\eaaf"}.bx-log-in-circle:before{content:"\eab0"}.bx-log-out:before{content:"\eab1"}.bx-log-out-circle:before{content:"\eab2"}.bx-low-vision:before{content:"\eab3"}.bx-magnet:before{content:"\eab4"}.bx-mail-send:before{content:"\eab5"}.bx-male:before{content:"\eab6"}.bx-male-sign:before{content:"\eab7"}.bx-map:before{content:"\eab8"}.bx-map-alt:before{content:"\eab9"}.bx-map-pin:before{content:"\eaba"}.bx-mask:before{content:"\eabb"}.bx-medal:before{content:"\eabc"}.bx-meh:before{content:"\eabd"}.bx-meh-alt:before{content:"\eabe"}.bx-meh-blank:before{content:"\eabf"}.bx-memory-card:before{content:"\eac0"}.bx-menu:before{content:"\eac1"}.bx-menu-alt-left:before{content:"\eac2"}.bx-menu-alt-right:before{content:"\eac3"}.bx-merge:before{content:"\eac4"}.bx-message:before{content:"\eac5"}.bx-message-add:before{content:"\eac6"}.bx-message-alt:before{content:"\eac7"}.bx-message-alt-add:before{content:"\eac8"}.bx-message-alt-check:before{content:"\eac9"}.bx-message-alt-detail:before{content:"\eaca"}.bx-message-alt-dots:before{content:"\eacb"}.bx-message-alt-edit:before{content:"\eacc"}.bx-message-alt-error:before{content:"\eacd"}.bx-message-alt-minus:before{content:"\eace"}.bx-message-alt-x:before{content:"\eacf"}.bx-message-check:before{content:"\ead0"}.bx-message-detail:before{content:"\ead1"}.bx-message-dots:before{content:"\ead2"}.bx-message-edit:before{content:"\ead3"}.bx-message-error:before{content:"\ead4"}.bx-message-minus:before{content:"\ead5"}.bx-message-rounded:before{content:"\ead6"}.bx-message-rounded-add:before{content:"\ead7"}.bx-message-rounded-check:before{content:"\ead8"}.bx-message-rounded-detail:before{content:"\ead9"}.bx-message-rounded-dots:before{content:"\eada"}.bx-message-rounded-edit:before{content:"\eadb"}.bx-message-rounded-error:before{content:"\eadc"}.bx-message-rounded-minus:before{content:"\eadd"}.bx-message-rounded-x:before{content:"\eade"}.bx-message-square:before{content:"\eadf"}.bx-message-square-add:before{content:"\eae0"}.bx-message-square-check:before{content:"\eae1"}.bx-message-square-detail:before{content:"\eae2"}.bx-message-square-dots:before{content:"\eae3"}.bx-message-square-edit:before{content:"\eae4"}.bx-message-square-error:before{content:"\eae5"}.bx-message-square-minus:before{content:"\eae6"}.bx-message-square-x:before{content:"\eae7"}.bx-message-x:before{content:"\eae8"}.bx-meteor:before{content:"\eae9"}.bx-microchip:before{content:"\eaea"}.bx-microphone:before{content:"\eaeb"}.bx-microphone-off:before{content:"\eaec"}.bx-minus:before{content:"\eaed"}.bx-minus-back:before{content:"\eaee"}.bx-minus-circle:before{content:"\eaef"}.bx-minus-front:before{content:"\eaf0"}.bx-mobile:before{content:"\eaf1"}.bx-mobile-alt:before{content:"\eaf2"}.bx-mobile-landscape:before{content:"\eaf3"}.bx-mobile-vibration:before{content:"\eaf4"}.bx-money:before{content:"\eaf5"}.bx-moon:before{content:"\eaf6"}.bx-mouse:before{content:"\eaf7"}.bx-mouse-alt:before{content:"\eaf8"}.bx-move:before{content:"\eaf9"}.bx-move-horizontal:before{content:"\eafa"}.bx-move-vertical:before{content:"\eafb"}.bx-movie:before{content:"\eafc"}.bx-movie-play:before{content:"\eafd"}.bx-music:before{content:"\eafe"}.bx-navigation:before{content:"\eaff"}.bx-network-chart:before{content:"\eb00"}.bx-news:before{content:"\eb01"}.bx-no-entry:before{content:"\eb02"}.bx-note:before{content:"\eb03"}.bx-notepad:before{content:"\eb04"}.bx-notification:before{content:"\eb05"}.bx-notification-off:before{content:"\eb06"}.bx-outline:before{content:"\eb07"}.bx-package:before{content:"\eb08"}.bx-paint:before{content:"\eb09"}.bx-paint-roll:before{content:"\eb0a"}.bx-palette:before{content:"\eb0b"}.bx-paperclip:before{content:"\eb0c"}.bx-paper-plane:before{content:"\eb0d"}.bx-paragraph:before{content:"\eb0e"}.bx-paste:before{content:"\eb0f"}.bx-pause:before{content:"\eb10"}.bx-pause-circle:before{content:"\eb11"}.bx-pen:before{content:"\eb12"}.bx-pencil:before{content:"\eb13"}.bx-phone:before{content:"\eb14"}.bx-phone-call:before{content:"\eb15"}.bx-phone-incoming:before{content:"\eb16"}.bx-phone-outgoing:before{content:"\eb17"}.bx-photo-album:before{content:"\eb18"}.bx-pie-chart:before{content:"\eb19"}.bx-pie-chart-alt:before{content:"\eb1a"}.bx-pie-chart-alt-2:before{content:"\eb1b"}.bx-pin:before{content:"\eb1c"}.bx-planet:before{content:"\eb1d"}.bx-play:before{content:"\eb1e"}.bx-play-circle:before{content:"\eb1f"}.bx-plug:before{content:"\eb20"}.bx-plus:before{content:"\eb21"}.bx-plus-circle:before{content:"\eb22"}.bx-plus-medical:before{content:"\eb23"}.bx-pointer:before{content:"\eb24"}.bx-poll:before{content:"\eb25"}.bx-polygon:before{content:"\eb26"}.bx-pound:before{content:"\eb27"}.bx-power-off:before{content:"\eb28"}.bx-printer:before{content:"\eb29"}.bx-pulse:before{content:"\eb2a"}.bx-purchase-tag:before{content:"\eb2b"}.bx-purchase-tag-alt:before{content:"\eb2c"}.bx-pyramid:before{content:"\eb2d"}.bx-question-mark:before{content:"\eb2e"}.bx-radar:before{content:"\eb2f"}.bx-radio:before{content:"\eb30"}.bx-radio-circle:before{content:"\eb31"}.bx-radio-circle-marked:before{content:"\eb32"}.bx-receipt:before{content:"\eb33"}.bx-rectangle:before{content:"\eb34"}.bx-recycle:before{content:"\eb35"}.bx-redo:before{content:"\eb36"}.bx-refresh:before{content:"\eb37"}.bx-rename:before{content:"\eb38"}.bx-repeat:before{content:"\eb39"}.bx-reply:before{content:"\eb3a"}.bx-reply-all:before{content:"\eb3b"}.bx-repost:before{content:"\eb3c"}.bx-reset:before{content:"\eb3d"}.bx-restaurant:before{content:"\eb3e"}.bx-revision:before{content:"\eb3f"}.bx-rewind:before{content:"\eb40"}.bx-rewind-circle:before{content:"\eb41"}.bx-right-arrow:before{content:"\eb42"}.bx-right-arrow-alt:before{content:"\eb43"}.bx-right-arrow-circle:before{content:"\eb44"}.bx-right-down-arrow-circle:before{content:"\eb45"}.bx-right-indent:before{content:"\eb46"}.bx-right-top-arrow-circle:before{content:"\eb47"}.bx-rocket:before{content:"\eb48"}.bx-rotate-left:before{content:"\eb49"}.bx-rotate-right:before{content:"\eb4a"}.bx-rss:before{content:"\eb4b"}.bx-ruble:before{content:"\eb4c"}.bx-ruler:before{content:"\eb4d"}.bx-run:before{content:"\eb4e"}.bx-rupee:before{content:"\eb4f"}.bx-sad:before{content:"\eb50"}.bx-save:before{content:"\eb51"}.bx-scan:before{content:"\eb52"}.bx-screenshot:before{content:"\eb53"}.bx-search:before{content:"\eb54"}.bx-search-alt:before{content:"\eb55"}.bx-search-alt-2:before{content:"\eb56"}.bx-selection:before{content:"\eb57"}.bx-select-multiple:before{content:"\eb58"}.bx-send:before{content:"\eb59"}.bx-server:before{content:"\eb5a"}.bx-shape-circle:before{content:"\eb5b"}.bx-shape-polygon:before{content:"\eb5c"}.bx-shape-square:before{content:"\eb5d"}.bx-shape-triangle:before{content:"\eb5e"}.bx-share:before{content:"\eb5f"}.bx-share-alt:before{content:"\eb60"}.bx-shekel:before{content:"\eb61"}.bx-shield:before{content:"\eb62"}.bx-shield-alt:before{content:"\eb63"}.bx-shield-alt-2:before{content:"\eb64"}.bx-shield-quarter:before{content:"\eb65"}.bx-shield-x:before{content:"\eb66"}.bx-shocked:before{content:"\eb67"}.bx-shopping-bag:before{content:"\eb68"}.bx-show:before{content:"\eb69"}.bx-show-alt:before{content:"\eb6a"}.bx-shuffle:before{content:"\eb6b"}.bx-sidebar:before{content:"\eb6c"}.bx-sitemap:before{content:"\eb6d"}.bx-skip-next:before{content:"\eb6e"}.bx-skip-next-circle:before{content:"\eb6f"}.bx-skip-previous:before{content:"\eb70"}.bx-skip-previous-circle:before{content:"\eb71"}.bx-sleepy:before{content:"\eb72"}.bx-slider:before{content:"\eb73"}.bx-slider-alt:before{content:"\eb74"}.bx-slideshow:before{content:"\eb75"}.bx-smile:before{content:"\eb76"}.bx-sort:before{content:"\eb77"}.bx-sort-alt-2:before{content:"\eb78"}.bx-sort-a-z:before{content:"\eb79"}.bx-sort-down:before{content:"\eb7a"}.bx-sort-up:before{content:"\eb7b"}.bx-sort-z-a:before{content:"\eb7c"}.bx-spa:before{content:"\eb7d"}.bx-space-bar:before{content:"\eb7e"}.bx-spray-can:before{content:"\eb7f"}.bx-spreadsheet:before{content:"\eb80"}.bx-square:before{content:"\eb81"}.bx-square-rounded:before{content:"\eb82"}.bx-star:before{content:"\eb83"}.bx-station:before{content:"\eb84"}.bx-stats:before{content:"\eb85"}.bx-sticker:before{content:"\eb86"}.bx-stop:before{content:"\eb87"}.bx-stop-circle:before{content:"\eb88"}.bx-stopwatch:before{content:"\eb89"}.bx-store:before{content:"\eb8a"}.bx-store-alt:before{content:"\eb8b"}.bx-street-view:before{content:"\eb8c"}.bx-strikethrough:before{content:"\eb8d"}.bx-subdirectory-left:before{content:"\eb8e"}.bx-subdirectory-right:before{content:"\eb8f"}.bx-sun:before{content:"\eb90"}.bx-support:before{content:"\eb91"}.bx-swim:before{content:"\eb92"}.bx-sync:before{content:"\eb93"}.bx-tab:before{content:"\eb94"}.bx-table:before{content:"\eb95"}.bx-tachometer:before{content:"\eb96"}.bx-tag:before{content:"\eb97"}.bx-tag-alt:before{content:"\eb98"}.bx-target-lock:before{content:"\eb99"}.bx-task:before{content:"\eb9a"}.bx-task-x:before{content:"\eb9b"}.bx-taxi:before{content:"\eb9c"}.bx-tennis-ball:before{content:"\eb9d"}.bx-terminal:before{content:"\eb9e"}.bx-test-tube:before{content:"\eb9f"}.bx-text:before{content:"\eba0"}.bx-time:before{content:"\eba1"}.bx-time-five:before{content:"\eba2"}.bx-timer:before{content:"\eba3"}.bx-tired:before{content:"\eba4"}.bx-toggle-left:before{content:"\eba5"}.bx-toggle-right:before{content:"\eba6"}.bx-tone:before{content:"\eba7"}.bx-traffic-cone:before{content:"\eba8"}.bx-train:before{content:"\eba9"}.bx-transfer:before{content:"\ebaa"}.bx-transfer-alt:before{content:"\ebab"}.bx-trash:before{content:"\ebac"}.bx-trash-alt:before{content:"\ebad"}.bx-trending-down:before{content:"\ebae"}.bx-trending-up:before{content:"\ebaf"}.bx-trim:before{content:"\ebb0"}.bx-trip:before{content:"\ebb1"}.bx-trophy:before{content:"\ebb2"}.bx-tv:before{content:"\ebb3"}.bx-underline:before{content:"\ebb4"}.bx-undo:before{content:"\ebb5"}.bx-unite:before{content:"\ebb6"}.bx-unlink:before{content:"\ebb7"}.bx-up-arrow:before{content:"\ebb8"}.bx-up-arrow-alt:before{content:"\ebb9"}.bx-up-arrow-circle:before{content:"\ebba"}.bx-upload:before{content:"\ebbb"}.bx-upside-down:before{content:"\ebbc"}.bx-upvote:before{content:"\ebbd"}.bx-usb:before{content:"\ebbe"}.bx-user:before{content:"\ebbf"}.bx-user-check:before{content:"\ebc0"}.bx-user-circle:before{content:"\ebc1"}.bx-user-minus:before{content:"\ebc2"}.bx-user-pin:before{content:"\ebc3"}.bx-user-plus:before{content:"\ebc4"}.bx-user-voice:before{content:"\ebc5"}.bx-user-x:before{content:"\ebc6"}.bx-vector:before{content:"\ebc7"}.bx-vertical-center:before{content:"\ebc8"}.bx-vial:before{content:"\ebc9"}.bx-video:before{content:"\ebca"}.bx-video-off:before{content:"\ebcb"}.bx-video-plus:before{content:"\ebcc"}.bx-video-recording:before{content:"\ebcd"}.bx-voicemail:before{content:"\ebce"}.bx-volume:before{content:"\ebcf"}.bx-volume-full:before{content:"\ebd0"}.bx-volume-low:before{content:"\ebd1"}.bx-volume-mute:before{content:"\ebd2"}.bx-walk:before{content:"\ebd3"}.bx-wallet:before{content:"\ebd4"}.bx-wallet-alt:before{content:"\ebd5"}.bx-water:before{content:"\ebd6"}.bx-webcam:before{content:"\ebd7"}.bx-wifi:before{content:"\ebd8"}.bx-wifi-0:before{content:"\ebd9"}.bx-wifi-1:before{content:"\ebda"}.bx-wifi-2:before{content:"\ebdb"}.bx-wifi-off:before{content:"\ebdc"}.bx-wind:before{content:"\ebdd"}.bx-window:before{content:"\ebde"}.bx-window-alt:before{content:"\ebdf"}.bx-window-close:before{content:"\ebe0"}.bx-window-open:before{content:"\ebe1"}.bx-windows:before{content:"\ebe2"}.bx-wine:before{content:"\ebe3"}.bx-wink-smile:before{content:"\ebe4"}.bx-wink-tongue:before{content:"\ebe5"}.bx-won:before{content:"\ebe6"}.bx-world:before{content:"\ebe7"}.bx-wrench:before{content:"\ebe8"}.bx-x:before{content:"\ebe9"}.bx-x-circle:before{content:"\ebea"}.bx-yen:before{content:"\ebeb"}.bx-zoom-in:before{content:"\ebec"}.bx-zoom-out:before{content:"\ebed"}.bxs-add-to-queue:before{content:"\ebee"}.bxs-adjust:before{content:"\ebef"}.bxs-adjust-alt:before{content:"\ebf0"}.bxs-alarm:before{content:"\ebf1"}.bxs-alarm-add:before{content:"\ebf2"}.bxs-alarm-exclamation:before{content:"\ebf3"}.bxs-alarm-off:before{content:"\ebf4"}.bxs-alarm-snooze:before{content:"\ebf5"}.bxs-album:before{content:"\ebf6"}.bxs-ambulance:before{content:"\ebf7"}.bxs-analyse:before{content:"\ebf8"}.bxs-angry:before{content:"\ebf9"}.bxs-arch:before{content:"\ebfa"}.bxs-archive:before{content:"\ebfb"}.bxs-archive-in:before{content:"\ebfc"}.bxs-archive-out:before{content:"\ebfd"}.bxs-area:before{content:"\ebfe"}.bxs-arrow-from-bottom:before{content:"\ebff"}.bxs-arrow-from-left:before{content:"\ec00"}.bxs-arrow-from-right:before{content:"\ec01"}.bxs-arrow-from-top:before{content:"\ec02"}.bxs-arrow-to-bottom:before{content:"\ec03"}.bxs-arrow-to-left:before{content:"\ec04"}.bxs-arrow-to-right:before{content:"\ec05"}.bxs-arrow-to-top:before{content:"\ec06"}.bxs-award:before{content:"\ec07"}.bxs-baby-carriage:before{content:"\ec08"}.bxs-backpack:before{content:"\ec09"}.bxs-badge:before{content:"\ec0a"}.bxs-badge-check:before{content:"\ec0b"}.bxs-badge-dollar:before{content:"\ec0c"}.bxs-ball:before{content:"\ec0d"}.bxs-band-aid:before{content:"\ec0e"}.bxs-bank:before{content:"\ec0f"}.bxs-bar-chart-alt-2:before{content:"\ec10"}.bxs-bar-chart-square:before{content:"\ec11"}.bxs-barcode:before{content:"\ec12"}.bxs-baseball:before{content:"\ec13"}.bxs-basket:before{content:"\ec14"}.bxs-basketball:before{content:"\ec15"}.bxs-bath:before{content:"\ec16"}.bxs-battery:before{content:"\ec17"}.bxs-battery-charging:before{content:"\ec18"}.bxs-battery-full:before{content:"\ec19"}.bxs-battery-low:before{content:"\ec1a"}.bxs-bed:before{content:"\ec1b"}.bxs-been-here:before{content:"\ec1c"}.bxs-beer:before{content:"\ec1d"}.bxs-bell:before{content:"\ec1e"}.bxs-bell-minus:before{content:"\ec1f"}.bxs-bell-off:before{content:"\ec20"}.bxs-bell-plus:before{content:"\ec21"}.bxs-bell-ring:before{content:"\ec22"}.bxs-bible:before{content:"\ec23"}.bxs-binoculars:before{content:"\ec24"}.bxs-blanket:before{content:"\ec25"}.bxs-bolt:before{content:"\ec26"}.bxs-bolt-circle:before{content:"\ec27"}.bxs-bomb:before{content:"\ec28"}.bxs-bone:before{content:"\ec29"}.bxs-bong:before{content:"\ec2a"}.bxs-book:before{content:"\ec2b"}.bxs-book-add:before{content:"\ec2c"}.bxs-book-alt:before{content:"\ec2d"}.bxs-book-bookmark:before{content:"\ec2e"}.bxs-book-content:before{content:"\ec2f"}.bxs-book-heart:before{content:"\ec30"}.bxs-bookmark:before{content:"\ec31"}.bxs-bookmark-alt:before{content:"\ec32"}.bxs-bookmark-alt-minus:before{content:"\ec33"}.bxs-bookmark-alt-plus:before{content:"\ec34"}.bxs-bookmark-heart:before{content:"\ec35"}.bxs-bookmark-minus:before{content:"\ec36"}.bxs-bookmark-plus:before{content:"\ec37"}.bxs-bookmarks:before{content:"\ec38"}.bxs-bookmark-star:before{content:"\ec39"}.bxs-book-open:before{content:"\ec3a"}.bxs-book-reader:before{content:"\ec3b"}.bxs-bot:before{content:"\ec3c"}.bxs-bowling-ball:before{content:"\ec3d"}.bxs-box:before{content:"\ec3e"}.bxs-brain:before{content:"\ec3f"}.bxs-briefcase:before{content:"\ec40"}.bxs-briefcase-alt:before{content:"\ec41"}.bxs-briefcase-alt-2:before{content:"\ec42"}.bxs-brightness:before{content:"\ec43"}.bxs-brightness-half:before{content:"\ec44"}.bxs-brush:before{content:"\ec45"}.bxs-brush-alt:before{content:"\ec46"}.bxs-bug:before{content:"\ec47"}.bxs-bug-alt:before{content:"\ec48"}.bxs-building:before{content:"\ec49"}.bxs-building-house:before{content:"\ec4a"}.bxs-buildings:before{content:"\ec4b"}.bxs-bulb:before{content:"\ec4c"}.bxs-bullseye:before{content:"\ec4d"}.bxs-buoy:before{content:"\ec4e"}.bxs-bus:before{content:"\ec4f"}.bxs-business:before{content:"\ec50"}.bxs-bus-school:before{content:"\ec51"}.bxs-cabinet:before{content:"\ec52"}.bxs-cake:before{content:"\ec53"}.bxs-calculator:before{content:"\ec54"}.bxs-calendar:before{content:"\ec55"}.bxs-calendar-alt:before{content:"\ec56"}.bxs-calendar-check:before{content:"\ec57"}.bxs-calendar-edit:before{content:"\ec58"}.bxs-calendar-event:before{content:"\ec59"}.bxs-calendar-exclamation:before{content:"\ec5a"}.bxs-calendar-heart:before{content:"\ec5b"}.bxs-calendar-minus:before{content:"\ec5c"}.bxs-calendar-plus:before{content:"\ec5d"}.bxs-calendar-star:before{content:"\ec5e"}.bxs-calendar-week:before{content:"\ec5f"}.bxs-calendar-x:before{content:"\ec60"}.bxs-camera:before{content:"\ec61"}.bxs-camera-home:before{content:"\ec62"}.bxs-camera-movie:before{content:"\ec63"}.bxs-camera-off:before{content:"\ec64"}.bxs-camera-plus:before{content:"\ec65"}.bxs-capsule:before{content:"\ec66"}.bxs-captions:before{content:"\ec67"}.bxs-car:before{content:"\ec68"}.bxs-car-battery:before{content:"\ec69"}.bxs-car-crash:before{content:"\ec6a"}.bxs-card:before{content:"\ec6b"}.bxs-caret-down-circle:before{content:"\ec6c"}.bxs-caret-down-square:before{content:"\ec6d"}.bxs-caret-left-circle:before{content:"\ec6e"}.bxs-caret-left-square:before{content:"\ec6f"}.bxs-caret-right-circle:before{content:"\ec70"}.bxs-caret-right-square:before{content:"\ec71"}.bxs-caret-up-circle:before{content:"\ec72"}.bxs-caret-up-square:before{content:"\ec73"}.bxs-car-garage:before{content:"\ec74"}.bxs-car-mechanic:before{content:"\ec75"}.bxs-carousel:before{content:"\ec76"}.bxs-cart:before{content:"\ec77"}.bxs-cart-add:before{content:"\ec78"}.bxs-cart-alt:before{content:"\ec79"}.bxs-cart-download:before{content:"\ec7a"}.bxs-car-wash:before{content:"\ec7b"}.bxs-category:before{content:"\ec7c"}.bxs-category-alt:before{content:"\ec7d"}.bxs-cctv:before{content:"\ec7e"}.bxs-certification:before{content:"\ec7f"}.bxs-chalkboard:before{content:"\ec80"}.bxs-chart:before{content:"\ec81"}.bxs-chat:before{content:"\ec82"}.bxs-checkbox:before{content:"\ec83"}.bxs-checkbox-checked:before{content:"\ec84"}.bxs-check-circle:before{content:"\ec85"}.bxs-check-shield:before{content:"\ec86"}.bxs-check-square:before{content:"\ec87"}.bxs-chess:before{content:"\ec88"}.bxs-chevron-down:before{content:"\ec89"}.bxs-chevron-down-circle:before{content:"\ec8a"}.bxs-chevron-down-square:before{content:"\ec8b"}.bxs-chevron-left:before{content:"\ec8c"}.bxs-chevron-left-circle:before{content:"\ec8d"}.bxs-chevron-left-square:before{content:"\ec8e"}.bxs-chevron-right:before{content:"\ec8f"}.bxs-chevron-right-circle:before{content:"\ec90"}.bxs-chevron-right-square:before{content:"\ec91"}.bxs-chevrons-down:before{content:"\ec92"}.bxs-chevrons-left:before{content:"\ec93"}.bxs-chevrons-right:before{content:"\ec94"}.bxs-chevrons-up:before{content:"\ec95"}.bxs-chevron-up:before{content:"\ec96"}.bxs-chevron-up-circle:before{content:"\ec97"}.bxs-chevron-up-square:before{content:"\ec98"}.bxs-chip:before{content:"\ec99"}.bxs-church:before{content:"\ec9a"}.bxs-circle:before{content:"\ec9b"}.bxs-city:before{content:"\ec9c"}.bxs-clinic:before{content:"\ec9d"}.bxs-cloud:before{content:"\ec9e"}.bxs-cloud-download:before{content:"\ec9f"}.bxs-cloud-lightning:before{content:"\eca0"}.bxs-cloud-rain:before{content:"\eca1"}.bxs-cloud-upload:before{content:"\eca2"}.bxs-coffee:before{content:"\eca3"}.bxs-coffee-alt:before{content:"\eca4"}.bxs-coffee-togo:before{content:"\eca5"}.bxs-cog:before{content:"\eca6"}.bxs-coin:before{content:"\eca7"}.bxs-coin-stack:before{content:"\eca8"}.bxs-collection:before{content:"\eca9"}.bxs-color-fill:before{content:"\ecaa"}.bxs-comment:before{content:"\ecab"}.bxs-comment-add:before{content:"\ecac"}.bxs-comment-check:before{content:"\ecad"}.bxs-comment-detail:before{content:"\ecae"}.bxs-comment-dots:before{content:"\ecaf"}.bxs-comment-edit:before{content:"\ecb0"}.bxs-comment-error:before{content:"\ecb1"}.bxs-comment-minus:before{content:"\ecb2"}.bxs-comment-x:before{content:"\ecb3"}.bxs-compass:before{content:"\ecb4"}.bxs-component:before{content:"\ecb5"}.bxs-confused:before{content:"\ecb6"}.bxs-contact:before{content:"\ecb7"}.bxs-conversation:before{content:"\ecb8"}.bxs-cookie:before{content:"\ecb9"}.bxs-cool:before{content:"\ecba"}.bxs-copy:before{content:"\ecbb"}.bxs-copy-alt:before{content:"\ecbc"}.bxs-copyright:before{content:"\ecbd"}.bxs-coupon:before{content:"\ecbe"}.bxs-credit-card:before{content:"\ecbf"}.bxs-credit-card-alt:before{content:"\ecc0"}.bxs-credit-card-front:before{content:"\ecc1"}.bxs-crop:before{content:"\ecc2"}.bxs-crown:before{content:"\ecc3"}.bxs-cube:before{content:"\ecc4"}.bxs-cube-alt:before{content:"\ecc5"}.bxs-cuboid:before{content:"\ecc6"}.bxs-customize:before{content:"\ecc7"}.bxs-cylinder:before{content:"\ecc8"}.bxs-dashboard:before{content:"\ecc9"}.bxs-data:before{content:"\ecca"}.bxs-detail:before{content:"\eccb"}.bxs-devices:before{content:"\eccc"}.bxs-diamond:before{content:"\eccd"}.bxs-dice-1:before{content:"\ecce"}.bxs-dice-2:before{content:"\eccf"}.bxs-dice-3:before{content:"\ecd0"}.bxs-dice-4:before{content:"\ecd1"}.bxs-dice-5:before{content:"\ecd2"}.bxs-dice-6:before{content:"\ecd3"}.bxs-direction-left:before{content:"\ecd4"}.bxs-direction-right:before{content:"\ecd5"}.bxs-directions:before{content:"\ecd6"}.bxs-disc:before{content:"\ecd7"}.bxs-discount:before{content:"\ecd8"}.bxs-dish:before{content:"\ecd9"}.bxs-dislike:before{content:"\ecda"}.bxs-dizzy:before{content:"\ecdb"}.bxs-dock-bottom:before{content:"\ecdc"}.bxs-dock-left:before{content:"\ecdd"}.bxs-dock-right:before{content:"\ecde"}.bxs-dock-top:before{content:"\ecdf"}.bxs-dollar-circle:before{content:"\ece0"}.bxs-donate-blood:before{content:"\ece1"}.bxs-donate-heart:before{content:"\ece2"}.bxs-door-open:before{content:"\ece3"}.bxs-doughnut-chart:before{content:"\ece4"}.bxs-down-arrow:before{content:"\ece5"}.bxs-down-arrow-alt:before{content:"\ece6"}.bxs-down-arrow-circle:before{content:"\ece7"}.bxs-down-arrow-square:before{content:"\ece8"}.bxs-download:before{content:"\ece9"}.bxs-downvote:before{content:"\ecea"}.bxs-drink:before{content:"\eceb"}.bxs-droplet:before{content:"\ecec"}.bxs-droplet-half:before{content:"\eced"}.bxs-dryer:before{content:"\ecee"}.bxs-duplicate:before{content:"\ecef"}.bxs-edit:before{content:"\ecf0"}.bxs-edit-alt:before{content:"\ecf1"}.bxs-edit-location:before{content:"\ecf2"}.bxs-eject:before{content:"\ecf3"}.bxs-envelope:before{content:"\ecf4"}.bxs-envelope-open:before{content:"\ecf5"}.bxs-eraser:before{content:"\ecf6"}.bxs-error:before{content:"\ecf7"}.bxs-error-alt:before{content:"\ecf8"}.bxs-error-circle:before{content:"\ecf9"}.bxs-ev-station:before{content:"\ecfa"}.bxs-exit:before{content:"\ecfb"}.bxs-extension:before{content:"\ecfc"}.bxs-eyedropper:before{content:"\ecfd"}.bxs-face:before{content:"\ecfe"}.bxs-face-mask:before{content:"\ecff"}.bxs-factory:before{content:"\ed00"}.bxs-fast-forward-circle:before{content:"\ed01"}.bxs-file:before{content:"\ed02"}.bxs-file-archive:before{content:"\ed03"}.bxs-file-blank:before{content:"\ed04"}.bxs-file-css:before{content:"\ed05"}.bxs-file-doc:before{content:"\ed06"}.bxs-file-export:before{content:"\ed07"}.bxs-file-find:before{content:"\ed08"}.bxs-file-gif:before{content:"\ed09"}.bxs-file-html:before{content:"\ed0a"}.bxs-file-image:before{content:"\ed0b"}.bxs-file-import:before{content:"\ed0c"}.bxs-file-jpg:before{content:"\ed0d"}.bxs-file-js:before{content:"\ed0e"}.bxs-file-json:before{content:"\ed0f"}.bxs-file-md:before{content:"\ed10"}.bxs-file-pdf:before{content:"\ed11"}.bxs-file-plus:before{content:"\ed12"}.bxs-file-png:before{content:"\ed13"}.bxs-file-txt:before{content:"\ed14"}.bxs-film:before{content:"\ed15"}.bxs-filter-alt:before{content:"\ed16"}.bxs-first-aid:before{content:"\ed17"}.bxs-flag:before{content:"\ed18"}.bxs-flag-alt:before{content:"\ed19"}.bxs-flag-checkered:before{content:"\ed1a"}.bxs-flame:before{content:"\ed1b"}.bxs-flask:before{content:"\ed1c"}.bxs-florist:before{content:"\ed1d"}.bxs-folder:before{content:"\ed1e"}.bxs-folder-minus:before{content:"\ed1f"}.bxs-folder-open:before{content:"\ed20"}.bxs-folder-plus:before{content:"\ed21"}.bxs-food-menu:before{content:"\ed22"}.bxs-fridge:before{content:"\ed23"}.bxs-game:before{content:"\ed24"}.bxs-gas-pump:before{content:"\ed25"}.bxs-ghost:before{content:"\ed26"}.bxs-gift:before{content:"\ed27"}.bxs-graduation:before{content:"\ed28"}.bxs-grid:before{content:"\ed29"}.bxs-grid-alt:before{content:"\ed2a"}.bxs-group:before{content:"\ed2b"}.bxs-guitar-amp:before{content:"\ed2c"}.bxs-hand-down:before{content:"\ed2d"}.bxs-hand-left:before{content:"\ed2e"}.bxs-hand-right:before{content:"\ed2f"}.bxs-hand-up:before{content:"\ed30"}.bxs-happy:before{content:"\ed31"}.bxs-happy-alt:before{content:"\ed32"}.bxs-happy-beaming:before{content:"\ed33"}.bxs-happy-heart-eyes:before{content:"\ed34"}.bxs-hdd:before{content:"\ed35"}.bxs-heart:before{content:"\ed36"}.bxs-heart-circle:before{content:"\ed37"}.bxs-heart-square:before{content:"\ed38"}.bxs-help-circle:before{content:"\ed39"}.bxs-hide:before{content:"\ed3a"}.bxs-home:before{content:"\ed3b"}.bxs-home-circle:before{content:"\ed3c"}.bxs-home-heart:before{content:"\ed3d"}.bxs-home-smile:before{content:"\ed3e"}.bxs-hot:before{content:"\ed3f"}.bxs-hotel:before{content:"\ed40"}.bxs-hourglass:before{content:"\ed41"}.bxs-hourglass-bottom:before{content:"\ed42"}.bxs-hourglass-top:before{content:"\ed43"}.bxs-id-card:before{content:"\ed44"}.bxs-image:before{content:"\ed45"}.bxs-image-add:before{content:"\ed46"}.bxs-image-alt:before{content:"\ed47"}.bxs-inbox:before{content:"\ed48"}.bxs-info-circle:before{content:"\ed49"}.bxs-info-square:before{content:"\ed4a"}.bxs-institution:before{content:"\ed4b"}.bxs-joystick:before{content:"\ed4c"}.bxs-joystick-alt:before{content:"\ed4d"}.bxs-joystick-button:before{content:"\ed4e"}.bxs-key:before{content:"\ed4f"}.bxs-keyboard:before{content:"\ed50"}.bxs-label:before{content:"\ed51"}.bxs-landmark:before{content:"\ed52"}.bxs-landscape:before{content:"\ed53"}.bxs-laugh:before{content:"\ed54"}.bxs-layer:before{content:"\ed55"}.bxs-layer-minus:before{content:"\ed56"}.bxs-layer-plus:before{content:"\ed57"}.bxs-layout:before{content:"\ed58"}.bxs-left-arrow:before{content:"\ed59"}.bxs-left-arrow-alt:before{content:"\ed5a"}.bxs-left-arrow-circle:before{content:"\ed5b"}.bxs-left-arrow-square:before{content:"\ed5c"}.bxs-left-down-arrow-circle:before{content:"\ed5d"}.bxs-left-top-arrow-circle:before{content:"\ed5e"}.bxs-like:before{content:"\ed5f"}.bxs-location-plus:before{content:"\ed60"}.bxs-lock:before{content:"\ed61"}.bxs-lock-alt:before{content:"\ed62"}.bxs-lock-open:before{content:"\ed63"}.bxs-lock-open-alt:before{content:"\ed64"}.bxs-log-in:before{content:"\ed65"}.bxs-log-in-circle:before{content:"\ed66"}.bxs-log-out:before{content:"\ed67"}.bxs-log-out-circle:before{content:"\ed68"}.bxs-low-vision:before{content:"\ed69"}.bxs-magic-wand:before{content:"\ed6a"}.bxs-magnet:before{content:"\ed6b"}.bxs-map:before{content:"\ed6c"}.bxs-map-alt:before{content:"\ed6d"}.bxs-map-pin:before{content:"\ed6e"}.bxs-mask:before{content:"\ed6f"}.bxs-medal:before{content:"\ed70"}.bxs-megaphone:before{content:"\ed71"}.bxs-meh:before{content:"\ed72"}.bxs-meh-alt:before{content:"\ed73"}.bxs-meh-blank:before{content:"\ed74"}.bxs-memory-card:before{content:"\ed75"}.bxs-message:before{content:"\ed76"}.bxs-message-add:before{content:"\ed77"}.bxs-message-alt:before{content:"\ed78"}.bxs-message-alt-add:before{content:"\ed79"}.bxs-message-alt-check:before{content:"\ed7a"}.bxs-message-alt-detail:before{content:"\ed7b"}.bxs-message-alt-dots:before{content:"\ed7c"}.bxs-message-alt-edit:before{content:"\ed7d"}.bxs-message-alt-error:before{content:"\ed7e"}.bxs-message-alt-minus:before{content:"\ed7f"}.bxs-message-alt-x:before{content:"\ed80"}.bxs-message-check:before{content:"\ed81"}.bxs-message-detail:before{content:"\ed82"}.bxs-message-dots:before{content:"\ed83"}.bxs-message-edit:before{content:"\ed84"}.bxs-message-error:before{content:"\ed85"}.bxs-message-minus:before{content:"\ed86"}.bxs-message-rounded:before{content:"\ed87"}.bxs-message-rounded-add:before{content:"\ed88"}.bxs-message-rounded-check:before{content:"\ed89"}.bxs-message-rounded-detail:before{content:"\ed8a"}.bxs-message-rounded-dots:before{content:"\ed8b"}.bxs-message-rounded-edit:before{content:"\ed8c"}.bxs-message-rounded-error:before{content:"\ed8d"}.bxs-message-rounded-minus:before{content:"\ed8e"}.bxs-message-rounded-x:before{content:"\ed8f"}.bxs-message-square:before{content:"\ed90"}.bxs-message-square-add:before{content:"\ed91"}.bxs-message-square-check:before{content:"\ed92"}.bxs-message-square-detail:before{content:"\ed93"}.bxs-message-square-dots:before{content:"\ed94"}.bxs-message-square-edit:before{content:"\ed95"}.bxs-message-square-error:before{content:"\ed96"}.bxs-message-square-minus:before{content:"\ed97"}.bxs-message-square-x:before{content:"\ed98"}.bxs-message-x:before{content:"\ed99"}.bxs-meteor:before{content:"\ed9a"}.bxs-microchip:before{content:"\ed9b"}.bxs-microphone:before{content:"\ed9c"}.bxs-microphone-alt:before{content:"\ed9d"}.bxs-microphone-off:before{content:"\ed9e"}.bxs-minus-circle:before{content:"\ed9f"}.bxs-minus-square:before{content:"\eda0"}.bxs-mobile:before{content:"\eda1"}.bxs-mobile-vibration:before{content:"\eda2"}.bxs-moon:before{content:"\eda3"}.bxs-mouse:before{content:"\eda4"}.bxs-mouse-alt:before{content:"\eda5"}.bxs-movie:before{content:"\eda6"}.bxs-movie-play:before{content:"\eda7"}.bxs-music:before{content:"\eda8"}.bxs-navigation:before{content:"\eda9"}.bxs-network-chart:before{content:"\edaa"}.bxs-news:before{content:"\edab"}.bxs-no-entry:before{content:"\edac"}.bxs-note:before{content:"\edad"}.bxs-notepad:before{content:"\edae"}.bxs-notification:before{content:"\edaf"}.bxs-notification-off:before{content:"\edb0"}.bxs-offer:before{content:"\edb1"}.bxs-package:before{content:"\edb2"}.bxs-paint:before{content:"\edb3"}.bxs-paint-roll:before{content:"\edb4"}.bxs-palette:before{content:"\edb5"}.bxs-paper-plane:before{content:"\edb6"}.bxs-parking:before{content:"\edb7"}.bxs-paste:before{content:"\edb8"}.bxs-pen:before{content:"\edb9"}.bxs-pencil:before{content:"\edba"}.bxs-phone:before{content:"\edbb"}.bxs-phone-call:before{content:"\edbc"}.bxs-phone-incoming:before{content:"\edbd"}.bxs-phone-outgoing:before{content:"\edbe"}.bxs-photo-album:before{content:"\edbf"}.bxs-piano:before{content:"\edc0"}.bxs-pie-chart:before{content:"\edc1"}.bxs-pie-chart-alt:before{content:"\edc2"}.bxs-pie-chart-alt-2:before{content:"\edc3"}.bxs-pin:before{content:"\edc4"}.bxs-pizza:before{content:"\edc5"}.bxs-plane:before{content:"\edc6"}.bxs-plane-alt:before{content:"\edc7"}.bxs-plane-land:before{content:"\edc8"}.bxs-planet:before{content:"\edc9"}.bxs-plane-take-off:before{content:"\edca"}.bxs-playlist:before{content:"\edcb"}.bxs-plug:before{content:"\edcc"}.bxs-plus-circle:before{content:"\edcd"}.bxs-plus-square:before{content:"\edce"}.bxs-pointer:before{content:"\edcf"}.bxs-polygon:before{content:"\edd0"}.bxs-printer:before{content:"\edd1"}.bxs-purchase-tag:before{content:"\edd2"}.bxs-purchase-tag-alt:before{content:"\edd3"}.bxs-pyramid:before{content:"\edd4"}.bxs-quote-alt-left:before{content:"\edd5"}.bxs-quote-alt-right:before{content:"\edd6"}.bxs-quote-left:before{content:"\edd7"}.bxs-quote-right:before{content:"\edd8"}.bxs-quote-single-left:before{content:"\edd9"}.bxs-quote-single-right:before{content:"\edda"}.bxs-radiation:before{content:"\eddb"}.bxs-radio:before{content:"\eddc"}.bxs-receipt:before{content:"\eddd"}.bxs-rectangle:before{content:"\edde"}.bxs-rename:before{content:"\eddf"}.bxs-report:before{content:"\ede0"}.bxs-rewind-circle:before{content:"\ede1"}.bxs-right-arrow:before{content:"\ede2"}.bxs-right-arrow-alt:before{content:"\ede3"}.bxs-right-arrow-circle:before{content:"\ede4"}.bxs-right-arrow-square:before{content:"\ede5"}.bxs-right-down-arrow-circle:before{content:"\ede6"}.bxs-right-top-arrow-circle:before{content:"\ede7"}.bxs-rocket:before{content:"\ede8"}.bxs-ruler:before{content:"\ede9"}.bxs-sad:before{content:"\edea"}.bxs-save:before{content:"\edeb"}.bxs-school:before{content:"\edec"}.bxs-search:before{content:"\eded"}.bxs-search-alt-2:before{content:"\edee"}.bxs-select-multiple:before{content:"\edef"}.bxs-send:before{content:"\edf0"}.bxs-server:before{content:"\edf1"}.bxs-shapes:before{content:"\edf2"}.bxs-share:before{content:"\edf3"}.bxs-share-alt:before{content:"\edf4"}.bxs-shield:before{content:"\edf5"}.bxs-shield-alt-2:before{content:"\edf6"}.bxs-shield-x:before{content:"\edf7"}.bxs-ship:before{content:"\edf8"}.bxs-shocked:before{content:"\edf9"}.bxs-shopping-bag:before{content:"\edfa"}.bxs-shopping-bag-alt:before{content:"\edfb"}.bxs-shopping-bags:before{content:"\edfc"}.bxs-show:before{content:"\edfd"}.bxs-skip-next-circle:before{content:"\edfe"}.bxs-skip-previous-circle:before{content:"\edff"}.bxs-skull:before{content:"\ee00"}.bxs-sleepy:before{content:"\ee01"}.bxs-slideshow:before{content:"\ee02"}.bxs-smile:before{content:"\ee03"}.bxs-sort-alt:before{content:"\ee04"}.bxs-spa:before{content:"\ee05"}.bxs-spray-can:before{content:"\ee06"}.bxs-spreadsheet:before{content:"\ee07"}.bxs-square:before{content:"\ee08"}.bxs-square-rounded:before{content:"\ee09"}.bxs-star:before{content:"\ee0a"}.bxs-star-half:before{content:"\ee0b"}.bxs-sticker:before{content:"\ee0c"}.bxs-stopwatch:before{content:"\ee0d"}.bxs-store:before{content:"\ee0e"}.bxs-store-alt:before{content:"\ee0f"}.bxs-sun:before{content:"\ee10"}.bxs-tachometer:before{content:"\ee11"}.bxs-tag:before{content:"\ee12"}.bxs-tag-alt:before{content:"\ee13"}.bxs-tag-x:before{content:"\ee14"}.bxs-taxi:before{content:"\ee15"}.bxs-tennis-ball:before{content:"\ee16"}.bxs-terminal:before{content:"\ee17"}.bxs-thermometer:before{content:"\ee18"}.bxs-time:before{content:"\ee19"}.bxs-time-five:before{content:"\ee1a"}.bxs-timer:before{content:"\ee1b"}.bxs-tired:before{content:"\ee1c"}.bxs-toggle-left:before{content:"\ee1d"}.bxs-toggle-right:before{content:"\ee1e"}.bxs-tone:before{content:"\ee1f"}.bxs-torch:before{content:"\ee20"}.bxs-to-top:before{content:"\ee21"}.bxs-traffic:before{content:"\ee22"}.bxs-traffic-barrier:before{content:"\ee23"}.bxs-traffic-cone:before{content:"\ee24"}.bxs-train:before{content:"\ee25"}.bxs-trash:before{content:"\ee26"}.bxs-trash-alt:before{content:"\ee27"}.bxs-tree:before{content:"\ee28"}.bxs-trophy:before{content:"\ee29"}.bxs-truck:before{content:"\ee2a"}.bxs-t-shirt:before{content:"\ee2b"}.bxs-tv:before{content:"\ee2c"}.bxs-up-arrow:before{content:"\ee2d"}.bxs-up-arrow-alt:before{content:"\ee2e"}.bxs-up-arrow-circle:before{content:"\ee2f"}.bxs-up-arrow-square:before{content:"\ee30"}.bxs-upside-down:before{content:"\ee31"}.bxs-upvote:before{content:"\ee32"}.bxs-user:before{content:"\ee33"}.bxs-user-account:before{content:"\ee34"}.bxs-user-badge:before{content:"\ee35"}.bxs-user-check:before{content:"\ee36"}.bxs-user-circle:before{content:"\ee37"}.bxs-user-detail:before{content:"\ee38"}.bxs-user-minus:before{content:"\ee39"}.bxs-user-pin:before{content:"\ee3a"}.bxs-user-plus:before{content:"\ee3b"}.bxs-user-rectangle:before{content:"\ee3c"}.bxs-user-voice:before{content:"\ee3d"}.bxs-user-x:before{content:"\ee3e"}.bxs-vector:before{content:"\ee3f"}.bxs-vial:before{content:"\ee40"}.bxs-video:before{content:"\ee41"}.bxs-video-off:before{content:"\ee42"}.bxs-video-plus:before{content:"\ee43"}.bxs-video-recording:before{content:"\ee44"}.bxs-videos:before{content:"\ee45"}.bxs-virus:before{content:"\ee46"}.bxs-virus-block:before{content:"\ee47"}.bxs-volume:before{content:"\ee48"}.bxs-volume-full:before{content:"\ee49"}.bxs-volume-low:before{content:"\ee4a"}.bxs-volume-mute:before{content:"\ee4b"}.bxs-wallet:before{content:"\ee4c"}.bxs-wallet-alt:before{content:"\ee4d"}.bxs-washer:before{content:"\ee4e"}.bxs-watch:before{content:"\ee4f"}.bxs-watch-alt:before{content:"\ee50"}.bxs-webcam:before{content:"\ee51"}.bxs-widget:before{content:"\ee52"}.bxs-window-alt:before{content:"\ee53"}.bxs-wine:before{content:"\ee54"}.bxs-wink-smile:before{content:"\ee55"}.bxs-wink-tongue:before{content:"\ee56"}.bxs-wrench:before{content:"\ee57"}.bxs-x-circle:before{content:"\ee58"}.bxs-x-square:before{content:"\ee59"}.bxs-yin-yang:before{content:"\ee5a"}.bxs-zap:before{content:"\ee5b"}.bxs-zoom-in:before{content:"\ee5c"}.bxs-zoom-out:before{content:"\ee5d"}.bxl-500px:before{content:"\ee5e"}.bxl-adobe:before{content:"\ee5f"}.bxl-airbnb:before{content:"\ee60"}.bxl-algolia:before{content:"\ee61"}.bxl-amazon:before{content:"\ee62"}.bxl-android:before{content:"\ee63"}.bxl-angular:before{content:"\ee64"}.bxl-apple:before{content:"\ee65"}.bxl-audible:before{content:"\ee66"}.bxl-baidu:before{content:"\ee67"}.bxl-behance:before{content:"\ee68"}.bxl-bing:before{content:"\ee69"}.bxl-bitcoin:before{content:"\ee6a"}.bxl-blender:before{content:"\ee6b"}.bxl-blogger:before{content:"\ee6c"}.bxl-bootstrap:before{content:"\ee6d"}.bxl-chrome:before{content:"\ee6e"}.bxl-codepen:before{content:"\ee6f"}.bxl-c-plus-plus:before{content:"\ee70"}.bxl-creative-commons:before{content:"\ee71"}.bxl-css3:before{content:"\ee72"}.bxl-dailymotion:before{content:"\ee73"}.bxl-deviantart:before{content:"\ee74"}.bxl-dev-to:before{content:"\ee75"}.bxl-digg:before{content:"\ee76"}.bxl-digitalocean:before{content:"\ee77"}.bxl-discord:before{content:"\ee78"}.bxl-discourse:before{content:"\ee79"}.bxl-django:before{content:"\ee7a"}.bxl-dribbble:before{content:"\ee7b"}.bxl-dropbox:before{content:"\ee7c"}.bxl-drupal:before{content:"\ee7d"}.bxl-ebay:before{content:"\ee7e"}.bxl-edge:before{content:"\ee7f"}.bxl-etsy:before{content:"\ee80"}.bxl-facebook:before{content:"\ee81"}.bxl-facebook-circle:before{content:"\ee82"}.bxl-facebook-square:before{content:"\ee83"}.bxl-figma:before{content:"\ee84"}.bxl-firebase:before{content:"\ee85"}.bxl-firefox:before{content:"\ee86"}.bxl-flickr:before{content:"\ee87"}.bxl-flickr-square:before{content:"\ee88"}.bxl-foursquare:before{content:"\ee89"}.bxl-git:before{content:"\ee8a"}.bxl-github:before{content:"\ee8b"}.bxl-gitlab:before{content:"\ee8c"}.bxl-google:before{content:"\ee8d"}.bxl-google-cloud:before{content:"\ee8e"}.bxl-google-plus:before{content:"\ee8f"}.bxl-google-plus-circle:before{content:"\ee90"}.bxl-html5:before{content:"\ee91"}.bxl-imdb:before{content:"\ee92"}.bxl-instagram:before{content:"\ee93"}.bxl-instagram-alt:before{content:"\ee94"}.bxl-internet-explorer:before{content:"\ee95"}.bxl-invision:before{content:"\ee96"}.bxl-javascript:before{content:"\ee97"}.bxl-joomla:before{content:"\ee98"}.bxl-jquery:before{content:"\ee99"}.bxl-jsfiddle:before{content:"\ee9a"}.bxl-kickstarter:before{content:"\ee9b"}.bxl-kubernetes:before{content:"\ee9c"}.bxl-less:before{content:"\ee9d"}.bxl-linkedin:before{content:"\ee9e"}.bxl-linkedin-square:before{content:"\ee9f"}.bxl-magento:before{content:"\eea0"}.bxl-mailchimp:before{content:"\eea1"}.bxl-markdown:before{content:"\eea2"}.bxl-mastercard:before{content:"\eea3"}.bxl-medium:before{content:"\eea4"}.bxl-medium-old:before{content:"\eea5"}.bxl-medium-square:before{content:"\eea6"}.bxl-messenger:before{content:"\eea7"}.bxl-microsoft:before{content:"\eea8"}.bxl-microsoft-teams:before{content:"\eea9"}.bxl-nodejs:before{content:"\eeaa"}.bxl-ok-ru:before{content:"\eeab"}.bxl-opera:before{content:"\eeac"}.bxl-patreon:before{content:"\eead"}.bxl-paypal:before{content:"\eeae"}.bxl-periscope:before{content:"\eeaf"}.bxl-pinterest:before{content:"\eeb0"}.bxl-pinterest-alt:before{content:"\eeb1"}.bxl-play-store:before{content:"\eeb2"}.bxl-pocket:before{content:"\eeb3"}.bxl-product-hunt:before{content:"\eeb4"}.bxl-python:before{content:"\eeb5"}.bxl-quora:before{content:"\eeb6"}.bxl-react:before{content:"\eeb7"}.bxl-redbubble:before{content:"\eeb8"}.bxl-reddit:before{content:"\eeb9"}.bxl-redux:before{content:"\eeba"}.bxl-sass:before{content:"\eebb"}.bxl-shopify:before{content:"\eebc"}.bxl-skype:before{content:"\eebd"}.bxl-slack:before{content:"\eebe"}.bxl-slack-old:before{content:"\eebf"}.bxl-snapchat:before{content:"\eec0"}.bxl-soundcloud:before{content:"\eec1"}.bxl-spotify:before{content:"\eec2"}.bxl-spring-boot:before{content:"\eec3"}.bxl-squarespace:before{content:"\eec4"}.bxl-stack-overflow:before{content:"\eec5"}.bxl-stripe:before{content:"\eec6"}.bxl-telegram:before{content:"\eec7"}.bxl-trello:before{content:"\eec8"}.bxl-tumblr:before{content:"\eec9"}.bxl-tux:before{content:"\eeca"}.bxl-twitch:before{content:"\eecb"}.bxl-twitter:before{content:"\eecc"}.bxl-unsplash:before{content:"\eecd"}.bxl-vimeo:before{content:"\eece"}.bxl-visa:before{content:"\eecf"}.bxl-vk:before{content:"\eed0"}.bxl-vuejs:before{content:"\eed1"}.bxl-whatsapp:before{content:"\eed2"}.bxl-whatsapp-square:before{content:"\eed3"}.bxl-wikipedia:before{content:"\eed4"}.bxl-windows:before{content:"\eed5"}.bxl-wix:before{content:"\eed6"}.bxl-wordpress:before{content:"\eed7"}.bxl-yahoo:before{content:"\eed8"}.bxl-yelp:before{content:"\eed9"}.bxl-youtube:before{content:"\eeda"}.bxl-zoom:before{content:"\eedb"} -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/boxicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/public/fonts/boxicons.eot -------------------------------------------------------------------------------- /public/fonts/boxicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/public/fonts/boxicons.ttf -------------------------------------------------------------------------------- /public/fonts/boxicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/public/fonts/boxicons.woff -------------------------------------------------------------------------------- /public/fonts/boxicons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/public/fonts/boxicons.woff2 -------------------------------------------------------------------------------- /public/img/logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/public/img/logo-dark.png -------------------------------------------------------------------------------- /public/img/logo-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/public/img/logo-light.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | frontend
-------------------------------------------------------------------------------- /public/js/app.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";var e={6928:(e,t,n)=>{n(6992),n(8674),n(9601),n(7727);var r=n(9963),o=n(6252),l={class:"bg-gray-100 dark:bg-gray-900 flex h-screen text-gray-500 dark:text-gray-300"};function s(e,t,n,r,s,a){var i=(0,o.up)("Nav"),c=(0,o.up)("Aside"),u=(0,o.up)("Main"),d=(0,o.up)("CreateLogModal");return(0,o.wg)(),(0,o.j4)("div",l,[(0,o.Wm)(i),(0,o.Wm)(c),(0,o.Wm)(u),(0,o.Wm)(d)])}const a=n.p+"img/logo-dark.png",i=n.p+"img/logo-light.png";var c={class:"nav bg-white text-4xl dark:bg-gray-900 flex flex-col items-center px-2 space-y-4 border-r border-gray-300 dark:border-gray-700"},u={key:0,src:a,alt:"logo",class:"w-20"},d={key:1,src:i,alt:"logo",class:"w-16 md:w-20"},g=(0,o.Wm)("i",{class:"bx bxs-cylinder"},null,-1),f=(0,o.Wm)("i",{class:"bx bxs-plus-square"},null,-1),p=(0,o.Wm)("div",{class:"flex-grow"},null,-1),m={key:0,class:"bx bxs-moon bx-tada"},b={key:1,class:"bx bx-sun bx-tada"},x=(0,o.Wm)("i",{class:"bx bxl-github"},null,-1);function h(e,t,n,r,l,s){return(0,o.wg)(),(0,o.j4)("nav",c,["dark"===e.store.theme?((0,o.wg)(),(0,o.j4)("img",u)):((0,o.wg)(),(0,o.j4)("img",d)),(0,o.Wm)("button",{onClick:t[1]||(t[1]=function(t){return e.store.toggle("aside")}),class:[e.store.aside?"text-blue-600 dark:text-blue-400":"","focus:outline-none"]},[g],2),(0,o.Wm)("button",{onClick:t[2]||(t[2]=function(t){return e.store.refreshLogs()}),class:[e.store.loading_logs?"text-blue-600 dark:text-blue-400":"","focus:outline-none"]},[(0,o.Wm)("i",{class:["bx bx-refresh",{"bx-spin":e.store.loading_logs}]},null,2)],2),(0,o.Wm)("button",{onClick:t[3]||(t[3]=function(t){return e.store.toggle("create_log_modal")}),class:[e.store.create_log_modal?"text-blue-600 dark:text-blue-400":"","focus:outline-none"]},[f],2),p,(0,o.Wm)("button",{onClick:t[4]||(t[4]=function(){var t;return e.store.toggleTheme&&(t=e.store).toggleTheme.apply(t,arguments)}),class:"focus:outline-none"},["dark"===e.store.theme?((0,o.wg)(),(0,o.j4)("i",m)):((0,o.wg)(),(0,o.j4)("i",b))]),(0,o.Wm)("a",{href:e.store.config.github_url,target:"_blank"},[x],8,["href"])])}var v=n(7171);n(2222),n(2772),n(561),n(6699),n(2023),n(5666);const y={app_env:window.blanket_app_env||"Local",base_url:window.blanket_base_url||"http://blanket-app.test/blanket",github_url:"https://github.com/ahmadwaleed/laravel-blanket",logs_per_page:window.blanket_logs_per_page||10};var w=n(5506),k=n(4624),_=n(9669),W=n.n(_);function j(e){var t={"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},n=function(n,r){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=o.data||{},s=o.config||{},a=o.headers||{},i=W()((0,k.Z)((0,k.Z)({url:n,method:r,baseURL:e,data:l},s),{},{headers:(0,k.Z)((0,k.Z)({},t),a)}));return o["wantsRawResponse"]?i:i.then((function(e){return e.data}))["catch"]((function(e){return console.log("Fetch error: ".concat(e)),e.response?e.response:e.message}))},r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n(e,"get",t)},o=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n(e,"post",(0,k.Z)((0,k.Z)({},{data:t}),r))};return{call:n,get:r,post:o}}var C=n(1278),L=n(2610),Z=n(3609),R=function(){function e(t){(0,C.Z)(this,e),this.scheme=t}return(0,L.Z)(e,[{key:"suggestPreferredScheme",value:function(){var t=e.isDark();return"dark"===this.scheme&&t?"light":"light"===this.scheme&&t?"auto":"dark"!==this.scheme||t?"light"!==this.scheme||t?"auto"===this.scheme&&t?"light":"auto"!==this.scheme||t?void 0:"dark":"dark":"auto"}}],[{key:"isDark",value:function(){return(0,Z.QA)().value}}]),e}(),S=(0,w.Q_)({id:"default",state:function(){return{config:y,http:j(y.base_url),aside:!0,theme:(0,Z._)("theme","auto"),logs:[],log_counts:[],loading_logs:!1,retrying_log:null,expanded_logs:(0,Z._)("expanded_logs",[]),logs_end:!1,take:y.logs_per_page,create_log_modal:!1,log_method:"get",host_filter:"",hosts:[],loading_hosts:!1,log_filters:{host:"",method:"all"},is_mobile:!1}},actions:{setup:function(){var e=this;return(0,v.Z)(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return e.togglePreferredTheme(),e.fetchHosts(),t.next=4,e.fetchLogs();case 4:(0,Z.yU)(document.body,(function(t){var n=t[0],r=n.contentRect.width;r<1024?(e.aside=!1,e.is_mobile=!0):e.is_mobile=!1}));case 5:case"end":return t.stop()}}),t)})))()},toggle:function(e){this[e]=!this[e]},toggleTheme:function(){var e=new R(this.theme);this.theme=e.suggestPreferredScheme()},togglePreferredTheme:function(){var e=this;(0,o.YP)((function(){return e.theme}),(function(e){var t=R.isDark(),n="auto"===e&&t||"dark"===e;n?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")}),{immediate:!0})},fetchLogs:function(){var e=this;return(0,v.Z)(regeneratorRuntime.mark((function t(){var n,r,o,l,s;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return e.loading_logs=!0,t.next=3,e.http.get("/logs?take=".concat(e.take,"&filter_host=").concat(e.log_filters.host,"&filter_method=").concat(e.log_filters.method));case 3:n=t.sent,r=n.take,o=n.end,l=n.logs,s=n.counts,e.logs=l,e.take=r,e.logs_end=o,e.log_counts=s,e.loading_logs=!1;case 13:case"end":return t.stop()}}),t)})))()},fetchHosts:function(){var e=this;this.loading_hosts=!0,this.http.get("/hosts/filter?host_filter=".concat(this.host_filter)).then((function(t){e.loading_hosts=!1,e.hosts=t}))},refreshLogs:function(){var e=this;return(0,v.Z)(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return e.take=y.logs_per_page,t.next=3,e.fetchLogs();case 3:case"end":return t.stop()}}),t)})))()},retryLog:function(e){var t=this;this.retrying_log=e,this.http.post("/logs/".concat(e,"/retry")).then(function(){var e=(0,v.Z)(regeneratorRuntime.mark((function e(n){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t.retrying_log=!1,e.next=3,t.refreshLogs();case 3:t.retrying_log=null;case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())},deleteLog:function(e){var t=this;return(0,v.Z)(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:return n.next=2,t.http.call("/logs/".concat(e),"delete");case 2:return n.next=4,t.refreshLogs();case 4:case"end":return n.stop()}}),n)})))()},clearAll:function(){var e=this;return(0,v.Z)(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,e.http.call("/logs/truncate","delete");case 2:return t.next=4,e.refreshLogs();case 4:case"end":return t.stop()}}),t)})))()},toggleLog:function(e){this.toggleExpandedArray("log_expand_".concat(e))},toggleExpandedArray:function(e){var t=this.expanded_logs.indexOf(e);-1!==t?this.expanded_logs.splice(t,1):this.expanded_logs.push(e)},isLogExpanded:function(e){return this.expanded_logs.includes("log_expand_".concat(e))},submitLogForm:function(){var e=this;this.http.post("/logs",{log_method:this.log_method}).then(function(){var t=(0,v.Z)(regeneratorRuntime.mark((function t(n){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return e.log_method="get",e.create_log_modal=!1,t.next=4,e.refreshLogs();case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())}}});const T=(0,o.aZ)({setup:function(){return{store:S()}}});T.render=h;const O=T;var H={class:"sticky top-0 px-2 pb-6 bg-gray-100 dark:bg-gray-900 block md:flex items-center justify-between"},P={key:0,class:"mt-6 space-y-3"},z={class:"w-full h-[30vh] flex items-center justify-center"},A={key:1,class:"text-center"},q=(0,o.Wm)("div",{class:"uppercase text-xl font-bold text-gray-600"},"No logs found :(",-1),M=(0,o.Wm)("div",{class:"text-gray-400 mt-2"},"Try to clear filters or send few request...",-1),E={key:2,class:"uppercase text-xl font-light"};function F(e,t,n,r,l,s){var a=(0,o.up)("host-filter-dropdown"),i=(0,o.up)("Log"),c=(0,o.up)("Loading"),u=(0,o.up)("infinite-scroll");return(0,o.wg)(),(0,o.j4)("main",{class:[e.store.is_mobile&&e.store.aside?"hidden":"","main flex-grow px-4 py-6 h-full"]},[(0,o.Wm)(u,{onScrollToEnd:t[2]||(t[2]=function(t){return!e.store.logs_end&&e.store.fetchLogs()}),style:{height:"calc(100%)"},class:"overflow-auto overflow-x-hidden relative"},{default:(0,o.w5)((function(){return[(0,o.Wm)("div",H,[(0,o.Wm)(a),(0,o.Wm)("button",{onClick:t[1]||(t[1]=function(){return e.clearAll&&e.clearAll.apply(e,arguments)}),class:"mt-2 w-full bg-white md:w-40 dark:bg-gray-900 px-4 py-1 rounded-md dark:border dark:border-gray-600"},"Clear All logs")]),e.store.logs.length?((0,o.wg)(),(0,o.j4)("div",P,[((0,o.wg)(!0),(0,o.j4)(o.HY,null,(0,o.Ko)(e.store.logs,(function(e){return(0,o.wg)(),(0,o.j4)(i,{key:e.id,log:e},null,8,["log"])})),128))])):(0,o.ry)("",!0),(0,o.Wm)("div",z,[e.store.loading_logs?((0,o.wg)(),(0,o.j4)(c,{key:0})):e.store.logs.length?e.store.logs_end?((0,o.wg)(),(0,o.j4)("div",E,"End Of File")):(0,o.ry)("",!0):((0,o.wg)(),(0,o.j4)("div",A,[q,M]))])]})),_:1})],2)}var D=n(3577),N={class:"bg-white dark:bg-gray-900 dark:border dark:border-gray-700 shadow-sm"},I={class:"p-4 flex flex-col md:flex-row items-center rounded-md space-y-4 md:space-x-4"},J={class:"flex-grow"},Y={class:"flex items-center space-x-2"},$={class:"flex items-center space-x-4 mt-2"},U={class:"flex items-center space-x-4"},X=(0,o.Wm)("i",{class:"bx bxs-trash-alt text-2xl hover:text-red-600 dark:hover:text-red-600"},null,-1),K={key:0},V={class:"flex items-center"},G={class:"rounded-md rounded-t-none overflow-auto h-96"},Q={class:"flex flex-col flex-col-reverse md:flex-row items-center justify-between md:justify-end space-x-8 p-4"},B={key:0,class:"bx bx-check text-xl"},ee={key:1,class:"bx bx-clipboard text-xl"},te=(0,o.Wm)("span",null,"Copy to clipboard",-1);function ne(e,t,n,r,l,s){var a=(0,o.up)("Divider"),i=(0,o.up)("pretty-json");return(0,o.wg)(),(0,o.j4)("div",N,[(0,o.Wm)("div",I,[(0,o.Wm)("span",{class:[e.methodClass,"text-white","dark:text-gray-900","rounded-lg","font-semibold","w-24","py-1","text-center"]},(0,D.zw)(e.log.method),3),(0,o.Wm)("div",J,[(0,o.Wm)("div",Y,[(0,o.Wm)("a",{href:e.log.url,class:"font-bold text-sm underline text-blue-600 dark:text-blue-400"},"http://...",8,["href"]),(0,o.Wm)("h2",null,(0,D.zw)(e.log.path),1)]),(0,o.Wm)("div",$,[(0,o.Wm)("span",{class:["font-bold",e.statusClass]},"Status: "+(0,D.zw)(e.log.status),3),(0,o.Wm)("span",null,(0,D.zw)(e.store.config.app_env),1),(0,o.Wm)("span",null,(0,D.zw)(e.log.created_at),1)])]),(0,o.Wm)("div",U,[(0,o.Wm)("button",{class:"focus:outline-none bg-gray-200 dark:bg-gray-700 rounded-md px-2 py-2",onClick:t[1]||(t[1]=function(t){return e.store.retryLog(e.log.id)})},[(0,o.Wm)("i",{class:[{"bx-spin":e.store.retrying_log===e.log.id},"bx bx-revision text-2xl hover:text-blue-600 dark:hover:text-blue-400"]},null,2)]),(0,o.Wm)("button",{onClick:t[2]||(t[2]=function(t){return e.store.deleteLog(e.log.id)}),class:"focus:outline-none bg-gray-200 dark:bg-gray-700 rounded-md px-2 py-2"},[X]),(0,o.Wm)("button",{class:[e.store.isLogExpanded(e.log.id)?"bg-blue-600 dark:bg-blue-400":"bg-gray-200 dark:bg-gray-700","focus:outline-none rounded-md px-2 py-2"],onClick:t[3]||(t[3]=function(t){return e.store.toggleLog(e.log.id)})},[(0,o.Wm)("i",{class:[e.store.isLogExpanded(e.log.id)?"text-white hover:text-white":"","bx bx-expand-alt text-2xl hover:text-blue-600 dark:hover:text-blue-400"]},null,2)],2)])]),e.store.isLogExpanded(e.log.id)?((0,o.wg)(),(0,o.j4)("div",K,[(0,o.Wm)(a),(0,o.Wm)("div",V,[(0,o.Wm)("button",{onClick:t[4]||(t[4]=function(t){return e.activeTab="request"}),class:["request"===e.activeTab?"text-blue-600 dark:text-blue-400 border-b-4 border-rounded-b-lg border-blue-600 dark:border-blue-400":"","font-semibold focus:outline-none p-4"]},"Request",2),(0,o.Wm)("button",{onClick:t[5]||(t[5]=function(t){return e.activeTab="response"}),class:["response"===e.activeTab?"text-blue-600 dark:text-blue-400 border-b-4 border-rounded-b-lg border-blue-600 dark:border-blue-400":"","font-semibold focus:outline-none p-4"]},"Response",2)]),(0,o.Wm)("div",G,["request"===e.activeTab?((0,o.wg)(),(0,o.j4)(i,{key:0,content:JSON.stringify(e.log.request)},null,8,["content"])):((0,o.wg)(),(0,o.j4)(i,{key:1,content:JSON.stringify(e.log.response)},null,8,["content"]))]),(0,o.Wm)(a),(0,o.Wm)("div",Q,[(0,o.Wm)("button",{onClick:t[6]||(t[6]=function(t){return e.store.toggleLog(e.log.id)}),class:"px-4 focus:outline-none"},"Close"),(0,o.Wm)("button",{onClick:t[7]||(t[7]=function(){return e.copyToClipboard&&e.copyToClipboard.apply(e,arguments)}),class:"focus:outline-none px-3 py-1 mb-4 md:mb-0 flex items-center space-x-2 text-white dark:text-gray-900 bg-blue-600 dark:bg-blue-400 rounded-md"},[e.copied?((0,o.wg)(),(0,o.j4)("i",B)):((0,o.wg)(),(0,o.j4)("i",ee)),te])])])):(0,o.ry)("",!0)])}n(1058),n(2564);var re=n(2262),oe=n(640),le=n.n(oe);function se(e,t,n){return e>=t&&e<=n}n(4916),n(5306);const ae=(0,o.aZ)({name:"PrettyJson",props:{content:{type:String}},setup:function(e){var t=(0,re.iH)(null),n=function(e){return e=e.replace(/&/g,"&").replace(//g,">"),e.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,(function(e){var t="number";return/^"/.test(e)?t=/:$/.test(e)?"key":"string":/true|false/.test(e)?t="boolean":/null/.test(e)&&(t="null"),''+e+""}))};return(0,o.bv)((function(){var r=JSON.stringify(JSON.parse(e.content),null,3);t.value.innerHTML=n(r)})),function(){return(0,o.h)("pre",{ref:t,class:"p-4 text-white bg-gray-700 whitespace-pre-wrap break-all break-words"})}}}),ie=ae,ce=(0,o.aZ)({props:{log:{type:Object,required:!0}},components:{PrettyJson:ie},setup:function(e){var t=(0,o.Fl)((function(){var t=e.log.method.toLowerCase();return"get"===t?"bg-green-400":"post"===t?"bg-yellow-200":"put"===t?"bg-indigo-500":"patch"===t?"bg-yellow-600":"delete"===t?"bg-red-400":""})),n=(0,o.Fl)((function(){var t=parseInt(e.log.status);return se(t,100,299)?"text-blue-600 dark:text-blue-400":se(t,300,399)?"text-indigo-500":"text-red-500"})),r=(0,re.iH)(!1),l=(0,re.iH)("request"),s=function(){var t="request"===l.value?JSON.stringify(e.log.request):JSON.stringify(e.log.response);le()(t),r.value=!0};return(0,o.YP)(r,(function(e){e&&setTimeout((function(){return r.value=!1}),3e3)})),{copied:r,activeTab:l,statusClass:n,methodClass:t,copyToClipboard:s,store:S()}}});ce.render=ne;const ue=ce;function de(e,t,n,r,l,s){return(0,o.wg)(),(0,o.j4)("div",{onScroll:t[1]||(t[1]=function(){return e.scrollCallback&&e.scrollCallback.apply(e,arguments)})},[(0,o.WI)(e.$slots,"default")],32)}const ge=(0,o.aZ)({emits:["scroll-to-end"],setup:function(e,t){var n=t.emit,r=__.throttle((function(){n("scroll-to-end")}),500,{leading:!0,trailing:!1}),o=function(e){return e.target.offsetHeight+e.target.scrollTop>=e.target.scrollHeight&&r()};return{scrollCallback:o}}});ge.render=de;const fe=ge;var pe={class:"relative focus-within:text-blue-600 dark:focus-within:text-blue-400"},me={class:"absolute inset-y-0 left-0 flex items-center pl-1"},be={type:"submit",class:"focus:outline-none focus:shadow-outline"},xe={key:1,class:"bx bx-search text-2xl"},he={class:"bg-white dark:bg-gray-900 w-full md:w-96 mt-1 text-lg font-sm border border-gray-100 dark:border-gray-700 rounded-md shadow-md"},ve={class:"block space-y-2 text-blue-600 dark:text-blue-400 underline"};function ye(e,t,n,l,s,a){var i=(0,o.up)("Loading"),c=(0,o.up)("popper");return(0,o.wg)(),(0,o.j4)(c,{placement:"bottom-start"},{trigger:(0,o.w5)((function(n){var l=n.toggle;return[(0,o.Wm)("form",{onClick:t[2]||(t[2]=(0,r.iM)((function(){}),["prevent"]))},[(0,o.Wm)("div",pe,[(0,o.Wm)("span",me,[(0,o.Wm)("button",be,[e.store.loading_hosts?((0,o.wg)(),(0,o.j4)(i,{key:0,size:"2xl"})):((0,o.wg)(),(0,o.j4)("i",xe))])]),(0,o.wy)((0,o.Wm)("input",{onFocus:l,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.store.host_filter=t}),type:"search",name:"q",class:"text-sm p-1 w-full md:w-96 dark:bg-gray-700 rounded-md pl-10 focus:outline-none",placeholder:"Search base URL...",autocomplete:"off"},null,40,["onFocus"]),[[r.nr,e.store.host_filter]])])])]})),default:(0,o.w5)((function(){return[(0,o.Wm)("div",he,[(0,o.Wm)("ul",ve,[((0,o.wg)(!0),(0,o.j4)(o.HY,null,(0,o.Ko)(e.store.hosts,(function(t){return(0,o.wg)(),(0,o.j4)("li",{onClick:function(n){return e.store.log_filters.host=t},class:"hover:bg-blue-50 dark:hover:bg-gray-700 px-4 py-2 cursor-pointer"},(0,D.zw)(t),9,["onClick"])})),256))])])]})),_:1})}var we=(0,o.HX)("data-v-86fcba5c");(0,o.dD)("data-v-86fcba5c");var ke={ref:"root"},_e={ref:"trigger"},We={ref:"content"};(0,o.Cn)();var je=we((function(e,t,n,l,s,a){return(0,o.wg)(),(0,o.j4)("div",ke,[(0,o.Wm)("div",_e,[(0,o.WI)(e.$slots,"trigger",{toggle:e.toggle},void 0,!0)],512),(0,o.wy)((0,o.Wm)("div",We,[(0,o.WI)(e.$slots,"default",{},void 0,!0)],512),[[r.F8,e.visibility]])],512)})),Ce=n(7211);const Le=(0,o.aZ)({name:"Popper",props:{placement:{type:String,default:"bottom"}},setup:function(e){var t=(0,re.iH)(null),n=(0,re.iH)(null),r=(0,re.iH)(null),l=(0,re.iH)(!1),s=function(){return l.value=!l.value},a=function(e){return t.value&&e.target!==t.value&&!t.value.contains(e.target)&&(l.value=!1)};return(0,o.bv)((function(){return document.addEventListener("click",a)})),(0,o.Ah)((function(){return document.removeEventListener("click",a)})),(0,o.bv)((function(){return(0,o.YP)(l,(function(t){return t&&(0,Ce.fi)(n.value,r.value,{placement:e.placement})}),{immediate:!0})})),{root:t,trigger:n,content:r,visibility:l,toggle:s,clickOutside:a}}});Le.render=je,Le.__scopeId="data-v-86fcba5c";const Ze=Le,Re=(0,o.aZ)({name:"HostFilterDropdown",components:{Popper:Ze},setup:function(){var e=S();return(0,o.YP)((function(){return e.host_filter}),(function(){__.debounce((function(){return e.fetchHosts()}),500)()})),{store:e}}});Re.render=ye;const Se=Re,Te=(0,o.aZ)({components:{Log:ue,InfiniteScroll:fe,HostFilterDropdown:Se},setup:function(){var e=S(),t=function(){var t=confirm("Are you sure? you want to clear all the logs.");t&&e.clearAll()};return(0,o.YP)((function(){return e.log_filters}),(function(t){var n=t.host;n&&(e.host_filter=n),__.debounce((function(){return e.fetchLogs()}),500)()}),{deep:!0}),{store:e,clearAll:t}}});Te.render=F;const Oe=Te;var He=(0,o.Wm)("h2",{class:"text-center text-lg"},"View by Methods",-1),Pe={class:"flex flex-col mt-6 space-y-4"},ze={class:"flex items-center space-x-1 focus:outline-none"},Ae={key:0,class:"bx bxs-checkbox text-2xl"},qe={key:1,class:"bx bx-checkbox text-2xl"},Me=(0,o.Wm)("span",null,"All",-1),Ee={class:"flex items-center space-x-1 focus:outline-none"},Fe={key:0,class:"bx bxs-checkbox text-2xl"},De={key:1,class:"bx bx-checkbox text-2xl"},Ne=(0,o.Wm)("span",null,"Get",-1),Ie={class:"flex items-center space-x-1 focus:outline-none"},Je={key:0,class:"bx bxs-checkbox text-2xl"},Ye={key:1,class:"bx bx-checkbox text-2xl"},$e=(0,o.Wm)("span",null,"Post",-1),Ue={class:"flex items-center space-x-1 focus:outline-none"},Xe={key:0,class:"bx bxs-checkbox text-2xl"},Ke={key:1,class:"bx bx-checkbox text-2xl"},Ve=(0,o.Wm)("span",null,"Put",-1),Ge={class:"flex items-center space-x-1 focus:outline-none"},Qe={key:0,class:"bx bxs-checkbox text-2xl"},Be={key:1,class:"bx bx-checkbox text-2xl"},et=(0,o.Wm)("span",null,"Patch",-1),tt={class:"flex items-center space-x-1 focus:outline-none"},nt={key:0,class:"bx bxs-checkbox text-2xl"},rt={key:1,class:"bx bx-checkbox text-2xl"},ot=(0,o.Wm)("span",null,"Delete",-1);function lt(e,t,n,r,l,s){return(0,o.wg)(),(0,o.j4)("div",{class:[e.store.aside?"flex flex-grow lg:flex-grow-0":"hidden","aside w-80 px-8 py-6 flex flex-col"]},[He,(0,o.Wm)("ul",Pe,[(0,o.Wm)("li",{onClick:t[1]||(t[1]=function(t){return e.store.log_filters.method="all"}),class:"filter-item"},[(0,o.Wm)("button",ze,["all"===e.store.log_filters.method?((0,o.wg)(),(0,o.j4)("i",Ae)):((0,o.wg)(),(0,o.j4)("i",qe)),Me]),(0,o.Wm)("span",null,(0,D.zw)(e.store.log_counts.all),1)]),(0,o.Wm)("li",{onClick:t[2]||(t[2]=function(t){return e.store.log_filters.method="get"}),class:"filter-item"},[(0,o.Wm)("button",Ee,["get"===e.store.log_filters.method?((0,o.wg)(),(0,o.j4)("i",Fe)):((0,o.wg)(),(0,o.j4)("i",De)),Ne]),(0,o.Wm)("span",null,(0,D.zw)(e.store.log_counts.get),1)]),(0,o.Wm)("li",{onClick:t[3]||(t[3]=function(t){return e.store.log_filters.method="post"}),class:"filter-item"},[(0,o.Wm)("button",Ie,["post"===e.store.log_filters.method?((0,o.wg)(),(0,o.j4)("i",Je)):((0,o.wg)(),(0,o.j4)("i",Ye)),$e]),(0,o.Wm)("span",null,(0,D.zw)(e.store.log_counts.post),1)]),(0,o.Wm)("li",{onClick:t[4]||(t[4]=function(t){return e.store.log_filters.method="put"}),class:"filter-item"},[(0,o.Wm)("button",Ue,["put"===e.store.log_filters.method?((0,o.wg)(),(0,o.j4)("i",Xe)):((0,o.wg)(),(0,o.j4)("i",Ke)),Ve]),(0,o.Wm)("span",null,(0,D.zw)(e.store.log_counts.put),1)]),(0,o.Wm)("li",{onClick:t[5]||(t[5]=function(t){return e.store.log_filters.method="patch"}),class:"filter-item"},[(0,o.Wm)("button",Ge,["patch"===e.store.log_filters.method?((0,o.wg)(),(0,o.j4)("i",Qe)):((0,o.wg)(),(0,o.j4)("i",Be)),et]),(0,o.Wm)("span",null,(0,D.zw)(e.store.log_counts.patch),1)]),(0,o.Wm)("li",{onClick:t[6]||(t[6]=function(t){return e.store.log_filters.method="delete"}),class:"filter-item"},[(0,o.Wm)("button",tt,["delete"===e.store.log_filters.method?((0,o.wg)(),(0,o.j4)("i",nt)):((0,o.wg)(),(0,o.j4)("i",rt)),ot]),(0,o.Wm)("span",null,(0,D.zw)(e.store.log_counts["delete"]),1)])])],2)}const st=(0,o.aZ)({setup:function(){return{store:S()}}});st.render=lt;const at=st;var it=(0,o.HX)("data-v-0d027d9c");(0,o.dD)("data-v-0d027d9c");var ct=(0,o.Wm)("div",{class:"text-3xl text-gray-900 dark:text-gray-300"},"Log A Request",-1),ut={class:"grid grid-cols-3 gap-4"},dt={class:"pl-2 uppercase"},gt={class:"flex items-center justify-center space-x-8 p-4"},ft=(0,o.Wm)("button",{class:"px-3 py-1 flex items-center space-x-2 text-white dark:text-gray-900 bg-blue-600 dark:bg-blue-400 rounded-md"}," Submit ",-1);(0,o.Cn)();var pt=it((function(e,t,n,l,s,a){var i=(0,o.up)("modal");return e.store.create_log_modal?((0,o.wg)(),(0,o.j4)(i,{key:0,onClose:t[4]||(t[4]=function(t){return e.store.toggle("create_log_modal")})},{default:it((function(){return[(0,o.Wm)("form",{onSubmit:t[3]||(t[3]=(0,r.iM)((function(){var t;return e.store.submitLogForm&&(t=e.store).submitLogForm.apply(t,arguments)}),["prevent"])),class:"space-y-6"},[ct,(0,o.Wm)("div",ut,[((0,o.wg)(!0),(0,o.j4)(o.HY,null,(0,o.Ko)(e.methods,(function(n){return(0,o.wg)(),(0,o.j4)("label",null,[(0,o.wy)((0,o.Wm)("input",{value:n,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.store.log_method=t}),type:"radio",name:"method"},null,8,["value"]),[[r.G2,e.store.log_method]]),(0,o.Wm)("span",dt,(0,D.zw)(n),1)])})),256))]),(0,o.Wm)("div",gt,[(0,o.Wm)("button",{onClick:t[2]||(t[2]=function(t){return e.store.toggle("create_log_modal")})}," Cancel "),ft])],32)]})),_:1})):(0,o.ry)("",!0)}));function mt(e,t,n,l,s,a){return(0,o.wg)(),(0,o.j4)("div",{onClick:t[2]||(t[2]=function(t){return e.$emit("close")}),class:"fixed inset-0 w-full h-full bg-black bg-opacity-75 dark:bg-opacity-90 z-20 overflow-auto"},[(0,o.Wm)("div",{onClick:t[1]||(t[1]=(0,r.iM)((function(){}),["stop"])),class:"mx-auto w-full max-w-lg bg-white dark:bg-gray-900 my-24 rounded-lg p-6 space-y-10"},[(0,o.WI)(e.$slots,"default")])])}const bt=(0,o.aZ)({name:"Modal",emits:["close"],setup:function(){document.body.style.overflow="hidden",(0,o.Ah)((function(){return document.body.style.overflow="auto"}))}});bt.render=mt;const xt=bt,ht=(0,o.aZ)({name:"CreateRequestModal",components:{Modal:xt},setup:function(){var e=S(),t=["get","post","put","patch","delete"];return{store:e,methods:t}}});ht.render=pt,ht.__scopeId="data-v-0d027d9c";const vt=ht,yt=(0,o.aZ)({components:{Nav:O,Aside:at,Main:Oe,CreateLogModal:vt},setup:function(){var e=S();e.setup()}});yt.render=s;const wt=yt;var kt=n(6486),_t=n.n(kt),Wt={class:"p-[.5px] bg-gray-300 dark:bg-gray-700 w-full"};function jt(e,t){return(0,o.wg)(),(0,o.j4)("div",Wt)}const Ct={};Ct.render=jt;const Lt=Ct;function Zt(e,t,n,r,l,s){return(0,o.wg)(),(0,o.j4)("i",{class:["bx bx-loader-alt bx-spin",e.textSize]},null,2)}const Rt=(0,o.aZ)({props:{size:{type:String,default:"4xl"}},setup:function(e){var t=(0,o.Fl)((function(){return"text-".concat(e.size)}));return{textSize:t}}});Rt.render=Zt;const St=Rt;window.__=_t();var Tt=(0,r.ri)(wt);Tt.component("Divider",Lt),Tt.component("Loading",St),Tt.use((0,w.WB)()),Tt.config.globalProperties.config=y,Tt.mount("#app")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var l=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(l.exports,l,l.exports,n),l.loaded=!0,l.exports}n.m=e,(()=>{var e=[];n.O=(t,r,o,l)=>{if(!r){var s=1/0;for(c=0;c=l)&&Object.keys(n.O).every((e=>n.O[e](r[i])))?r.splice(i--,1):(a=!1,l0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[r,o,l]}})(),(()=>{n.n=e=>{var t=e&&e.__esModule?()=>e["default"]:()=>e;return n.d(t,{a:t}),t}})(),(()=>{n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}})(),(()=>{n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()})(),(()=>{n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e)})(),(()=>{n.p="/vendor/blanket/"})(),(()=>{var e={143:0};n.O.j=t=>0===e[t];var t=(t,r)=>{var o,l,[s,a,i]=r,c=0;for(o in a)n.o(a,o)&&(n.m[o]=a[o]);if(i)var u=i(n);for(t&&t(r);cn(6928)));r=n.O(r)})(); 2 | //# sourceMappingURL=app.js.map -------------------------------------------------------------------------------- /public/js/app.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack://frontend/./src/App.vue","webpack://frontend/./src/assets/logo-dark.png","webpack://frontend/./src/assets/logo-light.png","webpack://frontend/./src/components/Nav.vue","webpack://frontend/./src/config.js","webpack://frontend/./src/functions/useHttp.js","webpack://frontend/./src/ColorSchemeDetector.js","webpack://frontend/./src/store/index.js","webpack://frontend/./src/components/Nav.vue?d0bf","webpack://frontend/./src/components/Main.vue","webpack://frontend/./src/components/Log.vue","webpack://frontend/./src/utils/index.js","webpack://frontend/./src/components/PrettyJson.vue","webpack://frontend/./src/components/PrettyJson.vue?fb14","webpack://frontend/./src/components/Log.vue?7fb8","webpack://frontend/./src/components/InfiniteScroll.vue","webpack://frontend/./src/components/InfiniteScroll.vue?35f4","webpack://frontend/./src/components/HostFilterDropdown.vue","webpack://frontend/./src/components/Popper.vue","webpack://frontend/./src/components/Popper.vue?a6fd","webpack://frontend/./src/components/HostFilterDropdown.vue?fb65","webpack://frontend/./src/components/Main.vue?24f4","webpack://frontend/./src/components/Aside.vue","webpack://frontend/./src/components/Aside.vue?9c16","webpack://frontend/./src/components/CreateLogModal.vue","webpack://frontend/./src/components/Modal.vue","webpack://frontend/./src/components/Modal.vue?eb61","webpack://frontend/./src/components/CreateLogModal.vue?53ce","webpack://frontend/./src/App.vue?d5d2","webpack://frontend/./src/components/Divider.vue","webpack://frontend/./src/components/Divider.vue?7d9c","webpack://frontend/./src/components/Loading.vue","webpack://frontend/./src/components/Loading.vue?8f15","webpack://frontend/./src/main.js","webpack://frontend/webpack/bootstrap","webpack://frontend/webpack/runtime/chunk loaded","webpack://frontend/webpack/runtime/compat get default export","webpack://frontend/webpack/runtime/define property getters","webpack://frontend/webpack/runtime/global","webpack://frontend/webpack/runtime/hasOwnProperty shorthand","webpack://frontend/webpack/runtime/make namespace object","webpack://frontend/webpack/runtime/node module decorator","webpack://frontend/webpack/runtime/publicPath","webpack://frontend/webpack/runtime/jsonp chunk loading","webpack://frontend/webpack/startup"],"names":["class","src","alt","store","theme","toggle","aside","refreshLogs","loading_logs","create_log_modal","toggleTheme","href","config","github_url","target","app_env","window","blanket_app_env","base_url","blanket_base_url","logs_per_page","blanket_logs_per_page","useHttp","baseURL","defaultHeaders","call","url","method","options","data","headers","promise","axios","then","response","error","console","log","message","get","post","ColorSchemeDetector","scheme","this","isDark","usePreferredDark","value","useStore","defineStore","id","state","http","useLocalStorage","logs","log_counts","retrying_log","expanded_logs","logs_end","take","log_method","host_filter","hosts","loading_hosts","log_filters","host","is_mobile","actions","setup","togglePreferredTheme","fetchHosts","fetchLogs","useResizeObserver","document","body","entries","entry","width","contentRect","key","colorSchemeDetector","suggestPreferredScheme","watch","browserInDarkMode","dark","documentElement","classList","add","remove","immediate","end","counts","retryLog","_","deleteLog","clearAll","toggleLog","toggleExpandedArray","index","indexOf","splice","push","isLogExpanded","includes","submitLogForm","style","length","methodClass","path","statusClass","status","created_at","activeTab","content","JSON","stringify","request","copyToClipboard","copied","between","n","min","max","name","props","type","String","root","beautifyJson","json","replace","match","cls","test","parse","innerHTML","h","ref","Object","required","components","PrettyJson","toLowerCase","code","parseInt","setTimeout","scrollCallback","emits","emit","trigger","__","throttle","leading","trailing","e","offsetHeight","scrollTop","scrollHeight","placement","size","placeholder","autocomplete","visibility","default","clickOutside","contains","addEventListener","removeEventListener","Popper","debounce","Log","InfiniteScroll","HostFilterDropdown","ok","confirm","deep","all","put","patch","methods","$emit","overflow","Modal","Nav","Aside","Main","CreateLogModal","render","script","textSize","lodash","app","createApp","App","component","Divider","Loading","use","createPinia","globalProperties","mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","nmd","paths","children","p","installedChunks","143","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"mappings":"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","file":"js/app.js","sourcesContent":["\n\n","export default __webpack_public_path__ + \"img/logo-dark.png\";","export default __webpack_public_path__ + \"img/logo-light.png\";","\n\n","export default {\n app_env : window.blanket_app_env || 'Local',\n base_url : window.blanket_base_url || 'http://blanket-app.test/blanket',\n github_url : 'https://github.com/ahmadwaleed/laravel-blanket',\n logs_per_page : window.blanket_logs_per_page || 10,\n}\n","\nimport axios from 'axios'\n\nexport default function useHttp(baseURL) {\n const defaultHeaders = {\n 'Content-Type': 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n }\n\n const call = (url, method, options = {}) => {\n const data = options.data || {}\n const config = options.config || {}\n const headers = options.headers || {}\n\n const promise = axios({\n url: url,\n method: method,\n baseURL: baseURL,\n data: data,\n ...config,\n headers: { ...defaultHeaders, ...headers },\n })\n\n if (options['wantsRawResponse']) {\n return promise;\n }\n\n return (\n promise\n .then(response => {\n return response.data\n })\n .catch(error => {\n console.log(`Fetch error: ${error}`)\n return error.response ? error.response : error.message\n })\n )\n }\n\n const get = (url, options = {}) => call(url, 'get', options)\n const post = (url, data, options = {}) => call(url, 'post', {...{data: data}, ...options})\n\n return { call, get, post }\n}","import { usePreferredDark } from \"@vueuse/core\"\n\nexport default class ColorSchemeDetector {\n constructor(scheme) {\n this.scheme = scheme\n }\n\n static isDark() {\n return usePreferredDark().value\n }\n\n suggestPreferredScheme() {\n const isDark = ColorSchemeDetector.isDark()\n if (this.scheme === 'dark' && isDark) return 'light'\n if (this.scheme === 'light' && isDark) return 'auto'\n if (this.scheme === 'dark' && !isDark) return 'auto'\n if (this.scheme === 'light' && !isDark) return 'dark'\n if (this.scheme === 'auto' && isDark) return 'light'\n if (this.scheme === 'auto' && !isDark) return 'dark'\n }\n}","import { watch } from 'vue'\nimport config from '@/config'\nimport { defineStore } from 'pinia'\nimport useHttp from '@/functions/useHttp'\nimport ColorSchemeDetector from '@/ColorSchemeDetector'\nimport { useLocalStorage, useResizeObserver } from '@vueuse/core'\n\nexport const useStore = defineStore({\n id: 'default',\n\n state: () => ({\n config: config,\n http: useHttp(config.base_url),\n aside: true,\n theme: useLocalStorage('theme', 'auto'),\n logs: [],\n log_counts: [],\n loading_logs: false,\n retrying_log: null,\n expanded_logs: useLocalStorage('expanded_logs', []),\n logs_end: false,\n take: config.logs_per_page,\n create_log_modal: false,\n log_method: 'get',\n host_filter: '',\n hosts: [],\n loading_hosts: false,\n log_filters: {\n host: '',\n method: 'all'\n },\n is_mobile: false,\n }),\n\n actions: {\n async setup() {\n this.togglePreferredTheme()\n this.fetchHosts()\n await this.fetchLogs()\n\n useResizeObserver(document.body, (entries) => {\n const entry = entries[0]\n const { width } = entry.contentRect\n if (width < 1024) {\n this.aside = false\n this.is_mobile = true\n } else {\n this.is_mobile = false\n }\n })\n },\n\n toggle(key) {\n this[key] = !this[key]\n },\n\n toggleTheme() {\n const colorSchemeDetector = new ColorSchemeDetector(this.theme)\n this.theme = colorSchemeDetector.suggestPreferredScheme()\n },\n\n togglePreferredTheme() {\n watch(() => this.theme, scheme => {\n let browserInDarkMode = ColorSchemeDetector.isDark()\n let dark = (scheme === 'auto' && browserInDarkMode) || scheme === 'dark'\n if (dark) {\n document.documentElement.classList.add('dark')\n return\n }\n\n document.documentElement.classList.remove('dark')\n }, {immediate: true})\n },\n\n async fetchLogs() {\n this.loading_logs = true\n const { take, end, logs, counts } = await this.http.get(`/logs?take=${this.take}&filter_host=${this.log_filters.host}&filter_method=${this.log_filters.method}`)\n this.logs = logs\n this.take = take\n this.logs_end = end\n this.log_counts = counts\n this.loading_logs = false\n },\n\n fetchHosts() {\n this.loading_hosts = true\n this.http.get(`/hosts/filter?host_filter=${this.host_filter}`)\n .then(hosts => {\n this.loading_hosts = false\n this.hosts = hosts\n })\n },\n\n async refreshLogs() {\n this.take = config.logs_per_page\n await this.fetchLogs()\n },\n\n retryLog(id) {\n this.retrying_log = id\n this.http.post(`/logs/${id}/retry`).then(async (_) => {\n this.retrying_log = false\n await this.refreshLogs()\n this.retrying_log = null\n })\n },\n\n async deleteLog(id) {\n await this.http.call(`/logs/${id}`, 'delete')\n await this.refreshLogs()\n },\n\n async clearAll() {\n await this.http.call(`/logs/truncate`, 'delete')\n await this.refreshLogs()\n },\n\n toggleLog(id) {\n this.toggleExpandedArray(`log_expand_${id}`)\n },\n\n toggleExpandedArray(key) {\n let index = this.expanded_logs.indexOf(key)\n if (index === -1) {\n this.expanded_logs.push(key)\n return\n }\n\n this.expanded_logs.splice(index, 1)\n },\n\n isLogExpanded(id) {\n return this.expanded_logs.includes(`log_expand_${id}`)\n },\n\n submitLogForm() {\n this.http.post('/logs', { log_method: this.log_method })\n .then(async (_) => {\n this.log_method = 'get'\n this.create_log_modal = false\n await this.refreshLogs()\n })\n },\n }\n})","import { render } from \"./Nav.vue?vue&type=template&id=3f1214fb\"\nimport script from \"./Nav.vue?vue&type=script&lang=js\"\nexport * from \"./Nav.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","\n\n\n","\n\n","export function between(n, min, max) {\n return n >= min && n <= max;\n}\n","\n\n","import script from \"./PrettyJson.vue?vue&type=script&lang=js\"\nexport * from \"./PrettyJson.vue?vue&type=script&lang=js\"\n\nimport \"./PrettyJson.vue?vue&type=style&index=0&id=4eed5b44&lang=css\"\n\nexport default script","import { render } from \"./Log.vue?vue&type=template&id=68ef78f5\"\nimport script from \"./Log.vue?vue&type=script&lang=js\"\nexport * from \"./Log.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","\n\n","import { render } from \"./InfiniteScroll.vue?vue&type=template&id=137731c9\"\nimport script from \"./InfiniteScroll.vue?vue&type=script&lang=js\"\nexport * from \"./InfiniteScroll.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","\n\n","\n\n\n\n","import { render } from \"./Popper.vue?vue&type=template&id=86fcba5c&scoped=true\"\nimport script from \"./Popper.vue?vue&type=script&lang=js\"\nexport * from \"./Popper.vue?vue&type=script&lang=js\"\nscript.render = render\nscript.__scopeId = \"data-v-86fcba5c\"\n\nexport default script","import { render } from \"./HostFilterDropdown.vue?vue&type=template&id=ce6521d4\"\nimport script from \"./HostFilterDropdown.vue?vue&type=script&lang=js\"\nexport * from \"./HostFilterDropdown.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","import { render } from \"./Main.vue?vue&type=template&id=49a55b13\"\nimport script from \"./Main.vue?vue&type=script&lang=js\"\nexport * from \"./Main.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","\n\n\n\n","import { render } from \"./Aside.vue?vue&type=template&id=87bde08e\"\nimport script from \"./Aside.vue?vue&type=script&lang=js\"\nexport * from \"./Aside.vue?vue&type=script&lang=js\"\n\nimport \"./Aside.vue?vue&type=style&index=0&id=87bde08e&lang=css\"\nscript.render = render\n\nexport default script","\n\n\n\n","\n","import { render } from \"./Modal.vue?vue&type=template&id=0885445d\"\nimport script from \"./Modal.vue?vue&type=script&lang=js\"\nexport * from \"./Modal.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","import { render } from \"./CreateLogModal.vue?vue&type=template&id=0d027d9c&scoped=true\"\nimport script from \"./CreateLogModal.vue?vue&type=script&lang=js\"\nexport * from \"./CreateLogModal.vue?vue&type=script&lang=js\"\nscript.render = render\nscript.__scopeId = \"data-v-0d027d9c\"\n\nexport default script","import { render } from \"./App.vue?vue&type=template&id=470859b2\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","","import { render } from \"./Divider.vue?vue&type=template&id=97ff094a\"\nconst script = {}\nscript.render = render\n\nexport default script","\n\n","import { render } from \"./Loading.vue?vue&type=template&id=3481a6a4\"\nimport script from \"./Loading.vue?vue&type=script&lang=js\"\nexport * from \"./Loading.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","import { createApp } from 'vue'\nimport './tailwind.css'\nimport App from './App.vue'\nimport lodash from 'lodash'\nimport config from './config'\nimport { createPinia } from 'pinia'\nimport 'boxicons/css/boxicons.min.css'\nimport Divider from './components/Divider'\nimport Loading from './components/Loading'\n\nwindow.__ = lodash\n\nconst app = createApp(App)\napp.component('Divider', Divider)\napp.component('Loading', Loading)\napp.use(createPinia())\napp.config.globalProperties.config = config\napp.mount('#app')\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tresult = fn();\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/vendor/blanket/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) var result = runtime(__webpack_require__);\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], () => (__webpack_require__(6928)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"sourceRoot":""} -------------------------------------------------------------------------------- /resources/views/show.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Laravel Blanket 9 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | get('/')->uses(Ahmadwaleed\Blanket\Http\Controllers\ViewLogController::class); 6 | $router->get('/logs')->uses([Ahmadwaleed\Blanket\Http\Controllers\LogController::class, 'index']); 7 | $router->post('/logs')->uses([Ahmadwaleed\Blanket\Http\Controllers\LogController::class, 'store']); 8 | $router->delete('/logs/truncate')->uses(Ahmadwaleed\Blanket\Http\Controllers\TruncateLogController::class); 9 | $router->delete('/logs/{log}')->uses([Ahmadwaleed\Blanket\Http\Controllers\LogController::class, 'destroy']); 10 | $router->post('/logs/{log}/retry')->uses(Ahmadwaleed\Blanket\Http\Controllers\RetryLogController::class); 11 | $router->get('/hosts/filter')->uses(Ahmadwaleed\Blanket\Http\Controllers\FilterHostController::class); -------------------------------------------------------------------------------- /screenshot-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/screenshot-dark.png -------------------------------------------------------------------------------- /screenshot-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmadWaleed/laravel-blanket/eeb6ec9d5d21a1c3b7b93d77c67e180fb6fc6cf9/screenshot-light.png -------------------------------------------------------------------------------- /src/BlanketServiceProvider.php: -------------------------------------------------------------------------------- 1 | app->runningInConsole()) { 15 | $this->publishes([ 16 | __DIR__ . '/../config/blanket.php' => base_path('config/blanket.php'), 17 | ], 'blanket-config'); 18 | $this->publishes([ 19 | __DIR__ . '/../public' => base_path('public/vendor/blanket'), 20 | ], 'blanket-assets'); 21 | 22 | $this->publishes([ 23 | __DIR__ . '/../database/migrations' => base_path('database/migrations'), 24 | ], 'blanket-migrations'); 25 | 26 | $this->commands([ 27 | Console\InstallCommand::class, 28 | ]); 29 | } 30 | 31 | /** @var Router $router */ 32 | $router = $this->app['router']; 33 | 34 | $router->group($this->routeAttributes(), function () use (&$router) { 35 | return include __DIR__ . "/../routes/api.php"; 36 | }); 37 | 38 | $this->app['events']->listen(ResponseReceived::class, LogClientRequest::class); 39 | } 40 | 41 | public function register() 42 | { 43 | $this->mergeConfigFrom(__DIR__ . '/../config/blanket.php', 'blanket'); 44 | $this->loadViewsFrom(__DIR__ . '/../resources/views', 'blanket'); 45 | $this->loadMigrationsFrom(__DIR__.'/../database/migrations'); 46 | } 47 | 48 | private function routeAttributes(): array 49 | { 50 | return [ 51 | 'prefix' => $this->app['config']->get('blanket.path'), 52 | 'middleware' => $this->app['config']->get('blanket.middlewares'), 53 | ]; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/Console/InstallCommand.php: -------------------------------------------------------------------------------- 1 | comment('Publishing Blanket Assets...'); 26 | $this->callSilent('vendor:publish', ['--tag' => 'blanket-assets']); 27 | 28 | $this->comment('Publishing Blanket Configuration...'); 29 | $this->callSilent('vendor:publish', ['--tag' => 'blanket-config']); 30 | 31 | $this->info('Blanket scaffolding installed successfully.'); 32 | 33 | return 0; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/Http/Controllers/FilterHostController.php: -------------------------------------------------------------------------------- 1 | select('host') 15 | ->distinct('host') 16 | ->when( 17 | $request->filled('host_filter'), 18 | fn (Builder $query) => 19 | $query->where('host', 'LIKE', "%{$request->host_filter}%") 20 | ) 21 | ->take(5) 22 | ->get() 23 | ->pluck('host'); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/Http/Controllers/LogController.php: -------------------------------------------------------------------------------- 1 | get('take', $length); 16 | 17 | $logs = Log::query() 18 | ->when( 19 | $request->filled('filter_host'), 20 | fn (Builder $query) => 21 | $query->where('host', $request->get('filter_host')) 22 | ) 23 | ->when( 24 | $request->filled('filter_method') && $request->filter_method !== 'all', 25 | fn (Builder $query) => 26 | $query->where('method', strtoupper($request->get('filter_method'))) 27 | ) 28 | ->latest() 29 | ->take($take) 30 | ->get(); 31 | 32 | $totalCount = Log::count(); 33 | 34 | return [ 35 | 'take' => $totalCount > $take ? $take + $length : $take, 36 | 'end' => $totalCount <= $take, 37 | 'logs' => $logs, 38 | 'counts' => Log::counts(), 39 | ]; 40 | } 41 | 42 | public function store(Request $request) 43 | { 44 | $method = $request->get('log_method', 'get'); 45 | $body = ['title' => 'foo', 'body' => 'bar', 'userId' => 1]; 46 | $http = Http::baseUrl('https://jsonplaceholder.typicode.com')->withHeaders([ 47 | 'Content-type' => 'application/json; charset=UTF-8', 48 | ]); 49 | 50 | match ($method) { 51 | 'get' => $http->get('/posts/1'), 52 | 'post' => $http->post('/posts', $body), 53 | 'put' => $http->put('/posts/1', $body), 54 | 'patch' => $http->patch('/posts/1', $body), 55 | 'delete' => $http->delete('/posts/1'), 56 | }; 57 | 58 | return response()->noContent(); 59 | } 60 | 61 | public function destroy($id) 62 | { 63 | $log = Log::findOrFail($id); 64 | $log->delete(); 65 | 66 | return response()->noContent(); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/Http/Controllers/RetryLogController.php: -------------------------------------------------------------------------------- 1 | method); 15 | $request = $log->request; 16 | 17 | if ($request['is_multipart'] ?? false) { 18 | $http = Http::attach( 19 | $request['payload']['name'], 20 | $request['payload']['content'], 21 | $request['payload']['filename'], 22 | $request['payload']['headers'], 23 | ); 24 | } else { 25 | $http = Http::withBody($request['body'], $request['headers']['Content-Type'] ?? ''); 26 | } 27 | 28 | $http->withHeaders($request['headers'])->{$method}($log->url); 29 | 30 | return response()->noContent(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Http/Controllers/TruncateLogController.php: -------------------------------------------------------------------------------- 1 | truncate(); 12 | 13 | return response()->noContent(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Http/Controllers/ViewLogController.php: -------------------------------------------------------------------------------- 1 | request; 21 | $response = $event->response; 22 | $hidden = config('blanket.hide_sensitive_data'); 23 | $host = parse_url($request->url(), PHP_URL_HOST); 24 | 25 | rescue( 26 | fn () => 27 | Log::create([ 28 | 'host' => $host, 29 | 'url' => $request->url(), 30 | 'request' => [ 31 | 'body' => $request->body(), 32 | 'headers' => $this->hideParameters($request->headers(), $hidden['headers'] ?? []), 33 | 'payload' => $this->hideParameters($this->payload($request), $hidden['request'] ?? []), 34 | 'is_multipart' => $request->isMultipart(), 35 | ], 36 | 'method' => $request->method(), 37 | 'status' => $response->status(), 38 | 'response' => [ 39 | 'headers' => $this->hideParameters($response->headers(), $hidden['headers'] ?? []), 40 | 'body' => ! is_array($this->response($response)) 41 | ? Arr::wrap($response) 42 | : $this->hideParameters($this->response($response), $hidden['response'] ?? []), 43 | ], 44 | 'created_at' => now(), 45 | ]) 46 | ); 47 | } 48 | 49 | private function payload(Request $request): null | array 50 | { 51 | if (! $request->isMultipart()) { 52 | return $request->data(); 53 | } 54 | 55 | return collect($request->data())->map(function ($data) { 56 | return [ 57 | 'name' => $data['name'] ?? $data['filename'] ?? null, 58 | 'filename' => $data['filename'] ?? null, 59 | 'size' => (strlen($data['content']) / 1000).'KB', 60 | 'headers' => $data['headers'] ?? [], 61 | 'content' => $data['content'], 62 | ]; 63 | })->toArray(); 64 | } 65 | 66 | private function response(Response $response): array | string 67 | { 68 | if ($response->redirect()) { 69 | return Arr::wrap('Redirected to Location: '.$response->header('Location')); 70 | } 71 | 72 | $content = is_string($response->body()) ? $response->body() : '*** unexpected response ***'; 73 | 74 | if (! is_string($content)) { 75 | return $content; 76 | } 77 | 78 | if (is_array(json_decode($content, true)) && json_last_error() === JSON_ERROR_NONE) { 79 | return $this->contentInLimits($content) 80 | ? json_decode($content, true) 81 | : '*** Purge by blanket ***'; 82 | } 83 | 84 | if (Str::startsWith(strtolower($response->header('Content-Type')), 'text/plain')) { 85 | return $this->contentInLimits($content) ? $content : '*** Purge by blanket ***'; 86 | } 87 | 88 | return $content; 89 | } 90 | 91 | protected function hideParameters($data, $hidden): mixed 92 | { 93 | foreach ($hidden as $parameter) { 94 | if (Arr::get($data, $parameter)) { 95 | Arr::set($data, $parameter, '********'); 96 | } 97 | } 98 | 99 | return $data; 100 | } 101 | 102 | private function contentInLimits(string $content): bool 103 | { 104 | return mb_strlen($content) / 1000 <= (int) config('blanket.log_response_limit', 64); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/Models/Log.php: -------------------------------------------------------------------------------- 1 | 'array', 'response' => 'array', 'created_at', 'datetime']; 21 | 22 | public function prunable(): Builder 23 | { 24 | return static::query()->where('created_at', '<=', config('blanket.prune_logs_duration')); 25 | } 26 | 27 | public function getPathAttribute(): string 28 | { 29 | return parse_url($this->url, PHP_URL_PATH) ?? ''; 30 | } 31 | 32 | public function getCreatedAtAttribute(?string $date): ?string 33 | { 34 | return Carbon::parse($date)->diffForHumans(); 35 | } 36 | 37 | public static function counts(): mixed 38 | { 39 | return static::query() 40 | ->selectRaw("count(*) as all") 41 | ->selectRaw("count(case when method = 'GET' then 1 end) as get") 42 | ->selectRaw("count(case when method = 'POST' then 1 end) as post") 43 | ->selectRaw("count(case when method = 'PUT' then 1 end) as put") 44 | ->selectRaw("count(case when method = 'PATCH' then 1 end) as patch") 45 | ->selectRaw("count(case when method = 'DELETE' then 1 end) as delete") 46 | ->first(); 47 | } 48 | } 49 | --------------------------------------------------------------------------------