{
  "version": 3,
  "sources": ["../../../src/lib/license/Watermark.tsx"],
  "sourcesContent": ["import { useValue } from '@tldraw/state-react'\nimport { fetch } from '@tldraw/utils'\nimport React, { useEffect, useState } from 'react'\nimport { useCanvasEvents } from '../hooks/useCanvasEvents'\nimport { useEditor } from '../hooks/useEditor'\nimport { getDefaultCdnBaseUrl } from '../utils/assets'\nimport { featureFlags } from '../utils/debug-flags'\nimport { stopEventPropagation } from '../utils/dom'\nimport { watermarkDesktopSvg } from '../watermarks'\nimport { LicenseManager } from './LicenseManager'\nimport { useLicenseContext } from './LicenseProvider'\n\n/** @internal */\nexport const WATERMARK_REMOTE_SRC = `${getDefaultCdnBaseUrl()}/watermarks/watermark-desktop.svg`\nexport const WATERMARK_LOCAL_SRC = `data:image/svg+xml;utf8,${encodeURIComponent(watermarkDesktopSvg)}`\n\nlet watermarkUrlPromise: Promise<string> | null = null\nasync function getWatermarkUrl(forceLocal: boolean): Promise<string> {\n\tif (forceLocal) {\n\t\treturn WATERMARK_LOCAL_SRC\n\t}\n\n\tif (!watermarkUrlPromise) {\n\t\twatermarkUrlPromise = Promise.race([\n\t\t\t// try and load the remote watermark, if it fails, fallback to the local one\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await fetch(WATERMARK_REMOTE_SRC)\n\t\t\t\t\tif (!response.ok) return WATERMARK_LOCAL_SRC\n\t\t\t\t\tconst blob = await response.blob()\n\t\t\t\t\treturn URL.createObjectURL(blob)\n\t\t\t\t} catch {\n\t\t\t\t\treturn WATERMARK_LOCAL_SRC\n\t\t\t\t}\n\t\t\t})(),\n\n\t\t\t// but if that's taking a long time (>3s) just show the local one anyway\n\t\t\tnew Promise<string>((resolve) => {\n\t\t\t\t// eslint-disable-next-line no-restricted-globals\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tresolve(WATERMARK_LOCAL_SRC)\n\t\t\t\t}, 3_000)\n\t\t\t}),\n\t\t])\n\t}\n\n\treturn watermarkUrlPromise\n}\n\n/** @internal */\nexport const Watermark = React.memo(function Watermark({\n\tforceLocal = false,\n}: {\n\tforceLocal?: boolean\n}) {\n\tconst events = useCanvasEvents()\n\n\tconst editor = useEditor()\n\tconst licenseManager = useLicenseContext()\n\n\tconst showWatermark = useValue(\n\t\t'show watermark',\n\t\t() =>\n\t\t\tfeatureFlags.enableLicensing.get() &&\n\t\t\teditor.getViewportScreenBounds().width > 760 &&\n\t\t\tlicenseManager.state.get() === 'unlicensed',\n\t\t[editor, licenseManager]\n\t)\n\n\tconst isDebugMode = useValue('debug mode', () => editor.getInstanceState().isDebugMode, [editor])\n\tconst isMenuOpen = useValue('is menu open', () => editor.getIsMenuOpen(), [editor])\n\n\tconst [src, setSrc] = useState<string | null>(null)\n\tconst shouldUseLocal = forceLocal || licenseManager.isDevelopment\n\tuseEffect(() => {\n\t\tif (!showWatermark) return\n\n\t\tlet isCancelled = false\n\n\t\t;(async () => {\n\t\t\tconst src = await getWatermarkUrl(shouldUseLocal)\n\t\t\tif (isCancelled) return\n\t\t\tsetSrc(src)\n\t\t})()\n\n\t\treturn () => {\n\t\t\tisCancelled = true\n\t\t}\n\t}, [shouldUseLocal, showWatermark])\n\n\tif (!showWatermark || !src) return null\n\n\tconst className = LicenseManager.className\n\tconst maskCss = `url('${src}') center 100% / 100% no-repeat`\n\n\treturn (\n\t\t<>\n\t\t\t<style>\n\t\t\t\t{`\n/* ------------------- SEE LICENSE -------------------\nThe tldraw watermark is part of tldraw's license. It is shown for unlicensed\nusers. By using this library, you agree to keep the watermark's behavior, \nkeeping it visible, unobscured, and available to user-interaction.\n\nTo remove the watermark, please purchase a license at tldraw.dev.\n*/\n\n.${className} {\n\tposition: absolute;\n\tbottom: var(--space-2);\n\tright: var(--space-2);\n\twidth: 96px;\n\theight: 32px;\n\tz-index: 2147483647 !important;\n\tpointer-events: ${isMenuOpen ? 'none' : 'all'};\n\tbackground-color: color-mix(in srgb, var(--color-background) 62%, transparent);\n\tborder-radius: 5px;\n\tpadding: 2px;\n\tbox-sizing: content-box;\n}\n\n.${className}[data-debug='true'] {\n\tbottom: 46px;\n}\n\n.${className} > a {\n\tposition: absolute;\n\twidth: 96px;\n\theight: 32px;\n\tpointer-events: none;\n\tcursor: inherit;\n\tcolor: var(--color-text);\n\tbackground-color: currentColor;\n\topacity: .28;\n}\n\n@media (hover: hover) {\n\t.${className}:hover {\n\t\tbackground-color: var(--color-background);\n\t\ttransition: background-color 0.2s ease-in-out;\n\t\ttransition-delay: 0.32s;\n\t}\n\t.${className}:hover > a {\n\t\tanimation: delayed_link 0.2s forwards ease-in-out;\n\t\tanimation-delay: 0.32s;\n\t}\n}\n\n@keyframes delayed_link {\n\t0% {\n\t\tcursor: inherit;\n\t\topacity: .38;\n\t\tpointer-events: none;\n\t}\n\t100% {\n\t\tcursor: pointer;\n\t\topacity: 1;\n\t\tpointer-events: all;\n\t}\n}\n`}\n\t\t\t</style>\n\t\t\t<div className={className} data-debug={isDebugMode} draggable={false} {...events}>\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://tldraw.dev\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\tdraggable={false}\n\t\t\t\t\tonPointerDown={stopEventPropagation}\n\t\t\t\t\tstyle={{ mask: maskCss, WebkitMask: maskCss }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</>\n\t)\n})\n"],
  "mappings": "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",
  "names": ["Watermark", "src"]
}
