jscad-electronics 0.0.197 → 0.0.198

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 { FlatHeadScrewModelPropsInput, SpurGearModelPropsInput, HelicalGearModelPropsInput, HexBoltModelPropsInput, HexSocketBoltModelPropsInput, NemaMotorModelPropsInput, PanScrewModelPropsInput, PlainBushingModelPropsInput, SheetMetalModelPropsInput, WormGearModelPropsInput } from '@tscircuit/modelprinter';
6
+ import { FlangedBushingModelPropsInput, FlatHeadScrewModelPropsInput, SpurGearModelPropsInput, HelicalGearModelPropsInput, HexBoltModelPropsInput, HexSocketBoltModelPropsInput, NemaMotorModelPropsInput, PanScrewModelPropsInput, PlainBushingModelPropsInput, SheetMetalModelPropsInput, WormGearModelPropsInput } from '@tscircuit/modelprinter';
7
7
 
8
8
  type VNode = {
9
9
  type: any;
@@ -26,6 +26,21 @@ type RenderResult = {
26
26
 
27
27
  declare function convertCSGToThreeGeom(csg: any): BufferGeometry;
28
28
 
29
+ /** Shared ring vertices and outward counterclockwise triangles, in millimeters. */
30
+ interface FlangedBushingMesh {
31
+ positions: number[];
32
+ indices: number[];
33
+ }
34
+ /** Integral flange at Z=0..flangeThickness; total length includes the flange. */
35
+ declare function createFlangedBushingMesh(input: FlangedBushingModelPropsInput): FlangedBushingMesh;
36
+
37
+ type FlangedBushingProps = FlangedBushingModelPropsInput & {
38
+ color?: string;
39
+ };
40
+ /** Square integral flange at the Z=0 end; bore continues through overall length. */
41
+ declare function createFlangedBushingGeom(input: FlangedBushingModelPropsInput): _jscad_modeling_src_geometries_types.Geom3;
42
+ declare function FlangedBushing({ color, ...props }: FlangedBushingProps): react_jsx_runtime.JSX.Element;
43
+
29
44
  interface FlatHeadScrewMeshOptions {
30
45
  radialSegments?: number;
31
46
  threadStepsPerTurn?: number;
@@ -210,4 +225,4 @@ declare function createJSCADRenderer(jscad: typeof jscadModeling): {
210
225
  };
211
226
  };
212
227
 
213
- export { type ColoredGeom, FlatHeadScrew, type FlatHeadScrewMesh, type FlatHeadScrewMeshOptions, type FlatHeadScrewProps, Fragment, HelicalGear, type HelicalGearMesh, type HelicalGearProps, HexBolt, type HexBoltMesh, type HexBoltMeshOptions, type HexBoltProps, HexSocketBolt, type HexSocketBoltMesh, type HexSocketBoltProps, NEMA17, NEMA23, NEMA8, type NemaFrameMotorProps, NemaMotor, type NemaMotorProps, PanScrew, type PanScrewMesh, type PanScrewMeshOptions, type PanScrewProps, PlainBushing, type PlainBushingMesh, type PlainBushingProps, type RenderResult, SheetMetal, type SheetMetalMesh, type SheetMetalProps, SpurGear, type SpurGearMesh, type SpurGearProps, type VNode, WormGear, type WormGearMesh, type WormGearProps, convertCSGToThreeGeom, createFlatHeadScrewGeom, createFlatHeadScrewMesh, createHelicalGearGeom, createHelicalGearMesh, createHexBoltGeom, createHexBoltMesh, createHexSocketBoltGeom, createHexSocketBoltMesh, createJSCADRenderer, createPanScrewGeom, createPanScrewMesh, createPlainBushingGeom, createPlainBushingMesh, createSheetMetalGeom, createSheetMetalMesh, createSpurGearGeom, createSpurGearMesh, createWormGearGeom, createWormGearMesh, getJscadModelForFootprint, getJscadModelForFootprintWithPads, h };
228
+ export { type ColoredGeom, 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, HexSocketBolt, type HexSocketBoltMesh, type HexSocketBoltProps, NEMA17, NEMA23, NEMA8, type NemaFrameMotorProps, NemaMotor, type NemaMotorProps, PanScrew, type PanScrewMesh, type PanScrewMeshOptions, type PanScrewProps, PlainBushing, type PlainBushingMesh, type PlainBushingProps, type RenderResult, SheetMetal, type SheetMetalMesh, type SheetMetalProps, SpurGear, type SpurGearMesh, type SpurGearProps, type VNode, WormGear, type WormGearMesh, type WormGearProps, convertCSGToThreeGeom, createFlangedBushingGeom, createFlangedBushingMesh, createFlatHeadScrewGeom, createFlatHeadScrewMesh, createHelicalGearGeom, createHelicalGearMesh, createHexBoltGeom, createHexBoltMesh, createHexSocketBoltGeom, createHexSocketBoltMesh, createJSCADRenderer, createPanScrewGeom, createPanScrewMesh, createPlainBushingGeom, createPlainBushingMesh, createSheetMetalGeom, createSheetMetalMesh, createSpurGearGeom, createSpurGearMesh, createWormGearGeom, createWormGearMesh, getJscadModelForFootprint, getJscadModelForFootprintWithPads, h };
package/dist/vanilla.js CHANGED
@@ -179,28 +179,28 @@ var FootprintPlatedHole = ({
179
179
  throw new Error("Shape not supported: " + hole.shape);
180
180
  };
181
181
 
182
- // lib/models/flatheadscrew/register.tsx
183
- import { flatHeadScrewModelDefinitionSchema } from "@tscircuit/modelprinter";
182
+ // lib/models/flangedbushing/register.tsx
183
+ import { flangedBushingModelDefinitionSchema } from "@tscircuit/modelprinter";
184
184
 
185
185
  // lib/model-registry.ts
186
- function defineModelRenderer(model12) {
187
- return model12;
186
+ function defineModelRenderer(model13) {
187
+ return model13;
188
188
  }
189
189
  var ModelRendererRegistry = class {
190
190
  models = /* @__PURE__ */ new Map();
191
- register(model12) {
192
- if (typeof model12.name !== "string" || !/^[a-z]+$/.test(model12.name)) {
191
+ register(model13) {
192
+ if (typeof model13.name !== "string" || !/^[a-z]+$/.test(model13.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(model12.name)) {
198
- throw new Error(`Model renderer "${model12.name}" is already registered`);
197
+ if (this.models.has(model13.name)) {
198
+ throw new Error(`Model renderer "${model13.name}" is already registered`);
199
199
  }
200
- if (model12.pads !== "none" && model12.pads !== "footprinter") {
200
+ if (model13.pads !== "none" && model13.pads !== "footprinter") {
201
201
  throw new Error('Model renderer pads must be "none" or "footprinter"');
202
202
  }
203
- const { name, schema, render: render2, pads } = model12;
203
+ const { name, schema, render: render2, pads } = model13;
204
204
  this.models.set(name, {
205
205
  name,
206
206
  schema,
@@ -226,6 +226,84 @@ var ModelRendererRegistry = class {
226
226
  }
227
227
  };
228
228
 
229
+ // lib/mechanical/indexedMeshToGeom3.ts
230
+ import jscad from "@jscad/modeling";
231
+ function indexedMeshToGeom3(mesh) {
232
+ const polygons = [];
233
+ for (let i = 0; i < mesh.indices.length; i += 3)
234
+ polygons.push(
235
+ mesh.indices.slice(i, i + 3).map((index) => [
236
+ mesh.positions[index * 3],
237
+ mesh.positions[index * 3 + 1],
238
+ mesh.positions[index * 3 + 2]
239
+ ])
240
+ );
241
+ return jscad.geometries.geom3.fromPoints(polygons);
242
+ }
243
+
244
+ // lib/models/flangedbushing/mesh.ts
245
+ import {
246
+ flangedBushingModelPropsSchema,
247
+ getFlangedBushingDimensions
248
+ } from "@tscircuit/modelprinter";
249
+ function createFlangedBushingMesh(input) {
250
+ const props = flangedBushingModelPropsSchema.parse(input);
251
+ const d = getFlangedBushingDimensions(props);
252
+ const ri = d.innerDiameter / 2;
253
+ const ro = d.outerDiameter / 2;
254
+ const rf = d.flangeDiameter / 2;
255
+ const profile = [
256
+ [rf, 0],
257
+ [rf, d.shoulderZ],
258
+ [ro, d.shoulderZ],
259
+ [ro, d.length],
260
+ [ri, d.length],
261
+ [ri, 0]
262
+ ];
263
+ const segments = 96;
264
+ const positions = [];
265
+ const indices = [];
266
+ for (const [radius, z] of profile)
267
+ for (let i = 0; i < segments; i++) {
268
+ const angle = i * Math.PI * 2 / segments;
269
+ positions.push(radius * Math.cos(angle), radius * Math.sin(angle), z);
270
+ }
271
+ for (let ring = 0; ring < profile.length; ring++) {
272
+ const a = ring * segments;
273
+ const b = (ring + 1) % profile.length * segments;
274
+ for (let i = 0; i < segments; i++) {
275
+ const next = (i + 1) % segments;
276
+ indices.push(a + i, a + next, b + next, a + i, b + next, b + i);
277
+ }
278
+ }
279
+ return { positions, indices };
280
+ }
281
+
282
+ // lib/models/flangedbushing/FlangedBushing.tsx
283
+ function createFlangedBushingGeom(input) {
284
+ return indexedMeshToGeom3(createFlangedBushingMesh(input));
285
+ }
286
+ function FlangedBushing({
287
+ color = "#a18450",
288
+ ...props
289
+ }) {
290
+ return /* @__PURE__ */ jsx(Colorize, { color, children: /* @__PURE__ */ jsx(Custom, { geometry: createFlangedBushingGeom(props) }) });
291
+ }
292
+
293
+ // lib/models/flangedbushing/register.tsx
294
+ var model = defineModelRenderer({
295
+ name: "flangedbushing",
296
+ schema: flangedBushingModelDefinitionSchema,
297
+ render: ({ fn, ...props }) => /* @__PURE__ */ jsx(FlangedBushing, { ...props }),
298
+ pads: "none"
299
+ });
300
+ function register(registry) {
301
+ registry.register(model);
302
+ }
303
+
304
+ // lib/models/flatheadscrew/register.tsx
305
+ import { flatHeadScrewModelDefinitionSchema } from "@tscircuit/modelprinter";
306
+
229
307
  // lib/models/flatheadscrew/mesh.ts
230
308
  import {
231
309
  flatHeadScrewModelPropsSchema
@@ -341,21 +419,6 @@ function createFlatHeadScrewMesh(input, options = {}) {
341
419
  return { positions, indices };
342
420
  }
343
421
 
344
- // lib/mechanical/indexedMeshToGeom3.ts
345
- import jscad from "@jscad/modeling";
346
- function indexedMeshToGeom3(mesh) {
347
- const polygons = [];
348
- for (let i = 0; i < mesh.indices.length; i += 3)
349
- polygons.push(
350
- mesh.indices.slice(i, i + 3).map((index) => [
351
- mesh.positions[index * 3],
352
- mesh.positions[index * 3 + 1],
353
- mesh.positions[index * 3 + 2]
354
- ])
355
- );
356
- return jscad.geometries.geom3.fromPoints(polygons);
357
- }
358
-
359
422
  // lib/models/flatheadscrew/FlatHeadScrew.tsx
360
423
  function createFlatHeadScrewGeom(input, options) {
361
424
  return indexedMeshToGeom3(createFlatHeadScrewMesh(input, options));
@@ -368,14 +431,14 @@ function FlatHeadScrew({
368
431
  }
369
432
 
370
433
  // lib/models/flatheadscrew/register.tsx
371
- var model = defineModelRenderer({
434
+ var model2 = defineModelRenderer({
372
435
  name: "flatheadscrew",
373
436
  schema: flatHeadScrewModelDefinitionSchema,
374
437
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(FlatHeadScrew, { ...props }),
375
438
  pads: "none"
376
439
  });
377
- function register(registry) {
378
- registry.register(model);
440
+ function register2(registry) {
441
+ registry.register(model2);
379
442
  }
380
443
 
381
444
  // lib/models/flexscreen/register.tsx
@@ -1053,14 +1116,14 @@ var FlexScreen = (props) => {
1053
1116
  };
1054
1117
 
1055
1118
  // lib/models/flexscreen/register.tsx
1056
- var model2 = defineModelRenderer({
1119
+ var model3 = defineModelRenderer({
1057
1120
  name: "flexscreen",
1058
1121
  schema: flexScreenModelDefinitionSchema,
1059
1122
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(FlexScreen, { ...props }),
1060
1123
  pads: "footprinter"
1061
1124
  });
1062
- function register2(registry) {
1063
- registry.register(model2);
1125
+ function register3(registry) {
1126
+ registry.register(model3);
1064
1127
  }
1065
1128
 
1066
1129
  // lib/models/helicalgear/register.tsx
@@ -1266,14 +1329,14 @@ function HelicalGear({ color = "#737e8f", ...props }) {
1266
1329
  }
1267
1330
 
1268
1331
  // lib/models/helicalgear/register.tsx
1269
- var model3 = defineModelRenderer({
1332
+ var model4 = defineModelRenderer({
1270
1333
  name: "helicalgear",
1271
1334
  schema: helicalGearModelDefinitionSchema,
1272
1335
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(HelicalGear, { ...props }),
1273
1336
  pads: "none"
1274
1337
  });
1275
- function register3(registry) {
1276
- registry.register(model3);
1338
+ function register4(registry) {
1339
+ registry.register(model4);
1277
1340
  }
1278
1341
 
1279
1342
  // lib/models/hexbolt/register.tsx
@@ -1414,14 +1477,14 @@ function HexBolt({ color = "#737e8f", ...props }) {
1414
1477
  }
1415
1478
 
1416
1479
  // lib/models/hexbolt/register.tsx
1417
- var model4 = defineModelRenderer({
1480
+ var model5 = defineModelRenderer({
1418
1481
  name: "hexbolt",
1419
1482
  schema: hexBoltModelDefinitionSchema,
1420
1483
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(HexBolt, { ...props }),
1421
1484
  pads: "none"
1422
1485
  });
1423
- function register4(registry) {
1424
- registry.register(model4);
1486
+ function register5(registry) {
1487
+ registry.register(model5);
1425
1488
  }
1426
1489
 
1427
1490
  // lib/models/hexsocketbolt/register.tsx
@@ -1533,14 +1596,14 @@ function HexSocketBolt({
1533
1596
  }
1534
1597
 
1535
1598
  // lib/models/hexsocketbolt/register.tsx
1536
- var model5 = defineModelRenderer({
1599
+ var model6 = defineModelRenderer({
1537
1600
  name: "hexsocketbolt",
1538
1601
  schema: hexSocketBoltModelDefinitionSchema,
1539
1602
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(HexSocketBolt, { ...props }),
1540
1603
  pads: "none"
1541
1604
  });
1542
- function register5(registry) {
1543
- registry.register(model5);
1605
+ function register6(registry) {
1606
+ registry.register(model6);
1544
1607
  }
1545
1608
 
1546
1609
  // lib/models/nema/register.tsx
@@ -1809,14 +1872,14 @@ var NEMA17 = (props) => /* @__PURE__ */ jsx(NemaMotor, { ...props, nemaSize: 17
1809
1872
  var NEMA23 = (props) => /* @__PURE__ */ jsx(NemaMotor, { ...props, nemaSize: 23 });
1810
1873
 
1811
1874
  // lib/models/nema/register.tsx
1812
- var model6 = defineModelRenderer({
1875
+ var model7 = defineModelRenderer({
1813
1876
  name: "nema",
1814
1877
  schema: nemaMotorModelDefinitionSchema,
1815
1878
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(NemaMotor, { ...props }),
1816
1879
  pads: "none"
1817
1880
  });
1818
- function register6(registry) {
1819
- registry.register(model6);
1881
+ function register7(registry) {
1882
+ registry.register(model7);
1820
1883
  }
1821
1884
 
1822
1885
  // lib/models/panscrew/register.tsx
@@ -2028,14 +2091,14 @@ function PanScrew({ color = "#737e8f", ...props }) {
2028
2091
  }
2029
2092
 
2030
2093
  // lib/models/panscrew/register.tsx
2031
- var model7 = defineModelRenderer({
2094
+ var model8 = defineModelRenderer({
2032
2095
  name: "panscrew",
2033
2096
  schema: panScrewModelDefinitionSchema,
2034
2097
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(PanScrew, { ...props }),
2035
2098
  pads: "none"
2036
2099
  });
2037
- function register7(registry) {
2038
- registry.register(model7);
2100
+ function register8(registry) {
2101
+ registry.register(model8);
2039
2102
  }
2040
2103
 
2041
2104
  // lib/models/plainbushing/register.tsx
@@ -2098,14 +2161,14 @@ function PlainBushing({
2098
2161
  }
2099
2162
 
2100
2163
  // lib/models/plainbushing/register.tsx
2101
- var model8 = defineModelRenderer({
2164
+ var model9 = defineModelRenderer({
2102
2165
  name: "plainbushing",
2103
2166
  schema: plainBushingModelDefinitionSchema,
2104
2167
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(PlainBushing, { ...props }),
2105
2168
  pads: "none"
2106
2169
  });
2107
- function register8(registry) {
2108
- registry.register(model8);
2170
+ function register9(registry) {
2171
+ registry.register(model9);
2109
2172
  }
2110
2173
 
2111
2174
  // lib/models/sheetmetal/register.tsx
@@ -2265,14 +2328,14 @@ function SheetMetal({ color = "#737e8f", ...props }) {
2265
2328
  }
2266
2329
 
2267
2330
  // lib/models/sheetmetal/register.tsx
2268
- var model9 = defineModelRenderer({
2331
+ var model10 = defineModelRenderer({
2269
2332
  name: "sheetmetal",
2270
2333
  schema: sheetMetalModelDefinitionSchema,
2271
2334
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(SheetMetal, { ...props }),
2272
2335
  pads: "none"
2273
2336
  });
2274
- function register9(registry) {
2275
- registry.register(model9);
2337
+ function register10(registry) {
2338
+ registry.register(model10);
2276
2339
  }
2277
2340
 
2278
2341
  // lib/models/spurgear/register.tsx
@@ -2287,14 +2350,14 @@ function SpurGear({ color = "#737e8f", ...props }) {
2287
2350
  }
2288
2351
 
2289
2352
  // lib/models/spurgear/register.tsx
2290
- var model10 = defineModelRenderer({
2353
+ var model11 = defineModelRenderer({
2291
2354
  name: "spurgear",
2292
2355
  schema: spurGearModelDefinitionSchema,
2293
2356
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(SpurGear, { ...props }),
2294
2357
  pads: "none"
2295
2358
  });
2296
- function register10(registry) {
2297
- registry.register(model10);
2359
+ function register11(registry) {
2360
+ registry.register(model11);
2298
2361
  }
2299
2362
 
2300
2363
  // lib/models/wormgear/register.tsx
@@ -2486,14 +2549,14 @@ function WormGear({ color = "#737e8f", ...props }) {
2486
2549
  }
2487
2550
 
2488
2551
  // lib/models/wormgear/register.tsx
2489
- var model11 = defineModelRenderer({
2552
+ var model12 = defineModelRenderer({
2490
2553
  name: "wormgear",
2491
2554
  schema: wormGearModelDefinitionSchema,
2492
2555
  render: ({ fn, ...props }) => /* @__PURE__ */ jsx(WormGear, { ...props }),
2493
2556
  pads: "none"
2494
2557
  });
2495
- function register11(registry) {
2496
- registry.register(model11);
2558
+ function register12(registry) {
2559
+ registry.register(model12);
2497
2560
  }
2498
2561
 
2499
2562
  // lib/generated/model-renderers.ts
@@ -2509,6 +2572,7 @@ function registerAllModelRenderers(registry) {
2509
2572
  register9(registry);
2510
2573
  register10(registry);
2511
2574
  register11(registry);
2575
+ register12(registry);
2512
2576
  }
2513
2577
 
2514
2578
  // lib/default-model-registry.ts
@@ -10065,10 +10129,10 @@ var SOT143 = ({ footprint = "sot143" }) => {
10065
10129
  var Footprinter3d = ({ footprint }) => {
10066
10130
  const modelFn = mp3.string(footprint.split("_", 1)[0]).params().fn;
10067
10131
  if (mp3.getModelNames().includes(modelFn)) {
10068
- const model12 = mp3.string(footprint).json();
10069
- const renderer = modelRendererRegistry.get(model12.fn);
10132
+ const model13 = mp3.string(footprint).json();
10133
+ const renderer = modelRendererRegistry.get(model13.fn);
10070
10134
  if (renderer) {
10071
- return renderer.render(model12);
10135
+ return renderer.render(model13);
10072
10136
  }
10073
10137
  }
10074
10138
  let normalizedFootprint = footprint;
@@ -11019,6 +11083,7 @@ function createJSCADRenderer(jscad4) {
11019
11083
  return { createJSCADRoot };
11020
11084
  }
11021
11085
  export {
11086
+ FlangedBushing,
11022
11087
  FlatHeadScrew,
11023
11088
  Fragment,
11024
11089
  HelicalGear,
@@ -11034,6 +11099,8 @@ export {
11034
11099
  SpurGear,
11035
11100
  WormGear,
11036
11101
  convertCSGToThreeGeom,
11102
+ createFlangedBushingGeom,
11103
+ createFlangedBushingMesh,
11037
11104
  createFlatHeadScrewGeom,
11038
11105
  createFlatHeadScrewMesh,
11039
11106
  createHelicalGearGeom,