{
  "version": 3,
  "sources": ["../../../src/lib/exports/embedMedia.ts"],
  "sourcesContent": ["import { MediaHelpers } from '@tldraw/utils'\nimport { getOwnerWindow, getRenderedChildren } from './domUtils'\nimport { resourceToDataUrl } from './fetchCache'\n\nfunction copyAttrs(source: Element, target: Element) {\n\tconst attrs = Array.from(source.attributes)\n\tattrs.forEach((attr) => {\n\t\ttarget.setAttribute(attr.name, attr.value)\n\t})\n}\n\nfunction replace(original: HTMLElement, replacement: HTMLElement) {\n\toriginal.replaceWith(replacement)\n\treturn replacement\n}\n\nasync function createImage(\n\tdoc: Document,\n\tdataUrl: string | null,\n\tcloneAttributesFrom?: HTMLElement\n) {\n\tconst image = doc.createElement('img')\n\n\tif (cloneAttributesFrom) {\n\t\tcopyAttrs(cloneAttributesFrom, image)\n\t}\n\n\timage.setAttribute('src', dataUrl ?? 'data:')\n\timage.setAttribute('decoding', 'sync')\n\timage.setAttribute('loading', 'eager')\n\n\ttry {\n\t\tawait image.decode()\n\t} catch {\n\t\t// this is fine\n\t}\n\treturn image\n}\n\nasync function getCanvasReplacement(canvas: HTMLCanvasElement) {\n\tconst doc = canvas.ownerDocument\n\ttry {\n\t\tconst dataURL = canvas.toDataURL()\n\t\treturn await createImage(doc, dataURL, canvas)\n\t} catch {\n\t\treturn await createImage(doc, null, canvas)\n\t}\n}\n\nasync function getVideoReplacement(video: HTMLVideoElement) {\n\tconst doc = video.ownerDocument\n\ttry {\n\t\tconst dataUrl = await MediaHelpers.getVideoFrameAsDataUrl(video)\n\t\treturn createImage(doc, dataUrl, video)\n\t} catch (err) {\n\t\tconsole.error('Could not get video frame', err)\n\t}\n\n\tif (video.poster) {\n\t\tconst dataUrl = await resourceToDataUrl(video.poster)\n\t\treturn createImage(doc, dataUrl, video)\n\t}\n\n\treturn createImage(doc, null, video)\n}\n\nexport async function embedMedia(node: HTMLElement) {\n\tconst win = getOwnerWindow(node)\n\tif (node instanceof win.HTMLCanvasElement) {\n\t\treturn replace(node, await getCanvasReplacement(node))\n\t} else if (node instanceof win.HTMLVideoElement) {\n\t\treturn replace(node, await getVideoReplacement(node))\n\t} else if (node instanceof win.HTMLImageElement) {\n\t\tconst src = node.currentSrc || node.src\n\t\tconst dataUrl = await resourceToDataUrl(src)\n\t\tnode.setAttribute('src', dataUrl ?? 'data:')\n\t\tnode.setAttribute('decoding', 'sync')\n\t\tnode.setAttribute('loading', 'eager')\n\t\ttry {\n\t\t\tawait (node as HTMLImageElement).decode()\n\t\t} catch {\n\t\t\t// this is fine\n\t\t}\n\t\treturn node\n\t} else if (node instanceof win.HTMLInputElement) {\n\t\tnode.setAttribute('value', (node as HTMLInputElement).value)\n\t} else if (node instanceof win.HTMLTextAreaElement) {\n\t\tnode.textContent = (node as HTMLTextAreaElement).value\n\t}\n\n\tawait Promise.all(\n\t\tArray.from(getRenderedChildren(node), (child) => embedMedia(child as HTMLElement))\n\t)\n}\n"],
  "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB,2BAA2B;AACpD,SAAS,yBAAyB;AAElC,SAAS,UAAU,QAAiB,QAAiB;AACpD,QAAM,QAAQ,MAAM,KAAK,OAAO,UAAU;AAC1C,QAAM,QAAQ,CAAC,SAAS;AACvB,WAAO,aAAa,KAAK,MAAM,KAAK,KAAK;AAAA,EAC1C,CAAC;AACF;AAEA,SAAS,QAAQ,UAAuB,aAA0B;AACjE,WAAS,YAAY,WAAW;AAChC,SAAO;AACR;AAEA,eAAe,YACd,KACA,SACA,qBACC;AACD,QAAM,QAAQ,IAAI,cAAc,KAAK;AAErC,MAAI,qBAAqB;AACxB,cAAU,qBAAqB,KAAK;AAAA,EACrC;AAEA,QAAM,aAAa,OAAO,WAAW,OAAO;AAC5C,QAAM,aAAa,YAAY,MAAM;AACrC,QAAM,aAAa,WAAW,OAAO;AAErC,MAAI;AACH,UAAM,MAAM,OAAO;AAAA,EACpB,QAAQ;AAAA,EAER;AACA,SAAO;AACR;AAEA,eAAe,qBAAqB,QAA2B;AAC9D,QAAM,MAAM,OAAO;AACnB,MAAI;AACH,UAAM,UAAU,OAAO,UAAU;AACjC,WAAO,MAAM,YAAY,KAAK,SAAS,MAAM;AAAA,EAC9C,QAAQ;AACP,WAAO,MAAM,YAAY,KAAK,MAAM,MAAM;AAAA,EAC3C;AACD;AAEA,eAAe,oBAAoB,OAAyB;AAC3D,QAAM,MAAM,MAAM;AAClB,MAAI;AACH,UAAM,UAAU,MAAM,aAAa,uBAAuB,KAAK;AAC/D,WAAO,YAAY,KAAK,SAAS,KAAK;AAAA,EACvC,SAAS,KAAK;AACb,YAAQ,MAAM,6BAA6B,GAAG;AAAA,EAC/C;AAEA,MAAI,MAAM,QAAQ;AACjB,UAAM,UAAU,MAAM,kBAAkB,MAAM,MAAM;AACpD,WAAO,YAAY,KAAK,SAAS,KAAK;AAAA,EACvC;AAEA,SAAO,YAAY,KAAK,MAAM,KAAK;AACpC;AAEA,eAAsB,WAAW,MAAmB;AACnD,QAAM,MAAM,eAAe,IAAI;AAC/B,MAAI,gBAAgB,IAAI,mBAAmB;AAC1C,WAAO,QAAQ,MAAM,MAAM,qBAAqB,IAAI,CAAC;AAAA,EACtD,WAAW,gBAAgB,IAAI,kBAAkB;AAChD,WAAO,QAAQ,MAAM,MAAM,oBAAoB,IAAI,CAAC;AAAA,EACrD,WAAW,gBAAgB,IAAI,kBAAkB;AAChD,UAAM,MAAM,KAAK,cAAc,KAAK;AACpC,UAAM,UAAU,MAAM,kBAAkB,GAAG;AAC3C,SAAK,aAAa,OAAO,WAAW,OAAO;AAC3C,SAAK,aAAa,YAAY,MAAM;AACpC,SAAK,aAAa,WAAW,OAAO;AACpC,QAAI;AACH,YAAO,KAA0B,OAAO;AAAA,IACzC,QAAQ;AAAA,IAER;AACA,WAAO;AAAA,EACR,WAAW,gBAAgB,IAAI,kBAAkB;AAChD,SAAK,aAAa,SAAU,KAA0B,KAAK;AAAA,EAC5D,WAAW,gBAAgB,IAAI,qBAAqB;AACnD,SAAK,cAAe,KAA6B;AAAA,EAClD;AAEA,QAAM,QAAQ;AAAA,IACb,MAAM,KAAK,oBAAoB,IAAI,GAAG,CAAC,UAAU,WAAW,KAAoB,CAAC;AAAA,EAClF;AACD;",
  "names": []
}
