     set_error: (err) =>
         @setState
             error : err
+
+    set_cell_input: (id, value) =>
+        # TODO: insanely stupid/slow -- just for proof of concept
+        @syncdb.set
+            type  : 'cell'
+            id    : id
+            input : value
 
     _syncdb_change: =>
         # TODO: this is not efficient!

            <div style={color:'#303F9F', minWidth: '14ex', fontFamily: 'monospace', textAlign:'right', padding:'.4em'}>
                In [{cell.get('number') ? '*'}]:
            </div>
            <pre style={width:'100%', backgroundColor: '#f7f7f7'}>
                {cell.get('input') ? ''}
            </pre>
        </div>

    render_output_number: (n) ->

###
The React components
###

InputEditor = rclass
    propTypes :
        value    : rtypes.string
        style    : rtypes.object
        onChange : rtypes.func.isRequired

    handle_change: (e) ->
        @props.onChange(e.target.value)

    render : ->
        <FormControl
            componentClass = 'textarea'
            value          = {@props.value}
            style          = {@props.style}
            onChange       = {@handle_change}
        />

JupyterEditor = rclass ({name}) ->
    propTypes :
