├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── app └── Providers │ └── FortifyUITailwindServiceProvider.php ├── composer.json ├── fortify-ui-tailwindcss-screenshot.PNG ├── fortify-ui-tailwindcss.png ├── psalm.xml.dist ├── src ├── Commands │ └── FortifyUITailwindCommand.php └── FortifyUITailwindServiceProvider.php └── stubs ├── package.json ├── resources ├── js │ ├── app.js │ ├── bootstrap.js │ └── components │ │ └── ExampleComponent.vue ├── sass │ └── app.scss └── views │ ├── auth │ ├── confirm-password.blade.php │ ├── forgot-password.blade.php │ ├── login.blade.php │ ├── register.blade.php │ ├── reset-password.blade.php │ ├── two-factor-challenge.blade.php │ └── verify-email.blade.php │ ├── home.blade.php │ ├── layouts │ └── app.blade.php │ └── profile │ ├── two-factor-authentication-form.blade.php │ ├── update-password-form.blade.php │ └── update-profile-information-form.blade.php ├── tailwind.config.js └── webpack.mix.js /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to `fortify-ui-tailwind` will be documented in this file 4 | 5 | ## 1.0.0 - 2020-10-08 6 | 7 | - initial release 8 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Your Name 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 |

2 | 3 | # Introduction 4 | 5 | This package is a Laravel Fortify UI preset, built with Tailwind CSS. This package requires Laravel Fortify. Installing **FortifyUI Tailwind** will automatically install and configure Laravel Fortify for you, so you may start there. 6 | 7 | - [Installation](#installation) 8 | 9 | ## Installation 10 | 11 | To get started, you'll need to install **FortifyUI Tailwind** using Composer. 12 | 13 | ```bash 14 | composer require pradeep3/fortify-ui-tailwindcss 15 | ``` 16 | 17 | Next, you'll need to run the install command: 18 | 19 | ```bash 20 | php artisan fortify-ui:tailwindcss 21 | ``` 22 | 23 | This command will publish **FortifyUI Tailwind's** views and resources to your project. 24 | 25 | - All `auth` views 26 | - Other files... 27 | 28 |

