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

intelligent-forms

v1.0.5

Published

Flexible reactive forms for web development with TypeScript

Downloads

8

Readme

intelligent-forms

Simple library for creating forms using typescript, inspired by @angular/forms

Installation

    npm i intelligent-forms

Features

  • Type safety

    • Forms are fully typed.
    • Compile-Time Error Checking.
    • Accurate Form Validation.
  • Flexibility

    • Designed to adapt to a wide range of use cases and environments.
    • Provides a flexible API that can be easily integrated into various projects, regardless of their size or complexity.
    • Allows to configure components to fit specific needs, making it suitable for a variety of applications.
  • Maintainability

    • Structured to ensure easy updates, debugging and long-term maintenance.
    • Follows best practices and coding standards, making it easier to read and understand forms code.
  • Reusability

    • Built with extensibility in mind, allowing developers to extend functionality without modifying the core library.
    • Components are modular and reusable across different projects and applications.

Usage

import { formBuilder } from 'intelligent-forms'

// Creating a class that implements ControlValueAccessor<ControlValue>
export class InputComponent implements ControlValueAccessor<string> {
  public node: HTMLInputElement

  constructor() {
    this.node = document.createElement('input')

    this.node.addEventListener('input', () => {
      /** 
       * Call the method on input event to mark linked control as `dirty`
       * and change the value of the linked control
       */
      this.onChange(this.node.value)
    })

    this.node.addEventListener('blur', () => {
      // Call the method on blur event to mark linked control as `touched`
      this.onTouch()
    })
  }

  // Forms API overrides this method, so you don't need to define it
  public onChange(value: string): void {}

  // Forms API overrides this method, so you don't need to define it
  public onTouch(): void {}

  /**
   * Forms API using this method to write the value of the linked 
   * control to our class
   */
  public writeValue(value: string): void {
    this.node.value = value
  }
}


// Create the validator to validate the value a control
function capitalizeValidator(control) {
  return (/^[A-Z].*$/.test(control.value) ? null : 'message to show to the user in case of invalid value')
}


const name = new InputComponent()
const surname = new InputComponent()

/**
 * Create the FormGroup with FormControls and bind the classes that
 * implements ControlValueAccessor via FormBuilder.control() method, 
 * passing the classes as the third parameter
 */
const form = formBuilder.group({
  name: formBuilder.control('', [], name),
  surname: formBuilder.control('', [capitalizeValidator], surname),
})

const root = document.getElementById('app')
root?.append(name.node, surname.node)

Documentation

AbstractControl<ControlValue>

Base class from which FormControl and FormGroup are inherited

| Field | Description | Returned values | |-------------|----------------|-----------------| | value | Current value of the control. | ControlValue | | touched | True if the control is marked as touched. A control is marked touched once the user has triggered a blur event on it. | boolean | | valid | A control is valid when its status is 'VALID'. | boolean | | status | The validation status of the control. Status = 'VALID' when control value passed all the validation connected to it. | 'VALID' 'INVALID' | | disabled | Returns a boolean indicating whether the control is disabled or not. True if the control is disabled, false otherwise. | boolean | | dirty | True if the control is dirty, false otherwise. The control is dirty if the user has changed the value in the UI. | boolean | | errors | Returns the array of validation errors for this control. Every error in the array is a message returned by the specific validator function provided to the control. | ValidationError[] | | validators | Returns the array of validators for this control. | Validator<ControlValue>[] | | on() | Subscribes to an event emitted by the control and executes the provided function when the event is triggered. | void | | addValidators() | Adds the given validators to the list of validators for this control. Validators is executed then value changes and used to check is the control is valid or not. | void | | removeValidators() | Removes the given validators from the list of validators for the control. | void | | setValidators() | Sets the validators for the control. | void | | clearValidators() | Removes all validators from the list of validators for the control. | void | | disable() | Sets the disabled state of the control to true and triggers the disabledchange event if the control was previously enabled and the emitEvent option is set to true. | void | | enable() | Sets the disabled state of the control to false and triggers the disabledchange event if the control was previously disabled and the emitEvent option is set to true. | void | | markAsTouched() | Sets the touched state of the control to true and triggers the touchedchange event if the control was previously untouched and the emitEvent option is set to true. | void | | markAsUntouched() | Sets the touched state of the control to false and triggers the touchedchange event if the control was previously touched and the emitEvent option is set to true. | void | | markAsDirty() | Sets the dirty state of the control to true and triggers the pristinechange event if the control was previously pristine and the emitEvent option is set to true. | void | | markAsPristine() | Sets the dirty state of the control to false and triggers the pristinechange event if the control was previously dirty and the emitEvent option is set to true. | void |

