- Основы
- События
- Состояние по умолчанию
- Позиция
- Ширина
- Асинхронность
- Автозакрытие
- Автозакрытие
- Атрибуты переключателя
Основы
Компонент Offcanvas позволяет создавать боковые панели.
Вы можете создать Offcanvas, используя статический метод make().
make(Closure|string $title = '',Closure|Renderable|string $content = '',Closure|string $toggler = '',Closure|string|null $asyncUrl = null,iterable $components = [],)make(Closure|string $title = '',Closure|Renderable|string $content = '',Closure|string $toggler = '',Closure|string|null $asyncUrl = null,iterable $components = [],)
$title- заголовок боковой панели,$content- содержимое боковой панели,$toggler- заголовок для кнопки,$asyncUrl- url для асинхронного контента,$components- компоненты
use MoonShine\UI\Components\OffCanvas;OffCanvas::make('Confirm',static fn() => FormBuilder::make(route('password.confirm'))->async()->fields([Password::make('Password')->eye(),])->submit('Confirm'),'Show Panel')
use MoonShine\UI\Components\OffCanvas;OffCanvas::make('Confirm',static fn() => FormBuilder::make(route('password.confirm'))->async()->fields([Password::make('Password')->eye(),])->submit('Confirm'),'Show Panel')
<x-moonshine::off-canvastitle="Offcanvas":left="false"><x-slot:toggler>Open</x-slot:toggler>Content</x-moonshine::off-canvas><x-moonshine::off-canvastitle="Offcanvas":left="false"><x-slot:toggler>Open</x-slot:toggler>Content</x-moonshine::off-canvas>
Параметр content - это текстовое содержимое OffCanvas. Подходит для отображения простой информации (строк, HTML и т.д.).
Однако, если вы хотите встроить в OffCanvas компоненты (например, поля или формы, реагирующие на изменение значений, реактивность и т.д.),
важно понимать, что MoonShine не сможет "увидеть" такие компоненты, переданные как строка.
Это ограничивает функциональность.
Чтобы MoonShine корректно обрабатывал поля внутри OffCanvas, необходимо передать их в параметре components.
Если вы строите контент OffCanvas исключительно на компонентах MoonShine (поля, формы и т.д.), используйте параметр components вместо content.
События
Вы можете инициировать открытие/закрытие боковой панели извне компонента через события javascript.
Чтобы иметь доступ к событиям, необходимо установить уникальное имя для боковой панели, используя метод name().
protected function components(): iterable{return [Offcanvas::make('Title','Content...')->name('my-canvas')];}protected function components(): iterable{return [Offcanvas::make('Title','Content...')->name('my-canvas')];}
Вызов события через ActionButton
Событие боковой панели может быть вызвано с помощью компонента ActionButton.
Offcanvas::make('Title','Content...',)->name('my-canvas'),ActionButton::make('Show Modal')->toggleOffCanvas('my-canvas')// or asyncActionButton::make('Show Panel','/endpoint')->async(events: [AlpineJs::event(JsEvent::OFF_CANVAS_TOGGLED, 'my-canvas')])Offcanvas::make('Title','Content...',)->name('my-canvas'),ActionButton::make('Show Modal')->toggleOffCanvas('my-canvas')// or asyncActionButton::make('Show Panel','/endpoint')->async(events: [AlpineJs::event(JsEvent::OFF_CANVAS_TOGGLED, 'my-canvas')])
Вызов события с использованием нативных методов
События могут быть вызваны с использованием нативных методов javascript:
document.addEventListener("DOMContentLoaded", () => {this.dispatchEvent(new CustomEvent("off_canvas_toggled:my-canvas"))})document.addEventListener("DOMContentLoaded", () => {this.dispatchEvent(new CustomEvent("off_canvas_toggled:my-canvas"))})
Вызов события с использованием метода Alpine.js
Или используйте магический метод $dispatch() из Alpine.js:
this.$dispatch('off_canvas_toggled:my-canvas')this.$dispatch('off_canvas_toggled:my-canvas')
Вызов события с использованием глобального класса MoonShine
MoonShine.ui.toggleOffCanvas('my-canvas')MoonShine.ui.toggleOffCanvas('my-canvas')
События при открытии/закрытии
Вы также можете добавить события, которые будут вызываться при открытии/закрытии боковой панели, через метод toggleEvents().
toggleEvents(array $events,bool $onlyOpening = false,bool $onlyClosing = false)toggleEvents(array $events,bool $onlyOpening = false,bool $onlyClosing = false)
$events- события,$onlyOpening- будут срабатывать только при открытии,$onlyClosing- будут срабатывать только при закрытии.
ActionButton::make('Open off-canvas')->toggleOffCanvas('my-off-canvas'),OffCanvas::make('My OffCanvas', asyncUrl: '/')->name('my-off-canvas')->toggleEvents([AlpineJs::event(JsEvent::TOAST,params: ['text' => 'Hello off-canvas'])]),ActionButton::make('Open off-canvas')->toggleOffCanvas('my-off-canvas'),OffCanvas::make('My OffCanvas', asyncUrl: '/')->name('my-off-canvas')->toggleEvents([AlpineJs::event(JsEvent::TOAST,params: ['text' => 'Hello off-canvas'])]),
Состояние по умолчанию
Метод open() позволяет показать боковую панель при загрузке страницы.
open(Closure|bool|null $condition = null)open(Closure|bool|null $condition = null)
OffCanvas::make('Title', 'Content...', 'Show Panel')->open()OffCanvas::make('Title', 'Content...', 'Show Panel')->open()
По умолчанию боковая панель будет скрыта при загрузке страницы.
Позиция
По умолчанию боковая панель расположена с правой стороны экрана, метод left() позволяет расположить панель с левой стороны.
left(Closure|bool|null $condition = null)left(Closure|bool|null $condition = null)
OffCanvas::make('Title', 'Content...', 'Show Panel')->left()OffCanvas::make('Title', 'Content...', 'Show Panel')->left()
Ширина
Метод wide() компонента OffCanvas позволяет сделать боковую панель более широкой.
wide(Closure|bool|null $condition = null)wide(Closure|bool|null $condition = null)
$condition- условие выполнения метода.
OffCanvas::make('Title', 'Content...', 'Show Panel')->wide()OffCanvas::make('Title', 'Content...', 'Show Panel')->wide()
Метод full() устанавливает максимальную ширину для боковой панели.
full(Closure|bool|null $condition = null)full(Closure|bool|null $condition = null)
$condition- условие выполнения метода.
OffCanvas::make('Title', 'Content...', 'Show Panel')->full()OffCanvas::make('Title', 'Content...', 'Show Panel')->full()
Асинхронность
OffCanvas::make('Title', '', 'Show Panel', asyncUrl: '/endpoint'),OffCanvas::make('Title', '', 'Show Panel', asyncUrl: '/endpoint'),
Запрос будет отправлен один раз, но если вам нужно отправлять запрос при каждом открытии, то используйте метод alwaysLoad().
OffCanvas::make(...)->alwaysLoad(),OffCanvas::make(...)->alwaysLoad(),
Автозакрытие
По умолчанию OffCanvas закрывается после успешной отправки асинхронной формы внутри него.
Метод autoClose() позволяет управлять этим поведением.
autoClose(Closure|bool|null $autoClose = null)autoClose(Closure|bool|null $autoClose = null)
OffCanvas::make('Demo OffCanvas',static fn() => FormBuilder::make(route('alert.post'))->fields([Text::make('Text'),])->submit('Submit', ['class' => 'btn-primary'])->async(),)->name('demo-offcanvas')->autoClose(false),OffCanvas::make('Demo OffCanvas',static fn() => FormBuilder::make(route('alert.post'))->fields([Text::make('Text'),])->submit('Submit', ['class' => 'btn-primary'])->async(),)->name('demo-offcanvas')->autoClose(false),
Автозакрытие
По умолчанию боковые панели закрываются после успешного запроса (к примеру при отправке формы).
Метод autoClose() позволяет управлять этим поведением.
autoClose(Closure|bool|null $autoClose = null)autoClose(Closure|bool|null $autoClose = null)
OffCanvas::make('Заголовок',static fn() => FormBuilder::make(route('endpoint'))->fields([Text::make('Text'),])->submit('Submit', ['class' => 'btn-primary'])->async(),'Показать панель')->autoClose(false),OffCanvas::make('Заголовок',static fn() => FormBuilder::make(route('endpoint'))->fields([Text::make('Text'),])->submit('Submit', ['class' => 'btn-primary'])->async(),'Показать панель')->autoClose(false),
Атрибуты переключателя
Метод togglerAttributes() позволяет установить дополнительные атрибуты для переключателя $toggler.
togglerAttributes(array $attributes)togglerAttributes(array $attributes)
OffCanvas::make('Title', 'Content...', 'Show Panel')->togglerAttributes(['class' => 'mt-2']),OffCanvas::make('Title', 'Content...', 'Show Panel')->togglerAttributes(['class' => 'mt-2']),