├── .gitattributes ├── LICENSE ├── README.md ├── composer.json ├── config └── permission.php ├── database ├── migrations │ ├── 2018_05_26_041218_create_roles_table.php │ ├── 2018_05_26_041708_create_role_users_table.php │ ├── 2019_03_15_095532_create_permissions_table.php │ └── 2019_03_15_095857_create_permission_role_table.php └── seeds │ ├── PermissionDatabaseSeeder.php │ ├── PermissionsSeeder.php │ ├── RolesSeeder.php │ └── UsersSeeder.php ├── mix-manifest.json ├── package-lock.json ├── package.json ├── resources ├── assets │ ├── dashboard │ │ ├── css │ │ │ ├── admin.css │ │ │ ├── app.css │ │ │ ├── custom.css │ │ │ └── sweetalert2.min.css │ │ ├── js │ │ │ ├── admin.min.js │ │ │ ├── app.js │ │ │ ├── custom.js │ │ │ └── sweetalert2.min.js │ │ └── vendor │ │ │ ├── bootstrap │ │ │ └── js │ │ │ │ └── bootstrap.bundle.min.js │ │ │ ├── datatables │ │ │ ├── dataTables.bootstrap4.min.css │ │ │ ├── dataTables.bootstrap4.min.js │ │ │ └── jquery.dataTables.min.js │ │ │ ├── jquery-easing │ │ │ └── jquery.easing.min.js │ │ │ └── jquery │ │ │ └── jquery.min.js │ ├── js │ │ ├── app.js │ │ ├── bootstrap.js │ │ └── components │ │ │ ├── DraggableMenu.vue │ │ │ ├── ExampleComponent.vue │ │ │ ├── Menu.vue │ │ │ ├── NestedDraggableMenu.vue │ │ │ ├── NestedRawDraggableMenu.vue │ │ │ └── Users.vue │ ├── lang │ │ └── en │ │ │ ├── auth.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ └── sass │ │ ├── _variables.scss │ │ └── app.scss └── views │ ├── layouts │ ├── app.blade.php │ ├── master.blade.php │ └── partials │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── sidebar.blade.php │ │ └── topbar.blade.php │ ├── permissions │ ├── doc.blade.php │ └── index.blade.php │ └── users │ └── index.blade.php ├── routes ├── demo.php └── permission.php ├── src ├── Commands │ ├── InstallPermission.php │ ├── InstallPermissionDemo.php │ ├── PublishPermissionResources.php │ └── PublishPermissionViews.php ├── Contracts │ ├── Permission.php │ ├── Role.php │ └── User.php ├── Facades │ └── Permission.php ├── Helpers │ └── helpers.php ├── Http │ ├── Controllers │ │ ├── Controller.php │ │ ├── PermissionController.php │ │ └── UserController.php │ └── Middleware │ │ └── RoleMiddleware.php ├── Models │ ├── Permission.php │ ├── Role.php │ └── User.php ├── Permission.php ├── PermissionGenarator.php ├── PermissionServiceProvider.php └── Traits │ ├── HasPermissions.php │ └── HasRoles.php └── webpack.mix.js /.gitattributes: -------------------------------------------------------------------------------- 1 | *.php linguist-language=PHP 2 | *.js linguist-language=PHP -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Md Abu Ahsan Basir 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 all 13 | 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # laravel-permission 2 | Laravel Multi Authentication 3 | 4 | Installation video : [click here](https://www.youtube.com/watch?v=2ZmhpYwrGNA) or click below image 5 | 6 | [](https://www.youtube.com/watch?v=2ZmhpYwrGNA) 7 | 8 | ## Note : Before Install and use this package run below command 9 | Before Laravel version 6.0 10 | ``` 11 | php artisan make:auth 12 | ``` 13 | From Laravel Version 6.0 14 | 15 | ``` 16 | 1. composer require laravel/ui 17 | 2. php artisan ui vue --auth 18 | 3. npm install 19 | 4. npm run dev 20 | ``` 21 | 22 | #### Install the Package 23 | 24 | ``` 25 | composer require codexshaper/laravel-permission 26 | ``` 27 | ##### Publish Resource, Configs, Migration and Seeding Database in a single command 28 | 29 | ``` 30 | php artisan permission:install 31 | ``` 32 | ##### Or Publish Resource, Configs, Migration and Seeding Database Manually 33 | 1. Publish Configs 34 | ``` 35 | php artisan vendor:publish --tag=permission.config 36 | ``` 37 | 2. Publish Seeds 38 | ``` 39 | php artisan vendor:publish --tag=permission.seeds 40 | ``` 41 | 3. Migrate Database 42 | ``` 43 | php artisan migrate 44 | ``` 45 | 4. Run composer dump autoload 46 | ``` 47 | composer dump-autoload 48 | ``` 49 | 5. Seeding Database 50 | ``` 51 | php artisan db:seed --class=PermissionDatabaseSeeder 52 | ``` 53 | 6. Add Routes 54 | ``` 55 | Route::group(['prefix' => config('permission.prefix'),'middleware'=>['role:admin']], function () { 56 | Permission::routes(); 57 | }); 58 | ``` 59 | ##### Import `use CodexShaper\Permission\Traits\HasRoles` or simply `use HasRoles` Trait into your `App\User` Model 60 | ``` 61 | namespace App; 62 | 63 | use CodexShaper\Permission\Traits\HasRoles; 64 | 65 | class User extends Authenticatable 66 | { 67 | use HasRoles; 68 | } 69 | ``` 70 | ##### Check Permission go to ```/admin/laravel-permission``` 71 | 72 | ###### Install Demo 73 | ``` 74 | php artisan permission:install:demo 75 | ``` 76 | ##### Demo url ```/admin/permissions``` 77 | 78 | ###### Publish ```Views``` 79 | ``` 80 | php artisan permission:publish:views 81 | ``` 82 | 83 | ##### Publish ```Resources``` 84 | ``` 85 | php artisan permission:publish:resources 86 | ``` 87 | #### For Overriding Views and Resources, Change your config file ```/config/permission.php``` 88 | ``` 89 | 'resources_path' => 'resources/views/vendor/permissions/assets', 90 | 'views' => 'resources/views/vendor/permissions/views', 91 | ``` 92 | # Permission 93 | ``` 94 | use CodexShaper\Permission\Models\Permission; 95 | 96 | $permission = Permission::create([ 97 | 'name' => 'Browse', 98 | 'slug' => slug('browse'), 99 | 'created_at' => now(), 100 | 'updated_at' => now(), 101 | ]); 102 | ``` 103 | 104 | #### Give Permission to Roles 105 | ``` 106 | // Create Role before set permission 107 | // $roles = [role_slug_or_id] ex: ['admin',1,2,'author'] 108 | $permission->givePermissionToRoles( $roles ); 109 | ``` 110 | #### Update permission roles 111 | ``` 112 | $role_ids = [1,3,5] 113 | $permission->syncPermissionToRoles( $role_ids ); 114 | ``` 115 | #### Delete permission roles 116 | ``` 117 | // Delete specific Roles 118 | $role_ids = [1,3,5]; 119 | $permission->revokePermissionsFromRoles( $role_ids ); 120 | // Delete all roles for current permission 121 | $permission->revokePermissionsFromRoles(); 122 | ``` 123 | # Role 124 | ``` 125 | use CodexShaper\Permission\Models\Role; 126 | 127 | $admin = Role::create([ 128 | 'name' => 'Super Admin', 129 | 'slug' => 'admin', 130 | 'created_at' => now(), 131 | 'updated_at' => now(), 132 | ]); 133 | ``` 134 | #### Assign Permission 135 | ``` 136 | $admin->assignPermissions([ 137 | 'browse', 138 | 'read', 139 | 'edit', 140 | 'add', 141 | 'delete' 142 | ]); 143 | ``` 144 | #### Update Permission 145 | ``` 146 | $permission_ids = [1,3,5] 147 | $admin->syncPermissions( $permission_ids ); 148 | ``` 149 | #### Delete permission 150 | ``` 151 | // Delete specific Permissions 152 | $permission_ids = [1,3,5]; 153 | $admin->revokePermissions( $permission_ids ); 154 | // Delete all roles for current roles 155 | $admin->revokePermissions(); 156 | ``` 157 | #### Check Permission 158 | ``` 159 | $admin->hasPermission( $permission_slug ); 160 | ``` 161 | # User 162 | ``` 163 | use App\User; 164 | 165 | $user = new User; 166 | $user->name = 'John Doe'; 167 | $user->email = 'john@gmail.com'; 168 | $user->password = Hash::make('password'); 169 | $user->save(); 170 | $user->assignRoles('admin'); 171 | ``` 172 | #### Assign Roles into existing user 173 | ``` 174 | $user = User::find(1); 175 | $user->assignRoles('admin'); 176 | ``` 177 | #### Assign Multiple roles 178 | ``` 179 | $user = User::find(1); 180 | // Use pipe(|) 181 | $user->assignRoles('admin|client|customer'); 182 | // Or use comma(,) 183 | $user->assignRoles('admin,client,customer'); 184 | // Or use space 185 | $user->assignRoles('admin client customer'); 186 | // Or Mixed 187 | $user->assignRoles('admin client,customer|write'); 188 | // Pass custom separators 189 | $separators = ',.| '; 190 | $user->assignRoles('admin client,customer|write', $separators); 191 | ``` 192 | #### Update Roles 193 | ``` 194 | $role_ids = [1,2,3]; 195 | $user->syncRoles( $role_ids ); 196 | ``` 197 | #### Delete Roles 198 | ``` 199 | // Delete specific Roles for current User 200 | $role_ids = [1,3,5]; 201 | $user->revokeRoles( $role_ids ); 202 | // Delete all roles for current user 203 | $user->revokeRoles(); 204 | ``` 205 | #### Check Role 206 | ``` 207 | $user->hasRole( $role_slug ); 208 | ``` 209 | # Add Middleware on route 210 | ``` 211 | Route::group(['middleware'=>['role:admin']],function(){ 212 | // Routes 213 | }); 214 | ``` 215 | 216 | # View Directories 217 | ``` 218 | @can('browse') 219 |
You Can Browse
220 | @endcan 221 | 222 | @role('admin') 223 |You are admin
224 | @endrole 225 | 226 | @hasrole('admin') 227 |You have admin Permission
228 | @endhasrole 229 | 230 | @haspermission('edit') 231 |You have admin Permission
232 | @endhaspermission 233 | ``` 234 | ## Authors 235 | 236 | * **Md Abu Ahsan Basir** - *Main Developer & Maintainer* - [github](https://github.com/maab16) 237 | * **Mahabubul Alam** - *Main designer* - [github](https://github.com/mahabubul1) 238 | 239 | See also the list of [contributors](https://github.com/laravel-menu-builder/contributors) who participated in this project. 240 | 241 | ## License 242 | 243 | [](http://badges.mit-license.org) 244 | 245 | - **[MIT license](http://opensource.org/licenses/mit-license.php)** 246 | - Copyright 2019 © CodexShaper. 247 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codexshaper/laravel-permission", 3 | "description": "Laravel Multiple Authentication", 4 | "type": "library", 5 | "require": {}, 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Md Abu Ahsan Basir", 10 | "email": "maab.career@gmail.com" 11 | } 12 | ], 13 | "minimum-stability": "dev", 14 | "autoload": { 15 | "psr-4": { 16 | "CodexShaper\\Permission\\": "src/" 17 | } 18 | }, 19 | "extra": { 20 | "laravel": { 21 | "providers": [ 22 | "CodexShaper\\Permission\\PermissionServiceProvider" 23 | ], 24 | "aliases": { 25 | "Permission": "CodexShaper\\Permission\\Facades\\Permission", 26 | "Role": "CodexShaper\\Permission\\Models\\Role", 27 | "RolePermission": "CodexShaper\\Permission\\Models\\Permission", 28 | "HasRoles": "CodexShaper\\Permission\\Traits\\HasRoles", 29 | "HasPermissions": "CodexShaper\\Permission\\Traits\\HasPermissions" 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /config/permission.php: -------------------------------------------------------------------------------- 1 | '/admin', 5 | 'namespace' => '\CodexShaper\Permission', 6 | 'controller_namespace' => '\CodexShaper\Permission\Http\Controllers', 7 | 'models' => [ 8 | 'permission' => CodexShaper\Permission\Models\Permission::class, 9 | 'role' => CodexShaper\Permission\Models\Role::class, 10 | ], 11 | 'table_names' => [ 12 | 'roles' => 'roles', 13 | 'role_users' => 'role_users', 14 | 'permissions' => 'permissions', 15 | 'permission_role' => 'permission_role', 16 | ], 17 | 'resources_path' => 'vendor/codexshaper/laravel-permission/resources/assets/', 18 | 'views' => 'vendor/codexshaper/laravel-permission/resources/views', 19 | 20 | ]; -------------------------------------------------------------------------------- /database/migrations/2018_05_26_041218_create_roles_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('name'); 19 | $table->string('slug'); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::dropIfExists('roles'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/migrations/2018_05_26_041708_create_role_users_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->integer('role_id'); 19 | $table->integer('user_id'); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::dropIfExists('role_users'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/migrations/2019_03_15_095532_create_permissions_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('name'); 19 | $table->string('slug'); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::dropIfExists('permissions'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/migrations/2019_03_15_095857_create_permission_role_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->integer('permission_id'); 19 | $table->integer('role_id'); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::dropIfExists('permission_role'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/seeds/PermissionDatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | seedersPath.$class.'.php'; 23 | if ( file_exists( $file ) && !class_exists($class)) { 24 | require_once $file; 25 | } 26 | with(new $class())->run(); 27 | } 28 | 29 | // $this->call(PermissionsSeeder::class); 30 | // $this->call(RolesSeeder::class); 31 | // $this->call(UsersSeeder::class); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/seeds/PermissionsSeeder.php: -------------------------------------------------------------------------------- 1 | 'Browse', 18 | 'slug' => slug('browse'), 19 | 'created_at' => now(), 20 | 'updated_at' => now(), 21 | ]); 22 | 23 | Permission::create([ 24 | 25 | 'name' => 'Read', 26 | 'slug' => slug('read'), 27 | 'created_at' => now(), 28 | 'updated_at' => now(), 29 | ]); 30 | 31 | Permission::create([ 32 | 33 | 'name' => 'Edit', 34 | 'slug' => slug('edit'), 35 | 'created_at' => now(), 36 | 'updated_at' => now(), 37 | ]); 38 | 39 | Permission::create([ 40 | 41 | 'name' => 'Add', 42 | 'slug' => slug('add'), 43 | 'created_at' => now(), 44 | 'updated_at' => now(), 45 | ]); 46 | 47 | Permission::create([ 48 | 49 | 'name' => 'Delete', 50 | 'slug' => slug('delete'), 51 | 'created_at' => now(), 52 | 'updated_at' => now(), 53 | ]); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /database/seeds/RolesSeeder.php: -------------------------------------------------------------------------------- 1 | 'Super Admin', 20 | 'slug' => 'admin', 21 | 'created_at' => now(), 22 | 'updated_at' => now(), 23 | ]); 24 | $admin->assignPermissions([ 25 | 'browse', 26 | 'read', 27 | 'edit', 28 | 'add', 29 | 'delete' 30 | ]); 31 | 32 | $manager = Role::create([ 33 | 34 | 'name' => 'Manager', 35 | 'slug' => 'manager', 36 | 'created_at' => now(), 37 | 'updated_at' => now(), 38 | ])->assignPermissions([ 39 | 'browse', 40 | 'read', 41 | 'edit', 42 | 'add', 43 | ]); 44 | 45 | $user = Role::create([ 46 | 47 | 'name' => 'User', 48 | 'slug' => 'user', 49 | 'created_at' => now(), 50 | 'updated_at' => now(), 51 | ])->assignPermissions([ 52 | 'browse', 53 | 'read', 54 | ]); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /database/seeds/UsersSeeder.php: -------------------------------------------------------------------------------- 1 | name = "Admin"; 19 | $user->email = "admin@admin.com"; 20 | $user->password = Hash::make("123456789"); 21 | $user->save(); 22 | $user->assignRoles('admin,manager,user'); 23 | // $admin->role()->updateExistingPivot($admin_role, ['created_at'=>now(),'updated_at'=>now()]); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /mix-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "/resources/assets/dashboard/js/app.js": "/resources/assets/dashboard/js/app.js", 3 | "/resources/assets/dashboard/css/app.css": "/resources/assets/dashboard/css/app.css" 4 | } 5 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "npm run development", 5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 6 | "watch": "npm run development -- --watch", 7 | "watch-poll": "npm run watch -- --watch-poll", 8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", 9 | "prod": "npm run production", 10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" 11 | }, 12 | "devDependencies": { 13 | "axios": "^0.19", 14 | "bootstrap": "^4.1.0", 15 | "cross-env": "^5.1", 16 | "jquery": "^3.2", 17 | "laravel-mix": "^4.0.7", 18 | "lodash": "^4.17.13", 19 | "popper.js": "^1.12", 20 | "resolve-url-loader": "^2.3.1", 21 | "sass": "^1.15.2", 22 | "sass-loader": "^7.1.0", 23 | "vue": "^2.5.17", 24 | "vue-template-compiler": "^2.6.10" 25 | }, 26 | "dependencies": { 27 | "sweetalert2": "^8.16.3" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /resources/assets/dashboard/css/custom.css: -------------------------------------------------------------------------------- 1 | .permission-list { 2 | list-style: none; 3 | padding: 0px; 4 | margin: 0px; 5 | } -------------------------------------------------------------------------------- /resources/assets/dashboard/css/sweetalert2.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-shown{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;box-shadow:0 0 .625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon::before{display:flex;align-items:center;font-size:2em;font-weight:700}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-popup.swal2-toast .swal2-icon::before{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto!important;width:auto;height:auto;margin:0 .3125em}.swal2-popup.swal2-toast .swal2-styled{margin:0 .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 .0625em #fff,0 0 0 .125em rgba(50,100,150,.4)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-shown{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent}body.swal2-no-backdrop .swal2-shown>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-shown.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-top-left,body.swal2-no-backdrop .swal2-shown.swal2-top-start{top:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-top-end,body.swal2-no-backdrop .swal2-shown.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-shown.swal2-center{top:50%;left:50%;transform:translate(-50%,-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-left,body.swal2-no-backdrop .swal2-shown.swal2-center-start{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-end,body.swal2-no-backdrop .swal2-shown.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom-left,body.swal2-no-backdrop .swal2-shown.swal2-bottom-start{bottom:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-bottom-end,body.swal2-no-backdrop .swal2-shown.swal2-bottom-right{right:0;bottom:0}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;background-color:transparent;-webkit-overflow-scrolling:touch}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-left,.swal2-container.swal2-top-start{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-left,.swal2-container.swal2-center-start{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-left,.swal2-container.swal2-bottom-start{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-right>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex!important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-bottom,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-top{align-items:center}.swal2-container.swal2-grow-column.swal2-bottom-left,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-top-start{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-bottom-right,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-top-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-container .swal2-modal{margin:0!important}}.swal2-container.swal2-fade{transition:background-color .1s}.swal2-container.swal2-shown{background-color:rgba(0,0,0,.4)}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:.3125em;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-actions.swal2-loading .swal2-styled.swal2-confirm{box-sizing:border-box;width:2.5em;height:2.5em;margin:.46875em;padding:0;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:.25em solid transparent;border-radius:100%;border-color:transparent;background-color:transparent!important;color:transparent;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-actions.swal2-loading .swal2-styled.swal2-cancel{margin-right:30px;margin-left:30px}.swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after{content:"";display:inline-block;width:15px;height:15px;margin-left:5px;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:3px solid #999;border-radius:50%;border-right-color:transparent;box-shadow:1px 1px 1px #fff}.swal2-styled{margin:.3125em;padding:.625em 2em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#3085d6;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#aaa;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:0;box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(50,100,150,.4)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:0;outline:initial;background:0 0;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em auto}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:0 0 3px #c4e6f5}.swal2-file::-webkit-input-placeholder,.swal2-input::-webkit-input-placeholder,.swal2-textarea::-webkit-input-placeholder{color:#ccc}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::-ms-input-placeholder,.swal2-input::-ms-input-placeholder,.swal2-textarea::-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:inherit}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:inherit;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{margin:0 .4em}.swal2-validation-message{display:none;align-items:center;justify-content:center;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:"!";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;zoom:normal;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@-moz-document url-prefix(){.swal2-close:focus{outline:2px solid rgba(50,100,150,.4)}}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;zoom:normal;border:.25em solid transparent;border-radius:50%;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon::before{display:flex;align-items:center;height:92%;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning::before{content:"!"}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info::before{content:"i"}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question::before{content:"?"}.swal2-icon.swal2-question.swal2-arabic-question-mark::before{content:"؟"}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.875em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-progress-steps{align-items:center;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;width:2em;height:2em;border-radius:2em;background:#3085d6;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#3085d6}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;width:2.5em;height:.4em;margin:0 -1px;background:#3085d6}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-animate-error-icon{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-animate-error-icon .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}} 2 | 3 | -------------------------------------------------------------------------------- /resources/assets/dashboard/js/admin.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - SB Admin 2 v4.0.6 (https://startbootstrap.com/template-overviews/sb-admin-2) 3 | * Copyright 2013-2019 Start Bootstrap 4 | * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-sb-admin-2/blob/master/LICENSE) 5 | */ 6 | 7 | !function(t){"use strict";t("#sidebarToggle, #sidebarToggleTop").on("click",function(o){t("body").toggleClass("sidebar-toggled"),t(".sidebar").toggleClass("toggled"),t(".sidebar").hasClass("toggled")&&t(".sidebar .collapse").collapse("hide")}),t(window).resize(function(){t(window).width()<768&&t(".sidebar .collapse").collapse("hide")}),t("body.fixed-nav .sidebar").on("mousewheel DOMMouseScroll wheel",function(o){if(768'+result.role.name+'
'+result.permission.name+'
{{ valueString }}5 |
Sorry! There is no Doc at this moment. we will add it soon. Thanks
13 |