FormControl<ControlValue>

Tracks the value, validation status, touched state and dirty state of a form control. Inherited from AbstractControl

| Field | Description | Returned values | |-------------|----------------|-----------------| | setValue() | Sets the value of the control, updates its status and emits valuechange and statuschange. | void | | reset() | Resets the form control by setting its value to the initial value, marking it as untouched and pristine. | void | | register() | Registers the class that implements the ControlValueAccessor interface. with the form control. Overrides the onTouch and onChange methods of the given class. | void |

FormGroup<Controls = Record<string, AbstractControl>>

Tracks the value and validity state of a group of FormControl instances. A FormGroup aggregates the values of each child FormControl into one object, with each control name as the key. It calculates its status by reducing the status values of its children. For example, if one of the controls in a group is invalid, the entire group becomes invalid. Inherited from AbstractControl

| Field | Description | Returned values | |-------------|----------------|-----------------| | controls | Get the controls of the form group (Object there keys are names of the controls in the group context and values are controls themselves). | Controls | | setValue() | It accepts an object with control names as keys, and matches the values to the correct controls in the group. | void | | reset() | Resets the form group by resetting all child controls, marking it as untouched and pristine, and updating the value and status. | void | | get() | Retrieves the control with the specified name from the form group. | AbstractControl | | getControlName() | Retrieves the name of the control in the form group that corresponds to the given control. | keyof Controls | | contains() | Checks if the FormGroup contains the specified control or control name. | boolean | | addControl() | Adds a control to the form group, updates the value and emits the valuechange and statuschange events if specified. | void | | removeControl() | Removes a control from the FormGroup and updates the value and status and emits the valuechange and statuschange events if specified. | void | | replaceControl() | Replaces a control in the form group with a new control, updates the value and status and emits the valuechange and statuschange events if specified. | void | | disable() | Sets the disabled state of the formGroup and all its children to true and triggers the disabledchange event if the control was previously enabled and the emitEvent option is set to true. | void | | enable() | Sets the disabled state of the formGroup and all its children to false and triggers the disabledchange event if the control was previously disabled and the emitEvent option is set to true. | void | | markAsTouched() | Sets the touched state of the FormGroup and all its child controls to true and triggers the touchedchange event if the control was previously untouched and the emitEvent option is set to true. | void | | markAsUntouched() | Sets the touched state of the FormGroup and all its child controls to false and triggers the touchedchange event if the control was previously touched and the emitEvent option is set to true. | void | | markAsDirty() | Sets the dirty state of the FormGroup and all its child controls to true and triggers the pristinechange event if the control was previously pristine and the emitEvent option is set to true. | void | | markAsPristine() | Sets the dirty state of the FormGroup and all its child controls to false and triggers the pristinechange event if the control was previously dirty and the emitEvent option is set to true. | void |

FormBuilder

The helper class that provides the easier interface to create FormGroup and FormControl classes.

| Field | Description | Returned values | |-------------|----------------|-----------------| | group() | Creates a new FormGroup from the object there keys are names of the controls and values are one of this possible structures: Class inherited from AbstractControl. In this case the class becomes a child of the FormGroup to be created. Array — where the first element is the initial value of the control and second is an array of validators of the control to be created. In this case the new FormControl will be created using the values of the array. Class that implements ControlContainer interface. In this case the control that will be applied to the FormGroup will be the control property of the class. Object that matches the structure of the FormBuilder.group() params. In this case the nested FormGroup will be created using the values of the object. | FormGroup | | control() | Creates a new FormControl instance with the given initial value and optional validators. If an element is provided, the control is registered to the element. | FormControl |