Usage
Livewire and Alpine Markup
Sheath understands the browser-visible effects of common Livewire 4 and Alpine directives without requiring either package. Core rules use that knowledge to avoid false positives. Core rules do not validate action names, component properties, or other framework-specific behavior that requires application context.
#Semantics Recognized by Core Rules
Core rules interpret these reactive attributes without requiring a framework plugin.
| Markup | Core interpretation |
|---|---|
:name="expression", x-bind:name="expression" | Dynamic value for the native name attribute |
wire:bind:name="expression" | Same dynamic native attribute as Alpine x-bind:name |
x-bind="bindings" | Opaque Alpine object that may supply arbitrary attributes or directives |
x-text, x-html, wire:text | Client-rendered text when the expression is non-empty |
wire:submit | Durable prevention of the form's native submission |
x-on:submit.prevent, @submit.prevent | Durable prevention of the form's native submission |
@teleport ... @endteleport, <template x-teleport> | A rendered-tree boundary: descendants leave their source ancestry |
Attribute bindings are target-specific. wire:bind:class cannot satisfy a missing type, method, alt, or accessible name. Bare and empty x-bind object directives are not treated as attribute providers.
Livewire implements wire:bind:* through Alpine x-bind:*, wire:text through x-text, and adds .prevent to wire:submit. Sheath models those transformations directly rather than checking whether the packages are installed.
#Submit Modifiers
wire:submit and Alpine submit listeners with .prevent satisfy best-practices-require-form-method because the browser does not perform its native GET or POST submission. They also make security-csrf-field inapplicable to that intercepted path; the client request owns its CSRF mechanism.
Listeners using .once, .passive, .outside, or .away do not count:
.onceremoves the listener after one submission..passiveprevents reliable use ofpreventDefault()..outsideand.awaydo not handle a submit originating from the form.
An Alpine submit listener without .prevent also does not count. Other modifiers such as .stop, .self, .capture, .debounce, and .throttle do not defeat immediate default prevention.
#Directives That Do Not Replace HTML Semantics
Sheath does not broadly exempt elements just because they contain reactive markup. For example:
wire:clickandx-on:clickdo not provide a buttontypeor accessible name.wire:modelandx-modeldo not label a form control.wire:navigatedoes not provide link text.wire:show,x-show, loading, transition, polling, streaming, and lifecycle directives do not provide accessible content by themselves.wire:loading.attr,wire:dirty.attr, and similar conditional mutations do not guarantee that an attribute exists on every rendered state.
This boundary keeps ordinary HTML, ARIA, security, and performance diagnostics active while suppressing only findings contradicted by known runtime behavior.
#Teleported Content
Livewire and Alpine move teleported descendants to another DOM location. Core rules therefore analyze a teleported fragment as a separate rendered-tree root and do not treat its descendants as children of the source button, form, label, list, table, or heading. Sheath does not infer text or id-based relationships between the source tree and the fragment. Elements within the same teleported fragment can still relate to one another.