{
  "version": 3,
  "sources": ["../../../../src/lib/utils/export/copyAs.ts"],
  "sourcesContent": ["import { Editor, TLShapeId, TLSvgOptions } from '@bigbluebutton/editor'\nimport { getSvgAsImage } from './export'\n\n/** @public */\nexport type TLCopyType = 'svg' | 'png' | 'jpeg' | 'json'\n\n/**\n * Copy the given shapes to the clipboard.\n *\n * @param editor - The editor instance.\n * @param ids - The ids of the shapes to copy.\n * @param format - The format to copy as.\n * @param opts - Options for the copy.\n *\n * @public\n */\nexport function copyAs(\n\teditor: Editor,\n\tids: TLShapeId[],\n\tformat: TLCopyType = 'svg',\n\topts = {} as Partial<TLSvgOptions>\n) {\n\t// Note:  it's important that this function itself isn't async - we need to create the relevant\n\t// `ClipboardItem`s synchronously to make sure safari knows that the user _wants_ to copy\n\t// See https://bugs.webkit.org/show_bug.cgi?id=222262\n\n\treturn editor\n\t\t.getSvg(ids?.length ? ids : [...editor.getCurrentPageShapeIds()], {\n\t\t\tscale: 1,\n\t\t\tbackground: editor.getInstanceState().exportBackground,\n\t\t\t...opts,\n\t\t})\n\t\t.then((svg) => {\n\t\t\tif (!svg) {\n\t\t\t\tthrow new Error('Could not construct SVG.')\n\t\t\t}\n\n\t\t\tswitch (format) {\n\t\t\t\tcase 'svg': {\n\t\t\t\t\tif (window.navigator.clipboard) {\n\t\t\t\t\t\tif (window.navigator.clipboard.write) {\n\t\t\t\t\t\t\twindow.navigator.clipboard.write([\n\t\t\t\t\t\t\t\tnew ClipboardItem({\n\t\t\t\t\t\t\t\t\t'text/plain': new Blob([getSvgAsString(svg)], { type: 'text/plain' }),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfallbackWriteTextAsync(async () => getSvgAsString(svg))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase 'jpeg':\n\t\t\t\tcase 'png': {\n\t\t\t\t\t// Note: This needs to use the promise based approach for safari/ios to not bail on a permissions error.\n\t\t\t\t\tconst blobPromise = getSvgAsImage(svg, editor.environment.isSafari, {\n\t\t\t\t\t\ttype: format,\n\t\t\t\t\t\tquality: 1,\n\t\t\t\t\t\tscale: 2,\n\t\t\t\t\t}).then((blob) => {\n\t\t\t\t\t\tif (blob) {\n\t\t\t\t\t\t\tif (window.navigator.clipboard) {\n\t\t\t\t\t\t\t\treturn blob\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow new Error('Copy not supported')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow new Error('Copy not possible')\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tconst mimeType = format === 'jpeg' ? 'image/jpeg' : 'image/png'\n\t\t\t\t\tif (window.navigator.clipboard.write) {\n\t\t\t\t\t\twindow.navigator.clipboard\n\t\t\t\t\t\t\t.write([\n\t\t\t\t\t\t\t\tnew ClipboardItem({\n\t\t\t\t\t\t\t\t\t[mimeType]: blobPromise,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t.catch((err: any) => {\n\t\t\t\t\t\t\t\t// Firefox will fail with the above if `dom.events.asyncClipboard.clipboardItem` is enabled.\n\t\t\t\t\t\t\t\t// See <https://github.com/tldraw/tldraw/issues/1325>\n\t\t\t\t\t\t\t\tif (!err.toString().match(/^TypeError: DOMString not supported/)) {\n\t\t\t\t\t\t\t\t\tconsole.error(err)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tblobPromise.then((blob) => {\n\t\t\t\t\t\t\t\t\twindow.navigator.clipboard.write([\n\t\t\t\t\t\t\t\t\t\tnew ClipboardItem({\n\t\t\t\t\t\t\t\t\t\t\t// Note: This needs to use the promise based approach for safari/ios to not bail on a permissions error.\n\t\t\t\t\t\t\t\t\t\t\t[mimeType]: blob,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase 'json': {\n\t\t\t\t\tconst data = editor.getContentFromCurrentPage(ids)\n\t\t\t\t\tconst jsonStr = JSON.stringify(data)\n\n\t\t\t\t\tif (window.navigator.clipboard.write) {\n\t\t\t\t\t\twindow.navigator.clipboard.write([\n\t\t\t\t\t\t\tnew ClipboardItem({\n\t\t\t\t\t\t\t\t'text/plain': new Blob([jsonStr], { type: 'text/plain' }),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t])\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfallbackWriteTextAsync(async () => jsonStr)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Copy type ${format} not supported.`)\n\t\t\t}\n\t\t})\n}\n\nasync function fallbackWriteTextAsync(getText: () => Promise<string>) {\n\tnavigator.clipboard?.writeText?.(await getText())\n}\n\nfunction getSvgAsString(svg: SVGElement) {\n\tconst clone = svg.cloneNode(true) as SVGGraphicsElement\n\n\tsvg.setAttribute('width', +svg.getAttribute('width')! + '')\n\tsvg.setAttribute('height', +svg.getAttribute('height')! + '')\n\n\tconst out = new XMLSerializer()\n\t\t.serializeToString(clone)\n\t\t.replaceAll('&#10;      ', '')\n\t\t.replaceAll(/((\\s|\")[0-9]*\\.[0-9]{2})([0-9]*)(\\b|\"|\\))/g, '$1')\n\n\treturn out\n}\n"],
  "mappings": "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",
  "names": []
}
