GithubHelp home page GithubHelp logo

alexkuz / react-input-enhancements Goto Github PK

View Code? Open in Web Editor NEW
1.4K 17.0 68.0 3.92 MB

Set of enhancements for input control

Home Page: http://alexkuz.github.io/react-input-enhancements/

License: MIT License

HTML 1.74% JavaScript 98.26%
react javascript input autosize autocomplete dropdown datepicker input-mask autosuggest typeahead

react-input-enhancements's Introduction

๐Ÿš

This project was originally thought to be an experiment and currently is unmaintained (and buggy)

Use it at your own risk

Also, consider using more modern, WAI-ARIA compliant approach like downshift

react-input-enhancements Gitter chat

Set of enhancements for input control

The intention of creating this library was to bring input component out of the dropdown/autocomplete/whatever code, so it could be easily replaced with your custom component, and also to split independent functionality into different components, which could be combined with each other (still not quite sure it was worth it, though).

There are currently five components:

  1. <Autosize />
  2. <Autocomplete />
  3. <Dropdown />
  4. <Mask />
  5. <DatePicker />

<Combobox /> is a combination of Dropdown, Autosize and/or Autocomplete components.

Demo

http://alexkuz.github.io/react-input-enhancements/

How it works

  • Each component is responsible for a corresponding behaviour (<Autosize> resizes <input> according to it's content length, <Dropdown> adds popup with options, and so on).
  • All components accept function as a child, providing props as a first argument, which you should pass to your input component. If there is nothing else except input, it could be passed as a child directly (for simplicity).
  • If you need to have combined behaviour in your component, let's say <Autosize> with <Autocomplete> just pass <Autocomplete> as a child to <Autosize> (see <Combobox> source code for reference)

Registering <input>

All components needs an access to <input> DOM element. To provide it, use getInputComponent prop:

let input;

getInput() {
  return input;
}

<Autocomplete
  options={options}
  getInputComponent={getInput}
>
  {props =>
    <input
      ref={c => input = c}
      {...props}
    />
  }
</Autocomplete>

Or, if you don't want to store the node in your component:

<Autocomplete
  options={options}
>
  {(props, otherProps, registerInput) =>
    <input
      ref={c => registerInput(c)}
      {...props}
    />
  }
</Autocomplete>

The first option also allows you to use shorter form with implicit parameters passing:

let input;

getInput() {
  return input;
}

<Autocomplete
  options={options}
  getInputComponent={getInput}
>
  <input
    ref={c => input = c}
  />
</Autocomplete>

However, this is not preferable as there is too much magic happening.

If <input> element wasn't provided, component tries to find node automatically, however this behaviour is deprecated and will be removed in future versions.

Autosize

Autosize resizes component to fit it's content.

<Autosize defaultValue={value}
          minWidth={100}>
  {(inputProps, { width, registerInput }) =>
    <input type='text' {...inputProps} ref={c => registerInput(c)} />
  }
</Autosize>

Autosize Props

  • value string - Input value (for a controlled component)
  • defaultValue string - Initial value (for a uncontrolled component)
  • getInputElement function() - Optional callback that provides <input> DOM element
  • registerInput function - Registers <input> DOM element
  • defaultWidth number - Minimum input width

Autocomplete

Autocomplete prompts a value based on provided options (see also react-autocomplete for the same behaviour)

<Autocomplete defaultValue={value}
              options={options}>
  {(inputProps, { matchingText, value, registerInput }) =>
    <input type='text' {...inputProps} ref={c => registerInput(c)} />
  }
</Autocomplete>

Autocomplete Props

  • value string - Input value (for a controlled component)
  • defaultValue string - Initial value (for a uncontrolled component)
  • getInputElement function - Optional callback that provides <input> DOM element
  • registerInput function - Registers <input> DOM element
  • options array - Array of options that are used to predict a value

options is an array of strings or objects with a text or value string properties.

Dropdown

Dropdown shows a dropdown with a (optionally filtered) list of suitable options.

<Dropdown defaultValue={value}
          options={options}>
  {(inputProps, { textValue }) =>
    <input type='text' {...inputProps} />
  }
</Dropdown>

Dropdown Props

  • value string - Input value (for a controlled component)
  • defaultValue string - Initial value (for a uncontrolled component)
  • options array - Array of shown options
  • onRenderOption function(className, style, option) - Renders option in list
  • onRenderCaret function(className, style, isActive, children) - Renders a caret
  • onRenderList function(className, style, isActive, listShown, children, header) - Renders list of options
  • onRenderListHeader function(allCount, shownCount, staticCount) - Renders list header
  • dropdownProps object - Custom props passed to dropdown root element
  • optionFilters array - List of option filters
  • getInputElement function - Optional callback that provides <input> DOM element
  • registerInput function - Registers <input> DOM element

options is an array of strings or objects with a shape:

  • value - "real" value of on option
  • text - text used as input value when option is selected
  • label - text or component rendered in list
  • static - option is never filtered out or sorted
  • disabled - option is not selectable

null option is rendered as a separator

optionFilters is an array of filters for options (for convenience). By default, these filters are used:

  • filters.filterByMatchingTextWithThreshold(20) - filters options by matching value, if options length is more than 20
  • filters.sortByMatchingText - sorting by matching value
  • filters.limitBy(100) - cuts options longer than 100
  • filters.notFoundMessage('No matches found') - shows option with 'No matches found' label if all options are filtered out
  • filters.filterRedudantSeparators - removes redudant separators (duplicated or at the begin/end of the list)

Mask

Mask formats input value.

<Mask defaultValue={value}
      pattern='0000-0000-0000-0000'>
  {(inputProps, { value }) =>
    <input type='text' {...inputProps} />
  }
</Mask>

Mask Props

  • value string - Input value (for a controlled component)
  • defaultValue string - Initial value (for a uncontrolled component)
  • getInputElement function - Optional callback that provides <input> DOM element
  • registerInput function - Registers <input> DOM element
  • pattern string - String formatting pattern. Only '0' (digit) or 'a' (letter) pattern chars are currently supported.
  • emptyChar string - Character used as an empty symbol (' ' by default)
  • placeholder string - If set, it is shown when unmaskedValue is empty
  • onUnmaskedValueChange function(text) - Fires when value is changed, providing unmasked value
  • onValuePreUpdate function - Optional callback to update value before it is parsed by Mask

DatePicker

DatePicker uses Mask to format date and shows calendar (react-date-picker by default) in popup.

<DatePicker defaultValue={moment(value).format('ddd DD/MM/YYYY')}
            placeholder={moment().format('ddd DD/MM/YYYY')}
            pattern='ddd DD/MM/YYYY'
            locale='en'>
  {(inputProps, { value }) =>
    <input type='text' {...inputProps} />
  }
</DatePicker>

DatePicker Props

  • value string - Input value (for a controlled component)
  • defaultValue string - Initial value (for a uncontrolled component)
  • pattern string - Date formatting pattern. For now, only these tokens are supported:
    • DD - day of month
    • MM - month
    • YYYY - year
    • ddd - day of week (not editable)
  • placeholder string - If set, it is shown when unmaskedValue is empty
  • locale string - Date locale
  • todayButtonText string - Text for 'Go to Today' button label
  • onRenderCalendar function({ styling, style, date, isActive, popupShown, onSelect, locale, todayButtonText }) - Returns calendar component shown in popup (react-day-picker-themeable by default)
  • onChange function(date) - Fires when date is selected, providing moment.js object
  • getInputElement function - Optional callback that provides <input> DOM element
  • registerInput function - Registers <input> DOM element
  • onValuePreUpdate function - Optional callback to update value before it is parsed by DatePicker. In this example, it parses inserted timestamp:
onValuePreUpdate={v => parseInt(v, 10) > 1e8 ?
  moment(parseInt(v, 10)).format('ddd DD/MM/YYYY') : v
}

Combobox

Combobox combines Dropdown, Autosize and/or Autocomplete components.

<Combobox defaultValue={value}
          options={options}
          autosize
          autocomplete>
  {(inputProps, { matchingText, width }) =>
    <input type='text' {...inputProps} />
  }
</Combobox>

Autosize and Autocomlete are enabled with corresponding bool props, other properties are proxied to Dropdown component.

See demo for code examples.

Some other (probably better) implementations

react-input-enhancements's People

Contributors

alexkuz avatar nadav-dav avatar philipstanislaus avatar readmecritic avatar rpunkfu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-input-enhancements's Issues

New examples page proposal

Hi!

showroom-demo

https://github.com/OpusCapitaBES/js-react-showroom-client

It allows to write documentation in markdown and run all docs in sandbox with code examples.
It often useful to have possibility to play with components at web page before use it in project.

Do you interested in adding interactivity to your examples page?)
I can make it and send you pull-request. Of course it can be styled as you wish. ๐Ÿ˜Š

