diff --git a/.github/workflows/fix-php-code-style-issues.yml b/.github/workflows/fix-php-code-style-issues.yml
index 877b579..35f3b03 100644
--- a/.github/workflows/fix-php-code-style-issues.yml
+++ b/.github/workflows/fix-php-code-style-issues.yml
@@ -20,7 +20,7 @@ jobs:
           ref: ${{ github.head_ref }}
 
       - name: Fix PHP code style issues
-        uses: aglipanci/laravel-pint-action@2.4
+        uses: aglipanci/laravel-pint-action@2.5
 
       - name: Commit changes
         uses: stefanzweifel/git-auto-commit-action@v5
diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml
index 87e7ab5..be9754e 100644
--- a/.github/workflows/phpstan.yml
+++ b/.github/workflows/phpstan.yml
@@ -16,7 +16,7 @@ jobs:
       - name: Setup PHP
         uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3'
+          php-version: '8.4'
           coverage: none
 
       - name: Install composer dependencies
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index 479b4e0..5a6318c 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -13,13 +13,16 @@ jobs:
       fail-fast: true
       matrix:
         os: [ubuntu-latest, windows-latest]
-        php: [8.3, 8.2]
-        laravel: [11.*]
+        php: [8.4, 8.3]
+        laravel: [12.*, 11.*]
         stability: [prefer-lowest, prefer-stable]
         include:
           - laravel: 11.*
             testbench: 9.*
             carbon: ^2.63
+          - laravel: 12.*
+            testbench: 10.*
+            carbon: 3.*
 
     name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}
 
@@ -49,15 +52,15 @@ jobs:
 
       - name: Execute tests
         run: vendor/bin/pest --ci
-        if: matrix.laravel != '11.*' && matrix.php != 8.3 || matrix.stability != 'prefer-stable' || matrix.os != 'ubuntu-latest'
+        if: matrix.laravel != '12.*' && matrix.php != 8.4 || matrix.stability != 'prefer-stable' || matrix.os != 'ubuntu-latest'
 
       - name: Execute tests with coverage
         run: vendor/bin/pest --ci --coverage-clover coverage.xml
-        if: matrix.laravel == '11.*' && matrix.php == 8.3 && matrix.stability == 'prefer-stable' && matrix.os == 'ubuntu-latest'
+        if: matrix.laravel == '12.*' && matrix.php == 8.4 && matrix.stability == 'prefer-stable' && matrix.os == 'ubuntu-latest'
 
       - name: Save code coverage to artifact
         uses: actions/upload-artifact@v4
-        if: matrix.laravel == '11.*' && matrix.php == 8.3 && matrix.stability == 'prefer-stable' && matrix.os == 'ubuntu-latest'
+        if: matrix.laravel == '12.*' && matrix.php == 8.4 && matrix.stability == 'prefer-stable' && matrix.os == 'ubuntu-latest'
         with:
           name: code-coverage
           path: "coverage.xml"
@@ -77,4 +80,4 @@ jobs:
         uses: codecov/codecov-action@v5
         with:
           token: ${{ secrets.CODECOV_TOKEN }}