29 | 30 | ```bash 31 | npm install && npm run dev 32 | ``` 33 | 34 | This command will install the tailwind css and neccessary node packages 35 | 36 | ## License 37 | 38 | **FortifyUI Tailwind** is open-sourced software licensed under the [MIT license](LICENSE.md). 39 | -------------------------------------------------------------------------------- /app/Providers/FortifyUITailwindServiceProvider.php: -------------------------------------------------------------------------------- 1 | $request]); 41 | }); 42 | 43 | // Fortify::verifyEmailView(function () { 44 | // return view('auth.verify-email'); 45 | // }); 46 | 47 | // Fortify::confirmPasswordView(function () { 48 | // return view('auth.confirm-password'); 49 | // }); 50 | 51 | // Fortify::twoFactorChallengeView(function () { 52 | // return view('auth.two-factor-challenge'); 53 | // }); 54 | } 55 | } -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pradeep3/fortify-ui-tailwindcss", 3 | "description": "Laravel Fortify tailwind UI", 4 | "keywords": [ 5 | "fortify-ui" 6 | ], 7 | "homepage": "https://github.com/mekpk/fortify-ui-tailwindcss", 8 | "license": "MIT", 9 | "authors": [ 10 | { 11 | "name": "K Pradeep Kumar", 12 | "email": "pradeep@kpktechnology.com", 13 | "homepage": "https://twitter.com/me_kpk", 14 | "role": "Developer" 15 | } 16 | ], 17 | "require": { 18 | "php": "^8.0.2", 19 | "illuminate/contracts": "^9.21.6", 20 | "laravel/fortify": "^1.13.1" 21 | }, 22 | "require-dev": { 23 | "friendsofphp/php-cs-fixer": "^3.9.5|^5.9.5", 24 | "orchestra/testbench": "^7.6.0", 25 | "phpunit/phpunit": "^9.5.21", 26 | "vimeo/psalm": "^5.0" 27 | }, 28 | "autoload": { 29 | "psr-4": { 30 | "Pradeep3\\FortifyUITailwind\\": "src" 31 | } 32 | }, 33 | "autoload-dev": { 34 | "psr-4": { 35 | "Pradeep3\\FortifyUITailwind\\Tests\\": "tests" 36 | } 37 | }, 38 | "scripts": { 39 | "psalm": "vendor/bin/psalm", 40 | "test": "vendor/bin/phpunit --colors=always", 41 | "test-coverage": "vendor/bin/phpunit --coverage-html coverage", 42 | "format": "vendor/bin/php-cs-fixer fix --allow-risky=yes" 43 | }, 44 | "config": { 45 | "sort-packages": true 46 | }, 47 | "extra": { 48 | "laravel": { 49 | "providers": [ 50 | "Pradeep3\\FortifyUITailwind\\FortifyUITailwindServiceProvider" 51 | ] 52 | } 53 | }, 54 | "minimum-stability": "dev", 55 | "prefer-stable": true 56 | } 57 | -------------------------------------------------------------------------------- /fortify-ui-tailwindcss-screenshot.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pradeep3/fortify-ui-tailwindcss/55a6051bf295c593bc5ea5f57f8f796392df272e/fortify-ui-tailwindcss-screenshot.PNG -------------------------------------------------------------------------------- /fortify-ui-tailwindcss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pradeep3/fortify-ui-tailwindcss/55a6051bf295c593bc5ea5f57f8f796392df272e/fortify-ui-tailwindcss.png -------------------------------------------------------------------------------- /psalm.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Commands/FortifyUITailwindCommand.php: -------------------------------------------------------------------------------- 1 | publishAssets(); 17 | $this->updateServiceProviders(); 18 | $this->updateRoutes(); 19 | 20 | $this->comment('FortifyUI Tailwind CSS is now installed.'); 21 | 22 | if ($this->option('skip-provider')) { 23 | $this->info('Please, remember to include the Fortify view registrations!'); 24 | } 25 | 26 | $this->info('Please, run php artisan migrate!'); 27 | } 28 | 29 | protected function publishAssets() 30 | { 31 | $this->callSilent('vendor:publish', ['--provider' => 'Laravel\Fortify\FortifyServiceProvider']); 32 | 33 | if (! $this->option('skip-provider')) { 34 | $this->callSilent('vendor:publish', ['--tag' => 'fortifyui-provider', '--force' => true]); 35 | } 36 | 37 | $this->callSilent('vendor:publish', ['--tag' => 'fortifyui-views', '--force' => true]); 38 | } 39 | 40 | public function updateServiceProviders() 41 | { 42 | $appConfig = file_get_contents(config_path('app.php')); 43 | 44 | if ($this->option('skip-provider')) { 45 | if (! Str::contains($appConfig, 'App\\Providers\\FortifyServiceProvider::class')) { 46 | file_put_contents(config_path('app.php'), str_replace( 47 | "App\Providers\RouteServiceProvider::class,", 48 | "App\Providers\RouteServiceProvider::class,".PHP_EOL." App\Providers\FortifyServiceProvider::class,", 49 | $appConfig 50 | )); 51 | } 52 | } else { 53 | if ( 54 | ! Str::contains($appConfig, 'App\\Providers\\FortifyServiceProvider::class') 55 | && 56 | ! Str::contains($appConfig, 'App\\Providers\\FortifyUITailwindServiceProvider::class') 57 | ) { 58 | file_put_contents(config_path('app.php'), str_replace( 59 | "App\Providers\RouteServiceProvider::class,", 60 | "App\Providers\RouteServiceProvider::class,".PHP_EOL." App\Providers\FortifyServiceProvider::class,".PHP_EOL." App\\Providers\\FortifyUITailwindServiceProvider::class", 61 | $appConfig 62 | )); 63 | } 64 | } 65 | } 66 | 67 | protected function updateRoutes() 68 | { 69 | file_put_contents( 70 | base_path('routes/web.php'), 71 | "\nRoute::view('home', 'home')\n\t->name('home')\n\t->middleware(['auth', 'verified']);\n", 72 | FILE_APPEND 73 | ); 74 | } 75 | } -------------------------------------------------------------------------------- /src/FortifyUITailwindServiceProvider.php: -------------------------------------------------------------------------------- 1 | app->runningInConsole()) { 13 | $this->publishes([ 14 | // views 15 | __DIR__ . '/../stubs/resources/views' => base_path('resources/views'), 16 | 17 | // assets 18 | __DIR__ . '/../stubs/resources/js' => base_path('resources/js'), 19 | __DIR__ . '/../stubs/resources/sass' => base_path('resources/sass'), 20 | 21 | // package files 22 | __DIR__ . '/../stubs/.editorconfig' => base_path('.editorconfig'), 23 | __DIR__ . '/../stubs/.gitignore' => base_path('.gitignore'), 24 | __DIR__ . '/../stubs/package.json' => base_path('package.json'), 25 | __DIR__ . '/../stubs/tailwind.config.js' => base_path('tailwind.config.js'), 26 | __DIR__ . '/../stubs/webpack.mix.js' => base_path('webpack.mix.js'), 27 | ], 'fortifyui-views'); 28 | 29 | $this->publishes([ 30 | __DIR__ . '/../app/Providers' => base_path('app/Providers'), 31 | ], 'fortifyui-provider'); 32 | 33 | $this->commands([ 34 | FortifyUITailwindCommand::class, 35 | ]); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /stubs/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.21", 14 | "laravel-mix": "^6.0.6", 15 | "lodash": "^4.17.19", 16 | "postcss": "^8.1.14", 17 | "cross-env": "^7.0.3", 18 | "popper.js": "^1.16", 19 | "resolve-url-loader": "^5.0", 20 | "sass": "^1.54", 21 | "sass-loader": "13.*", 22 | "vue": "^3.*", 23 | "vue-template-compiler": "^2.7.8", 24 | "@tailwindcss/custom-forms": "^0.2.1" 25 | }, 26 | "dependencies": { 27 | "tailwindcss": "^3.1.6" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /stubs/resources/js/app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * First we will load all of this project's JavaScript dependencies which 3 | * includes Vue and other libraries. It is a great starting point when 4 | * building robust, powerful web applications using Vue and Laravel. 5 | */ 6 | 7 | require("./bootstrap"); 8 | 9 | window.Vue = require("vue"); 10 | 11 | /** 12 | * The following block of code may be used to automatically register your 13 | * Vue components. It will recursively scan this directory for the Vue 14 | * components and automatically register them with their "basename". 15 | * 16 | * Eg. ./components/ExampleComponent.vue -> 17 | */ 18 | 19 | // const files = require.context('./', true, /\.vue$/i) 20 | // files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default)) 21 | 22 | Vue.component( 23 | "example-component", 24 | require("./components/ExampleComponent.vue").default 25 | ); 26 | 27 | /** 28 | * Next, we will create a fresh Vue application instance and attach it to 29 | * the page. Then, you may begin adding components to this application 30 | * or customize the JavaScript scaffolding to fit your unique needs. 31 | */ 32 | 33 | const app = new Vue({ 34 | el: "#app", 35 | }); 36 | -------------------------------------------------------------------------------- /stubs/resources/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | window._ = require("lodash"); 2 | 3 | /** 4 | * We'll load the axios HTTP library which allows us to easily issue requests 5 | * to our Laravel back-end. This library automatically handles sending the 6 | * CSRF token as a header based on the value of the "XSRF" token cookie. 7 | */ 8 | 9 | window.axios = require("axios"); 10 | 11 | window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; 12 | 13 | /** 14 | * Echo exposes an expressive API for subscribing to channels and listening 15 | * for events that are broadcast by Laravel. Echo and event broadcasting 16 | * allows your team to easily build robust real-time web applications. 17 | */ 18 | 19 | // import Echo from 'laravel-echo'; 20 | 21 | // window.Pusher = require('pusher-js'); 22 | 23 | // window.Echo = new Echo({ 24 | // broadcaster: 'pusher', 25 | // key: process.env.MIX_PUSHER_APP_KEY, 26 | // cluster: process.env.MIX_PUSHER_APP_CLUSTER, 27 | // forceTLS: true 28 | // }); 29 | -------------------------------------------------------------------------------- /stubs/resources/js/components/ExampleComponent.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /stubs/resources/sass/app.scss: -------------------------------------------------------------------------------- 1 | // Fonts 2 | @import url("https://fonts.googleapis.com/css?family=Nunito"); 3 | 4 | @import "tailwindcss/base"; 5 | 6 | @import "tailwindcss/components"; 7 | 8 | @import "tailwindcss/utilities"; 9 | -------------------------------------------------------------------------------- /stubs/resources/views/auth/confirm-password.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |
8 | 9 |
10 | @csrf 11 | 12 |
13 | 16 | 17 | 20 | 21 | @if ($errors->any()) 22 |
23 |
{{ __('Whoops! Something went wrong.') }}
24 | 25 |
    26 | @foreach ($errors->all() as $error) 27 |
  • {{ $error }}
  • 28 | @endforeach 29 |