timestamp input for DatePicker

hi!, great components and documentation. i need to be able to allow my users to also use timestamps (milisec since epoch) as valid date on the date picker - is there a way to override the mask, so it accept long integers? just to be clear it doesn't need to be rendered on the popup.

Chars come out of order

Hi,

my machine has been really slow recently, so when typing really fast on a input sometimes it goes out of order. I was using this pattern '000000000-00' and for example typing '12345678901' would end up in something like '123465798-10'

As I am already using a "forked" version because of #10, I went there and removed the setTimeout on the hack

It seems to work without side effects. Is it really necessary?

Question: control the size of DatePicker

I have a form where DatePicker is integrated,

  <form id="timeline" className="form" onChange={onChange} onSubmit={validateTimelineForm(form, onSubmit, onErrors)}>
    <div className="row">
      <DatePicker className="col-xs-6" onRenderCaret={noop}>
        {inputProps =>
          <div className={cx('form-group', { 'has-danger': form.errors.applicationStart })}>
            <label htmlFor="applicationStart">
              Start of Application:
            </label>
            <input
              { ...inputProps }
              type="text"
              className={cx(inputProps.className, 'form-control')}
            />
          </div>
        }
      </DatePicker>

      // ...

DatePicker popup appears after click, but it's ridiculously big,

