{
  "version": 3,
  "sources": ["../../src/app/ai/agents/evals2/scenarios/overlay/componentInstanceOverlay.eval.ts"],
  "sourcesContent": ["import { assert } from \"@framerjs/shared\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport { isShowOverlayAction } from \"document/models/CanvasTree/actions/overlayActions.ts\"\nimport { isTriggerEventAction } from \"document/models/CanvasTree/actions/triggerEventActions.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport {\n\tisCodeComponentNode,\n\tisFrameNode,\n\tisOverlayNode,\n\tisSmartComponentNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isFixedOrRelativeOverlay } from \"document/models/CanvasTree/nodes/utils/overlayHelpers.ts\"\nimport type { EventHandlerVariableDefinition } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { EventAction } from \"document/models/EventAction.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { agentEvalAsset } from \"../../harness/asset.ts\"\nimport { createEvalExportZipFixture } from \"../../harness/fixture.ts\"\n\nconst fixture = createEvalExportZipFixture(\n\t\"component-instance-overlay\",\n\tagentEvalAsset(\"./component-instance-overlay.fixture.zip\"),\n\t{ runtimeTarget: \"browser\" },\n)\n\nconst buttonComponentId: NodeID = \"AhoC6Bk6F\"\nconst buttonSourceTriggerId: NodeID = \"cfliFAwrP\"\nconst buttonInstanceId: NodeID = \"oDdzkA0wb\"\nconst createOverlayRequestId = \"p3pfzEGm3\"\nconst switchToHoverRequestId = \"gKjygEaeo\"\nconst buttonComponentName = \"Button\"\n\nfunction getButtonComponent(engine: VekterEngine) {\n\tconst node = engine.tree.get(buttonComponentId)\n\tassert(isSmartComponentNode(node, true), `Expected '${buttonComponentId}' to be a component.`)\n\tassert(node.isLoaded(), `Expected '${buttonComponentId}' component to be loaded.`)\n\treturn node\n}\n\nfunction getButtonSourceTrigger(engine: VekterEngine) {\n\tconst node = engine.tree.get(buttonSourceTriggerId)\n\tassert(isFrameNode(node), `Expected '${buttonSourceTriggerId}' to be the component source trigger.`)\n\treturn node\n}\n\nfunction getButtonInstance(engine: VekterEngine) {\n\tconst node = engine.tree.get(buttonInstanceId)\n\tassert(isCodeComponentNode(node), `Expected '${buttonInstanceId}' to be a component instance.`)\n\treturn node\n}\n\nfunction getEventHandlerVariables(engine: VekterEngine): EventHandlerVariableDefinition[] {\n\treturn getButtonComponent(engine).variables.filter(\n\t\t(variable): variable is EventHandlerVariableDefinition => variable.type === ControlType.EventHandler,\n\t)\n}\n\nfunction getSingleClickEventHandlerVariable(engine: VekterEngine): EventHandlerVariableDefinition {\n\tconst variables = getEventHandlerVariables(engine)\n\texpect(variables).toHaveLength(1)\n\tconst variable = variables.at(0)\n\tassert(variable, \"Expected one event handler variable.\")\n\texpect(variable.name).toEqual(expect.stringMatching(/click/iu))\n\treturn variable\n}\n\nfunction getTriggerEventActions(actions: readonly EventAction[] | undefined) {\n\treturn actions?.filter(isTriggerEventAction) ?? []\n}\n\nfunction getShowOverlayActionsForVariable(engine: VekterEngine, variableId: string) {\n\tconst instance = getButtonInstance(engine)\n\tconst controlProp = instance.getRawControlProp(variableId)\n\tif (controlProp?.type !== ControlType.EventHandler || !Array.isArray(controlProp.value)) return []\n\treturn controlProp.value.filter(isShowOverlayAction)\n}\n\nfunction getOverlayFromInstanceEvent(engine: VekterEngine, variableId: string): CanvasNode {\n\tconst actions = getShowOverlayActionsForVariable(engine, variableId)\n\texpect(actions).toHaveLength(1)\n\tconst action = actions.at(0)\n\tassert(action, \"Expected a show overlay action.\")\n\tconst overlay = engine.tree.get(action.controls.overlay.value)\n\tassert(isFixedOrRelativeOverlay(overlay), \"Expected the instance action to point to an overlay.\")\n\treturn overlay\n}\n\nfunction getOverlaysUnderInstance(engine: VekterEngine) {\n\treturn getButtonInstance(engine).children.filter(isFixedOrRelativeOverlay)\n}\n\nevaluation(\n\t\"Overlay: Create Overlay For Component Instance Without Exposed Handler\",\n\tfixture,\n\t{\n\t\tid: \"component-instance-overlay-create-missing-handler\",\n\t\truntimeTarget: \"browser\",\n\t\trequestId: createOverlayRequestId,\n\t\tmaxSteps: 8,\n\t},\n\t({ engine, report, tools }) => {\n\t\ttools.reportReplayChecks(report, { requestId: createOverlayRequestId })\n\n\t\treport.correctness.scored(\"reads the component source\", () => {\n\t\t\texpect(tools.hasNodeLookup(buttonComponentId)).toBe(true)\n\t\t})\n\t\treport.correctness.scored(\"creates one exposed click event handler\", () => {\n\t\t\tgetSingleClickEventHandlerVariable(engine)\n\t\t})\n\t\treport.correctness.scored(\"wires the source trigger to the exposed handler\", () => {\n\t\t\tconst variable = getSingleClickEventHandlerVariable(engine)\n\t\t\tconst trigger = getButtonSourceTrigger(engine)\n\t\t\tconst triggerActions = getTriggerEventActions(trigger.onTap)\n\n\t\t\texpect(triggerActions).toHaveLength(1)\n\t\t\texpect(triggerActions.at(0)?.controls.id.value).toBe(variable.id)\n\t\t})\n\t\treport.correctness.scored(\"creates one overlay under the component instance\", () => {\n\t\t\tconst variable = getSingleClickEventHandlerVariable(engine)\n\t\t\tconst overlay = getOverlayFromInstanceEvent(engine, variable.id)\n\n\t\t\texpect(overlay.parentid).toBe(buttonInstanceId)\n\t\t\texpect(getOverlaysUnderInstance(engine)).toHaveLength(1)\n\t\t})\n\t\treport.correctness.scored(\"creates a fixed overlay with a dismissible backdrop\", () => {\n\t\t\tconst variable = getSingleClickEventHandlerVariable(engine)\n\t\t\tconst overlay = getOverlayFromInstanceEvent(engine, variable.id)\n\t\t\tassert(isOverlayNode(overlay), \"Expected the created overlay to be fixed.\")\n\n\t\t\texpect(overlay.backdropFillEnabled).toBe(true)\n\t\t\texpect(overlay.backdropDismissible).toBe(true)\n\t\t})\n\t\treport.correctness.scored(\"binds the instance event to show the overlay\", () => {\n\t\t\tconst variable = getSingleClickEventHandlerVariable(engine)\n\t\t\tconst actions = getShowOverlayActionsForVariable(engine, variable.id)\n\n\t\t\texpect(actions).toHaveLength(1)\n\t\t})\n\t},\n)\n\nevaluation(\n\t\"Overlay: Switch Component Instance Overlay Trigger To Hover\",\n\tfixture,\n\t{\n\t\tid: \"component-instance-overlay-switch-source-trigger-to-hover\",\n\t\truntimeTarget: \"browser\",\n\t\trequestId: switchToHoverRequestId,\n\t\tmaxSteps: 6,\n\t},\n\t({ engine, report, tools }) => {\n\t\ttools.reportReplayChecks(report, { requestId: switchToHoverRequestId })\n\n\t\treport.correctness.scored(\"reads the component source\", () => {\n\t\t\texpect(tools.hasNodeLookup(buttonComponentId)).toBe(true)\n\t\t})\n\t\treport.correctness.scored(\"keeps a single exposed click event handler\", () => {\n\t\t\tgetSingleClickEventHandlerVariable(engine)\n\t\t})\n\t\treport.correctness.scored(\"moves the source trigger from tap to hover\", () => {\n\t\t\tconst variable = getSingleClickEventHandlerVariable(engine)\n\t\t\tconst trigger = getButtonSourceTrigger(engine)\n\t\t\tconst tapActions = getTriggerEventActions(trigger.onTap)\n\t\t\tconst hoverActions = getTriggerEventActions(trigger.onMouseEnter)\n\n\t\t\texpect(tapActions).toHaveLength(0)\n\t\t\texpect(hoverActions).toHaveLength(1)\n\t\t\texpect(hoverActions.at(0)?.controls.id.value).toBe(variable.id)\n\t\t})\n\t\treport.correctness.scored(\"keeps the instance show overlay binding on the exposed handler\", () => {\n\t\t\tconst variable = getSingleClickEventHandlerVariable(engine)\n\t\t\tconst overlay = getOverlayFromInstanceEvent(engine, variable.id)\n\n\t\t\texpect(overlay.parentid).toBe(buttonInstanceId)\n\t\t\texpect(getOverlaysUnderInstance(engine)).toHaveLength(1)\n\t\t})\n\t},\n)\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAM,UAAU;AAAA,EACf;AAAA,EACA,eAAe,0CAA0C;AAAA,EACzD,EAAE,eAAe,UAAU;AAC5B;AAEA,IAAM,oBAA4B;AAClC,IAAM,wBAAgC;AACtC,IAAM,mBAA2B;AACjC,IAAM,yBAAyB;AAC/B,IAAM,yBAAyB;AAG/B,SAAS,mBAAmB,QAAsB;AACjD,QAAM,OAAO,OAAO,KAAK,IAAI,iBAAiB;AAC9C,SAAO,qBAAqB,MAAM,IAAI,GAAG,aAAa,iBAAiB,sBAAsB;AAC7F,SAAO,KAAK,SAAS,GAAG,aAAa,iBAAiB,2BAA2B;AACjF,SAAO;AACR;AAEA,SAAS,uBAAuB,QAAsB;AACrD,QAAM,OAAO,OAAO,KAAK,IAAI,qBAAqB;AAClD,SAAO,YAAY,IAAI,GAAG,aAAa,qBAAqB,uCAAuC;AACnG,SAAO;AACR;AAEA,SAAS,kBAAkB,QAAsB;AAChD,QAAM,OAAO,OAAO,KAAK,IAAI,gBAAgB;AAC7C,SAAO,oBAAoB,IAAI,GAAG,aAAa,gBAAgB,+BAA+B;AAC9F,SAAO;AACR;AAEA,SAAS,yBAAyB,QAAwD;AACzF,SAAO,mBAAmB,MAAM,EAAE,UAAU;AAAA,IAC3C,CAAC,aAAyD,SAAS;AAAA,EACpE;AACD;AAEA,SAAS,mCAAmC,QAAsD;AACjG,QAAM,YAAY,yBAAyB,MAAM;AACjD,SAAO,SAAS,EAAE,aAAa,CAAC;AAChC,QAAM,WAAW,UAAU,GAAG,CAAC;AAC/B,SAAO,UAAU,sCAAsC;AACvD,SAAO,SAAS,IAAI,EAAE,QAAQ,OAAO,eAAe,SAAS,CAAC;AAC9D,SAAO;AACR;AAEA,SAAS,uBAAuB,SAA6C;AAC5E,SAAO,SAAS,OAAO,oBAAoB,KAAK,CAAC;AAClD;AAEA,SAAS,iCAAiC,QAAsB,YAAoB;AACnF,QAAM,WAAW,kBAAkB,MAAM;AACzC,QAAM,cAAc,SAAS,kBAAkB,UAAU;AACzD,MAAI,aAAa,8CAAqC,CAAC,MAAM,QAAQ,YAAY,KAAK,EAAG,QAAO,CAAC;AACjG,SAAO,YAAY,MAAM,OAAO,mBAAmB;AACpD;AAEA,SAAS,4BAA4B,QAAsB,YAAgC;AAC1F,QAAM,UAAU,iCAAiC,QAAQ,UAAU;AACnE,SAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,QAAM,SAAS,QAAQ,GAAG,CAAC;AAC3B,SAAO,QAAQ,iCAAiC;AAChD,QAAM,UAAU,OAAO,KAAK,IAAI,OAAO,SAAS,QAAQ,KAAK;AAC7D,SAAO,yBAAyB,OAAO,GAAG,sDAAsD;AAChG,SAAO;AACR;AAEA,SAAS,yBAAyB,QAAsB;AACvD,SAAO,kBAAkB,MAAM,EAAE,SAAS,OAAO,wBAAwB;AAC1E;AAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,eAAe;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,EACX;AAAA,EACA,CAAC,EAAE,QAAQ,QAAQ,MAAM,MAAM;AAC9B,UAAM,mBAAmB,QAAQ,EAAE,WAAW,uBAAuB,CAAC;AAEtE,WAAO,YAAY,OAAO,8BAA8B,MAAM;AAC7D,aAAO,MAAM,cAAc,iBAAiB,CAAC,EAAE,KAAK,IAAI;AAAA,IACzD,CAAC;AACD,WAAO,YAAY,OAAO,2CAA2C,MAAM;AAC1E,yCAAmC,MAAM;AAAA,IAC1C,CAAC;AACD,WAAO,YAAY,OAAO,mDAAmD,MAAM;AAClF,YAAM,WAAW,mCAAmC,MAAM;AAC1D,YAAM,UAAU,uBAAuB,MAAM;AAC7C,YAAM,iBAAiB,uBAAuB,QAAQ,KAAK;AAE3D,aAAO,cAAc,EAAE,aAAa,CAAC;AACrC,aAAO,eAAe,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,EAAE,KAAK,SAAS,EAAE;AAAA,IACjE,CAAC;AACD,WAAO,YAAY,OAAO,oDAAoD,MAAM;AACnF,YAAM,WAAW,mCAAmC,MAAM;AAC1D,YAAM,UAAU,4BAA4B,QAAQ,SAAS,EAAE;AAE/D,aAAO,QAAQ,QAAQ,EAAE,KAAK,gBAAgB;AAC9C,aAAO,yBAAyB,MAAM,CAAC,EAAE,aAAa,CAAC;AAAA,IACxD,CAAC;AACD,WAAO,YAAY,OAAO,uDAAuD,MAAM;AACtF,YAAM,WAAW,mCAAmC,MAAM;AAC1D,YAAM,UAAU,4BAA4B,QAAQ,SAAS,EAAE;AAC/D,aAAO,cAAc,OAAO,GAAG,2CAA2C;AAE1E,aAAO,QAAQ,mBAAmB,EAAE,KAAK,IAAI;AAC7C,aAAO,QAAQ,mBAAmB,EAAE,KAAK,IAAI;AAAA,IAC9C,CAAC;AACD,WAAO,YAAY,OAAO,gDAAgD,MAAM;AAC/E,YAAM,WAAW,mCAAmC,MAAM;AAC1D,YAAM,UAAU,iCAAiC,QAAQ,SAAS,EAAE;AAEpE,aAAO,OAAO,EAAE,aAAa,CAAC;AAAA,IAC/B,CAAC;AAAA,EACF;AACD;AAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,eAAe;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,EACX;AAAA,EACA,CAAC,EAAE,QAAQ,QAAQ,MAAM,MAAM;AAC9B,UAAM,mBAAmB,QAAQ,EAAE,WAAW,uBAAuB,CAAC;AAEtE,WAAO,YAAY,OAAO,8BAA8B,MAAM;AAC7D,aAAO,MAAM,cAAc,iBAAiB,CAAC,EAAE,KAAK,IAAI;AAAA,IACzD,CAAC;AACD,WAAO,YAAY,OAAO,8CAA8C,MAAM;AAC7E,yCAAmC,MAAM;AAAA,IAC1C,CAAC;AACD,WAAO,YAAY,OAAO,8CAA8C,MAAM;AAC7E,YAAM,WAAW,mCAAmC,MAAM;AAC1D,YAAM,UAAU,uBAAuB,MAAM;AAC7C,YAAM,aAAa,uBAAuB,QAAQ,KAAK;AACvD,YAAM,eAAe,uBAAuB,QAAQ,YAAY;AAEhE,aAAO,UAAU,EAAE,aAAa,CAAC;AACjC,aAAO,YAAY,EAAE,aAAa,CAAC;AACnC,aAAO,aAAa,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,EAAE,KAAK,SAAS,EAAE;AAAA,IAC/D,CAAC;AACD,WAAO,YAAY,OAAO,kEAAkE,MAAM;AACjG,YAAM,WAAW,mCAAmC,MAAM;AAC1D,YAAM,UAAU,4BAA4B,QAAQ,SAAS,EAAE;AAE/D,aAAO,QAAQ,QAAQ,EAAE,KAAK,gBAAgB;AAC9C,aAAO,yBAAyB,MAAM,CAAC,EAAE,aAAa,CAAC;AAAA,IACxD,CAAC;AAAA,EACF;AACD;",
  "names": []
}