30 |
31 | @endif 32 |
33 | 34 |
35 | 39 | 40 | @if (Route::has('password.request')) 41 | 42 | {{ __('Forgot Your Password?') }} 43 | 44 | @endif 45 |
46 | 47 |
48 | 49 |
50 |
51 |
52 |
53 | 54 | @endsection 55 | -------------------------------------------------------------------------------- /stubs/resources/views/auth/forgot-password.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |
8 | @if (session('status')) 9 | 12 | @endif 13 | 14 | 15 |
16 | @csrf 17 | 18 |
19 | 20 |
21 | 22 |
23 | 26 | 27 | 30 | 31 | @if ($errors->any()) 32 |
33 |
    34 | @foreach ($errors->all() as $error) 35 |
  • {{ $error }}
  • 36 | @endforeach 37 |
38 |
39 | @endif 40 |
41 | 42 |
43 | 47 |
48 |
49 | 50 |
51 |
52 |
53 |
54 | @endsection 55 | -------------------------------------------------------------------------------- /stubs/resources/views/auth/login.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 | @if (session('status')) 6 | 9 | @endif 10 | 11 |
12 |
13 |
14 | 15 |
16 | {{ __('Login') }} 17 |
18 | 19 |
20 | @csrf 21 | 22 |
23 | 26 | 27 | 30 | 31 | @error('email') 32 |

