{
  "version": 3,
  "sources": ["../../src/app/ai/agents/evals2/scenarios/textStylePresetBreakpoint/helpers.ts"],
  "sourcesContent": ["import { assert } from \"@framerjs/shared\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport { PresetsListNode } from \"document/models/CanvasTree/nodes/PresetsListNode.ts\"\nimport { TemplateHelper } from \"document/models/CanvasTree/nodes/TemplateHelper.ts\"\nimport { TextStylePresetNode } from \"document/models/CanvasTree/nodes/TextStylePresetNode.ts\"\nimport { isTextStylePresetPrimaryNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isMaster } from \"document/models/CanvasTree/traits/WithTemplate.ts\"\nimport {\n\ttype BreakpointLabel,\n\tgetBreakpointsForPreset,\n\treplicaLabelsForCount,\n} from \"../../../traits/textStylePresetBreakpointSlots.ts\"\n\nconst headingPresetId = \"style-preset-h1\"\nconst headingPresetDefaultFontSize = \"48px\"\n\nexport interface BreakpointReplicaSpec {\n\tbreakpointWidth: number\n\tfontSize?: string\n\tparagraphSpacing?: number\n}\n\n/**\n * Inserts the \"Heading 1\" text style preset and, optionally, breakpoint replicas. Replica widths\n * must be descending: Framer assigns labels positionally based on replica count\n * (see `replicaLabelsForCount`).\n *\n * Must be called from a fixture `setup` hook; the fixture wraps the callback in `processFrame`.\n */\nexport function setupHeadingPreset(engine: VekterEngine, replicas: BreakpointReplicaSpec[] = []): void {\n\tconst listNode = PresetsListNode.ensure(engine.tree)\n\tconst primary = TextStylePresetNode.createDefault(\"h1\", {\n\t\tid: headingPresetId,\n\t\tname: \"Heading 1\",\n\t\tfontSize: headingPresetDefaultFontSize,\n\t})\n\tengine.tree.insertNode(primary, listNode.id)\n\n\tif (replicas.length === 0) return\n\n\tprimary.set({ isMaster: true, replicaInfo: null, originalid: null })\n\n\tfor (const spec of replicas) {\n\t\t// Refetch each iteration: the previous `insertNode` may have invalidated the prior reference.\n\t\tconst master = engine.tree.current(primary)\n\t\tassert(master && isMaster(master), `Expected '${headingPresetId}' to become a master node.`)\n\n\t\tconst overrides: Record<string, unknown> = { breakpointWidth: spec.breakpointWidth }\n\t\tif (spec.fontSize !== undefined) overrides.fontSize = spec.fontSize\n\t\tif (spec.paragraphSpacing !== undefined) overrides.paragraphSpacing = spec.paragraphSpacing\n\n\t\tconst replica = TemplateHelper.create(engine.tree, master, {\n\t\t\toverrides: { [master.id]: overrides },\n\t\t})\n\t\tengine.tree.insertNode(replica, listNode.id)\n\t}\n}\n\ninterface HeadingPresetState {\n\tprimary: TextStylePresetNode\n\tbreakpoints: readonly TextStylePresetNode[]\n\tbyLabel: Map<BreakpointLabel, TextStylePresetNode>\n}\n\n/**\n * Resolves the heading preset and its breakpoint replicas keyed by their current label. Labels are\n * positional and depend on the final replica count (see `replicaLabelsForCount`).\n */\nexport function getHeadingPresetState(engine: VekterEngine): HeadingPresetState {\n\tconst preset = engine.tree.get(headingPresetId)\n\tassert(isTextStylePresetPrimaryNode(preset), `Expected '${headingPresetId}' to be a primary text style preset.`)\n\n\tconst breakpoints = getBreakpointsForPreset(engine.tree, preset)\n\tconst labels = replicaLabelsForCount(breakpoints.length)\n\tconst byLabel = new Map<BreakpointLabel, TextStylePresetNode>()\n\tbreakpoints.forEach((replica, index) => {\n\t\tconst label = labels[index]\n\t\tif (label !== undefined) byLabel.set(label, replica)\n\t})\n\n\treturn { primary: preset, breakpoints, byLabel }\n}\n\n/**\n * Shared descending widths for breakpoint scenarios. The actual values are cosmetic \u2014 labels are\n * assigned by `replicaLabelsForCount` based on replica count, not width.\n */\nexport const breakpointWidths = {\n\tlarge: 1440,\n\tmedium: 1200,\n\tsmall: 810,\n\textraSmall: 390,\n} as const\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAaA,IAAM,kBAAkB;AACxB,IAAM,+BAA+B;AAe9B,SAAS,mBAAmB,QAAsB,WAAoC,CAAC,GAAS;AACtG,QAAM,WAAW,gBAAgB,OAAO,OAAO,IAAI;AACnD,QAAM,UAAU,oBAAoB,cAAc,MAAM;AAAA,IACvD,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,EACX,CAAC;AACD,SAAO,KAAK,WAAW,SAAS,SAAS,EAAE;AAE3C,MAAI,SAAS,WAAW,EAAG;AAE3B,UAAQ,IAAI,EAAE,UAAU,MAAM,aAAa,MAAM,YAAY,KAAK,CAAC;AAEnE,aAAW,QAAQ,UAAU;AAE5B,UAAM,SAAS,OAAO,KAAK,QAAQ,OAAO;AAC1C,WAAO,UAAU,SAAS,MAAM,GAAG,aAAa,eAAe,4BAA4B;AAE3F,UAAM,YAAqC,EAAE,iBAAiB,KAAK,gBAAgB;AACnF,QAAI,KAAK,aAAa,OAAW,WAAU,WAAW,KAAK;AAC3D,QAAI,KAAK,qBAAqB,OAAW,WAAU,mBAAmB,KAAK;AAE3E,UAAM,UAAU,eAAe,OAAO,OAAO,MAAM,QAAQ;AAAA,MAC1D,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,UAAU;AAAA,IACrC,CAAC;AACD,WAAO,KAAK,WAAW,SAAS,SAAS,EAAE;AAAA,EAC5C;AACD;AAYO,SAAS,sBAAsB,QAA0C;AAC/E,QAAM,SAAS,OAAO,KAAK,IAAI,eAAe;AAC9C,SAAO,6BAA6B,MAAM,GAAG,aAAa,eAAe,sCAAsC;AAE/G,QAAM,cAAc,wBAAwB,OAAO,MAAM,MAAM;AAC/D,QAAM,SAAS,sBAAsB,YAAY,MAAM;AACvD,QAAM,UAAU,oBAAI,IAA0C;AAC9D,cAAY,QAAQ,CAAC,SAAS,UAAU;AACvC,UAAM,QAAQ,OAAO,KAAK;AAC1B,QAAI,UAAU,OAAW,SAAQ,IAAI,OAAO,OAAO;AAAA,EACpD,CAAC;AAED,SAAO,EAAE,SAAS,QAAQ,aAAa,QAAQ;AAChD;AAMO,IAAM,mBAAmB;AAAA,EAC/B,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,YAAY;AACb;",
  "names": []
}