-          fail_ci_if_error: true
\ No newline at end of file
+          fail_ci_if_error: true
diff --git a/composer.json b/composer.json
index 4f0da2a..f6f6beb 100644
--- a/composer.json
+++ b/composer.json
@@ -12,11 +12,11 @@
 		}
 	],
 	"require": {
-		"php": "^8.2|^8.3",
+		"php": "^8.3|^8.4",
 		"chinleung/laravel-locales": "^2.1",
 		"codezero/laravel-unique-translation": "^4.3",
 		"commerceguys/intl": "^2.0",
-		"illuminate/contracts": "^11.0",
+		"illuminate/contracts": "^11.0|^12.0",
 		"livewire/livewire": "^3.5",
 		"spatie/laravel-package-tools": "^1.16",
 		"spatie/laravel-sluggable": "^3.6",
diff --git a/package-lock.json b/package-lock.json
index f375725..f7044ed 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -305,9 +305,9 @@
 			}
 		},
 		"node_modules/@commitlint/is-ignored": {
-			"version": "19.6.0",
-			"resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.6.0.tgz",
-			"integrity": "sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==",
+			"version": "19.7.1",
+			"resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.7.1.tgz",
+			"integrity": "sha512-3IaOc6HVg2hAoGleRK3r9vL9zZ3XY0rf1RsUf6jdQLuaD46ZHnXBiOPTyQ004C4IvYjSWqJwlh0/u2P73aIE3g==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
@@ -319,13 +319,13 @@
 			}
 		},
 		"node_modules/@commitlint/lint": {
-			"version": "19.6.0",
-			"resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.6.0.tgz",
-			"integrity": "sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==",
+			"version": "19.7.1",
+			"resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.7.1.tgz",
+			"integrity": "sha512-LhcPfVjcOcOZA7LEuBBeO00o3MeZa+tWrX9Xyl1r9PMd5FWsEoZI9IgnGqTKZ0lZt5pO3ZlstgnRyY1CJJc9Xg==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"@commitlint/is-ignored": "^19.6.0",
+				"@commitlint/is-ignored": "^19.7.1",
 				"@commitlint/parse": "^19.5.0",
 				"@commitlint/rules": "^19.6.0",
 				"@commitlint/types": "^19.5.0"
@@ -335,9 +335,9 @@
 			}
 		},
 		"node_modules/@commitlint/load": {
-			"version": "19.5.0",
-			"resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.5.0.tgz",
-			"integrity": "sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==",
+			"version": "19.6.1",
+			"resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.6.1.tgz",
+			"integrity": "sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
@@ -347,7 +347,7 @@
 				"@commitlint/types": "^19.5.0",
 				"chalk": "^5.3.0",
 				"cosmiconfig": "^9.0.0",
-				"cosmiconfig-typescript-loader": "^5.0.0",
+				"cosmiconfig-typescript-loader": "^6.1.0",
 				"lodash.isplainobject": "^4.0.6",
 				"lodash.merge": "^4.6.2",
 				"lodash.uniq": "^4.5.0"
@@ -949,9 +949,9 @@
 			}
 		},
 		"node_modules/@types/node": {
-			"version": "22.10.1",
-			"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz",
-			"integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==",
+			"version": "22.13.9",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz",
+			"integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
@@ -1072,9 +1072,9 @@
 			}
 		},
 		"node_modules/chalk": {
-			"version": "5.3.0",
-			"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
-			"integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+			"version": "5.4.1",
+			"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
+			"integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
 			"dev": true,
 			"license": "MIT",
 			"engines": {
@@ -1342,21 +1342,21 @@
 			}
 		},
 		"node_modules/cosmiconfig-typescript-loader": {
-			"version": "5.1.0",
-			"resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.1.0.tgz",
-			"integrity": "sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==",
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz",
+			"integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"jiti": "^1.21.6"
+				"jiti": "^2.4.1"
 			},
 			"engines": {
-				"node": ">=v16"
+				"node": ">=v18"
 			},
 			"peerDependencies": {
 				"@types/node": "*",
-				"cosmiconfig": ">=8.2",
-				"typescript": ">=4"
+				"cosmiconfig": ">=9",
+				"typescript": ">=5"
 			}
 		},
 		"node_modules/cross-spawn": {
@@ -1567,10 +1567,20 @@
 			"license": "MIT"
 		},
 		"node_modules/fast-uri": {
-			"version": "3.0.3",
-			"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
-			"integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==",
-			"dev": true,
+			"version": "3.0.6",
+			"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
+			"integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/fastify"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/fastify"
+				}
+			],
 			"license": "BSD-3-Clause"
 		},
 		"node_modules/fill-range": {
@@ -1605,13 +1615,13 @@
 			}
 		},
 		"node_modules/foreground-child": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
-			"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+			"version": "3.3.1",
+			"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+			"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
 			"dev": true,
 			"license": "ISC",
 			"dependencies": {
-				"cross-spawn": "^7.0.0",
+				"cross-spawn": "^7.0.6",
 				"signal-exit": "^4.0.1"
 			},
 			"engines": {
@@ -1676,9 +1686,9 @@
 			}
 		},
 		"node_modules/glob": {
-			"version": "11.0.0",
-			"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
-			"integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
+			"version": "11.0.1",
+			"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz",
+			"integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==",
 			"dev": true,
 			"license": "ISC",
 			"dependencies": {
@@ -1758,9 +1768,9 @@
 			}
 		},
 		"node_modules/import-fresh": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-			"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+			"version": "3.3.1",
+			"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+			"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
@@ -1879,9 +1889,9 @@
 			"license": "ISC"
 		},
 		"node_modules/jackspeak": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz",
-			"integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==",
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz",
+			"integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==",
 			"dev": true,
 			"license": "BlueOak-1.0.0",
 			"dependencies": {
@@ -1895,13 +1905,13 @@
 			}
 		},
 		"node_modules/jiti": {
-			"version": "1.21.6",
-			"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
-			"integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+			"version": "2.4.2",
+			"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
+			"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
 			"dev": true,
 			"license": "MIT",
 			"bin": {
-				"jiti": "bin/jiti.js"
+				"jiti": "lib/jiti-cli.mjs"
 			}
 		},
 		"node_modules/js-tokens": {
@@ -2256,6 +2266,19 @@
 				"url": "https://opencollective.com/lint-staged"
 			}
 		},
+		"node_modules/lint-staged/node_modules/chalk": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+			"integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^12.17.0 || ^14.13 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/chalk?sponsor=1"
+			}
+		},
 		"node_modules/listr2": {
 			"version": "8.2.5",
 			"resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz",
@@ -2901,9 +2924,9 @@
 			}
 		},
 		"node_modules/semver": {
-			"version": "7.6.3",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-			"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+			"version": "7.7.1",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+			"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
 			"dev": true,
 			"license": "ISC",
 			"bin": {
@@ -3147,9 +3170,9 @@
 			"license": "MIT"
 		},
 		"node_modules/tinyexec": {
-			"version": "0.3.1",
-			"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz",
-			"integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==",
+			"version": "0.3.2",
+			"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+			"integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
 			"dev": true,
 			"license": "MIT"
 		},
@@ -3167,9 +3190,9 @@
 			}
 		},
 		"node_modules/typescript": {
-			"version": "5.7.2",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
-			"integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
+			"version": "5.8.2",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
+			"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
 			"dev": true,
 			"license": "Apache-2.0",
 			"peer": true,