33 | {{ $message }} 34 |

35 | @enderror 36 |
37 | 38 |
39 | 42 | 43 | 46 | 47 | @error('password') 48 |

49 | {{ $message }} 50 |

51 | @enderror 52 |
53 | 54 |
55 | 60 | 61 | @if (Route::has('password.request')) 62 | 64 | {{ __('Forgot Your Password?') }} 65 | 66 | @endif 67 |
68 | 69 |
70 | 74 | 75 | @if (Route::has('register')) 76 |

77 | {{ __("Don't have an account?") }} 78 | 79 | {{ __('Register') }} 80 | 81 |

82 | @endif 83 |
84 |
85 | 86 |
87 |
88 |
89 |
90 | @endsection -------------------------------------------------------------------------------- /stubs/resources/views/auth/register.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |
8 | 9 |
10 | {{ __('Register') }} 11 |
12 | 13 |
15 | @csrf 16 | 17 |
18 | 21 | 22 | 24 | 25 | @error('name') 26 |

27 | {{ $message }} 28 |

29 | @enderror 30 |
31 | 32 |
33 | 36 | 37 | 40 | 41 | @error('email') 42 |

43 | {{ $message }} 44 |

45 | @enderror 46 |
47 | 48 |
49 | 52 | 53 | 56 | 57 | @error('password') 58 |

59 | {{ $message }} 60 |

61 | @enderror 62 |
63 | 64 |
65 | 68 | 69 | 71 |
72 | 73 |
74 | 78 | 79 |

80 | {{ __('Already have an account?') }} 81 | 82 | {{ __('Login') }} 83 | 84 |

85 |
86 |
87 | 88 |
89 |
90 |
91 |
92 | @endsection -------------------------------------------------------------------------------- /stubs/resources/views/auth/reset-password.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |
8 | @if (session('status')) 9 | 12 | @endif 13 | 14 | 15 | @if ($errors->any()) 16 |
17 |
    18 | @foreach ($errors->all() as $error) 19 |
  • {{ $error }}
  • 20 | @endforeach 21 |
22 |
23 | @endif 24 | 25 |
26 | @csrf 27 | 28 | 29 | 30 |
31 | 34 | 35 | 37 |
38 | 39 |
40 | 43 | 44 | 46 |
47 | 48 |
49 | 52 | 53 | 55 |
56 | 57 |
58 | 62 |
63 |
64 | 65 |
66 |
67 |
68 |
69 | @endsection 70 | -------------------------------------------------------------------------------- /stubs/resources/views/auth/two-factor-challenge.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | Update Profile information 5 |
6 | 7 |
8 | @if ($errors->any()) 9 |
10 |
{{ __('Whoops! Something went wrong.') }}
11 | 12 |
    13 | @foreach ($errors->all() as $error) 14 |
  • {{ $error }}
  • 15 | @endforeach 16 |
