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

material-ui-number-input

v5.0.24

Published

The better TextField for number inputs.

Downloads

413

Readme

material-ui-number-input

The better TextField for number inputs.

Install

NPM

Changelog

Check Change log for changes.

Properties

| Name | Type | Default | TextField | Description | | ----------------------- | ---------- | --------- | --------- | ------------------------------------------------------- | | children | node | | ✓ | | | className | string | | ✓ | The css class name of the root element. | | disabled | bool | false | ✓ | Disables the input field if set to true.| | floatingLabelFixed | bool | false | ✓ | If true, the floating label will float even when there is no value. | | id | string | | ✓ | The id prop for the input field. | | name | string | | ✓ | Name applied to the input. | | fullWidth | bool | false | ✓ | If true, the field receives the property width 100%. | | underlineShow | bool | true | ✓ | If true, shows the underline for the input field. | | defaultValue | number | | ✓ | The number to use for the default value. Must be in range [min, max] if any is setted. | | strategy | 'ignore' | 'warn' | 'allow' | 'allow' | ❌ | Strategy to use when user presses key and when value prop change it's value. | | min | number | | ❌ | The number used as minimum value limit. Must be less than max. | | max | number | | ❌ | The number used as maximum value limit. Must be greater than min. | | required | bool | false | ❌ | If true and if input is left empty than instead of 'clean', 'required' error will be emited throughout onError handler if useStrategy is not 'ignore'. | | value | string | | ✓ | The value of the input field. | | onChange | function | | ✓ | Callback function that is fired when input filed must change it's value. Signature: function(event: React.FormEvent<HTMLInputElement>, value: string) => void. | | onError | function | | ❌ | Callback function that is fired when input error status changes and strategy is not 'ignore'. Signature: function(error: 'none' | 'invalidSymbol' | 'incompleteNumber' | 'singleMinus' | 'singleFloatingPoint' | 'singleZero' | 'min' | 'max' | 'required' | 'clean') => void. | | onValid | function| | ❌ | Callback function that is fired when input's value is a valid number. Signature: function(value: number) => void | | onRequestValue* | function | | ❌ | Callback function that is fired when strategy is 'warn' or 'ignore', input is controlled and an invalid number value is passed. It provides valid number value which needs to be setted. Signature: function(value: string) => void | | errorText | node | | ✓ | The error content to display. | | errorStyle | object | | ✓ | The style object to use to override error styles. | | floatingLabelFocusStyle | object | | ✓ | The style object to use to override floating label styles when focused. | | floatingLabelStyle | object | | ✓ | The style object to use to override floating label styles. | | floatingLabelText | node | | ✓ | The content to use for the floating label element. | | hintStyle | object | | ✓ | Override the inline-styles of the TextField's hint text element. | | hintText | node | | ✓ | The hint content to display. | | inputStyle | object | | ✓ | Override the inline-styles of the TextField's input element. When multiLine is false: define the style of the input element. When multiLine is true: define the style of the container of the textarea. | | style | object | | ✓ | Override the inline-styles of the root element. | | underlineDisabledStyle | object | | ✓ | Override the inline-styles of the TextField's underline element when disabled. | | underlineFocusStyle | object | | ✓ | Override the inline-styles of the TextField's underline element when focussed. | | underlineStyle | object | | ✓ | Override the inline-styles of the TextField's underline element. |

* onRequestValue is required when strategy is 'warn' or 'ignore' and input is controlled in order to ensure correct strategy behaviour.

Strategies

| strategy | onError fired | onRequestValue fired | | -------- | ------------- | ------------------- | | 'allow' | ✓ | | | 'warn' | ✓ | ✓* | | 'ignore' | | ✓* |

* Fired when input is controlled (value is provided). If input is not controlled it's value will be automaticlly corrected when it get's invalid number value.

Errors

'none'

Fired when input's value is valid (there is no error).

'required'

Fired when required prop is true and user leaves empty the input or it gets cleared.

'clean'

Fired when required prop is false and user leaves empty the input or it gets cleared.

'invalidSymbol'

Fired when user enters none special key which is different than -,.,[0-9].

'incompleteNumber'

Fired wehn user enters - as first char in the input or when user enters the first ..

'singleMinus'

Fired when user enters - not as a first char.

'singleFloatingPoint'

Fired when user enters . and there is already one entered.

'singleZero'

Fired when user has entered 0 as first char and enters a digit key.

'min'

Fired when user enters number less than min prop value.

'max'

Fired when user enters number greater than max prop value.

public methods

NumberInput re-exposes public method getInputNode(): HTMLInputElement from TextField.

TextField methods: blur, focus, select and getValue are not exposed as they and getInputNode will be removed in material-ui 0.16 and replaced with public member input which is public and now but getInputNode is prefered until 0.16 is released. If you want to use any of those methods call them on input retunrned from getInputNode with the excpetion of getValue instead use value property.

Example

import * as React from 'react';
import NumberInput from 'material-ui-number-input';

class Demo extends React.Component {
  constructor(props) {
  super(props);
  
  this.onKeyDown = (event) => {
    console.log(`onKeyDown ${event.key}`);
  };
  
  this.onChange = (event, value) => {
    const e = event;
    console.log(`onChange ${e.target.value}, ${value}`);
  };
  
  this.onError = (error) => {
    let errorText;
    console.log(error);
    switch (error) {
      case 'required':
        errorText = 'This field is required';
        break;
      case 'invalidSymbol':
        errorText = 'You are tring to enter none number symbol';
        break;
      case 'incompleteNumber':
        errorText = 'Number is incomplete';
        break;
      case 'singleMinus':
        errorText = 'Minus can be use only for negativity';
        break;
      case 'singleFloatingPoint':
        errorText = 'There is already a floating point';
        break;
      case 'singleZero':
        errorText = 'Floating point is expected';
        break;
      case 'min':
        errorText = 'You are tring to enter number less than -10';
        break;
      case 'max':
          errorText = 'You are tring to enter number greater than 12';
          break;
      }
      this.setState({ errorText: errorText });
    };

    this.onValid = (value) => {
      console.debug(`${value} is a valid number`);
    };

    this.onRequestValue = (value) => {
      console.log(`request ${JSON.stringify(value)}`);
      this.setState({ value: value })
    }
  }
    
  render() {
    const { state, onChange, onError, onKeyDown, onValid, onRequestValue } = this; 
    return (
      <NumberInput
        id="num"
        value={state.value}
        required
        defaultValue={9}
        min={-10}
        max={12}
        strategy="warn"
        errorText={state.errorText}
        onValid={onValid}
        onChange={onChange}
        onError={onError}
        onRequestValue={onRequestValue}
        onKeyDown={onKeyDown} />
    );
  }
}

Written in Typescript and Typescript Ready! (check example)

Supports propTypes for regular JavaScript users

Testing

Tests will be added soon

Contributing

  1. Fork the repository
  2. npm install
  3. npm run typings
  4. Make changes
  5. npm start
  6. open http://localhost:3000
  7. Make a Pull Request