* feat: add Closure support to darkMode() and add darkModeToggle()
* feat: add hasDarkModeToggle() to FilamentManager
* feat: add hasDarkModeToggle() to Facade PHPDoc
* feat: respect darkModeToggle() in user menu
* consistency
* theme switcher
---------
Co-authored-by: Dan Harrin <git@danharrin.com>
* feat(panels): support grouped user menu items with separate dropdown lists
* (fix) adjust for PHPStan
* cleanup
* chore: format and build
* cleanup
* screenshot
* Update 03-user-menu.md
* tenant menu grouping
* refactor for perf
---------
Co-authored-by: Dan Harrin <git@danharrin.com>
Co-authored-by: danharrin <41773797+danharrin@users.noreply.github.com>
* security: 2FA concurrent recovery code reuse
* Update AppAuthentication.php
* Merge commit from fork
* security: also serialise recovery code verification on SQLite
The `lockForUpdate()` row lock does not exist on SQLite — Laravel's SQLite
query grammar compiles `compileLockForUpdate()` to an empty string — so the
transaction provides no mutual exclusion there. Two concurrent requests still
both read the full recovery code set before either commits, and the losing
write resurrects the just-consumed code.
Verified against a true `pcntl_fork()` race on v5.6.4: the transaction-only
fix is bypassed 6/6 runs on SQLite while holding 7/7 on MySQL.
Wrap the transaction in a per-user `Cache::lock()` so verification is
serialised regardless of database driver. The DB transaction and row lock are
kept for drivers that support them. Re-verified: combined fix holds 6/6 on
SQLite and 5/5 on MySQL.
* cleanup
---------
Co-authored-by: StarPlatinu <thanhnolove21@gmail.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
---------
Co-authored-by: ThanhVu <72287279+StarPlatinu@users.noreply.github.com>
Co-authored-by: StarPlatinu <thanhnolove21@gmail.com>
* feat: add deferred badge loading for relation manager tabs
Extends the deferred tab badge loading introduced in PR #19336 to
relation manager tabs, fixing two upstream issues:
1. `RelationManager::getTabComponent()` was evaluating `getBadge()`
eagerly before the deferred mechanism could intercept it.
2. `HasRelationManagers::getRelationManagersContentComponent()` built
`Tabs::make()` with no key, causing `callSchemaComponentMethod()` to
receive null when the async badge fetch fired.
Changes:
- Add `protected static bool $deferBadge = false` to `RelationManager`
with an overrideable `isBadgeDeferred()` method for per-record control
- Add fluent `->deferBadge()` and `isBadgeDeferred()` to `RelationGroup`
- Add `->key('relationManagerTabs')` to the `Tabs` built in
`HasRelationManagers`
- Add docs and tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* cleanup
---------
Co-authored-by: buzkall <buzkall@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
* screenshots
* fix cut off sidebar
* Screenshots
* Screenshots
* retake
* fix loading data issue
* retake
* screenshots
* Update custom-toolbar.jpg
* retake
* ss
* retake
* ss
* ss
* ss
* ss
* ss
* ss
* ss
* ss
* Update dashboard.jpg
* ss
* Update openable.jpg
* ss
* ss
* ss
* Update database.sqlite
* Update database.sqlite
* ss
* ss
* ss
* ss
* ss
* ss
* clean up
* cs
* Add deferred badge loading for tabs
Tab badges that rely on expensive queries (e.g. COUNT on large tables)
can now be loaded asynchronously after the initial page render using
`deferBadge()`. A loading indicator is shown in place of each deferred
badge until the values are fetched via a single renderless Livewire call.
* chore: fix code style
* chore: fix code style
* Revert "chore: fix code style"
This reverts commit e1fc507b88.
* fix and clean up
* Update Tabs.php
* chore: fix code style
* bugs
* docs
* Update tabs.blade.php
---------
Co-authored-by: oddvalue <oddvalue@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
Co-authored-by: danharrin <danharrin@users.noreply.github.com>
* docs: enhance documentation on JavaScript asset registration
Added instructions for registering JavaScript files with import statements and using Vite for asset compilation. Reference discussion:
https://github.com/filamentphp/filament/discussions/15278
* Update 02-assets.md
* Update 02-assets.md
---------
Co-authored-by: Dan Harrin <git@danharrin.com>