17 |
18 | @endif 19 | 20 |
21 | @csrf 22 | 23 | {{-- 24 | Do not show both of these fields, together. It's recommended 25 | that you only show one field at a time and use some logic 26 | to toggle the visibility of each field 27 | --}} 28 | 29 |
30 | {{ __('Please confirm access to your account by entering the authentication code provided by your authenticator application.') }} 31 |
32 | 33 |
34 | 35 | 36 |
37 | 38 | {{-- ** OR ** --}} 39 | 40 |
41 | {{ __('Please confirm access to your account by entering one of your emergency recovery codes.') }} 42 |
43 | 44 |
45 | 46 | 47 |
48 | 49 |
50 | 53 |
54 |
55 | 56 |
57 |
-------------------------------------------------------------------------------- /stubs/resources/views/auth/verify-email.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 | @if (session('status') == 'verification-link-sent') 6 | 9 | @endif 10 |
11 |
12 |
13 | 14 | 15 | 16 | 17 |
18 | @csrf 19 | 20 | 23 |
24 | 25 |
26 | @csrf 27 | 28 | 31 |
32 |
33 |
34 |
35 | 36 |
37 | @endsection 38 | -------------------------------------------------------------------------------- /stubs/resources/views/home.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 | 9 | 10 |
11 | 12 | @if (session('status')) 13 | 16 | @endif 17 | 18 |
19 | @if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::updateProfileInformation())) 20 | @include('profile.update-profile-information-form') 21 | @endif 22 | 23 | @if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::updatePasswords())) 24 | @include('profile.update-password-form') 25 | @endif 26 | 27 | @if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::twoFactorAuthentication())) 28 | @include('profile.two-factor-authentication-form') 29 | @endif 30 |
31 | 32 | 33 |
34 |
35 | @endsection -------------------------------------------------------------------------------- /stubs/resources/views/layouts/app.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {{ config('app.name', 'Laravel') }} 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |
19 |
20 | 21 | {{ config('app.name', 'Laravel') }} 22 | 23 |
24 | 42 |
43 |
44 | 45 | @yield('content') 46 |
47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /stubs/resources/views/profile/two-factor-authentication-form.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | Two factor authentication 5 |
6 | 7 |
8 | @if(! auth()->user()->two_factor_secret) 9 | {{-- Enable 2FA --}} 10 |
11 | @csrf 12 | 13 | 16 |
17 | @else 18 | {{-- Disable 2FA --}} 19 |
20 | @csrf 21 | @method('DELETE') 22 | 23 | 26 |
27 | 28 | @if(session('status') == 'two-factor-authentication-enabled') 29 | {{-- Show SVG QR Code, After Enabling 2FA --}} 30 |
31 | {{ __('Two factor authentication is now enabled. Scan the following QR code using your phone\'s authenticator application.') }} 32 |
33 | 34 |
35 | {!! auth()->user()->twoFactorQrCodeSvg() !!} 36 |
37 | @endif 38 | 39 | {{-- Show 2FA Recovery Codes --}} 40 |
41 | {{ __('Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.') }} 42 |
43 | 44 |
45 | @foreach (json_decode(decrypt(auth()->user()->two_factor_recovery_codes), true) as $code) 46 |
{{ $code }}
47 | @endforeach 48 |
49 | 50 | {{-- Regenerate 2FA Recovery Codes --}} 51 |
52 | @csrf 53 | 54 | 57 |
58 | @endif 59 |
60 |
-------------------------------------------------------------------------------- /stubs/resources/views/profile/update-password-form.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | Change password 5 |
6 | 7 |
8 |
10 | @csrf 11 | @method('PUT') 12 | 13 |
14 | 17 | 18 | 20 | 21 | @error('current_password') 22 |

23 | {{ $message }} 24 |

25 | @enderror 26 |
27 | 28 |
29 | 32 | 33 | 35 | 36 | @error('password') 37 |

38 | {{ $message }} 39 |

40 | @enderror 41 |
42 | 43 |
44 | 47 | 48 | 50 | 51 | @error('password_confirmation') 52 |

53 | {{ $message }} 54 |

55 | @enderror 56 |
57 | 58 |
59 | 63 |
64 | 65 |
66 | 67 |
68 |
69 | -------------------------------------------------------------------------------- /stubs/resources/views/profile/update-profile-information-form.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | Update Profile information 5 |
6 | 7 |
8 |
9 | @csrf 10 | @method('PUT') 11 | 12 |
13 | 16 | 17 | 19 | 20 | @error('name') 21 |

22 | {{ $message }} 23 |

24 | @enderror 25 |
26 | 27 | 28 |
29 | 32 | 33 | 35 | 36 | @error('name') 37 |

38 | {{ $message }} 39 |

40 | @enderror 41 |
42 | 43 |
44 | 48 |
49 | 50 |
51 |
52 |
53 | 54 | -------------------------------------------------------------------------------- /stubs/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | future: {}, 3 | purge: [], 4 | theme: { 5 | extend: {} 6 | }, 7 | variants: {}, 8 | plugins: [require("@tailwindcss/custom-forms")] 9 | }; 10 | -------------------------------------------------------------------------------- /stubs/webpack.mix.js: -------------------------------------------------------------------------------- 1 | const mix = require("laravel-mix"); 2 | 3 | const tailwindcss = require("tailwindcss"); 4 | 5 | mix.sass("resources/sass/app.scss", "public/css").options({ 6 | processCssUrls: false, 7 | postCss: [tailwindcss("./tailwind.config.js")], 8 | }); 9 | 10 | mix.js("resources/js/app.js", "public/js"); 11 | --------------------------------------------------------------------------------