jscad-electronics 0.0.212 → 0.0.213

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/vanilla.d.ts CHANGED
@@ -3,7 +3,7 @@ import { BufferGeometry } from 'three';
3
3
  import * as jscadModeling from '@jscad/modeling';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import * as _jscad_modeling_src_geometries_types from '@jscad/modeling/src/geometries/types';
6
- import { BallBearingModelPropsInput, ButtonScrewModelPropsInput, CableGrommetModelPropsInput, ClampingShaftCollarModelPropsInput, CompressionSpringModelPropsInput, FlangedBushingModelPropsInput, FlatHeadScrewModelPropsInput, SpurGearModelPropsInput, HelicalGearModelPropsInput, HexBoltModelPropsInput, HexNutModelPropsInput, HexSocketBoltModelPropsInput, HollowPositioningArmTubeModelPropsInput, NemaMotorModelPropsInput, PanScrewModelPropsInput, PlainBushingModelPropsInput, RigidCouplerModelPropsInput, ShaftCollarModelPropsInput, SheetMetalModelPropsInput, ThreadedRodModelPropsInput, TSlotExtrusionModelPropsInput, TSlotGussetModelPropsInput, TSlotInsideCornerModelPropsInput, WormGearModelPropsInput } from '@tscircuit/modelprinter';
6
+ import { BallBearingModelPropsInput, ButtonScrewModelPropsInput, CableGrommetModelPropsInput, ClampingShaftCollarModelPropsInput, CompressionSpringModelPropsInput, FlangedBushingModelPropsInput, FlatHeadScrewModelPropsInput, SpurGearModelPropsInput, HelicalGearModelPropsInput, HexBoltModelPropsInput, HexNutModelPropsInput, HexSocketBoltModelPropsInput, HollowPositioningArmTubeModelPropsInput, NemaMotorModelPropsInput, PanScrewModelPropsInput, PlainBushingModelPropsInput, RigidCouplerModelPropsInput, ShaftCollarModelPropsInput, SheetMetalModelPropsInput, ThreadedRodModelPropsInput, TorsionSpringModelPropsInput, TSlotExtrusionModelPropsInput, TSlotGussetModelPropsInput, TSlotInsideCornerModelPropsInput, WormGearModelPropsInput } from '@tscircuit/modelprinter';
7
7
 
