
Security News
AGENTS.md Gains Traction as an Open Format for AI Coding Agents
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.
formiga. substantivo femenino:
Pequeno insecto da orde dos himenópteros, polo xeral de cor negra, que vive en colonias moi numerosas organizadas en clases, e do que existen varias especies.
As formigas escavan complexas galerías subterráneas.
formiga
is the simplest -yet effective- form validator for React
.
Stick to -and empower- web standards (HTML5 Constraint Validation API) instead of ignore them.
formiga
aims to provide full <form>
state and validation functionalities with:
<form>
, <input>
, <textarea>
and <select>
HTML
elementsuseForm
and useInput
required
, minLength
, maxLength
, pattern
, ...)allowedValues
, disallowedValues
, doRepeat
, doNotRepeat
,checkValue
), while keeping in sync the element's ValidityStateprematureValidation
HTML5 Constraint Validation API checks for validity changes when the input changes. Depending on the browser, it may mean: when the input's value changes or just when the input loses the focus.
Formiga is here to make your Forms much nicer: with prematureValidation
, the ValidityState is updated always while typing!
formiga
cares just about state and validation of your forms. UI and styling is out of scope. That's why you will probably not use formiga
directly, but some of the integrations with some UI library. List is tiny yet:
Given formiga
works with native HTML elements (<form>
, <input>
, <textarea>
, <select>
), you will find pretty easy to couple it with any UI library. Or even just with some custom CSS
if you go minimalist, as in our Demo.
Check a live demo at afialapis.com/os/formiga/.
Or run it locally with:
npm run demo
npm i formiga
Formiga provides just two hooks: useForm
and useInput
.
VForm
will be the parent element. It just renders a form
element, and provide a couple of render props (renderInputs
and renderButtons
) so you can render the rest.
Then, any input inside the Form that you want to be validated, must be wrapped within a VInput
element.
Let's check a basic example (try it at CodePen):
import React, {useState} from 'react'
const FormigaForm = () => {
const form = useForm()
const [name, setName]= useState('John Doe')
const [age, _setAge]= useState('33')
const nameInput = useInput({
type: 'text',
disallowedValues: ["John Not Doe"],
inputFilter: 'latin'
})
const ageInput = useInput({
type: 'text',
checkValue: (v) => !isNaN(v) && parseInt(v)>=18,
inputFilter: 'int'
})
const handleSubmit = () => {
let resume= ''
form.elements
.map((el) => {
resume+= `Input ${el.name} ${el.valid ? 'is' : 'is not'} valid\n`
})
console.log(resume)
// Input name is valid
// Input age is valid
}
return (
<form ref = {form.ref}>
{/* A controlled input */}
<input ref = {nameInput.ref}
name = {'name'}
className = {nameInput.valid ? 'valid' : 'invalid'}
required = {true}
value = {name}
onChange = {(event) => setName(event.target.value)}/>
{/* An uncontrolled input */}
<input ref = {ageInput.ref}
name = {'age'}
className = {ageInput.valid ? 'valid' : 'invalid'}
required = {true}
defaultValue = {age}/>
<button
onClick ={(_ev) => handleSubmit()}
disabled = {! form.valid}>
Save
</button>
</form>
)
}
useForm()
const {ref, node, valid, hasChanged, elements} = useForm()
· ref
: React ref for the
node
: the form DOM node element
· valid
: a boolean indicating if every field in the form is valid
· hasChanged
: a boolean indicating if any field in the form has changed
· elements
: an array of objects containing the form elements, where each elemet is like:
name
: the name of the elementtype
: the type of the elementvalid
: a boolean indicating if the element is validvalidationMessage
: the validation message of the elementvalue
: the value of the elementoriginalValue
: the original value of the elementhasChanged
: a boolean indicating if any of the element's value has changeduseInput()
const {ref, node, valid, validationMessage, validate, setValue, setValidationMessage, dispatchEvent, originalValue} = useInput(props)
· ref
: React ref for the element you will render
· node
: the input DOM node element
· valid
: a boolean indicating if the element is valid
· validationMessage
: the validation message of the element
· validate
: a function to validate the element
· setValue
: a function to set the value of the element
· setValidationMessage
: a function to set the validation message of the element
· dispatchEvent
: a function to dispatch an event on the element
· originalValue
: the original value of the element
· hasChanged
: a boolean indicating if the element's value has changed
· originalValue
: the original value of the element. formiga
will catch the input's value on first render, but depending on your component's rendering cycle, you may need several renders to have your component ready. In that cases, you need to force originalValue
.
· transformValue
: a function to transform the input's value before validation.
· checkValue
: a function to perform some custom validation on the input's value.
· allowedValues
: an array of values that the input's value must be in.
· disallowedValues
: an array of values that the input's value must not be in.
· doRepeat
: the name of the input that the input's value must be equal to.
· doNotRepeat
: the name of the input that the input's value must not be equal to.
· decimals
: the number of decimals the input's value must have.
· validationMessage
: the message to show when the input is invalid.
· inputFilter
: the type of input filter to apply to the input's value.
See changelog here
FAQs
The simplest -yet effective- form validator for React
The npm package formiga receives a total of 115 weekly downloads. As such, formiga popularity was classified as not popular.
We found that formiga demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.