Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Livewire Slide Overs Laravel Package

laravelcm/livewire-slide-overs

Livewire Slide Over Panel adds stateful drawer (slide-over) components to Laravel Livewire apps, supporting multiple child components while preserving state. Inspired by wire-elements/modal, it installs via Composer and a single @livewire directive.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. laravelcm/livewire-slide-overs is a thin, opinionated UI primitive for the Laravel + Livewire stack rather than infrastructure. It registers a single root Livewire component (slide-over-panel) that must be mounted once in the layout, and exposes an abstract SlideOverComponent base class that application components extend. Control is event-driven (openPanel dispatch) with a JS helper (window.$slideOver) for optimistic open. This is the same architectural contract as wire-elements/modal — deliberately so — which lowers conceptual onboarding cost for any team already familiar with that modal pattern and makes the package a drop-in visual substitution (drawer instead of modal) rather than a new mental model. The v2 feature set (stacked panels, per-panel resize, skip/destroy-in-stack semantics, closePanelWithEvents) is where the design gets genuinely load-bearing: it implies the package owns a client-side panel stack with server round-trips per panel, and that stack is stateful across component lifecycle. That is the boundary a TPM should care about, because it means the package is managing navigation state, not just styling.

Integration feasibility. Low-to-moderate effort, high reversibility. Integration requires: (1) composer require, (2) one Blade directive in the layout, (3) extending a base class per panel component, (4) Tailwind content/@source configuration so the vendor views are scanned, (5) optional config publish. The Tailwind step is the one that silently breaks in CI: if the vendor view path isn't scanned (v4 @source or v3 content array), the drawer renders unstyled or partially styled with no error — a classic "works locally, broken in prod build" failure. The include_css escape hatch removes the Tailwind dependency but trades it for theme inconsistency. Hard requirements (PHP 8.3+, Laravel 11/12, Livewire 3.4/4.x) are modern and may preempt teams on Laravel 10 or PHP 8.2 — verify before committing.

