function table(data, keys = Object.keys(data[0])) {
return Object.assign(html`<table>
<thead><tr>${keys.map(key => {
return Object.assign(html`<th>`, {
textContent: key
});
})}</tr>
<tbody>${data.map(d => {
return html`<tr>${keys.map(key => {
return Object.assign(html`<td contenteditable>`, {
textContent: d[key] = d[key] + "",
oninput: event => d[key] = event.target.textContent
});
})}`;
})}
</table>`, {
value: data
});
}