8
8
  type VNode = {
9
9
  type: any;
@@ -372,6 +372,23 @@ type ThreadedRodProps = ThreadedRodModelPropsInput & {
372
372
  declare function createThreadedRodGeom(input: ThreadedRodModelPropsInput, resolution?: ThreadedRodMeshOptions): _jscad_modeling_src_geometries_types.Geom3;
373
373
  declare function ThreadedRod({ color, ...props }: ThreadedRodProps): react_jsx_runtime.JSX.Element;
374
374
 
375
+ interface TorsionSpringMesh {
376
+ positions: number[];
377
+ indices: number[];
378
+ }
379
+ interface TorsionSpringMeshOptions {
380
+ segmentsPerTurn?: number;
381
+ wireSegments?: number;
382
+ }
383
+ /** Circular normal sections along the shared helix and its tangent legs. */
384
+ declare function createTorsionSpringMesh(input: TorsionSpringModelPropsInput, options?: TorsionSpringMeshOptions): TorsionSpringMesh;
385
+
386
+ type TorsionSpringProps = TorsionSpringModelPropsInput & {
387
+ color?: string;
388
+ };
389
+ declare function createTorsionSpringGeom(input: TorsionSpringModelPropsInput): _jscad_modeling_src_geometries_types.Geom3;
390
+ declare function TorsionSpring({ color, ...props }: TorsionSpringProps): react_jsx_runtime.JSX.Element;
391
+
375
392
  interface TSlotExtrusionMesh {
376
393
  positions: number[];
377
394
  indices: number[];
@@ -445,4 +462,4 @@ declare function createJSCADRenderer(jscad: typeof jscadModeling): {
445
462
  };
446
463
  };
447
464
 
448
- export { BallBearing, type BallBearingMesh, type BallBearingMeshOptions, type BallBearingMeshPart, type BallBearingProps, ButtonScrew, type ButtonScrewMesh, type ButtonScrewMeshOptions, type ButtonScrewProps, CableGrommet, type CableGrommetMesh, type CableGrommetMeshOptions, type CableGrommetProps, ClampingShaftCollar, type ClampingShaftCollarMesh, type ClampingShaftCollarProps, type ColoredGeom, CompressionSpring, type CompressionSpringMesh, type CompressionSpringMeshOptions, type CompressionSpringProps, FlangedBushing, type FlangedBushingMesh, type FlangedBushingProps, FlatHeadScrew, type FlatHeadScrewMesh, type FlatHeadScrewMeshOptions, type FlatHeadScrewProps, Fragment, HelicalGear, type HelicalGearMesh, type HelicalGearProps, HexBolt, type HexBoltMesh, type HexBoltMeshOptions, type HexBoltProps, HexNut, type HexNutMesh, type HexNutMeshOptions, type HexNutProps, HexSocketBolt, type HexSocketBoltMesh, type HexSocketBoltProps, HollowPositioningArmTube, type HollowPositioningArmTubeMesh, type HollowPositioningArmTubeMeshOptions, type HollowPositioningArmTubeProps, NEMA17, NEMA23, NEMA8, type NemaFrameMotorProps, NemaMotor, type NemaMotorProps, PanScrew, type PanScrewMesh, type PanScrewMeshOptions, type PanScrewProps, PlainBushing, type PlainBushingMesh, type PlainBushingProps, type RenderResult, RigidCoupler, type RigidCouplerMesh, type RigidCouplerProps, ShaftCollar, type ShaftCollarMesh, type ShaftCollarProps, SheetMetal, type SheetMetalMesh, type SheetMetalProps, SpurGear, type SpurGearMesh, type SpurGearProps, TSlotExtrusion, type TSlotExtrusionMesh, type TSlotExtrusionProps, TSlotGusset, type TSlotGussetMesh, type TSlotGussetProps, TSlotInsideCorner, type TSlotInsideCornerMesh, type TSlotInsideCornerProps, ThreadedRod, type ThreadedRodMesh, type ThreadedRodMeshOptions, type ThreadedRodProps, type VNode, WormGear, type WormGearMesh, type WormGearProps, convertCSGToThreeGeom, createBallBearingGeom, createBallBearingMesh, createButtonScrewGeom, createButtonScrewMesh, createCableGrommetGeom, createCableGrommetMesh, createClampingShaftCollarGeom, createClampingShaftCollarMesh, createCompressionSpringGeom, createCompressionSpringMesh, createFlangedBushingGeom, createFlangedBushingMesh, createFlatHeadScrewGeom, createFlatHeadScrewMesh, createHelicalGearGeom, createHelicalGearMesh, createHexBoltGeom, createHexBoltMesh, createHexNutGeom, createHexNutMesh, createHexSocketBoltGeom, createHexSocketBoltMesh, createHollowPositioningArmTubeGeom, createHollowPositioningArmTubeMesh, createJSCADRenderer, createPanScrewGeom, createPanScrewMesh, createPlainBushingGeom, createPlainBushingMesh, createRigidCouplerGeom, createRigidCouplerMesh, createShaftCollarGeom, createShaftCollarMesh, createSheetMetalGeom, createSheetMetalMesh, createSpurGearGeom, createSpurGearMesh, createTSlotExtrusionGeom, createTSlotExtrusionMesh, createTSlotGussetGeom, createTSlotGussetMesh, createTSlotInsideCornerGeom, createTSlotInsideCornerMesh, createThreadedRodGeom, createThreadedRodMesh, createWormGearGeom, createWormGearMesh, getJscadModelForFootprint, getJscadModelForFootprintWithPads, h };
465
+ export { BallBearing, type BallBearingMesh, type BallBearingMeshOptions, type BallBearingMeshPart, type BallBearingProps, ButtonScrew, type ButtonScrewMesh, type ButtonScrewMeshOptions, type ButtonScrewProps, CableGrommet, type CableGrommetMesh, type CableGrommetMeshOptions, type CableGrommetProps, ClampingShaftCollar, type ClampingShaftCollarMesh, type ClampingShaftCollarProps, type ColoredGeom, CompressionSpring, type CompressionSpringMesh, type CompressionSpringMeshOptions, type CompressionSpringProps, FlangedBushing, type FlangedBushingMesh, type FlangedBushingProps, FlatHeadScrew, type FlatHeadScrewMesh, type FlatHeadScrewMeshOptions, type FlatHeadScrewProps, Fragment, HelicalGear, type HelicalGearMesh, type HelicalGearProps, HexBolt, type HexBoltMesh, type HexBoltMeshOptions, type HexBoltProps, HexNut, type HexNutMesh, type HexNutMeshOptions, type HexNutProps, HexSocketBolt, type HexSocketBoltMesh, type HexSocketBoltProps, HollowPositioningArmTube, type HollowPositioningArmTubeMesh, type HollowPositioningArmTubeMeshOptions, type HollowPositioningArmTubeProps, NEMA17, NEMA23, NEMA8, type NemaFrameMotorProps, NemaMotor, type NemaMotorProps, PanScrew, type PanScrewMesh, type PanScrewMeshOptions, type PanScrewProps, PlainBushing, type PlainBushingMesh, type PlainBushingProps, type RenderResult, RigidCoupler, type RigidCouplerMesh, type RigidCouplerProps, ShaftCollar, type ShaftCollarMesh, type ShaftCollarProps, SheetMetal, type SheetMetalMesh, type SheetMetalProps, SpurGear, type SpurGearMesh, type SpurGearProps, TSlotExtrusion, type TSlotExtrusionMesh, type TSlotExtrusionProps, TSlotGusset, type TSlotGussetMesh, type TSlotGussetProps, TSlotInsideCorner, type TSlotInsideCornerMesh, type TSlotInsideCornerProps, ThreadedRod, type ThreadedRodMesh, type ThreadedRodMeshOptions, type ThreadedRodProps, TorsionSpring, type TorsionSpringMesh, type TorsionSpringMeshOptions, type TorsionSpringProps, type VNode, WormGear, type WormGearMesh, type WormGearProps, convertCSGToThreeGeom, createBallBearingGeom, createBallBearingMesh, createButtonScrewGeom, createButtonScrewMesh, createCableGrommetGeom, createCableGrommetMesh, createClampingShaftCollarGeom, createClampingShaftCollarMesh, createCompressionSpringGeom, createCompressionSpringMesh, createFlangedBushingGeom, createFlangedBushingMesh, createFlatHeadScrewGeom, createFlatHeadScrewMesh, createHelicalGearGeom, createHelicalGearMesh, createHexBoltGeom, createHexBoltMesh, createHexNutGeom, createHexNutMesh, createHexSocketBoltGeom, createHexSocketBoltMesh, createHollowPositioningArmTubeGeom, createHollowPositioningArmTubeMesh, createJSCADRenderer, createPanScrewGeom, createPanScrewMesh, createPlainBushingGeom, createPlainBushingMesh, createRigidCouplerGeom, createRigidCouplerMesh, createShaftCollarGeom, createShaftCollarMesh, createSheetMetalGeom, createSheetMetalMesh, createSpurGearGeom, createSpurGearMesh, createTSlotExtrusionGeom, createTSlotExtrusionMesh, createTSlotGussetGeom, createTSlotGussetMesh, createTSlotInsideCornerGeom, createTSlotInsideCornerMesh, createThreadedRodGeom, createThreadedRodMesh, createTorsionSpringGeom, createTorsionSpringMesh, createWormGearGeom, createWormGearMesh, getJscadModelForFootprint, getJscadModelForFootprintWithPads, h };
package/dist/vanilla.js CHANGED
@@ -183,24 +183,24 @@ var FootprintPlatedHole = ({
183
183
  import { ballBearingModelDefinitionSchema } from "@tscircuit/modelprinter";
184
184
 
185
185
  // lib/model-registry.ts
186
- function defineModelRenderer(model26) {
187
- return model26;
186
+ function defineModelRenderer(model27) {
187
+ return model27;
188
188
  }
189
189
  var ModelRendererRegistry = class {
190
190
  models = /* @__PURE__ */ new Map();
191
- register(model26) {
192
- if (typeof model26.name !== "string" || !/^[a-z]+$/.test(model26.name)) {
191
+ register(model27) {
192
+ if (typeof model27.name !== "string" || !/^[a-z]+$/.test(model27.name)) {
193
193
  throw new Error(
194
194
  "Model renderer names must contain only lowercase letters"
195
195
  );
196
196
  }
197
- if (this.models.has(model26.name)) {
198
- throw new Error(`Model renderer "${model26.name}" is already registered`);
197
+ if (this.models.has(model27.name)) {
198
+ throw new Error(`Model renderer "${model27.name}" is already registered`);
199
199
  }
200
- if (model26.pads !== "none" && model26.pads !== "footprinter") {
200
+ if (model27.pads !== "none" && model27.pads !== "footprinter") {
201
201
  throw new Error('Model renderer pads must be "none" or "footprinter"');
202
202
  }
203
- const { name, schema, render: render2, pads } = model26;
203
+ const { name, schema, render: render2, pads } = model27;
204
204
  this.models.set(name, {
205
205
  name,
206
206
  schema,
@@ -3827,6 +3827,110 @@ function register21(registry) {
3827
3827
  registry.register(model21);
3828
3828
  }
3829
3829
 
3830
+ // lib/models/torsionspring/register.tsx
3831
+ import { torsionSpringModelDefinitionSchema } from "@tscircuit/modelprinter";
3832
+
3833
+ // lib/models/torsionspring/mesh.ts
3834
+ import {
3835
+ torsionSpringModelPropsSchema,
3836
+ getTorsionSpringDimensions,
3837
+ getTorsionSpringFrame
3838
+ } from "@tscircuit/modelprinter";
3839
+ function createTorsionSpringMesh(input, options = {}) {
3840
+ const p = torsionSpringModelPropsSchema.parse(input), d = getTorsionSpringDimensions(p);
3841
+ const segmentsPerTurn = options.segmentsPerTurn ?? 64, wireSegments = options.wireSegments ?? 24;
3842
+ for (const [name, value, minimum, maximum] of [
3843
+ ["segmentsPerTurn", segmentsPerTurn, 16, 256],
3844
+ ["wireSegments", wireSegments, 8, 64]
3845
+ ])
3846
+ if (!Number.isInteger(value) || value < minimum || value > maximum || value % 4 !== 0)
3847
+ throw new Error(
3848
+ `${name} must be a multiple of four in [${minimum},${maximum}]`
3849
+ );
3850
+ const steps = Math.ceil(p.turns * segmentsPerTurn);
3851
+ if ((steps + 3) * wireSegments + 2 > 25e4)
3852
+ throw new Error("Spring exceeds mesh resolution limit (250000 vertices)");
3853
+ const scale = Math.max(
3854
+ p.outerDiameter,
3855
+ d.axialAdvance,
3856
+ p.startLegLength,
3857
+ p.endLegLength
3858
+ );
3859
+ if (Math.min(
3860
+ p.wireDiameter,
3861
+ p.startLegLength,
3862
+ p.endLegLength,
3863
+ d.insideDiameter,
3864
+ p.pitch - p.wireDiameter
3865
+ ) <= scale * 1e-10)
3866
+ throw new Error("Spring clearance exceeds mesh resolution limits");
3867
+ const distances = [
3868
+ 0,
3869
+ ...Array.from(
3870
+ { length: steps + 1 },
3871
+ (_, i) => p.startLegLength + d.coilLength * i / steps
3872
+ ),
3873
+ d.centerlineLength
3874
+ ];
3875
+ const frameProps = { ...p, leftHand: false };
3876
+ const positions = [], indices = [];
3877
+ for (const distance2 of distances) {
3878
+ const f = getTorsionSpringFrame(frameProps, distance2);
3879
+ for (let j = 0; j < wireSegments; j++) {
3880
+ const angle = 2 * Math.PI * j / wireSegments;
3881
+ const c = j === wireSegments / 4 || j === 3 * wireSegments / 4 ? 0 : Math.cos(angle);
3882
+ const s = j === 0 || j === wireSegments / 2 ? 0 : Math.sin(angle);
3883
+ for (let axis = 0; axis < 3; axis++)
3884
+ positions.push(
3885
+ f.position[axis] + p.wireDiameter / 2 * (f.normal[axis] * c + f.binormal[axis] * s)
3886
+ );
3887
+ }
3888
+ }
3889
+ for (let i = 0; i < distances.length - 1; i++)
3890
+ for (let j = 0; j < wireSegments; j++) {
3891
+ const n = (j + 1) % wireSegments, a = i * wireSegments, b = (i + 1) * wireSegments;
3892
+ indices.push(a + j, a + n, b + j, a + n, b + n, b + j);
3893
+ }
3894
+ const firstCenter = positions.length / 3;
3895
+ positions.push(
3896
+ ...getTorsionSpringFrame(frameProps, 0).position,
3897
+ ...getTorsionSpringFrame(frameProps, d.centerlineLength).position
3898
+ );
3899
+ const end = (distances.length - 1) * wireSegments;
3900
+ for (let j = 0; j < wireSegments; j++) {
3901
+ const n = (j + 1) % wireSegments;
3902
+ indices.push(firstCenter, n, j, firstCenter + 1, end + j, end + n);
3903
+ }
3904
+ if (p.leftHand) {
3905
+ for (let i = 1; i < positions.length; i += 3) positions[i] = -positions[i];
3906
+ for (let i = 0; i < indices.length; i += 3)
3907
+ [indices[i + 1], indices[i + 2]] = [indices[i + 2], indices[i + 1]];
3908
+ }
3909
+ return { positions, indices };
3910
+ }
3911
+
3912
+ // lib/models/torsionspring/TorsionSpring.tsx
3913
+ function createTorsionSpringGeom(input) {
3914
+ return indexedMeshToGeom3(createTorsionSpringMesh(input));
3915
+ }
3916
+ function TorsionSpring({
3917
+ color = "#929ba6",
3918
+ ...props
3919
+ }) {
3920
+ return /* @__PURE__ */ jsx(Colorize, { color, children: /* @__PURE__ */ jsx(Custom, { geometry: createTorsionSpringGeom(props) }) });
3921
+ }
3922
+
3923
+ // lib/models/torsionspring/register.tsx
3924
+ var model22 = defineModelRenderer({
3925
+ name: "torsionspring",
3926
+ schema: torsionSpringModelDefinitionSchema,
3927
+ render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TorsionSpring, { ...props }),
3928
+ pads: "none"
3929
+ });
3930
+ function register22(registry) {
3931
+ registry.register(model22);
3932
+ }
3933
+
3830
3934
  // lib/models/tslotextrusion/register.tsx
3831
3935
  import { tSlotExtrusionModelDefinitionSchema } from "@tscircuit/modelprinter";
3832
3936
 
@@ -3974,14 +4078,14 @@ function TSlotExtrusion({
3974
4078
  }
3975
4079
 
3976
4080
  // lib/models/tslotextrusion/register.tsx
3977
- var model22 = defineModelRenderer({
4081
+ var model23 = defineModelRenderer({
3978
4082
  name: "tslotextrusion",
3979
4083
  schema: tSlotExtrusionModelDefinitionSchema,
3980
4084
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TSlotExtrusion, { ...props }),
3981
4085
  pads: "none"
3982
4086
  });
3983
- function register22(registry) {
3984
- registry.register(model22);
4087
+ function register23(registry) {
4088
+ registry.register(model23);
3985
4089
  }
3986
4090
 
3987
4091
  // lib/models/tslotgusset/register.tsx
@@ -4034,14 +4138,14 @@ function TSlotGusset({ color = "#8995a3", ...props }) {
4034
4138
  }
4035
4139
 
4036
4140
  // lib/models/tslotgusset/register.tsx
4037
- var model23 = defineModelRenderer({
4141
+ var model24 = defineModelRenderer({
4038
4142
  name: "tslotgusset",
4039
4143
  schema: tSlotGussetModelDefinitionSchema,
4040
4144
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TSlotGusset, { ...props }),
4041
4145
  pads: "none"
4042
4146
  });
4043
- function register23(registry) {
4044
- registry.register(model23);
4147
+ function register24(registry) {
4148
+ registry.register(model24);
4045
4149
  }
4046
4150
 
4047
4151
  // lib/models/tslotinsidecorner/register.tsx
@@ -4121,14 +4225,14 @@ function TSlotInsideCorner({
4121
4225
  }
4122
4226
 
4123
4227
  // lib/models/tslotinsidecorner/register.tsx
4124
- var model24 = defineModelRenderer({
4228
+ var model25 = defineModelRenderer({
4125
4229
  name: "tslotinsidecorner",
4126
4230
  schema: tSlotInsideCornerModelDefinitionSchema,
4127
4231
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TSlotInsideCorner, { ...props }),
4128
4232
  pads: "none"
4129
4233
  });
4130
- function register24(registry) {
4131
- registry.register(model24);
4234
+ function register25(registry) {
4235
+ registry.register(model25);
4132
4236
  }
4133
4237
 
4134
4238
  // lib/models/wormgear/register.tsx
@@ -4320,14 +4424,14 @@ function WormGear({ color = "#737e8f", ...props }) {
4320
4424
  }
4321
4425
 
4322
4426
  // lib/models/wormgear/register.tsx
4323
- var model25 = defineModelRenderer({
4427
+ var model26 = defineModelRenderer({
4324
4428
  name: "wormgear",
4325
4429
  schema: wormGearModelDefinitionSchema,
4326
4430
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(WormGear, { ...props }),
4327
4431
  pads: "none"
4328
4432
  });
4329
- function register25(registry) {
4330
- registry.register(model25);
4433
+ function register26(registry) {
4434
+ registry.register(model26);
4331
4435
  }
4332
4436
 
4333
4437
  // lib/generated/model-renderers.ts
@@ -4357,6 +4461,7 @@ function registerAllModelRenderers(registry) {
4357
4461
  register23(registry);
4358
4462
  register24(registry);
4359
4463
  register25(registry);
4464
+ register26(registry);
4360
4465
  }
4361
4466
 
4362
4467
  // lib/default-model-registry.ts
@@ -11913,10 +12018,10 @@ var SOT143 = ({ footprint = "sot143" }) => {
11913
12018
  var Footprinter3d = ({ footprint }) => {
11914
12019
  const modelFn = mp3.string(footprint.split("_", 1)[0]).params().fn;
11915
12020
  if (mp3.getModelNames().includes(modelFn)) {
11916
- const model26 = mp3.string(footprint).json();
11917
- const renderer = modelRendererRegistry.get(model26.fn);
12021
+ const model27 = mp3.string(footprint).json();
12022
+ const renderer = modelRendererRegistry.get(model27.fn);
11918
12023
  if (renderer) {
11919
- return renderer.render(model26);
12024
+ return renderer.render(model27);
11920
12025
  }
11921
12026
  }
11922
12027
  let normalizedFootprint = footprint;
@@ -12894,6 +12999,7 @@ export {
12894
12999
  TSlotGusset,
12895
13000
  TSlotInsideCorner,
12896
13001
  ThreadedRod,
13002
+ TorsionSpring,
12897
13003
  WormGear,
12898
13004
  convertCSGToThreeGeom,
12899
13005
  createBallBearingGeom,
@@ -12941,6 +13047,8 @@ export {
12941
13047
  createTSlotInsideCornerMesh,
12942
13048
  createThreadedRodGeom,
12943
13049
  createThreadedRodMesh,
13050
+ createTorsionSpringGeom,
13051
+ createTorsionSpringMesh,
12944
13052
  createWormGearGeom,
12945
13053
  createWormGearMesh,
12946
13054
  getJscadModelForFootprint,