1.1.11 • Published 7 months ago

@mfgomess/alpine-zod-validation v1.1.11

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Alpine.js Zod Validation

šŸš€ A powerful integration between Alpine.js and Zod for seamless form validation. Define validation schemas using Zod and apply them directly in your Alpine.js components with minimal effort.

šŸ“‹ Table of Contents

šŸš€ Installation

NPM + Bundler

npm install @mfgomess/alpine-zod-validation

Import and initialize:

import Alpine from 'alpinejs';
import { zValidation } from '@mfgomess/alpine-zod-validation';

window.Alpine = Alpine;
Alpine.plugin(zValidation);
Alpine.start();

CDN

<script type="module" defer src="https://unpkg.com/@mfgomess/alpine-zod-validation/dist/cdn.js"></script>
<script src="//unpkg.com/alpinejs" defer></script>

🚦 Quick Start

Here's a simple example to get you started:

<form
    x-data="{
        email: '',
        password: '',
        zSchema: $z.object({
            email: $z.string().email(),
            password: $z.string().min(8)
        })
    }"
    x-zvalidation
    @submit.prevent="zValidate() && $event.target.submit()"
>
    <input 
        type="email" 
        x-model="email"
        :class="{ 'error': zIsInvalid('email') }"
    />
    <span x-show="zIsInvalid('email')" x-text="zFirstErrorFor('email')"></span>

    <input 
        type="password" 
        x-model="password"
        :class="{ 'error': zIsInvalid('password') }"
    />
    <span x-show="zIsInvalid('password')" x-text="zFirstErrorFor('password')"></span>

    <button type="submit" :disabled="zHasErrors()">Submit</button>
</form>

šŸŽÆ Core Concepts

Directives

DirectiveDescription
x-zvalidationMain directive to enable validation on a component
.listenModifier to validate on specific events (e.g., x-zvalidation.listen="change")
.reactiveEnables real-time validation after first error
.entangledSyncs with Livewire validation errors

Magic Properties

  • $z: Direct access to Zod for schema definition

šŸ“š API Reference

Validation Methods

MethodParametersReturn TypeDescription
zValidate()-booleanValidates entire form against schema. Returns true if valid.
zValidateOnly(field)stringbooleanValidates a single field. Returns true if valid.
zIsFormValid()-booleanSilently Checks if entire form is currently valid without triggering errors (usefull to enable/disable submit buttons).
zReset()-voidResets all validation state.

Error Handling

MethodParametersReturn TypeDescription
zIsValid(field)stringbooleanChecks if field is valid (after validation).
zIsInvalid(field)stringbooleanChecks if field has validation errors.
zFirstErrorFor(field)stringstring\|nullReturns first error message for field.
zGetErrorsFor(field)stringstring[]Returns all error messages for field.
zAllErrors()-ObjectReturns all validation errors.
zHasErrors()-booleanChecks if form has any errors.
zAllSuccesses()-ObjectReturns validation success state for all fields.

šŸ”„ Advanced Features

Event-Based Validation

Validate fields on specific events:

<form
    x-zvalidation.listen="change"
    x-data="{ /* ... */ }"
>
    <!-- Validates on change event -->
</form>

Reactive Validation

Enable real-time validation after first error:

<form
    x-zvalidation.listen.reactive="change"
    x-data="{ /* ... */ }"
>
    <!-- Switches to input event validation after first error -->
</form>

Livewire Integration

Sync validation with Livewire components:

<form
    x-zvalidation.entangled
    x-data="{ 
        name: @entangle('clientData.name'),
        zSchema: $z.object({ 
            name: $z.string().min(3)
        })
    }"
>
    <!-- Syncs with Livewire validation -->
</form>

šŸ¤ Contributing

We welcome contributions! Please feel free to submit a Pull Request.

šŸ“„ License

MIT Licensed. Enjoy building awesome forms!

1.1.11

7 months ago

1.1.10

7 months ago

1.1.9

8 months ago

1.1.8

8 months ago

1.1.7

11 months ago

1.1.6

11 months ago

1.1.5

11 months ago

1.1.4

11 months ago

1.1.3

11 months ago

1.1.2

11 months ago

1.1.1

11 months ago

1.1.0

11 months ago

1.0.7

11 months ago

1.0.6

11 months ago

1.0.5

11 months ago

1.0.4

11 months ago

1.0.3

11 months ago

1.0.2

11 months ago

1.0.1

11 months ago

1.0.0

11 months ago

0.0.6

11 months ago

0.0.5

11 months ago

0.0.4

11 months ago

0.0.3

11 months ago

0.0.1

11 months ago