easyeda 0.0.253 → 0.0.255

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.
package/dist/main.cjs CHANGED
@@ -997,7 +997,7 @@ var import_promises2 = __toESM(require("fs/promises"), 1);
997
997
  var package_default = {
998
998
  name: "easyeda",
999
999
  type: "module",
1000
- version: "0.0.252",
1000
+ version: "0.0.254",
1001
1001
  files: [
1002
1002
  "dist"
1003
1003
  ],
@@ -1035,7 +1035,7 @@ var package_default = {
1035
1035
  "@biomejs/biome": "^1.9.4",
1036
1036
  "@tscircuit/alphabet": "^0.0.22",
1037
1037
  "@tscircuit/circuit-json-util": "^0.0.90",
1038
- "@tscircuit/mm": "^0.0.8",
1038
+ "@tscircuit/mm": "^0.0.9",
1039
1039
  "@types/bun": "latest",
1040
1040
  "bun-match-svg": "^0.0.13",
1041
1041
  "circuit-json-to-gltf": "^0.0.87",
@@ -6047,6 +6047,11 @@ var unitToMm = {
6047
6047
  ft: 304.8,
6048
6048
  feet: 304.8
6049
6049
  };
6050
+ var mmNumberFormatter = new Intl.NumberFormat("en-US", {
6051
+ useGrouping: false,
6052
+ notation: "standard",
6053
+ maximumFractionDigits: 12
6054
+ });
6050
6055
  var mm = (n) => {
6051
6056
  let unit = typeof n === "number" ? "mm" : n.replace(/^[^a-zA-Z]+/g, "").toLowerCase();
6052
6057
  if (!unit)
@@ -6058,11 +6063,15 @@ var mm = (n) => {
6058
6063
  throw new Error(`Unsupported unit: ${unit}`);
6059
6064
  };
6060
6065
  var mmStr = (n) => {
6061
- return `${mm(n)}mm`;
6066
+ return `${mmNumberFormatter.format(mm(n))}mm`;
6067
+ };
6068
+ var mil2mm = (mil) => {
6069
+ if (typeof mil === "number")
6070
+ return mm(`${mil}mil`);
6071
+ if (mil.match(/^\d+$/))
6072
+ return mm(`${mil}mil`);
6073
+ return mm(mil);
6062
6074
  };
6063
-
6064
- // lib/constants.ts
6065
- var DEFAULT_PCB_THICKNESS_MM = 1.6;
6066
6075
 
6067
6076
  // lib/math/arc-utils.ts
6068
6077
  function generateArcFromSweep(startX, startY, endX, endY, radius, largeArcFlag, sweepFlag) {
@@ -6189,15 +6198,13 @@ var normalizeSymbolName = (name) => {
6189
6198
  return trimmedName;
6190
6199
  };
6191
6200
 
6201
+ // lib/constants.ts
6202
+ var DEFAULT_PCB_THICKNESS_MM = 1.6;
6203
+
6192
6204
  // lib/convert-easyeda-json-to-tscircuit-soup-json.ts
6193
6205
  var EASYEDA_STEP_MODEL_URL = "https://modules.easyeda.com/qAxj6KHrDKw4blvCG8QJPs7Y";
6194
6206
  var EASYEDA_OBJ_MODEL_URL = "https://modules.easyeda.com/3dmodel";
6195
6207
  var TSCIRCUIT_MODEL_CDN_URL = "https://modelcdn.tscircuit.com/easyeda_models";
6196
- var mil2mm = (mil) => {
6197
- if (typeof mil === "number") return mm(`${mil}mil`);
6198
- if (mil.match(/^\d+$/)) return mm(`${mil}mil`);
6199
- return mm(mil);
6200
- };
6201
6208
  var milx10 = (mil10) => {
6202
6209
  if (typeof mil10 === "number") return mil2mm(mil10) * 10;
6203
6210
  if (mil10.match(/^\d+$/)) return mil2mm(mil10) * 10;
@@ -6329,7 +6336,8 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
6329
6336
  shouldRecenter = true,
6330
6337
  cadPositionXMm,
6331
6338
  cadPositionYMm,
6332
- cadPositionZMm
6339
+ cadPositionZMm,
6340
+ showDesignator = false
6333
6341
  } = {}) => {
6334
6342
  const resolvedCadPositionZMm = cadPositionZMm ?? getCadPositionZMmFromMetadata(easyEdaJson);
6335
6343
  const circuitElements = [];
@@ -6518,6 +6526,7 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
6518
6526
  ).forEach((sr, index) => {
6519
6527
  circuitElements.push(handleCutout(sr, index));
6520
6528
  });
6529
+ let hasFoundDesignator = false;
6521
6530
  easyEdaJson.packageDetail.dataStr.shape.forEach((shape, index) => {
6522
6531
  if (shape.type === "TRACK") {
6523
6532
  if (!isCourtyardLayer(shape.layer)) {
@@ -6529,12 +6538,22 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
6529
6538
  }
6530
6539
  } else if (shape.type === "TEXT") {
6531
6540
  if (isCourtyardLayer(shape.layer)) return;
6541
+ let text = shape.text;
6542
+ const designatorPrefix = easyEdaJson.dataStr.head.c_para.pre || "U";
6543
+ const normalizedPrefix = designatorPrefix.replace(/\?/g, "");
6544
+ const trimmedText = text.trim();
6545
+ const isDesignator = trimmedText === designatorPrefix || trimmedText === `${normalizedPrefix}?` || trimmedText === normalizedPrefix;
6546
+ if (isDesignator) {
6547
+ if (!showDesignator) return;
6548
+ text = "{NAME}";
6549
+ hasFoundDesignator = true;
6550
+ }
6532
6551
  circuitElements.push(
6533
6552
  pcb_silkscreen_text.parse({
6534
6553
  type: "pcb_silkscreen_text",
6535
6554
  pcb_silkscreen_text_id: `pcb_silkscreen_text_${index + 1}`,
6536
6555
  pcb_component_id: "pcb_component_1",
6537
- text: normalizeSymbolName(shape.text),
6556
+ text,
6538
6557
  anchor_position: {
6539
6558
  x: mil2mm(shape.x),
6540
6559
  y: mil2mm(shape.y)
@@ -6544,12 +6563,31 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
6544
6563
  C: "center",
6545
6564
  R: "bottom_right"
6546
6565
  }[shape.textAnchor ?? "L"],
6547
- font_size: shape.size_mm ? shape.size_mm : void 0,
6566
+ font_size: shape.size_mm || 1,
6548
6567
  layer: "top"
6549
6568
  })
6550
6569
  );
6551
6570
  }
6552
6571
  });
6572
+ if (!hasFoundDesignator && showDesignator) {
6573
+ const bbox = easyEdaJson.packageDetail.dataStr.BBox;
6574
+ circuitElements.push(
6575
+ pcb_silkscreen_text.parse({
6576
+ type: "pcb_silkscreen_text",
6577
+ pcb_silkscreen_text_id: `pcb_silkscreen_text_designator_fallback`,
6578
+ pcb_component_id: "pcb_component_1",
6579
+ text: "{NAME}",
6580
+ anchor_position: {
6581
+ x: milx10(bbox.x + bbox.width / 2),
6582
+ y: milx10(bbox.y) - 1
6583
+ // 1mm above top edge
6584
+ },
6585
+ anchor_alignment: "center",
6586
+ font_size: 1,
6587
+ layer: "top"
6588
+ })
6589
+ );
6590
+ }
6553
6591
  const pcbElements = circuitElements.filter(
6554
6592
  (e) => e.type === "pcb_smtpad" || e.type === "pcb_plated_hole" || e.type === "pcb_hole" || e.type === "pcb_via" || e.type === "pcb_courtyard_outline" || e.type === "pcb_silkscreen_path" || e.type === "pcb_silkscreen_text"
6555
6593
  );
@@ -7716,8 +7754,10 @@ var generateFootprintTsx = (circuitJson) => {
7716
7754
  );
7717
7755
  }
7718
7756
  for (const silkscreenText of silkscreenTexts) {
7757
+ const isRefDes = silkscreenText.text === "{NAME}";
7758
+ const textValue = isRefDes ? "{props.name}" : JSON.stringify(silkscreenText.text);
7719
7759
  elementStrings.push(
7720
- `<silkscreentext text="${silkscreenText.text}" pcbX="${mmStr(silkscreenText.anchor_position.x)}" pcbY="${mmStr(silkscreenText.anchor_position.y)}" anchorAlignment="${silkscreenText.anchor_alignment}" ${silkscreenText.font_size ? `fontSize="${mmStr(silkscreenText.font_size)}"` : ""} />`
7760
+ `<silkscreentext text=${textValue} pcbX="${mmStr(silkscreenText.anchor_position.x)}" pcbY="${mmStr(silkscreenText.anchor_position.y)}" anchorAlignment="${silkscreenText.anchor_alignment}" ${silkscreenText.font_size ? `fontSize="${mmStr(silkscreenText.font_size)}"` : ""} />`
7721
7761
  );
7722
7762
  }
7723
7763
  for (const courtyardOutline of courtyardOutlines) {
@@ -7801,7 +7841,8 @@ var convertBetterEasyToTsx = async ({
7801
7841
  shouldRecenter: true,
7802
7842
  cadPositionXMm: cadPlacement?.positionXMm,
7803
7843
  cadPositionYMm: cadPlacement?.positionYMm,
7804
- cadPositionZMm: cadPlacement?.positionZMm
7844
+ cadPositionZMm: cadPlacement?.positionZMm,
7845
+ showDesignator: true
7805
7846
  });
7806
7847
  const [cadComponent] = su(circuitJson).cad_component.list();
7807
7848
  if (cadComponent) {