@tscircuit/pcb-viewer 1.11.276 → 1.11.278

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/index.js CHANGED
@@ -7075,6 +7075,166 @@ function getExpandedStroke(strokeInput, defaultWidth) {
7075
7075
 
7076
7076
  // src/lib/convert-element-to-primitive.ts
7077
7077
  import { distance } from "circuit-json";
7078
+
7079
+ // src/lib/element-to-primitive-converters/convert-smtpad-rect.ts
7080
+ var convertSmtpadRect = (element, metadata) => {
7081
+ const { x, y, width, height, layer, rect_border_radius } = element;
7082
+ const corner_radius = element.corner_radius ?? rect_border_radius ?? 0;
7083
+ const primitives = [
7084
+ {
7085
+ _pcb_drawing_object_id: getNewPcbDrawingObjectId("rect"),
7086
+ pcb_drawing_type: "rect",
7087
+ x,
7088
+ y,
7089
+ w: width,
7090
+ h: height,
7091
+ layer: layer || "top",
7092
+ _element: element,
7093
+ _parent_pcb_component: metadata._parent_pcb_component,
7094
+ _parent_source_component: metadata._parent_source_component,
7095
+ _source_port: metadata._source_port,
7096
+ roundness: corner_radius,
7097
+ ...element.shape === "rotated_rect" && element.ccw_rotation !== void 0 ? { ccw_rotation: element.ccw_rotation } : {}
7098
+ }
7099
+ ];
7100
+ if (element.is_covered_with_solder_mask) {
7101
+ const maskLayer = layer === "bottom" ? "soldermask_with_copper_bottom" : "soldermask_with_copper_top";
7102
+ const maskPrimitiveBase = {
7103
+ _pcb_drawing_object_id: getNewPcbDrawingObjectId("rect"),
7104
+ pcb_drawing_type: "rect",
7105
+ x,
7106
+ y,
7107
+ w: width,
7108
+ h: height,
7109
+ layer: maskLayer,
7110
+ _element: element,
7111
+ _parent_pcb_component: metadata._parent_pcb_component,
7112
+ _parent_source_component: metadata._parent_source_component,
7113
+ _source_port: metadata._source_port,
7114
+ roundness: corner_radius,
7115
+ ...element.shape === "rotated_rect" && element.ccw_rotation !== void 0 ? { ccw_rotation: element.ccw_rotation } : {}
7116
+ };
7117
+ const maskPrimitive = {
7118
+ ...maskPrimitiveBase,
7119
+ ..."solder_mask_color" in element && element.solder_mask_color ? { color: element.solder_mask_color } : {}
7120
+ };
7121
+ primitives.push(maskPrimitive);
7122
+ }
7123
+ return primitives;
7124
+ };
7125
+
7126
+ // src/lib/element-to-primitive-converters/convert-smtpad-circle.ts
7127
+ var convertSmtpadCircle = (element, metadata) => {
7128
+ const { x, y, radius, layer } = element;
7129
+ const primitives = [
7130
+ {
7131
+ _pcb_drawing_object_id: getNewPcbDrawingObjectId("circle"),
7132
+ pcb_drawing_type: "circle",
7133
+ x,
7134
+ y,
7135
+ r: radius,
7136
+ layer: layer || "top",
7137
+ _element: element,
7138
+ _parent_pcb_component: metadata._parent_pcb_component,
7139
+ _parent_source_component: metadata._parent_source_component,
7140
+ _source_port: metadata._source_port
7141
+ }
7142
+ ];
7143
+ if (element.is_covered_with_solder_mask) {
7144
+ const maskLayer = layer === "bottom" ? "soldermask_with_copper_bottom" : "soldermask_with_copper_top";
7145
+ const maskPrimitive = {
7146
+ _pcb_drawing_object_id: getNewPcbDrawingObjectId("circle"),
7147
+ pcb_drawing_type: "circle",
7148
+ x,
7149
+ y,
7150
+ r: radius,
7151
+ layer: maskLayer,
7152
+ _element: element,
7153
+ _parent_pcb_component: metadata._parent_pcb_component,
7154
+ _parent_source_component: metadata._parent_source_component,
7155
+ _source_port: metadata._source_port,
7156
+ ..."solder_mask_color" in element && element.solder_mask_color ? { color: element.solder_mask_color } : {}
7157
+ };
7158
+ primitives.push(maskPrimitive);
7159
+ }
7160
+ return primitives;
7161
+ };
7162
+
7163
+ // src/lib/element-to-primitive-converters/convert-smtpad-polygon.ts
7164
+ var convertSmtpadPolygon = (element, metadata) => {
7165
+ const { layer, points } = element;
7166
+ const primitives = [
7167
+ {
7168
+ _pcb_drawing_object_id: getNewPcbDrawingObjectId("polygon"),
7169
+ pcb_drawing_type: "polygon",
7170
+ points: normalizePolygonPoints(points),
7171
+ layer: layer || "top",
7172
+ _element: element,
7173
+ _parent_pcb_component: metadata._parent_pcb_component,
7174
+ _parent_source_component: metadata._parent_source_component,
7175
+ _source_port: metadata._source_port
7176
+ }
7177
+ ];
7178
+ if (element.is_covered_with_solder_mask) {
7179
+ const maskLayer = layer === "bottom" ? "soldermask_with_copper_bottom" : "soldermask_with_copper_top";
7180
+ const maskPrimitive = {
7181
+ _pcb_drawing_object_id: getNewPcbDrawingObjectId("polygon"),
7182
+ pcb_drawing_type: "polygon",
7183
+ points: normalizePolygonPoints(points),
7184
+ layer: maskLayer,
7185
+ _element: element,
7186
+ _parent_pcb_component: metadata._parent_pcb_component,
7187
+ _parent_source_component: metadata._parent_source_component,
7188
+ _source_port: metadata._source_port,
7189
+ ..."solder_mask_color" in element && element.solder_mask_color ? { color: element.solder_mask_color } : {}
7190
+ };
7191
+ primitives.push(maskPrimitive);
7192
+ }
7193
+ return primitives;
7194
+ };
7195
+
7196
+ // src/lib/element-to-primitive-converters/convert-smtpad-pill.ts
7197
+ var convertSmtpadPill = (element, metadata) => {
7198
+ const { x, y, width, height, layer } = element;
7199
+ const primitives = [
7200
+ {
7201
+ _pcb_drawing_object_id: getNewPcbDrawingObjectId("pill"),
7202
+ pcb_drawing_type: "pill",
7203
+ x,
7204
+ y,
7205
+ w: width,
7206
+ h: height,
7207
+ layer: layer || "top",
7208
+ _element: element,
7209
+ _parent_pcb_component: metadata._parent_pcb_component,
7210
+ _parent_source_component: metadata._parent_source_component,
7211
+ _source_port: metadata._source_port,
7212
+ ...element.shape === "rotated_pill" && element.ccw_rotation !== void 0 ? { ccw_rotation: element.ccw_rotation } : {}
7213
+ }
7214
+ ];
7215
+ if (element.is_covered_with_solder_mask) {
7216
+ const maskLayer = layer === "bottom" ? "soldermask_with_copper_bottom" : "soldermask_with_copper_top";
7217
+ const maskPrimitive = {
7218
+ _pcb_drawing_object_id: getNewPcbDrawingObjectId("pill"),
7219
+ pcb_drawing_type: "pill",
7220
+ x,
7221
+ y,
7222
+ w: width,
7223
+ h: height,
7224
+ layer: maskLayer,
7225
+ _element: element,
7226
+ _parent_pcb_component: metadata._parent_pcb_component,
7227
+ _parent_source_component: metadata._parent_source_component,
7228
+ _source_port: metadata._source_port,
7229
+ ...element.shape === "rotated_pill" && element.ccw_rotation !== void 0 ? { ccw_rotation: element.ccw_rotation } : {},
7230
+ ..."solder_mask_color" in element && element.solder_mask_color ? { color: element.solder_mask_color } : {}
7231
+ };
7232
+ primitives.push(maskPrimitive);
7233
+ }
7234
+ return primitives;
7235
+ };
7236
+
7237
+ // src/lib/convert-element-to-primitive.ts
7078
7238
  var globalPcbDrawingObjectCount = 0;
7079
7239
  var getNewPcbDrawingObjectId = (prefix) => `${prefix}_${globalPcbDrawingObjectCount++}`;
7080
7240
  var normalizePolygonPoints = (points) => (points ?? []).map((point) => ({
@@ -7094,51 +7254,57 @@ var convertElementToPrimitives = (element, allElements) => {
7094
7254
  ) : void 0;
7095
7255
  switch (element.type) {
7096
7256
  case "pcb_panel": {
7097
- const { width, height } = element;
7257
+ const { width, height, center } = element;
7258
+ const cx = center?.x ?? 0;
7259
+ const cy = center?.y ?? 0;
7098
7260
  return [
7261
+ // Bottom line
7099
7262
  {
7100
7263
  _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,
7101
7264
  pcb_drawing_type: "line",
7102
- x1: 0,
7103
- y1: 0,
7104
- x2: width,
7105
- y2: 0,
7265
+ x1: cx - width / 2,
7266
+ y1: cy - height / 2,
7267
+ x2: cx + width / 2,
7268
+ y2: cy - height / 2,
7106
7269
  width: 1,
7107
7270
  zoomIndependent: true,
7108
7271
  layer: "board",
7109
7272
  _element: element
7110
7273
  },
7274
+ // Top line
7111
7275
  {
7112
7276
  _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,
7113
7277
  pcb_drawing_type: "line",
7114
- x1: 0,
7115
- y1: height,
7116
- x2: width,
7117
- y2: height,
7278
+ x1: cx - width / 2,
7279
+ y1: cy + height / 2,
7280
+ x2: cx + width / 2,
7281
+ y2: cy + height / 2,
7118
7282
  width: 1,
7119
7283
  zoomIndependent: true,
7120
7284
  layer: "board",
7121
7285
  _element: element
7122
7286
  },
7287
+ // Left line
7123
7288
  {
7124
7289
  _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,
7125
7290
  pcb_drawing_type: "line",
7126
- x1: 0,
7127
- y1: 0,
7128
- x2: 0,
7129
- y2: height,
7291
+ x1: cx - width / 2,
7292
+ y1: cy - height / 2,
7293
+ x2: cx - width / 2,
7294
+ y2: cy + height / 2,
7130
7295
  width: 1,
7131
7296
  zoomIndependent: true,
7132
7297
  layer: "board",
7133
7298
  _element: element
7134
7299
  },
7300
+ // Right line
7135
7301
  {
7136
7302
  _pcb_drawing_object_id: `line_${globalPcbDrawingObjectCount++}`,
7137
7303
  pcb_drawing_type: "line",
7138
- x1: width,
7139
- y1: 0,
7140
- x2: width,
7141
- y2: height,
7304
+ x1: cx + width / 2,
7305
+ y1: cy - height / 2,
7306
+ x2: cx + width / 2,
7307
+ y2: cy + height / 2,
7142
7308
  width: 1,
7143
7309
  zoomIndependent: true,
7144
7310
  layer: "board",
@@ -7261,157 +7427,19 @@ var convertElementToPrimitives = (element, allElements) => {
7261
7427
  return primitives;
7262
7428
  }
7263
7429
  case "pcb_smtpad": {
7430
+ const metadata = {
7431
+ _parent_pcb_component,
7432
+ _parent_source_component,
7433
+ _source_port
7434
+ };
7264
7435
  if (element.shape === "rect" || element.shape === "rotated_rect") {
7265
- const { shape, x, y, width, height, layer, rect_border_radius } = element;
7266
- const corner_radius = element.corner_radius ?? rect_border_radius ?? 0;
7267
- const primitives = [
7268
- {
7269
- _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,
7270
- pcb_drawing_type: "rect",
7271
- x,
7272
- y,
7273
- w: width,
7274
- h: height,
7275
- layer: layer || "top",
7276
- _element: element,
7277
- _parent_pcb_component,
7278
- _parent_source_component,
7279
- _source_port,
7280
- ccw_rotation: element.ccw_rotation,
7281
- roundness: corner_radius
7282
- }
7283
- ];
7284
- if (element.is_covered_with_solder_mask) {
7285
- const maskLayer = layer === "bottom" ? "soldermask_with_copper_bottom" : "soldermask_with_copper_top";
7286
- const maskPrimitive = {
7287
- _pcb_drawing_object_id: `rect_${globalPcbDrawingObjectCount++}`,
7288
- pcb_drawing_type: "rect",
7289
- x,
7290
- y,
7291
- w: width,
7292
- h: height,
7293
- layer: maskLayer,
7294
- _element: element,
7295
- _parent_pcb_component,
7296
- _parent_source_component,
7297
- _source_port,
7298
- ccw_rotation: element.ccw_rotation,
7299
- roundness: corner_radius
7300
- };
7301
- if (element.solder_mask_color) {
7302
- maskPrimitive.color = element.solder_mask_color;
7303
- }
7304
- primitives.push(maskPrimitive);
7305
- }
7306
- return primitives;
7436
+ return convertSmtpadRect(element, metadata);
7307
7437
  } else if (element.shape === "circle") {
7308
- const { x, y, radius, layer } = element;
7309
- const primitives = [
7310
- {
7311
- _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,
7312
- pcb_drawing_type: "circle",
7313
- x,
7314
- y,
7315
- r: radius,
7316
- layer: layer || "top",
7317
- _element: element,
7318
- _parent_pcb_component,
7319
- _parent_source_component,
7320
- _source_port
7321
- }
7322
- ];
7323
- if (element.is_covered_with_solder_mask) {
7324
- const maskLayer = layer === "bottom" ? "soldermask_with_copper_bottom" : "soldermask_with_copper_top";
7325
- const maskPrimitive = {
7326
- _pcb_drawing_object_id: `circle_${globalPcbDrawingObjectCount++}`,
7327
- pcb_drawing_type: "circle",
7328
- x,
7329
- y,
7330
- r: radius,
7331
- layer: maskLayer,
7332
- _element: element,
7333
- _parent_pcb_component,
7334
- _parent_source_component,
7335
- _source_port
7336
- };
7337
- if (element.solder_mask_color) {
7338
- maskPrimitive.color = element.solder_mask_color;
7339
- }
7340
- primitives.push(maskPrimitive);
7341
- }
7342
- return primitives;
7438
+ return convertSmtpadCircle(element, metadata);
7343
7439
  } else if (element.shape === "polygon") {
7344
- const { layer, points } = element;
7345
- const primitives = [
7346
- {
7347
- _pcb_drawing_object_id: `polygon_${globalPcbDrawingObjectCount++}`,
7348
- pcb_drawing_type: "polygon",
7349
- points: normalizePolygonPoints(points),
7350
- layer: layer || "top",
7351
- _element: element,
7352
- _parent_pcb_component,
7353
- _parent_source_component,
7354
- _source_port
7355
- }
7356
- ];
7357
- if (element.is_covered_with_solder_mask) {
7358
- const maskLayer = layer === "bottom" ? "soldermask_with_copper_bottom" : "soldermask_with_copper_top";
7359
- const maskPrimitive = {
7360
- _pcb_drawing_object_id: `polygon_${globalPcbDrawingObjectCount++}`,
7361
- pcb_drawing_type: "polygon",
7362
- points: normalizePolygonPoints(points),
7363
- layer: maskLayer,
7364
- _element: element,
7365
- _parent_pcb_component,
7366
- _parent_source_component,
7367
- _source_port
7368
- };
7369
- if (element.solder_mask_color) {
7370
- maskPrimitive.color = element.solder_mask_color;
7371
- }
7372
- primitives.push(maskPrimitive);
7373
- }
7374
- return primitives;
7440
+ return convertSmtpadPolygon(element, metadata);
7375
7441
  } else if (element.shape === "pill" || element.shape === "rotated_pill") {
7376
- const { x, y, width, height, layer } = element;
7377
- const primitives = [
7378
- {
7379
- _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,
7380
- pcb_drawing_type: "pill",
7381
- x,
7382
- y,
7383
- w: width,
7384
- h: height,
7385
- layer: layer || "top",
7386
- _element: element,
7387
- _parent_pcb_component,
7388
- _parent_source_component,
7389
- _source_port,
7390
- ccw_rotation: element.ccw_rotation
7391
- }
7392
- ];
7393
- if (element.is_covered_with_solder_mask) {
7394
- const maskLayer = layer === "bottom" ? "soldermask_with_copper_bottom" : "soldermask_with_copper_top";
7395
- const maskPrimitive = {
7396
- _pcb_drawing_object_id: `pill_${globalPcbDrawingObjectCount++}`,
7397
- pcb_drawing_type: "pill",
7398
- x,
7399
- y,
7400
- w: width,
7401
- h: height,
7402
- layer: maskLayer,
7403
- _element: element,
7404
- _parent_pcb_component,
7405
- _parent_source_component,
7406
- _source_port,
7407
- ccw_rotation: element.ccw_rotation
7408
- };
7409
- if (element.solder_mask_color) {
7410
- maskPrimitive.color = element.solder_mask_color;
7411
- }
7412
- primitives.push(maskPrimitive);
7413
- }
7414
- return primitives;
7442
+ return convertSmtpadPill(element, metadata);
7415
7443
  }
7416
7444
  return [];
7417
7445
  }
@@ -13305,7 +13333,7 @@ import { css as css3 } from "@emotion/css";
13305
13333
  // package.json
13306
13334
  var package_default = {
13307
13335
  name: "@tscircuit/pcb-viewer",
13308
- version: "1.11.275",
13336
+ version: "1.11.277",
13309
13337
  main: "dist/index.js",
13310
13338
  type: "module",
13311
13339
  repository: "tscircuit/pcb-viewer",
@@ -13342,7 +13370,7 @@ var package_default = {
13342
13370
  "react-cosmos-plugin-vite": "7.0.0-beta.0",
13343
13371
  "react-dom": "19.1.0",
13344
13372
  "react-use": "^17.4.0",
13345
- tscircuit: "^0.0.758",
13373
+ tscircuit: "^0.0.1015",
13346
13374
  tsup: "^8.0.2",
13347
13375
  "type-fest": "^3.0.0",
13348
13376
  typescript: "^5.4.4",