nyoncode / wire-admin
The optional admin shell for wire: a layout and a sidebar over the registered catalogue.
Requires
- php: ^8.2
- illuminate/support: ^12.0|^13.0
- livewire/livewire: ^4.0
- nyoncode/laravel-package-toolkit: ^2.5.0
- nyoncode/wire-core: 2.0.0
- nyoncode/wire-panels: 2.0.0
Requires (Dev)
- laravel/pint: ^1.29
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^4.0|^5.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Wire Admin
The optional admin shell for Wire: a layout and a sidebar over everything an application already registered.
composer require nyoncode/wire-admin
{{-- resources/views/components/layouts/admin.blade.php --}} <x-wire-admin::layout :title="$title ?? config('app.name')"> <x-slot:brand>{{ config('app.name') }}</x-slot:brand> <x-slot:user><x-app-user-menu /></x-slot:user> {{ $slot }} </x-wire-admin::layout>
config()->set('livewire.component_layout', 'components.layouts.admin');
Every full-page component — the pages Route::wireResources() registers
included — now renders inside the shell, with the menu beside it.
Why a package of its own
Three ADRs (0020, 0026, 0027) held that the owner layer holds no shell, and this
does not change that: wire-panels still ships pages and routing and no chrome.
A composer boundary is the only opt-in nobody can acquire by accident — an
application that wants the pages and its own frame simply does not install this.
Installing it is still not adopting it. Nothing here sets
livewire.component_layout; a page renders inside the shell only once your own
layout says so, and the sidebar works alone inside a frame you wrote.
What it reads
| It needs | It asks |
|---|---|
| what is registered | Catalog, through Workspace |
| how it groups, orders and reads | Workspace::navigation() |
| where a key's page lives | ResolvesPageUrls — nothing at all until a package owns routing |
| which zone, which entry is active | the current route name, read once while the page renders |
No registry, no URL scheme, no Panel object. An entry this zone does not route
keeps its row and loses its link, which is the honest picture of a half-routed
application; :linked-only="true" drops those rows instead.
Documentation
Full docs: docs/admin/overview.md
(česky).
License
MIT.