{
  "version": 3,
  "sources": ["../../../../../node_modules/@framerjs/framer-events/lib/esm/generated/ImportPasteBitmap.js", "../../src/document/components/canvas/addImagesToCanvas.ts"],
  "sourcesContent": ["import { triggerEvent } from \"../listeners\";\nfunction createImportPasteBitmapEvent(payload) {\n  console.warn(\"[DEPRECATED] Use triggerImportPasteBitmapEvent instead of createImportPasteBitmapEvent.\");\n  return {\n    ...payload,\n    event: \"import_paste_bitmap\"\n  };\n}\nconst meta = {\n  track: true\n};\nfunction triggerImportPasteBitmapEvent(payload) {\n  const event = {\n    ...payload,\n    event: \"import_paste_bitmap\"\n  };\n  triggerEvent(event, meta);\n}\nexport {\n  createImportPasteBitmapEvent,\n  triggerImportPasteBitmapEvent\n};\n", "import { createAssetReferenceForImage, splitExtension } from \"@framerjs/assets\"\nimport { triggerImportPasteBitmapEvent } from \"@framerjs/framer-events\"\nimport { assert, assertNever, getLogger } from \"@framerjs/shared\"\nimport type { EngineStores } from \"document/EngineStores.ts\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport { constraintsForDropAtPosition, suggestedTopLevelFrame } from \"document/components/tools/utils/FramesHelper.ts\"\nimport { CanvasTree, type FrameNode, type MaybeNodeID, type NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { VECTOR_SET_ENTITY_TYPE_ROOT_ID } from \"document/models/CanvasTree/nodes/EntityTypeRootNode.ts\"\nimport { randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport type { LoadedVectorSetNode, VectorSetNode } from \"document/models/CanvasTree/nodes/VectorSetNode.ts\"\nimport { insertNodeAccountingForReplicas } from \"document/models/CanvasTree/nodes/utils/insertNodeAccountingForReplicas.ts\"\nimport { isFrameNode, isVectorSetNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { withFill, withOptionalFill } from \"document/models/CanvasTree/traits/WithFill.ts\"\nimport { isPinnable } from \"document/models/CanvasTree/traits/WithPins.ts\"\nimport { withSize } from \"document/models/CanvasTree/traits/WithSize.ts\"\nimport { isBreakpointVariant } from \"document/models/CanvasTree/traits/WithVariant.ts\"\nimport { isVectorSetItem } from \"document/models/CanvasTree/traits/WithVectorSetItem.ts\"\nimport { ModalType } from \"document/utils/ModalType.ts\"\nimport type { Rect } from \"library/index.ts\"\nimport type { Point } from \"library/render/types/Point.ts\"\nimport type { Size } from \"library/render/types/Size.ts\"\nimport { importSVG } from \"utils/paperjs/importSVG.ts\"\nimport { BatchAssetUploader } from \"web/lib/BatchAssetUploader.ts\"\nimport { imageSizeToNonZero } from \"web/lib/images/image.ts\"\nimport { extensionsToMimeType } from \"web/lib/images/supportedFormats.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { record } from \"web/lib/tracker.ts\"\nimport { xRequestedByHeader } from \"web/lib/xRequestedByHeader.ts\"\nimport { isImageUploadResult } from \"web/pages/project/lib/UploadService.ts\"\nimport { calculateSizeOfSVG, shouldUploadSvgAsImageFill } from \"web/pages/project/lib/svg.ts\"\nimport { expandAssetEntityItemsFromNode } from \"../chrome/assets/utils/expandAssetEntityItems.ts\"\nimport { ContextAction } from \"../utils/contextActions.ts\"\n\nconst log = getLogger(\"addImagesToCanvas\")\nconst fileExtensionPattern = /\\.[^.]+$/u\n\ntype AddObjectSource = \"drop\" | \"menu\" | \"paste\" | \"plugin\"\n\nexport async function addImagesToCanvas(\n\tengine: VekterEngine,\n\tfiles: FileList | (File | string)[],\n\tdestinationCoordinates: Point,\n\tsource: AddObjectSource,\n\tignoreSelection = false,\n\tsilent = false,\n\toptionalTargets?: AddImageTarget[],\n): Promise<NodeID[]> {\n\tif (!files || files.length === 0) return []\n\tconst targets =\n\t\toptionalTargets ?? getAddImageTargets(engine.stores, files.length, destinationCoordinates, ignoreSelection)\n\tconst uploader = new BatchAssetUploader(engine, {\n\t\tsilent,\n\t})\n\n\tconst filenamesOfSvgsToAddAsImages = new Set<string>()\n\tconst svgsToImportAsVectors: File[] = []\n\tfor (const file of files) {\n\t\tif (file instanceof File && file.type === extensionsToMimeType.get(\"svg\")) {\n\t\t\tconst svgText = await file.text()\n\n\t\t\tif (shouldUploadSvgAsImageFill(svgText)) {\n\t\t\t\tvoid uploader.add(file)\n\t\t\t\tfilenamesOfSvgsToAddAsImages.add(file.name)\n\t\t\t} else {\n\t\t\t\tsvgsToImportAsVectors.push(file)\n\t\t\t}\n\t\t} else {\n\t\t\tvoid uploader.add(file)\n\t\t}\n\t}\n\n\tconst images = (await uploader.results()).filter(isImageUploadResult)\n\tconst imageObjectHandler = engine.scheduler.wrapHandler(createBitmapHandler(engine))\n\tconst insertedImageIds: NodeID[] = []\n\tconst { modalStore, scopeStore, chromeStore, codeEditorStore } = engine.stores\n\tfor (const { filename, originalFilename, imageSize } of images) {\n\t\tconst originalType = filenamesOfSvgsToAddAsImages.has(originalFilename) ? \"svg\" : \"bitmap\"\n\n\t\t// Non-zero as to have something visible\n\t\tconst { nonZeroNaturalWidth, nonZeroNaturalHeight } = imageSizeToNonZero(imageSize)\n\n\t\tinsertedImageIds.push(\n\t\t\t...imageObjectHandler(\n\t\t\t\tfilename,\n\t\t\t\toriginalFilename,\n\t\t\t\toriginalType,\n\t\t\t\t{\n\t\t\t\t\twidth: nonZeroNaturalWidth / window.devicePixelRatio,\n\t\t\t\t\theight: nonZeroNaturalHeight / window.devicePixelRatio,\n\t\t\t\t\tpixelWidth: nonZeroNaturalWidth,\n\t\t\t\t\tpixelHeight: nonZeroNaturalHeight,\n\t\t\t\t},\n\t\t\t\ttargets,\n\t\t\t\tsource,\n\t\t\t),\n\t\t)\n\t}\n\n\tif (svgsToImportAsVectors.length) {\n\t\tif (svgsToImportAsVectors.length === 1) {\n\t\t\tconst insertedId = await importAndDetachSVG(engine, svgsToImportAsVectors[0], source, targets)\n\t\t\treturn insertedId\n\t\t} else if (isVectorSetNode(scopeStore.active)) {\n\t\t\tmodalStore.set({\n\t\t\t\ttype: ModalType.VectorImport,\n\t\t\t\tsvgsToImport: svgsToImportAsVectors,\n\t\t\t\tscopeId: scopeStore.active.id,\n\t\t\t\tcurrentVectorLayout: getExistingVectorItemLayout(scopeStore.active),\n\t\t\t\tsource: \"canvas\",\n\t\t\t})\n\t\t} else {\n\t\t\tmodalStore.set({\n\t\t\t\ttype: ModalType.VectorSetCreation,\n\t\t\t\tsource: \"canvas\",\n\t\t\t\tonConfirm: (name: string) => {\n\t\t\t\t\tconst vectorSetId = randomID()\n\t\t\t\t\tmodalStore.set({\n\t\t\t\t\t\ttype: ModalType.VectorImport,\n\t\t\t\t\t\tsvgsToImport: svgsToImportAsVectors,\n\t\t\t\t\t\tscopeId: vectorSetId,\n\t\t\t\t\t\tsource: \"canvas\",\n\t\t\t\t\t\tonCreateVectorSet: (id: NodeID, itemsCount: number) => {\n\t\t\t\t\t\t\treturn ContextAction.createVectorSet(engine, name, false, null, id, \"import\", itemsCount)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonSuccess: engine.scheduler.wrapHandler((vectorSet: VectorSetNode) => {\n\t\t\t\t\t\t\tchromeStore.vectorSetsExpanded = true\n\t\t\t\t\t\t\tscopeStore.select(vectorSet.id, { keepHistory: true })\n\t\t\t\t\t\t\texpandAssetEntityItemsFromNode(engine, vectorSet.id, VECTOR_SET_ENTITY_TYPE_ROOT_ID, false)\n\t\t\t\t\t\t\tcodeEditorStore.closeEditor()\n\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n\n\treturn [...insertedImageIds]\n}\n\nfunction getExistingVectorItemLayout(vectorSetNode: LoadedVectorSetNode): Rect | undefined {\n\tconst lastVector = vectorSetNode.children.findLast(child => isVectorSetItem(child))\n\tif (!lastVector) return\n\tassert(withSize(lastVector), \"Vector Set items must support size.\")\n\tassert(isPinnable(lastVector), \"Vector Set items must be pinnable.\")\n\treturn {\n\t\twidth: lastVector.width,\n\t\theight: lastVector.height,\n\t\tx: lastVector.left ?? 0,\n\t\ty: lastVector.top ?? 0,\n\t\t// VECTOR @TODO: copy canvas fill from existing items.\n\t}\n}\n\nfunction importAndDetachSVG(\n\tengine: VekterEngine,\n\tfile: File | undefined,\n\tsource: AddObjectSource,\n\ttargets: AddImageTarget[],\n) {\n\tif (!file) return []\n\treturn insertSVG(engine, file.name, file, targets, source)\n}\n\nexport type AddImageTarget =\n\t| {\n\t\t\ttype: \"node\"\n\t\t\tparentId?: MaybeNodeID\n\t\t\tindex?: number\n\t\t\t/**\n\t\t\t * Position in absolute canvas coordinates. Will be converted to\n\t\t\t * parent-relative coordinates if `parentId` is defined.\n\t\t\t */\n\t\t\tposition?: Point\n\t  }\n\t| { type: \"fill\"; node: FrameNode }\n\nfunction getAddImageTargets(\n\tstores: EngineStores,\n\tfilesCount: number,\n\tposition: Point,\n\tignoreSelection: boolean,\n): AddImageTarget[] {\n\tconst { selectionStore, scopeStore, treeStore } = stores\n\tconst defaultTarget: AddImageTarget = {\n\t\ttype: \"node\",\n\t\tparentId: suggestedTopLevelFrame(treeStore.tree, scopeStore.active, [], position),\n\t\tposition,\n\t}\n\n\tif (ignoreSelection || selectionStore.nodes.length === 0) {\n\t\treturn [defaultTarget]\n\t}\n\n\tconst targets: AddImageTarget[] = []\n\tfor (const node of selectionStore.nodes) {\n\t\tif (!isFrameNode(node)) {\n\t\t\treturn [defaultTarget]\n\t\t}\n\n\t\tif (node.layout !== undefined) {\n\t\t\t// For frames with layout, we want to insert as children.\n\t\t\ttargets.push({ type: \"node\", parentId: node.id })\n\t\t} else if (!isBreakpointVariant(node)) {\n\t\t\t// For all other frames, we want to insert as fill. Except the\n\t\t\t// top-level web page frames: it feels like you rarely want a full\n\t\t\t// page background, but having the page selected is pretty common,\n\t\t\t// so let's instead fall back to the default behavior.\n\t\t\ttargets.push({ type: \"fill\", node })\n\t\t} else {\n\t\t\treturn [defaultTarget]\n\t\t}\n\t}\n\n\tif (filesCount > 1 && targets.some(target => target.type === \"fill\")) {\n\t\t// We don't support multi-image fills.\n\t\treturn [defaultTarget]\n\t} else {\n\t\treturn targets\n\t}\n}\n\nfunction capitalize([first = \"\", ...rest]: string) {\n\treturn [first.toUpperCase(), ...rest].join(\"\")\n}\n\nfunction prettifyFileName(name: string) {\n\tconst capitalized = capitalize(name.replace(\"_\", \" \"))\n\t// Don't set the default name to \"Graphic\" (when server uses the default name graphic.svg for\n\t// the uploaded asset), just set undefined and allow the Layer Panel to use the default name for\n\t// the node.\n\tif (capitalized === \"Graphic\") return undefined\n\treturn capitalized\n}\n\nfunction createBitmapHandler(engine: VekterEngine) {\n\treturn (\n\t\tfilenameOrContent: string,\n\t\toriginalFilename: string,\n\t\toriginalType: \"bitmap\" | \"svg\",\n\t\tsize: Size & { pixelWidth: number; pixelHeight: number },\n\t\ttargets: AddImageTarget[],\n\t\tsource: AddObjectSource,\n\t) => {\n\t\tconst tree = engine.tree\n\t\tconst selection: NodeID[] = []\n\n\t\tfor (const target of targets) {\n\t\t\t// Images that started as an SVG but got converted to an image *could* be inserted as fill,\n\t\t\t// but for consistency with svg handling let's also insert them as children instead.\n\t\t\tconst currentTarget: AddImageTarget =\n\t\t\t\ttarget.type === \"fill\" && originalType === \"svg\" ? { type: \"node\", parentId: target.node.id } : target\n\n\t\t\tif (currentTarget.type === \"node\") {\n\t\t\t\tlet selectionId = randomID()\n\t\t\t\tconst { baseAttributes } = getBaseAttributes(engine, currentTarget, selectionId, size, originalFilename)\n\n\t\t\t\tlog.info(\"create image:\", originalFilename, \"size:\", size)\n\n\t\t\t\tconst attributes: Partial<FrameNode> = {\n\t\t\t\t\t...baseAttributes,\n\t\t\t\t\tfillImagePixelWidth: size.pixelWidth,\n\t\t\t\t\tfillImagePixelHeight: size.pixelHeight,\n\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t}\n\n\t\t\t\tselectionId = insertNodeAccountingForReplicas(\n\t\t\t\t\ttree,\n\t\t\t\t\tcurrentTarget.parentId,\n\t\t\t\t\t(targetParentId, visibilityProps) => {\n\t\t\t\t\t\tengine.createImage(\n\t\t\t\t\t\t\tfilenameOrContent,\n\t\t\t\t\t\t\toriginalFilename,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\twidth: size.pixelWidth,\n\t\t\t\t\t\t\t\theight: size.pixelHeight,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttargetParentId,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\t\t\t...visibilityProps,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcurrentTarget.type === \"node\" ? currentTarget.index : undefined,\n\t\t\t\t\t\t)\n\t\t\t\t\t\treturn selectionId\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\ttriggerImportPasteBitmapEvent({})\n\t\t\t\tconst imageExtension = splitExtension(originalFilename)[1].toLowerCase()\n\t\t\t\trecord(\"insert_image\", { imageExtension, source: `upload_${source}` })\n\t\t\t\tselection.push(selectionId)\n\t\t\t} else if (currentTarget.type === \"fill\") {\n\t\t\t\tconst node = engine.tree.get(currentTarget.node.id)\n\t\t\t\tif (!node) continue\n\t\t\t\tassert(withFill(node))\n\t\t\t\tconst assetReference = createAssetReferenceForImage({\n\t\t\t\t\tidentifier: filenameOrContent,\n\t\t\t\t\tintrinsicSize: {\n\t\t\t\t\t\twidth: size.pixelWidth,\n\t\t\t\t\t\theight: size.pixelHeight,\n\t\t\t\t\t},\n\t\t\t\t\toriginalFilename,\n\t\t\t\t})\n\t\t\t\tnode.set({ fillImage: assetReference, fillImageOriginalName: originalFilename, fillType: \"image\" })\n\t\t\t\tif (withOptionalFill(node) && !node.fillEnabled) {\n\t\t\t\t\tnode.set({ fillEnabled: true })\n\t\t\t\t}\n\t\t\t\tselection.push(currentTarget.node.id)\n\t\t\t} else {\n\t\t\t\tassertNever(currentTarget)\n\t\t\t}\n\t\t}\n\n\t\tengine.stores.selectionStore.set(selection, { switchToProperties: true })\n\t\treturn selection\n\t}\n}\n\nfunction createSvgHandler(engine: VekterEngine) {\n\treturn (\n\t\tfilenameOrContent: string,\n\t\toriginalFilename: string,\n\t\tsize: Size & { pixelWidth?: number; pixelHeight?: number },\n\t\ttargets: AddImageTarget[],\n\t\tsource: AddObjectSource,\n\t\tcolorable?: boolean,\n\t) => {\n\t\tconst tree = engine.tree\n\t\tconst selection: NodeID[] = []\n\n\t\tfor (const target of targets) {\n\t\t\tlog.info(\n\t\t\t\t\"create svg:\",\n\t\t\t\toriginalFilename,\n\t\t\t\t\"size:\",\n\t\t\t\tsize,\n\t\t\t\t\"bytes:\",\n\t\t\t\tfilenameOrContent.length,\n\t\t\t\t\"colorable?\",\n\t\t\t\tcolorable,\n\t\t\t)\n\t\t\tconst currentTarget: Extract<AddImageTarget, { type: \"node\" }> =\n\t\t\t\ttarget.type === \"node\" ? target : { type: \"node\", parentId: target.node.id }\n\t\t\tlet selectionId: NodeID = randomID()\n\n\t\t\tconst { constraints } = getBaseAttributes(engine, currentTarget, selectionId, size, originalFilename)\n\n\t\t\tselectionId = insertNodeAccountingForReplicas(tree, currentTarget.parentId, () => {\n\t\t\t\tconst shapeContainer = importSVG(filenameOrContent, CanvasTree.createEmpty, size)\n\n\t\t\t\tassert(shapeContainer, \"Import SVG failed\")\n\t\t\t\tshapeContainer.parentid = currentTarget.parentId\n\n\t\t\t\tconst insertedNode = engine.cloneNode(shapeContainer)\n\n\t\t\t\tContextAction.scaleVector(engine, insertedNode.id, size)\n\t\t\t\tinsertedNode.set({ ...constraints })\n\t\t\t\t// Remove the shape container\n\t\t\t\tconst ungroupedNodeIds = ContextAction.ungroup(engine, [insertedNode])\n\t\t\t\t// Group the descendants if there is more than one child.\n\t\t\t\tif (ungroupedNodeIds && ungroupedNodeIds.length > 1) {\n\t\t\t\t\tContextAction.joinInGroup(engine, ungroupedNodeIds)\n\t\t\t\t}\n\n\t\t\t\treturn insertedNode.id\n\t\t\t})\n\n\t\t\tconst imageExtension = splitExtension(originalFilename)[1].toLowerCase()\n\t\t\trecord(\"insert_image\", { imageExtension, source: `upload_${source}` })\n\t\t\tselection.push(selectionId)\n\t\t}\n\n\t\tengine.stores.selectionStore.set(selection, { switchToProperties: true })\n\t\treturn selection\n\t}\n}\n\nfunction getBaseAttributes(\n\tengine: VekterEngine,\n\ttarget: Extract<AddImageTarget, { type: \"node\" }>,\n\tid: NodeID,\n\tsize: Size,\n\toriginalFilename: string,\n) {\n\tconst parentId = target.parentId\n\tconst constraintProps = target.position\n\t\t? constraintsForDropAtPosition(engine, parentId, target.position, size)\n\t\t: undefined\n\tconst name = originalFilename.replace(fileExtensionPattern, \"\")\n\treturn {\n\t\tbaseAttributes: {\n\t\t\tname: prettifyFileName(name),\n\t\t\tid,\n\t\t\twidth: Math.max(1, size.width),\n\t\t\theight: Math.max(1, size.height),\n\t\t\tintrinsicWidth: size.width,\n\t\t\tintrinsicHeight: size.height,\n\t\t\t...constraintProps,\n\t\t},\n\t\tconstraints: constraintProps,\n\t}\n}\n\nasync function insertSVG(\n\tengine: VekterEngine,\n\toriginalFilename: string,\n\tblob: Blob,\n\ttargets: AddImageTarget[],\n\tsource: AddObjectSource,\n): Promise<NodeID[]> {\n\tconst key = \"run-svgo\"\n\tconst maxBytesPerSvg = 1_000_000 /* 1 MB */\n\n\tif (blob.size > maxBytesPerSvg) {\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"error\",\n\t\t\tkey,\n\t\t\tprimaryText: \"SVG is too large.\",\n\t\t\tsecondaryText: \"You may need a PNG.\",\n\t\t\ticon: \"error\",\n\t\t\tduration: 5000,\n\t\t})\n\t\treturn []\n\t}\n\n\t// FIXME: This toast doesn't account for the fact the we might be inserting\n\t// multiple SVGs simultanously.\n\ttoast({\n\t\ttype: \"add\",\n\t\tvariant: \"progress\",\n\t\tkey,\n\t\tprimaryText: \"Optimizing SVG\",\n\t\tsecondaryText: \"for performance\u2026\",\n\t\ticon: \"reconnecting\",\n\t\tduration: Infinity,\n\t\tshowCloseButton: \"never\",\n\t})\n\ttry {\n\t\tconst svg = await optimizeSVG(blob)\n\t\tconst size = calculateSizeOfSVG(svg)\n\t\tconst svgObjectHandler = engine.scheduler.wrapHandler(createSvgHandler(engine))\n\t\tconst insertedSvgNodeIds = svgObjectHandler(\n\t\t\tsvg,\n\t\t\toriginalFilename,\n\t\t\tsize,\n\t\t\ttargets,\n\t\t\tsource,\n\t\t\t/* colorable */ true, // TODO: Like NSXMLDocument+SVGImage.m\n\t\t)\n\t\ttoast({ type: \"remove\", key })\n\t\treturn insertedSvgNodeIds\n\t} catch (e) {\n\t\t// biome-ignore lint/suspicious/noConsole: <explanation>\n\t\tconsole.error(\"Failed to insert SVG:\", e)\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"error\",\n\t\t\tkey,\n\t\t\tprimaryText: \"Failed to insert\",\n\t\t\tsecondaryText: \"your SVG.\",\n\t\t\ticon: \"error\",\n\t\t})\n\t\tthrow e\n\t}\n}\n\nexport async function optimizeSVG(blob: Blob) {\n\t// Run SVGO on the SVG because we can't handle all SVG.\n\tconst body = new FormData()\n\tbody.set(\"file\", blob, \"image.svg\")\n\tconst response = await fetch(\"/internal/svgo\", { method: \"POST\", body, headers: xRequestedByHeader })\n\n\tif (!response.ok) throw new Error(`Failed to optimize SVG`)\n\n\tconst svg = await response.text()\n\treturn svg\n}\n"],
  "mappings": "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",
  "names": []
}
