@tscircuit/core 0.0.1898 → 0.0.1900

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.d.ts +1882 -0
  2. package/dist/index.js +176 -47
  3. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -4988,7 +4988,7 @@ var Via = class extends PrimitiveComponent2 {
4988
4988
  const connectedNetOrTrace = this._getConnectedNetOrTrace();
4989
4989
  const sourceTraceId = this.source_trace_id ?? (connectedNetOrTrace instanceof Net ? void 0 : connectedNetOrTrace?.source_trace_id);
4990
4990
  const sourceNetId = !sourceTraceId && connectedNetOrTrace instanceof Net ? connectedNetOrTrace.source_net_id : void 0;
4991
- const pcb_via = db.pcb_via.insert({
4991
+ const pcb_via3 = db.pcb_via.insert({
4992
4992
  x: position.x,
4993
4993
  y: position.y,
4994
4994
  hole_diameter: holeDiameter,
@@ -5003,7 +5003,7 @@ var Via = class extends PrimitiveComponent2 {
5003
5003
  ...sourceTraceId ? { source_trace_id: sourceTraceId } : {},
5004
5004
  ...sourceNetId ? { source_net_id: sourceNetId } : {}
5005
5005
  });
5006
- this.pcb_via_id = pcb_via.pcb_via_id;
5006
+ this.pcb_via_id = pcb_via3.pcb_via_id;
5007
5007
  }
5008
5008
  };
5009
5009
 
@@ -5185,6 +5185,11 @@ function Trace__findConnectedPorts(trace) {
5185
5185
  };
5186
5186
  }
5187
5187
 
5188
+ // lib/components/primitive-components/Trace/Trace_doInitialPcbManualTraceRender.ts
5189
+ import {
5190
+ pcb_via
5191
+ } from "circuit-json";
5192
+
5188
5193
  // lib/components/primitive-components/Trace/trace-utils/compute-trace-length.ts
5189
5194
  function getTraceLength(route) {
5190
5195
  let totalLength = 0;
@@ -5495,7 +5500,7 @@ function Trace_doInitialPcbManualTraceRender(trace) {
5495
5500
  }
5496
5501
  const width = trace._getExplicitTraceThickness() ?? trace.getSubcircuit()._parsedProps.minTraceWidth ?? jlcMinTolerances.min_trace_width;
5497
5502
  if (inflatedPcbTraces.length > 0) {
5498
- const { maybeFlipLayer } = trace._getPcbPrimitiveFlippedHelpers();
5503
+ const { isFlipped, maybeFlipLayer } = trace._getPcbPrimitiveFlippedHelpers();
5499
5504
  const transform2 = trace._computePcbGlobalTransformBeforeLayout();
5500
5505
  const insertedRoutes = [];
5501
5506
  const subcircuitConnectivityMapKey2 = trace.subcircuit_connectivity_map_key ?? db.source_trace.get(trace.source_trace_id)?.subcircuit_connectivity_map_key;
@@ -5541,10 +5546,11 @@ function Trace_doInitialPcbManualTraceRender(trace) {
5541
5546
  const point6 = transformedRoute[index];
5542
5547
  if (point6.route_type === "via") {
5543
5548
  const originalPoint = inflatedPcbTrace.route[index];
5544
- const inflatedPcbVia = findInflatedPcbViaForPoint(
5549
+ const originalPcbVia = findInflatedPcbViaForPoint(
5545
5550
  trace._inflatedPcbVias,
5546
5551
  originalPoint
5547
5552
  );
5553
+ const inflatedPcbVia = originalPcbVia ? pcb_via.parse(originalPcbVia) : void 0;
5548
5554
  const routePointViaDiameter = getViaDiameterFromRoutePoint(point6);
5549
5555
  const fromLayer = maybeFlipLayer(
5550
5556
  inflatedPcbVia?.from_layer ?? point6.from_layer
@@ -5571,7 +5577,9 @@ function Trace_doInitialPcbManualTraceRender(trace) {
5571
5577
  subcircuit_connectivity_map_key: inflatedPcbVia?.subcircuit_connectivity_map_key ?? subcircuitConnectivityMapKey2,
5572
5578
  net_is_assignable: inflatedPcbVia?.net_is_assignable,
5573
5579
  net_assigned: inflatedPcbVia?.net_assigned,
5574
- is_tented: inflatedPcbVia?.is_tented
5580
+ // Use the same footprint flip as the route and via layers above.
5581
+ tented_on_top: isFlipped ? inflatedPcbVia?.tented_on_bottom : inflatedPcbVia?.tented_on_top,
5582
+ tented_on_bottom: isFlipped ? inflatedPcbVia?.tented_on_top : inflatedPcbVia?.tented_on_bottom
5575
5583
  });
5576
5584
  }
5577
5585
  }
@@ -8003,6 +8011,9 @@ var underscorifyPortArrangement = (portArrangement) => {
8003
8011
 
8004
8012
  // lib/utils/createComponentsFromCircuitJson.ts
8005
8013
  import { getUnitVectorFromDirection as getUnitVectorFromDirection2 } from "@tscircuit/math-utils";
8014
+ import {
8015
+ pcb_via as pcb_via2
8016
+ } from "circuit-json";
8006
8017
 
8007
8018
  // lib/utils/normalizeTextForCircuitJson.ts
8008
8019
  function normalizeTextForCircuitJson(text) {
@@ -9455,7 +9466,10 @@ import {
9455
9466
  import { z as z8 } from "zod";
9456
9467
  var pcbViaProps = viaProps2.extend({
9457
9468
  layers: z8.array(layer_ref).optional(),
9458
- isTented: z8.boolean().optional()
9469
+ /** @deprecated Use tentedOnTop and tentedOnBottom instead. */
9470
+ isTented: z8.boolean().optional(),
9471
+ tentedOnTop: z8.boolean().optional(),
9472
+ tentedOnBottom: z8.boolean().optional()
9459
9473
  }).partial({
9460
9474
  fromLayer: true,
9461
9475
  toLayer: true
@@ -9514,10 +9528,17 @@ var PcbVia = class extends PrimitiveComponent2 {
9514
9528
  doInitialPcbPrimitiveRender() {
9515
9529
  if (this.root?.pcbDisabled) return;
9516
9530
  const { db } = this.root;
9517
- const { holeDiameter, outerDiameter, netIsAssignable, isTented } = this._parsedProps;
9531
+ const {
9532
+ holeDiameter,
9533
+ outerDiameter,
9534
+ netIsAssignable,
9535
+ isTented,
9536
+ tentedOnTop,
9537
+ tentedOnBottom
9538
+ } = this._parsedProps;
9518
9539
  const subcircuit = this.getSubcircuit();
9519
9540
  const position = this._getGlobalPcbPositionBeforeLayout();
9520
- const { maybeFlipLayer } = this._getPcbPrimitiveFlippedHelpers();
9541
+ const { isFlipped, maybeFlipLayer } = this._getPcbPrimitiveFlippedHelpers();
9521
9542
  const layers = this._getLayers().map(
9522
9543
  (layer) => maybeFlipLayer(layer)
9523
9544
  );
@@ -9535,7 +9556,9 @@ var PcbVia = class extends PrimitiveComponent2 {
9535
9556
  subcircuit_id: subcircuit?.subcircuit_id ?? void 0,
9536
9557
  pcb_group_id: this.getGroup()?.pcb_group_id ?? void 0,
9537
9558
  net_is_assignable: netIsAssignable,
9538
- is_tented: isTented
9559
+ // Use the same footprint flip as the via layers above.
9560
+ tented_on_top: (isFlipped ? tentedOnBottom : tentedOnTop) ?? isTented,
9561
+ tented_on_bottom: (isFlipped ? tentedOnTop : tentedOnBottom) ?? isTented
9539
9562
  });
9540
9563
  this.pcb_via_id = pcbVia.pcb_via_id;
9541
9564
  }
@@ -12028,6 +12051,7 @@ var createComponentsFromCircuitJson = ({
12028
12051
  })
12029
12052
  );
12030
12053
  } else if (elm.type === "pcb_via") {
12054
+ const via = pcb_via2.parse(elm);
12031
12055
  const layers = elm.layers ?? [];
12032
12056
  const pcbVia = new PcbVia({
12033
12057
  pcbX: elm.x,
@@ -12038,7 +12062,8 @@ var createComponentsFromCircuitJson = ({
12038
12062
  toLayer: elm.to_layer ?? layers[layers.length - 1],
12039
12063
  layers,
12040
12064
  netIsAssignable: elm.net_is_assignable,
12041
- isTented: elm.is_tented
12065
+ tentedOnTop: via.tented_on_top,
12066
+ tentedOnBottom: via.tented_on_bottom
12042
12067
  });
12043
12068
  pcbVia._importedPcbTraceId = elm.pcb_trace_id;
12044
12069
  components.push(pcbVia);
@@ -26555,6 +26580,7 @@ function normalizeFanoutPlanCorners(params) {
26555
26580
  if (new Set(params.plans.map((p) => p.connectionIndex)).size !== params.plans.length)
26556
26581
  return null;
26557
26582
  let plans = [...params.plans];
26583
+ let repairedSourceCorners = false;
26558
26584
  if (params.repairPlaneSourceCorners || params.repairSignalSourceCorners) {
26559
26585
  for (let index = 0; index < plans.length; index++) {
26560
26586
  const plan = plans[index];
@@ -26575,8 +26601,14 @@ function normalizeFanoutPlanCorners(params) {
26575
26601
  );
26576
26602
  if (!normalized) return null;
26577
26603
  plans[index] = normalized;
26604
+ repairedSourceCorners = true;
26578
26605
  }
26579
26606
  }
26607
+ if (repairedSourceCorners && params.rematchRepairedLengths) {
26608
+ const rematched = params.rematchRepairedLengths(plans);
26609
+ if (!rematched) return null;
26610
+ plans = rematched;
26611
+ }
26580
26612
  const sourceNormalizedPlans = [...plans];
26581
26613
  const pairs3 = getDeclaredDifferentialPairs(params.inputSrj);
26582
26614
  for (const plan of plans) {
@@ -33338,6 +33370,90 @@ function buildOutputSimpleRouteJson(params) {
33338
33370
  };
33339
33371
  }
33340
33372
 
33373
+ // node_modules/@tscircuit/fanout-solver/lib/dense-boundary-routing-policy.ts
33374
+ var minimumJointBoundaryBusCount = 5;
33375
+ var maximumJointBoundaryBusCount = 40;
33376
+ var maximumJointBoundaryConnectionCount = 64;
33377
+ var minimumLargeBoundaryOnlyBusCount = 10;
33378
+ var minimumMixedRoutingPlaneBusCount = 8;
33379
+ function shouldUseJointBoundaryViaReservation(boundaryBusConnectionCounts) {
33380
+ const boundaryBusCount = boundaryBusConnectionCounts.length;
33381
+ const boundaryConnectionCount = boundaryBusConnectionCounts.reduce(
33382
+ (sum, count) => sum + count,
33383
+ 0
33384
+ );
33385
+ return boundaryBusCount >= minimumJointBoundaryBusCount && boundaryBusCount <= maximumJointBoundaryBusCount && boundaryConnectionCount <= maximumJointBoundaryConnectionCount || boundaryBusCount === 4 && new Set(boundaryBusConnectionCounts).size > 1;
33386
+ }
33387
+ function getDenseBoundaryRoutingMode({
33388
+ boundaryBusConnectionCounts,
33389
+ planeBusCount
33390
+ }) {
33391
+ const boundaryBusCount = boundaryBusConnectionCounts.length;
33392
+ if (boundaryBusCount <= minimumLargeBoundaryOnlyBusCount - 1 && planeBusCount >= minimumMixedRoutingPlaneBusCount) {
33393
+ return "mixed_with_planes";
33394
+ }
33395
+ if (boundaryBusCount >= minimumLargeBoundaryOnlyBusCount && planeBusCount === 0 && shouldUseJointBoundaryViaReservation(boundaryBusConnectionCounts)) {
33396
+ return "large_boundary_only";
33397
+ }
33398
+ return null;
33399
+ }
33400
+ function getAverageBusBoundaryTargetTrack(bus) {
33401
+ if (!bus.exitEdge) {
33402
+ throw new Error(
33403
+ `Cannot order boundary bus ${bus.busId} without an exit edge`
33404
+ );
33405
+ }
33406
+ const boundaryDirection = getDirectionForExitEdge(bus.exitEdge);
33407
+ return bus.connections.reduce(
33408
+ (sum, connection) => sum + getBoundaryTargetTrack({ bus, connection, boundaryDirection }),
33409
+ 0
33410
+ ) / bus.connections.length;
33411
+ }
33412
+ function orderDenseBoundaryBusesForRouting({
33413
+ busesInRoutingOrder,
33414
+ busLayerAssignments,
33415
+ routingMode
33416
+ }) {
33417
+ if (routingMode !== "large_boundary_only") return [...busesInRoutingOrder];
33418
+ const singletonBuses = busesInRoutingOrder.filter(
33419
+ (bus) => bus.connections.length === 1
33420
+ );
33421
+ if (new Set(singletonBuses.map((bus) => bus.exitEdge)).size !== 1) {
33422
+ return [...busesInRoutingOrder];
33423
+ }
33424
+ const nonSingletonBuses = [
33425
+ ...busesInRoutingOrder.filter((bus) => bus.connections.length >= 8).toSorted(
33426
+ (first, second) => getAverageBusBoundaryTargetTrack(second) - getAverageBusBoundaryTargetTrack(first)
33427
+ ),
33428
+ ...busesInRoutingOrder.filter(
33429
+ (bus) => bus.connections.length > 1 && bus.connections.length < 8
33430
+ )
33431
+ ];
33432
+ const singletonLayerGroups = [];
33433
+ for (const bus of singletonBuses) {
33434
+ const targetLayer2 = busLayerAssignments[bus.busId];
33435
+ if (!targetLayer2) {
33436
+ throw new Error(`Cannot order boundary bus ${bus.busId} without a layer`);
33437
+ }
33438
+ let singletonLayerGroup = singletonLayerGroups.find(
33439
+ (candidate) => candidate.targetLayer === targetLayer2
33440
+ );
33441
+ if (!singletonLayerGroup) {
33442
+ singletonLayerGroup = { targetLayer: targetLayer2, buses: [] };
33443
+ singletonLayerGroups.push(singletonLayerGroup);
33444
+ }
33445
+ singletonLayerGroup.buses.push(bus);
33446
+ }
33447
+ return [
33448
+ ...nonSingletonBuses,
33449
+ ...singletonLayerGroups.flatMap(
33450
+ (singletonLayerGroup) => singletonLayerGroup.buses.toSorted(
33451
+ (first, second) => getAverageBusBoundaryTargetTrack(second) - getAverageBusBoundaryTargetTrack(first)
33452
+ )
33453
+ )
33454
+ ];
33455
+ }
33456
+
33341
33457
  // node_modules/@tscircuit/fanout-solver/lib/source-pad-reentry.ts
33342
33458
  var EPSILON15 = 1e-7;
33343
33459
  function getSourcePadReentries(plan, clearance) {
@@ -43740,9 +43856,6 @@ function busUsesCoordinatedWinding(bus) {
43740
43856
  )
43741
43857
  );
43742
43858
  }
43743
- function shouldUseJointBoundaryViaReservation(boundaryBusConnectionCounts) {
43744
- return boundaryBusConnectionCounts.length === 5 || boundaryBusConnectionCounts.length === 6 || boundaryBusConnectionCounts.length === 7 || boundaryBusConnectionCounts.length === 8 || boundaryBusConnectionCounts.length === 9 || boundaryBusConnectionCounts.length === 4 && new Set(boundaryBusConnectionCounts).size > 1;
43745
- }
43746
43859
  function shouldDeferSingletonBoundaryViaReservation(boundaryBusConnectionCounts) {
43747
43860
  const boundaryBusCount = boundaryBusConnectionCounts.length;
43748
43861
  const singletonBusCount = boundaryBusConnectionCounts.filter(
@@ -44813,13 +44926,20 @@ var FanoutSolver = class extends BaseSolver {
44813
44926
  const unroutablePlaneBusIds = /* @__PURE__ */ new Set();
44814
44927
  let failedBoundaryBus;
44815
44928
  let failedWideBoundaryBus;
44929
+ const boundaryBusConnectionCounts = boundaryBuses.map(
44930
+ (bus) => bus.connections.length
44931
+ );
44932
+ const denseBoundaryRoutingMode = getDenseBoundaryRoutingMode({
44933
+ boundaryBusConnectionCounts,
44934
+ planeBusCount: planeBuses.length
44935
+ });
44816
44936
  debugDense(
44817
44937
  "start",
44818
44938
  boundaryBuses.map((bus) => `${bus.busId}:${bus.connections.length}`),
44819
44939
  `planes:${planeBuses.length}`,
44820
44940
  `joint:${useJointBoundaryViaReservation}`
44821
44941
  );
44822
- if (boundaryBuses.length === 0 || boundaryBuses.length > 9 || planeBuses.length < 8 || boundaryBuses.some((bus) => !busUsesCoordinatedWinding(bus)) || planeBuses.some((bus) => bus.connections.length !== 1) || boundaryBuses.length + planeBuses.length !== params.busesInRoutingOrder.length) {
44942
+ if (boundaryBuses.length === 0 || denseBoundaryRoutingMode === null || boundaryBuses.some((bus) => !busUsesCoordinatedWinding(bus)) || planeBuses.some((bus) => bus.connections.length !== 1) || boundaryBuses.length + planeBuses.length !== params.busesInRoutingOrder.length) {
44823
44943
  return null;
44824
44944
  }
44825
44945
  const connectionNameByIndex = new Map(
@@ -44829,9 +44949,6 @@ var FanoutSolver = class extends BaseSolver {
44829
44949
  )
44830
44950
  )
44831
44951
  );
44832
- const boundaryBusConnectionCounts = boundaryBuses.map(
44833
- (bus) => bus.connections.length
44834
- );
44835
44952
  const singletonBoundaryBusCount = boundaryBusConnectionCounts.filter(
44836
44953
  (connectionCount) => connectionCount === 1
44837
44954
  ).length;
@@ -45132,17 +45249,21 @@ var FanoutSolver = class extends BaseSolver {
45132
45249
  });
45133
45250
  yield;
45134
45251
  if (seedViaPoints) {
45135
- const denseBoundaryBusesInRoutingOrder = [
45136
- ...hasForeignAllLayerObstaclesInComponent ? [] : multiLayerLeadingSingletonBuses,
45137
- ...boundaryBuses.filter(
45138
- (bus) => (hasForeignAllLayerObstaclesInComponent || !multiLayerLeadingSingletonBuses.includes(bus)) && !throughAllLeadingBuses.includes(bus)
45139
- ).flatMap((bus) => [
45140
- ...throughAllLeadingBuses.filter(
45141
- (candidate) => getContainingWideSourceField(candidate) === bus
45142
- ),
45143
- bus
45144
- ])
45145
- ];
45252
+ const denseBoundaryBusesInRoutingOrder = orderDenseBoundaryBusesForRouting({
45253
+ busesInRoutingOrder: [
45254
+ ...hasForeignAllLayerObstaclesInComponent ? [] : multiLayerLeadingSingletonBuses,
45255
+ ...boundaryBuses.filter(
45256
+ (bus) => (hasForeignAllLayerObstaclesInComponent || !multiLayerLeadingSingletonBuses.includes(bus)) && !throughAllLeadingBuses.includes(bus)
45257
+ ).flatMap((bus) => [
45258
+ ...throughAllLeadingBuses.filter(
45259
+ (candidate) => getContainingWideSourceField(candidate) === bus
45260
+ ),
45261
+ bus
45262
+ ])
45263
+ ],
45264
+ busLayerAssignments: params.busLayerAssignments,
45265
+ routingMode: denseBoundaryRoutingMode
45266
+ });
45146
45267
  const allWideBusesExitDirectly = wideBoundaryBuses.every(
45147
45268
  (bus) => bus.exitEdge && bus.direction === getDirectionForExitEdge(bus.exitEdge)
45148
45269
  );
@@ -45684,7 +45805,6 @@ var FanoutSolver = class extends BaseSolver {
45684
45805
  debugDense("route:complete", bus.busId, busPlans.length);
45685
45806
  return true;
45686
45807
  }.bind(this);
45687
- const firstBoundaryBus = denseBoundaryBusesInRoutingOrder[0];
45688
45808
  const routedBoundaryBuses = [];
45689
45809
  const reserveAllPlaneDogbonesAfterFirstWideBus = (bus) => {
45690
45810
  if (bus.connections.length >= 8 && !useConfiguredDensePlaneRouting && !useSameNetPlaneCopperStaging && process.env.FANOUT_DEBUG_NO_PLANE_EXPANSION !== "1" && activeBoundaryReservationPlaneBuses.length < planeBuses.length) {
@@ -45692,23 +45812,32 @@ var FanoutSolver = class extends BaseSolver {
45692
45812
  debugDense("plane-reservations:expanded", planeBuses.length);
45693
45813
  }
45694
45814
  };
45695
- const firstBoundaryBusRouted = yield* routeMatchedBoundaryBusSteps(firstBoundaryBus);
45696
- this.setInProgressPlans({
45697
- phase: "route-dense-boundary-buses",
45698
- plans: matchedPlans,
45699
- strategy: "default",
45700
- unitIndex: ++denseWorkUnitIndex,
45701
- unitCount: denseWorkUnitCount,
45702
- busId: firstBoundaryBus.busId
45703
- });
45704
- yield;
45705
- if (firstBoundaryBusRouted) {
45815
+ const firstBoundaryCandidates = denseBoundaryRoutingMode === "large_boundary_only" ? denseBoundaryBusesInRoutingOrder : denseBoundaryBusesInRoutingOrder.slice(0, 1);
45816
+ let firstBoundaryBus;
45817
+ for (const candidate of firstBoundaryCandidates) {
45818
+ const candidateRouted = yield* routeMatchedBoundaryBusSteps(candidate);
45819
+ this.setInProgressPlans({
45820
+ phase: "route-dense-boundary-buses",
45821
+ plans: matchedPlans,
45822
+ strategy: "default",
45823
+ unitIndex: ++denseWorkUnitIndex,
45824
+ unitCount: denseWorkUnitCount,
45825
+ busId: candidate.busId
45826
+ });
45827
+ yield;
45828
+ if (!candidateRouted) continue;
45829
+ firstBoundaryBus = candidate;
45830
+ break;
45831
+ }
45832
+ if (firstBoundaryBus) {
45706
45833
  routedBoundaryBuses.push(firstBoundaryBus);
45707
45834
  reserveAllPlaneDogbonesAfterFirstWideBus(firstBoundaryBus);
45708
45835
  } else {
45709
45836
  matchedRoutingSucceeded = false;
45710
45837
  }
45711
- const remainingBoundaryBuses = denseBoundaryBusesInRoutingOrder.slice(1);
45838
+ const remainingBoundaryBuses = denseBoundaryBusesInRoutingOrder.filter(
45839
+ (bus) => bus !== firstBoundaryBus
45840
+ );
45712
45841
  while (matchedRoutingSucceeded && remainingBoundaryBuses.length > 0) {
45713
45842
  const blockingSegments = matchedPlans.flatMap(
45714
45843
  (plan) => plan.segments.map((segment2) => ({
@@ -61704,7 +61833,7 @@ function Group_getRoutingPhasePlans(group) {
61704
61833
  var package_default = {
61705
61834
  name: "@tscircuit/core",
61706
61835
  type: "module",
61707
- version: "0.0.1897",
61836
+ version: "0.0.1899",
61708
61837
  types: "dist/index.d.ts",
61709
61838
  main: "dist/index.js",
61710
61839
  module: "dist/index.js",
@@ -61744,7 +61873,7 @@ var package_default = {
61744
61873
  "@tscircuit/common": "^0.0.20",
61745
61874
  "@tscircuit/copper-pour-solver": "^0.0.54",
61746
61875
  "@tscircuit/create-fdm-enclosure": "0.0.4",
61747
- "@tscircuit/fanout-solver": "0.0.75",
61876
+ "@tscircuit/fanout-solver": "0.0.76",
61748
61877
  "@tscircuit/footprinter": "^0.0.426",
61749
61878
  "@tscircuit/image-utils": "^0.0.8",
61750
61879
  "@tscircuit/implicit-copper-pour-solver": "github:tscircuit/implicit-copper-pour-solver#a5cbbda0cd65fd4707c5c1af25779837c25aba92",
@@ -61757,7 +61886,7 @@ var package_default = {
61757
61886
  "@tscircuit/math-utils": "^0.0.36",
61758
61887
  "@tscircuit/miniflex": "^0.0.4",
61759
61888
  "@tscircuit/ngspice-spice-engine": "^0.0.20",
61760
- "@tscircuit/props": "^0.0.649",
61889
+ "@tscircuit/props": "^0.0.653",
61761
61890
  "@tscircuit/schematic-match-adapt": "^0.0.18",
61762
61891
  "@tscircuit/schematic-trace-solver": "^0.0.191",
61763
61892
  "@tscircuit/solver-utils": "^0.0.16",
@@ -61773,7 +61902,7 @@ var package_default = {
61773
61902
  "bun-match-svg": "0.0.12",
61774
61903
  "calculate-elbow": "^0.0.12",
61775
61904
  "chokidar-cli": "^3.0.0",
61776
- "circuit-json": "^0.0.484",
61905
+ "circuit-json": "^0.0.487",
61777
61906
  "circuit-json-to-bpc": "^0.0.13",
61778
61907
  "circuit-json-to-connectivity-map": "^0.0.30",
61779
61908
  "circuit-json-to-gltf": "^0.0.124",
@@ -61836,8 +61965,8 @@ var package_default = {
61836
61965
  },
61837
61966
  overrides: {
61838
61967
  "@tscircuit/circuit-json-util": "^0.0.113",
61839
- "@tscircuit/props": "^0.0.649",
61840
- "circuit-json": "^0.0.484"
61968
+ "@tscircuit/props": "^0.0.653",
61969
+ "circuit-json": "^0.0.487"
61841
61970
  }
61842
61971
  };
61843
61972
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/core",
3
3
  "type": "module",
4
- "version": "0.0.1898",
4
+ "version": "0.0.1900",
5
5
  "types": "dist/index.d.ts",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
@@ -41,7 +41,7 @@
41
41
  "@tscircuit/common": "^0.0.20",
42
42
  "@tscircuit/copper-pour-solver": "^0.0.54",
43
43
  "@tscircuit/create-fdm-enclosure": "0.0.4",
44
- "@tscircuit/fanout-solver": "0.0.75",
44
+ "@tscircuit/fanout-solver": "0.0.76",
45
45
  "@tscircuit/footprinter": "^0.0.426",
46
46
  "@tscircuit/image-utils": "^0.0.8",
47
47
  "@tscircuit/implicit-copper-pour-solver": "github:tscircuit/implicit-copper-pour-solver#a5cbbda0cd65fd4707c5c1af25779837c25aba92",
@@ -54,7 +54,7 @@
54
54
  "@tscircuit/math-utils": "^0.0.36",
55
55
  "@tscircuit/miniflex": "^0.0.4",
56
56
  "@tscircuit/ngspice-spice-engine": "^0.0.20",
57
- "@tscircuit/props": "^0.0.649",
57
+ "@tscircuit/props": "^0.0.653",
58
58
  "@tscircuit/schematic-match-adapt": "^0.0.18",
59
59
  "@tscircuit/schematic-trace-solver": "^0.0.191",
60
60
  "@tscircuit/solver-utils": "^0.0.16",
@@ -70,7 +70,7 @@
70
70
  "bun-match-svg": "0.0.12",
71
71
  "calculate-elbow": "^0.0.12",
72
72
  "chokidar-cli": "^3.0.0",
73
- "circuit-json": "^0.0.484",
73
+ "circuit-json": "^0.0.487",
74
74
  "circuit-json-to-bpc": "^0.0.13",
75
75
  "circuit-json-to-connectivity-map": "^0.0.30",
76
76
  "circuit-json-to-gltf": "^0.0.124",
@@ -133,7 +133,7 @@
133
133
  },
134
134
  "overrides": {
135
135
  "@tscircuit/circuit-json-util": "^0.0.113",
136
- "@tscircuit/props": "^0.0.649",
137
- "circuit-json": "^0.0.484"
136
+ "@tscircuit/props": "^0.0.653",
137
+ "circuit-json": "^0.0.487"
138
138
  }
139
139
  }