Technical risk. The dominant risk is adoption and bus factor, not code quality. Two stars, zero dependents, and a single primary maintainer (mckenziearts) means effectively no third-party battle-testing surface; we would be among the earliest production users. Signals that partially offset this: MIT license (forkable), an active release cadence with a recent minor (v2.1.0) adding substantial features, a changelog going back through a v2.0.0 breaking release, a test workflow badge, and an explicit dependency-support fix for Livewire 4.x (v2.0.1) — which suggests the maintainer is tracking the framework, a common failure point for small UI packages. Secondary risks: the v2.0.0 breaking changes (PanelContract signature enforcement, component ID hashing switching from serialize() to json_encode(), getListeners() → #[On]) indicate the public surface is still settling; the sessionStorage width cache is a client-side state store we don't control and can't invalidate server-side; and stacked-panel UX has already needed three corrective patches (v2.0.2 overflow, v2.0.4 ESC/responsive width), which is a warning that stacking edge cases are where defects concentrate.

Key questions for the maintainer / spike.

  • Is wire-elements/modal an acceptable fallback, and does a swap cost only the layout directive + base class rename? (Determines reversibility.)
  • What is the maintenance commitment and release policy — semantic versioning guarantees, security response expectations, PHP/Laravel support windows?
  • How does the sessionStorage width cache interact with a deploy that changes panelMaxWidth()? Is there a versioned cache key or invalidation?
  • Accessibility: is the v2.1.0 "native dialog mode" a full focus-trap/aria-modal/inert-background implementation, or chrome only? Does it survive stacked panels?
  • Behavior of closePanelOnEscapeIsForceful and forceClose() in deeply stacked flows — has it been validated against unsaved-form state?
  • Test coverage depth: are stacked, skip, and destroy-skipped paths covered, or only happy-path open/close?
  • Livewire 4 compatibility status — supported but tested in CI, or supported by assertion?

Integration Approach

Stack fit. Best fit is an existing Laravel 11/12 + Livewire 3.4/4 application already using Tailwind, where the product has a recurring "contextual side panel" pattern — edit-in-place forms, record detail previews, filters, cart/checkout steps, notification detail. The stacked-panel capability is the differentiator worth designing around: multi-step flows (list → detail → edit) that stay in context without full page navigation, with skipPreviousPanel() + destroySkippedPanels() giving explicit, deliberate cleanup semantics for the "save and collapse back two levels" case. If the app is Inertia/Vue/React, or Blade-only without Livewire, this package is not applicable — do not evaluate it as a generic drawer library.

Migration path. Treat it as a UI-shell change with a narrow blast radius:

  1. Spike (1–2 days): standalone branch, install, mount the panel in the layout, build two representative panels — one simple form, one stacked three-deep flow with unsaved state and ESC behavior. Configure Tailwind, then verify the compiled production build renders correctly, not just npm run dev.
  2. Parallel adoption: introduce the package alongside whatever exists today (Bootstrap modal, custom Alpine drawer, or wire-elements/modal). Because invocation is an event dispatch, panels can be ported one at a time without touching surrounding pages.
  3. Consolidation: once N panels are ported, remove the incumbent mechanism and the now-dead CSS/JS. Deletion is the completion criterion, not addition.
  4. Contingency: keep a fork branch of the package in the org, or pin the version and vendor it, so an upstream abandonment doesn't block a framework upgrade. With MIT + small surface, a fork is a realistic hedge — budget roughly a day per year for rebasing.

Compatibility. Verify early and explicitly: PHP ≥ 8.3 in all environments (including CI images and the deploy target); Laravel 11/12 only; Livewire 3.4+ or 4.x. Tailwind v4 (@source) and v3 (content) are both documented — pick per project and add to the build checklist. Any existing wire-elements/modal usage in the codebase is a conflict risk, not just a duplicate: both register a root component and both expose a global open event name; the spike must confirm openPanel does not collide with an existing listener.

Sequencing. Tailwind config → layout directive → config publish (set position, component_defaults, and consider destroy_on_close deliberately rather than accepting defaults) → base-class components → adoption sweep → remove incumbent. Two ordering traps: publish config before building components if you intend to change defaults, since per-component static overrides otherwise mask the config and make later changes confusing; and complete the Tailwind/asset verification before the adoption sweep, or you will chase styling bugs across every ported panel at once. Gate the sweep on the spike's stacked-panel findings, because stack semantics determine the component decomposition — a flow that needs to skip two levels should be one panel with steps, not three panels, and getting that wrong is expensive to unwind.

Operational Impact

Maintenance. Ongoing cost is low and mostly externalized: the package owns the drawer chrome, focus/ESC behavior, and the stack; we own the panel components and the Tailwind scanning config. Two recurring chores to schedule: (1) re-verify the Tailwind safelist after every package minor upgrade — the maintainer has already had to safelist max-width classes for Tailwind v4 once (v2.0.3), which tells you this is a fragile seam that will break again on either Tailwind or package upgrades; (2) review each release note for breaking surface changes, given v2.0.0's interface, hashing, and listener changes. Budget realistically: near-zero steady state, but a half-day per minor upgrade and a day per major, because this is UI the team touches constantly and regressions are visible to users rather than caught by tests.

Support. Support comes from GitHub issues and a single maintainer — no SLA, no vendor, no paid tier. Internal ownership must therefore be explicit: name one engineer as the package's de facto owner with authority to fork. Document the decision in an ADR alongside the wire-elements/modal fallback rationale, so a future team doesn't re-litigate it. Because the dependency graph is laravelcm/livewire-slide-overs → Livewire → Laravel → Alpine, an upstream Livewire major is the most likely forcing function for emergency work; the v2.0.1 fix demonstrates the maintainer responds to this, but it also demonstrates that a Livewire major can require a package patch before we can upgrade. That upgrade-order dependency should be recorded in the platform upgrade runbook.

Scaling. Scaling concerns are client-side and interactional, not infrastructural. Each panel open is a Livewire round-trip; the optimistic-open cache eliminates the perceived latency after the first open of a given component per session, so the meaningful performance profile is "first open per component per session is slower." Two scaling axes matter: breadth — number of distinct panel components, each needing a warm cache entry and a Tailwind-scanned view; and depth — stacked panel count, where server-side component state accumulates and destroy_on_close becomes a correctness and memory question rather than a preference. Default destroy_on_close: false and destroy_on_close static returning false for base behavior means state is retained by default — good for back-navigation UX, a leak risk in long sessions with many distinct panels. For high-traffic admin surfaces with deep stacks, set destroy_on_close deliberately and test with a realistic session length.

Failure modes. Ranked by likelihood × impact:

Mode Symptom Detection Mitigation
Tailwind not scanning vendor views Unstyled/partial drawer, only in compiled build Visual regression on prod build Build-time check; include_css fallback
Event name collision with existing modal lib Both overlays open, or panel never opens Spike only Audit openPanel/closePanel listeners before adoption
Stale sessionStorage width cache Panel opens at wrong width after deploy Manual, per-session Pass explicit attributes on open; ask maintainer for cache versioning
Stacked ESC / skip semantics Wrong panel closes; unsaved state lost Manual QA Explicit per-component closePanelOnEscape*; test 3-deep flows
Upstream abandonment / Livewire major Cannot upgrade framework Release monitoring MIT fork + named owner + upgrade runbook entry
PHP/Laravel floor mismatch Composer resolution failure in CI CI Pre-flight version audit

The two that warrant pre-adoption gating are the Tailwind build verification and the event-name collision audit — both are cheap to test during the spike and expensive to discover in production.

Ramp-up. Minimal and well-supported by documentation. The README covers install, opening (including the instant-open helper and its cache semantics), argument passing with automatic model binding, dynamic resize, all close variants, static overrides, and config — plus explicit Tailwind v3/v4 instructions, which is more thorough than most packages at this star count. A Laravel-fluent engineer is productive within an hour; the only genuinely non-obvious concepts are the sessionStorage cache behavior and stack-skip semantics, and both are documented. The real ramp-up cost is convention, not knowledge: the team must agree when a flow is a new stacked panel versus a step inside one panel, and that decision needs to be written down before the adoption sweep, since it drives component decomposition and is costly to reverse.

Net TPM position. Low-risk, low-cost, high-reversibility integration with an outsized feature payoff for context-heavy admin UX — gated on three pre-commitment checks (version floor, Tailwind production build, event-name audit) and one organizational commitment (a named owner willing to fork). The adoption/bus-factor concern is real but proportionate to the blast radius: this is chrome and interaction state, not data or auth, so the worst case is a contained UI regression, not a systemic outage. Approve for a bounded spike; hold broad rollout until stacked-panel and escape-state behavior are validated against unsaved-form flows.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
steadrun/laravel-monitor
labyrinthe/connect-laravel
elmogy/layan
drewdan/sentinel-client
dskripchenko/laravel-llm
fatryst/nuonuo
stevenay/myanfont
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin