{"version":3,"sources":["../index.ts","../lib/add-manual-trace-hints.ts","../lib/zod/index.ts","../lib/manual-layout-pcb.ts","../lib/auto-layout-schematic.ts","../lib/utils/pairs.ts","../lib/apply-edit-event.ts","../lib/apply-edit-events.ts","../lib/derive-selector-from-pcb-port-id.ts","../lib/get-manual-trace-hint-from-event.ts"],"sourcesContent":["import { addManualTraceHints } from \"./lib/add-manual-trace-hints\"\nimport { manual_pcb_position, type ManualPcbPosition, type ManualPcbPositionInput } from \"./lib/zod\"\nimport type { PcbRouteHint, AnyCircuitElement } from \"circuit-json\"\nimport { manualLayoutPcb } from \"./lib/manual-layout-pcb\"\nimport { autoLayoutSchematic } from \"./lib/auto-layout-schematic\"\nimport { z } from \"zod\"\nimport type {\n  ManualEditFile,\n  ManualTraceHint,\n  MinimalLayoutBuilder,\n} from \"./lib/types\"\nimport type { EditEvent } from \"@tscircuit/manual-edit-events\"\nimport { applyEditEvents } from \"lib/apply-edit-events\"\n\nexport * from \"./lib/derive-selector-from-pcb-port-id\"\nexport * from \"./lib/get-manual-trace-hint-from-event\"\n\nexport {\n  manualLayoutPcb as internalManualLayoutPcb,\n  autoLayoutSchematic as internalAutoLayoutSchematic\n}\nexport type { ManualEditFile, ManualTraceHint, ManualPcbPosition }\n\ninterface InternalLayoutBuilderProps {\n  // ---- PCB ----\n  manual_pcb_placement_enabled: boolean\n  manual_pcb_placement_config?: {\n    positions: ManualPcbPosition[]\n  }\n\n  // ---- Schematic ----\n  auto_layout_schematic_enabled: boolean\n  auto_layout_schematic_config?: {\n    padding?: number | string\n  }\n\n  manual_trace_hints: ManualTraceHint[]\n\n  edit_events: EditEvent[]\n}\n\nexport interface LayoutBuilder extends InternalLayoutBuilderProps {\n  autoLayoutSchematic: (opts?: { padding?: number }) => this\n\n  manualPcbPlacement: (positions: ManualPcbPositionInput[]) => this\n\n  manualEdits: (edits: ManualEditFile) => this\n\n  extend: <const T extends MinimalLayoutBuilder>(\n    ext: T\n  ) => this & Omit<T, \"applyToSoup\">\n\n  applyToSoup: (soup: AnyCircuitElement[], bc: any) => AnyCircuitElement[]\n}\n\nexport const layout = () => {\n  const layoutBuilder: LayoutBuilder = {\n    manual_pcb_placement_enabled: false,\n    auto_layout_schematic_enabled: false,\n    manual_trace_hints: [],\n    edit_events: [],\n    autoLayoutSchematic(opts) {\n      this.auto_layout_schematic_enabled = true\n      this.auto_layout_schematic_config = opts\n      return this\n    },\n    manualPcbPlacement(positions) {\n      this.manual_pcb_placement_enabled = true\n      this.manual_pcb_placement_config = {\n        positions: z.array(manual_pcb_position).parse(positions),\n      }\n      return this\n    },\n    manualEdits(edits) {\n      if (edits.pcb_placements || (edits as any).pcb_positions) {\n        this.manualPcbPlacement?.(\n          edits.pcb_placements || (edits as any).pcb_positions\n        )\n      }\n      if (edits.manual_trace_hints) {\n        this.manual_trace_hints = edits.manual_trace_hints\n      }\n      return this\n    },\n    applyToSoup(soup, bc) {\n      if (this.auto_layout_schematic_enabled) {\n        // apply auto layout schematic\n        autoLayoutSchematic(soup, this.auto_layout_schematic_config, bc)\n      }\n      if (this.manual_pcb_placement_enabled) {\n        manualLayoutPcb(\n          soup as any,\n          this.manual_pcb_placement_config!.positions,\n          bc\n        )\n      }\n      if (this.manual_trace_hints) {\n        soup = addManualTraceHints(soup, this.manual_trace_hints, bc)\n      }\n      if (this.edit_events) {\n        applyEditEvents(soup, this.edit_events, bc)\n      }\n      return soup\n    },\n  } as Partial<LayoutBuilder> & InternalLayoutBuilderProps as LayoutBuilder\n\n  layoutBuilder.extend = (ext) => ({\n    ...layoutBuilder,\n    ...ext,\n    name: undefined,\n    applyToSoup: (soup, bc) => {\n      return ext.applyToSoup(layoutBuilder.applyToSoup(soup, bc))\n    },\n  })\n\n  return layoutBuilder\n}\n","import type { AnyCircuitElement, PcbTraceHint } from \"circuit-json\"\nimport type { ManualTraceHint } from \"./types\"\nimport { su } from \"@tscircuit/soup-util\"\n\nexport const addManualTraceHints = (\n  soup: AnyCircuitElement[],\n  manual_trace_hints: ManualTraceHint[],\n  bc: any\n) => {\n  // Add trace hints\n  for (const hint of manual_trace_hints) {\n    const pcb_port = su(soup as any).pcb_port.select(hint.pcb_port_selector)\n\n    if (!pcb_port) {\n      // TODO add pcb_error, indicate unused manual edit\n      continue\n    }\n\n    if (hint.offsets.length === 0) {\n      // TODO add pcb_error, indicate empty manual trace hint\n      continue\n    }\n\n    // Create the trace hint\n    const trace_hint: PcbTraceHint = {\n      type: \"pcb_trace_hint\",\n      pcb_trace_hint_id: bc.getId(\"pcb_trace_hint\"),\n      pcb_component_id: pcb_port.pcb_component_id,\n      pcb_port_id: pcb_port.pcb_port_id,\n      route: hint.offsets.map((offset) => ({\n        x: offset.x,\n        y: offset.y,\n        via: offset.via,\n        to_layer: (offset as any).to_layer,\n      })),\n    }\n\n    soup.push(trace_hint)\n  }\n\n  return soup\n}\n","import { z } from \"zod\"\nimport { point } from \"circuit-json\"\n\nexport const manual_pcb_position = z.object({\n  selector: z.string(),\n  relative_to: z\n    .string()\n    .optional()\n    .default(\"group_center\")\n    .describe(\"Can be a selector or 'group_center'\"),\n  center: point,\n})\n\nexport const manual_layout = z.object({\n  pcb_positions: z.array(manual_pcb_position).optional(),\n})\n\nexport type ManualPcbPosition = z.infer<typeof manual_pcb_position>\nexport type ManualPcbPositionInput = z.input<typeof manual_pcb_position>\n\nexport type ManualLayout = z.infer<typeof manual_layout>\nexport type ManualLayoutInput = z.input<typeof manual_layout>\n","import { applySelector, transformPCBElements } from \"@tscircuit/soup-util\"\nimport type {\n  AnyCircuitElement,\n  AnySourceComponent,\n  PcbComponent,\n} from \"circuit-json\"\nimport {\n  type Matrix,\n  compose,\n  identity,\n  translate,\n} from \"transformation-matrix\"\n\nexport const manualLayoutPcb = (\n  elements: AnyCircuitElement[],\n  positions: any[],\n  bc: any\n) => {\n  for (const pcb_position of positions) {\n    const selector_matches = applySelector(\n      elements,\n      pcb_position.selector\n    )\n    if (selector_matches.length === 0) {\n      elements.push({\n        pcb_placement_error_id: bc.getId(\"pcb_placement_error\"),\n        type: \"pcb_placement_error\",\n        message: `No elements found for selector: \"${pcb_position.selector}\"`,\n      })\n      continue\n    } else if (selector_matches.length > 1) {\n      elements.push({\n        pcb_placement_error_id: bc.getId(\"pcb_placement_error\"),\n        type: \"pcb_placement_error\",\n        message: `Multiple elements found for selector: \"${pcb_position.selector}\"`,\n        // TODO add sources\n      })\n      continue\n    }\n\n    const source_component = selector_matches[0] as AnySourceComponent\n    const pcb_component = elements.find(\n      (e) =>\n        e.type === \"pcb_component\" &&\n        e.source_component_id === source_component.source_component_id\n    ) as PcbComponent\n\n    if (!pcb_component) {\n      elements.push({\n        pcb_placement_error_id: bc.getId(\"pcb_placement_error\"),\n        type: \"pcb_placement_error\",\n        message: `No pcb_component found for source component: \"${source_component.source_component_id}\"`,\n      })\n      continue\n    }\n\n    const relative_to = pcb_position.relative_to ?? \"group_center\"\n\n    let mat: Matrix = identity()\n    if (relative_to === \"group_center\") {\n      const new_center = bc.convert(pcb_position.center) as unknown as {\n        x: number\n        y: number\n      }\n      mat = compose(\n        translate(\n          -(pcb_component.center?.x ?? 0),\n          -(pcb_component.center?.y ?? 0)\n        ),\n        translate(new_center.x, new_center.y)\n      )\n    } else {\n      throw new Error(\n        'relative_to is currently not supported for selectors (try using \"group_center\"'\n      )\n    }\n\n    transformPCBElements(\n      elements.filter(\n        (e) =>\n          \"pcb_component_id\" in e &&\n          e.pcb_component_id === pcb_component.pcb_component_id\n      ) as any,\n      mat\n    )\n  }\n}\n","import type { AnyCircuitElement, SourcePort, SourceTrace } from \"circuit-json\"\nimport * as AutoSch from \"@tscircuit/schematic-autolayout\"\nimport { pairs } from \"./utils/pairs\"\nimport { su } from \"@tscircuit/soup-util\"\n\nexport const getSourcePortsInRoute = (\n  trc: SourceTrace,\n  soup: AnyCircuitElement[]\n): SourcePort[] => {\n  const source_ports_in_route = []\n  for (const source_port_id of trc.connected_source_port_ids) {\n    const source_port = su(soup as any).source_port.get(source_port_id)\n    if (source_port) {\n      source_ports_in_route.push(source_port)\n    }\n  }\n  return source_ports_in_route\n}\n\nexport const autoLayoutSchematic = (\n  soup: AnyCircuitElement[],\n  config: any,\n  bc: any\n) => {\n  const scene = AutoSch.convertSoupToScene(soup as any)\n\n  // We have to manually add the connections in a simple way to avoid\n  // routing here\n  // TODO waiting on builder to add all the source_traces to the soup prior\n  // to calling layout methods\n  for (const trc of su(soup as any).source_trace.list()) {\n    const source_ports_in_route = getSourcePortsInRoute(trc, soup)\n    for (const [spa, spb] of pairs(source_ports_in_route)) {\n      scene.connections.push({\n        from: spa.source_port_id,\n        to: spb.source_port_id,\n      })\n    }\n  }\n\n  // console.log(JSON.stringify(scene))\n  const laid_out_scene = AutoSch.ascendingCentralLrBug1(scene)\n  // console.log(laid_out_scene)\n  AutoSch.mutateSoupForScene(soup as any, laid_out_scene)\n}\n","/**\n * Return pairs of adjacent elements in an array.\n */\nexport function pairs<T>(arr: Array<T>): Array<[T, T]> {\n  const result: Array<[T, T]> = []\n  for (let i = 0; i < arr.length - 1; i++) {\n    result.push([arr[i]!, arr[i + 1]!])\n  }\n  return result\n}\n","import type { EditEvent } from \"@tscircuit/manual-edit-events\"\nimport type { AnyCircuitElement, PcbTraceHint } from \"circuit-json\"\nimport { su } from \"@tscircuit/soup-util\"\n\nexport const applyEditEvent = (\n  soup: AnyCircuitElement[],\n  editEvent: EditEvent,\n  bc: any\n) => {\n  if (editEvent.pcb_edit_event_type === \"edit_component_location\") {\n    // TODO\n    return\n  } else if (editEvent.pcb_edit_event_type === \"edit_trace_hint\") {\n    const { route, pcb_trace_hint_id, pcb_port_id } = editEvent\n\n    const traceHint: PcbTraceHint = {\n      pcb_trace_hint_id: pcb_trace_hint_id ?? bc.getId(\"pcb_trace_hint\"),\n      type: \"pcb_trace_hint\",\n      pcb_port_id,\n      pcb_component_id: su(soup).pcb_component.getUsing({ pcb_port_id })\n        ?.pcb_component_id!,\n      route,\n    }\n\n    soup.push(traceHint)\n  }\n}\n","import type { EditEvent } from \"@tscircuit/manual-edit-events\"\nimport type { AnyCircuitElement } from \"circuit-json\"\nimport { applyEditEvent } from \"./apply-edit-event\"\n\nexport const applyEditEvents = (\n  soup: AnyCircuitElement[],\n  editEvents: EditEvent[],\n  bc: any\n) => {\n  for (const editEvent of editEvents) {\n    applyEditEvent(soup, editEvent, bc)\n  }\n}\n","import type { AnyCircuitElement } from \"circuit-json\"\nimport { su } from \"@tscircuit/soup-util\"\n\nexport const deriveSelectorFromPcbPortId = ({\n  soup,\n  pcb_port_id,\n}: {\n  soup: AnyCircuitElement[]\n  pcb_port_id: string\n}) => {\n  const pcb_component = su(soup as any).pcb_port.getUsing({\n    pcb_port_id,\n  })\n  if (!pcb_component) {\n    throw new Error(\n      `Could not find pcb component for pcb_port_id=\"${pcb_port_id}\"`\n    )\n  }\n  const source_component = su(soup as any).source_component.getUsing({\n    pcb_component_id: pcb_component?.pcb_component_id!,\n  })\n  if (!source_component) {\n    throw new Error(\n      `Could not find source component for pcb_component_id=\"${pcb_component.pcb_component_id}\"`\n    )\n  }\n  const source_port = su(soup as any).source_port.getUsing({\n    pcb_port_id,\n  })\n  if (!source_port) {\n    throw new Error(\n      `Could not find source port for pcb_port_id=\"${pcb_port_id}\"`\n    )\n  }\n\n  // TODO travel up the tree to make the selector more specific\n\n  return `.${source_component.name} > .${source_port.name}`\n}\n","import type { EditEvent } from \"@tscircuit/manual-edit-events\"\nimport type { ManualTraceHint } from \"./types\"\nimport { deriveSelectorFromPcbPortId } from \"./derive-selector-from-pcb-port-id\"\nimport type { AnyCircuitElement } from \"circuit-json\"\n\n/**\n * Get the manual trace hint from an edit event\n */\nexport const getManualTraceHintFromEvent = (\n  soup: AnyCircuitElement[],\n  editEvent: EditEvent\n): ManualTraceHint => {\n  if (editEvent.pcb_edit_event_type !== \"edit_trace_hint\") {\n    throw new Error(\"editEvent is not a trace hint\")\n  }\n\n  const {\n    created_at,\n    edit_event_id,\n    pcb_edit_event_type,\n    pcb_port_id,\n    route,\n    pcb_trace_hint_id,\n  } = editEvent\n\n  // Find the port position\n\n  const manualTraceHint: ManualTraceHint = {\n    pcb_port_selector: deriveSelectorFromPcbPortId({ soup, pcb_port_id }),\n    offsets: route.map((r) => ({\n      x: r.x,\n      y: r.y,\n      via: r.via,\n    })),\n  }\n\n  return manualTraceHint\n}\n"],"mappings":"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","names":["import_soup_util","import_soup_util","import_zod","import_soup_util","import_soup_util"]}