{ "version": 3, "sources": ["../../../../src/lib/ui/hooks/usePrint.ts"], "sourcesContent": ["import { uniqueId, useEditor } from '@tldraw/editor'\nimport { useCallback, useRef } from 'react'\n\n/** @internal */\nexport function usePrint() {\n\tconst editor = useEditor()\n\tconst prevPrintEl = useRef(null)\n\tconst prevStyleEl = useRef(null)\n\n\treturn useCallback(\n\t\tasync function printSelectionOrPages() {\n\t\t\tconst el = document.createElement('div')\n\t\t\tconst style = document.createElement('style')\n\n\t\t\tconst clearElements = (printEl: HTMLDivElement | null, styleEl: HTMLStyleElement | null) => {\n\t\t\t\tif (printEl) printEl.innerHTML = ''\n\t\t\t\tif (styleEl && document.head.contains(styleEl)) document.head.removeChild(styleEl)\n\t\t\t\tif (printEl && document.body.contains(printEl)) {\n\t\t\t\t\tdocument.body.removeChild(printEl)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Always make sure we have a clean root element.\n\t\t\tclearElements(prevPrintEl.current, prevStyleEl.current)\n\t\t\tprevPrintEl.current = el\n\t\t\tprevStyleEl.current = style\n\n\t\t\t// Random because this isn't for end users\n\t\t\tconst className = `tl-print-surface-${uniqueId()}`\n\n\t\t\tel.className = className\n\t\t\t// NOTE: Works in most envs except safari, needs further review\n\t\t\tconst enableMargins = false\n\t\t\t// NOTE: Currently buggy needs further investigation\n\t\t\tconst allowAllPages = false\n\t\t\tstyle.innerHTML = `\n\t\t\t.${className} {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t.${className} svg {\n\t\t\t\tmax-width: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t@media print {\t\t\t\t \n\t\t\t\thtml, body {\n\t\t\t\t\tmin-height: 100%;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t}\n\n\t\t\t\tbody {\n\t\t\t\t\tposition: relative;\n\t\t\t\t}\n\n\t\t\t\tbody > * {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t.${className} {\n\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\tbackground: white;\n\t\t\t\t\tmin-height: 100%;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tmax-width: 100%;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item {\n\t\t\t\t\tpadding: 10mm;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tmin-height: 100%;\n\t\t\t\t\tflex-direction: column;\n\t\t\t\t\tpage-break-after: always;\n\t\t\t\t\tposition: relative;\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t\theight: 100%;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item__main {\n\t\t\t\t\tflex: 1;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmax-height: 100%;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item__header {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item__footer {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t\ttext-align: right;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item__footer__hide {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t${\n\t\t\t\t\t!enableMargins\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: `\n\t\t\t\t\t/**\n\t\t\t\t\t * Note: Safari doesn't support removing the page margins to remove them all!\n\t\t\t\t\t */\n\t\t\t\t\t@page {\n\t\t\t\t\t\tmargin:0;\n\t\t\t\t\t}\n\n\t\t\t\t\t.${className} .${className}__item__header {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t}\n\n\t\t\t\t\t.${className} .${className}__item__footer {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t}\n\t\t\t\t`\n\t\t\t\t}\n\t\t\t}\n\n\t\t`\n\n\t\t\tconst beforePrintHandler = () => {\n\t\t\t\tdocument.head.appendChild(style)\n\t\t\t\tdocument.body.appendChild(el)\n\t\t\t}\n\n\t\t\tconst afterPrintHandler = () => {\n\t\t\t\teditor.once('change-history', () => {\n\t\t\t\t\tclearElements(el, style)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\twindow.addEventListener('beforeprint', beforePrintHandler)\n\t\t\twindow.addEventListener('afterprint', afterPrintHandler)\n\n\t\t\tfunction addPageToPrint(title: string, footer: string | null, svg: SVGElement) {\n\t\t\t\ttry {\n\t\t\t\t\tel.innerHTML += `
\n
\n ${title.replace(//g, '>')}\n
\n
\n ${svg.outerHTML}\n
\n \n
`\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction triggerPrint() {\n\t\t\t\tif (editor.environment.isChromeForIos) {\n\t\t\t\t\tbeforePrintHandler()\n\t\t\t\t\twindow.print()\n\t\t\t\t} else if (editor.environment.isSafari) {\n\t\t\t\t\tbeforePrintHandler()\n\t\t\t\t\tdocument.execCommand('print', false)\n\t\t\t\t} else {\n\t\t\t\t\twindow.print()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { pages, currentPageId, selectedShapeIds } = editor\n\n\t\t\tconst preserveAspectRatio = 'xMidYMid meet'\n\n\t\t\tconst svgOpts = {\n\t\t\t\tscale: 1,\n\t\t\t\tbackground: false,\n\t\t\t\tdarkMode: false,\n\t\t\t\tpreserveAspectRatio,\n\t\t\t}\n\n\t\t\tif (editor.selectedShapeIds.length > 0) {\n\t\t\t\t// Print the selected ids from the current page\n\t\t\t\tconst svg = await editor.getSvg(selectedShapeIds, svgOpts)\n\n\t\t\t\tif (svg) {\n\t\t\t\t\tconst page = pages.find((p) => p.id === currentPageId)\n\t\t\t\t\taddPageToPrint(`tldraw \u2014 ${page?.name}`, null, svg)\n\t\t\t\t\ttriggerPrint()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (allowAllPages) {\n\t\t\t\t\t// Print all pages\n\t\t\t\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\t\t\t\tconst page = pages[i]\n\t\t\t\t\t\tconst svg = await editor.getSvg(editor.getSortedChildIdsForParent(page.id), svgOpts)\n\t\t\t\t\t\tif (svg) {\n\t\t\t\t\t\t\taddPageToPrint(`tldraw \u2014 ${page.name}`, `${i}/${pages.length}`, svg)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttriggerPrint()\n\t\t\t\t} else {\n\t\t\t\t\tconst page = editor.currentPage\n\t\t\t\t\tconst svg = await editor.getSvg(editor.getSortedChildIdsForParent(page.id), svgOpts)\n\t\t\t\t\tif (svg) {\n\t\t\t\t\t\taddPageToPrint(`tldraw \u2014 ${page.name}`, null, svg)\n\t\t\t\t\t\ttriggerPrint()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twindow.removeEventListener('beforeprint', beforePrintHandler)\n\t\t\twindow.removeEventListener('afterprint', afterPrintHandler)\n\t\t},\n\t\t[editor]\n\t)\n}\n"], "mappings": "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", "names": [] }