{
  "version": 3,
  "sources": ["../../esbuild/externals/react-dom/server/index.cjs", "../../src/document/components/chrome/properties/utils/gestureStatusVariant.ts", "../../src/renderer/staticSVGRenderer.tsx", "../../src/document/models/CanvasTree/utils/findTokenNode.ts", "../../src/document/models/CanvasTree/nodes/utils/shaderUniforms.ts"],
  "sourcesContent": ["// Use the external ReactDOMServer instead of bundling it\n// eslint-disable-next-line\nmodule.exports = typeof globalThis[\"ReactDOMServer\"] === \"undefined\" ? undefined : globalThis[\"ReactDOMServer\"]\n", "import type { CanvasTree } from \"document/models/CanvasTree/index.ts\"\nimport type { GestureType } from \"document/models/CanvasTree/traits/WithVariant.ts\"\nimport { isGestureVariant } from \"document/models/CanvasTree/traits/WithVariant.ts\"\n\nexport function isStatusGestureVariant(\n\tgestureType: GestureType | undefined,\n): gestureType is Extract<GestureType, \"loading\" | \"error\"> {\n\treturn gestureType === \"loading\" || gestureType === \"error\"\n}\n/**\n * Checks if any of the given NodeIDs is a descendent of a loading or error Variant.\n * Some features will be disabled when either of these variants is selected.\n */\nexport function isStatusGestureVariantDescendant(tree: CanvasTree, nodeIds: readonly string[]) {\n\tfor (const nodeId of nodeIds) {\n\t\tconst node = tree.getNode(nodeId)\n\t\tif (!node) continue\n\n\t\tconst groundNode = tree.getGroundNodeFor(node)\n\t\tif (!isGestureVariant(groundNode)) continue\n\n\t\tif (isStatusGestureVariant(groundNode.gesture)) return true\n\t}\n\n\treturn false\n}\n", "import type { AnyComponentLoader } from \"@framerjs/framer-runtime\"\nimport { assert } from \"@framerjs/shared\"\nimport type { ShapeContainerNode, VectorNode } from \"document/models/CanvasTree/index.ts\"\nimport { RectangleShapeNode, isVectorNode } from \"document/models/CanvasTree/index.ts\"\nimport { isShapeContainerNode, isShapeGroupNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { withBoxShadow } from \"document/models/CanvasTree/traits/WithBoxShadow.ts\"\nimport { withChildren } from \"document/models/CanvasTree/traits/WithChildren.ts\"\nimport { hasTransparentFill } from \"document/models/CanvasTree/traits/WithFill.ts\"\nimport { withStroke } from \"document/models/CanvasTree/traits/WithStroke.ts\"\nimport { MotionConfig } from \"framer-motion\"\nimport type { VectorProperties } from \"library/render/presentation/Vector.tsx\"\nimport { Vector } from \"library/render/presentation/Vector.tsx\"\nimport type { VectorGroupProperties } from \"library/render/presentation/VectorGroup.tsx\"\nimport { VectorGroup } from \"library/render/presentation/VectorGroup.tsx\"\nimport { RenderTarget, executeInRenderEnvironment } from \"library/render/types/RenderEnvironment.ts\"\nimport { roundedNumberString } from \"library/render/utils/roundedNumber.ts\"\nimport * as ReactDOMServer from \"react-dom/server\"\n\nconst targetSize = 1000\nconst generationsToKeep = 50\n\nclass Entry {\n\tconstructor(\n\t\tpublic svg: string,\n\t\tpublic lastAccess: number,\n\t\tpublic hash: number,\n\t) {}\n}\n\nexport class SVGRenderer {\n\tprivate map = new Map<number, Entry>()\n\n\tprivate shouldUpdateGeneration = false\n\tprivate generation = 0\n\tprivate oldestGeneration = 0\n\n\tprivate static _instance: SVGRenderer\n\tstatic shared(): SVGRenderer {\n\t\tif (!SVGRenderer._instance) {\n\t\t\tSVGRenderer._instance = new SVGRenderer()\n\t\t}\n\t\treturn SVGRenderer._instance\n\t}\n\n\tgetSVGStringForNode(componentLoader: AnyComponentLoader, node: ShapeContainerNode | VectorNode): string {\n\t\tif (isShapeContainerNode(node)) {\n\t\t\tconst contentHash = node.getContentHash()\n\t\t\tconst entry = this.map.get(contentHash)\n\t\t\tif (entry) {\n\t\t\t\tentry.lastAccess = this.generation\n\t\t\t\treturn entry.svg\n\t\t\t}\n\n\t\t\t// If update was called inbetween generating entries, we increase our generation counter.\n\t\t\tif (this.shouldUpdateGeneration) {\n\t\t\t\tthis.generation += 1\n\t\t\t\tthis.shouldUpdateGeneration = false\n\t\t\t}\n\n\t\t\tconst svg = renderNodeToSVGString(componentLoader, node, \"s\" + contentHash)\n\t\t\tthis.map.set(contentHash, new Entry(svg, this.generation, contentHash))\n\t\t\treturn svg\n\t\t}\n\n\t\t// VECTOR @TODO: naively render inline shapes without a container. They don't use\n\t\t// contentHash and doesn't contribute to the cache. This path would be irrelevant if we\n\t\t// reuse the SVG serializer for rendering inline shapes.\n\t\treturn renderNodeToSVGString(componentLoader, node, node.id)\n\t}\n\n\tupdate() {\n\t\tthis.shouldUpdateGeneration = true\n\n\t\t// We don't want to call evict, the heavy part of update, too often.\n\t\tif (this.map.size < targetSize) return\n\t\tif (this.generation - this.oldestGeneration < generationsToKeep) return\n\n\t\tthis.evict()\n\t}\n\n\tevict() {\n\t\t// Eject half the entries from the cache\n\t\tconst sorted = Array.from(this.map.values()).sort((a, b) => a.lastAccess - b.lastAccess)\n\t\tconst half = Math.floor(sorted.length / 2)\n\t\tconst middleEntry = sorted[half]\n\t\tassert(middleEntry, \"SVG entry must be defined\")\n\t\tthis.oldestGeneration = middleEntry.lastAccess\n\t\tfor (let i = 0; i < half; i++) {\n\t\t\tconst entry = sorted[i]\n\t\t\tassert(entry, \"SVG entry must be defined\")\n\t\t\tif (this.generation - entry.lastAccess < generationsToKeep) break\n\t\t\tthis.map.delete(entry.hash)\n\t\t}\n\t}\n}\n\n// Instead of depending on node.id, we want to depend on the contentHash\nclass HashForNode {\n\tcounter = 0\n\n\tconstructor(readonly contentHash: string) {}\n\n\tnextId(): string {\n\t\tthis.counter += 1\n\t\treturn `${this.contentHash}_${this.counter}`\n\t}\n}\n\nfunction renderNodeToSVGString(\n\tcomponentLoader: AnyComponentLoader,\n\tnode: ShapeContainerNode | VectorNode,\n\thash: string,\n): string {\n\tconst hasher = new HashForNode(\"s\" + hash)\n\n\tlet backgroundRect: React.ReactNode | null = null\n\tif (isShapeContainerNode(node)) {\n\t\tif (node.fillEnabled && node.exportIncludesBackground && !hasTransparentFill(node)) {\n\t\t\tconst { children: _, ...rawNode } = node.raw()\n\t\t\tbackgroundRect = renderVectorNode(new RectangleShapeNode(rawNode), componentLoader, hasher, false)\n\t\t}\n\t}\n\n\tconst renderingTopLevelVector = !isShapeContainerNode(node)\n\tconst contentNodes = renderingTopLevelVector ? [node] : node.children\n\tconst content = contentNodes.map(child => {\n\t\tif (!isVectorNode(child)) return null\n\t\t// This path is currently only used in code generation, where vectors are rendered via the SVG component.\n\t\t// The top-level vector node doesn't need a `translate` \u2014 its `x`/`y` values are applied as\n\t\t// `left`/`top` on the SVG itself. Same goes for `rotation`, which is already applied to the SVG\n\t\t// component.\n\t\treturn renderVectorNode(child, componentLoader, hasher, !renderingTopLevelVector)\n\t})\n\n\tconst svgElement = (\n\t\t<MotionConfig isStatic>\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\txmlnsXlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\tviewBox={`0 0 ${roundedNumberString(node.width, 3)} ${roundedNumberString(node.height, 3)}`}\n\t\t\t\t// Always render top level vector with overflow: visible, because they might have\n\t\t\t\t// centered stroke that exceed the bounding box.\n\t\t\t\toverflow={renderingTopLevelVector ? \"visible\" : undefined}\n\t\t\t>\n\t\t\t\t{backgroundRect}\n\t\t\t\t{content}\n\t\t\t</svg>\n\t\t</MotionConfig>\n\t)\n\n\treturn executeInRenderEnvironment({ target: RenderTarget.export }, () =>\n\t\tReactDOMServer.renderToStaticMarkup(svgElement),\n\t)\n}\n\nfunction renderVectorNode(\n\tnode: VectorNode,\n\tcomponentLoader: AnyComponentLoader,\n\thasher: HashForNode,\n\tincludeTransform: boolean,\n): React.ReactNode {\n\tconst id = hasher.nextId()\n\tif (isShapeGroupNode(node)) {\n\t\tconst props = node.getProps(componentLoader) as VectorGroupProperties\n\t\tprops.id = id\n\t\treturn (\n\t\t\t// eslint-disable-next-line @eslint-react/jsx-key-before-spread -- key must come after, as `nodeProps` might contain `key`\n\t\t\t<VectorGroup {...props} key={id} includeTransform={includeTransform}>\n\t\t\t\t{node.children.map(n => {\n\t\t\t\t\treturn renderVectorNode(n, componentLoader, hasher, true)\n\t\t\t\t})}\n\t\t\t</VectorGroup>\n\t\t)\n\t}\n\n\tconst props = node.getProps(componentLoader) as VectorProperties\n\tprops.id = id\n\tprops.strokeClipId = `clip_${id}`\n\t// eslint-disable-next-line @eslint-react/jsx-key-before-spread -- key must come after, as `nodeProps` might contain `key`\n\treturn <Vector {...props} key={id} includeTransform={includeTransform} />\n}\n\n// VECTOR @TODO: cover tests\n// Check if we need to render the SVG with overflow: visible to account for any centered strokes\n// that might exceed the bounding box. If it need to, we can't render the SVG as an image.\nexport function requiresSVGToBeOverflowVisible(node: ShapeContainerNode | VectorNode) {\n\t// ShapeContainerNode is a user-defined viewBox, we don't need overflow: visible.\n\tif (isShapeContainerNode(node)) return false\n\n\tif (hasCenteredStroke(node)) return true\n\tif (hasOutsetShadow(node)) return true\n\n\tif (withChildren(node)) {\n\t\tif (node.children.find(child => isVectorNode(child) && requiresSVGToBeOverflowVisible(child))) return true\n\t}\n\n\treturn false\n}\n\nfunction hasCenteredStroke(node: VectorNode): boolean {\n\tif (!withStroke(node)) return false\n\tif (!node.strokeEnabled || !node.strokeWidth) return false\n\treturn node.strokeAlignment === \"center\"\n}\n\nfunction hasOutsetShadow(node: VectorNode): boolean {\n\tif (!withBoxShadow(node)) return false\n\tif (isDynamicValue(node.boxShadows)) return true\n\n\treturn Boolean(node.boxShadows?.some(shadow => !shadow.inset))\n}\n", "import type { CanvasTree } from \"../CanvasTree.ts\"\nimport type { ColorStyleTokenNode } from \"../nodes/ColorStyleTokenNode.ts\"\nimport { isColorStyleTokenNode } from \"../nodes/utils/nodeCheck.ts\"\nimport type { TokenId } from \"./tokens.ts\"\n\n/**\n * Finds the TokenNode in the CanvasTree and returns it or null if not found.\n * Includes soft-deleted tokens.\n */\nexport function findTokenNode(tokenId: TokenId, tree: CanvasTree): ColorStyleTokenNode | null {\n\tconst colorStyle = tree.get<ColorStyleTokenNode>(tokenId)\n\tif (isColorStyleTokenNode(colorStyle)) return colorStyle\n\treturn null\n}\n", "import type { VerifiedPropertyControls } from \"@framerjs/framer-runtime\"\nimport { assertNever } from \"@framerjs/shared\"\nimport { isSafeJS } from \"code-generation/js/serializeJS.ts\"\nimport { isShaderUniformControl } from \"library/modules/defineShader.ts\"\nimport type { UniformName } from \"library/render/presentation/Shader/WebGL2ShaderRenderer.ts\"\nimport type { ShaderUniformInput } from \"library/render/presentation/Shader/types.ts\"\nimport { toUniformName } from \"library/render/presentation/Shader/uniformName.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { isBoolean, isDefined, isNumber, isObject, isString } from \"utils/typeChecks.ts\"\n\ninterface ShaderUniformEntry {\n\tname: UniformName\n\tuniform: ShaderUniformInput\n}\n\n/**\n * Iterates over property controls and resolved values, yielding uniform entries.\n *\n * @param propertyControls - The property controls definition to iterate over.\n * @param resolvedProps - The resolved properties to use for the uniform values.\n */\nexport function* iterateShaderUniforms(\n\tpropertyControls: VerifiedPropertyControls,\n\tresolvedProps: Record<string, unknown>,\n): Generator<ShaderUniformEntry> {\n\tfor (const key in propertyControls) {\n\t\tconst control = propertyControls[key]\n\t\tif (!control) continue\n\t\tif (!isShaderUniformControl(control)) continue\n\n\t\tconst value = resolvedProps[key]\n\t\tif (!isDefined(value)) continue\n\n\t\tconst name = toUniformName(key)\n\n\t\t// NOTE: We are casting here as the values can technically be SafeJS expressions, but they are only consumed at runtime.\n\t\tswitch (control.type) {\n\t\t\tcase ControlType.Number:\n\t\t\t\tif (!isNumber(value) && !isSafeJS(value)) break\n\t\t\t\tyield { name, uniform: { type: ControlType.Number, value: value as number } }\n\t\t\t\tbreak\n\t\t\tcase ControlType.Boolean:\n\t\t\t\tif (!isBoolean(value) && !isSafeJS(value)) break\n\t\t\t\tyield { name, uniform: { type: ControlType.Boolean, value: value as boolean } }\n\t\t\t\tbreak\n\t\t\tcase ControlType.Color:\n\t\t\t\tif (!isString(value) && !isSafeJS(value)) break\n\t\t\t\tyield { name, uniform: { type: ControlType.Color, value: value as string } }\n\t\t\t\tbreak\n\t\t\tcase ControlType.ResponsiveImage:\n\t\t\t\tif (!isString(value) && !isObject(value) && !isSafeJS(value)) break\n\t\t\t\tyield { name, uniform: { type: ControlType.ResponsiveImage, value: value as string | { src: string } } }\n\t\t\t\tbreak\n\t\t\t/* NOTE: We only handle numeric enum values due to WebGL limitations. */\n\t\t\tcase ControlType.Enum:\n\t\t\t\tif (!isNumber(value) && !isSafeJS(value)) break\n\t\t\t\tyield { name, uniform: { type: ControlType.Enum, value: value as number } }\n\t\t\t\tbreak\n\t\t\tcase ControlType.Array:\n\t\t\t\tif (!Array.isArray(value) && !isSafeJS(value)) break\n\t\t\t\tif (control.control?.type !== ControlType.Color) break\n\t\t\t\tyield { name, uniform: { type: ControlType.Array, value: value as string[] } }\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tassertNever(control)\n\t\t}\n\t}\n}\n"],
  "mappings": "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",
  "names": ["props"]
}
