Merge branch '3.x' into panels-navigation-documentation

This commit is contained in:
Dan Harrin
2025-02-03 07:58:06 +00:00
committed by GitHub
237 changed files with 8198 additions and 4281 deletions
+5 -5
View File
@@ -2,11 +2,11 @@
## Supported Versions
| Version | Supported |
|---------| ------------------ |
| 1.x | :white_check_mark: |
| 2.x | :white_check_mark: |
| 3.x | :white_check_mark: |
| Version | Supported | EOSL Date |
|---------| --------- | ---------------- |
| 1.x | ⚠️ | 1st July 2025 |
| 2.x | ⚠️ | 1st January 2026 |
| 3.x | ✅ | TBA |
## Reporting a Vulnerability
+2 -2
View File
@@ -9,11 +9,11 @@
},
"require-dev": {
"anourvalar/eloquent-serialize": "^1.2",
"danharrin/livewire-rate-limiting": "^0.3|^1.0",
"danharrin/livewire-rate-limiting": "^0.3|^1.0|^2.0",
"filament/support": "*",
"larastan/larastan": "^2.2",
"laravel/pint": "^1.0",
"league/csv": "^9.14",
"league/csv": "^9.16",
"league/flysystem-aws-s3-v3": "^3.0",
"nunomaduro/termwind": "^1.0|^2.0",
"openspout/openspout": "^4.23",
Generated
+484 -477
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -10,6 +10,7 @@ use App\Http\Middleware\TrimStrings;
use App\Http\Middleware\TrustProxies;
use App\Http\Middleware\ValidateSignature;
use App\Http\Middleware\VerifyCsrfToken;
use Filament\Http\Middleware\AuthenticateSession;
use Illuminate\Auth\Middleware\AuthenticateWithBasicAuth;
use Illuminate\Auth\Middleware\Authorize;
use Illuminate\Auth\Middleware\EnsureEmailIsVerified;
@@ -22,7 +23,6 @@ use Illuminate\Http\Middleware\HandleCors;
use Illuminate\Http\Middleware\SetCacheHeaders;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Routing\Middleware\ThrottleRequests;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
@@ -3,6 +3,7 @@
namespace App\Providers\Filament;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\AuthenticateSession;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages;
@@ -14,7 +15,6 @@ use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
+591 -516
View File
File diff suppressed because it is too large Load Diff
+165 -164
View File
@@ -373,9 +373,9 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
"integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -402,9 +402,9 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
@@ -457,20 +457,20 @@
}
},
"node_modules/@tailwindcss/forms": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz",
"integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==",
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.9.tgz",
"integrity": "sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==",
"dependencies": {
"mini-svg-data-uri": "^1.2.3"
},
"peerDependencies": {
"tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
"tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20"
}
},
"node_modules/@tailwindcss/typography": {
"version": "0.5.10",
"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz",
"integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==",
"version": "0.5.15",
"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz",
"integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==",
"dependencies": {
"lodash.castarray": "^4.4.0",
"lodash.isplainobject": "^4.0.6",
@@ -478,13 +478,13 @@
"postcss-selector-parser": "6.0.10"
},
"peerDependencies": {
"tailwindcss": ">=3.0.0 || insiders"
"tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20"
}
},
"node_modules/ansi-regex": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
"engines": {
"node": ">=12"
},
@@ -526,9 +526,9 @@
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
"node_modules/autoprefixer": {
"version": "10.4.18",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz",
"integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==",
"version": "10.4.20",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
"integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
"funding": [
{
"type": "opencollective",
@@ -544,11 +544,11 @@
}
],
"dependencies": {
"browserslist": "^4.23.0",
"caniuse-lite": "^1.0.30001591",
"browserslist": "^4.23.3",
"caniuse-lite": "^1.0.30001646",
"fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
"picocolors": "^1.0.1",
"postcss-value-parser": "^4.2.0"
},
"bin": {
@@ -567,11 +567,14 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/brace-expansion": {
@@ -594,9 +597,9 @@
}
},
"node_modules/browserslist": {
"version": "4.23.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
"version": "4.24.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz",
"integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
"funding": [
{
"type": "opencollective",
@@ -612,10 +615,10 @@
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001587",
"electron-to-chromium": "^1.4.668",
"node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
"caniuse-lite": "^1.0.30001688",
"electron-to-chromium": "^1.5.73",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
@@ -633,9 +636,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001593",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz",
"integrity": "sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==",
"version": "1.0.30001689",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz",
"integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==",
"funding": [
{
"type": "opencollective",
@@ -749,9 +752,9 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/electron-to-chromium": {
"version": "1.4.690",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz",
"integrity": "sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA=="
"version": "1.5.74",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.74.tgz",
"integrity": "sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw=="
},
"node_modules/emoji-regex": {
"version": "9.2.2",
@@ -795,9 +798,9 @@
}
},
"node_modules/escalade": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"engines": {
"node": ">=6"
}
@@ -848,9 +851,9 @@
}
},
"node_modules/foreground-child": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
"integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
@@ -896,22 +899,20 @@
}
},
"node_modules/glob": {
"version": "10.3.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
"integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"version": "10.4.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.3.5",
"minimatch": "^9.0.1",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
"path-scurry": "^1.10.1"
"jackspeak": "^3.1.2",
"minimatch": "^9.0.4",
"minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0",
"path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
@@ -928,9 +929,9 @@
}
},
"node_modules/hasown": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
"integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -950,11 +951,14 @@
}
},
"node_modules/is-core-module": {
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz",
"integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==",
"dependencies": {
"hasown": "^2.0.0"
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1001,15 +1005,12 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
"node_modules/jackspeak": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
"integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
@@ -1018,9 +1019,9 @@
}
},
"node_modules/jiti": {
"version": "1.21.0",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
"integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
"version": "1.21.6",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
"integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
"bin": {
"jiti": "bin/jiti.js"
}
@@ -1041,11 +1042,14 @@
}
},
"node_modules/lilconfig": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
"engines": {
"node": ">=10"
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/lines-and-columns": {
@@ -1069,12 +1073,9 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
},
"node_modules/lru-cache": {
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
"integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
"engines": {
"node": "14 || >=16.14"
}
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
},
"node_modules/merge2": {
"version": "1.4.1",
@@ -1105,9 +1106,9 @@
}
},
"node_modules/minimatch": {
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -1119,9 +1120,9 @@
}
},
"node_modules/minipass": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
"integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -1137,9 +1138,9 @@
}
},
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"version": "3.3.8",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
"integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"funding": [
{
"type": "github",
@@ -1154,9 +1155,9 @@
}
},
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -1190,6 +1191,11 @@
"node": ">= 6"
}
},
"node_modules/package-json-from-dist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
},
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -1204,24 +1210,24 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-scurry": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
"integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dependencies": {
"lru-cache": "^9.1.1 || ^10.0.0",
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
"node": ">=16 || 14 >=14.17"
"node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -1251,9 +1257,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.35",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
"integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
"version": "8.4.49",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
"funding": [
{
"type": "opencollective",
@@ -1270,8 +1276,8 @@
],
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -1345,39 +1351,34 @@
}
}
},
"node_modules/postcss-load-config/node_modules/lilconfig": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
"integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/postcss-nested": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
"integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"postcss-selector-parser": "^6.0.11"
"postcss-selector-parser": "^6.1.1"
},
"engines": {
"node": ">=12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"postcss": "^8.2.14"
}
},
"node_modules/postcss-nested/node_modules/postcss-selector-parser": {
"version": "6.0.15",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
"integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -1522,11 +1523,11 @@
}
},
"node_modules/resolve": {
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"version": "1.22.9",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.9.tgz",
"integrity": "sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==",
"dependencies": {
"is-core-module": "^2.13.0",
"is-core-module": "^2.16.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -1614,9 +1615,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"engines": {
"node": ">=0.10.0"
}
@@ -1742,32 +1743,32 @@
}
},
"node_modules/tailwindcss": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz",
"integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==",
"version": "3.4.16",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.16.tgz",
"integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
"chokidar": "^3.5.3",
"chokidar": "^3.6.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
"fast-glob": "^3.3.0",
"fast-glob": "^3.3.2",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"jiti": "^1.19.1",
"lilconfig": "^2.1.0",
"micromatch": "^4.0.5",
"jiti": "^1.21.6",
"lilconfig": "^3.1.3",
"micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
"object-hash": "^3.0.0",
"picocolors": "^1.0.0",
"postcss": "^8.4.23",
"picocolors": "^1.1.1",
"postcss": "^8.4.47",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
"postcss-load-config": "^4.0.1",
"postcss-nested": "^6.0.1",
"postcss-selector-parser": "^6.0.11",
"resolve": "^1.22.2",
"sucrase": "^3.32.0"
"postcss-load-config": "^4.0.2",
"postcss-nested": "^6.2.0",
"postcss-selector-parser": "^6.1.2",
"resolve": "^1.22.8",
"sucrase": "^3.35.0"
},
"bin": {
"tailwind": "lib/cli.js",
@@ -1778,9 +1779,9 @@
}
},
"node_modules/tailwindcss/node_modules/postcss-selector-parser": {
"version": "6.0.15",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
"integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -1825,9 +1826,9 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
},
"node_modules/update-browserslist-db": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
"integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
"funding": [
{
"type": "opencollective",
@@ -1843,8 +1844,8 @@
}
],
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
"escalade": "^3.2.0",
"picocolors": "^1.1.0"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -1913,9 +1914,9 @@
}
},
"node_modules/vite-plugin-full-reload": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz",
"integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz",
"integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==",
"dependencies": {
"picocolors": "^1.0.0",
"picomatch": "^2.3.1"
@@ -2020,9 +2021,9 @@
}
},
"node_modules/yaml": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.0.tgz",
"integrity": "sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==",
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
"integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
"bin": {
"yaml": "bin.mjs"
},
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1914 -2642
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -62,6 +62,6 @@
"tippy.js": "^6.3.7",
"trix": "^2.1",
"uuid-browser": "^3.1.0",
"vanilla-colorful": "^0.6.2"
"vanilla-colorful": "^0.7.2"
}
}
+1 -1
View File
@@ -17,7 +17,7 @@
"illuminate/contracts": "^10.45|^11.0",
"illuminate/database": "^10.45|^11.0",
"illuminate/support": "^10.45|^11.0",
"league/csv": "^9.14",
"league/csv": "^9.16",
"openspout/openspout": "^4.23",
"spatie/laravel-package-tools": "^1.9"
},
+1 -1
View File
@@ -47,7 +47,7 @@ php artisan filament:install --actions
Run the following command to install Tailwind CSS with the Tailwind Forms and Typography plugins:
```bash
npm install tailwindcss @tailwindcss/forms @tailwindcss/typography postcss postcss-nesting autoprefixer --save-dev
npm install tailwindcss@3 @tailwindcss/forms @tailwindcss/typography postcss postcss-nesting autoprefixer --save-dev
```
Create a new `tailwind.config.js` file and add the Filament `preset` *(includes the Filament color scheme and the required Tailwind plugins)*:
@@ -840,7 +840,7 @@ The current record (if it exists yet) is accessible in `$this->record`, and the
## Authorization
By default, only the user who started the import may access the failure CSV file that gets generated if part of an import fails. If you'd like to customize the authorization logic, you may create an `ImportPolicy` class, and [register it in your `AuthServiceProvider`](https://laravel.com/docs/10.x/authorization#registering-policies):
By default, only the user who started the import may access the failure CSV file that gets generated if part of an import fails. If you'd like to customize the authorization logic, you may create an `ImportPolicy` class, and [register it in your `AuthServiceProvider`](https://laravel.com/docs/authorization#registering-policies):
```php
use App\Policies\ImportPolicy;
@@ -690,7 +690,7 @@ public function getJobBatchName(): ?string
## Authorization
By default, only the user who started the export may download files that get generated. If you'd like to customize the authorization logic, you may create an `ExportPolicy` class, and [register it in your `AuthServiceProvider`](https://laravel.com/docs/10.x/authorization#registering-policies):
By default, only the user who started the export may download files that get generated. If you'd like to customize the authorization logic, you may create an `ExportPolicy` class, and [register it in your `AuthServiceProvider`](https://laravel.com/docs/authorization#registering-policies):
```php
use App\Policies\ExportPolicy;
@@ -13,7 +13,7 @@ return [
'actions' => [
'create' => [
'label' => 'دروستکرن',
'label' => 'دروستکردن',
],
'create_another' => [
@@ -25,7 +25,7 @@ return [
],
'attach_another' => [
'label' => 'Priloži i priloži drugi',
'label' => 'Priloži i dodaj još jedan',
],
],
@@ -17,7 +17,7 @@ return [
],
'create_another' => [
'label' => 'Napravi i napravi drugi',
'label' => 'Napravi i dodaj još jedan',
],
],
@@ -36,7 +36,7 @@ return [
'modal' => [
'heading' => 'Obriši odabrano :label',
'heading' => 'Obriši odabrano',
'actions' => [
@@ -0,0 +1,76 @@
<?php
return [
'label' => 'Izvezi :label',
'modal' => [
'heading' => 'Izvezi :label',
'form' => [
'columns' => [
'label' => 'Stupci',
'form' => [
'is_enabled' => [
'label' => ':column je omogućen',
],
'label' => [
'label' => ':column oznaka',
],
],
],
],
'actions' => [
'export' => [
'label' => 'Izvoz',
],
],
],
'notifications' => [
'completed' => [
'title' => 'Izvoz podataka završen',
'actions' => [
'download_csv' => [
'label' => 'Preuzmi .csv',
],
'download_xlsx' => [
'label' => 'Preuzmi .xlsx',
],
],
],
'max_rows' => [
'title' => 'Datoteka za preuzimanje je prevelika',
'body' => '{1} Ne možeš preuzeti više od jednog reda odjednom.|[2,4] Ne možeš preuzeti više od :count reda odjednom.|[5,*] Ne možeš preuzeti više od :count redova odjednom.',
],
'started' => [
'title' => 'Izvoz datoteka je započeo',
'body' => '{1} Tvoj izvoz datoteka je započeo i jedan red će se obraditi u pozadini. Dobit ćeš obavijest kada je izrađena poveznica za preuzimanje.|[2,4] Tvoj izvoz datoteka je započeo i :count reda će se obraditi u pozadini. Dobit ćeš obavijest kada je izrađena poveznica za preuzimanje.|[5,*] Tvoj izvoz datoteka je započeo i :count redova će se obraditi u pozadini. Dobit ćeš obavijest kada je izrađena poveznica za preuzimanje.',
],
],
'file_name' => 'export-:export_id-:model',
];
@@ -4,11 +4,11 @@ return [
'single' => [
'label' => 'Prisilno izbriši',
'label' => 'Prisilno obriši',
'modal' => [
'heading' => 'Prisilno izbriši :label',
'heading' => 'Prisilno obriši :label',
'actions' => [
@@ -32,11 +32,11 @@ return [
'multiple' => [
'label' => 'Prisilno izbriši odabrano',
'label' => 'Prisilno obriši odabrano',
'modal' => [
'heading' => 'Prisilno izbriši odabrano :label',
'heading' => 'Prisilno obriši odabrano',
'actions' => [
@@ -0,0 +1,84 @@
<?php
return [
'label' => 'Uvezi :label',
'modal' => [
'heading' => 'Uvezi :label',
'form' => [
'file' => [
'label' => 'File',
'placeholder' => 'Prenesi CSV datoteku',
// Ovdje nisam bio siguran je li moramo i to pravilo prevesti
'rules' => [
'duplicate_columns' => '{0} The file must not contain more than one empty column header.|{1,*} The file must not contain duplicate column headers: :columns.',
],
],
'columns' => [
'label' => 'Stupac',
'placeholder' => 'Odaberi stupac',
],
],
'actions' => [
'download_example' => [
'label' => 'Preuzmi primjer CSV datoteke',
],
'import' => [
'label' => 'Uvoz',
],
],
],
'notifications' => [
'completed' => [
'title' => 'Uvoz je završen',
'actions' => [
'download_failed_rows_csv' => [
'label' => 'Preuzmi informaciju o neuspjelom pokušaju preuzimanja retka|Preuzmi informaciju o neuspjelom pokušaju preuzimanja redaka',
],
],
],
'max_rows' => [
'title' => 'Poslana CSV datoteka je prevelika',
'body' => '{1} Ne možeš uvesti više od jednog reda odjednom.|[2,4] Ne možeš uvesti više od :count reda odjednom.|[5,*] Ne možeš uvesti više od :count redova odjednom.',
],
'started' => [
'title' => 'Uvoz je započeo',
'body' => '{1} Uvoz je započeo i jedan red će se obraditi u pozadini.|[2,4] Uvoz je započeo i :count reda će se obraditi u pozadini.|[5,*] Uvoz je započeo i :count redova će se obraditi u pozadini.',
],
],
'example_csv' => [
'file_name' => ':importer-example',
],
'failure_csv' => [
'file_name' => 'import-:import_id-:csv_name-failed-rows',
'error_header' => 'error',
'system_error' => 'System error, please contact support.',
'column_mapping_required_for_new_record' => 'The :attribute column was not mapped to a column in the file, but it is required for creating new records.',
],
];
+1 -1
View File
@@ -2,7 +2,7 @@
return [
'confirmation' => 'Jeste li sigurni da želite to učiniti?',
'confirmation' => 'Jesi li siguran da želiš to učiniti?',
'actions' => [
@@ -8,7 +8,7 @@ return [
'modal' => [
'heading' => ':label lecstolása',
'heading' => ':label lecsatolása',
'actions' => [
@@ -44,7 +44,7 @@ return [
'completed' => [
'title' => 'AZ exportálás befejeződött',
'title' => 'Az exportálás befejeződött',
'actions' => [
@@ -67,7 +67,7 @@ return [
'started' => [
'title' => 'Az exportálás elkezdődött',
'body' => 'Elkezdődött 1 exportálása a háttérben.|Elkezdődött :count sor exportálása a háttérben.',
'body' => 'Elkezdődött 1 sor exportálása a háttérben. Ha elkészült, akkor a letöltési hivatkozás egy új értesítésben fog megjelenni.|Elkezdődött :count sor exportálása a háttérben. Ha elkészült, akkor a letöltési hivatkozás egy új értesítésben fog megjelenni.',
],
],
@@ -13,6 +13,9 @@ return [
'file' => [
'label' => 'Fájl',
'placeholder' => 'Tölts fel egy CSV fájlt',
'rules' => [
'duplicate_columns' => '{0} A fájl nem tartalmazhat egynél több üres oszlopfejlécet.|{1,*} A fájl nem tartalmazhat ismétlődő oszlopfejléceket: :columns.',
],
],
'columns' => [
@@ -72,6 +75,7 @@ return [
'file_name' => 'importálás-:import_id-:csv_name-sikertelen-sorok',
'error_header' => 'hiba',
'system_error' => 'Rendszerhiba, kérlek lépj kapcsolatba az ügyfélszolgálattal.',
'column_mapping_required_for_new_record' => 'A :attribute oszlopot a fájlban lévő oszlopok egyikéhez sem sikerült hozzárendelni, így nem hozhatóak létre új rekordok.',
],
];
@@ -8,7 +8,7 @@ return [
'modal' => [
'heading' => 'Ջնջել :label',
'heading' => 'Ջնջել :labelը',
'actions' => [
@@ -36,7 +36,7 @@ return [
'modal' => [
'heading' => 'Ջնջել ընտրված :label',
'heading' => 'Ջնջել ընտրված :labelը',
'actions' => [
@@ -36,7 +36,7 @@ return [
'modal' => [
'heading' => 'Անջատել ընտրված :label',
'heading' => 'Անջատել ընտրված :labelը',
'actions' => [
@@ -36,7 +36,7 @@ return [
'modal' => [
'heading' => 'Տարանջատել ընտրված :label',
'heading' => 'Տարանջատել ընտրված :labelը',
'actions' => [
+1 -1
View File
@@ -8,7 +8,7 @@ return [
'modal' => [
'heading' => 'Խմբագրել :label',
'heading' => 'Խմբագրել :labelը',
'actions' => [
@@ -0,0 +1,77 @@
<?php
return [
'label' => 'Արտահանել :label',
'modal' => [
'heading' => 'Արտահանել :label',
'form' => [
'columns' => [
'label' => 'Սյունակներ',
'form' => [
'is_enabled' => [
'label' => ':column միացված է',
],
'label' => [
'label' => ':column պիտակ',
],
],
],
],
'actions' => [
'export' => [
'label' => 'Արտահանել',
],
],
],
'notifications' => [
'completed' => [
'title' => 'Արտահանումն ավարտված է',
'actions' => [
'download_csv' => [
'label' => 'Ներբեռնել .csv',
],
'download_xlsx' => [
'label' => 'Ներբեռնել .xlsx',
],
],
],
'max_rows' => [
'title' => 'Արտահանումը չափազանց մեծ է',
'body' => 'Դուք չեք կարող միաժամանակ արտահանել ավելի քան 1 տող։|Դուք չեք կարող միաժամանակ արտահանել ավելի քան :count տող։',
],
'started' => [
'title' => 'Արտահանումը սկսվել է',
'body' => 'Ձեր արտահանումը սկսվել է, և 1 տողը կմշակվի հետին պլանում։ Ավարտվելուց հետո դուք կստանաք ծանուցում ներբեռնման հղումով։|Ձեր արտահանումը սկսվել է, և :count տողը կմշակվի հետին պլանում։ Ավարտվելուց հետո դուք կստանաք ծանուցում ներբեռնման հղումով։',
],
],
'file_name' => 'export-:export_id-:model',
];
@@ -8,7 +8,7 @@ return [
'modal' => [
'heading' => 'Հարկադրված ջնջել :label',
'heading' => 'Հարկադրված ջնջել :labelը',
'actions' => [
@@ -36,7 +36,7 @@ return [
'modal' => [
'heading' => 'Հարկադրված ջնջել ընտրված :label',
'heading' => 'Հարկադրված ջնջել ընտրված :labelը',
'actions' => [
@@ -0,0 +1,85 @@
<?php
return [
'label' => 'Ներմուծել :label',
'modal' => [
'heading' => 'Ներմուծել :label',
'form' => [
'file' => [
'label' => 'Ֆայլ',
'placeholder' => 'Վերբեռնել CSV ֆայլը',
'rules' => [
'duplicate_columns' => '{0} ֆայլը չպետք է պարունակի մեկից ավելի դատարկ սյունակի վերնագիր։ |{1,*} ֆայլը չպետք է պարունակի կրկնօրինակ սյունակի :columns վերնագրեր։',
],
],
'columns' => [
'label' => 'Սյունակներ',
'placeholder' => 'Ընտրեք սյունակը',
],
],
'actions' => [
'download_example' => [
'label' => 'Ներբեռնել CSV ֆայլի օրինակ',
],
'import' => [
'label' => 'Ներմուծել',
],
],
],
'notifications' => [
'completed' => [
'title' => 'Ներմուծումն ավարտված է',
'actions' => [
'download_failed_rows_csv' => [
'label' => 'Ներբեռնել սխալ տողի տեղեկատվությունը|Ներբեռնել սխալ տողերի տեղեկատվությունը',
],
],
],
'max_rows' => [
'title' => 'Ներբեռնված CSV ֆայլը չափազանց մեծ է',
'body' => 'Դուք չեք կարող միաժամանակ ներմուծել ավելի քան 1 տող։/ Դուք չեք կարող միաժամանակ ներմուծել ավելի քան :count տող։',
],
'started' => [
'title' => 'Ներմուծումը սկսվել է',
'body' => 'Ձեր ներմուծումը սկսվել է, և 1 տողը կմշակվի հետին պլանում։|Ձեր ներմուծումը սկսվել է, և :count տող կվերամշակվեն հետին պլանում։',
],
],
'example_csv' => [
'file_name' => ':importer-example',
],
'failure_csv' => [
'file_name' => 'import-:import_id-:csv_name-failed-rows',
'error_header' => 'սխալ',
'system_error' => 'Համակարգի սխալ, խնդրում ենք կապվել սպասարկման կենտրոնի հետ։',
'column_mapping_required_for_new_record' => 'Այս :attribute սյունակը համատեղված չէ ֆայլի սյունակում, բայց պահանջվում է նոր գրառումներ ստեղծելու համար։',
],
];
+1 -1
View File
@@ -2,7 +2,7 @@
return [
'confirmation' => 'Վստա՞հ եք, որ ցանկանում եք դա անել:',
'confirmation' => 'Վստա՞հ եք, որ ցանկանում եք դա անել։',
'actions' => [
@@ -8,7 +8,7 @@ return [
'modal' => [
'heading' => 'Կրկնօրինակել :label',
'heading' => 'Կրկնօրինակել :labelը',
'actions' => [
@@ -8,7 +8,7 @@ return [
'modal' => [
'heading' => 'Վերականգնել :label',
'heading' => 'Վերականգնել :labelը',
'actions' => [
@@ -23,7 +23,7 @@ return [
'notifications' => [
'restored' => [
'title' => 'Գրառումը վերականգնել է',
'title' => 'Գրառումը վերականգնվել է',
],
],
@@ -36,7 +36,7 @@ return [
'modal' => [
'heading' => 'Վերականգնել ընտրված :label',
'heading' => 'Վերականգնել ընտրված :labelը',
'actions' => [
@@ -51,7 +51,7 @@ return [
'notifications' => [
'restored' => [
'title' => 'Գրառումները վերականգնել են',
'title' => 'Գրառումները վերականգնվել են։',
],
],
+1 -1
View File
@@ -8,7 +8,7 @@ return [
'modal' => [
'heading' => 'Դիտել :label',
'heading' => 'Դիտել :labelը',
'actions' => [
@@ -13,7 +13,7 @@ return [
'actions' => [
'create' => [
'label' => 'دروستکرن',
'label' => 'دروستکردن',
],
'create_another' => [
@@ -78,6 +78,7 @@ return [
'file_name' => 'import-:import_id-:csv_name-failed-rows',
'error_header' => 'ralat',
'system_error' => 'Ralat sistem, sila hubungi sokongan.',
'column_mapping_required_for_new_record' => 'Lajur :attribute tidak dipetakan ke lajur dalam fail, tetapi ia diperlukan untuk mencipta rekod baharu.',
],
];
@@ -11,8 +11,15 @@ return [
'form' => [
'file' => [
'label' => 'Plik',
'placeholder' => 'Wybierz plik CSV',
'rules' => [
'duplicate_columns' => '{0} Plik nie może zawierać więcej niż jednego pustego nagłówka kolumny.|{1,*} Plik nie może zawierać duplikatów nagłówków kolumn: :columns.',
],
],
'columns' => [
@@ -72,6 +79,7 @@ return [
'file_name' => 'import-:import_id-:csv_name-failed-rows',
'error_header' => 'błąd',
'system_error' => 'Błąd systemu, skontaktuj się z pomocą techniczną.',
'column_mapping_required_for_new_record' => 'Kolumna :attribute nie została odwzorowana na kolumnę w pliku, ale jest wymagana do tworzenia nowych rekordów.',
],
];
@@ -0,0 +1,77 @@
<?php
return [
'label' => ':labelni export qilish',
'modal' => [
'heading' => ':labelni export qilish',
'form' => [
'columns' => [
'label' => 'Ustunlar',
'form' => [
'is_enabled' => [
'label' => ':column yoqilgan',
],
'label' => [
'label' => ':column belgi',
],
],
],
],
'actions' => [
'export' => [
'label' => 'Export',
],
],
],
'notifications' => [
'completed' => [
'title' => 'Export yakunlandi',
'actions' => [
'download_csv' => [
'label' => 'Yuklab olish .csv',
],
'download_xlsx' => [
'label' => 'Yuklab olish .xlsx',
],
],
],
'max_rows' => [
'title' => 'Export qilish uchun juda katta',
'body' => 'Bir vaqtning o\'zida 1 tadan ortiq qatorni eksport qila olmaysiz.|Bir vaqtning o\'zida :count satrdan ortiq eksport qila olmaysiz.',
],
'started' => [
'title' => 'Export boshlandi',
'body' => 'Eksportingiz boshlandi va 1 qator fonda qayta ishlanadi. Tugallangach, yuklab olish havolasi bilan bildirishnoma olasiz.|Eksportingiz boshlandi va :count qatorlari fonda qayta ishlanadi. Yuklab olish tugallangandan so\'ng siz yuklab olish havolasi bilan bildirishnoma olasiz.',
],
],
'file_name' => 'export-:export_id-:model',
];
@@ -0,0 +1,85 @@
<?php
return [
'label' => ':labelni import qilish',
'modal' => [
'heading' => ':labelni import qilish',
'form' => [
'file' => [
'label' => 'Fayl',
'placeholder' => 'CSV faylini yuklang',
'rules' => [
'duplicate_columns' => '{0} Faylda bittadan ortiq boʻsh ustun sarlavhasi boʻlmasligi kerak.|{1,*} Faylda ikki nusxadagi ustun sarlavhalari boʻlmasligi kerak: :columns.',
],
],
'columns' => [
'label' => 'Ustunlar',
'placeholder' => 'Ustunni tanlang',
],
],
'actions' => [
'download_example' => [
'label' => 'Na\'muna CSV faylni yuklab oling',
],
'import' => [
'label' => 'Import',
],
],
],
'notifications' => [
'completed' => [
'title' => 'Import yakunlandi',
'actions' => [
'download_failed_rows_csv' => [
'label' => 'Muvaffaqiyatsiz satr haqida ma\'lumotni yuklab oling|Muvaffaqiyatsiz qatorlar haqida ma\'lumotni yuklab oling',
],
],
],
'max_rows' => [
'title' => 'Yuklangan CSV fayl juda katta',
'body' => 'Bir vaqtning o\'zida 1 tadan ortiq qatorni import qila olmaysiz.|Bir vaqtning o\'zida :count dan ortiq qatorni import qila olmaysiz.',
],
'started' => [
'title' => 'Import boshlandi',
'body' => 'Importingiz boshlandi va 1 qator fonda qayta ishlanadi.|Importingiz boshlandi va :count qatorlari fonda qayta ishlanadi.',
],
],
'example_csv' => [
'file_name' => ':importer-example',
],
'failure_csv' => [
'file_name' => 'import-:import_id-:csv_name-failed-rows',
'error_header' => 'xatolik',
'system_error' => 'Tizim xatosi, yordam xizmatiga murojaat qiling.',
'column_mapping_required_for_new_record' => ':atribut ustuni fayldagi ustunga moslashtirilmagan, lekin u yangi yozuvlar yaratish uchun talab qilinadi.',
],
];
@@ -240,7 +240,10 @@ trait CanExportRecords
)
->dispatch();
if ($jobConnection !== 'sync') {
if (
(filled($jobConnection) && ($jobConnection !== 'sync')) ||
(blank($jobConnection) && (config('queue.default') !== 'sync'))
) {
Notification::make()
->title($action->getSuccessNotificationTitle())
->body(trans_choice('filament-actions::export.notifications.started.body', $export->total_rows, [
@@ -32,7 +32,7 @@ use Illuminate\Support\Number;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules\File;
use Illuminate\Validation\ValidationException;
use League\Csv\ByteSequence;
use League\Csv\Bom;
use League\Csv\CharsetConverter;
use League\Csv\Info;
use League\Csv\Reader as CsvReader;
@@ -269,7 +269,7 @@ trait CanImportRecords
filled($jobBatchName = $importer->getJobBatchName()),
fn (PendingBatch $batch) => $batch->name($jobBatchName),
)
->finally(function () use ($import, $columnMap, $options) {
->finally(function () use ($columnMap, $import, $jobConnection, $options) {
$import->touch('completed_at');
event(new ImportCompleted($import, $columnMap, $options));
@@ -307,17 +307,29 @@ trait CanImportRecords
->markAsRead(),
]),
)
->sendToDatabase($import->user, isEventDispatched: true);
->when(
($jobConnection === 'sync') ||
(blank($jobConnection) && (config('queue.default') === 'sync')),
fn (Notification $notification) => $notification
->persistent()
->send(),
fn (Notification $notification) => $notification->sendToDatabase($import->user, isEventDispatched: true),
);
})
->dispatch();
Notification::make()
->title($action->getSuccessNotificationTitle())
->body(trans_choice('filament-actions::import.notifications.started.body', $import->total_rows, [
'count' => Number::format($import->total_rows),
]))
->success()
->send();
if (
(filled($jobConnection) && ($jobConnection !== 'sync')) ||
(blank($jobConnection) && (config('queue.default') !== 'sync'))
) {
Notification::make()
->title($action->getSuccessNotificationTitle())
->body(trans_choice('filament-actions::import.notifications.started.body', $import->total_rows, [
'count' => Number::format($import->total_rows),
]))
->success()
->send();
}
});
$this->registerModalActions([
@@ -331,7 +343,7 @@ trait CanImportRecords
$columns = $this->getImporter()::getColumns();
$csv = Writer::createFromFileObject(new SplTempFileObject);
$csv->setOutputBOM(ByteSequence::BOM_UTF8);
$csv->setOutputBOM(Bom::Utf8);
if (filled($csvDelimiter = $this->getCsvDelimiter())) {
$csv->setDelimiter($csvDelimiter);
@@ -75,7 +75,8 @@ class ExportCompletion implements ShouldQueue
)),
)
->when(
$this->connection === 'sync',
($this->connection === 'sync') ||
(blank($this->connection) && (config('queue.default') === 'sync')),
fn (Notification $notification) => $notification
->persistent()
->send(),
@@ -15,7 +15,7 @@ use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
use League\Csv\ByteSequence;
use League\Csv\Bom;
use League\Csv\Writer;
use SplTempFileObject;
@@ -53,7 +53,7 @@ class PrepareCsvExport implements ShouldQueue
public function handle(): void
{
$csv = Writer::createFromFileObject(new SplTempFileObject);
$csv->setOutputBOM(ByteSequence::BOM_UTF8);
$csv->setOutputBOM(Bom::Utf8);
$csv->setDelimiter($this->exporter::getCsvDelimiter());
$csv->insertOne(array_values($this->columnMap));
@@ -69,13 +69,18 @@ class PrepareCsvExport implements ShouldQueue
if ($databaseConnection->getDriverName() === 'pgsql') {
$originalOrders = collect($query->getQuery()->orders)
->reject(fn (array $order): bool => in_array($order['column'] ?? null, [$keyName, $qualifiedKeyName]))
->reject(fn (array $order): bool => ($order['column'] ?? null) === $qualifiedKeyName)
->unique('column');
/** @var array<string, mixed> $originalBindings */
$originalBindings = $query->getRawBindings();
$query->reorder($qualifiedKeyName);
if (! empty($originalOrders->all())) {
$query->reorder($originalOrders[0]['column'], $originalOrders[0]['direction']);
$originalOrders->forget(0);
} else {
$query->reorder($qualifiedKeyName);
}
foreach ($originalOrders as $order) {
if (blank($order['column'] ?? null) || blank($order['direction'] ?? null)) {
@@ -144,7 +149,10 @@ class PrepareCsvExport implements ShouldQueue
$chunkKeySize = $this->chunkSize * 10;
$baseQuery = $query->toBase();
$baseQuery->distinct($qualifiedKeyName);
if (in_array($query->getQuery()->orders[0]['column'] ?? null, [$keyName, $qualifiedKeyName])) {
$baseQuery->distinct($qualifiedKeyName);
}
/** @phpstan-ignore-next-line */
$baseQueryOrders = $baseQuery->orders ?? [];
@@ -5,7 +5,7 @@ namespace Filament\Actions\Imports\Http\Controllers;
use Filament\Actions\Imports\Models\FailedImportRow;
use Filament\Actions\Imports\Models\Import;
use Illuminate\Support\Facades\Gate;
use League\Csv\ByteSequence;
use League\Csv\Bom;
use League\Csv\Writer;
use SplTempFileObject;
use Symfony\Component\HttpFoundation\StreamedResponse;
@@ -23,7 +23,7 @@ class DownloadImportFailureCsv
}
$csv = Writer::createFromFileObject(new SplTempFileObject);
$csv->setOutputBOM(ByteSequence::BOM_UTF8);
$csv->setOutputBOM(Bom::Utf8);
$firstFailedRow = $import->failedRows()->first();
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -47,7 +47,7 @@ php artisan filament:install --forms
Run the following command to install Tailwind CSS with the Tailwind Forms and Typography plugins:
```bash
npm install tailwindcss @tailwindcss/forms @tailwindcss/typography postcss postcss-nesting autoprefixer --save-dev
npm install tailwindcss@3 @tailwindcss/forms @tailwindcss/typography postcss postcss-nesting autoprefixer --save-dev
```
Create a new `tailwind.config.js` file and add the Filament `preset` *(includes the Filament color scheme and the required Tailwind plugins)*:
@@ -70,6 +70,20 @@ class Message extends Model
}
```
### Controlling the maximum parallel uploads
You can control the maximum number of parallel uploads using the `maxParallelUploads()` method:
```php
use Filament\Forms\Components\FileUpload;
FileUpload::make('attachments')
->multiple()
->maxParallelUploads(1)
```
This will limit the number of parallel uploads to `1`. If unset, we'll use the [default FilePond value](https://pqina.nl/filepond/docs/api/instance/properties/#core-properties) which is `2`.
## Controlling file names
By default, a random file name will be generated for newly-uploaded files. This is to ensure that there are never any conflicts with existing files.
@@ -580,6 +580,23 @@ Repeater::make('members')
This method will automatically enable the `distinct()` and `live()` methods on the field.
In case you want to add another condition to [disable options](../select#disabling-specific-options) with, you can chain `disableOptionWhen()` with the `merge: true` argument:
```php
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;
Repeater::make('members')
->schema([
Select::make('role')
->options([
// ...
])
->disableOptionsWhenSelectedInSiblingRepeaterItems()
->disableOptionWhen(fn (string $value): bool => $value === 'super_admin', merge: true),
])
```
## Customizing the repeater item actions
This field uses action objects for easy customization of buttons within it. You can customize these buttons by passing a function to an action registration method. The function has access to the `$action` object, which you can use to [customize it](../../actions/trigger-button). The following methods are available to customize the actions:
+1 -1
View File
@@ -51,7 +51,7 @@ Textarea::make('description')
There are a few differences, compared to [`disabled()`](getting-started#disabling-a-field):
- When using `readOnly()`, the field will still be sent to the server when the form is submitted. It can be mutated with the browser console, or via JavaScript. You can use [`dehydrated(false)`](advanced#preventing-a-field-from-being-dehydrated) to prevent this.
- When using `readOnly()`, the field will still be sent to the server when the form is submitted. It can be mutated with the browser console, or via JavaScript. You can use [`dehydrated(false)`](../advanced#preventing-a-field-from-being-dehydrated) to prevent this.
- There are no styling changes, such as less opacity, when using `readOnly()`.
- The field is still focusable when using `readOnly()`.
+3 -3
View File
@@ -227,7 +227,7 @@ Section::make('Comments')
```php
use function Pest\Livewire\livewire;
test('comments section exists' function () {
test('comments section exists', function () {
livewire(EditPost::class)
->assertFormComponentExists('comments-section');
});
@@ -251,7 +251,7 @@ use Filament\Forms\Components\Component;
use function Pest\Livewire\livewire;
test('comments section has heading' function () {
test('comments section has heading', function () {
livewire(EditPost::class)
->assertFormComponentExists(
'comments-section',
@@ -270,7 +270,7 @@ use Illuminate\Testing\Assert;
use function Pest\Livewire\livewire;
test('comments section is enabled' function () {
test('comments section is enabled', function () {
livewire(EditPost::class)
->assertFormComponentExists(
'comments-section',
@@ -57,6 +57,7 @@ export default function fileUploadFormComponent({
maxFiles,
maxSize,
minSize,
maxParallelUploads,
panelAspectRatio,
panelLayout,
placeholder,
@@ -122,6 +123,7 @@ export default function fileUploadFormComponent({
maxFiles,
maxFileSize: maxSize,
minFileSize: minSize,
...(maxParallelUploads && { maxParallelUploads }),
styleButtonProcessItemPosition: uploadButtonPosition,
styleButtonRemoveItemPosition: removeUploadedFileButtonPosition,
styleItemPanelAspectRatio: itemPanelAspectRatio,
@@ -404,6 +404,8 @@ return [
'create_option' => [
'label' => 'إضافة',
'modal' => [
'heading' => 'إضافة',
@@ -426,6 +428,8 @@ return [
'edit_option' => [
'label' => 'تعديل',
'modal' => [
'heading' => 'تحرير',
@@ -408,6 +408,8 @@ return [
'create_option' => [
'label' => 'Create',
'modal' => [
'heading' => 'Create',
@@ -430,6 +432,8 @@ return [
'edit_option' => [
'label' => 'Edit',
'modal' => [
'heading' => 'Edit',
+106 -11
View File
@@ -12,16 +12,64 @@ return [
'add' => [
'label' => 'Dodaj na :label',
'modal' => [
'heading' => 'Dodaj na :label',
'actions' => [
'add' => [
'label' => 'Dodaj',
],
],
],
],
'add_between' => [
'label' => 'Umetni između blokova',
'modal' => [
'heading' => 'Dodaj na :label',
'actions' => [
'add' => [
'label' => 'Dodaj',
],
],
],
],
'delete' => [
'label' => 'Obriši',
],
'edit' => [
'label' => 'Uredi',
'modal' => [
'heading' => 'Uredi blok',
'actions' => [
'save' => [
'label' => 'Spremi promjene',
],
],
],
],
'reorder' => [
'label' => 'Pomakni',
],
@@ -117,11 +165,11 @@ return [
],
'rotate_left' => [
'label' => 'Rotiraj sliku ulijevo',
'label' => 'Zaokreni sliku ulijevo',
],
'rotate_right' => [
'label' => 'Rotiraj sliku udesno',
'label' => 'Zaokreni sliku udesno',
],
'set_aspect_ratio' => [
@@ -133,7 +181,7 @@ return [
],
'zoom_100' => [
'label' => 'Zumiraj sliku na 100%',
'label' => 'Uvećaj sliku na 100%',
],
'zoom_in' => [
@@ -185,6 +233,15 @@ return [
],
'svg' => [
'messages' => [
'confirmation' => 'Obrađivanje SVG datoteka nije preporučljivo i može dovesti do gubitka kvalitete kada se skalira.\n Jesi li siguran da želiš nastaviti?',
'disabled' => 'Onemogućena je obrada SVG datoteka jer može dovesti do gubitka kvalitete kada se skalira.',
],
],
],
],
@@ -225,10 +282,10 @@ return [
'toolbar_buttons' => [
'attach_files' => 'Dodaj datoteke',
'blockquote' => 'Blockquote',
'blockquote' => 'Blok citat',
'bold' => 'Podebljano',
'bullet_list' => 'Lista',
'code_block' => 'Blok koda',
'code_block' => 'Blok kôda',
'heading' => 'Zaglavlje',
'italic' => 'Kurziv',
'link' => 'Poveznica',
@@ -241,6 +298,15 @@ return [
],
'radio' => [
'boolean' => [
'true' => 'Da',
'false' => 'Ne',
],
],
'repeater' => [
'actions' => [
@@ -249,6 +315,10 @@ return [
'label' => 'Dodaj na :label',
],
'add_between' => [
'label' => 'Umetni između',
],
'delete' => [
'label' => 'Obriši',
],
@@ -310,10 +380,10 @@ return [
'toolbar_buttons' => [
'attach_files' => 'Dodaj datoteke',
'blockquote' => 'Blockquote',
'blockquote' => 'Blok citat',
'bold' => 'Podebljano',
'bullet_list' => 'Lista',
'code_block' => 'Blok koda',
'code_block' => 'Blok kôda',
'h1' => 'Naslov',
'h2' => 'Zaglavlje',
'h3' => 'Podnaslov',
@@ -345,7 +415,7 @@ return [
],
'create_another' => [
'label' => 'Napravi i napravi drugi',
'label' => 'Napravi i dodaj još jedan',
],
],
@@ -383,18 +453,43 @@ return [
'max_items_message' => 'Samo :count može biti odabrano.',
'no_search_results_message' => 'Nema opcija koje odgovaraju vašem pretraživanju.',
'no_search_results_message' => 'Nema opcija koje odgovaraju tvojem pretraživanju.',
'placeholder' => 'Odaberi opciju',
'searching_message' => 'Pretraživanje...',
'search_prompt' => 'Počnite tipkati za pretragu...',
'search_prompt' => 'Počni tipkati za pretragu...',
],
'tags_input' => [
'placeholder' => 'Novi tag',
'placeholder' => 'Nova oznaka',
],
'text_input' => [
'actions' => [
'hide_password' => [
'label' => 'Sakrij lozinku',
],
'show_password' => [
'label' => 'Prikaži lozinku',
],
],
],
'toggle_buttons' => [
'boolean' => [
'true' => 'Da',
'false' => 'Ne',
],
],
'wizard' => [
@@ -0,0 +1,10 @@
<?php
return [
'distinct' => [
'must_be_selected' => 'Najmanje jedan :attribute mora biti odabran.',
'only_one_must_be_selected' => 'Samo jedan :attribute može biti odabrab.',
],
];
@@ -12,16 +12,44 @@ return [
'add' => [
'label' => 'Új :label',
'modal' => [
'heading' => 'Új :label',
'actions' => [
'add' => [
'label' => 'Új',
],
],
],
],
'add_between' => [
'label' => 'Beillesztés blokkok közé',
'modal' => [
'heading' => 'Új :label',
'actions' => [
'add' => [
'label' => 'Új',
],
],
],
],
'delete' => [
'label' => 'Törlés',
],
'edit' => [
'label' => 'Szerkesztés',
'modal' => [
'heading' => 'Blokk szerkesztése',
'actions' => [
'save' => [
'label' => 'Változtatások mentése',
],
],
],
],
'reorder' => [
'label' => 'Mozgatás',
],
@@ -405,7 +433,7 @@ return [
'max_items_message' => 'Csak :count elem választható ki.',
'no_search_results_message' => 'Nincs találat',
'no_search_results_message' => 'Nincs találat.',
'placeholder' => 'Válassz ki egy elemet',
+317 -27
View File
@@ -6,16 +6,80 @@ return [
'actions' => [
'clone' => [
'label' => 'Կրկնօրինակել',
],
'add' => [
'label' => 'Ավելացնել :label',
'label' => 'Ավելացնել:label',
'modal' => [
'heading' => 'Ավելացնել :label',
'actions' => [
'add' => [
'label' => 'Ավելացնել',
],
],
],
],
'add_between' => [
'label' => 'Տեղադրել բլոկների միջև',
'modal' => [
'heading' => 'Ավելացնել :label',
'actions' => [
'add' => [
'label' => 'Ավելացնել',
],
],
],
],
'delete' => [
'label' => 'Ջնջել',
],
'edit' => [
'label' => 'Խմբագրել',
'modal' => [
'heading' => 'Խմբագրել բլոկը',
'actions' => [
'save' => [
'label' => 'Պահպանել փոփոխությունները',
],
],
],
],
'reorder' => [
'label' => 'Վերադասավորել',
],
'move_down' => [
'label' => 'Իջեցնել',
'label' => 'Իջացնել',
],
'move_up' => [
@@ -42,6 +106,150 @@ return [
],
'checkbox_list' => [
'actions' => [
'deselect_all' => [
'label' => 'Ապանշել բոլորը',
],
'select_all' => [
'label' => 'Ընտրել բոլորը',
],
],
],
'file_upload' => [
'editor' => [
'actions' => [
'cancel' => [
'label' => 'Չեղարկել',
],
'drag_crop' => [
'label' => 'Քաշեք և թողեք «կտրել» ռեժիմը',
],
'drag_move' => [
'label' => 'Քաշեք և թողեք «տեղափոխել» ռեժիմը',
],
'flip_horizontal' => [
'label' => 'Պատկերը հորիզոնական շրջել',
],
'flip_vertical' => [
'label' => 'Պատկերը ուղղահայաց շրջել',
],
'move_down' => [
'label' => 'Պատկերը տեղափոխել ներքև',
],
'move_left' => [
'label' => 'Պատկերը տեղափոխել ձախ',
],
'move_right' => [
'label' => 'Պատկերը տեղափոխել աջ',
],
'move_up' => [
'label' => 'Պատկերը տեղափոխել վերև',
],
'reset' => [
'label' => 'Վերականգնել',
],
'rotate_left' => [
'label' => 'Պատկերը պտտել ձախ',
],
'rotate_right' => [
'label' => 'Պատկերը պտտել աջ',
],
'set_aspect_ratio' => [
'label' => 'Սահմանել կողմերի հարաբերակցությունը այնպես, որ',
],
'save' => [
'label' => 'Պահպանել',
],
'zoom_100' => [
'label' => 'Պատկերը մեծացնել 100%-ի',
],
'zoom_in' => [
'label' => 'Մեծացնել',
],
'zoom_out' => [
'label' => 'Փոքրացնել',
],
],
'fields' => [
'height' => [
'label' => 'Բարձր.',
'unit' => 'փիքսել',
],
'rotation' => [
'label' => 'Պտույտ',
'unit' => 'աստ.',
],
'width' => [
'label' => 'Լայն.',
'unit' => 'փիքսել',
],
'x_position' => [
'label' => 'X',
'unit' => 'փքս',
],
'y_position' => [
'label' => 'Y',
'unit' => 'փքս',
],
],
'aspect_ratios' => [
'label' => 'Կողմերի հարաբերակցություններ',
'no_fixed' => [
'label' => 'Ազատ',
],
],
'svg' => [
'messages' => [
'confirmation' => 'SVG ֆայլերը խմբագրելը խորհուրդ չի տրվում, քանի որ դա կարող է հանգեցնել որակի կորստի, երբ այն մասշտաբավորվում է:',
'disabled' => 'SVG ֆայլերի խմբագրումն անջատված է, քանի որ դա կարող է հանգեցնել որակի կորստի, երբ մասշտաբավորվում է:',
],
],
],
],
'key_value' => [
'actions' => [
@@ -54,6 +262,10 @@ return [
'label' => 'Ջնջել տողը',
],
'reorder' => [
'label' => 'Վերադասավորել տողերը',
],
],
'fields' => [
@@ -74,15 +286,27 @@ return [
'toolbar_buttons' => [
'attach_files' => 'Կցել ֆայլեր',
'bold' => 'Bold',
'bullet_list' => 'Bullet list',
'code_block' => 'Կոդի բլոկ',
'edit' => 'Խմբագրել',
'italic' => 'Շեղագիր',
'blockquote' => 'Մեջբերում',
'bold' => 'Թավ',
'bullet_list' => 'Կետային ցուցակ',
'code_block' => 'Կոդային բլոկ',
'heading' => 'Վերնագիր',
'italic' => 'Շեղատառ',
'link' => 'Հղում',
'ordered_list' => 'Համարակալված ցուցակ',
'preview' => 'Նախադիտում',
'strike' => 'Strikethrough',
'redo' => 'Վերափոխել',
'strike' => 'Խաչված',
'table' => 'Աղյուսակ',
'undo' => 'Հետարկել',
],
],
'radio' => [
'boolean' => [
'true' => 'Այո',
'false' => 'Ոչ',
],
],
@@ -92,15 +316,27 @@ return [
'actions' => [
'add' => [
'label' => 'Ավելացնել :label',
'label' => 'Ավելացնել:label',
],
'add_between' => [
'label' => 'Տեղադրել միջև',
],
'delete' => [
'label' => 'Ջնջել',
],
'clone' => [
'label' => 'Կրկնօրինակել',
],
'reorder' => [
'label' => 'Վերադասավորել',
],
'move_down' => [
'label' => 'Իջեցնել',
'label' => 'Իջացնել',
],
'move_up' => [
@@ -112,7 +348,7 @@ return [
],
'expand' => [
'label' => 'Ընդարձակել',
'label' => 'Ընդլայնել',
],
'collapse_all' => [
@@ -120,7 +356,7 @@ return [
],
'expand_all' => [
'label' => 'Ընդարձակել բոլորը',
'label' => 'Ընդլայնել բոլորը',
],
],
@@ -135,12 +371,12 @@ return [
'actions' => [
'link' => 'Հղում',
'unlink' => 'Չեղարկել հղումը',
'unlink' => 'Անջատել',
],
'label' => 'URL',
'placeholder' => 'Մուտքագրեք URL',
'placeholder' => 'Մուտքագրեք URL-ը',
],
@@ -148,18 +384,19 @@ return [
'toolbar_buttons' => [
'attach_files' => 'Կցել ֆայլեր',
'blockquote' => 'Արգելափակման մեջբերում',
'bold' => 'Bold',
'bullet_list' => 'Bullet list',
'code_block' => 'Կոդի բլոկ',
'blockquote' => 'Մեջբերում բլոկից',
'bold' => 'Թավ',
'bullet_list' => 'Կետավոր ցանկ',
'code_block' => 'Կոդային բլոկ',
'h1' => 'Անվանում',
'h2' => 'Վերնագիր',
'h3' => 'Ենթավերնագիր',
'italic' => 'Շեղագիր',
'italic' => 'Շեղատառ',
'link' => 'Հղում',
'ordered_list' => 'Համարակալված ցուցակ',
'redo' => 'Կրկնել',
'strike' => 'Strikethrough',
'redo' => 'Վերափոխել',
'strike' => 'Խաչված',
'underline' => 'Ընդգծել',
'undo' => 'Չեղարկել',
],
@@ -171,6 +408,8 @@ return [
'create_option' => [
'label' => 'Ստեղծել',
'modal' => [
'heading' => 'Ստեղծել',
@@ -181,6 +420,30 @@ return [
'label' => 'Ստեղծել',
],
'create_another' => [
'label' => 'Ստեղծել և ստեղծել մեկ այլ',
],
],
],
],
'edit_option' => [
'label' => 'Խմբագրել',
'modal' => [
'heading' => 'Խմբագրել',
'actions' => [
'save' => [
'label' => 'Պահպանել',
],
],
],
@@ -194,11 +457,13 @@ return [
'false' => 'Ոչ',
],
'loading_message' => 'Բեռնվում է...',
'loading_message' => 'Բեռնում...',
'no_search_results_message' => 'Ոչ մի տարբերակ չի համապատասխանում ձեր որոնմանը։',
'max_items_message' => 'Կարող եք :count ընտրել միայն մեկը:',
'placeholder' => 'Ընտրեք տարբերակ',
'no_search_results_message' => 'Ոչ մի տվյալ չի համապատասխանում ձեր հարցմանը:',
'placeholder' => 'Ընտրեք ցանկալի հարցում',
'searching_message' => 'Որոնում...',
@@ -207,7 +472,32 @@ return [
],
'tags_input' => [
'placeholder' => 'Նոր հատկորոշում',
'placeholder' => 'Նոր պիտակ',
],
'text_input' => [
'actions' => [
'hide_password' => [
'label' => 'Թաքցնել գաղտնաբառը',
],
'show_password' => [
'label' => 'Ցույց տալ գաղտնաբառը',
],
],
],
'toggle_buttons' => [
'boolean' => [
'true' => 'Այո',
'false' => 'Ոչ',
],
],
'wizard' => [
@@ -215,7 +505,7 @@ return [
'actions' => [
'previous_step' => [
'label' => 'Ետ',
'label' => 'Նախորդը',
],
'next_step' => [
@@ -0,0 +1,10 @@
<?php
return [
'distinct' => [
'must_be_selected' => 'Առնվազն մեկ :attribute դաշտ պետք է ընտրվի։',
'only_one_must_be_selected' => 'Պետք է ընտրվի միայն մեկ :attribute դաշտ։',
],
];
@@ -407,6 +407,7 @@ return [
'actions' => [
'create_option' => [
'label' => 'Cipta',
'modal' => [
@@ -429,6 +430,7 @@ return [
],
'edit_option' => [
'label' => 'Sunting',
'modal' => [
@@ -408,6 +408,8 @@ return [
'create_option' => [
'label' => 'Aanmaken',
'modal' => [
'heading' => 'Aanmaken',
@@ -430,6 +432,8 @@ return [
'edit_option' => [
'label' => 'Bewerken',
'modal' => [
'heading' => 'Bewerken',
+104 -1
View File
@@ -11,17 +11,69 @@ return [
],
'add' => [
'label' => 'Dodaj do :label',
'modal' => [
'heading' => 'Dodaj do :label',
'actions' => [
'add' => [
'label' => 'Dodaj',
],
],
],
],
'add_between' => [
'label' => 'Wstaw',
'label' => 'Wstaw pomiędzy',
'modal' => [
'heading' => 'Dodaj do :label',
'actions' => [
'add' => [
'label' => 'Dodaj',
],
],
],
],
'delete' => [
'label' => 'Usuń',
],
'edit' => [
'label' => 'Edytuj',
'modal' => [
'heading' => 'Edytuj blok',
'actions' => [
'save' => [
'label' => 'Zapisz zmiany',
],
],
],
],
'reorder' => [
'label' => 'Przesuń',
],
@@ -185,6 +237,15 @@ return [
],
'svg' => [
'messages' => [
'confirmation' => 'Edycja plików SVG nie jest zalecana, ponieważ może to prowadzić do utraty jakości podczas skalowania.\n Czy na pewno chcesz kontynuować?',
'disabled' => 'Edycja plików SVG jest wyłączona, ponieważ może to prowadzić do utraty jakości podczas skalowania.',
],
],
],
],
@@ -241,6 +302,15 @@ return [
],
'radio' => [
'boolean' => [
'true' => 'Tak',
'false' => 'Nie',
],
],
'repeater' => [
'actions' => [
@@ -249,6 +319,10 @@ return [
'label' => 'Dodaj do :label',
],
'add_between' => [
'label' => 'Dodaj pomiędzy',
],
'delete' => [
'label' => 'Usuń',
],
@@ -334,6 +408,8 @@ return [
'create_option' => [
'label' => 'Utwórz',
'modal' => [
'heading' => 'Utwórz',
@@ -356,6 +432,8 @@ return [
'edit_option' => [
'label' => 'Edytuj',
'modal' => [
'heading' => 'Edytuj',
@@ -397,6 +475,31 @@ return [
'placeholder' => 'Nowy tag',
],
'text_input' => [
'actions' => [
'hide_password' => [
'label' => 'Ukryj hasło',
],
'show_password' => [
'label' => 'Pokaż hasło',
],
],
],
'toggle_buttons' => [
'boolean' => [
'true' => 'Tak',
'false' => 'Nie',
],
],
'wizard' => [
'actions' => [
@@ -0,0 +1,10 @@
<?php
return [
'distinct' => [
'must_be_selected' => 'Przynajmniej jedno pole :attribute musi być zaznaczone.',
'only_one_must_be_selected' => 'Tylko jedno pole :attribute musi być zaznaczone.',
],
];
@@ -404,6 +404,8 @@ return [
'create_option' => [
'label' => 'Створити',
'modal' => [
'heading' => 'Створити',
@@ -425,6 +427,8 @@ return [
'edit_option' => [
'label' => 'Змінити',
'modal' => [
'heading' => 'Змінити',
@@ -12,16 +12,64 @@ return [
'add' => [
'label' => ':labelga qo\'shish',
'modal' => [
'heading' => ':labelga qo\'shish',
'actions' => [
'add' => [
'label' => 'Qo\'shish',
],
],
],
],
'add_between' => [
'label' => 'Orasiga kiritish',
'modal' => [
'heading' => ':labelga qo\'shish',
'actions' => [
'add' => [
'label' => 'Qo\'shish',
],
],
],
],
'delete' => [
'label' => 'O\'chirish',
],
'edit' => [
'label' => 'O\'zgartirish',
'modal' => [
'heading' => 'O\'zgartirish',
'actions' => [
'save' => [
'label' => 'O\'zgarishlarni saqlash',
],
],
],
],
'reorder' => [
'label' => 'Ko\'chirish',
],
@@ -406,6 +454,31 @@ return [
'placeholder' => 'Yangi teg',
],
'text_input' => [
'actions' => [
'hide_password' => [
'label' => 'Parolni yashirish',
],
'show_password' => [
'label' => 'Parolni ko\'rsatish',
],
],
],
'toggle_buttons' => [
'boolean' => [
'true' => 'Ha',
'false' => 'Yo\'q',
],
],
'wizard' => [
'actions' => [
@@ -117,7 +117,7 @@
aria-label="{{ $getPlaceholder() }}"
type="button"
tabindex="-1"
@disabled($isDisabled)
@disabled($isDisabled || $isReadOnly())
{{
$getExtraTriggerAttributeBag()->class([
'w-full',
@@ -71,6 +71,7 @@
maxFiles: @js($getMaxFiles()),
maxSize: @js(($size = $getMaxSize()) ? "{$size}KB" : null),
minSize: @js(($size = $getMinSize()) ? "{$size}KB" : null),
maxParallelUploads: @js($getMaxParallelUploads()),
removeUploadedFileUsing: async (fileKey) => {
return await $wire.removeFormUploadedFile(@js($statePath), fileKey)
},
@@ -1,4 +1,12 @@
<div>
<div
{{
$attributes
->merge([
'id' => $getId(),
], escape: false)
->merge($getExtraAttributes(), escape: false)
}}
>
@if (filled($key = $getKey()))
@livewire($getComponent(), $getComponentProperties(), key($key))
@else
@@ -128,7 +128,7 @@
<x-slot
name="deleteButton"
x-on:click="deleteTag(tag)"
x-on:click.stop="deleteTag(tag)"
></x-slot>
</x-filament::badge>
</template>
@@ -107,7 +107,7 @@
@if ($datalistOptions)
<datalist id="{{ $id }}-list">
@foreach ($datalistOptions as $option)
<option value="{{ $option }}" />
<option value="{{ $option }}"></option>
@endforeach
</datalist>
@endif
@@ -292,12 +292,12 @@
)
"
@endif
x-show="! isLastStep()"
x-bind:class="{ 'hidden': isLastStep(), 'block': !isLastStep() }"
>
{{ $nextAction }}
</span>
<span x-show="isLastStep()">
<span x-bind:class="{ 'hidden': !isLastStep(), 'block': isLastStep() }">
{{ $getSubmitAction() }}
</span>
</div>
@@ -46,6 +46,8 @@ class BaseFileUpload extends Field implements Contracts\HasNestedRecursiveValida
protected int | Closure | null $minSize = null;
protected int | Closure | null $maxParallelUploads = null;
protected int | Closure | null $maxFiles = null;
protected int | Closure | null $minFiles = null;
@@ -393,6 +395,13 @@ class BaseFileUpload extends Field implements Contracts\HasNestedRecursiveValida
return $this;
}
public function maxParallelUploads(int | Closure | null $count): static
{
$this->maxParallelUploads = $count;
return $this;
}
public function maxFiles(int | Closure | null $count): static
{
$this->maxFiles = $count;
@@ -540,6 +549,11 @@ class BaseFileUpload extends Field implements Contracts\HasNestedRecursiveValida
return $this->evaluate($this->minSize);
}
public function getMaxParallelUploads(): ?int
{
return $this->evaluate($this->maxParallelUploads);
}
public function getVisibility(): string
{
return $this->evaluate($this->visibility);
@@ -3,15 +3,23 @@
namespace Filament\Forms\Components\Concerns;
use Closure;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
trait CanDisableOptions
{
protected bool | Closure | null $isOptionDisabled = null;
/**
* @var array<bool | Closure>
*/
protected array $isOptionDisabled = [];
public function disableOptionWhen(bool | Closure $callback): static
public function disableOptionWhen(bool | Closure | null $callback, bool $merge = false): static
{
$this->isOptionDisabled = $callback;
if ($merge) {
$this->isOptionDisabled[] = $callback;
} else {
$this->isOptionDisabled = Arr::wrap($callback);
}
return $this;
}
@@ -38,18 +46,16 @@ trait CanDisableOptions
*/
public function isOptionDisabled($value, string $label): bool
{
if ($this->isOptionDisabled === null) {
return false;
}
return (bool) $this->evaluate($this->isOptionDisabled, [
'label' => $label,
'value' => $value,
]);
return collect($this->isOptionDisabled)
->contains(fn (bool | Closure $isOptionDisabled): bool => (bool) $this->evaluate($isOptionDisabled, [
'label' => $label,
'value' => $value,
]));
}
public function hasDynamicDisabledOptions(): bool
{
return $this->isOptionDisabled instanceof Closure;
return collect($this->isOptionDisabled)
->contains(fn (bool | Closure $isOptionDisabled): bool => $isOptionDisabled instanceof Closure);
}
}
+7 -4
View File
@@ -22,6 +22,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\HasOneOrMany;
use Illuminate\Database\Eloquent\Relations\HasOneOrManyThrough;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
@@ -275,6 +276,7 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has
}
$action = Action::make($this->getCreateOptionActionName())
->label(__('filament-forms::components.select.actions.create_option.label'))
->form(function (Select $component, Form $form): array | Form | null {
return $component->getCreateOptionActionForm($form->model(
$component->getRelationship() ? $component->getRelationship()->getModel()::class : null,
@@ -429,6 +431,7 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has
}
$action = Action::make($this->getEditOptionActionName())
->label(__('filament-forms::components.select.actions.edit_option.label'))
->form(function (Select $component, Form $form): array | Form | null {
return $component->getEditOptionActionForm(
$form->model($component->getSelectedRecord()),
@@ -814,7 +817,7 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has
if (
($relationship instanceof BelongsToMany) ||
($relationship instanceof HasManyThrough)
($relationship instanceof (class_exists(HasOneOrManyThrough::class) ? HasOneOrManyThrough::class : HasManyThrough::class))
) {
if ($modifyQueryUsing) {
$component->evaluate($modifyQueryUsing, [
@@ -987,7 +990,7 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has
if (
($relationship instanceof HasOneOrMany) ||
($relationship instanceof HasManyThrough) ||
($relationship instanceof (class_exists(HasOneOrManyThrough::class) ? HasOneOrManyThrough::class : HasManyThrough::class)) ||
($relationship instanceof BelongsToThrough)
) {
return;
@@ -1142,7 +1145,7 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has
return parent::getLabel();
}
public function getRelationship(): BelongsTo | BelongsToMany | HasOneOrMany | HasManyThrough | BelongsToThrough | null
public function getRelationship(): BelongsTo | BelongsToMany | HasOneOrMany | HasManyThrough | HasOneOrManyThrough | BelongsToThrough | null
{
if (blank($this->getRelationshipName())) {
return null;
@@ -1267,7 +1270,7 @@ class Select extends Field implements Contracts\CanDisableOptions, Contracts\Has
return $relationship->getQualifiedRelatedKeyName();
}
if ($relationship instanceof HasManyThrough) {
if ($relationship instanceof (class_exists(HasOneOrManyThrough::class) ? HasOneOrManyThrough::class : HasManyThrough::class)) {
return $relationship->getQualifiedForeignKeyName();
}
+1 -1
View File
@@ -21,7 +21,7 @@ class Tab extends Component implements CanConcealComponents
final public function __construct(string $label)
{
$this->label($label);
$this->id(Str::slug($label));
$this->id(Str::slug(Str::transliterate($label, strict: true)));
}
public static function make(string $label): static
@@ -27,7 +27,7 @@ class Step extends Component implements CanConcealComponents
final public function __construct(string $label)
{
$this->label($label);
$this->id(Str::slug($label));
$this->id(Str::slug(Str::transliterate($label, strict: true)));
}
public static function make(string $label): static
+1 -1
View File
@@ -47,7 +47,7 @@ php artisan filament:install --infolists
Run the following command to install Tailwind CSS with the Tailwind Forms and Typography plugins:
```bash
npm install tailwindcss @tailwindcss/forms @tailwindcss/typography postcss postcss-nesting autoprefixer --save-dev
npm install tailwindcss@3 @tailwindcss/forms @tailwindcss/typography postcss postcss-nesting autoprefixer --save-dev
```
Create a new `tailwind.config.js` file and add the Filament `preset` *(includes the Filament color scheme and the required Tailwind plugins)*:
@@ -2,8 +2,37 @@
return [
'text_entry' => [
'more_list_items' => 'i :count još',
'entries' => [
'text' => [
'actions' => [
'collapse_list' => 'Prikaži :count manje',
'expand_list' => 'Prikaži :count više',
],
'more_list_items' => 'and :count more',
],
'key_value' => [
'columns' => [
'key' => [
'label' => 'Ključ',
],
'value' => [
'label' => 'Vrijednost',
],
],
'placeholder' => 'Nema unosa',
],
],
];
@@ -0,0 +1,38 @@
<?php
return [
'entries' => [
'text' => [
'actions' => [
'collapse_list' => 'Ցույց տալ :count-ից ավելի քիչ',
'expand_list' => 'Ցույց տալ :count-ից ավելին',
],
'more_list_items' => 'և :count-ից ավելին',
],
'key_value' => [
'columns' => [
'key' => [
'label' => 'Բանալի',
],
'value' => [
'label' => 'Արժեք',
],
],
'placeholder' => 'Գրառումներ չկան',
],
],
];
@@ -0,0 +1,38 @@
<?php
return [
'entries' => [
'text' => [
'actions' => [
'collapse_list' => 'Pokaż :count mniej',
'expand_list' => 'Pokaż :count więcej',
],
'more_list_items' => 'dodaj :count więcej',
],
'key_value' => [
'columns' => [
'key' => [
'label' => 'Klucz',
],
'value' => [
'label' => 'Wartość',
],
],
'placeholder' => 'Brak wpisów',
],
],
];
@@ -1,4 +1,12 @@
<div>
<div
{{
$attributes
->merge([
'id' => $getId(),
], escape: false)
->merge($getExtraAttributes(), escape: false)
}}
>
@if (filled($key = $getKey()))
@livewire($getComponent(), $getComponentProperties(), key($key))
@else
@@ -20,7 +20,7 @@ class Tab extends Component
final public function __construct(string $label)
{
$this->label($label);
$this->id(Str::slug($label));
$this->id(Str::slug(Str::transliterate($label, strict: true)));
}
public static function make(string $label): static
File diff suppressed because one or more lines are too long
@@ -45,7 +45,7 @@ php artisan filament:install --notifications
Run the following command to install Tailwind CSS with the Tailwind Forms and Typography plugins:
```bash
npm install tailwindcss @tailwindcss/forms @tailwindcss/typography postcss postcss-nesting autoprefixer --save-dev
npm install tailwindcss@3 @tailwindcss/forms @tailwindcss/typography postcss postcss-nesting autoprefixer --save-dev
```
Create a new `tailwind.config.js` file and add the Filament `preset` *(includes the Filament color scheme and the required Tailwind plugins)*:
@@ -86,38 +86,43 @@ export default (Alpine) => {
return
}
const getTop = () => this.$el.getBoundingClientRect().top
const oldTop = getTop()
// Calling `el.getBoundingClientRect()` from outside `requestAnimationFrame()` can
// occasionally cause the page to scroll to the top.
requestAnimationFrame(() => {
const getTop = () =>
this.$el.getBoundingClientRect().top
const oldTop = getTop()
respond(() => {
animation = () => {
if (!this.isShown) {
return
respond(() => {
animation = () => {
if (!this.isShown) {
return
}
this.$el.animate(
[
{
transform: `translateY(${
oldTop - getTop()
}px)`,
},
{ transform: 'translateY(0px)' },
],
{
duration: this.transitionDuration,
easing: this.transitionEasing,
},
)
}
this.$el.animate(
[
{
transform: `translateY(${
oldTop - getTop()
}px)`,
},
{ transform: 'translateY(0px)' },
],
{
duration: this.transitionDuration,
easing: this.transitionEasing,
},
)
}
this.$el
.getAnimations()
.forEach((animation) => animation.finish())
})
this.$el
.getAnimations()
.forEach((animation) => animation.finish())
})
succeed(({ snapshot, effect }) => {
animation()
succeed(({ snapshot, effect }) => {
animation()
})
})
},
)
@@ -20,7 +20,7 @@ return [
'empty' => [
'heading' => 'Nema obavijesti',
'description' => 'Molim provjerite ponovno kasnije.',
'description' => 'Molim te, provjeri ponovno kasnije.',
],
],
@@ -0,0 +1,28 @@
<?php
return [
'modal' => [
'heading' => 'Ծանուցումներ',
'actions' => [
'clear' => [
'label' => 'Ջնջել',
],
'mark_all_as_read' => [
'label' => 'Նշել բոլորը որպես կարդացված',
],
],
'empty' => [
'heading' => 'Ոչ մի ծանուցում',
'description' => 'Խնդրում ենք ավելի ուշ կրկին ստուգել։',
],
],
];
+1 -1
View File
@@ -9,7 +9,7 @@
},
"require": {
"php": "^8.1",
"danharrin/livewire-rate-limiting": "^0.3|^1.0",
"danharrin/livewire-rate-limiting": "^0.3|^1.0|^2.0",
"filament/actions": "self.version",
"filament/forms": "self.version",
"filament/infolists": "self.version",

Some files were not shown because too many files have changed in this diff Show More