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:

  • .once removes the listener after one submission.
  • .passive prevents reliable use of preventDefault().
  • .outside and .away do 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:click and x-on:click do not provide a button type or accessible name.
  • wire:model and x-model do not label a form control.
  • wire:navigate does 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.

#References