jscad-electronics 0.0.217 → 0.0.218

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 from 'react';
5
5
  import * as _jscad_modeling_src_geometries_types from '@jscad/modeling/src/geometries/types';
6
- import { BallBearingModelPropsInput, BallTransferUnitModelPropsInput, 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';
6
+ import { BallBearingModelPropsInput, BallTransferUnitModelPropsInput, ButtonScrewModelPropsInput, CableGrommetModelPropsInput, ClampingShaftCollarModelPropsInput, CompressionSpringModelPropsInput, FlangedBushingModelPropsInput, FlatHeadScrewModelPropsInput, SpurGearModelPropsInput, HelicalGearModelPropsInput, HexBoltModelPropsInput, HexNutModelPropsInput, HexSocketBoltModelPropsInput, HollowPositioningArmTubeModelPropsInput, NemaMotorModelPropsInput, PanScrewModelPropsInput, PlainBushingModelPropsInput, RigidCouplerModelPropsInput, ShaftCollarModelPropsInput, SheetMetalModelPropsInput, SplitWasherModelPropsInput, ThreadedRodModelPropsInput, TorsionSpringModelPropsInput, TSlotExtrusionModelPropsInput, TSlotGussetModelPropsInput, TSlotInsideCornerModelPropsInput, WormGearModelPropsInput } from '@tscircuit/modelprinter';
7
7
 
8
8
  type VNode = {
9
9
  type: any;
@@ -370,6 +370,22 @@ type SheetMetalProps = SheetMetalModelPropsInput & {
370
370
  declare function createSheetMetalGeom(input: SheetMetalModelPropsInput): _jscad_modeling_src_geometries_types.Geom3;
371
371
  declare function SheetMetal({ color, ...props }: SheetMetalProps): react.JSX.Element;
372
372
 
373
+ interface SplitWasherMesh {
374
+ positions: number[];
375
+ indices: number[];
376
+ }
377
+ interface SplitWasherMeshOptions {
378
+ angularSegments?: number;
379
+ }
380
+ /** One capped radial/vertical rectangular sweep. The minimum Z datum is zero. */
381
+ declare function createSplitWasherMesh(input: SplitWasherModelPropsInput, options?: SplitWasherMeshOptions): SplitWasherMesh;
382
+
383
+ type SplitWasherProps = SplitWasherModelPropsInput & {
384
+ color?: string;
385
+ };
386
+ declare function createSplitWasherGeom(input: SplitWasherModelPropsInput): _jscad_modeling_src_geometries_types.Geom3;
387
+ declare function SplitWasher({ color, ...props }: SplitWasherProps): react.JSX.Element;
388
+
373
389
  type SpurGearProps = SpurGearModelPropsInput & {
374
390
  color?: string;
375
391
  };
@@ -486,4 +502,4 @@ declare function createJSCADRenderer(jscad: typeof jscadModeling): {
486
502
  };
487
503
  };
488
504
 
489
- export { BallBearing, type BallBearingMesh, type BallBearingMeshOptions, type BallBearingMeshPart, type BallBearingProps, BallTransferUnit, type BallTransferUnitMesh, type BallTransferUnitMeshPart, type BallTransferUnitProps, 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, createBallTransferUnitGeom, createBallTransferUnitMesh, 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 };
505
+ export { BallBearing, type BallBearingMesh, type BallBearingMeshOptions, type BallBearingMeshPart, type BallBearingProps, BallTransferUnit, type BallTransferUnitMesh, type BallTransferUnitMeshPart, type BallTransferUnitProps, 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, SplitWasher, type SplitWasherMesh, type SplitWasherMeshOptions, type SplitWasherProps, 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, createBallTransferUnitGeom, createBallTransferUnitMesh, 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, createSplitWasherGeom, createSplitWasherMesh, 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(model28) {
187
- return model28;
186
+ function defineModelRenderer(model29) {
187
+ return model29;
188
188
  }
189
189
  var ModelRendererRegistry = class {
190
190
  models = /* @__PURE__ */ new Map();
191
- register(model28) {
192
- if (typeof model28.name !== "string" || !/^[a-z]+$/.test(model28.name)) {
191
+ register(model29) {
192
+ if (typeof model29.name !== "string" || !/^[a-z]+$/.test(model29.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(model28.name)) {
198
- throw new Error(`Model renderer "${model28.name}" is already registered`);
197
+ if (this.models.has(model29.name)) {
198
+ throw new Error(`Model renderer "${model29.name}" is already registered`);
199
199
  }
200
- if (model28.pads !== "none" && model28.pads !== "footprinter") {
200
+ if (model29.pads !== "none" && model29.pads !== "footprinter") {
201
201
  throw new Error('Model renderer pads must be "none" or "footprinter"');
202
202
  }
203
- const { name, schema, render: render2, pads } = model28;
203
+ const { name, schema, render: render2, pads } = model29;
204
204
  this.models.set(name, {
205
205
  name,
206
206
  schema,
@@ -3961,6 +3961,82 @@ function register20(registry) {
3961
3961
  registry.register(model20);
3962
3962
  }
3963
3963
 
3964
+ // lib/models/splitwasher/register.tsx
3965
+ import { splitWasherModelDefinitionSchema } from "@tscircuit/modelprinter";
3966
+
3967
+ // lib/models/splitwasher/mesh.ts
3968
+ import {
3969
+ splitWasherModelPropsSchema
3970
+ } from "@tscircuit/modelprinter";
3971
+ function createSplitWasherMesh(input, options = {}) {
3972
+ const p = splitWasherModelPropsSchema.parse(input);
3973
+ const segments = options.angularSegments ?? 360;
3974
+ if (!Number.isInteger(segments) || segments < 24 || segments > 1440)
3975
+ throw new Error(
3976
+ "Split washer angular segments must be an integer from 24 to 1440"
3977
+ );
3978
+ const sweep = (360 - p.gapAngle) * Math.PI / 180;
3979
+ const ri = p.innerDiameter / 2, ro = p.outerDiameter / 2;
3980
+ const scale = Math.max(p.outerDiameter, p.thickness + p.rise);
3981
+ if (Math.min(ro - ri, p.thickness, ri * sweep / segments) <= scale * 1e-12)
3982
+ throw new Error(
3983
+ "Split washer dimensions exceed mesh precision at this resolution"
3984
+ );
3985
+ const positions = [], indices = [];
3986
+ for (let i = 0; i <= segments; i++) {
3987
+ const f = i / segments, theta = sweep * f;
3988
+ const c = Math.cos(theta), s = Math.sin(theta) * (p.leftHanded ? -1 : 1);
3989
+ for (const [radius, z] of [
3990
+ [ri, 0],
3991
+ [ro, 0],
3992
+ [ro, p.thickness],
3993
+ [ri, p.thickness]
3994
+ ])
3995
+ positions.push(radius * c, radius * s, z + p.rise * f);
3996
+ }
3997
+ const triangle = (a, b, c) => {
3998
+ indices.push(a, p.leftHanded ? c : b, p.leftHanded ? b : c);
3999
+ };
4000
+ for (let i = 0; i < segments; i++) {
4001
+ for (let j = 0; j < 4; j++) {
4002
+ const a = 4 * i + j, b = 4 * i + (j + 1) % 4;
4003
+ const c = b + 4, d = a + 4;
4004
+ if (j === 2) {
4005
+ triangle(a, d, b);
4006
+ triangle(d, c, b);
4007
+ } else {
4008
+ triangle(a, d, c);
4009
+ triangle(a, c, b);
4010
+ }
4011
+ }
4012
+ }
4013
+ triangle(0, 1, 2);
4014
+ triangle(0, 2, 3);
4015
+ const end = 4 * segments;
4016
+ triangle(end, end + 2, end + 1);
4017
+ triangle(end, end + 3, end + 2);
4018
+ return { positions, indices };
4019
+ }
4020
+
4021
+ // lib/models/splitwasher/SplitWasher.tsx
4022
+ function createSplitWasherGeom(input) {
4023
+ return indexedMeshToGeom3(createSplitWasherMesh(input));
4024
+ }
4025
+ function SplitWasher({ color = "#929ba6", ...props }) {
4026
+ return /* @__PURE__ */ jsx(Colorize, { color, children: /* @__PURE__ */ jsx(Custom, { geometry: createSplitWasherGeom(props) }) });
4027
+ }
4028
+
4029
+ // lib/models/splitwasher/register.tsx
4030
+ var model21 = defineModelRenderer({
4031
+ name: "splitwasher",
4032
+ schema: splitWasherModelDefinitionSchema,
4033
+ render: ({ fn, ...props }) => /* @__PURE__ */ jsx(SplitWasher, { ...props }),
4034
+ pads: "none"
4035
+ });
4036
+ function register21(registry) {
4037
+ registry.register(model21);
4038
+ }
4039
+
3964
4040
  // lib/models/spurgear/register.tsx
3965
4041
  import { spurGearModelDefinitionSchema } from "@tscircuit/modelprinter";
3966
4042
 
@@ -3973,14 +4049,14 @@ function SpurGear({ color = "#737e8f", ...props }) {
3973
4049
  }
3974
4050
 
3975
4051
  // lib/models/spurgear/register.tsx
3976
- var model21 = defineModelRenderer({
4052
+ var model22 = defineModelRenderer({
3977
4053
  name: "spurgear",
3978
4054
  schema: spurGearModelDefinitionSchema,
3979
4055
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(SpurGear, { ...props }),
3980
4056
  pads: "none"
3981
4057
  });
3982
- function register21(registry) {
3983
- registry.register(model21);
4058
+ function register22(registry) {
4059
+ registry.register(model22);
3984
4060
  }
3985
4061
 
3986
4062
  // lib/models/threadedrod/register.tsx
@@ -4077,14 +4153,14 @@ function ThreadedRod({ color = "#737e8f", ...props }) {
4077
4153
  }
4078
4154
 
4079
4155
  // lib/models/threadedrod/register.tsx
4080
- var model22 = defineModelRenderer({
4156
+ var model23 = defineModelRenderer({
4081
4157
  name: "threadedrod",
4082
4158
  schema: threadedRodModelDefinitionSchema,
4083
4159
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(ThreadedRod, { ...props }),
4084
4160
  pads: "none"
4085
4161
  });
4086
- function register22(registry) {
4087
- registry.register(model22);
4162
+ function register23(registry) {
4163
+ registry.register(model23);
4088
4164
  }
4089
4165
 
4090
4166
  // lib/models/torsionspring/register.tsx
@@ -4181,14 +4257,14 @@ function TorsionSpring({
4181
4257
  }
4182
4258
 
4183
4259
  // lib/models/torsionspring/register.tsx
4184
- var model23 = defineModelRenderer({
4260
+ var model24 = defineModelRenderer({
4185
4261
  name: "torsionspring",
4186
4262
  schema: torsionSpringModelDefinitionSchema,
4187
4263
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TorsionSpring, { ...props }),
4188
4264
  pads: "none"
4189
4265
  });
4190
- function register23(registry) {
4191
- registry.register(model23);
4266
+ function register24(registry) {
4267
+ registry.register(model24);
4192
4268
  }
4193
4269
 
4194
4270
  // lib/models/tslotextrusion/register.tsx
@@ -4253,14 +4329,14 @@ function TSlotExtrusion({
4253
4329
  }
4254
4330
 
4255
4331
  // lib/models/tslotextrusion/register.tsx
4256
- var model24 = defineModelRenderer({
4332
+ var model25 = defineModelRenderer({
4257
4333
  name: "tslotextrusion",
4258
4334
  schema: tSlotExtrusionModelDefinitionSchema,
4259
4335
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TSlotExtrusion, { ...props }),
4260
4336
  pads: "none"
4261
4337
  });
4262
- function register24(registry) {
4263
- registry.register(model24);
4338
+ function register25(registry) {
4339
+ registry.register(model25);
4264
4340
  }
4265
4341
 
4266
4342
  // lib/models/tslotgusset/register.tsx
@@ -4313,14 +4389,14 @@ function TSlotGusset({ color = "#8995a3", ...props }) {
4313
4389
  }
4314
4390
 
4315
4391
  // lib/models/tslotgusset/register.tsx
4316
- var model25 = defineModelRenderer({
4392
+ var model26 = defineModelRenderer({
4317
4393
  name: "tslotgusset",
4318
4394
  schema: tSlotGussetModelDefinitionSchema,
4319
4395
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TSlotGusset, { ...props }),
4320
4396
  pads: "none"
4321
4397
  });
4322
- function register25(registry) {
4323
- registry.register(model25);
4398
+ function register26(registry) {
4399
+ registry.register(model26);
4324
4400
  }
4325
4401
 
4326
4402
  // lib/models/tslotinsidecorner/register.tsx
@@ -4400,14 +4476,14 @@ function TSlotInsideCorner({
4400
4476
  }
4401
4477
 
4402
4478
  // lib/models/tslotinsidecorner/register.tsx
4403
- var model26 = defineModelRenderer({
4479
+ var model27 = defineModelRenderer({
4404
4480
  name: "tslotinsidecorner",
4405
4481
  schema: tSlotInsideCornerModelDefinitionSchema,
4406
4482
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(TSlotInsideCorner, { ...props }),
4407
4483
  pads: "none"
4408
4484
  });
4409
- function register26(registry) {
4410
- registry.register(model26);
4485
+ function register27(registry) {
4486
+ registry.register(model27);
4411
4487
  }
4412
4488
 
4413
4489
  // lib/models/wormgear/register.tsx
@@ -4599,14 +4675,14 @@ function WormGear({ color = "#737e8f", ...props }) {
4599
4675
  }
4600
4676
 
4601
4677
  // lib/models/wormgear/register.tsx
4602
- var model27 = defineModelRenderer({
4678
+ var model28 = defineModelRenderer({
4603
4679
  name: "wormgear",
4604
4680
  schema: wormGearModelDefinitionSchema,
4605
4681
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(WormGear, { ...props }),
4606
4682
  pads: "none"
4607
4683
  });
4608
- function register27(registry) {
4609
- registry.register(model27);
4684
+ function register28(registry) {
4685
+ registry.register(model28);
4610
4686
  }
4611
4687
 
4612
4688
  // lib/generated/model-renderers.ts
@@ -4638,6 +4714,7 @@ function registerAllModelRenderers(registry) {
4638
4714
  register25(registry);
4639
4715
  register26(registry);
4640
4716
  register27(registry);
4717
+ register28(registry);
4641
4718
  }
4642
4719
 
4643
4720
  // lib/default-model-registry.ts
@@ -12200,10 +12277,10 @@ var SOT143 = ({ footprint = "sot143" }) => {
12200
12277
  var Footprinter3d = ({ footprint }) => {
12201
12278
  const modelFn = mp3.string(footprint.split("_", 1)[0]).params().fn;
12202
12279
  if (mp3.getModelNames().includes(modelFn)) {
12203
- const model28 = mp3.string(footprint).json();
12204
- const renderer = modelRendererRegistry.get(model28.fn);
12280
+ const model29 = mp3.string(footprint).json();
12281
+ const renderer = modelRendererRegistry.get(model29.fn);
12205
12282
  if (renderer) {
12206
- return renderer.render(model28);
12283
+ return renderer.render(model29);
12207
12284
  }
12208
12285
  }
12209
12286
  let normalizedFootprint = footprint;
@@ -13177,6 +13254,7 @@ export {
13177
13254
  RigidCoupler,
13178
13255
  ShaftCollar,
13179
13256
  SheetMetal,
13257
+ SplitWasher,
13180
13258
  SpurGear,
13181
13259
  TSlotExtrusion,
13182
13260
  TSlotGusset,
@@ -13222,6 +13300,8 @@ export {
13222
13300
  createShaftCollarMesh,
13223
13301
  createSheetMetalGeom,
13224
13302
  createSheetMetalMesh,
13303
+ createSplitWasherGeom,
13304
+ createSplitWasherMesh,
13225
13305
  createSpurGearGeom,
13226
13306
  createSpurGearMesh,
13227
13307
  createTSlotExtrusionGeom,