@xlit/form

xlit form custom element

Usage no npm install needed!

<script type="module">
  import xlitForm from 'https://cdn.skypack.dev/@xlit/form';
</script>

README

@xlit/form

Lit reactive component for form model, binding and validation

Installation

npm i @xlit/form

Getting started

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';
import { Form } from '@xlit/form';
import { trim, required } from '@xlit/form/validators.js';

@customElement('page-foo')
class PageFoo extends LitElement {
  form = new Form(this, {
    foo: { trim, required },
    bar: { trim, required },
  });

  render (): unknown {
    <form @submit="${this.onSubmit}">
      <div>
        <label>Foo</label>
        <input type="text" .value="${this.form.value('foo', '') as string}" @input="${this.form.input('foo')}">
        <span class="form-text">${this.form.error('foo')}</span>
      </div>

      <div>
        <label>Bar</label>
        <input type="text" .value="${this.form.value('bar', '') as string}" @input="${this.form.input('bar')}">
        <span class="form-text">${this.form.error('bar')}</span>
      </div>
    </form>
  }

  onSubmit (evt: Event) {
    evt.stopImmediatePropagation();
    try {
      this.form.assert();
      console.info('Model:', this.form.model);
    } catch (err) {
      console.error(err);
    }
  }
}