npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

svelte-fastform

v0.0.8

Published

Form management for Svelte

Downloads

2

Readme

svelte-fastform

FastForm is a library that simplifies building complex forms in Svelte. It is largely based on the Formik library for React. It's goal is to centralize form logic, helping you create forms your users will love filling out! It is comprised of Components and Api hooks that you can use in whatever combination you prefer.

See it in action

Contact form example

Benefits

  • Allows any data type to be associated with an input.
  • Ability to create your own input types.
  • Allow nested paths.

Examples

// submissionform.js
export function validate(values) {
  const errors = {};

  if (!values.email) {
    errors.email = "Email required";
  }

  if (!values.password) {
    errors.password = "Password required";
  }

  return errors;
}

export function onSubmit(values, errors) {
  if (!Object.keys(errors).length) {
    console.log(`Form submitted: ${values}`)
  }
}
<!-- UsingComponents.svelte -->
<script>
  import { FastForm, Form, Field } from 'fastform';
  import { validate, onSubmit } from 'submissionform';
</script>

<FastForm {validate} {onSubmit}>
  <Form>
    <label for="email">Email</label>
    <Field id="email" name="email" type="email" />
    <label for="password">Password</label>
    <Field id="password" name="password" type="password" />
    <label>
      <Field name="notRobot" type="checkbox" />
      <span>I am not a robot</span>
    </label>
    <button type="submit">Submit</button>
  </Form>
</FastForm>
<!-- UsingHooks.svelte -->
<script>
  import { useForm } from 'fastform';
  import { validate, onSubmit } from 'submissionform';

  const { handleSubmit, props } = useForm({
    validate,
    onSubmit
  });
</script>

<form on:submit|preventDefault={handleSubmit}>
  <label for="email">Email</label>
  <input id="email" name="email" type="email" use:props={'email'} />
  <label for="password">Password</label>
  <input id="password" type="password" use:props={'password'} />
  <label>
    <input name="notRobot" type="checkbox" use:props={'notRobot'} />
    <span>I am not a robot</span>
  </label>
  <button type="submit">Submit</button>
</form>

Installation

npm install --save-dev fastform

Api

useForm

Creates an object that tracks the state of the form. It has stores for tracking values, errors, touched and submitting state. It has a props action that attached all required listeners to an input. The value action attached arbitrary data to an element (ex. a radio button can have an object as a value rather than just a string).

useField

useField creates a field on a form. It returns an object that has value, error and touched stores. These stores refer to just the specific field. Calling set or update on them will also change the state of the form stores. The field object also returns props and value actions that work the same as the form object.

Components

FastForm

FastForm is a component that provides the instance to all child components. It does this through Svelte's context api.

Props

  • initialValues: An object containing the initial state of your form.
  • validate: A function to validate your form.
  • onSubmit: A function to handle submitting your form.

Form

Form is a simple component that handles wiring your form's submit handler

Field

Field is a component that handles configuring inputs for your form.

Props

  • name: [Required]
  • type: [default: 'text]
  • value: A value that will be associated with the input. Useful for checkbox and radio input types.