{
yield md`This cell registers a ResizeObserver instance to track changes of the container above and when a modification happens it changes the size of the internal view accordingly.`;
const div = viewof resizableContainer;
const view = div.querySelector(".view");
const viewContainer = div.querySelector(".view-container");
const resizeObserver = new ResizeObserver((entries) => {
const entry = [...entries].find((e) => e.target === div);
if (!entry) return;
let size;
if (entry.contentBoxSize) {
if (entry.contentBoxSize[0]) {
size = entry.contentBoxSize[0].inlineSize;
} else {
size = entry.contentBoxSize.inlineSize;
}
} else {
size = entry.contentRect.width;
}
const scale = size / W;
Object.assign(viewContainer.style, {
width: `${viewW * scale}px`,
height: `${viewH * scale}px`
});
Object.assign(view.style, {
transformOrigin: "top left",
transform: `scale(${scale})`
});
});
resizeObserver.observe(div);
invalidation.then(() => resizeObserver.unobserve(div));
}