screenshot 2016-07-25 17 10 57

Is there a way to control it's dimensions?

Trouble with trying to append Dropdown Component to document.body

Hi - great work Alex!

Have come across an issue where I need the input component in a container that has it's overflow set to hidden, so will need to escape that container and render the dropdown to the body in order for everything to display correctly.

Was looking into react-tether to provide the magic for this, however RT requires two child elements, the second of which is pulled out of it's current container and appended to the document's body. The way your dropdowns currently work, seems to have everything nested within the dropdown component.

Any way to decouple this, or are you aware of another way around this?

Thanks,

Jon

in proper css className

found the rendered element are of undesired css class name, eg '.inputPopup--jss-0-0' and '.caret--jss-0-1' (note the dot inside the name). Hence the input fields are not properly rendered.

env: webpack: 1.12.15, babel: 6.5.2, browser: chrome 49.0, os: osX 10.11.2

Can you please look into this? Thank you very much!

Unable to set value from props

I needed a button to set the state of a masked input and have some trouble. I see there is demo for <Autocomplete /> but not to <Mask />, is it not trivial?

What I ended up doing to make it work was to change that line to if (value) { and it got working. I am not sure of what bugs this change may cause, but I couldn`t get this block to run other way.

Maybe I missed something.

Can't pass onRenderCaret to InputPopup from Combobox

I've just upgraded to 5.x line from 4.x, and couldn't find a way to pass onRenderCaret prop from Combobox to InputPopup.

I've fixed it with

const { onRenderCaret, onRenderPopup, inputPopupProps, styling, ...restProps } = this.props;
const _onRenderCaret = inputPopupProps.onRenderCaret ? inputPopupProps.onRenderCaret : onRenderCaret;

//

{_onRenderCaret(styling, isActive, hover, caret)}

in render method of InputPopup, but not sure this matches the coding style of the project.

Am I missing something, or is it really missing?

Autocomplete not working on mobile

On chrome mobile the auto-complete appears to take the first suggestion upon a 2nd letter being typed. It also won't allow the field to be deleted afterwards, instead highlighting the last character of the auto-completed value.

So, on entering Ca I end up with Cambodia, and trying to delete anything will just highlight the last a.

DatePicker input pattern validation

I have <DatePicker /> without value and defaultValue, only listening to onChange and updates redux storage.

Once I selected the date and try to submit my form, I see error pops-up by Chrome,

screenshot 2016-07-26 10 46 27

The pattern I see,

screenshot 2016-07-26 10 46 48

It looks strange, because \d\d\d would not match Wed and also, not sure about 00/00/000 would it work at all?

Will providing pattern prop allow to workaround the problem?

Full width dropdown popup

Hi, is there an easy way to make dropdown popup full width?

To be exact I would like to add rule width: 100% to popup--jss-0-5 class but I know it's a bad idea to add css rules to a generated class name.

react modules are in the devDependencies

Modules like react-bootstrap, react-pure-renderer should be in dependencies and not devDependenices, since it used in production and is being bundled with the component when building the project with webpack.

what do you think? am i missing anything?

Question: Can the dropdown be opened programmatically?

Hi,

I'm still a bit new to React, so I apologise if I might have missed something obvious in the documentation and the demos.

I am making an autocompleter for addresses, where the service for getting addresses firstly returns street names, then the actual addresses once a street name has been chosen in the dropdown list, so I was wondering if the dropdown can be opened programmatically?

ReferenceError: window is not defined when using server-side rendering

!('getComputedStyle' in window) && (window.getComputedStyle = (function (window) {

The following check should be enough i think
typeof window != "undefined"

Smth like:
typeof window != "undefined" && !('getComputedStyle' in window) && (window.getComputedStyle = (function (window) {
instead of
!('getComputedStyle' in window) && (window.getComputedStyle = (function (window) {

AutoComplete on Combobox is buggy on IE/Edge

i am using the babel-polyfill let Combobox working on IE 11 and Edge, but when enable autocomplete, the input text will be reversed. For example, when input "Hello", the combobox display as "olleH".

my codes (please note that also enable auto-size:

let props = {
            options: suggestions,
            onChange: this.onKeywordChange.bind(this),
            onValueChange: this.onValueChange.bind(this),
            autocomplete: true, // buggy on IE11
            autosize: true
        };
return <Combobox {...props}>
            <FormControl type='search' placeholder={placeholder} value={this.state.suggestion.keyword} ref="keyword"/>
        </Combobox>;

Dropdown scrollable in IE

Hi,

It is currently not possible to use the mouse (point&drag the slider) in Internet Explorer. When the slider is clicked to start dragging the combobox is closed. It works like a charm in Firefox and Chrome.

Reproducable by opening the examples page in IE, go to ComboBox, unselect Albania to have a long list and interact with the combobox scrollbar. I guess it has something to do with the flex styling, but i'm not able to make it work for IE.

opening a combobox through code

is it possible to open the combobox programatically?
i'm guessing this requires focus on the input or something like this.
thanks

Uncaught Invariant Violation: Element type is invalid

I attempted to integrate the autocomplete feature, but have run into this error whenever I attempt to access the website.

"Uncaught Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. Check the render method of exports."

Thanks

Autocomplete onChange does not fire when backspace-deleting last character

I don't have code to replicate but it's easy on the demo page:

  1. In the autocomplete example, type "a"
  2. "Afghanistan" with be the full value; "A" will not be selected; "fghanistan" will be selected; the cursor is between "A" and "fghanistan" (selectionStart=1, selectionEnd=${"Afghanistan".length}).
  3. Press backspace
  4. Observe "onChange" is not fired.

"onChange" is fired for all other cases that I expect it to be fired. Just not this one.

I am trying to figure out why this happens. I think I've gotten a decent grasp on how Autocomplete.jsx works, but I have not figured out what is canceling or preventing this event.

Any help or insights would be appreciated. Thank you!

Tab key selection

It would be of great helpful if there is an option to enable allow tab key to select the current active item as well, similar to enter key. A lot of people are having the habits of tab out input and expect the value to be committed.

registerInput in Combobox

i need to assign property "ref" as my like, because i need to control the focus/blur behavior manually.

The problem is, i don't know how the "registerInput" work in Combobox, registerInput alway return undefined in following codes :

        let props = {
            options: options,
            onChange: this.onChange,
            onSelect: this.onSelect,
            autocomplete: true,
            autosize: true
            registerInput: ()=> {
                return <input type="search" ref="keyword" value={this.state.value} />;
            }
        };

        return <Combobox {...props} >
        {
            (inputProps, otherProps, registerInput) => {
                inputProps.type = "search";
                inputProps.ref = (c) => {
                    let ref = registerInput(ReactDOM.findDOMNode(c));
                    console.log(ref);   // <- alway undefined
                    return ref;
                };
                return <input {...inputProps}/>;
            }
        }
        </Combobox>;

can you let me know what is my mistake please?

DatePicker default start date

Question: Is that possible to set default start date, e.g. if no date is selected propose beginning of the week as default?

DatePicker setting date to null

I have a form where DatePicker is used, I can set some particular field with a date value and save the form. After, I want to delete the date to make it null. As I remove value completely, two things happen.

  1. moment.js writes a warning to console,

screenshot 2016-09-16 12 23 08

1. `onChange` handler of field is _not_ triggered. 2. If I reload the form, I can see the date is still there (so, a null field is not submitted to a server).

From code, I see that once a value is removed from the input field, getStateFromProps() will receive an empty string and construct default moment object.

I believe this behavior is wrong and prevents to set fields to null.

Undefined is not a constructor when unit testing with enzyme mount()

We are using the react-input-enhancements combobox on a form we're unit testing with enzyme. We have some child components within the component that we would like to test using a full rendering mount with enzyme, but when mounting it, we get this error from the combobox:

undefined is not a constructor (evaluating '[opt, opt.text, opt.label, opt.value].find(function (value) {
    return typeof value === 'string';
})')

I've logged opt. It and all it's child properties are logging successfully for the first combobox, but for some reason, it seems to fail after this. All subsequent objects in the array are also valid. I can't find what is actually undefined here. Note that this undefined is not a constructor error only happens when unit testingโ€”not when running the actual front-end.

Here is the combobox element:

<div className='input-group'>
    <label htmlFor='create-account-country'>Country<span className='required'>*</span></label>
    <Combobox
        className='select-container'
        defaultValue={form['create-account-country']}
        options={this.props.countryOptions}
        autocomplete
        onValueChange={this.valueChange('create-account-country', 'country')}
        data-fieldname='country'
        >
        <input
            type='text'
            placeholder='Please select your country'
            id='create-account-country'
            name='create-account-country'
            className={'form-control select' + (!this.isValid('country') ? ' error' : '')}
            required
            />
    </Combobox>
</div>

Here is the options property that is passed to the combobox:

countryOptions: [
    {
        value: 'USA',
        text: 'United States',
        label: 'United States'
    },
    {
        value: 'Canada',
        text: 'Canada',
        label: 'Canada'
    }
]

I're not sure if this issue should be addressed within react-input-enhancements or enyzme but would appreciate any advice you may have in resolving it.

DatePicker interface

I do not understand why date picker takes value and defaultValue as strings, but onChange method outputs moment object.

Also, we need to format value and defaultValue with a pattern and when submit this pattern to control itself.

<DatePicker value={moment(value).format('DD/MM/YYYY')} pattern={'DD/MM/YYYY'} />

Internally it's transformed to moment, which again forces me to ask - why not just taking a moment in a first place?

  • value - moment object
  • pattern - data format pattern used to render date in input control
  • onChange(date) - returns moment object

custom styles

Hey, how to proper inject custom styles?
I don't find anything in the docs, now creating custom styles on my own in a fork.
Thanks

Combobox isn't reset during Form reset.

Say I have a component rendering a Combobox inside a form like so:

<form>
  <Combobox defaultValue=""
                       options={this.state.options}
                       autosize>
        {inputProps =>
            <input {...inputProps}
                       type='text'
                       placeholder='No Selection'
                       />
        }
    </Combobox>
    <ButtonInput type="reset"
                          value="Reset Cards"
                          onClick={this.handleReset.bind(this)}
     />
</form>

If the form is reset I can't figure out how to reset the internal state of the Combobox, so as soon as it gets focus again the old value is displayed in the <input/>. I believe I basically want to call Autocomplete.setValue("") but don't see a ref chain I can use to do so.

Any ideas? I'd be happy to send a PR if you can give me some guidance. One idea I had was to add refs to the contained Dropdown and Autocomplete in the various Combobox.render*() routines, but I'm not sure if that's the best approach.

Also, BTW, very happy with the module so far, great work!

Support for CTRL + Backspace

When I use the autocomplete input in the demo and start typing multiple letters with a match like Poland and then press CTRL + Backspace, instead of erasing the entire text, the input deletes the last character, ending up with Pakistan.
Tested with Chrome on Windows.

Expose Mask.

Hey,

Any reason why Mask is not exposed in index.js?

Thanks.

DateTime?

Hi @alexkuz! Thanks for the library, it looks great. I would love to use it but I also need to have a DateTime Picker instead of just a DatePicker.

How would you suggest that I could do it while using this library?

Missing - changelog

Its verry hard to watch which changes will break project.

It would be very cool to have changelog. And on each version just write down what has changed and if there is any breaking change.

For example Bootstrap changelog

Or at versions as comment

update to new moment.js

New versions break DatePicker - seems like moment doesn't really support extra arguments (locale and pattern) anymore

Should the non-function children be deprecated?

All components accept function as a child, providing props as a first argument, which you should pass to your input component. If there is nothing else except input, it could be passed as a child directly (for simplicity).

I think the latter option should be deprecated. For example:

      <Autosize
        value={value}
        onChange={e => onChange(e.target.value)}
      >
        <FormControl
          type='text'
          value={value}
        />
      </Autosize>

It's not obvious that Autosize passes onChange prop to FormControl (moreover, if you pass onChange to FormControl here, it just won't work, as it will be overridden by AutoSize). In contrast, there is no such magic when you use a function, it's up to you how you use its arguments.

What do you think?

@alexbeletsky

Dropdown - won't show the list

In case we have lots if items in the drop down list, once we make a selection, the items won't show anymore, only the current value is shown.

Can't tell exactly how many, but I'd say once they don't fit in the browser Height and the selection is made no items are shown.

If no selection is made, all items are shown.

Wondering, how would I add a scrollbar in the dropdown element, so user can scroll?

Decouple styling and logic

It would be absolutely awesome if this library was exposed as logic + markup and the styles came as a separate package. If one isn't doing jss in their project, the bundle size suffers and one ends up resorting to selector wars.

Mask doesn't handle pasting values that make the value too long for the mask

behaviour

In the credit card example:

  • Type 123456789012
  • Write 12345 somewhere else, copy it
  • Paste after the 2 already in the field
  • Value isn't updated

expected

  • Value should be updated

Not sure what the behaviour should be exactly, I'd intuitively say that appending pastedValue.slice(0, maxLength - currentValueLength) to the value should work

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.