JSFiddle - React, Tailwind, and code Playground

by rich_harris

HTML

<main></main>

<script id='template' type='text/ractive'>
    {{#each items}}
    <label><input type="number" value="{{val}}"/> <strong>{{val}}</strong> ({{min}}-{{max}})</label>
    {{/each}}
</script>

CSS

body {
    font-family: 'Helvetica Neue', arial, sans-serif;
    font-weight: 200;
    color: #353535;
}

h1, h2, h3, h4, h5, h6 {
    font-weight: 200;
}

.error {
    color: #d00;
    font-family: monospace;
}

label {
    display: block;
}

JavaScript

var ractive = new Ractive({
    el: 'main',
    template: '#template',
    data: {
        items: [
            { min: 100, max: 200, val: 500 },
            { min: 0, max: 50, val: -200 }
        ]
    }
});

ractive.observe( 'items.*.val', function ( n, o, k, i ) {
    var min = this.get( 'items[' + i + '].min' ),
        max = this.get( 'items[' + i + '].max' );
    
    if ( n < min ) this.set( k, min );
    if ( n > max ) this.set( k, max );
});