{
const renderer = newNotebookRenderer();
const { id } = DOM.uid();
const element = htl.html`<div >
<div id="${id}">
<div class="title" data-cell="hello">Loading the "hello" cell...</div>
<div class="body">
This is the <span class="name" data-cell="name"></span>!
</div>
</div>
<style>
#${id} {
border: 3px solid silver;
border-radius: 0.5em;
margin: auto;
max-width: 20em;
}
#${id} .title {
border-bottom: 1px solid silver;
padding: 0.5em;
}
#${id} .body {
padding: 1.5em 0.5em;
}
#${id} .name {
color: navy;
}
</style>
</div>`;
const notebook = (runtime, observer) => {
const main = runtime.module();
async function* generateName(Promises, invalidation) {
let stop = false;
invalidation.then(() => (stop = true));
const stamp = Date.now();
for (let i = 0; !stop && i < 100; i++) {
yield "World-" + i;
await Promises.delay(100);
}
}
main
.variable(observer("name"))
.define("name", ["Promises", "invalidation"], generateName);
function renderName(md, name) {
return md`# Hello ${name}`;
}
main
.variable(observer("hello"))
.define("hello", ["md", "name"], renderName);
return main;
};
return renderer({
notebook,
element,
invalidation
});
}