Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
5dc59ff
Remember Me Checkbox State Binding in Login Page (#63)
kozhinhikkodan-dev Feb 28, 2025
708c5c3
port skeleton change
taylorotwell Mar 4, 2025
b83a889
Update on README.md (#67)
benborla Mar 4, 2025
bc4ed26
fix: remove left margin when sidebar is collapsed (#64)
egxadev Mar 4, 2025
799c3c2
Ensure Consistent and Type-Safe Form Handling in `useForm` (#46)
impruthvi Mar 4, 2025
99dd30b
Fix inertia page testing fails because of wrong page path (#66)
rexlManu Mar 4, 2025
c0ac4c8
Adding ziggy.js to gitignore (#70)
tnylea Mar 4, 2025
f106eeb
remove comment
taylorotwell Mar 4, 2025
01805e5
Fix Inertia SSR errors (#53)
JoeyMckenzie Mar 5, 2025
330b5ce
refactor: rename NavItem property url to href (#73)
kaarelsirel Mar 12, 2025
2d452e5
Update .prettierignore (#77)
michaelnabil230 Mar 12, 2025
732568d
[12.x] Improves clarity (#84)
AhmedAlaa4611 Mar 19, 2025
dd5849d
Adding tooltip to sidebar icons (#83)
tnylea Mar 19, 2025
e2d93c8
Fix ResetPasswordForm definition (#80)
bhanwarpsrathore Mar 19, 2025
68aa552
fiex: layout overflow (#90)
alkadoHs Apr 1, 2025
f0fd85f
Update layout.tsx (#86)
ninjaparade Apr 1, 2025
8ea5f64
removing pest test for the new laravel installer (#82)
tnylea Apr 1, 2025
f599a00
Use shadcn/ui built-in check for sidebar state (#72)
JoeyMckenzie Apr 1, 2025
20dacf7
code: remove unused props (#95)
fabpl Apr 9, 2025
7875157
remove import
taylorotwell Apr 9, 2025
694facb
Fix default sidebar behavior (#92)
stephenhowells Apr 9, 2025
c7d21f5
Inline return. (#94)
msamgan Apr 9, 2025
7e160e0
Add `composer run test` command (#98)
crynobone Apr 11, 2025
9a0cc25
fix(logout): clear Inertia prefetch cache on logout to prevent data l…
SkandarS0 Apr 22, 2025
108963e
Adding updated favicons for React starter kit (#107)
tnylea Apr 29, 2025
a112a23
Adding the red favicon back via design req (#108)
tnylea Apr 30, 2025
bbfc8f2
Redirect the user to the URL they were attempting to access before re…
PicassoHouessou Jun 5, 2025
6266b91
Update title (#118)
yakidahan Jun 5, 2025
2a603c0
Fix strict comparison between current page URL and navigation item UR…
Netero98 Jun 5, 2025
c361438
Fix logo line height (#113)
tnylea Jun 5, 2025
858072a
Update Prettier configuration to include tailwindStylesheet path (#112)
rrmesquita Jun 5, 2025
08aa6b9
Making sure all related processed are closed when terminating the con…
Ciaro Jun 5, 2025
f1c4c46
Fix overflow-x on AppContent (#88)
filipprober Jun 5, 2025
268a510
fix: ensure correct color scheme is applied in applyTheme function
SantosVilanculos Jun 18, 2025
fea01f5
Use and show the icon in the sidebarNavItems in the settings sidebar
HichemTab-tech Jun 29, 2025
a14b785
Enhance dynamic page title generation with fallback to app name (#126)
bishwajitcadhikary Jul 4, 2025
5a6b533
Add User type hint in NewPasswordController (#128)
blakedeckard Jul 4, 2025
c196cce
Fix redirect in settings.php (#125)
TenZdenda Jul 4, 2025
b4b3778
fix: improve hover animations by disabling user selection and pointer…
FelipeESchmidt Jul 4, 2025
432206c
remove unnecessary default border-color (#144)
rrmesquita Jul 24, 2025
25f7405
Add throttle to authed password routes (#139)
valorin Jul 24, 2025
3b9969d
Clean (#140)
michaelnabil230 Jul 24, 2025
e8e33f6
Upgrade Vite to v7 (#143)
ChristianJoniel Jul 24, 2025
ba8c79a
update package lock
taylorotwell Jul 24, 2025
1122624
add method to forms
taylorotwell Aug 11, 2025
2653c16
upgrade to inertia ^2.1.0
joetannenbaum Aug 13, 2025
ec73253
Update forgot-password.tsx
joetannenbaum Aug 13, 2025
e1c0ab8
Update verify-email.tsx
joetannenbaum Aug 13, 2025
1d43c04
Update profile.tsx
joetannenbaum Aug 13, 2025
740c43f
Refactor layout styles for improved responsiveness (#145)
cwray-tech Aug 14, 2025
d2bfe83
Update package-lock.json
joetannenbaum Aug 14, 2025
604d119
useForm -> Form component
joetannenbaum Aug 14, 2025
02ed025
Update register.tsx
joetannenbaum Aug 14, 2025
322194c
Merge pull request #149 from laravel/intertia-form-component
joetannenbaum Aug 14, 2025
3892b3f
Update package-lock.json
joetannenbaum Aug 15, 2025
ea4dd3a
using new reset form component attributes
joetannenbaum Aug 15, 2025
87110a3
Merge pull request #150 from laravel/new-form-component-attributes
joetannenbaum Aug 15, 2025
ff5da60
Fix: Fix PHPStan error by chaining Stringable methods for email+IP (#…
Aluisio-Pires Aug 21, 2025
972b6ce
Merge pull request #131 from SantosVilanculos/patch-2
joetannenbaum Aug 21, 2025
c9e6a6c
Merge pull request #135 from HichemTab-tech:add-icons
joetannenbaum Aug 21, 2025
785571a
Replace Ziggy with Wayfinder
joetannenbaum Aug 21, 2025
80ffe0c
missed links
joetannenbaum Aug 21, 2025
94e00f5
Delete composer.lock
joetannenbaum Aug 21, 2025
0e3c962
adjust navitem to match link href type
joetannenbaum Aug 21, 2025
cc76d1b
Update nav-main.tsx
joetannenbaum Aug 21, 2025
21e50ce
Merge pull request #151 from laravel/replace-ziggy-with-wayfinder
joetannenbaum Aug 25, 2025
e6e6ffe
test: add authentication tests for rate limiting, email verification,…
JaavierR Aug 25, 2025
a9e643c
import full controller
joetannenbaum Aug 26, 2025
33a99fe
Merge pull request #153 from laravel/import-from-controllers
joetannenbaum Aug 26, 2025
974a427
Merge pull request #152 from JaavierR/test/add-missing-test
joetannenbaum Aug 26, 2025
30403f5
Change style from 'default' to 'new-york'
Nothing-Works Aug 26, 2025
75bb8b1
Update prettier import path in eslint config
Nothing-Works Aug 26, 2025
d973d92
Use Named Routes for Tests
mathiasgrimm Aug 26, 2025
c7f79f5
Merge pull request #157 from laravel/use-named-routes-for-tests
joetannenbaum Aug 27, 2025
991111f
Merge pull request #154 from Nothing-Works/patch-1
joetannenbaum Aug 27, 2025
d81539e
update config
taylorotwell Sep 2, 2025
7c3ed0d
Integrate PestPHP 4 Browser Tests
crynobone Sep 9, 2025
3fa356c
Removed the tailwind.config value
jezzdk Sep 10, 2025
93cb0ce
Merge pull request #161 from laravel/pest-ci
joetannenbaum Sep 12, 2025
3170955
Update .gitattributes
joetannenbaum Sep 12, 2025
992f5df
Merge pull request #164 from laravel/fix-git-attribute
joetannenbaum Sep 12, 2025
ae9022b
fix(seeder): prevent duplicate user on db:seed
Icegreeen Sep 13, 2025
b257567
Merge pull request #155 from Nothing-Works/patch-2
joetannenbaum Sep 15, 2025
695a12e
Merge pull request #165 from Icegreeen/fix/seeder-idempotent
joetannenbaum Sep 15, 2025
e05237c
Merge pull request #163 from jezzdk/patch-1
joetannenbaum Sep 15, 2025
3526a24
Update package-lock.json
joetannenbaum Sep 15, 2025
01aaed4
Merge pull request #167 from laravel/fix-npm-audit-issues
joetannenbaum Sep 15, 2025
75c546a
change print width from 150 to 80
joetannenbaum Sep 18, 2025
3382e92
Merge pull request #168 from laravel/prettier-print-width
joetannenbaum Sep 18, 2025
ed51c24
Add Two Factor Authentication for React Starter Kit (#156)
pushpak1300 Sep 18, 2025
5b7ad66
Add data-test attribute to sidebar menu button for testing
pushpak1300 Sep 22, 2025
a9ef842
Merge pull request #171 from laravel/add_test_attributes
joetannenbaum Sep 24, 2025
1936a8d
regenerate token on register
taylorotwell Sep 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@

CHANGELOG.md export-ignore
README.md export-ignore
.github/workflows/browser-tests.yml export-ignore
71 changes: 71 additions & 0 deletions .github/workflows/browser-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: browser-tests

on:
push:
branches:
- pest-ci
- develop
- main
pull_request:
branches:
- pest-ci
- develop
- main

jobs:
ci:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.4
tools: composer:v2
coverage: xdebug

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'

- name: Install Node Dependencies
run: npm ci

- name: Install Playwright Dependencies
run: npm install playwright@latest

- name: Install Playwright Browsers
run: npx playwright install --with-deps

- name: Add `laravel-labs/starter-kit-browser-tests` Repository
run: |
composer config repositories.browser-tests '{"type": "vcs", "url": "https://github.com/laravel-labs/starter-kit-browser-tests"}' --file composer.json
composer remove "phpunit/phpunit" --dev --no-update
composer require "laravel-labs/starter-kit-browser-tests:dev-main@dev" --dev --no-update

- name: Install Dependencies
run: composer install --no-interaction --prefer-dist --optimize-autoloader

- name: Copy Environment File
run: cp .env.example .env

- name: Generate Application Key
run: php artisan key:generate

- name: Setup Test Environment
run: |
cp vendor/laravel-labs/starter-kit-browser-tests/phpunit.xml.dist .
rm phpunit.xml
rm -Rf tests/
cp -rf vendor/laravel-labs/starter-kit-browser-tests/tests/ tests/

- name: Build Assets
run: npm run build

- name: Tests
run: php vendor/bin/pest
6 changes: 3 additions & 3 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ jobs:
- name: Install Node Dependencies
run: npm ci

- name: Build Assets
run: npm run build

- name: Install Dependencies
run: composer install --no-interaction --prefer-dist --optimize-autoloader

- name: Build Assets
run: npm run build

- name: Copy Environment File
run: cp .env.example .env

Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@
/public/build
/public/hot
/public/storage
/resources/js/actions
/resources/js/routes
/resources/js/wayfinder
/storage/*.key
/storage/pail
/vendor
.DS_Store
.env
.env.backup
.env.production
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
resources/js/components/ui/*
resources/views/mail/*
13 changes: 10 additions & 3 deletions .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,16 @@
"singleQuote": true,
"singleAttributePerLine": false,
"htmlWhitespaceSensitivity": "css",
"printWidth": 150,
"plugins": ["prettier-plugin-organize-imports", "prettier-plugin-tailwindcss"],
"tailwindFunctions": ["clsx", "cn"],
"printWidth": 80,
"plugins": [
"prettier-plugin-organize-imports",
"prettier-plugin-tailwindcss"
],
"tailwindFunctions": [
"clsx",
"cn"
],
"tailwindStylesheet": "resources/css/app.css",
"tabWidth": 4,
"overrides": [
{
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Our React starter kit provides a robust, modern starting point for building Lara

Inertia allows you to build modern, single-page React applications using classic server-side routing and controllers. This lets you enjoy the frontend power of React combined with the incredible backend productivity of Laravel and lightning-fast Vite compilation.

This React starter kit utilizes React 19, TypeScript, Tailwind, and the [shadcn/ui](https://ui.shadcn.com) component library.
This React starter kit utilizes React 19, TypeScript, Tailwind, and the [shadcn/ui](https://ui.shadcn.com) and [radix-ui](https://www.radix-ui.com) component libraries.

## Official Documentation

Expand Down
14 changes: 13 additions & 1 deletion app/Http/Controllers/Auth/AuthenticatedSessionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
use Inertia\Response;
use Laravel\Fortify\Features;

class AuthenticatedSessionController extends Controller
{
Expand All @@ -29,7 +30,18 @@ public function create(Request $request): Response
*/
public function store(LoginRequest $request): RedirectResponse
{
$request->authenticate();
$user = $request->validateCredentials();

if (Features::enabled(Features::twoFactorAuthentication()) && $user->hasEnabledTwoFactorAuthentication()) {
$request->session()->put([
'login.id' => $user->getKey(),
'login.remember' => $request->boolean('remember'),
]);

return to_route('two-factor.login');
}

Auth::login($user, $request->boolean('remember'));

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

Expand Down
41 changes: 0 additions & 41 deletions app/Http/Controllers/Auth/ConfirmablePasswordController.php

This file was deleted.

3 changes: 2 additions & 1 deletion app/Http/Controllers/Auth/NewPasswordController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
Expand Down Expand Up @@ -45,7 +46,7 @@ public function store(Request $request): RedirectResponse
// database. Otherwise we will parse the error and return the response.
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user) use ($request) {
function (User $user) use ($request) {
$user->forceFill([
'password' => Hash::make($request->password),
'remember_token' => Str::random(60),
Expand Down
4 changes: 3 additions & 1 deletion app/Http/Controllers/Auth/RegisteredUserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ public function store(Request $request): RedirectResponse

Auth::login($user);

return to_route('dashboard');
$request->session()->regenerate();

return redirect()->intended(route('dashboard', absolute: false));
}
}
8 changes: 1 addition & 7 deletions app/Http/Controllers/Auth/VerifyEmailController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\Verified;
use Illuminate\Foundation\Auth\EmailVerificationRequest;
use Illuminate\Http\RedirectResponse;

Expand All @@ -18,12 +17,7 @@ public function __invoke(EmailVerificationRequest $request): RedirectResponse
return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
}

if ($request->user()->markEmailAsVerified()) {
/** @var \Illuminate\Contracts\Auth\MustVerifyEmail $user */
$user = $request->user();

event(new Verified($user));
}
$request->fulfill();

return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
}
Expand Down
8 changes: 2 additions & 6 deletions app/Http/Controllers/Settings/PasswordController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace App\Http\Controllers\Settings;

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
Expand All @@ -16,12 +15,9 @@ class PasswordController extends Controller
/**
* Show the user's password settings page.
*/
public function edit(Request $request): Response
public function edit(): Response
{
return Inertia::render('settings/password', [
'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
'status' => $request->session()->get('status'),
]);
return Inertia::render('settings/password');
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

namespace App\Http\Controllers\Settings;

use App\Http\Controllers\Controller;
use App\Http\Requests\Settings\TwoFactorAuthenticationRequest;
use Illuminate\Routing\Controllers\HasMiddleware;
use Illuminate\Routing\Controllers\Middleware;
use Inertia\Inertia;
use Inertia\Response;
use Laravel\Fortify\Features;

class TwoFactorAuthenticationController extends Controller implements HasMiddleware
{
/**
* Get the middleware that should be assigned to the controller.
*/
public static function middleware(): array
{
return Features::optionEnabled(Features::twoFactorAuthentication(), 'confirmPassword')
? [new Middleware('password.confirm', only: ['show'])]
: [];
}

/**
* Show the user's two-factor authentication settings page.
*/
public function show(TwoFactorAuthenticationRequest $request): Response
{
$request->ensureStateIsValid();

return Inertia::render('settings/two-factor', [
'twoFactorEnabled' => $request->user()->hasEnabledTwoFactorAuthentication(),
'requiresConfirmation' => Features::optionEnabled(Features::twoFactorAuthentication(), 'confirm'),
]);
}
}
23 changes: 23 additions & 0 deletions app/Http/Middleware/HandleAppearance.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Symfony\Component\HttpFoundation\Response;

class HandleAppearance
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
View::share('appearance', $request->cookie('appearance') ?? 'system');

return $next($request);
}
}
1 change: 1 addition & 0 deletions app/Http/Middleware/HandleInertiaRequests.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public function share(Request $request): array
'auth' => [
'user' => $request->user(),
],
'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
];
}
}
Loading