{
  "version": 3,
  "sources": ["../../src/app/ai/agents/evals2/scenarios/component/create-component-with-variants.eval.ts"],
  "sourcesContent": ["import { assert } from \"@framerjs/shared\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport type { LoadedSmartComponentNode } from \"document/models/CanvasTree/index.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport {\n\tisCodeComponentNode,\n\tisSmartComponentNode,\n\tisWebPageNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { CommandType } from \"../../../dsl.ts\"\nimport { agentEvalAsset } from \"../../harness/asset.ts\"\nimport { createEvalExportZipFixture } from \"../../harness/fixture.ts\"\n\ninterface VariantLayout {\n\tid: string\n\tname: string\n\tx: number\n\ty: number\n\twidth: number\n}\n\nconst fixture = createEvalExportZipFixture(\n\t\"create-component-with-variants\",\n\tagentEvalAsset(\"./create-component-with-variants.fixture.zip\"),\n\t{ runtimeTarget: \"browser\" },\n)\n\nconst requestId = \"nCzYObOKB\"\nconst tolerance = 1\n\nconst webPageNodeId = \"Ve6D74iWk\"\nconst componenentNodeIds = {\n\ttopBarNodeId: \"CVxEgnGnB\",\n\tfooterNodeId: \"vYQUE0Lvj\",\n\tarticleCardNodeId: \"VeK8HNs0P\",\n} as const\ntype ComponentNodeId = (typeof componenentNodeIds)[keyof typeof componenentNodeIds]\nconst componentMinimumVariantCounts = {\n\t// Expect new tablet/phone variants at least, possibly 2 phone variants and no tablet\n\t[componenentNodeIds.topBarNodeId]: 3,\n\t// Starts with a hover variant and is a very simple card so we don't expect more\n\t[componenentNodeIds.articleCardNodeId]: 2,\n\t[componenentNodeIds.footerNodeId]: 3,\n} as const satisfies Record<ComponentNodeId, number>\n\nevaluation(\n\t\"Component: Create Component With Variants\",\n\tfixture,\n\t{\n\t\tid: \"create-component-with-variants\",\n\t\trequestId,\n\t\tmaxSteps: 16,\n\t\tstopWhenPassed: true,\n\t\t// The replay has a large project context and may exceed the default browser-eval timeout.\n\t\tsendTimeoutMs: 300_000,\n\t\truntimeTarget: \"browser\",\n\t},\n\t({ commands, engine, report, tools }) => {\n\t\ttools.reportReplayChecks(report, { requestId })\n\n\t\treport.correctness.scored(\"no command errors\", () => {\n\t\t\texpect(tools.commandErrors()).toHaveLength(0)\n\t\t})\n\n\t\t//\n\t\t// Breakpoints\n\n\t\treport.correctness.required(\"keeps the page's breakpoints on the same y position\", () => {\n\t\t\tconst breakpoints = getBreakpointLayouts(engine)\n\t\t\tassert(breakpoints.length === 3, \"Expected to find exactly 3 breakpoints.\")\n\n\t\t\tconst firstBreakpoint = breakpoints.at(0)\n\t\t\tassert(firstBreakpoint, `Expected '${webPageNodeId}' to have breakpoints.`)\n\t\t\tconst misalignedBreakpoints = breakpoints\n\t\t\t\t.filter(breakpoint => Math.abs(breakpoint.y - firstBreakpoint.y) > tolerance)\n\t\t\t\t.map(\n\t\t\t\t\tbreakpoint => `${formatVariant(\"breakpoint\", breakpoint)} y=${breakpoint.y}, expected ${firstBreakpoint.y}`,\n\t\t\t\t)\n\n\t\t\texpect(misalignedBreakpoints).toEqual([])\n\t\t})\n\n\t\treport.correctness.required(\"spaces the page's breakpoints horizontally without overlap\", () => {\n\t\t\tconst breakpoints = getBreakpointLayouts(engine)\n\t\t\tassert(breakpoints.length === 3, \"Expected to find exactly 3 breakpoints.\")\n\n\t\t\tconst overlappingBreakpoints = getHorizontalGaps(breakpoints)\n\t\t\t\t.map((gap, index) => ({ gap, previousBreakpoint: breakpoints[index], breakpoint: breakpoints[index + 1] }))\n\t\t\t\t.filter(({ gap }) => gap < 0)\n\t\t\t\t.map(({ gap, previousBreakpoint, breakpoint }) => {\n\t\t\t\t\tassert(previousBreakpoint && breakpoint, \"Expected adjacent breakpoints to exist.\")\n\t\t\t\t\treturn `${formatVariant(\"breakpoint\", previousBreakpoint)} overlaps ${formatVariant(\"breakpoint\", breakpoint)} by ${-gap}px`\n\t\t\t\t})\n\n\t\t\tif (overlappingBreakpoints.length > 0) {\n\t\t\t\tassert(\n\t\t\t\t\tfalse,\n\t\t\t\t\t`Expected breakpoints to be spaced horizontally without overlap, but found: ${overlappingBreakpoints.join(\", \")}`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\treport.correctness.scored(\"uses a consistent horizontal gap between the page's breakpoints\", () => {\n\t\t\tconst breakpoints = getBreakpointLayouts(engine)\n\t\t\tassert(breakpoints.length === 3, \"Expected to find exactly 3 breakpoints.\")\n\n\t\t\tconst gaps = getHorizontalGaps(breakpoints)\n\t\t\tconst firstGap = gaps.at(0)\n\t\t\tassert(firstGap !== undefined, \"Expected to find at least one gap between breakpoints.\")\n\n\t\t\tconst inconsistentGaps = gaps.filter(gap => Math.abs(gap - firstGap) > tolerance)\n\t\t\tif (inconsistentGaps.length > 0) {\n\t\t\t\tassert(false, `Expected breakpoints to have a consistent horizontal gap, but found gaps: ${gaps.join(\", \")}`)\n\t\t\t}\n\t\t})\n\n\t\t//\n\t\t// Component variants\n\n\t\treport.correctness.required(\"creates variants for existing components\", () => {\n\t\t\texpect(commands.byType(CommandType.CreateVariant).length).toBeGreaterThan(0)\n\t\t\texpect(getRelevantVariantComponents(engine).length).toBeGreaterThan(0)\n\t\t})\n\n\t\tfor (const { component, minimumVariantCount } of getRelevantVariantComponents(engine)) {\n\t\t\tconst label = typeof component.name === \"string\" ? component.name : component.id\n\n\t\t\treport.correctness.required(`keeps ${label} variants on the same y position`, () => {\n\t\t\t\tconst variants = getVariantLayouts(component)\n\t\t\t\tassert(\n\t\t\t\t\tvariants.length >= minimumVariantCount,\n\t\t\t\t\t`Expected to find at least ${minimumVariantCount} variants but found ${variants.length}.`,\n\t\t\t\t)\n\n\t\t\t\tconst firstVariant = variants.at(0)\n\t\t\t\tassert(firstVariant, `Expected ${label} to have variants.`)\n\t\t\t\tconst misalignedVariants = variants\n\t\t\t\t\t.filter(variant => Math.abs(variant.y - firstVariant.y) > tolerance)\n\t\t\t\t\t.map(variant => `${formatVariant(label, variant)} y=${variant.y}, expected ${firstVariant.y}`)\n\n\t\t\t\texpect(misalignedVariants).toEqual([])\n\t\t\t})\n\n\t\t\treport.correctness.required(`spaces ${label} variants horizontally without overlap`, () => {\n\t\t\t\tconst variants = getVariantLayouts(component)\n\t\t\t\tassert(\n\t\t\t\t\tvariants.length >= minimumVariantCount,\n\t\t\t\t\t`Expected to find at least ${minimumVariantCount} variants but found ${variants.length}.`,\n\t\t\t\t)\n\n\t\t\t\tconst overlappingVariants = getHorizontalGaps(variants)\n\t\t\t\t\t.map((gap, index) => ({ gap, previousVariant: variants[index], variant: variants[index + 1] }))\n\t\t\t\t\t.filter(({ gap }) => gap < 0)\n\t\t\t\t\t.map(({ gap, previousVariant, variant }) => {\n\t\t\t\t\t\tassert(previousVariant && variant, \"Expected adjacent variants to exist.\")\n\t\t\t\t\t\treturn `${formatVariant(label, previousVariant)} overlaps ${formatVariant(label, variant)} by ${-gap}px`\n\t\t\t\t\t})\n\n\t\t\t\tif (overlappingVariants.length > 0) {\n\t\t\t\t\tassert(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t`Expected ${label} variants to be spaced horizontally without overlap, but these did: ${overlappingVariants.join(\", \")}`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treport.correctness.scored(`uses a consistent horizontal margin between ${label} variants`, () => {\n\t\t\t\tconst variants = getVariantLayouts(component)\n\t\t\t\tassert(\n\t\t\t\t\tvariants.length >= minimumVariantCount,\n\t\t\t\t\t`Expected to find at least ${minimumVariantCount} variants but found ${variants.length}.`,\n\t\t\t\t)\n\n\t\t\t\tconst gaps = getHorizontalGaps(variants)\n\n\t\t\t\tconst firstGap = gaps.at(0)\n\t\t\t\tassert(firstGap !== undefined, \"Expected to find at least one gap between variants.\")\n\t\t\t\tconst inconsistentGaps = gaps.filter(gap => Math.abs(gap - firstGap) > tolerance)\n\t\t\t\tif (inconsistentGaps.length > 0) {\n\t\t\t\t\tassert(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t`Expected ${label} variants to have a consistent horizontal margin, but found gaps: ${gaps.join(\", \")}`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t},\n)\n\ninterface RelevantVariantComponent {\n\tcomponent: LoadedSmartComponentNode\n\tminimumVariantCount: number\n}\n\nfunction getRelevantVariantComponents(engine: VekterEngine): RelevantVariantComponent[] {\n\tconst minimumByComponentId = new Map<NodeID, number>()\n\tconst minimumByIdentifier = new Map<string, number>()\n\tfor (const nodeId of Object.values(componenentNodeIds)) {\n\t\tconst node = engine.tree.get(nodeId)\n\t\tassert(isCodeComponentNode(node), `Expected node '${nodeId}' to be a code component.`)\n\n\t\tconst minimumVariantCount = componentMinimumVariantCounts[nodeId]\n\t\tassert(minimumVariantCount !== undefined, `Expected a minimum variant count for '${nodeId}'.`)\n\n\t\tconst componentId = node.getLocalSmartComponentNodeId()\n\t\tif (componentId) minimumByComponentId.set(componentId, minimumVariantCount)\n\t\tif (node.codeComponentIdentifier) minimumByIdentifier.set(node.codeComponentIdentifier, minimumVariantCount)\n\t}\n\n\tconst components: RelevantVariantComponent[] = []\n\tfor (const node of engine.tree.root.children) {\n\t\tif (!isSmartComponentNode(node) || !node.isLoaded()) continue\n\t\tconst minimumVariantCount = minimumByComponentId.get(node.id) ?? minimumByIdentifier.get(node.instanceIdentifier)\n\t\tif (minimumVariantCount === undefined) continue\n\t\tcomponents.push({ component: node, minimumVariantCount })\n\t}\n\treturn components\n}\n\nfunction getVariantLayouts(component: LoadedSmartComponentNode): VariantLayout[] {\n\treturn component\n\t\t.getTopLevelVariants()\n\t\t.map(variant => {\n\t\t\tconst rect = variant.rect()\n\t\t\treturn {\n\t\t\t\tid: variant.id,\n\t\t\t\tname: typeof variant.name === \"string\" ? variant.name : variant.id,\n\t\t\t\tx: rect.x,\n\t\t\t\ty: rect.y,\n\t\t\t\twidth: rect.width,\n\t\t\t}\n\t\t})\n\t\t.sort((left, right) => left.x - right.x)\n}\n\nfunction getBreakpointLayouts(engine: VekterEngine): VariantLayout[] {\n\tconst webPage = engine.tree.get(webPageNodeId)\n\tassert(\n\t\twebPage && isWebPageNode(webPage, true) && webPage.isLoaded(),\n\t\t`Expected '${webPageNodeId}' to be a loaded web page.`,\n\t)\n\n\treturn webPage\n\t\t.getTopLevelVariants()\n\t\t.map(breakpoint => {\n\t\t\tconst rect = breakpoint.rect()\n\t\t\treturn {\n\t\t\t\tid: breakpoint.id,\n\t\t\t\tname: typeof breakpoint.name === \"string\" ? breakpoint.name : breakpoint.id,\n\t\t\t\tx: rect.x,\n\t\t\t\ty: rect.y,\n\t\t\t\twidth: rect.width,\n\t\t\t}\n\t\t})\n\t\t.sort((left, right) => left.x - right.x)\n}\n\nfunction getHorizontalGaps(variants: readonly VariantLayout[]): number[] {\n\tconst gaps: number[] = []\n\tfor (let index = 1; index < variants.length; index++) {\n\t\tconst previousVariant = variants[index - 1]\n\t\tconst variant = variants[index]\n\t\tassert(previousVariant && variant, \"Expected adjacent variants to exist.\")\n\n\t\tgaps.push(variant.x - (previousVariant.x + previousVariant.width))\n\t}\n\treturn gaps\n}\n\nfunction formatVariant(label: string, variant: VariantLayout): string {\n\treturn `${label}/${variant.name} (${variant.id})`\n}\n"],
  "mappings": "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",
  "names": []
}
