@tscircuit/core 0.0.1030 → 0.0.1031
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 +117 -8
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -9996,13 +9996,31 @@ var NormalComponent3 = class extends PrimitiveComponent2 {
|
|
|
9996
9996
|
if (!this.pcb_component_id) return;
|
|
9997
9997
|
const { db } = this.root;
|
|
9998
9998
|
const props = this._parsedProps;
|
|
9999
|
-
const
|
|
9999
|
+
const rawProps = this.props;
|
|
10000
|
+
const pcbLeftEdgeX = props.pcbLeftEdgeX ?? rawProps.pcbLeftEdgeX;
|
|
10001
|
+
const pcbRightEdgeX = props.pcbRightEdgeX ?? rawProps.pcbRightEdgeX;
|
|
10002
|
+
const pcbTopEdgeY = props.pcbTopEdgeY ?? rawProps.pcbTopEdgeY;
|
|
10003
|
+
const pcbBottomEdgeY = props.pcbBottomEdgeY ?? rawProps.pcbBottomEdgeY;
|
|
10004
|
+
const hasExplicitPcbPosition = props.pcbX !== void 0 || props.pcbY !== void 0 || pcbLeftEdgeX !== void 0 || pcbRightEdgeX !== void 0 || pcbTopEdgeY !== void 0 || pcbBottomEdgeY !== void 0;
|
|
10000
10005
|
if (!hasExplicitPcbPosition) return;
|
|
10006
|
+
if (pcbLeftEdgeX !== void 0 && pcbRightEdgeX !== void 0) {
|
|
10007
|
+
throw new Error(
|
|
10008
|
+
`${this.componentName} cannot set both pcbLeftEdgeX and pcbRightEdgeX`
|
|
10009
|
+
);
|
|
10010
|
+
}
|
|
10011
|
+
if (pcbTopEdgeY !== void 0 && pcbBottomEdgeY !== void 0) {
|
|
10012
|
+
throw new Error(
|
|
10013
|
+
`${this.componentName} cannot set both pcbTopEdgeY and pcbBottomEdgeY`
|
|
10014
|
+
);
|
|
10015
|
+
}
|
|
10016
|
+
const pcbComponent = db.pcb_component.get(this.pcb_component_id);
|
|
10017
|
+
const componentWidth = pcbComponent?.width ?? 0;
|
|
10018
|
+
const componentHeight = pcbComponent?.height ?? 0;
|
|
10001
10019
|
const parentGroup = this.getGroup();
|
|
10002
10020
|
const positionedRelativeToGroupId = parentGroup?.pcb_group_id ?? void 0;
|
|
10003
10021
|
const positionedRelativeToBoardId = positionedRelativeToGroupId ? void 0 : this._getBoard()?.pcb_board_id ?? void 0;
|
|
10004
|
-
const resolvedPcbX = this._resolvedPcbCalcOffsetX ?? (props.pcbX !== void 0 ? this._resolvePcbCoordinate(props.pcbX, "pcbX") : void 0);
|
|
10005
|
-
const resolvedPcbY = this._resolvedPcbCalcOffsetY ?? (props.pcbY !== void 0 ? this._resolvePcbCoordinate(props.pcbY, "pcbY") : void 0);
|
|
10022
|
+
const resolvedPcbX = this._resolvedPcbCalcOffsetX ?? (props.pcbX !== void 0 ? this._resolvePcbCoordinate(props.pcbX, "pcbX") : pcbLeftEdgeX !== void 0 ? this._resolvePcbCoordinate(pcbLeftEdgeX, "pcbX") + componentWidth / 2 : pcbRightEdgeX !== void 0 ? this._resolvePcbCoordinate(pcbRightEdgeX, "pcbX") - componentWidth / 2 : void 0);
|
|
10023
|
+
const resolvedPcbY = this._resolvedPcbCalcOffsetY ?? (props.pcbY !== void 0 ? this._resolvePcbCoordinate(props.pcbY, "pcbY") : pcbTopEdgeY !== void 0 ? this._resolvePcbCoordinate(pcbTopEdgeY, "pcbY") - componentHeight / 2 : pcbBottomEdgeY !== void 0 ? this._resolvePcbCoordinate(pcbBottomEdgeY, "pcbY") + componentHeight / 2 : void 0);
|
|
10006
10024
|
db.pcb_component.update(this.pcb_component_id, {
|
|
10007
10025
|
position_mode: "relative_to_group_anchor",
|
|
10008
10026
|
positioned_relative_to_pcb_group_id: positionedRelativeToGroupId,
|
|
@@ -10031,7 +10049,8 @@ var NormalComponent3 = class extends PrimitiveComponent2 {
|
|
|
10031
10049
|
* and should not be moved by automatic packing/layout algorithms
|
|
10032
10050
|
*/
|
|
10033
10051
|
isRelativelyPositioned() {
|
|
10034
|
-
|
|
10052
|
+
const rawProps = this.props;
|
|
10053
|
+
return this._parsedProps.pcbX !== void 0 || this._parsedProps.pcbY !== void 0 || this._parsedProps.pcbLeftEdgeX !== void 0 || this._parsedProps.pcbRightEdgeX !== void 0 || this._parsedProps.pcbTopEdgeY !== void 0 || this._parsedProps.pcbBottomEdgeY !== void 0 || rawProps.pcbLeftEdgeX !== void 0 || rawProps.pcbRightEdgeX !== void 0 || rawProps.pcbTopEdgeY !== void 0 || rawProps.pcbBottomEdgeY !== void 0;
|
|
10035
10054
|
}
|
|
10036
10055
|
};
|
|
10037
10056
|
|
|
@@ -11210,8 +11229,8 @@ function Group_doInitialPcbCalcPlacementResolution(group) {
|
|
|
11210
11229
|
const inDegree = /* @__PURE__ */ new Map();
|
|
11211
11230
|
const dependents = /* @__PURE__ */ new Map();
|
|
11212
11231
|
for (const component of allNormalComponents) {
|
|
11232
|
+
if (!shouldResolvePlacementInCalcPhase(component)) continue;
|
|
11213
11233
|
const refs = getComponentRefsForCalcPlacement(component);
|
|
11214
|
-
if (refs.size === 0) continue;
|
|
11215
11234
|
if (!component.name) {
|
|
11216
11235
|
throw new Error(
|
|
11217
11236
|
`Invalid pcb position expression for ${component.getString()}: component-relative calc requires the component to have a name`
|
|
@@ -11271,6 +11290,23 @@ function Group_doInitialPcbCalcPlacementResolution(group) {
|
|
|
11271
11290
|
if (!pcbComponent) return;
|
|
11272
11291
|
const rawPcbX = component._parsedProps.pcbX;
|
|
11273
11292
|
const rawPcbY = component._parsedProps.pcbY;
|
|
11293
|
+
const rawComponentProps = component.props;
|
|
11294
|
+
const rawPcbLeftEdgeX = component._parsedProps.pcbLeftEdgeX ?? rawComponentProps.pcbLeftEdgeX;
|
|
11295
|
+
const rawPcbRightEdgeX = component._parsedProps.pcbRightEdgeX ?? rawComponentProps.pcbRightEdgeX;
|
|
11296
|
+
const rawPcbTopEdgeY = component._parsedProps.pcbTopEdgeY ?? rawComponentProps.pcbTopEdgeY;
|
|
11297
|
+
const rawPcbBottomEdgeY = component._parsedProps.pcbBottomEdgeY ?? rawComponentProps.pcbBottomEdgeY;
|
|
11298
|
+
if (rawPcbLeftEdgeX !== void 0 && rawPcbRightEdgeX !== void 0) {
|
|
11299
|
+
throw new Error(
|
|
11300
|
+
`${component.componentName} cannot set both pcbLeftEdgeX and pcbRightEdgeX`
|
|
11301
|
+
);
|
|
11302
|
+
}
|
|
11303
|
+
if (rawPcbTopEdgeY !== void 0 && rawPcbBottomEdgeY !== void 0) {
|
|
11304
|
+
throw new Error(
|
|
11305
|
+
`${component.componentName} cannot set both pcbTopEdgeY and pcbBottomEdgeY`
|
|
11306
|
+
);
|
|
11307
|
+
}
|
|
11308
|
+
const componentWidth = pcbComponent.width ?? 0;
|
|
11309
|
+
const componentHeight = pcbComponent.height ?? 0;
|
|
11274
11310
|
const nextCenter = {
|
|
11275
11311
|
x: pcbComponent.center.x,
|
|
11276
11312
|
y: pcbComponent.center.y
|
|
@@ -11282,6 +11318,30 @@ function Group_doInitialPcbCalcPlacementResolution(group) {
|
|
|
11282
11318
|
});
|
|
11283
11319
|
component._resolvedPcbCalcOffsetX = resolvedPcbX;
|
|
11284
11320
|
nextCenter.x = resolvedPcbX;
|
|
11321
|
+
} else if (rawPcbLeftEdgeX !== void 0) {
|
|
11322
|
+
const resolvedPcbLeftEdgeX = component.resolvePcbCoordinate(
|
|
11323
|
+
rawPcbLeftEdgeX,
|
|
11324
|
+
"pcbX",
|
|
11325
|
+
{
|
|
11326
|
+
allowComponentVariables: true,
|
|
11327
|
+
componentVariables: componentVars
|
|
11328
|
+
}
|
|
11329
|
+
);
|
|
11330
|
+
const resolvedPcbX = resolvedPcbLeftEdgeX + componentWidth / 2;
|
|
11331
|
+
component._resolvedPcbCalcOffsetX = resolvedPcbX;
|
|
11332
|
+
nextCenter.x = resolvedPcbX;
|
|
11333
|
+
} else if (rawPcbRightEdgeX !== void 0) {
|
|
11334
|
+
const resolvedPcbRightEdgeX = component.resolvePcbCoordinate(
|
|
11335
|
+
rawPcbRightEdgeX,
|
|
11336
|
+
"pcbX",
|
|
11337
|
+
{
|
|
11338
|
+
allowComponentVariables: true,
|
|
11339
|
+
componentVariables: componentVars
|
|
11340
|
+
}
|
|
11341
|
+
);
|
|
11342
|
+
const resolvedPcbX = resolvedPcbRightEdgeX - componentWidth / 2;
|
|
11343
|
+
component._resolvedPcbCalcOffsetX = resolvedPcbX;
|
|
11344
|
+
nextCenter.x = resolvedPcbX;
|
|
11285
11345
|
}
|
|
11286
11346
|
if (rawPcbY !== void 0) {
|
|
11287
11347
|
const resolvedPcbY = component.resolvePcbCoordinate(rawPcbY, "pcbY", {
|
|
@@ -11290,11 +11350,49 @@ function Group_doInitialPcbCalcPlacementResolution(group) {
|
|
|
11290
11350
|
});
|
|
11291
11351
|
component._resolvedPcbCalcOffsetY = resolvedPcbY;
|
|
11292
11352
|
nextCenter.y = resolvedPcbY;
|
|
11353
|
+
} else if (rawPcbTopEdgeY !== void 0) {
|
|
11354
|
+
const resolvedPcbTopEdgeY = component.resolvePcbCoordinate(
|
|
11355
|
+
rawPcbTopEdgeY,
|
|
11356
|
+
"pcbY",
|
|
11357
|
+
{
|
|
11358
|
+
allowComponentVariables: true,
|
|
11359
|
+
componentVariables: componentVars
|
|
11360
|
+
}
|
|
11361
|
+
);
|
|
11362
|
+
const resolvedPcbY = resolvedPcbTopEdgeY - componentHeight / 2;
|
|
11363
|
+
component._resolvedPcbCalcOffsetY = resolvedPcbY;
|
|
11364
|
+
nextCenter.y = resolvedPcbY;
|
|
11365
|
+
} else if (rawPcbBottomEdgeY !== void 0) {
|
|
11366
|
+
const resolvedPcbBottomEdgeY = component.resolvePcbCoordinate(
|
|
11367
|
+
rawPcbBottomEdgeY,
|
|
11368
|
+
"pcbY",
|
|
11369
|
+
{
|
|
11370
|
+
allowComponentVariables: true,
|
|
11371
|
+
componentVariables: componentVars
|
|
11372
|
+
}
|
|
11373
|
+
);
|
|
11374
|
+
const resolvedPcbY = resolvedPcbBottomEdgeY + componentHeight / 2;
|
|
11375
|
+
component._resolvedPcbCalcOffsetY = resolvedPcbY;
|
|
11376
|
+
nextCenter.y = resolvedPcbY;
|
|
11293
11377
|
}
|
|
11294
11378
|
component._repositionOnPcb(nextCenter);
|
|
11295
11379
|
updateVarsForNamedComponent(component, componentVars);
|
|
11296
11380
|
}
|
|
11297
11381
|
}
|
|
11382
|
+
function shouldResolvePlacementInCalcPhase(component) {
|
|
11383
|
+
const parsedProps = component._parsedProps;
|
|
11384
|
+
const rawProps = component.props;
|
|
11385
|
+
const pcbX = parsedProps.pcbX;
|
|
11386
|
+
const pcbY = parsedProps.pcbY;
|
|
11387
|
+
const pcbLeftEdgeX = parsedProps.pcbLeftEdgeX ?? rawProps.pcbLeftEdgeX;
|
|
11388
|
+
const pcbRightEdgeX = parsedProps.pcbRightEdgeX ?? rawProps.pcbRightEdgeX;
|
|
11389
|
+
const pcbTopEdgeY = parsedProps.pcbTopEdgeY ?? rawProps.pcbTopEdgeY;
|
|
11390
|
+
const pcbBottomEdgeY = parsedProps.pcbBottomEdgeY ?? rawProps.pcbBottomEdgeY;
|
|
11391
|
+
if (pcbLeftEdgeX !== void 0 || pcbRightEdgeX !== void 0 || pcbTopEdgeY !== void 0 || pcbBottomEdgeY !== void 0) {
|
|
11392
|
+
return true;
|
|
11393
|
+
}
|
|
11394
|
+
return typeof pcbX === "string" || typeof pcbY === "string";
|
|
11395
|
+
}
|
|
11298
11396
|
function collectNormalComponentsInSubcircuit(group) {
|
|
11299
11397
|
const components = [];
|
|
11300
11398
|
const walk = (node) => {
|
|
@@ -11314,6 +11412,11 @@ function getComponentRefsForCalcPlacement(component) {
|
|
|
11314
11412
|
const refs = /* @__PURE__ */ new Set();
|
|
11315
11413
|
const rawPcbX = component._parsedProps.pcbX;
|
|
11316
11414
|
const rawPcbY = component._parsedProps.pcbY;
|
|
11415
|
+
const rawComponentProps = component.props;
|
|
11416
|
+
const rawPcbLeftEdgeX = component._parsedProps.pcbLeftEdgeX ?? rawComponentProps.pcbLeftEdgeX;
|
|
11417
|
+
const rawPcbRightEdgeX = component._parsedProps.pcbRightEdgeX ?? rawComponentProps.pcbRightEdgeX;
|
|
11418
|
+
const rawPcbTopEdgeY = component._parsedProps.pcbTopEdgeY ?? rawComponentProps.pcbTopEdgeY;
|
|
11419
|
+
const rawPcbBottomEdgeY = component._parsedProps.pcbBottomEdgeY ?? rawComponentProps.pcbBottomEdgeY;
|
|
11317
11420
|
const addRefs = (rawValue) => {
|
|
11318
11421
|
if (typeof rawValue !== "string") return;
|
|
11319
11422
|
const identifiers = extractCalcIdentifiers(rawValue);
|
|
@@ -11325,6 +11428,10 @@ function getComponentRefsForCalcPlacement(component) {
|
|
|
11325
11428
|
};
|
|
11326
11429
|
addRefs(rawPcbX);
|
|
11327
11430
|
addRefs(rawPcbY);
|
|
11431
|
+
addRefs(rawPcbLeftEdgeX);
|
|
11432
|
+
addRefs(rawPcbRightEdgeX);
|
|
11433
|
+
addRefs(rawPcbTopEdgeY);
|
|
11434
|
+
addRefs(rawPcbBottomEdgeY);
|
|
11328
11435
|
return refs;
|
|
11329
11436
|
}
|
|
11330
11437
|
function parseComponentReferenceToken(token) {
|
|
@@ -12424,7 +12531,7 @@ import { identity as identity4 } from "transformation-matrix";
|
|
|
12424
12531
|
var package_default = {
|
|
12425
12532
|
name: "@tscircuit/core",
|
|
12426
12533
|
type: "module",
|
|
12427
|
-
version: "0.0.
|
|
12534
|
+
version: "0.0.1030",
|
|
12428
12535
|
types: "dist/index.d.ts",
|
|
12429
12536
|
main: "dist/index.js",
|
|
12430
12537
|
module: "dist/index.js",
|
|
@@ -16036,6 +16143,7 @@ var Group = class extends NormalComponent3 {
|
|
|
16036
16143
|
}
|
|
16037
16144
|
_getPcbLayoutMode() {
|
|
16038
16145
|
const props = this._parsedProps;
|
|
16146
|
+
const rawProps = this.props;
|
|
16039
16147
|
if (this._isInflatedFromCircuitJson) return "none";
|
|
16040
16148
|
if (props.pcbRelative) return "none";
|
|
16041
16149
|
if (props.pcbLayout?.matchAdapt) return "match-adapt";
|
|
@@ -16049,7 +16157,7 @@ var Group = class extends NormalComponent3 {
|
|
|
16049
16157
|
if (props.matchAdapt) return "match-adapt";
|
|
16050
16158
|
if (props.flex) return "flex";
|
|
16051
16159
|
if (props.grid) return "grid";
|
|
16052
|
-
const groupHasCoords = props.pcbX !== void 0 || props.pcbY !== void 0;
|
|
16160
|
+
const groupHasCoords = props.pcbX !== void 0 || props.pcbY !== void 0 || props.pcbLeftEdgeX !== void 0 || props.pcbRightEdgeX !== void 0 || props.pcbTopEdgeY !== void 0 || props.pcbBottomEdgeY !== void 0 || rawProps.pcbLeftEdgeX !== void 0 || rawProps.pcbRightEdgeX !== void 0 || rawProps.pcbTopEdgeY !== void 0 || rawProps.pcbBottomEdgeY !== void 0;
|
|
16053
16161
|
const hasManualEdits = (props.manualEdits?.pcb_placements?.length ?? 0) > 0;
|
|
16054
16162
|
const unpositionedDirectChildrenCount = this.children.reduce(
|
|
16055
16163
|
(count, child) => {
|
|
@@ -16057,7 +16165,8 @@ var Group = class extends NormalComponent3 {
|
|
|
16057
16165
|
return count;
|
|
16058
16166
|
}
|
|
16059
16167
|
const childProps = child._parsedProps;
|
|
16060
|
-
const
|
|
16168
|
+
const rawChildProps = child.props;
|
|
16169
|
+
const hasCoords = childProps?.pcbX !== void 0 || childProps?.pcbY !== void 0 || childProps?.pcbLeftEdgeX !== void 0 || childProps?.pcbRightEdgeX !== void 0 || childProps?.pcbTopEdgeY !== void 0 || childProps?.pcbBottomEdgeY !== void 0 || rawChildProps?.pcbLeftEdgeX !== void 0 || rawChildProps?.pcbRightEdgeX !== void 0 || rawChildProps?.pcbTopEdgeY !== void 0 || rawChildProps?.pcbBottomEdgeY !== void 0;
|
|
16061
16170
|
return count + (hasCoords ? 0 : 1);
|
|
16062
16171
|
},
|
|
16063
16172
|
0
|