@invisra/printspec 0.1.1 → 0.1.3

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.
@@ -0,0 +1,3055 @@
1
+ // This file is generated by scripts/sync-schemas.mjs.
2
+ // Do not edit manually.
3
+ export const bundledSchemas = {
4
+ "cable-clip.schema.json": {
5
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
6
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/cable-clip.schema.json",
7
+ "type": "object",
8
+ "required": [
9
+ "type",
10
+ "label",
11
+ "parameters"
12
+ ],
13
+ "properties": {
14
+ "type": {
15
+ "const": "cable_clip",
16
+ "title": "Part type",
17
+ "description": "Stable printspec part family identifier."
18
+ },
19
+ "label": {
20
+ "type": "string",
21
+ "minLength": 1,
22
+ "title": "Label",
23
+ "description": "Human-readable name for this part."
24
+ },
25
+ "description": {
26
+ "type": "string",
27
+ "title": "Description",
28
+ "description": "Optional human-readable notes for this part."
29
+ },
30
+ "parameters": {
31
+ "type": "object",
32
+ "required": [
33
+ "baseLength",
34
+ "baseWidth",
35
+ "baseThickness",
36
+ "clipWallThickness"
37
+ ],
38
+ "properties": {
39
+ "baseLength": {
40
+ "type": "number",
41
+ "exclusiveMinimum": 0,
42
+ "maximum": 10000,
43
+ "title": "Base length",
44
+ "description": "Base length in millimeters.",
45
+ "x-printspec-control": "number",
46
+ "x-printspec-unit": "mm",
47
+ "x-printspec-step": 0.1,
48
+ "x-printspec-priority": "primary"
49
+ },
50
+ "baseWidth": {
51
+ "type": "number",
52
+ "exclusiveMinimum": 0,
53
+ "maximum": 10000,
54
+ "title": "Base width",
55
+ "description": "Base width in millimeters.",
56
+ "x-printspec-control": "number",
57
+ "x-printspec-unit": "mm",
58
+ "x-printspec-step": 0.1,
59
+ "x-printspec-priority": "primary"
60
+ },
61
+ "baseThickness": {
62
+ "type": "number",
63
+ "exclusiveMinimum": 0,
64
+ "maximum": 10000,
65
+ "title": "Base thickness",
66
+ "description": "Base thickness in millimeters.",
67
+ "x-printspec-control": "number",
68
+ "x-printspec-unit": "mm",
69
+ "x-printspec-step": 0.1,
70
+ "x-printspec-priority": "primary"
71
+ },
72
+ "clipInnerDiameter": {
73
+ "type": "number",
74
+ "exclusiveMinimum": 0,
75
+ "maximum": 10000,
76
+ "title": "Clip inner diameter",
77
+ "description": "Clip inner diameter in millimeters.",
78
+ "x-printspec-control": "number",
79
+ "x-printspec-unit": "mm",
80
+ "x-printspec-step": 0.1,
81
+ "x-printspec-priority": "advanced"
82
+ },
83
+ "clipOpeningWidth": {
84
+ "type": "number",
85
+ "exclusiveMinimum": 0,
86
+ "maximum": 10000,
87
+ "title": "Clip opening width",
88
+ "description": "Clip opening width in millimeters.",
89
+ "x-printspec-control": "number",
90
+ "x-printspec-unit": "mm",
91
+ "x-printspec-step": 0.1,
92
+ "x-printspec-priority": "advanced"
93
+ },
94
+ "clipWallThickness": {
95
+ "type": "number",
96
+ "exclusiveMinimum": 0,
97
+ "maximum": 10000,
98
+ "title": "Clip wall thickness",
99
+ "description": "Clip wall thickness in millimeters.",
100
+ "x-printspec-control": "number",
101
+ "x-printspec-unit": "mm",
102
+ "x-printspec-step": 0.1,
103
+ "x-printspec-priority": "primary"
104
+ },
105
+ "holes": {
106
+ "type": "array",
107
+ "items": {
108
+ "$ref": "common.schema.json#/$defs/Hole"
109
+ },
110
+ "title": "Holes",
111
+ "description": "Optional hole features to include in the generated part.",
112
+ "x-printspec-control": "hole-list",
113
+ "x-printspec-priority": "advanced",
114
+ "default": []
115
+ },
116
+ "slots": {
117
+ "type": "array",
118
+ "items": {
119
+ "$ref": "common.schema.json#/$defs/Slot"
120
+ },
121
+ "title": "Slots",
122
+ "description": "Optional slot features to include in the generated part.",
123
+ "x-printspec-control": "slot-list",
124
+ "x-printspec-priority": "advanced",
125
+ "default": []
126
+ },
127
+ "chamfer": {
128
+ "$ref": "common.schema.json#/$defs/Chamfer",
129
+ "title": "Chamfer",
130
+ "description": "Optional chamfer edge finishing request.",
131
+ "x-printspec-control": "number",
132
+ "x-printspec-priority": "advanced"
133
+ },
134
+ "fillet": {
135
+ "$ref": "common.schema.json#/$defs/Fillet",
136
+ "title": "Fillet",
137
+ "description": "Optional fillet edge finishing request.",
138
+ "x-printspec-control": "number",
139
+ "x-printspec-priority": "advanced"
140
+ },
141
+ "cornerRadius": {
142
+ "type": "number",
143
+ "exclusiveMinimum": 0,
144
+ "maximum": 10000,
145
+ "title": "Corner radius",
146
+ "description": "Corner radius in millimeters.",
147
+ "x-printspec-control": "number",
148
+ "x-printspec-unit": "mm",
149
+ "x-printspec-step": 0.1,
150
+ "x-printspec-priority": "advanced",
151
+ "examples": [
152
+ 4
153
+ ]
154
+ },
155
+ "mountingHoles": {
156
+ "type": "array",
157
+ "items": {
158
+ "$ref": "common.schema.json#/$defs/Hole"
159
+ },
160
+ "title": "Mounting holes",
161
+ "description": "Optional hole features to include in the generated part.",
162
+ "x-printspec-control": "hole-list",
163
+ "x-printspec-priority": "advanced",
164
+ "default": []
165
+ }
166
+ },
167
+ "additionalProperties": false,
168
+ "anyOf": [
169
+ {
170
+ "required": [
171
+ "clipInnerDiameter"
172
+ ]
173
+ },
174
+ {
175
+ "required": [
176
+ "clipOpeningWidth"
177
+ ]
178
+ }
179
+ ],
180
+ "title": "Parameters",
181
+ "description": "Editable parameters for Cable Clip.",
182
+ "x-printspec-ui": {
183
+ "order": [
184
+ "baseLength",
185
+ "baseWidth",
186
+ "baseThickness",
187
+ "clipInnerDiameter",
188
+ "clipOpeningWidth",
189
+ "clipWallThickness",
190
+ "holes",
191
+ "slots",
192
+ "chamfer",
193
+ "fillet",
194
+ "cornerRadius",
195
+ "mountingHoles"
196
+ ],
197
+ "groups": [
198
+ {
199
+ "id": "parameters",
200
+ "title": "Parameters",
201
+ "fields": [
202
+ "baseLength",
203
+ "baseWidth",
204
+ "baseThickness",
205
+ "clipInnerDiameter",
206
+ "clipOpeningWidth",
207
+ "clipWallThickness",
208
+ "holes",
209
+ "slots",
210
+ "chamfer",
211
+ "fillet",
212
+ "cornerRadius",
213
+ "mountingHoles"
214
+ ]
215
+ }
216
+ ]
217
+ }
218
+ },
219
+ "hardware": {
220
+ "type": "array",
221
+ "items": {
222
+ "$ref": "common.schema.json#/$defs/HardwareItem"
223
+ }
224
+ }
225
+ },
226
+ "additionalProperties": false,
227
+ "title": "Cable Clip",
228
+ "description": "Mountable clip for holding a cable or hose."
229
+ },
230
+ "cable-comb.schema.json": {
231
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
232
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/cable-comb.schema.json",
233
+ "type": "object",
234
+ "required": [
235
+ "type",
236
+ "label",
237
+ "parameters"
238
+ ],
239
+ "properties": {
240
+ "type": {
241
+ "const": "cable_comb",
242
+ "title": "Part type",
243
+ "description": "Stable printspec part family identifier."
244
+ },
245
+ "label": {
246
+ "type": "string",
247
+ "minLength": 1,
248
+ "title": "Label",
249
+ "description": "Human-readable name for this part."
250
+ },
251
+ "description": {
252
+ "type": "string",
253
+ "title": "Description",
254
+ "description": "Optional human-readable notes for this part."
255
+ },
256
+ "parameters": {
257
+ "type": "object",
258
+ "required": [
259
+ "length",
260
+ "width",
261
+ "thickness",
262
+ "slotCount",
263
+ "slotWidth",
264
+ "slotSpacing",
265
+ "slotDepth"
266
+ ],
267
+ "properties": {
268
+ "length": {
269
+ "type": "number",
270
+ "exclusiveMinimum": 0,
271
+ "maximum": 10000,
272
+ "title": "Length",
273
+ "description": "Length in millimeters.",
274
+ "x-printspec-control": "number",
275
+ "x-printspec-unit": "mm",
276
+ "x-printspec-step": 0.1,
277
+ "x-printspec-priority": "primary",
278
+ "examples": [
279
+ 100
280
+ ]
281
+ },
282
+ "width": {
283
+ "type": "number",
284
+ "exclusiveMinimum": 0,
285
+ "maximum": 10000,
286
+ "title": "Width",
287
+ "description": "Width in millimeters.",
288
+ "x-printspec-control": "number",
289
+ "x-printspec-unit": "mm",
290
+ "x-printspec-step": 0.1,
291
+ "x-printspec-priority": "primary",
292
+ "examples": [
293
+ 50
294
+ ]
295
+ },
296
+ "thickness": {
297
+ "type": "number",
298
+ "exclusiveMinimum": 0,
299
+ "maximum": 10000,
300
+ "title": "Thickness",
301
+ "description": "Thickness in millimeters.",
302
+ "x-printspec-control": "number",
303
+ "x-printspec-unit": "mm",
304
+ "x-printspec-step": 0.1,
305
+ "x-printspec-priority": "primary",
306
+ "examples": [
307
+ 3
308
+ ]
309
+ },
310
+ "slotCount": {
311
+ "type": "integer",
312
+ "minimum": 1,
313
+ "maximum": 64,
314
+ "title": "Slot count",
315
+ "description": "Slot count for the part.",
316
+ "x-printspec-control": "integer",
317
+ "x-printspec-unit": "count",
318
+ "x-printspec-step": 1,
319
+ "x-printspec-priority": "primary",
320
+ "examples": [
321
+ 8
322
+ ]
323
+ },
324
+ "slotWidth": {
325
+ "type": "number",
326
+ "exclusiveMinimum": 0,
327
+ "maximum": 10000,
328
+ "title": "Slot width",
329
+ "description": "Slot width in millimeters.",
330
+ "x-printspec-control": "number",
331
+ "x-printspec-unit": "mm",
332
+ "x-printspec-step": 0.1,
333
+ "x-printspec-priority": "primary"
334
+ },
335
+ "slotSpacing": {
336
+ "type": "number",
337
+ "exclusiveMinimum": 0,
338
+ "maximum": 10000,
339
+ "title": "Slot spacing",
340
+ "description": "Slot spacing in millimeters.",
341
+ "x-printspec-control": "number",
342
+ "x-printspec-unit": "mm",
343
+ "x-printspec-step": 0.1,
344
+ "x-printspec-priority": "primary"
345
+ },
346
+ "slotDepth": {
347
+ "type": "number",
348
+ "exclusiveMinimum": 0,
349
+ "maximum": 10000,
350
+ "title": "Slot depth",
351
+ "description": "Slot depth in millimeters.",
352
+ "x-printspec-control": "number",
353
+ "x-printspec-unit": "mm",
354
+ "x-printspec-step": 0.1,
355
+ "x-printspec-priority": "primary"
356
+ },
357
+ "holes": {
358
+ "type": "array",
359
+ "items": {
360
+ "$ref": "common.schema.json#/$defs/Hole"
361
+ },
362
+ "title": "Holes",
363
+ "description": "Optional hole features to include in the generated part.",
364
+ "x-printspec-control": "hole-list",
365
+ "x-printspec-priority": "advanced",
366
+ "default": []
367
+ },
368
+ "slots": {
369
+ "type": "array",
370
+ "items": {
371
+ "$ref": "common.schema.json#/$defs/Slot"
372
+ },
373
+ "title": "Slots",
374
+ "description": "Optional slot features to include in the generated part.",
375
+ "x-printspec-control": "slot-list",
376
+ "x-printspec-priority": "advanced",
377
+ "default": []
378
+ },
379
+ "chamfer": {
380
+ "$ref": "common.schema.json#/$defs/Chamfer",
381
+ "title": "Chamfer",
382
+ "description": "Optional chamfer edge finishing request.",
383
+ "x-printspec-control": "number",
384
+ "x-printspec-priority": "advanced"
385
+ },
386
+ "fillet": {
387
+ "$ref": "common.schema.json#/$defs/Fillet",
388
+ "title": "Fillet",
389
+ "description": "Optional fillet edge finishing request.",
390
+ "x-printspec-control": "number",
391
+ "x-printspec-priority": "advanced"
392
+ },
393
+ "cornerRadius": {
394
+ "type": "number",
395
+ "exclusiveMinimum": 0,
396
+ "maximum": 10000,
397
+ "title": "Corner radius",
398
+ "description": "Corner radius in millimeters.",
399
+ "x-printspec-control": "number",
400
+ "x-printspec-unit": "mm",
401
+ "x-printspec-step": 0.1,
402
+ "x-printspec-priority": "advanced",
403
+ "examples": [
404
+ 4
405
+ ]
406
+ }
407
+ },
408
+ "additionalProperties": false,
409
+ "title": "Parameters",
410
+ "description": "Editable parameters for Cable Comb.",
411
+ "x-printspec-ui": {
412
+ "order": [
413
+ "length",
414
+ "width",
415
+ "thickness",
416
+ "slotCount",
417
+ "slotWidth",
418
+ "slotSpacing",
419
+ "slotDepth",
420
+ "holes",
421
+ "slots",
422
+ "chamfer",
423
+ "fillet",
424
+ "cornerRadius"
425
+ ],
426
+ "groups": [
427
+ {
428
+ "id": "parameters",
429
+ "title": "Parameters",
430
+ "fields": [
431
+ "length",
432
+ "width",
433
+ "thickness",
434
+ "slotCount",
435
+ "slotWidth",
436
+ "slotSpacing",
437
+ "slotDepth",
438
+ "holes",
439
+ "slots",
440
+ "chamfer",
441
+ "fillet",
442
+ "cornerRadius"
443
+ ]
444
+ }
445
+ ]
446
+ }
447
+ },
448
+ "hardware": {
449
+ "type": "array",
450
+ "items": {
451
+ "$ref": "common.schema.json#/$defs/HardwareItem"
452
+ }
453
+ }
454
+ },
455
+ "additionalProperties": false,
456
+ "title": "Cable Comb",
457
+ "description": "Comb-style cable organizer with repeated cable slots."
458
+ },
459
+ "common.schema.json": {
460
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
461
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/common.schema.json",
462
+ "$defs": {
463
+ "Dimension": {
464
+ "type": "number",
465
+ "exclusiveMinimum": 0,
466
+ "maximum": 10000,
467
+ "title": "Dimension",
468
+ "description": " dimension parameter."
469
+ },
470
+ "Point2D": {
471
+ "type": "object",
472
+ "required": [
473
+ "x",
474
+ "y"
475
+ ],
476
+ "properties": {
477
+ "x": {
478
+ "type": "number",
479
+ "title": "X",
480
+ "description": "X parameter."
481
+ },
482
+ "y": {
483
+ "type": "number",
484
+ "title": "Y",
485
+ "description": "Y parameter."
486
+ }
487
+ },
488
+ "additionalProperties": false,
489
+ "title": "Point2D",
490
+ "description": " point2 d parameter."
491
+ },
492
+ "Point3D": {
493
+ "type": "object",
494
+ "required": [
495
+ "x",
496
+ "y",
497
+ "z"
498
+ ],
499
+ "properties": {
500
+ "x": {
501
+ "type": "number",
502
+ "title": "X",
503
+ "description": "X parameter."
504
+ },
505
+ "y": {
506
+ "type": "number",
507
+ "title": "Y",
508
+ "description": "Y parameter."
509
+ },
510
+ "z": {
511
+ "type": "number",
512
+ "title": "Z",
513
+ "description": "Z parameter."
514
+ }
515
+ },
516
+ "additionalProperties": false,
517
+ "title": "Point3D",
518
+ "description": " point3 d parameter."
519
+ },
520
+ "Countersink": {
521
+ "type": "object",
522
+ "required": [
523
+ "diameter",
524
+ "angle"
525
+ ],
526
+ "properties": {
527
+ "diameter": {
528
+ "type": "number",
529
+ "exclusiveMinimum": 0,
530
+ "maximum": 10000,
531
+ "title": "Diameter",
532
+ "description": "Diameter in millimeters."
533
+ },
534
+ "angle": {
535
+ "type": "number",
536
+ "minimum": 1,
537
+ "maximum": 179,
538
+ "title": "Angle",
539
+ "description": "Angle parameter."
540
+ }
541
+ },
542
+ "additionalProperties": false,
543
+ "title": "Countersink",
544
+ "description": " countersink for the part."
545
+ },
546
+ "Counterbore": {
547
+ "type": "object",
548
+ "required": [
549
+ "diameter",
550
+ "depth"
551
+ ],
552
+ "properties": {
553
+ "diameter": {
554
+ "type": "number",
555
+ "exclusiveMinimum": 0,
556
+ "maximum": 10000,
557
+ "title": "Diameter",
558
+ "description": "Diameter in millimeters."
559
+ },
560
+ "depth": {
561
+ "type": "number",
562
+ "exclusiveMinimum": 0,
563
+ "maximum": 10000,
564
+ "title": "Depth",
565
+ "description": "Depth in millimeters."
566
+ }
567
+ },
568
+ "additionalProperties": false,
569
+ "title": "Counterbore",
570
+ "description": " counterbore for the part."
571
+ },
572
+ "Hole": {
573
+ "type": "object",
574
+ "required": [
575
+ "x",
576
+ "y",
577
+ "diameter",
578
+ "depth"
579
+ ],
580
+ "properties": {
581
+ "id": {
582
+ "type": "string",
583
+ "title": "Id",
584
+ "description": "Id parameter."
585
+ },
586
+ "x": {
587
+ "type": "number",
588
+ "title": "X",
589
+ "description": "X parameter."
590
+ },
591
+ "y": {
592
+ "type": "number",
593
+ "title": "Y",
594
+ "description": "Y parameter."
595
+ },
596
+ "diameter": {
597
+ "type": "number",
598
+ "exclusiveMinimum": 0,
599
+ "maximum": 10000,
600
+ "title": "Diameter",
601
+ "description": "Diameter in millimeters."
602
+ },
603
+ "depth": {
604
+ "oneOf": [
605
+ {
606
+ "const": "through"
607
+ },
608
+ {
609
+ "type": "number",
610
+ "exclusiveMinimum": 0,
611
+ "maximum": 10000,
612
+ "title": "OneOf",
613
+ "description": "One of parameter."
614
+ }
615
+ ]
616
+ },
617
+ "axis": {
618
+ "enum": [
619
+ "x",
620
+ "y",
621
+ "z"
622
+ ],
623
+ "default": "z",
624
+ "title": "Axis",
625
+ "description": "Axis parameter.",
626
+ "examples": [
627
+ "z"
628
+ ],
629
+ "x-printspec-enumLabels": {
630
+ "x": "X axis",
631
+ "y": "Y axis",
632
+ "z": "Z axis"
633
+ }
634
+ },
635
+ "countersink": {
636
+ "$ref": "#/$defs/Countersink",
637
+ "title": "Countersink",
638
+ "description": "Countersink for the part."
639
+ },
640
+ "counterbore": {
641
+ "$ref": "#/$defs/Counterbore",
642
+ "title": "Counterbore",
643
+ "description": "Counterbore for the part."
644
+ }
645
+ },
646
+ "additionalProperties": false,
647
+ "title": "Hole",
648
+ "description": " hole parameter."
649
+ },
650
+ "Slot": {
651
+ "type": "object",
652
+ "required": [
653
+ "x",
654
+ "y",
655
+ "length",
656
+ "width",
657
+ "depth",
658
+ "axis"
659
+ ],
660
+ "properties": {
661
+ "id": {
662
+ "type": "string",
663
+ "title": "Id",
664
+ "description": "Id parameter."
665
+ },
666
+ "x": {
667
+ "type": "number",
668
+ "title": "X",
669
+ "description": "X parameter."
670
+ },
671
+ "y": {
672
+ "type": "number",
673
+ "title": "Y",
674
+ "description": "Y parameter."
675
+ },
676
+ "length": {
677
+ "type": "number",
678
+ "exclusiveMinimum": 0,
679
+ "maximum": 10000,
680
+ "title": "Length",
681
+ "description": "Length in millimeters."
682
+ },
683
+ "width": {
684
+ "type": "number",
685
+ "exclusiveMinimum": 0,
686
+ "maximum": 10000,
687
+ "title": "Width",
688
+ "description": "Width in millimeters."
689
+ },
690
+ "depth": {
691
+ "oneOf": [
692
+ {
693
+ "const": "through"
694
+ },
695
+ {
696
+ "type": "number",
697
+ "exclusiveMinimum": 0,
698
+ "maximum": 10000,
699
+ "title": "OneOf",
700
+ "description": "One of parameter."
701
+ }
702
+ ]
703
+ },
704
+ "axis": {
705
+ "enum": [
706
+ "x",
707
+ "y",
708
+ "z"
709
+ ],
710
+ "title": "Axis",
711
+ "description": "Axis parameter.",
712
+ "default": "z",
713
+ "examples": [
714
+ "z"
715
+ ],
716
+ "x-printspec-enumLabels": {
717
+ "x": "X axis",
718
+ "y": "Y axis",
719
+ "z": "Z axis"
720
+ }
721
+ }
722
+ },
723
+ "additionalProperties": false,
724
+ "title": "Slot",
725
+ "description": " slot parameter."
726
+ },
727
+ "Fillet": {
728
+ "type": "object",
729
+ "required": [
730
+ "radius"
731
+ ],
732
+ "properties": {
733
+ "radius": {
734
+ "type": "number",
735
+ "exclusiveMinimum": 0,
736
+ "maximum": 10000,
737
+ "title": "Radius",
738
+ "description": "Radius in millimeters."
739
+ },
740
+ "target": {
741
+ "type": "string",
742
+ "title": "Target",
743
+ "description": "Target parameter."
744
+ }
745
+ },
746
+ "additionalProperties": false,
747
+ "title": "Fillet",
748
+ "description": " fillet parameter."
749
+ },
750
+ "Chamfer": {
751
+ "type": "object",
752
+ "required": [
753
+ "distance"
754
+ ],
755
+ "properties": {
756
+ "distance": {
757
+ "type": "number",
758
+ "exclusiveMinimum": 0,
759
+ "maximum": 10000,
760
+ "title": "Distance",
761
+ "description": "Distance parameter."
762
+ },
763
+ "target": {
764
+ "type": "string",
765
+ "title": "Target",
766
+ "description": "Target parameter."
767
+ }
768
+ },
769
+ "additionalProperties": false,
770
+ "title": "Chamfer",
771
+ "description": " chamfer parameter."
772
+ },
773
+ "Pattern": {
774
+ "oneOf": [
775
+ {
776
+ "type": "object",
777
+ "required": [
778
+ "type",
779
+ "countX",
780
+ "countY",
781
+ "spacingX",
782
+ "spacingY"
783
+ ],
784
+ "properties": {
785
+ "type": {
786
+ "const": "rectangular"
787
+ },
788
+ "countX": {
789
+ "type": "integer",
790
+ "minimum": 1,
791
+ "maximum": 100,
792
+ "title": "CountX",
793
+ "description": "Count x for the part."
794
+ },
795
+ "countY": {
796
+ "type": "integer",
797
+ "minimum": 1,
798
+ "maximum": 100,
799
+ "title": "CountY",
800
+ "description": "Count y for the part."
801
+ },
802
+ "spacingX": {
803
+ "type": "number",
804
+ "exclusiveMinimum": 0,
805
+ "maximum": 10000,
806
+ "title": "SpacingX",
807
+ "description": "Spacing x in millimeters."
808
+ },
809
+ "spacingY": {
810
+ "type": "number",
811
+ "exclusiveMinimum": 0,
812
+ "maximum": 10000,
813
+ "title": "SpacingY",
814
+ "description": "Spacing y in millimeters."
815
+ }
816
+ },
817
+ "additionalProperties": false,
818
+ "title": "OneOf",
819
+ "description": "One of parameter."
820
+ },
821
+ {
822
+ "type": "object",
823
+ "required": [
824
+ "type",
825
+ "count",
826
+ "spacing"
827
+ ],
828
+ "properties": {
829
+ "type": {
830
+ "const": "linear"
831
+ },
832
+ "count": {
833
+ "type": "integer",
834
+ "minimum": 1,
835
+ "maximum": 100,
836
+ "title": "Count",
837
+ "description": "Count for the part."
838
+ },
839
+ "spacing": {
840
+ "type": "number",
841
+ "exclusiveMinimum": 0,
842
+ "maximum": 10000,
843
+ "title": "Spacing",
844
+ "description": "Spacing in millimeters."
845
+ },
846
+ "axis": {
847
+ "enum": [
848
+ "x",
849
+ "y",
850
+ "z"
851
+ ],
852
+ "title": "Axis",
853
+ "description": "Axis parameter.",
854
+ "default": "z",
855
+ "examples": [
856
+ "z"
857
+ ],
858
+ "x-printspec-enumLabels": {
859
+ "x": "X axis",
860
+ "y": "Y axis",
861
+ "z": "Z axis"
862
+ }
863
+ }
864
+ },
865
+ "additionalProperties": false,
866
+ "title": "OneOf",
867
+ "description": "One of parameter."
868
+ },
869
+ {
870
+ "type": "object",
871
+ "required": [
872
+ "type",
873
+ "count",
874
+ "radius"
875
+ ],
876
+ "properties": {
877
+ "type": {
878
+ "const": "radial"
879
+ },
880
+ "count": {
881
+ "type": "integer",
882
+ "minimum": 1,
883
+ "maximum": 100,
884
+ "title": "Count",
885
+ "description": "Count for the part."
886
+ },
887
+ "radius": {
888
+ "type": "number",
889
+ "exclusiveMinimum": 0,
890
+ "maximum": 10000,
891
+ "title": "Radius",
892
+ "description": "Radius in millimeters."
893
+ },
894
+ "startAngle": {
895
+ "type": "number",
896
+ "title": "StartAngle",
897
+ "description": "Start angle parameter."
898
+ },
899
+ "sweepAngle": {
900
+ "type": "number",
901
+ "title": "SweepAngle",
902
+ "description": "Sweep angle parameter."
903
+ }
904
+ },
905
+ "additionalProperties": false,
906
+ "title": "OneOf",
907
+ "description": "One of parameter."
908
+ }
909
+ ]
910
+ },
911
+ "SupplierReference": {
912
+ "type": "object",
913
+ "required": [
914
+ "supplier",
915
+ "partNumber"
916
+ ],
917
+ "properties": {
918
+ "supplier": {
919
+ "type": "string",
920
+ "minLength": 1,
921
+ "title": "Supplier",
922
+ "description": "Supplier parameter."
923
+ },
924
+ "partNumber": {
925
+ "type": "string",
926
+ "minLength": 1,
927
+ "title": "PartNumber",
928
+ "description": "Part number parameter."
929
+ },
930
+ "url": {
931
+ "type": "string",
932
+ "format": "uri",
933
+ "title": "Url",
934
+ "description": "Url parameter."
935
+ },
936
+ "description": {
937
+ "type": "string",
938
+ "title": "Description",
939
+ "description": "Description parameter."
940
+ }
941
+ },
942
+ "additionalProperties": false,
943
+ "title": "SupplierReference",
944
+ "description": " supplier reference parameter."
945
+ },
946
+ "HardwareItem": {
947
+ "type": "object",
948
+ "required": [
949
+ "id",
950
+ "kind",
951
+ "quantity"
952
+ ],
953
+ "properties": {
954
+ "id": {
955
+ "type": "string",
956
+ "minLength": 1,
957
+ "title": "Id",
958
+ "description": "Id parameter."
959
+ },
960
+ "kind": {
961
+ "type": "string",
962
+ "minLength": 1,
963
+ "title": "Kind",
964
+ "description": "Kind parameter."
965
+ },
966
+ "standard": {
967
+ "type": "string",
968
+ "title": "Standard",
969
+ "description": "Standard parameter."
970
+ },
971
+ "size": {
972
+ "type": "string",
973
+ "title": "Size",
974
+ "description": "Size parameter."
975
+ },
976
+ "quantity": {
977
+ "type": "integer",
978
+ "minimum": 1,
979
+ "maximum": 10000,
980
+ "title": "Quantity",
981
+ "description": "Quantity parameter."
982
+ },
983
+ "role": {
984
+ "type": "string",
985
+ "title": "Role",
986
+ "description": "Role parameter."
987
+ },
988
+ "supplierReferences": {
989
+ "type": "array",
990
+ "items": {
991
+ "$ref": "#/$defs/SupplierReference",
992
+ "title": "Items",
993
+ "description": "Items parameter."
994
+ },
995
+ "title": "SupplierReferences",
996
+ "description": "Supplier references parameter."
997
+ }
998
+ },
999
+ "additionalProperties": false,
1000
+ "title": "HardwareItem",
1001
+ "description": " hardware item parameter."
1002
+ }
1003
+ },
1004
+ "title": "Common Printspec Definitions",
1005
+ "description": "Reusable JSON Schema definitions shared by printspec schemas."
1006
+ },
1007
+ "composable-part.schema.json": {
1008
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1009
+ "type": "object",
1010
+ "required": [
1011
+ "type",
1012
+ "label",
1013
+ "components"
1014
+ ],
1015
+ "properties": {
1016
+ "type": {
1017
+ "const": "composable_part",
1018
+ "title": "Part type",
1019
+ "description": "Stable printspec part family identifier."
1020
+ },
1021
+ "label": {
1022
+ "type": "string",
1023
+ "title": "Label",
1024
+ "description": "Human-readable name for this part."
1025
+ },
1026
+ "description": {
1027
+ "type": "string",
1028
+ "title": "Description",
1029
+ "description": "Optional human-readable notes for this part."
1030
+ },
1031
+ "components": {
1032
+ "type": "array",
1033
+ "minItems": 1,
1034
+ "items": {
1035
+ "type": "object",
1036
+ "required": [
1037
+ "id",
1038
+ "kind",
1039
+ "operation",
1040
+ "dimensions"
1041
+ ],
1042
+ "properties": {
1043
+ "id": {
1044
+ "type": "string"
1045
+ },
1046
+ "name": {
1047
+ "type": "string"
1048
+ },
1049
+ "description": {
1050
+ "type": "string"
1051
+ },
1052
+ "kind": {
1053
+ "enum": [
1054
+ "box",
1055
+ "rounded_box",
1056
+ "cylinder",
1057
+ "tube",
1058
+ "plate",
1059
+ "tab",
1060
+ "boss",
1061
+ "rib",
1062
+ "wedge"
1063
+ ]
1064
+ },
1065
+ "operation": {
1066
+ "enum": [
1067
+ "add",
1068
+ "subtract"
1069
+ ]
1070
+ },
1071
+ "dimensions": {
1072
+ "type": "object",
1073
+ "additionalProperties": {
1074
+ "type": "number",
1075
+ "exclusiveMinimum": 0
1076
+ }
1077
+ },
1078
+ "position": {
1079
+ "$ref": "common.schema.json#/$defs/Point3D"
1080
+ },
1081
+ "relation": {
1082
+ "type": "object",
1083
+ "properties": {
1084
+ "type": {
1085
+ "enum": [
1086
+ "absolute",
1087
+ "on_top_of",
1088
+ "attached_to_face",
1089
+ "centered_on",
1090
+ "aligned_with",
1091
+ "offset_from",
1092
+ "mirrored_from"
1093
+ ]
1094
+ },
1095
+ "target": {
1096
+ "type": "string"
1097
+ },
1098
+ "face": {
1099
+ "type": "string"
1100
+ }
1101
+ },
1102
+ "additionalProperties": true
1103
+ },
1104
+ "pattern": {
1105
+ "$ref": "common.schema.json#/$defs/Pattern"
1106
+ },
1107
+ "materialRole": {
1108
+ "enum": [
1109
+ "body",
1110
+ "mount",
1111
+ "support",
1112
+ "cutout",
1113
+ "reference"
1114
+ ]
1115
+ }
1116
+ },
1117
+ "additionalProperties": false
1118
+ }
1119
+ },
1120
+ "features": {
1121
+ "type": "array",
1122
+ "items": {
1123
+ "type": "object",
1124
+ "required": [
1125
+ "id",
1126
+ "kind",
1127
+ "target"
1128
+ ],
1129
+ "properties": {
1130
+ "id": {
1131
+ "type": "string"
1132
+ },
1133
+ "kind": {
1134
+ "enum": [
1135
+ "hole",
1136
+ "slot",
1137
+ "counterbore",
1138
+ "countersink",
1139
+ "fillet",
1140
+ "chamfer",
1141
+ "text"
1142
+ ]
1143
+ },
1144
+ "target": {
1145
+ "type": "string"
1146
+ },
1147
+ "position": {
1148
+ "$ref": "common.schema.json#/$defs/Point3D"
1149
+ },
1150
+ "relation": {
1151
+ "type": "object"
1152
+ },
1153
+ "pattern": {
1154
+ "$ref": "common.schema.json#/$defs/Pattern"
1155
+ },
1156
+ "parameters": {
1157
+ "type": "object"
1158
+ }
1159
+ },
1160
+ "additionalProperties": false
1161
+ }
1162
+ },
1163
+ "constraints": {
1164
+ "type": "array",
1165
+ "items": {
1166
+ "type": "object"
1167
+ }
1168
+ },
1169
+ "hardware": {
1170
+ "type": "array",
1171
+ "items": {
1172
+ "$ref": "common.schema.json#/$defs/HardwareItem"
1173
+ }
1174
+ }
1175
+ },
1176
+ "additionalProperties": false,
1177
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/composable-part.schema.json",
1178
+ "title": "Composable Part",
1179
+ "description": "Composable Part schema for printspec documents."
1180
+ },
1181
+ "drill-guide.schema.json": {
1182
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1183
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/drill-guide.schema.json",
1184
+ "type": "object",
1185
+ "required": [
1186
+ "type",
1187
+ "label",
1188
+ "parameters"
1189
+ ],
1190
+ "properties": {
1191
+ "type": {
1192
+ "const": "drill_guide",
1193
+ "title": "Part type",
1194
+ "description": "Stable printspec part family identifier."
1195
+ },
1196
+ "label": {
1197
+ "type": "string",
1198
+ "minLength": 1,
1199
+ "title": "Label",
1200
+ "description": "Human-readable name for this part."
1201
+ },
1202
+ "description": {
1203
+ "type": "string",
1204
+ "title": "Description",
1205
+ "description": "Optional human-readable notes for this part."
1206
+ },
1207
+ "parameters": {
1208
+ "type": "object",
1209
+ "required": [
1210
+ "length",
1211
+ "width",
1212
+ "height",
1213
+ "holeDiameter",
1214
+ "holeCount",
1215
+ "holeSpacing"
1216
+ ],
1217
+ "properties": {
1218
+ "length": {
1219
+ "type": "number",
1220
+ "exclusiveMinimum": 0,
1221
+ "maximum": 10000,
1222
+ "title": "Length",
1223
+ "description": "Length in millimeters.",
1224
+ "x-printspec-control": "number",
1225
+ "x-printspec-unit": "mm",
1226
+ "x-printspec-step": 0.1,
1227
+ "x-printspec-priority": "primary",
1228
+ "examples": [
1229
+ 100
1230
+ ]
1231
+ },
1232
+ "width": {
1233
+ "type": "number",
1234
+ "exclusiveMinimum": 0,
1235
+ "maximum": 10000,
1236
+ "title": "Width",
1237
+ "description": "Width in millimeters.",
1238
+ "x-printspec-control": "number",
1239
+ "x-printspec-unit": "mm",
1240
+ "x-printspec-step": 0.1,
1241
+ "x-printspec-priority": "primary",
1242
+ "examples": [
1243
+ 50
1244
+ ]
1245
+ },
1246
+ "height": {
1247
+ "type": "number",
1248
+ "exclusiveMinimum": 0,
1249
+ "maximum": 10000,
1250
+ "title": "Height",
1251
+ "description": "Height in millimeters.",
1252
+ "x-printspec-control": "number",
1253
+ "x-printspec-unit": "mm",
1254
+ "x-printspec-step": 0.1,
1255
+ "x-printspec-priority": "primary",
1256
+ "examples": [
1257
+ 10
1258
+ ]
1259
+ },
1260
+ "holeDiameter": {
1261
+ "type": "number",
1262
+ "exclusiveMinimum": 0,
1263
+ "maximum": 10000,
1264
+ "title": "Hole diameter",
1265
+ "description": "Hole diameter in millimeters.",
1266
+ "x-printspec-control": "number",
1267
+ "x-printspec-unit": "mm",
1268
+ "x-printspec-step": 0.1,
1269
+ "x-printspec-priority": "primary",
1270
+ "examples": [
1271
+ 3.2
1272
+ ]
1273
+ },
1274
+ "holeCount": {
1275
+ "type": "integer",
1276
+ "minimum": 1,
1277
+ "maximum": 50,
1278
+ "title": "Hole count",
1279
+ "description": "Hole count for the part.",
1280
+ "x-printspec-control": "integer",
1281
+ "x-printspec-unit": "count",
1282
+ "x-printspec-step": 1,
1283
+ "x-printspec-priority": "primary"
1284
+ },
1285
+ "holeSpacing": {
1286
+ "type": "number",
1287
+ "exclusiveMinimum": 0,
1288
+ "maximum": 10000,
1289
+ "title": "Hole spacing",
1290
+ "description": "Hole spacing in millimeters.",
1291
+ "x-printspec-control": "number",
1292
+ "x-printspec-unit": "mm",
1293
+ "x-printspec-step": 0.1,
1294
+ "x-printspec-priority": "primary"
1295
+ },
1296
+ "bushingDiameter": {
1297
+ "type": "number",
1298
+ "exclusiveMinimum": 0,
1299
+ "maximum": 10000,
1300
+ "title": "Bushing diameter",
1301
+ "description": "Bushing diameter in millimeters.",
1302
+ "x-printspec-control": "number",
1303
+ "x-printspec-unit": "mm",
1304
+ "x-printspec-step": 0.1,
1305
+ "x-printspec-priority": "advanced"
1306
+ },
1307
+ "holes": {
1308
+ "type": "array",
1309
+ "items": {
1310
+ "$ref": "common.schema.json#/$defs/Hole"
1311
+ },
1312
+ "title": "Holes",
1313
+ "description": "Optional hole features to include in the generated part.",
1314
+ "x-printspec-control": "hole-list",
1315
+ "x-printspec-priority": "advanced",
1316
+ "default": []
1317
+ },
1318
+ "slots": {
1319
+ "type": "array",
1320
+ "items": {
1321
+ "$ref": "common.schema.json#/$defs/Slot"
1322
+ },
1323
+ "title": "Slots",
1324
+ "description": "Optional slot features to include in the generated part.",
1325
+ "x-printspec-control": "slot-list",
1326
+ "x-printspec-priority": "advanced",
1327
+ "default": []
1328
+ },
1329
+ "chamfer": {
1330
+ "$ref": "common.schema.json#/$defs/Chamfer",
1331
+ "title": "Chamfer",
1332
+ "description": "Optional chamfer edge finishing request.",
1333
+ "x-printspec-control": "number",
1334
+ "x-printspec-priority": "advanced"
1335
+ },
1336
+ "fillet": {
1337
+ "$ref": "common.schema.json#/$defs/Fillet",
1338
+ "title": "Fillet",
1339
+ "description": "Optional fillet edge finishing request.",
1340
+ "x-printspec-control": "number",
1341
+ "x-printspec-priority": "advanced"
1342
+ },
1343
+ "cornerRadius": {
1344
+ "type": "number",
1345
+ "exclusiveMinimum": 0,
1346
+ "maximum": 10000,
1347
+ "title": "Corner radius",
1348
+ "description": "Corner radius in millimeters.",
1349
+ "x-printspec-control": "number",
1350
+ "x-printspec-unit": "mm",
1351
+ "x-printspec-step": 0.1,
1352
+ "x-printspec-priority": "advanced",
1353
+ "examples": [
1354
+ 4
1355
+ ]
1356
+ }
1357
+ },
1358
+ "additionalProperties": false,
1359
+ "title": "Parameters",
1360
+ "description": "Editable parameters for Drill Guide.",
1361
+ "x-printspec-ui": {
1362
+ "order": [
1363
+ "length",
1364
+ "width",
1365
+ "height",
1366
+ "holeDiameter",
1367
+ "holeCount",
1368
+ "holeSpacing",
1369
+ "bushingDiameter",
1370
+ "holes",
1371
+ "slots",
1372
+ "chamfer",
1373
+ "fillet",
1374
+ "cornerRadius"
1375
+ ],
1376
+ "groups": [
1377
+ {
1378
+ "id": "parameters",
1379
+ "title": "Parameters",
1380
+ "fields": [
1381
+ "length",
1382
+ "width",
1383
+ "height",
1384
+ "holeDiameter",
1385
+ "holeCount",
1386
+ "holeSpacing",
1387
+ "bushingDiameter",
1388
+ "holes",
1389
+ "slots",
1390
+ "chamfer",
1391
+ "fillet",
1392
+ "cornerRadius"
1393
+ ]
1394
+ }
1395
+ ]
1396
+ }
1397
+ },
1398
+ "hardware": {
1399
+ "type": "array",
1400
+ "items": {
1401
+ "$ref": "common.schema.json#/$defs/HardwareItem"
1402
+ }
1403
+ }
1404
+ },
1405
+ "additionalProperties": false,
1406
+ "title": "Drill Guide",
1407
+ "description": "Block used to guide repeated drilled holes."
1408
+ },
1409
+ "electronics-standoff.schema.json": {
1410
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1411
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/electronics-standoff.schema.json",
1412
+ "type": "object",
1413
+ "required": [
1414
+ "type",
1415
+ "label",
1416
+ "parameters"
1417
+ ],
1418
+ "properties": {
1419
+ "type": {
1420
+ "const": "electronics_standoff",
1421
+ "title": "Part type",
1422
+ "description": "Stable printspec part family identifier."
1423
+ },
1424
+ "label": {
1425
+ "type": "string",
1426
+ "minLength": 1,
1427
+ "title": "Label",
1428
+ "description": "Human-readable name for this part."
1429
+ },
1430
+ "description": {
1431
+ "type": "string",
1432
+ "title": "Description",
1433
+ "description": "Optional human-readable notes for this part."
1434
+ },
1435
+ "parameters": {
1436
+ "type": "object",
1437
+ "required": [
1438
+ "outerDiameter",
1439
+ "height",
1440
+ "holeDiameter"
1441
+ ],
1442
+ "properties": {
1443
+ "outerDiameter": {
1444
+ "type": "number",
1445
+ "exclusiveMinimum": 0,
1446
+ "maximum": 10000,
1447
+ "title": "Outer diameter",
1448
+ "description": "Outer diameter in millimeters.",
1449
+ "x-printspec-control": "number",
1450
+ "x-printspec-unit": "mm",
1451
+ "x-printspec-step": 0.1,
1452
+ "x-printspec-priority": "primary",
1453
+ "examples": [
1454
+ 12
1455
+ ]
1456
+ },
1457
+ "height": {
1458
+ "type": "number",
1459
+ "exclusiveMinimum": 0,
1460
+ "maximum": 10000,
1461
+ "title": "Height",
1462
+ "description": "Height in millimeters.",
1463
+ "x-printspec-control": "number",
1464
+ "x-printspec-unit": "mm",
1465
+ "x-printspec-step": 0.1,
1466
+ "x-printspec-priority": "primary",
1467
+ "examples": [
1468
+ 10
1469
+ ]
1470
+ },
1471
+ "holeDiameter": {
1472
+ "type": "number",
1473
+ "exclusiveMinimum": 0,
1474
+ "maximum": 10000,
1475
+ "title": "Hole diameter",
1476
+ "description": "Hole diameter in millimeters.",
1477
+ "x-printspec-control": "number",
1478
+ "x-printspec-unit": "mm",
1479
+ "x-printspec-step": 0.1,
1480
+ "x-printspec-priority": "primary",
1481
+ "examples": [
1482
+ 3.2
1483
+ ]
1484
+ },
1485
+ "baseDiameter": {
1486
+ "type": "number",
1487
+ "exclusiveMinimum": 0,
1488
+ "maximum": 10000,
1489
+ "title": "Base diameter",
1490
+ "description": "Base diameter in millimeters.",
1491
+ "x-printspec-control": "number",
1492
+ "x-printspec-unit": "mm",
1493
+ "x-printspec-step": 0.1,
1494
+ "x-printspec-priority": "advanced"
1495
+ },
1496
+ "baseHeight": {
1497
+ "type": "number",
1498
+ "exclusiveMinimum": 0,
1499
+ "maximum": 10000,
1500
+ "title": "Base height",
1501
+ "description": "Base height in millimeters.",
1502
+ "x-printspec-control": "number",
1503
+ "x-printspec-unit": "mm",
1504
+ "x-printspec-step": 0.1,
1505
+ "x-printspec-priority": "advanced"
1506
+ },
1507
+ "holes": {
1508
+ "type": "array",
1509
+ "items": {
1510
+ "$ref": "common.schema.json#/$defs/Hole"
1511
+ },
1512
+ "title": "Holes",
1513
+ "description": "Optional hole features to include in the generated part.",
1514
+ "x-printspec-control": "hole-list",
1515
+ "x-printspec-priority": "advanced",
1516
+ "default": []
1517
+ },
1518
+ "slots": {
1519
+ "type": "array",
1520
+ "items": {
1521
+ "$ref": "common.schema.json#/$defs/Slot"
1522
+ },
1523
+ "title": "Slots",
1524
+ "description": "Optional slot features to include in the generated part.",
1525
+ "x-printspec-control": "slot-list",
1526
+ "x-printspec-priority": "advanced",
1527
+ "default": []
1528
+ },
1529
+ "chamfer": {
1530
+ "$ref": "common.schema.json#/$defs/Chamfer",
1531
+ "title": "Chamfer",
1532
+ "description": "Optional chamfer edge finishing request.",
1533
+ "x-printspec-control": "number",
1534
+ "x-printspec-priority": "advanced"
1535
+ },
1536
+ "fillet": {
1537
+ "$ref": "common.schema.json#/$defs/Fillet",
1538
+ "title": "Fillet",
1539
+ "description": "Optional fillet edge finishing request.",
1540
+ "x-printspec-control": "number",
1541
+ "x-printspec-priority": "advanced"
1542
+ },
1543
+ "cornerRadius": {
1544
+ "type": "number",
1545
+ "exclusiveMinimum": 0,
1546
+ "maximum": 10000,
1547
+ "title": "Corner radius",
1548
+ "description": "Corner radius in millimeters.",
1549
+ "x-printspec-control": "number",
1550
+ "x-printspec-unit": "mm",
1551
+ "x-printspec-step": 0.1,
1552
+ "x-printspec-priority": "advanced",
1553
+ "examples": [
1554
+ 4
1555
+ ]
1556
+ }
1557
+ },
1558
+ "additionalProperties": false,
1559
+ "title": "Parameters",
1560
+ "description": "Editable parameters for Electronics Standoff.",
1561
+ "x-printspec-ui": {
1562
+ "order": [
1563
+ "outerDiameter",
1564
+ "height",
1565
+ "holeDiameter",
1566
+ "baseDiameter",
1567
+ "baseHeight",
1568
+ "cornerRadius",
1569
+ "holes",
1570
+ "slots",
1571
+ "chamfer",
1572
+ "fillet"
1573
+ ],
1574
+ "groups": [
1575
+ {
1576
+ "id": "dimensions",
1577
+ "title": "Dimensions",
1578
+ "fields": [
1579
+ "outerDiameter",
1580
+ "height",
1581
+ "holeDiameter",
1582
+ "baseDiameter",
1583
+ "baseHeight",
1584
+ "cornerRadius"
1585
+ ]
1586
+ },
1587
+ {
1588
+ "id": "features",
1589
+ "title": "Features",
1590
+ "fields": [
1591
+ "holes",
1592
+ "slots"
1593
+ ]
1594
+ },
1595
+ {
1596
+ "id": "finishing",
1597
+ "title": "Finishing",
1598
+ "fields": [
1599
+ "chamfer",
1600
+ "fillet"
1601
+ ]
1602
+ }
1603
+ ]
1604
+ }
1605
+ },
1606
+ "hardware": {
1607
+ "type": "array",
1608
+ "items": {
1609
+ "$ref": "common.schema.json#/$defs/HardwareItem"
1610
+ }
1611
+ }
1612
+ },
1613
+ "additionalProperties": false,
1614
+ "title": "Electronics Standoff",
1615
+ "description": "Round standoff with optional base for supporting circuit boards."
1616
+ },
1617
+ "l-bracket.schema.json": {
1618
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1619
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/l-bracket.schema.json",
1620
+ "type": "object",
1621
+ "required": [
1622
+ "type",
1623
+ "label",
1624
+ "parameters"
1625
+ ],
1626
+ "properties": {
1627
+ "type": {
1628
+ "const": "l_bracket",
1629
+ "title": "Part type",
1630
+ "description": "Stable printspec part family identifier."
1631
+ },
1632
+ "label": {
1633
+ "type": "string",
1634
+ "minLength": 1,
1635
+ "title": "Label",
1636
+ "description": "Human-readable name for this part."
1637
+ },
1638
+ "description": {
1639
+ "type": "string",
1640
+ "title": "Description",
1641
+ "description": "Optional human-readable notes for this part."
1642
+ },
1643
+ "parameters": {
1644
+ "type": "object",
1645
+ "required": [
1646
+ "legLengthA",
1647
+ "legLengthB",
1648
+ "width",
1649
+ "thickness"
1650
+ ],
1651
+ "properties": {
1652
+ "legLengthA": {
1653
+ "type": "number",
1654
+ "exclusiveMinimum": 0,
1655
+ "maximum": 10000,
1656
+ "title": "Leg A length",
1657
+ "description": "Leg A length in millimeters.",
1658
+ "x-printspec-control": "number",
1659
+ "x-printspec-unit": "mm",
1660
+ "x-printspec-step": 0.1,
1661
+ "x-printspec-priority": "primary"
1662
+ },
1663
+ "legLengthB": {
1664
+ "type": "number",
1665
+ "exclusiveMinimum": 0,
1666
+ "maximum": 10000,
1667
+ "title": "Leg B length",
1668
+ "description": "Leg B length in millimeters.",
1669
+ "x-printspec-control": "number",
1670
+ "x-printspec-unit": "mm",
1671
+ "x-printspec-step": 0.1,
1672
+ "x-printspec-priority": "primary"
1673
+ },
1674
+ "width": {
1675
+ "type": "number",
1676
+ "exclusiveMinimum": 0,
1677
+ "maximum": 10000,
1678
+ "title": "Width",
1679
+ "description": "Width in millimeters.",
1680
+ "x-printspec-control": "number",
1681
+ "x-printspec-unit": "mm",
1682
+ "x-printspec-step": 0.1,
1683
+ "x-printspec-priority": "primary",
1684
+ "examples": [
1685
+ 50
1686
+ ]
1687
+ },
1688
+ "thickness": {
1689
+ "type": "number",
1690
+ "exclusiveMinimum": 0,
1691
+ "maximum": 10000,
1692
+ "title": "Thickness",
1693
+ "description": "Thickness in millimeters.",
1694
+ "x-printspec-control": "number",
1695
+ "x-printspec-unit": "mm",
1696
+ "x-printspec-step": 0.1,
1697
+ "x-printspec-priority": "primary",
1698
+ "examples": [
1699
+ 3
1700
+ ]
1701
+ },
1702
+ "holes": {
1703
+ "type": "array",
1704
+ "items": {
1705
+ "$ref": "common.schema.json#/$defs/Hole"
1706
+ },
1707
+ "title": "Holes",
1708
+ "description": "Optional hole features to include in the generated part.",
1709
+ "x-printspec-control": "hole-list",
1710
+ "x-printspec-priority": "advanced",
1711
+ "default": []
1712
+ },
1713
+ "slots": {
1714
+ "type": "array",
1715
+ "items": {
1716
+ "$ref": "common.schema.json#/$defs/Slot"
1717
+ },
1718
+ "title": "Slots",
1719
+ "description": "Optional slot features to include in the generated part.",
1720
+ "x-printspec-control": "slot-list",
1721
+ "x-printspec-priority": "advanced",
1722
+ "default": []
1723
+ },
1724
+ "chamfer": {
1725
+ "$ref": "common.schema.json#/$defs/Chamfer",
1726
+ "title": "Chamfer",
1727
+ "description": "Optional chamfer edge finishing request.",
1728
+ "x-printspec-control": "number",
1729
+ "x-printspec-priority": "advanced"
1730
+ },
1731
+ "fillet": {
1732
+ "$ref": "common.schema.json#/$defs/Fillet",
1733
+ "title": "Fillet",
1734
+ "description": "Optional fillet edge finishing request.",
1735
+ "x-printspec-control": "number",
1736
+ "x-printspec-priority": "advanced"
1737
+ },
1738
+ "cornerRadius": {
1739
+ "type": "number",
1740
+ "exclusiveMinimum": 0,
1741
+ "maximum": 10000,
1742
+ "title": "Corner radius",
1743
+ "description": "Corner radius in millimeters.",
1744
+ "x-printspec-control": "number",
1745
+ "x-printspec-unit": "mm",
1746
+ "x-printspec-step": 0.1,
1747
+ "x-printspec-priority": "advanced",
1748
+ "examples": [
1749
+ 4
1750
+ ]
1751
+ },
1752
+ "rib": {
1753
+ "type": "object",
1754
+ "properties": {
1755
+ "enabled": {
1756
+ "type": "boolean"
1757
+ },
1758
+ "thickness": {
1759
+ "type": "number",
1760
+ "exclusiveMinimum": 0,
1761
+ "maximum": 10000
1762
+ }
1763
+ },
1764
+ "additionalProperties": false,
1765
+ "title": "Rib",
1766
+ "description": "Rib parameter.",
1767
+ "x-printspec-control": "number",
1768
+ "x-printspec-priority": "advanced"
1769
+ }
1770
+ },
1771
+ "additionalProperties": false,
1772
+ "title": "Parameters",
1773
+ "description": "Editable parameters for L Bracket.",
1774
+ "x-printspec-ui": {
1775
+ "order": [
1776
+ "legLengthA",
1777
+ "legLengthB",
1778
+ "width",
1779
+ "thickness",
1780
+ "holes",
1781
+ "slots",
1782
+ "chamfer",
1783
+ "fillet",
1784
+ "cornerRadius",
1785
+ "rib"
1786
+ ],
1787
+ "groups": [
1788
+ {
1789
+ "id": "parameters",
1790
+ "title": "Parameters",
1791
+ "fields": [
1792
+ "legLengthA",
1793
+ "legLengthB",
1794
+ "width",
1795
+ "thickness",
1796
+ "holes",
1797
+ "slots",
1798
+ "chamfer",
1799
+ "fillet",
1800
+ "cornerRadius",
1801
+ "rib"
1802
+ ]
1803
+ }
1804
+ ]
1805
+ }
1806
+ },
1807
+ "hardware": {
1808
+ "type": "array",
1809
+ "items": {
1810
+ "$ref": "common.schema.json#/$defs/HardwareItem"
1811
+ }
1812
+ }
1813
+ },
1814
+ "additionalProperties": false,
1815
+ "title": "L Bracket",
1816
+ "description": "Two-leg right-angle bracket with optional mounting features."
1817
+ },
1818
+ "part-family.schema.json": {
1819
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1820
+ "oneOf": [
1821
+ {
1822
+ "$ref": "rounded-rectangular-plate.schema.json"
1823
+ },
1824
+ {
1825
+ "$ref": "spacer-block.schema.json"
1826
+ },
1827
+ {
1828
+ "$ref": "round-spacer.schema.json"
1829
+ },
1830
+ {
1831
+ "$ref": "electronics-standoff.schema.json"
1832
+ },
1833
+ {
1834
+ "$ref": "l-bracket.schema.json"
1835
+ },
1836
+ {
1837
+ "$ref": "cable-comb.schema.json"
1838
+ },
1839
+ {
1840
+ "$ref": "cable-clip.schema.json"
1841
+ },
1842
+ {
1843
+ "$ref": "drill-guide.schema.json"
1844
+ },
1845
+ {
1846
+ "$ref": "simple-box.schema.json"
1847
+ },
1848
+ {
1849
+ "$ref": "simple-lid.schema.json"
1850
+ }
1851
+ ],
1852
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/part-family.schema.json",
1853
+ "title": "Part Family",
1854
+ "description": "Part Family schema for printspec documents."
1855
+ },
1856
+ "printspec.schema.json": {
1857
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1858
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/printspec.schema.json",
1859
+ "type": "object",
1860
+ "required": [
1861
+ "printspecVersion",
1862
+ "units"
1863
+ ],
1864
+ "properties": {
1865
+ "printspecVersion": {
1866
+ "const": "0.1.0"
1867
+ },
1868
+ "units": {
1869
+ "const": "mm"
1870
+ },
1871
+ "part": {
1872
+ "oneOf": [
1873
+ {
1874
+ "$ref": "part-family.schema.json"
1875
+ },
1876
+ {
1877
+ "$ref": "composable-part.schema.json"
1878
+ }
1879
+ ]
1880
+ },
1881
+ "project": {
1882
+ "$ref": "project.schema.json"
1883
+ },
1884
+ "print": {
1885
+ "type": "object",
1886
+ "properties": {
1887
+ "intendedMaterial": {
1888
+ "type": "string"
1889
+ },
1890
+ "recommendedOrientation": {
1891
+ "type": "string"
1892
+ },
1893
+ "notes": {
1894
+ "type": "array",
1895
+ "items": {
1896
+ "type": "string"
1897
+ }
1898
+ }
1899
+ },
1900
+ "additionalProperties": false
1901
+ },
1902
+ "hardware": {
1903
+ "type": "array",
1904
+ "items": {
1905
+ "$ref": "common.schema.json#/$defs/HardwareItem"
1906
+ }
1907
+ },
1908
+ "metadata": {
1909
+ "type": "object",
1910
+ "additionalProperties": true
1911
+ }
1912
+ },
1913
+ "oneOf": [
1914
+ {
1915
+ "required": [
1916
+ "part"
1917
+ ]
1918
+ },
1919
+ {
1920
+ "required": [
1921
+ "project"
1922
+ ]
1923
+ }
1924
+ ],
1925
+ "additionalProperties": false,
1926
+ "title": "Printspec",
1927
+ "description": "Printspec schema for printspec documents."
1928
+ },
1929
+ "project.schema.json": {
1930
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1931
+ "type": "object",
1932
+ "required": [
1933
+ "type",
1934
+ "label",
1935
+ "parts"
1936
+ ],
1937
+ "properties": {
1938
+ "type": {
1939
+ "const": "project",
1940
+ "title": "Part type",
1941
+ "description": "Stable printspec part family identifier."
1942
+ },
1943
+ "label": {
1944
+ "type": "string",
1945
+ "title": "Label",
1946
+ "description": "Human-readable name for this part."
1947
+ },
1948
+ "description": {
1949
+ "type": "string",
1950
+ "title": "Description",
1951
+ "description": "Optional human-readable notes for this part."
1952
+ },
1953
+ "parts": {
1954
+ "type": "array",
1955
+ "minItems": 1,
1956
+ "items": {
1957
+ "type": "object",
1958
+ "required": [
1959
+ "id",
1960
+ "label"
1961
+ ],
1962
+ "properties": {
1963
+ "id": {
1964
+ "type": "string"
1965
+ },
1966
+ "label": {
1967
+ "type": "string"
1968
+ },
1969
+ "spec": {
1970
+ "$ref": "printspec.schema.json"
1971
+ },
1972
+ "specPath": {
1973
+ "type": "string"
1974
+ },
1975
+ "role": {
1976
+ "type": "string"
1977
+ },
1978
+ "quantity": {
1979
+ "type": "integer",
1980
+ "minimum": 1,
1981
+ "default": 1
1982
+ }
1983
+ },
1984
+ "oneOf": [
1985
+ {
1986
+ "required": [
1987
+ "spec"
1988
+ ]
1989
+ },
1990
+ {
1991
+ "required": [
1992
+ "specPath"
1993
+ ]
1994
+ }
1995
+ ],
1996
+ "additionalProperties": false
1997
+ }
1998
+ },
1999
+ "hardware": {
2000
+ "type": "array",
2001
+ "items": {
2002
+ "$ref": "common.schema.json#/$defs/HardwareItem"
2003
+ }
2004
+ },
2005
+ "relationships": {
2006
+ "type": "array",
2007
+ "items": {
2008
+ "type": "object",
2009
+ "required": [
2010
+ "type",
2011
+ "partA"
2012
+ ],
2013
+ "properties": {
2014
+ "type": {
2015
+ "enum": [
2016
+ "mates_with",
2017
+ "fastens",
2018
+ "inserts_into",
2019
+ "aligns_with"
2020
+ ]
2021
+ },
2022
+ "partA": {
2023
+ "type": "string"
2024
+ },
2025
+ "partB": {
2026
+ "type": "string"
2027
+ },
2028
+ "hardware": {
2029
+ "type": "string"
2030
+ },
2031
+ "notes": {
2032
+ "type": "string"
2033
+ }
2034
+ },
2035
+ "additionalProperties": false
2036
+ }
2037
+ },
2038
+ "package": {
2039
+ "type": "object"
2040
+ },
2041
+ "partcad": {
2042
+ "type": "object",
2043
+ "properties": {
2044
+ "packageName": {
2045
+ "type": "string"
2046
+ },
2047
+ "packageVersion": {
2048
+ "type": "string"
2049
+ },
2050
+ "description": {
2051
+ "type": "string"
2052
+ }
2053
+ },
2054
+ "additionalProperties": false
2055
+ }
2056
+ },
2057
+ "additionalProperties": false,
2058
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/project.schema.json",
2059
+ "title": "Project",
2060
+ "description": "Project schema for printspec documents."
2061
+ },
2062
+ "round-spacer.schema.json": {
2063
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
2064
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/round-spacer.schema.json",
2065
+ "type": "object",
2066
+ "required": [
2067
+ "type",
2068
+ "label",
2069
+ "parameters"
2070
+ ],
2071
+ "properties": {
2072
+ "type": {
2073
+ "const": "round_spacer",
2074
+ "title": "Part type",
2075
+ "description": "Stable printspec part family identifier."
2076
+ },
2077
+ "label": {
2078
+ "type": "string",
2079
+ "minLength": 1,
2080
+ "title": "Label",
2081
+ "description": "Human-readable name for this part."
2082
+ },
2083
+ "description": {
2084
+ "type": "string",
2085
+ "title": "Description",
2086
+ "description": "Optional human-readable notes for this part."
2087
+ },
2088
+ "parameters": {
2089
+ "type": "object",
2090
+ "required": [
2091
+ "outerDiameter",
2092
+ "height"
2093
+ ],
2094
+ "properties": {
2095
+ "outerDiameter": {
2096
+ "type": "number",
2097
+ "exclusiveMinimum": 0,
2098
+ "maximum": 10000,
2099
+ "title": "Outer diameter",
2100
+ "description": "Outer diameter in millimeters.",
2101
+ "x-printspec-control": "number",
2102
+ "x-printspec-unit": "mm",
2103
+ "x-printspec-step": 0.1,
2104
+ "x-printspec-priority": "primary",
2105
+ "examples": [
2106
+ 12
2107
+ ]
2108
+ },
2109
+ "innerDiameter": {
2110
+ "type": "number",
2111
+ "exclusiveMinimum": 0,
2112
+ "maximum": 10000,
2113
+ "title": "Inner diameter",
2114
+ "description": "Inner diameter in millimeters.",
2115
+ "x-printspec-control": "number",
2116
+ "x-printspec-unit": "mm",
2117
+ "x-printspec-step": 0.1,
2118
+ "x-printspec-priority": "advanced",
2119
+ "examples": [
2120
+ 4
2121
+ ]
2122
+ },
2123
+ "height": {
2124
+ "type": "number",
2125
+ "exclusiveMinimum": 0,
2126
+ "maximum": 10000,
2127
+ "title": "Height",
2128
+ "description": "Height in millimeters.",
2129
+ "x-printspec-control": "number",
2130
+ "x-printspec-unit": "mm",
2131
+ "x-printspec-step": 0.1,
2132
+ "x-printspec-priority": "primary",
2133
+ "examples": [
2134
+ 10
2135
+ ]
2136
+ },
2137
+ "holes": {
2138
+ "type": "array",
2139
+ "items": {
2140
+ "$ref": "common.schema.json#/$defs/Hole"
2141
+ },
2142
+ "title": "Holes",
2143
+ "description": "Optional hole features to include in the generated part.",
2144
+ "x-printspec-control": "hole-list",
2145
+ "x-printspec-priority": "advanced",
2146
+ "default": []
2147
+ },
2148
+ "slots": {
2149
+ "type": "array",
2150
+ "items": {
2151
+ "$ref": "common.schema.json#/$defs/Slot"
2152
+ },
2153
+ "title": "Slots",
2154
+ "description": "Optional slot features to include in the generated part.",
2155
+ "x-printspec-control": "slot-list",
2156
+ "x-printspec-priority": "advanced",
2157
+ "default": []
2158
+ },
2159
+ "chamfer": {
2160
+ "$ref": "common.schema.json#/$defs/Chamfer",
2161
+ "title": "Chamfer",
2162
+ "description": "Optional chamfer edge finishing request.",
2163
+ "x-printspec-control": "number",
2164
+ "x-printspec-priority": "advanced"
2165
+ },
2166
+ "fillet": {
2167
+ "$ref": "common.schema.json#/$defs/Fillet",
2168
+ "title": "Fillet",
2169
+ "description": "Optional fillet edge finishing request.",
2170
+ "x-printspec-control": "number",
2171
+ "x-printspec-priority": "advanced"
2172
+ },
2173
+ "cornerRadius": {
2174
+ "type": "number",
2175
+ "exclusiveMinimum": 0,
2176
+ "maximum": 10000,
2177
+ "title": "Corner radius",
2178
+ "description": "Corner radius in millimeters.",
2179
+ "x-printspec-control": "number",
2180
+ "x-printspec-unit": "mm",
2181
+ "x-printspec-step": 0.1,
2182
+ "x-printspec-priority": "advanced",
2183
+ "examples": [
2184
+ 4
2185
+ ]
2186
+ }
2187
+ },
2188
+ "additionalProperties": false,
2189
+ "title": "Parameters",
2190
+ "description": "Editable parameters for Round Spacer.",
2191
+ "x-printspec-ui": {
2192
+ "order": [
2193
+ "outerDiameter",
2194
+ "innerDiameter",
2195
+ "height",
2196
+ "cornerRadius",
2197
+ "holes",
2198
+ "slots",
2199
+ "chamfer",
2200
+ "fillet"
2201
+ ],
2202
+ "groups": [
2203
+ {
2204
+ "id": "dimensions",
2205
+ "title": "Dimensions",
2206
+ "fields": [
2207
+ "outerDiameter",
2208
+ "innerDiameter",
2209
+ "height",
2210
+ "cornerRadius"
2211
+ ]
2212
+ },
2213
+ {
2214
+ "id": "features",
2215
+ "title": "Features",
2216
+ "fields": [
2217
+ "holes",
2218
+ "slots"
2219
+ ]
2220
+ },
2221
+ {
2222
+ "id": "finishing",
2223
+ "title": "Finishing",
2224
+ "fields": [
2225
+ "chamfer",
2226
+ "fillet"
2227
+ ]
2228
+ }
2229
+ ]
2230
+ }
2231
+ },
2232
+ "hardware": {
2233
+ "type": "array",
2234
+ "items": {
2235
+ "$ref": "common.schema.json#/$defs/HardwareItem"
2236
+ }
2237
+ }
2238
+ },
2239
+ "additionalProperties": false,
2240
+ "title": "Round Spacer",
2241
+ "description": "Cylindrical spacer or bushing with a central clearance hole."
2242
+ },
2243
+ "rounded-rectangular-plate.schema.json": {
2244
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
2245
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/rounded-rectangular-plate.schema.json",
2246
+ "type": "object",
2247
+ "required": [
2248
+ "type",
2249
+ "label",
2250
+ "parameters"
2251
+ ],
2252
+ "properties": {
2253
+ "type": {
2254
+ "const": "rounded_rectangular_plate",
2255
+ "title": "Part type",
2256
+ "description": "Stable printspec part family identifier."
2257
+ },
2258
+ "label": {
2259
+ "type": "string",
2260
+ "minLength": 1,
2261
+ "title": "Label",
2262
+ "description": "Human-readable name for this part."
2263
+ },
2264
+ "description": {
2265
+ "type": "string",
2266
+ "title": "Description",
2267
+ "description": "Optional human-readable notes for this part."
2268
+ },
2269
+ "parameters": {
2270
+ "type": "object",
2271
+ "required": [
2272
+ "length",
2273
+ "width",
2274
+ "thickness",
2275
+ "cornerRadius"
2276
+ ],
2277
+ "properties": {
2278
+ "length": {
2279
+ "type": "number",
2280
+ "exclusiveMinimum": 0,
2281
+ "maximum": 10000,
2282
+ "title": "Length",
2283
+ "description": "Length in millimeters.",
2284
+ "x-printspec-control": "number",
2285
+ "x-printspec-unit": "mm",
2286
+ "x-printspec-step": 0.1,
2287
+ "x-printspec-priority": "primary",
2288
+ "examples": [
2289
+ 100
2290
+ ]
2291
+ },
2292
+ "width": {
2293
+ "type": "number",
2294
+ "exclusiveMinimum": 0,
2295
+ "maximum": 10000,
2296
+ "title": "Width",
2297
+ "description": "Width in millimeters.",
2298
+ "x-printspec-control": "number",
2299
+ "x-printspec-unit": "mm",
2300
+ "x-printspec-step": 0.1,
2301
+ "x-printspec-priority": "primary",
2302
+ "examples": [
2303
+ 50
2304
+ ]
2305
+ },
2306
+ "thickness": {
2307
+ "type": "number",
2308
+ "exclusiveMinimum": 0,
2309
+ "maximum": 10000,
2310
+ "title": "Thickness",
2311
+ "description": "Thickness in millimeters.",
2312
+ "x-printspec-control": "number",
2313
+ "x-printspec-unit": "mm",
2314
+ "x-printspec-step": 0.1,
2315
+ "x-printspec-priority": "primary",
2316
+ "examples": [
2317
+ 3
2318
+ ]
2319
+ },
2320
+ "cornerRadius": {
2321
+ "type": "number",
2322
+ "exclusiveMinimum": 0,
2323
+ "maximum": 10000,
2324
+ "title": "Corner radius",
2325
+ "description": "Corner radius in millimeters.",
2326
+ "x-printspec-control": "number",
2327
+ "x-printspec-unit": "mm",
2328
+ "x-printspec-step": 0.1,
2329
+ "x-printspec-priority": "primary",
2330
+ "examples": [
2331
+ 4
2332
+ ]
2333
+ },
2334
+ "holes": {
2335
+ "type": "array",
2336
+ "items": {
2337
+ "$ref": "common.schema.json#/$defs/Hole"
2338
+ },
2339
+ "title": "Holes",
2340
+ "description": "Optional hole features to include in the generated part.",
2341
+ "x-printspec-control": "hole-list",
2342
+ "x-printspec-priority": "advanced",
2343
+ "default": []
2344
+ },
2345
+ "slots": {
2346
+ "type": "array",
2347
+ "items": {
2348
+ "$ref": "common.schema.json#/$defs/Slot"
2349
+ },
2350
+ "title": "Slots",
2351
+ "description": "Optional slot features to include in the generated part.",
2352
+ "x-printspec-control": "slot-list",
2353
+ "x-printspec-priority": "advanced",
2354
+ "default": []
2355
+ },
2356
+ "chamfer": {
2357
+ "$ref": "common.schema.json#/$defs/Chamfer",
2358
+ "title": "Chamfer",
2359
+ "description": "Optional chamfer edge finishing request.",
2360
+ "x-printspec-control": "number",
2361
+ "x-printspec-priority": "advanced"
2362
+ },
2363
+ "fillet": {
2364
+ "$ref": "common.schema.json#/$defs/Fillet",
2365
+ "title": "Fillet",
2366
+ "description": "Optional fillet edge finishing request.",
2367
+ "x-printspec-control": "number",
2368
+ "x-printspec-priority": "advanced"
2369
+ }
2370
+ },
2371
+ "additionalProperties": false,
2372
+ "title": "Parameters",
2373
+ "description": "Editable parameters for Rounded Rectangular Plate.",
2374
+ "x-printspec-ui": {
2375
+ "order": [
2376
+ "length",
2377
+ "width",
2378
+ "thickness",
2379
+ "cornerRadius",
2380
+ "holes",
2381
+ "slots",
2382
+ "chamfer",
2383
+ "fillet"
2384
+ ],
2385
+ "groups": [
2386
+ {
2387
+ "id": "dimensions",
2388
+ "title": "Dimensions",
2389
+ "fields": [
2390
+ "length",
2391
+ "width",
2392
+ "thickness",
2393
+ "cornerRadius"
2394
+ ]
2395
+ },
2396
+ {
2397
+ "id": "features",
2398
+ "title": "Features",
2399
+ "fields": [
2400
+ "holes",
2401
+ "slots"
2402
+ ]
2403
+ },
2404
+ {
2405
+ "id": "finishing",
2406
+ "title": "Finishing",
2407
+ "fields": [
2408
+ "chamfer",
2409
+ "fillet"
2410
+ ]
2411
+ }
2412
+ ]
2413
+ },
2414
+ "x-printspec-warnings": [
2415
+ {
2416
+ "condition": "cornerRadius > min(length, width) / 2",
2417
+ "message": "Corner radius should be no more than half the smaller side."
2418
+ }
2419
+ ]
2420
+ },
2421
+ "hardware": {
2422
+ "type": "array",
2423
+ "items": {
2424
+ "$ref": "common.schema.json#/$defs/HardwareItem"
2425
+ }
2426
+ }
2427
+ },
2428
+ "additionalProperties": false,
2429
+ "title": "Rounded Rectangular Plate",
2430
+ "description": "Flat plate with rounded outside corners and optional hole or slot features."
2431
+ },
2432
+ "simple-box.schema.json": {
2433
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
2434
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/simple-box.schema.json",
2435
+ "type": "object",
2436
+ "required": [
2437
+ "type",
2438
+ "label",
2439
+ "parameters"
2440
+ ],
2441
+ "properties": {
2442
+ "type": {
2443
+ "const": "simple_box",
2444
+ "title": "Part type",
2445
+ "description": "Stable printspec part family identifier."
2446
+ },
2447
+ "label": {
2448
+ "type": "string",
2449
+ "minLength": 1,
2450
+ "title": "Label",
2451
+ "description": "Human-readable name for this part."
2452
+ },
2453
+ "description": {
2454
+ "type": "string",
2455
+ "title": "Description",
2456
+ "description": "Optional human-readable notes for this part."
2457
+ },
2458
+ "parameters": {
2459
+ "type": "object",
2460
+ "required": [
2461
+ "outerLength",
2462
+ "outerWidth",
2463
+ "outerHeight",
2464
+ "wallThickness"
2465
+ ],
2466
+ "properties": {
2467
+ "outerLength": {
2468
+ "type": "number",
2469
+ "exclusiveMinimum": 0,
2470
+ "maximum": 10000,
2471
+ "title": "Outer length",
2472
+ "description": "Outer length in millimeters.",
2473
+ "x-printspec-control": "number",
2474
+ "x-printspec-unit": "mm",
2475
+ "x-printspec-step": 0.1,
2476
+ "x-printspec-priority": "primary"
2477
+ },
2478
+ "outerWidth": {
2479
+ "type": "number",
2480
+ "exclusiveMinimum": 0,
2481
+ "maximum": 10000,
2482
+ "title": "Outer width",
2483
+ "description": "Outer width in millimeters.",
2484
+ "x-printspec-control": "number",
2485
+ "x-printspec-unit": "mm",
2486
+ "x-printspec-step": 0.1,
2487
+ "x-printspec-priority": "primary"
2488
+ },
2489
+ "outerHeight": {
2490
+ "type": "number",
2491
+ "exclusiveMinimum": 0,
2492
+ "maximum": 10000,
2493
+ "title": "Outer height",
2494
+ "description": "Outer height in millimeters.",
2495
+ "x-printspec-control": "number",
2496
+ "x-printspec-unit": "mm",
2497
+ "x-printspec-step": 0.1,
2498
+ "x-printspec-priority": "primary"
2499
+ },
2500
+ "wallThickness": {
2501
+ "type": "number",
2502
+ "exclusiveMinimum": 0,
2503
+ "maximum": 10000,
2504
+ "title": "Wall thickness",
2505
+ "description": "Wall thickness in millimeters.",
2506
+ "x-printspec-control": "number",
2507
+ "x-printspec-unit": "mm",
2508
+ "x-printspec-step": 0.1,
2509
+ "x-printspec-priority": "primary",
2510
+ "examples": [
2511
+ 2
2512
+ ]
2513
+ },
2514
+ "holes": {
2515
+ "type": "array",
2516
+ "items": {
2517
+ "$ref": "common.schema.json#/$defs/Hole"
2518
+ },
2519
+ "title": "Holes",
2520
+ "description": "Optional hole features to include in the generated part.",
2521
+ "x-printspec-control": "hole-list",
2522
+ "x-printspec-priority": "advanced",
2523
+ "default": []
2524
+ },
2525
+ "slots": {
2526
+ "type": "array",
2527
+ "items": {
2528
+ "$ref": "common.schema.json#/$defs/Slot"
2529
+ },
2530
+ "title": "Slots",
2531
+ "description": "Optional slot features to include in the generated part.",
2532
+ "x-printspec-control": "slot-list",
2533
+ "x-printspec-priority": "advanced",
2534
+ "default": []
2535
+ },
2536
+ "chamfer": {
2537
+ "$ref": "common.schema.json#/$defs/Chamfer",
2538
+ "title": "Chamfer",
2539
+ "description": "Optional chamfer edge finishing request.",
2540
+ "x-printspec-control": "number",
2541
+ "x-printspec-priority": "advanced"
2542
+ },
2543
+ "fillet": {
2544
+ "$ref": "common.schema.json#/$defs/Fillet",
2545
+ "title": "Fillet",
2546
+ "description": "Optional fillet edge finishing request.",
2547
+ "x-printspec-control": "number",
2548
+ "x-printspec-priority": "advanced"
2549
+ },
2550
+ "cornerRadius": {
2551
+ "type": "number",
2552
+ "exclusiveMinimum": 0,
2553
+ "maximum": 10000,
2554
+ "title": "Corner radius",
2555
+ "description": "Corner radius in millimeters.",
2556
+ "x-printspec-control": "number",
2557
+ "x-printspec-unit": "mm",
2558
+ "x-printspec-step": 0.1,
2559
+ "x-printspec-priority": "advanced",
2560
+ "examples": [
2561
+ 4
2562
+ ]
2563
+ },
2564
+ "mountingBosses": {
2565
+ "type": "array",
2566
+ "items": {
2567
+ "type": "object"
2568
+ },
2569
+ "title": "Mounting bosses",
2570
+ "description": "Mounting bosses parameter.",
2571
+ "x-printspec-control": "array",
2572
+ "x-printspec-priority": "advanced",
2573
+ "default": []
2574
+ },
2575
+ "cableCutouts": {
2576
+ "type": "array",
2577
+ "items": {
2578
+ "$ref": "common.schema.json#/$defs/Slot"
2579
+ },
2580
+ "title": "Cable cutouts",
2581
+ "description": "Cable cutouts parameter.",
2582
+ "x-printspec-control": "array",
2583
+ "x-printspec-priority": "advanced",
2584
+ "default": []
2585
+ }
2586
+ },
2587
+ "additionalProperties": false,
2588
+ "title": "Parameters",
2589
+ "description": "Editable parameters for Simple Box.",
2590
+ "x-printspec-ui": {
2591
+ "order": [
2592
+ "outerLength",
2593
+ "outerWidth",
2594
+ "outerHeight",
2595
+ "wallThickness",
2596
+ "cornerRadius",
2597
+ "mountingBosses",
2598
+ "cableCutouts",
2599
+ "holes",
2600
+ "slots",
2601
+ "chamfer",
2602
+ "fillet"
2603
+ ],
2604
+ "groups": [
2605
+ {
2606
+ "id": "dimensions",
2607
+ "title": "Dimensions",
2608
+ "fields": [
2609
+ "outerLength",
2610
+ "outerWidth",
2611
+ "outerHeight",
2612
+ "wallThickness",
2613
+ "cornerRadius"
2614
+ ]
2615
+ },
2616
+ {
2617
+ "id": "features",
2618
+ "title": "Features",
2619
+ "fields": [
2620
+ "mountingBosses",
2621
+ "cableCutouts",
2622
+ "holes",
2623
+ "slots"
2624
+ ]
2625
+ },
2626
+ {
2627
+ "id": "finishing",
2628
+ "title": "Finishing",
2629
+ "fields": [
2630
+ "chamfer",
2631
+ "fillet"
2632
+ ]
2633
+ }
2634
+ ]
2635
+ }
2636
+ },
2637
+ "hardware": {
2638
+ "type": "array",
2639
+ "items": {
2640
+ "$ref": "common.schema.json#/$defs/HardwareItem"
2641
+ }
2642
+ }
2643
+ },
2644
+ "additionalProperties": false,
2645
+ "title": "Simple Box",
2646
+ "description": "Open-top box or enclosure body with walls and optional cutouts."
2647
+ },
2648
+ "simple-lid.schema.json": {
2649
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
2650
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/simple-lid.schema.json",
2651
+ "type": "object",
2652
+ "required": [
2653
+ "type",
2654
+ "label",
2655
+ "parameters"
2656
+ ],
2657
+ "properties": {
2658
+ "type": {
2659
+ "const": "simple_lid",
2660
+ "title": "Part type",
2661
+ "description": "Stable printspec part family identifier."
2662
+ },
2663
+ "label": {
2664
+ "type": "string",
2665
+ "minLength": 1,
2666
+ "title": "Label",
2667
+ "description": "Human-readable name for this part."
2668
+ },
2669
+ "description": {
2670
+ "type": "string",
2671
+ "title": "Description",
2672
+ "description": "Optional human-readable notes for this part."
2673
+ },
2674
+ "parameters": {
2675
+ "type": "object",
2676
+ "required": [
2677
+ "length",
2678
+ "width",
2679
+ "thickness"
2680
+ ],
2681
+ "properties": {
2682
+ "length": {
2683
+ "type": "number",
2684
+ "exclusiveMinimum": 0,
2685
+ "maximum": 10000,
2686
+ "title": "Length",
2687
+ "description": "Length in millimeters.",
2688
+ "x-printspec-control": "number",
2689
+ "x-printspec-unit": "mm",
2690
+ "x-printspec-step": 0.1,
2691
+ "x-printspec-priority": "primary",
2692
+ "examples": [
2693
+ 100
2694
+ ]
2695
+ },
2696
+ "width": {
2697
+ "type": "number",
2698
+ "exclusiveMinimum": 0,
2699
+ "maximum": 10000,
2700
+ "title": "Width",
2701
+ "description": "Width in millimeters.",
2702
+ "x-printspec-control": "number",
2703
+ "x-printspec-unit": "mm",
2704
+ "x-printspec-step": 0.1,
2705
+ "x-printspec-priority": "primary",
2706
+ "examples": [
2707
+ 50
2708
+ ]
2709
+ },
2710
+ "thickness": {
2711
+ "type": "number",
2712
+ "exclusiveMinimum": 0,
2713
+ "maximum": 10000,
2714
+ "title": "Thickness",
2715
+ "description": "Thickness in millimeters.",
2716
+ "x-printspec-control": "number",
2717
+ "x-printspec-unit": "mm",
2718
+ "x-printspec-step": 0.1,
2719
+ "x-printspec-priority": "primary",
2720
+ "examples": [
2721
+ 3
2722
+ ]
2723
+ },
2724
+ "lipHeight": {
2725
+ "type": "number",
2726
+ "exclusiveMinimum": 0,
2727
+ "maximum": 10000,
2728
+ "title": "Lip height",
2729
+ "description": "Lip height in millimeters.",
2730
+ "x-printspec-control": "number",
2731
+ "x-printspec-unit": "mm",
2732
+ "x-printspec-step": 0.1,
2733
+ "x-printspec-priority": "advanced"
2734
+ },
2735
+ "lipClearance": {
2736
+ "type": "number",
2737
+ "exclusiveMinimum": 0,
2738
+ "maximum": 10000,
2739
+ "title": "Lip clearance",
2740
+ "description": "Lip clearance in millimeters.",
2741
+ "x-printspec-control": "number",
2742
+ "x-printspec-unit": "mm",
2743
+ "x-printspec-step": 0.1,
2744
+ "x-printspec-priority": "advanced"
2745
+ },
2746
+ "holes": {
2747
+ "type": "array",
2748
+ "items": {
2749
+ "$ref": "common.schema.json#/$defs/Hole"
2750
+ },
2751
+ "title": "Holes",
2752
+ "description": "Optional hole features to include in the generated part.",
2753
+ "x-printspec-control": "hole-list",
2754
+ "x-printspec-priority": "advanced",
2755
+ "default": []
2756
+ },
2757
+ "slots": {
2758
+ "type": "array",
2759
+ "items": {
2760
+ "$ref": "common.schema.json#/$defs/Slot"
2761
+ },
2762
+ "title": "Slots",
2763
+ "description": "Optional slot features to include in the generated part.",
2764
+ "x-printspec-control": "slot-list",
2765
+ "x-printspec-priority": "advanced",
2766
+ "default": []
2767
+ },
2768
+ "chamfer": {
2769
+ "$ref": "common.schema.json#/$defs/Chamfer",
2770
+ "title": "Chamfer",
2771
+ "description": "Optional chamfer edge finishing request.",
2772
+ "x-printspec-control": "number",
2773
+ "x-printspec-priority": "advanced"
2774
+ },
2775
+ "fillet": {
2776
+ "$ref": "common.schema.json#/$defs/Fillet",
2777
+ "title": "Fillet",
2778
+ "description": "Optional fillet edge finishing request.",
2779
+ "x-printspec-control": "number",
2780
+ "x-printspec-priority": "advanced"
2781
+ },
2782
+ "cornerRadius": {
2783
+ "type": "number",
2784
+ "exclusiveMinimum": 0,
2785
+ "maximum": 10000,
2786
+ "title": "Corner radius",
2787
+ "description": "Corner radius in millimeters.",
2788
+ "x-printspec-control": "number",
2789
+ "x-printspec-unit": "mm",
2790
+ "x-printspec-step": 0.1,
2791
+ "x-printspec-priority": "advanced",
2792
+ "examples": [
2793
+ 4
2794
+ ]
2795
+ }
2796
+ },
2797
+ "additionalProperties": false,
2798
+ "title": "Parameters",
2799
+ "description": "Editable parameters for Simple Lid.",
2800
+ "x-printspec-ui": {
2801
+ "order": [
2802
+ "length",
2803
+ "width",
2804
+ "thickness",
2805
+ "lipHeight",
2806
+ "lipClearance",
2807
+ "cornerRadius",
2808
+ "holes",
2809
+ "slots",
2810
+ "chamfer",
2811
+ "fillet"
2812
+ ],
2813
+ "groups": [
2814
+ {
2815
+ "id": "dimensions",
2816
+ "title": "Dimensions",
2817
+ "fields": [
2818
+ "length",
2819
+ "width",
2820
+ "thickness",
2821
+ "lipHeight",
2822
+ "lipClearance",
2823
+ "cornerRadius"
2824
+ ]
2825
+ },
2826
+ {
2827
+ "id": "features",
2828
+ "title": "Features",
2829
+ "fields": [
2830
+ "holes",
2831
+ "slots"
2832
+ ]
2833
+ },
2834
+ {
2835
+ "id": "finishing",
2836
+ "title": "Finishing",
2837
+ "fields": [
2838
+ "chamfer",
2839
+ "fillet"
2840
+ ]
2841
+ }
2842
+ ]
2843
+ }
2844
+ },
2845
+ "hardware": {
2846
+ "type": "array",
2847
+ "items": {
2848
+ "$ref": "common.schema.json#/$defs/HardwareItem"
2849
+ }
2850
+ }
2851
+ },
2852
+ "additionalProperties": false,
2853
+ "title": "Simple Lid",
2854
+ "description": "Flat lid with optional lip, holes, and edge finishing."
2855
+ },
2856
+ "spacer-block.schema.json": {
2857
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
2858
+ "$id": "https://schemas.invisra.ai/printspec/0.1.0/spacer-block.schema.json",
2859
+ "type": "object",
2860
+ "required": [
2861
+ "type",
2862
+ "label",
2863
+ "parameters"
2864
+ ],
2865
+ "properties": {
2866
+ "type": {
2867
+ "const": "spacer_block",
2868
+ "title": "Part type",
2869
+ "description": "Stable printspec part family identifier."
2870
+ },
2871
+ "label": {
2872
+ "type": "string",
2873
+ "minLength": 1,
2874
+ "title": "Label",
2875
+ "description": "Human-readable name for this part."
2876
+ },
2877
+ "description": {
2878
+ "type": "string",
2879
+ "title": "Description",
2880
+ "description": "Optional human-readable notes for this part."
2881
+ },
2882
+ "parameters": {
2883
+ "type": "object",
2884
+ "required": [
2885
+ "length",
2886
+ "width",
2887
+ "height"
2888
+ ],
2889
+ "properties": {
2890
+ "length": {
2891
+ "type": "number",
2892
+ "exclusiveMinimum": 0,
2893
+ "maximum": 10000,
2894
+ "title": "Length",
2895
+ "description": "Length in millimeters.",
2896
+ "x-printspec-control": "number",
2897
+ "x-printspec-unit": "mm",
2898
+ "x-printspec-step": 0.1,
2899
+ "x-printspec-priority": "primary",
2900
+ "examples": [
2901
+ 100
2902
+ ]
2903
+ },
2904
+ "width": {
2905
+ "type": "number",
2906
+ "exclusiveMinimum": 0,
2907
+ "maximum": 10000,
2908
+ "title": "Width",
2909
+ "description": "Width in millimeters.",
2910
+ "x-printspec-control": "number",
2911
+ "x-printspec-unit": "mm",
2912
+ "x-printspec-step": 0.1,
2913
+ "x-printspec-priority": "primary",
2914
+ "examples": [
2915
+ 50
2916
+ ]
2917
+ },
2918
+ "height": {
2919
+ "type": "number",
2920
+ "exclusiveMinimum": 0,
2921
+ "maximum": 10000,
2922
+ "title": "Height",
2923
+ "description": "Height in millimeters.",
2924
+ "x-printspec-control": "number",
2925
+ "x-printspec-unit": "mm",
2926
+ "x-printspec-step": 0.1,
2927
+ "x-printspec-priority": "primary",
2928
+ "examples": [
2929
+ 10
2930
+ ]
2931
+ },
2932
+ "holes": {
2933
+ "type": "array",
2934
+ "items": {
2935
+ "$ref": "common.schema.json#/$defs/Hole"
2936
+ },
2937
+ "title": "Holes",
2938
+ "description": "Optional hole features to include in the generated part.",
2939
+ "x-printspec-control": "hole-list",
2940
+ "x-printspec-priority": "advanced",
2941
+ "default": []
2942
+ },
2943
+ "slots": {
2944
+ "type": "array",
2945
+ "items": {
2946
+ "$ref": "common.schema.json#/$defs/Slot"
2947
+ },
2948
+ "title": "Slots",
2949
+ "description": "Optional slot features to include in the generated part.",
2950
+ "x-printspec-control": "slot-list",
2951
+ "x-printspec-priority": "advanced",
2952
+ "default": []
2953
+ },
2954
+ "chamfer": {
2955
+ "$ref": "common.schema.json#/$defs/Chamfer",
2956
+ "title": "Chamfer",
2957
+ "description": "Optional chamfer edge finishing request.",
2958
+ "x-printspec-control": "number",
2959
+ "x-printspec-priority": "advanced"
2960
+ },
2961
+ "fillet": {
2962
+ "$ref": "common.schema.json#/$defs/Fillet",
2963
+ "title": "Fillet",
2964
+ "description": "Optional fillet edge finishing request.",
2965
+ "x-printspec-control": "number",
2966
+ "x-printspec-priority": "advanced"
2967
+ },
2968
+ "cornerRadius": {
2969
+ "type": "number",
2970
+ "exclusiveMinimum": 0,
2971
+ "maximum": 10000,
2972
+ "title": "Corner radius",
2973
+ "description": "Corner radius in millimeters.",
2974
+ "x-printspec-control": "number",
2975
+ "x-printspec-unit": "mm",
2976
+ "x-printspec-step": 0.1,
2977
+ "x-printspec-priority": "advanced",
2978
+ "examples": [
2979
+ 4
2980
+ ]
2981
+ }
2982
+ },
2983
+ "additionalProperties": false,
2984
+ "title": "Parameters",
2985
+ "description": "Editable parameters for Spacer Block.",
2986
+ "x-printspec-ui": {
2987
+ "order": [
2988
+ "length",
2989
+ "width",
2990
+ "height",
2991
+ "cornerRadius",
2992
+ "holes",
2993
+ "slots",
2994
+ "chamfer",
2995
+ "fillet"
2996
+ ],
2997
+ "groups": [
2998
+ {
2999
+ "id": "dimensions",
3000
+ "title": "Dimensions",
3001
+ "fields": [
3002
+ "length",
3003
+ "width",
3004
+ "height",
3005
+ "cornerRadius"
3006
+ ]
3007
+ },
3008
+ {
3009
+ "id": "features",
3010
+ "title": "Features",
3011
+ "fields": [
3012
+ "holes",
3013
+ "slots"
3014
+ ]
3015
+ },
3016
+ {
3017
+ "id": "finishing",
3018
+ "title": "Finishing",
3019
+ "fields": [
3020
+ "chamfer",
3021
+ "fillet"
3022
+ ]
3023
+ }
3024
+ ]
3025
+ }
3026
+ },
3027
+ "hardware": {
3028
+ "type": "array",
3029
+ "items": {
3030
+ "$ref": "common.schema.json#/$defs/HardwareItem"
3031
+ }
3032
+ }
3033
+ },
3034
+ "additionalProperties": false,
3035
+ "title": "Spacer Block",
3036
+ "description": "Rectangular spacer block with optional holes, slots, and edge finishing."
3037
+ }
3038
+ };
3039
+ export const bundledSchemaFiles = [
3040
+ "cable-clip.schema.json",
3041
+ "cable-comb.schema.json",
3042
+ "common.schema.json",
3043
+ "composable-part.schema.json",
3044
+ "drill-guide.schema.json",
3045
+ "electronics-standoff.schema.json",
3046
+ "l-bracket.schema.json",
3047
+ "part-family.schema.json",
3048
+ "printspec.schema.json",
3049
+ "project.schema.json",
3050
+ "round-spacer.schema.json",
3051
+ "rounded-rectangular-plate.schema.json",
3052
+ "simple-box.schema.json",
3053
+ "simple-lid.schema.json",
3054
+ "spacer-block.schema.json"
3055
+ ];