src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts/MarkupCell/constructor
class MarkupCell:		constructor(id: string, mime: string, content: string, top: number) {
			this.id = id;
			this._content = { value: content, version: 0 };

			let resolveReady: () => void;
			this.ready = new Promise<void>(r => resolveReady = r);

			let cachedData: { readonly version: number; readonly value: Uint8Array } | undefined;
			this.outputItem = Object.freeze(<rendererApi.OutputItem>{
				id,
				mime,
				metadata: undefined,

				text: (): string => {
					return this._content.value;
				},

				json: () => {
					return undefined;
				},

				data: (): Uint8Array => {
					if (cachedData?.version === this._content.version) {
						return cachedData.value;
					}

					const data = textEncoder.encode(this._content.value);
					cachedData = { version: this._content.version, value: data };
					return data;
				},

				blob(): Blob {
					return new Blob([this.data()], { type: this.mime });
				}
			});

			const root = document.getElementById('container')!;
			const markupCell = document.createElement('div');
			markupCell.className = 'markup';
			markupCell.style.position = 'absolute';
			markupCell.style.width = '100%';

			this.element = document.createElement('div');
			this.element.id = this.id;
			this.element.classList.add('preview');
			this.element.style.position = 'absolute';
			this.element.style.top = top + 'px';
			this.toggleDragDropEnabled(currentOptions.dragAndDropEnabled);
			markupCell.appendChild(this.element);
			root.appendChild(markupCell);

			this.addEventListeners();

			this.updateContentAndRender(this._content.value).then(() => {
				resizeObserver.observe(this.element, this.id, false, this.id);
				resolveReady();
			});
		}