function list({value: initialValue = [], invalidation: invalidated = invalidation} = {}) {
const {html, createRoot, createEffect, createSignal, Index, For} = S;
return createRoot(dispose => {
invalidated.then(dispose);
const Item = (props) => html`<li style="margin-bottom:.5em">
<input type="text" value="${props.value}" />
<button title="Remove" onClick=${() => setItems(items().filter(d => d !== props))} style="margin-left:.5em">x</button>
`;
const [items, setItems] = createSignal(initialValue.map(d => ({value: d})));
let value;
createEffect(() => {
value = items().slice();
});
const addItem = () => {
console.log('add item', items());
setItems(items => [...items, {value: `item`}]);
}
const root = html`<ul>
<${For} each=${items}>
${(props, i) => html`<${console.log('item', i()), Item} value=${props.value}>`}
</>
<hr style="margin: 0">
<button onClick=${() => {
addItem();
root.dispatchEvent(new Event('input', {bubbles: true}));
}}>Add item</button>
</ul>`;
return Object.defineProperty(root, 'value', {get: () => items()});
});
}