fritzkit 0.0.0-stage → 0.1.1

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.
Files changed (319) hide show
  1. package/.claude-plugin/marketplace.json +12 -0
  2. package/.claude-plugin/plugin.json +13 -0
  3. package/CHANGELOG.md +8 -0
  4. package/LICENSE +21 -0
  5. package/README.md +429 -2
  6. package/dist/cli/commands/doctor.d.ts +4 -0
  7. package/dist/cli/commands/doctor.js +7 -0
  8. package/dist/cli/commands/doctor.js.map +1 -0
  9. package/dist/cli/commands/export.d.ts +17 -0
  10. package/dist/cli/commands/export.js +81 -0
  11. package/dist/cli/commands/export.js.map +1 -0
  12. package/dist/cli/commands/kicad.d.ts +10 -0
  13. package/dist/cli/commands/kicad.js +22 -0
  14. package/dist/cli/commands/kicad.js.map +1 -0
  15. package/dist/cli/commands/parts.d.ts +22 -0
  16. package/dist/cli/commands/parts.js +46 -0
  17. package/dist/cli/commands/parts.js.map +1 -0
  18. package/dist/cli/commands/prune.d.ts +14 -0
  19. package/dist/cli/commands/prune.js +67 -0
  20. package/dist/cli/commands/prune.js.map +1 -0
  21. package/dist/cli/commands/render.d.ts +24 -0
  22. package/dist/cli/commands/render.js +62 -0
  23. package/dist/cli/commands/render.js.map +1 -0
  24. package/dist/cli/commands/schema.d.ts +10 -0
  25. package/dist/cli/commands/schema.js +35 -0
  26. package/dist/cli/commands/schema.js.map +1 -0
  27. package/dist/cli/commands/ui.d.ts +14 -0
  28. package/dist/cli/commands/ui.js +67 -0
  29. package/dist/cli/commands/ui.js.map +1 -0
  30. package/dist/cli/commands/validate.d.ts +24 -0
  31. package/dist/cli/commands/validate.js +91 -0
  32. package/dist/cli/commands/validate.js.map +1 -0
  33. package/dist/cli/context.d.ts +81 -0
  34. package/dist/cli/context.js +139 -0
  35. package/dist/cli/context.js.map +1 -0
  36. package/dist/cli/main.d.ts +2 -0
  37. package/dist/cli/main.js +8 -0
  38. package/dist/cli/main.js.map +1 -0
  39. package/dist/cli/program.d.ts +21 -0
  40. package/dist/cli/program.js +158 -0
  41. package/dist/cli/program.js.map +1 -0
  42. package/dist/cli/raster.d.ts +4 -0
  43. package/dist/cli/raster.js +9 -0
  44. package/dist/cli/raster.js.map +1 -0
  45. package/dist/core/compile/breadboard-util.d.ts +12 -0
  46. package/dist/core/compile/breadboard-util.js +107 -0
  47. package/dist/core/compile/breadboard-util.js.map +1 -0
  48. package/dist/core/compile/breadboard.d.ts +60 -0
  49. package/dist/core/compile/breadboard.js +513 -0
  50. package/dist/core/compile/breadboard.js.map +1 -0
  51. package/dist/core/compile/fzp.d.ts +12 -0
  52. package/dist/core/compile/fzp.js +183 -0
  53. package/dist/core/compile/fzp.js.map +1 -0
  54. package/dist/core/compile/icon.d.ts +17 -0
  55. package/dist/core/compile/icon.js +27 -0
  56. package/dist/core/compile/icon.js.map +1 -0
  57. package/dist/core/compile/index.d.ts +4 -0
  58. package/dist/core/compile/index.js +62 -0
  59. package/dist/core/compile/index.js.map +1 -0
  60. package/dist/core/compile/pcb.d.ts +39 -0
  61. package/dist/core/compile/pcb.js +164 -0
  62. package/dist/core/compile/pcb.js.map +1 -0
  63. package/dist/core/compile/schematic.d.ts +69 -0
  64. package/dist/core/compile/schematic.js +240 -0
  65. package/dist/core/compile/schematic.js.map +1 -0
  66. package/dist/core/compile/style.d.ts +52 -0
  67. package/dist/core/compile/style.js +72 -0
  68. package/dist/core/compile/style.js.map +1 -0
  69. package/dist/core/compile/types.d.ts +50 -0
  70. package/dist/core/compile/types.js +15 -0
  71. package/dist/core/compile/types.js.map +1 -0
  72. package/dist/core/export/bin.d.ts +61 -0
  73. package/dist/core/export/bin.js +221 -0
  74. package/dist/core/export/bin.js.map +1 -0
  75. package/dist/core/export/fzpz.d.ts +37 -0
  76. package/dist/core/export/fzpz.js +121 -0
  77. package/dist/core/export/fzpz.js.map +1 -0
  78. package/dist/core/export/index.d.ts +5 -0
  79. package/dist/core/export/index.js +6 -0
  80. package/dist/core/export/index.js.map +1 -0
  81. package/dist/core/export/install.d.ts +77 -0
  82. package/dist/core/export/install.js +183 -0
  83. package/dist/core/export/install.js.map +1 -0
  84. package/dist/core/export/prune.d.ts +72 -0
  85. package/dist/core/export/prune.js +165 -0
  86. package/dist/core/export/prune.js.map +1 -0
  87. package/dist/core/fritzing.d.ts +22 -0
  88. package/dist/core/fritzing.js +77 -0
  89. package/dist/core/fritzing.js.map +1 -0
  90. package/dist/core/identity.d.ts +29 -0
  91. package/dist/core/identity.js +70 -0
  92. package/dist/core/identity.js.map +1 -0
  93. package/dist/core/image/bbox.d.ts +27 -0
  94. package/dist/core/image/bbox.js +24 -0
  95. package/dist/core/image/bbox.js.map +1 -0
  96. package/dist/core/image/index.d.ts +8 -0
  97. package/dist/core/image/index.js +9 -0
  98. package/dist/core/image/index.js.map +1 -0
  99. package/dist/core/image/key.d.ts +72 -0
  100. package/dist/core/image/key.js +317 -0
  101. package/dist/core/image/key.js.map +1 -0
  102. package/dist/core/image/prepare.d.ts +31 -0
  103. package/dist/core/image/prepare.js +98 -0
  104. package/dist/core/image/prepare.js.map +1 -0
  105. package/dist/core/image/remover.d.ts +17 -0
  106. package/dist/core/image/remover.js +51 -0
  107. package/dist/core/image/remover.js.map +1 -0
  108. package/dist/core/index.d.ts +16 -0
  109. package/dist/core/index.js +17 -0
  110. package/dist/core/index.js.map +1 -0
  111. package/dist/core/kicad/footprint.d.ts +104 -0
  112. package/dist/core/kicad/footprint.js +317 -0
  113. package/dist/core/kicad/footprint.js.map +1 -0
  114. package/dist/core/kicad/index.d.ts +25 -0
  115. package/dist/core/kicad/index.js +197 -0
  116. package/dist/core/kicad/index.js.map +1 -0
  117. package/dist/core/kicad/sexpr.d.ts +35 -0
  118. package/dist/core/kicad/sexpr.js +163 -0
  119. package/dist/core/kicad/sexpr.js.map +1 -0
  120. package/dist/core/resolve.d.ts +113 -0
  121. package/dist/core/resolve.js +301 -0
  122. package/dist/core/resolve.js.map +1 -0
  123. package/dist/core/schema/part.d.ts +995 -0
  124. package/dist/core/schema/part.js +278 -0
  125. package/dist/core/schema/part.js.map +1 -0
  126. package/dist/core/schema/part.schema.json +1122 -0
  127. package/dist/core/svg.d.ts +20 -0
  128. package/dist/core/svg.js +56 -0
  129. package/dist/core/svg.js.map +1 -0
  130. package/dist/core/units.d.ts +28 -0
  131. package/dist/core/units.js +42 -0
  132. package/dist/core/units.js.map +1 -0
  133. package/dist/core/validate/checker.d.ts +46 -0
  134. package/dist/core/validate/checker.js +142 -0
  135. package/dist/core/validate/checker.js.map +1 -0
  136. package/dist/core/validate/doctor.d.ts +25 -0
  137. package/dist/core/validate/doctor.js +156 -0
  138. package/dist/core/validate/doctor.js.map +1 -0
  139. package/dist/core/validate/explain.d.ts +10 -0
  140. package/dist/core/validate/explain.js +135 -0
  141. package/dist/core/validate/explain.js.map +1 -0
  142. package/dist/core/validate/index.d.ts +21 -0
  143. package/dist/core/validate/index.js +96 -0
  144. package/dist/core/validate/index.js.map +1 -0
  145. package/dist/core/validate/structural.d.ts +74 -0
  146. package/dist/core/validate/structural.js +664 -0
  147. package/dist/core/validate/structural.js.map +1 -0
  148. package/dist/core/workspace.d.ts +69 -0
  149. package/dist/core/workspace.js +213 -0
  150. package/dist/core/workspace.js.map +1 -0
  151. package/dist/mcp/jsonpatch.d.ts +30 -0
  152. package/dist/mcp/jsonpatch.js +145 -0
  153. package/dist/mcp/jsonpatch.js.map +1 -0
  154. package/dist/mcp/main.d.ts +2 -0
  155. package/dist/mcp/main.js +5 -0
  156. package/dist/mcp/main.js.map +1 -0
  157. package/dist/mcp/server.d.ts +28 -0
  158. package/dist/mcp/server.js +310 -0
  159. package/dist/mcp/server.js.map +1 -0
  160. package/dist/server/api.d.ts +72 -0
  161. package/dist/server/api.js +507 -0
  162. package/dist/server/api.js.map +1 -0
  163. package/dist/server/events.d.ts +28 -0
  164. package/dist/server/events.js +134 -0
  165. package/dist/server/events.js.map +1 -0
  166. package/dist/server/http.d.ts +36 -0
  167. package/dist/server/http.js +127 -0
  168. package/dist/server/http.js.map +1 -0
  169. package/dist/server/index.d.ts +65 -0
  170. package/dist/server/index.js +193 -0
  171. package/dist/server/index.js.map +1 -0
  172. package/dist/ui/assets/index-DLU8opyI.js +63 -0
  173. package/dist/ui/assets/index-GhUA-T3b.css +1 -0
  174. package/dist/ui/index.html +14 -0
  175. package/package.json +89 -4
  176. package/skills/fritzkit/SKILL.md +690 -0
  177. package/skills/fritzkit/reference/examples.md +275 -0
  178. package/skills/fritzkit/reference/part-json.md +333 -0
  179. package/skills/fritzkit/scripts/measure.py +197 -0
  180. package/tools/fzp-checker/.python-version +1 -0
  181. package/tools/fzp-checker/README.md +45 -0
  182. package/tools/fzp-checker/check_fzp.py +48 -0
  183. package/tools/fzp-checker/pyproject.toml +26 -0
  184. package/tools/fzp-checker/uv.lock +266 -0
  185. package/tools/fzp-checker/vendor/LICENSE.txt +8 -0
  186. package/tools/fzp-checker/vendor/UPSTREAM.md +25 -0
  187. package/tools/fzp-checker/vendor/fzp_checker.py +14 -0
  188. package/tools/fzp-checker/vendor/scripts/checks/__init__.py +26 -0
  189. package/tools/fzp-checker/vendor/scripts/checks/check_missing_leg_ids.py +44 -0
  190. package/tools/fzp-checker/vendor/scripts/checks/checkascii.py +27 -0
  191. package/tools/fzp-checker/vendor/scripts/checks/checkcase.py +156 -0
  192. package/tools/fzp-checker/vendor/scripts/checks/checkcopies.py +104 -0
  193. package/tools/fzp-checker/vendor/scripts/checks/connector_numbering.py +79 -0
  194. package/tools/fzp-checker/vendor/scripts/checks/connectors_misnumbered.py +228 -0
  195. package/tools/fzp-checker/vendor/scripts/checks/explain_errors.md +95 -0
  196. package/tools/fzp-checker/vendor/scripts/checks/fzp_checker_runner.py +717 -0
  197. package/tools/fzp-checker/vendor/scripts/checks/fzp_checkers.py +1069 -0
  198. package/tools/fzp-checker/vendor/scripts/checks/fzp_svg_checkers.py +62 -0
  199. package/tools/fzp-checker/vendor/scripts/checks/fzp_utils.py +222 -0
  200. package/tools/fzp-checker/vendor/scripts/checks/inspector_fc51.png +0 -0
  201. package/tools/fzp-checker/vendor/scripts/checks/invisibleconnectors.py +118 -0
  202. package/tools/fzp-checker/vendor/scripts/checks/nolayeridcheck.txt +758 -0
  203. package/tools/fzp-checker/vendor/scripts/checks/requirements.txt +3 -0
  204. package/tools/fzp-checker/vendor/scripts/checks/svg_checkers.py +953 -0
  205. package/tools/fzp-checker/vendor/scripts/checks/svg_utils.py +96 -0
  206. package/tools/fzp-checker/vendor/scripts/checks/test_checkers.py +839 -0
  207. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/author_missing.fzp.test +3 -0
  208. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/author_present.fzp.test +4 -0
  209. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/buses_missing_id.fzp.test +8 -0
  210. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/buses_missing_node_members.fzp.test +7 -0
  211. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/buses_present_valid.fzp.test +8 -0
  212. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_layers_missing_attributes.fzp.test +16 -0
  213. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_layers_present_valid.fzp.test +14 -0
  214. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_numbering_invalid.fzp.test +70 -0
  215. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_numbering_valid.fzp.test +70 -0
  216. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_refs_valid.fzp.test +53 -0
  217. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_mixed.fzp.test +11 -0
  218. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_silkscreen_nested.fzp.test +11 -0
  219. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_style_attr.fzp.test +11 -0
  220. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_white_stroke.fzp.test +11 -0
  221. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_wrong_color.fzp.test +11 -0
  222. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_inherited.fzp.test +11 -0
  223. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_legacy.fzp.test +12 -0
  224. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_nested_copper.fzp.test +12 -0
  225. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_none.fzp.test +11 -0
  226. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_standard.fzp.test +12 -0
  227. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_uppercase.fzp.test +11 -0
  228. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/css_connector.fzp.test +100 -0
  229. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/description_missing.fzp.test +3 -0
  230. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/description_present.fzp.test +4 -0
  231. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/duplicate_ids.fzp.test +27 -0
  232. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/family_property_missing.fzp.test +6 -0
  233. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/family_property_present_valid.fzp.test +6 -0
  234. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/font_size.fzp.test +46 -0
  235. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/fritzing_version_invalid_format.fzp.test +4 -0
  236. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/fritzing_version_missing.fzp.test +4 -0
  237. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/fritzing_version_present_valid.fzp.test +4 -0
  238. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/gorn_absent.fzp.test +15 -0
  239. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/gorn_present.fzp.test +15 -0
  240. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/hybrid_connectors.fzp.test +232 -0
  241. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/invalid_xml.fzp.test +12 -0
  242. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/layer_ids_match.fzp.test +29 -0
  243. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/layer_ids_mismatch.fzp.test +30 -0
  244. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/layer_nesting_invalid.fzp.test +11 -0
  245. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/layer_nesting_valid.fzp.test +11 -0
  246. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/matrix_transform.fzp.test +8 -0
  247. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/missing_connector_refs.fzp.test +63 -0
  248. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/missing_leg_ids.fzp.test +34 -0
  249. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_missing.fzp.test +4 -0
  250. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_non_alnum.fzp.test +4 -0
  251. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_present.fzp.test +4 -0
  252. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_special_chars_absent.fzp.test +4 -0
  253. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_special_chars_present.fzp.test +4 -0
  254. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_too_short.fzp.test +4 -0
  255. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/no_layer_invalid.fzp.test +19 -0
  256. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/no_layer_namedview.fzp.test +19 -0
  257. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/no_layer_valid.fzp.test +19 -0
  258. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/pcb_only.fzp.test +48 -0
  259. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/property_fields_missing_name.fzp.test +6 -0
  260. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/property_fields_missing_value.fzp.test +6 -0
  261. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/property_fields_present.fzp.test +6 -0
  262. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/required_tags_missing.fzp.test +3 -0
  263. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/required_tags_present.fzp.test +11 -0
  264. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/stroke_test.fzp.test +60 -0
  265. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/template_svgs.fzp.test +35 -0
  266. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/title_missing.fzp.test +3 -0
  267. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/title_present.fzp.test +4 -0
  268. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/unique_ids.fzp.test +27 -0
  269. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/unique_property_names_duplicates.fzp.test +7 -0
  270. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/unique_property_names_unique.fzp.test +7 -0
  271. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/valid_xml.fzp.test +249 -0
  272. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/version_invalid_format.fzp.test +4 -0
  273. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/version_missing.fzp.test +3 -0
  274. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/version_present_valid.fzp.test +4 -0
  275. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/views_missing.fzp.test +3 -0
  276. package/tools/fzp-checker/vendor/scripts/checks/test_data/core/views_present.fzp.test +8 -0
  277. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/connector_refs_valid_breadboard.svg +7 -0
  278. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/duplicate_ids_breadboard.svg +13 -0
  279. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/gorn_absent_breadboard.svg +7 -0
  280. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/gorn_present_breadboard.svg +7 -0
  281. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/hybrid_connectors_breadboard.svg +102 -0
  282. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/layer_nesting_invalid.svg +13 -0
  283. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/layer_nesting_valid.svg +13 -0
  284. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/matrix_transform.svg +11 -0
  285. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/missing_connector_refs_breadboard.svg +8 -0
  286. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/missing_leg_ids_breadboard.svg +9 -0
  287. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/test_layer_ids_match_breadboard.svg +9 -0
  288. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/test_layer_ids_mismatch_breadboard.svg +9 -0
  289. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/unique_ids_breadboard.svg +13 -0
  290. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/hybrid_connectors_icon.svg +78 -0
  291. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/no_layer_invalid.svg +4 -0
  292. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/no_layer_namedview.svg +9 -0
  293. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/no_layer_valid.svg +7 -0
  294. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/plain_pcb.svg +10 -0
  295. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/connector_refs_valid_pcb.svg +10 -0
  296. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_mixed.svg +8 -0
  297. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_silkscreen_nested.svg +10 -0
  298. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_style_attr.svg +6 -0
  299. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_white_stroke.svg +6 -0
  300. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_wrong_color.svg +6 -0
  301. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_inherited.svg +7 -0
  302. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_legacy.svg +10 -0
  303. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_nested_copper.svg +9 -0
  304. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_none.svg +7 -0
  305. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_standard.svg +10 -0
  306. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_uppercase.svg +7 -0
  307. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/css_connector.svg +25 -0
  308. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/font_size.svg +54 -0
  309. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/hybrid_connectors_pcb.svg +35 -0
  310. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/missing_connector_refs_pcb.svg +14 -0
  311. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/pcb-arduino-shield.svg +25 -0
  312. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/stroke_test.svg +12 -0
  313. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/test_layer_ids_match_pcb.svg +12 -0
  314. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/test_layer_ids_mismatch_pcb.svg +12 -0
  315. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/connector_refs_valid_schematic.svg +7 -0
  316. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/hybrid_connectors_schematic.svg +59 -0
  317. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/missing_connector_refs_schematic.svg +8 -0
  318. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/test_layer_ids_match_schematic.svg +6 -0
  319. package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/test_layer_ids_mismatch_schematic.svg +6 -0
@@ -0,0 +1,995 @@
1
+ /**
2
+ * part.json schema (zod). This is the single source of truth for the spec format; the
3
+ * published JSON Schema at src/core/schema/part.schema.json is generated from it
4
+ * (npm run gen-schema) and a test asserts the two stay in sync.
5
+ *
6
+ * Units: every length in the spec is millimetres. The compiler converts to mils
7
+ * (1 viewBox unit = 1 mil) when it emits SVG.
8
+ *
9
+ * Frame: the part's own coordinate system has its origin at the TOP-LEFT corner of
10
+ * the outline, x to the right (along widthMm) and y DOWN (along heightMm), i.e. the
11
+ * same orientation as a top-down reference photo. Pins may lie outside the outline
12
+ * (leads, overhanging headers); the compiler grows the canvas to fit them.
13
+ */
14
+ import { z } from "zod";
15
+ export declare const SLUG_RE: RegExp;
16
+ export declare const KEY_RE: RegExp;
17
+ export declare const COLOR_RE: RegExp;
18
+ /** fzp connector type. female = a wire or plug attaches; male = a pin that plugs in. */
19
+ export declare const ConnectorType: z.ZodEnum<{
20
+ male: "male";
21
+ female: "female";
22
+ pad: "pad";
23
+ wire: "wire";
24
+ }>;
25
+ export type ConnectorType = z.infer<typeof ConnectorType>;
26
+ /** Electrical role; drives schematic grouping (D9) and default colours. */
27
+ export declare const PinRole: z.ZodEnum<{
28
+ power: "power";
29
+ gnd: "gnd";
30
+ io: "io";
31
+ analog: "analog";
32
+ pwm: "pwm";
33
+ i2c: "i2c";
34
+ spi: "spi";
35
+ uart: "uart";
36
+ usb: "usb";
37
+ clock: "clock";
38
+ reset: "reset";
39
+ enable: "enable";
40
+ nc: "nc";
41
+ other: "other";
42
+ }>;
43
+ export type PinRole = z.infer<typeof PinRole>;
44
+ export declare const PadShape: z.ZodEnum<{
45
+ rect: "rect";
46
+ round: "round";
47
+ oval: "oval";
48
+ }>;
49
+ export type PadShape = z.infer<typeof PadShape>;
50
+ /** Copper geometry of one pad. holeMm absent or 0 = no hole (SMD, copper1 only). */
51
+ export declare const PadGeometry: z.ZodObject<{
52
+ shape: z.ZodDefault<z.ZodEnum<{
53
+ rect: "rect";
54
+ round: "round";
55
+ oval: "oval";
56
+ }>>;
57
+ wMm: z.ZodNumber;
58
+ hMm: z.ZodNumber;
59
+ holeMm: z.ZodOptional<z.ZodNumber>;
60
+ smd: z.ZodOptional<z.ZodBoolean>;
61
+ }, z.core.$strict>;
62
+ export type PadGeometry = z.infer<typeof PadGeometry>;
63
+ /** A free-standing pin or solder pad at an arbitrary position (centre in mm). */
64
+ export declare const Pin: z.ZodObject<{
65
+ type: z.ZodDefault<z.ZodEnum<{
66
+ male: "male";
67
+ female: "female";
68
+ pad: "pad";
69
+ wire: "wire";
70
+ }>>;
71
+ xMm: z.ZodNumber;
72
+ yMm: z.ZodNumber;
73
+ pad: z.ZodDefault<z.ZodObject<{
74
+ shape: z.ZodDefault<z.ZodEnum<{
75
+ rect: "rect";
76
+ round: "round";
77
+ oval: "oval";
78
+ }>>;
79
+ wMm: z.ZodNumber;
80
+ hMm: z.ZodNumber;
81
+ holeMm: z.ZodOptional<z.ZodNumber>;
82
+ smd: z.ZodOptional<z.ZodBoolean>;
83
+ }, z.core.$strict>>;
84
+ snap: z.ZodOptional<z.ZodBoolean>;
85
+ key: z.ZodString;
86
+ name: z.ZodString;
87
+ label: z.ZodOptional<z.ZodString>;
88
+ description: z.ZodOptional<z.ZodString>;
89
+ role: z.ZodDefault<z.ZodEnum<{
90
+ power: "power";
91
+ gnd: "gnd";
92
+ io: "io";
93
+ analog: "analog";
94
+ pwm: "pwm";
95
+ i2c: "i2c";
96
+ spi: "spi";
97
+ uart: "uart";
98
+ usb: "usb";
99
+ clock: "clock";
100
+ reset: "reset";
101
+ enable: "enable";
102
+ nc: "nc";
103
+ other: "other";
104
+ }>>;
105
+ }, z.core.$strict>;
106
+ export type Pin = z.infer<typeof Pin>;
107
+ /** One pin inside a header; its position comes from the header grid. */
108
+ export declare const HeaderPin: z.ZodObject<{
109
+ key: z.ZodString;
110
+ name: z.ZodString;
111
+ label: z.ZodOptional<z.ZodString>;
112
+ description: z.ZodOptional<z.ZodString>;
113
+ role: z.ZodDefault<z.ZodEnum<{
114
+ power: "power";
115
+ gnd: "gnd";
116
+ io: "io";
117
+ analog: "analog";
118
+ pwm: "pwm";
119
+ i2c: "i2c";
120
+ spi: "spi";
121
+ uart: "uart";
122
+ usb: "usb";
123
+ clock: "clock";
124
+ reset: "reset";
125
+ enable: "enable";
126
+ nc: "nc";
127
+ other: "other";
128
+ }>>;
129
+ }, z.core.$strict>;
130
+ export type HeaderPin = z.infer<typeof HeaderPin>;
131
+ /**
132
+ * A row/grid of 0.1 in (or other pitch) pins drawn in Fritzing's house style.
133
+ * xMm/yMm is the centre of the FIRST pin (row 0, col 0). Pins are listed row-major:
134
+ * row 0 col 0, row 0 col 1, ... A null entry leaves that position empty.
135
+ * The compiler places header pins exactly on multiples of 100 mil relative to the
136
+ * canvas origin so the part seats in a breadboard.
137
+ */
138
+ export declare const Header: z.ZodObject<{
139
+ key: z.ZodString;
140
+ kind: z.ZodDefault<z.ZodEnum<{
141
+ male: "male";
142
+ female: "female";
143
+ castellated: "castellated";
144
+ }>>;
145
+ pitchMm: z.ZodDefault<z.ZodNumber>;
146
+ rows: z.ZodDefault<z.ZodNumber>;
147
+ cols: z.ZodNumber;
148
+ xMm: z.ZodNumber;
149
+ yMm: z.ZodNumber;
150
+ orientation: z.ZodDefault<z.ZodEnum<{
151
+ horizontal: "horizontal";
152
+ vertical: "vertical";
153
+ }>>;
154
+ pins: z.ZodArray<z.ZodNullable<z.ZodObject<{
155
+ key: z.ZodString;
156
+ name: z.ZodString;
157
+ label: z.ZodOptional<z.ZodString>;
158
+ description: z.ZodOptional<z.ZodString>;
159
+ role: z.ZodDefault<z.ZodEnum<{
160
+ power: "power";
161
+ gnd: "gnd";
162
+ io: "io";
163
+ analog: "analog";
164
+ pwm: "pwm";
165
+ i2c: "i2c";
166
+ spi: "spi";
167
+ uart: "uart";
168
+ usb: "usb";
169
+ clock: "clock";
170
+ reset: "reset";
171
+ enable: "enable";
172
+ nc: "nc";
173
+ other: "other";
174
+ }>>;
175
+ }, z.core.$strict>>>;
176
+ pad: z.ZodOptional<z.ZodObject<{
177
+ shape: z.ZodDefault<z.ZodEnum<{
178
+ rect: "rect";
179
+ round: "round";
180
+ oval: "oval";
181
+ }>>;
182
+ wMm: z.ZodNumber;
183
+ hMm: z.ZodNumber;
184
+ holeMm: z.ZodOptional<z.ZodNumber>;
185
+ smd: z.ZodOptional<z.ZodBoolean>;
186
+ }, z.core.$strict>>;
187
+ }, z.core.$strict>;
188
+ export type Header = z.infer<typeof Header>;
189
+ /**
190
+ * A flying wire lead. Drawn as a bendable leg (fzp legId line) from (fromXMm, fromYMm)
191
+ * on the board, lengthMm long in direction, with the connector at the free end.
192
+ */
193
+ export declare const Lead: z.ZodObject<{
194
+ color: z.ZodDefault<z.ZodString>;
195
+ lengthMm: z.ZodDefault<z.ZodNumber>;
196
+ fromXMm: z.ZodNumber;
197
+ fromYMm: z.ZodNumber;
198
+ direction: z.ZodDefault<z.ZodEnum<{
199
+ left: "left";
200
+ right: "right";
201
+ up: "up";
202
+ down: "down";
203
+ }>>;
204
+ gaugeMm: z.ZodDefault<z.ZodNumber>;
205
+ key: z.ZodString;
206
+ name: z.ZodString;
207
+ label: z.ZodOptional<z.ZodString>;
208
+ description: z.ZodOptional<z.ZodString>;
209
+ role: z.ZodDefault<z.ZodEnum<{
210
+ power: "power";
211
+ gnd: "gnd";
212
+ io: "io";
213
+ analog: "analog";
214
+ pwm: "pwm";
215
+ i2c: "i2c";
216
+ spi: "spi";
217
+ uart: "uart";
218
+ usb: "usb";
219
+ clock: "clock";
220
+ reset: "reset";
221
+ enable: "enable";
222
+ nc: "nc";
223
+ other: "other";
224
+ }>>;
225
+ }, z.core.$strict>;
226
+ export type Lead = z.infer<typeof Lead>;
227
+ export declare const Outline: z.ZodObject<{
228
+ widthMm: z.ZodNumber;
229
+ heightMm: z.ZodNumber;
230
+ shape: z.ZodDefault<z.ZodEnum<{
231
+ rect: "rect";
232
+ custom: "custom";
233
+ rounded: "rounded";
234
+ }>>;
235
+ cornerRadiusMm: z.ZodDefault<z.ZodNumber>;
236
+ pathMm: z.ZodOptional<z.ZodString>;
237
+ holes: z.ZodDefault<z.ZodArray<z.ZodObject<{
238
+ xMm: z.ZodNumber;
239
+ yMm: z.ZodNumber;
240
+ dMm: z.ZodNumber;
241
+ }, z.core.$strict>>>;
242
+ }, z.core.$strict>;
243
+ export type Outline = z.infer<typeof Outline>;
244
+ /** Decorative items drawn on the breadboard view (vector style). */
245
+ export declare const SilkItem: z.ZodDiscriminatedUnion<[z.ZodObject<{
246
+ kind: z.ZodLiteral<"text">;
247
+ text: z.ZodString;
248
+ xMm: z.ZodNumber;
249
+ yMm: z.ZodNumber;
250
+ sizeMm: z.ZodDefault<z.ZodNumber>;
251
+ color: z.ZodDefault<z.ZodString>;
252
+ anchor: z.ZodDefault<z.ZodEnum<{
253
+ start: "start";
254
+ middle: "middle";
255
+ end: "end";
256
+ }>>;
257
+ rotate: z.ZodDefault<z.ZodNumber>;
258
+ }, z.core.$strict>, z.ZodObject<{
259
+ kind: z.ZodLiteral<"rect">;
260
+ xMm: z.ZodNumber;
261
+ yMm: z.ZodNumber;
262
+ wMm: z.ZodNumber;
263
+ hMm: z.ZodNumber;
264
+ color: z.ZodDefault<z.ZodString>;
265
+ rxMm: z.ZodDefault<z.ZodNumber>;
266
+ note: z.ZodOptional<z.ZodString>;
267
+ }, z.core.$strict>, z.ZodObject<{
268
+ kind: z.ZodLiteral<"circle">;
269
+ xMm: z.ZodNumber;
270
+ yMm: z.ZodNumber;
271
+ dMm: z.ZodNumber;
272
+ color: z.ZodDefault<z.ZodString>;
273
+ note: z.ZodOptional<z.ZodString>;
274
+ }, z.core.$strict>, z.ZodObject<{
275
+ kind: z.ZodLiteral<"line">;
276
+ x1Mm: z.ZodNumber;
277
+ y1Mm: z.ZodNumber;
278
+ x2Mm: z.ZodNumber;
279
+ y2Mm: z.ZodNumber;
280
+ widthMm: z.ZodDefault<z.ZodNumber>;
281
+ color: z.ZodDefault<z.ZodString>;
282
+ }, z.core.$strict>], "kind">;
283
+ export type SilkItem = z.infer<typeof SilkItem>;
284
+ export declare const Photo: z.ZodObject<{
285
+ src: z.ZodString;
286
+ crop: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
287
+ rotate: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
288
+ removeBackground: z.ZodDefault<z.ZodBoolean>;
289
+ opacity: z.ZodDefault<z.ZodNumber>;
290
+ }, z.core.$strict>;
291
+ export type Photo = z.infer<typeof Photo>;
292
+ export declare const Artwork: z.ZodObject<{
293
+ style: z.ZodDefault<z.ZodEnum<{
294
+ vector: "vector";
295
+ photo: "photo";
296
+ }>>;
297
+ boardColor: z.ZodDefault<z.ZodString>;
298
+ silkColor: z.ZodDefault<z.ZodString>;
299
+ silkscreen: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
300
+ kind: z.ZodLiteral<"text">;
301
+ text: z.ZodString;
302
+ xMm: z.ZodNumber;
303
+ yMm: z.ZodNumber;
304
+ sizeMm: z.ZodDefault<z.ZodNumber>;
305
+ color: z.ZodDefault<z.ZodString>;
306
+ anchor: z.ZodDefault<z.ZodEnum<{
307
+ start: "start";
308
+ middle: "middle";
309
+ end: "end";
310
+ }>>;
311
+ rotate: z.ZodDefault<z.ZodNumber>;
312
+ }, z.core.$strict>, z.ZodObject<{
313
+ kind: z.ZodLiteral<"rect">;
314
+ xMm: z.ZodNumber;
315
+ yMm: z.ZodNumber;
316
+ wMm: z.ZodNumber;
317
+ hMm: z.ZodNumber;
318
+ color: z.ZodDefault<z.ZodString>;
319
+ rxMm: z.ZodDefault<z.ZodNumber>;
320
+ note: z.ZodOptional<z.ZodString>;
321
+ }, z.core.$strict>, z.ZodObject<{
322
+ kind: z.ZodLiteral<"circle">;
323
+ xMm: z.ZodNumber;
324
+ yMm: z.ZodNumber;
325
+ dMm: z.ZodNumber;
326
+ color: z.ZodDefault<z.ZodString>;
327
+ note: z.ZodOptional<z.ZodString>;
328
+ }, z.core.$strict>, z.ZodObject<{
329
+ kind: z.ZodLiteral<"line">;
330
+ x1Mm: z.ZodNumber;
331
+ y1Mm: z.ZodNumber;
332
+ x2Mm: z.ZodNumber;
333
+ y2Mm: z.ZodNumber;
334
+ widthMm: z.ZodDefault<z.ZodNumber>;
335
+ color: z.ZodDefault<z.ZodString>;
336
+ }, z.core.$strict>], "kind">>>;
337
+ components: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
338
+ kind: z.ZodLiteral<"text">;
339
+ text: z.ZodString;
340
+ xMm: z.ZodNumber;
341
+ yMm: z.ZodNumber;
342
+ sizeMm: z.ZodDefault<z.ZodNumber>;
343
+ color: z.ZodDefault<z.ZodString>;
344
+ anchor: z.ZodDefault<z.ZodEnum<{
345
+ start: "start";
346
+ middle: "middle";
347
+ end: "end";
348
+ }>>;
349
+ rotate: z.ZodDefault<z.ZodNumber>;
350
+ }, z.core.$strict>, z.ZodObject<{
351
+ kind: z.ZodLiteral<"rect">;
352
+ xMm: z.ZodNumber;
353
+ yMm: z.ZodNumber;
354
+ wMm: z.ZodNumber;
355
+ hMm: z.ZodNumber;
356
+ color: z.ZodDefault<z.ZodString>;
357
+ rxMm: z.ZodDefault<z.ZodNumber>;
358
+ note: z.ZodOptional<z.ZodString>;
359
+ }, z.core.$strict>, z.ZodObject<{
360
+ kind: z.ZodLiteral<"circle">;
361
+ xMm: z.ZodNumber;
362
+ yMm: z.ZodNumber;
363
+ dMm: z.ZodNumber;
364
+ color: z.ZodDefault<z.ZodString>;
365
+ note: z.ZodOptional<z.ZodString>;
366
+ }, z.core.$strict>, z.ZodObject<{
367
+ kind: z.ZodLiteral<"line">;
368
+ x1Mm: z.ZodNumber;
369
+ y1Mm: z.ZodNumber;
370
+ x2Mm: z.ZodNumber;
371
+ y2Mm: z.ZodNumber;
372
+ widthMm: z.ZodDefault<z.ZodNumber>;
373
+ color: z.ZodDefault<z.ZodString>;
374
+ }, z.core.$strict>], "kind">>>;
375
+ photo: z.ZodOptional<z.ZodObject<{
376
+ src: z.ZodString;
377
+ crop: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
378
+ rotate: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
379
+ removeBackground: z.ZodDefault<z.ZodBoolean>;
380
+ opacity: z.ZodDefault<z.ZodNumber>;
381
+ }, z.core.$strict>>;
382
+ }, z.core.$strict>;
383
+ export type Artwork = z.infer<typeof Artwork>;
384
+ export declare const Bus: z.ZodObject<{
385
+ id: z.ZodString;
386
+ pins: z.ZodArray<z.ZodString>;
387
+ }, z.core.$strict>;
388
+ export type Bus = z.infer<typeof Bus>;
389
+ /** Passed through to the fzp <spice> block. Tokens: {instanceTitle}, {net connectorN}, {<property>}. */
390
+ export declare const Spice: z.ZodObject<{
391
+ model: z.ZodOptional<z.ZodString>;
392
+ lines: z.ZodArray<z.ZodString>;
393
+ }, z.core.$strict>;
394
+ export type Spice = z.infer<typeof Spice>;
395
+ export declare const SchematicOptions: z.ZodObject<{
396
+ layout: z.ZodDefault<z.ZodEnum<{
397
+ "by-role": "by-role";
398
+ }>>;
399
+ sides: z.ZodOptional<z.ZodObject<{
400
+ left: z.ZodOptional<z.ZodArray<z.ZodEnum<{
401
+ power: "power";
402
+ gnd: "gnd";
403
+ io: "io";
404
+ analog: "analog";
405
+ pwm: "pwm";
406
+ i2c: "i2c";
407
+ spi: "spi";
408
+ uart: "uart";
409
+ usb: "usb";
410
+ clock: "clock";
411
+ reset: "reset";
412
+ enable: "enable";
413
+ nc: "nc";
414
+ other: "other";
415
+ }>>>;
416
+ right: z.ZodOptional<z.ZodArray<z.ZodEnum<{
417
+ power: "power";
418
+ gnd: "gnd";
419
+ io: "io";
420
+ analog: "analog";
421
+ pwm: "pwm";
422
+ i2c: "i2c";
423
+ spi: "spi";
424
+ uart: "uart";
425
+ usb: "usb";
426
+ clock: "clock";
427
+ reset: "reset";
428
+ enable: "enable";
429
+ nc: "nc";
430
+ other: "other";
431
+ }>>>;
432
+ top: z.ZodOptional<z.ZodArray<z.ZodEnum<{
433
+ power: "power";
434
+ gnd: "gnd";
435
+ io: "io";
436
+ analog: "analog";
437
+ pwm: "pwm";
438
+ i2c: "i2c";
439
+ spi: "spi";
440
+ uart: "uart";
441
+ usb: "usb";
442
+ clock: "clock";
443
+ reset: "reset";
444
+ enable: "enable";
445
+ nc: "nc";
446
+ other: "other";
447
+ }>>>;
448
+ bottom: z.ZodOptional<z.ZodArray<z.ZodEnum<{
449
+ power: "power";
450
+ gnd: "gnd";
451
+ io: "io";
452
+ analog: "analog";
453
+ pwm: "pwm";
454
+ i2c: "i2c";
455
+ spi: "spi";
456
+ uart: "uart";
457
+ usb: "usb";
458
+ clock: "clock";
459
+ reset: "reset";
460
+ enable: "enable";
461
+ nc: "nc";
462
+ other: "other";
463
+ }>>>;
464
+ }, z.core.$strict>>;
465
+ }, z.core.$strict>;
466
+ export type SchematicOptions = z.infer<typeof SchematicOptions>;
467
+ export declare const PcbOptions: z.ZodObject<{
468
+ mode: z.ZodDefault<z.ZodEnum<{
469
+ smd: "smd";
470
+ auto: "auto";
471
+ tht: "tht";
472
+ }>>;
473
+ silkscreenOutline: z.ZodDefault<z.ZodBoolean>;
474
+ }, z.core.$strict>;
475
+ export type PcbOptions = z.infer<typeof PcbOptions>;
476
+ export declare const PartSpec: z.ZodObject<{
477
+ $schema: z.ZodOptional<z.ZodString>;
478
+ slug: z.ZodString;
479
+ title: z.ZodString;
480
+ version: z.ZodDefault<z.ZodNumber>;
481
+ family: z.ZodOptional<z.ZodString>;
482
+ label: z.ZodDefault<z.ZodString>;
483
+ author: z.ZodDefault<z.ZodString>;
484
+ tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
485
+ description: z.ZodDefault<z.ZodString>;
486
+ sources: z.ZodDefault<z.ZodArray<z.ZodString>>;
487
+ properties: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
488
+ outline: z.ZodObject<{
489
+ widthMm: z.ZodNumber;
490
+ heightMm: z.ZodNumber;
491
+ shape: z.ZodDefault<z.ZodEnum<{
492
+ rect: "rect";
493
+ custom: "custom";
494
+ rounded: "rounded";
495
+ }>>;
496
+ cornerRadiusMm: z.ZodDefault<z.ZodNumber>;
497
+ pathMm: z.ZodOptional<z.ZodString>;
498
+ holes: z.ZodDefault<z.ZodArray<z.ZodObject<{
499
+ xMm: z.ZodNumber;
500
+ yMm: z.ZodNumber;
501
+ dMm: z.ZodNumber;
502
+ }, z.core.$strict>>>;
503
+ }, z.core.$strict>;
504
+ artwork: z.ZodPrefault<z.ZodObject<{
505
+ style: z.ZodDefault<z.ZodEnum<{
506
+ vector: "vector";
507
+ photo: "photo";
508
+ }>>;
509
+ boardColor: z.ZodDefault<z.ZodString>;
510
+ silkColor: z.ZodDefault<z.ZodString>;
511
+ silkscreen: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
512
+ kind: z.ZodLiteral<"text">;
513
+ text: z.ZodString;
514
+ xMm: z.ZodNumber;
515
+ yMm: z.ZodNumber;
516
+ sizeMm: z.ZodDefault<z.ZodNumber>;
517
+ color: z.ZodDefault<z.ZodString>;
518
+ anchor: z.ZodDefault<z.ZodEnum<{
519
+ start: "start";
520
+ middle: "middle";
521
+ end: "end";
522
+ }>>;
523
+ rotate: z.ZodDefault<z.ZodNumber>;
524
+ }, z.core.$strict>, z.ZodObject<{
525
+ kind: z.ZodLiteral<"rect">;
526
+ xMm: z.ZodNumber;
527
+ yMm: z.ZodNumber;
528
+ wMm: z.ZodNumber;
529
+ hMm: z.ZodNumber;
530
+ color: z.ZodDefault<z.ZodString>;
531
+ rxMm: z.ZodDefault<z.ZodNumber>;
532
+ note: z.ZodOptional<z.ZodString>;
533
+ }, z.core.$strict>, z.ZodObject<{
534
+ kind: z.ZodLiteral<"circle">;
535
+ xMm: z.ZodNumber;
536
+ yMm: z.ZodNumber;
537
+ dMm: z.ZodNumber;
538
+ color: z.ZodDefault<z.ZodString>;
539
+ note: z.ZodOptional<z.ZodString>;
540
+ }, z.core.$strict>, z.ZodObject<{
541
+ kind: z.ZodLiteral<"line">;
542
+ x1Mm: z.ZodNumber;
543
+ y1Mm: z.ZodNumber;
544
+ x2Mm: z.ZodNumber;
545
+ y2Mm: z.ZodNumber;
546
+ widthMm: z.ZodDefault<z.ZodNumber>;
547
+ color: z.ZodDefault<z.ZodString>;
548
+ }, z.core.$strict>], "kind">>>;
549
+ components: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
550
+ kind: z.ZodLiteral<"text">;
551
+ text: z.ZodString;
552
+ xMm: z.ZodNumber;
553
+ yMm: z.ZodNumber;
554
+ sizeMm: z.ZodDefault<z.ZodNumber>;
555
+ color: z.ZodDefault<z.ZodString>;
556
+ anchor: z.ZodDefault<z.ZodEnum<{
557
+ start: "start";
558
+ middle: "middle";
559
+ end: "end";
560
+ }>>;
561
+ rotate: z.ZodDefault<z.ZodNumber>;
562
+ }, z.core.$strict>, z.ZodObject<{
563
+ kind: z.ZodLiteral<"rect">;
564
+ xMm: z.ZodNumber;
565
+ yMm: z.ZodNumber;
566
+ wMm: z.ZodNumber;
567
+ hMm: z.ZodNumber;
568
+ color: z.ZodDefault<z.ZodString>;
569
+ rxMm: z.ZodDefault<z.ZodNumber>;
570
+ note: z.ZodOptional<z.ZodString>;
571
+ }, z.core.$strict>, z.ZodObject<{
572
+ kind: z.ZodLiteral<"circle">;
573
+ xMm: z.ZodNumber;
574
+ yMm: z.ZodNumber;
575
+ dMm: z.ZodNumber;
576
+ color: z.ZodDefault<z.ZodString>;
577
+ note: z.ZodOptional<z.ZodString>;
578
+ }, z.core.$strict>, z.ZodObject<{
579
+ kind: z.ZodLiteral<"line">;
580
+ x1Mm: z.ZodNumber;
581
+ y1Mm: z.ZodNumber;
582
+ x2Mm: z.ZodNumber;
583
+ y2Mm: z.ZodNumber;
584
+ widthMm: z.ZodDefault<z.ZodNumber>;
585
+ color: z.ZodDefault<z.ZodString>;
586
+ }, z.core.$strict>], "kind">>>;
587
+ photo: z.ZodOptional<z.ZodObject<{
588
+ src: z.ZodString;
589
+ crop: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
590
+ rotate: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
591
+ removeBackground: z.ZodDefault<z.ZodBoolean>;
592
+ opacity: z.ZodDefault<z.ZodNumber>;
593
+ }, z.core.$strict>>;
594
+ }, z.core.$strict>>;
595
+ pins: z.ZodDefault<z.ZodArray<z.ZodObject<{
596
+ type: z.ZodDefault<z.ZodEnum<{
597
+ male: "male";
598
+ female: "female";
599
+ pad: "pad";
600
+ wire: "wire";
601
+ }>>;
602
+ xMm: z.ZodNumber;
603
+ yMm: z.ZodNumber;
604
+ pad: z.ZodDefault<z.ZodObject<{
605
+ shape: z.ZodDefault<z.ZodEnum<{
606
+ rect: "rect";
607
+ round: "round";
608
+ oval: "oval";
609
+ }>>;
610
+ wMm: z.ZodNumber;
611
+ hMm: z.ZodNumber;
612
+ holeMm: z.ZodOptional<z.ZodNumber>;
613
+ smd: z.ZodOptional<z.ZodBoolean>;
614
+ }, z.core.$strict>>;
615
+ snap: z.ZodOptional<z.ZodBoolean>;
616
+ key: z.ZodString;
617
+ name: z.ZodString;
618
+ label: z.ZodOptional<z.ZodString>;
619
+ description: z.ZodOptional<z.ZodString>;
620
+ role: z.ZodDefault<z.ZodEnum<{
621
+ power: "power";
622
+ gnd: "gnd";
623
+ io: "io";
624
+ analog: "analog";
625
+ pwm: "pwm";
626
+ i2c: "i2c";
627
+ spi: "spi";
628
+ uart: "uart";
629
+ usb: "usb";
630
+ clock: "clock";
631
+ reset: "reset";
632
+ enable: "enable";
633
+ nc: "nc";
634
+ other: "other";
635
+ }>>;
636
+ }, z.core.$strict>>>;
637
+ headers: z.ZodDefault<z.ZodArray<z.ZodObject<{
638
+ key: z.ZodString;
639
+ kind: z.ZodDefault<z.ZodEnum<{
640
+ male: "male";
641
+ female: "female";
642
+ castellated: "castellated";
643
+ }>>;
644
+ pitchMm: z.ZodDefault<z.ZodNumber>;
645
+ rows: z.ZodDefault<z.ZodNumber>;
646
+ cols: z.ZodNumber;
647
+ xMm: z.ZodNumber;
648
+ yMm: z.ZodNumber;
649
+ orientation: z.ZodDefault<z.ZodEnum<{
650
+ horizontal: "horizontal";
651
+ vertical: "vertical";
652
+ }>>;
653
+ pins: z.ZodArray<z.ZodNullable<z.ZodObject<{
654
+ key: z.ZodString;
655
+ name: z.ZodString;
656
+ label: z.ZodOptional<z.ZodString>;
657
+ description: z.ZodOptional<z.ZodString>;
658
+ role: z.ZodDefault<z.ZodEnum<{
659
+ power: "power";
660
+ gnd: "gnd";
661
+ io: "io";
662
+ analog: "analog";
663
+ pwm: "pwm";
664
+ i2c: "i2c";
665
+ spi: "spi";
666
+ uart: "uart";
667
+ usb: "usb";
668
+ clock: "clock";
669
+ reset: "reset";
670
+ enable: "enable";
671
+ nc: "nc";
672
+ other: "other";
673
+ }>>;
674
+ }, z.core.$strict>>>;
675
+ pad: z.ZodOptional<z.ZodObject<{
676
+ shape: z.ZodDefault<z.ZodEnum<{
677
+ rect: "rect";
678
+ round: "round";
679
+ oval: "oval";
680
+ }>>;
681
+ wMm: z.ZodNumber;
682
+ hMm: z.ZodNumber;
683
+ holeMm: z.ZodOptional<z.ZodNumber>;
684
+ smd: z.ZodOptional<z.ZodBoolean>;
685
+ }, z.core.$strict>>;
686
+ }, z.core.$strict>>>;
687
+ leads: z.ZodDefault<z.ZodArray<z.ZodObject<{
688
+ color: z.ZodDefault<z.ZodString>;
689
+ lengthMm: z.ZodDefault<z.ZodNumber>;
690
+ fromXMm: z.ZodNumber;
691
+ fromYMm: z.ZodNumber;
692
+ direction: z.ZodDefault<z.ZodEnum<{
693
+ left: "left";
694
+ right: "right";
695
+ up: "up";
696
+ down: "down";
697
+ }>>;
698
+ gaugeMm: z.ZodDefault<z.ZodNumber>;
699
+ key: z.ZodString;
700
+ name: z.ZodString;
701
+ label: z.ZodOptional<z.ZodString>;
702
+ description: z.ZodOptional<z.ZodString>;
703
+ role: z.ZodDefault<z.ZodEnum<{
704
+ power: "power";
705
+ gnd: "gnd";
706
+ io: "io";
707
+ analog: "analog";
708
+ pwm: "pwm";
709
+ i2c: "i2c";
710
+ spi: "spi";
711
+ uart: "uart";
712
+ usb: "usb";
713
+ clock: "clock";
714
+ reset: "reset";
715
+ enable: "enable";
716
+ nc: "nc";
717
+ other: "other";
718
+ }>>;
719
+ }, z.core.$strict>>>;
720
+ pinIds: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
721
+ buses: z.ZodDefault<z.ZodArray<z.ZodObject<{
722
+ id: z.ZodString;
723
+ pins: z.ZodArray<z.ZodString>;
724
+ }, z.core.$strict>>>;
725
+ spice: z.ZodOptional<z.ZodObject<{
726
+ model: z.ZodOptional<z.ZodString>;
727
+ lines: z.ZodArray<z.ZodString>;
728
+ }, z.core.$strict>>;
729
+ schematic: z.ZodPrefault<z.ZodObject<{
730
+ layout: z.ZodDefault<z.ZodEnum<{
731
+ "by-role": "by-role";
732
+ }>>;
733
+ sides: z.ZodOptional<z.ZodObject<{
734
+ left: z.ZodOptional<z.ZodArray<z.ZodEnum<{
735
+ power: "power";
736
+ gnd: "gnd";
737
+ io: "io";
738
+ analog: "analog";
739
+ pwm: "pwm";
740
+ i2c: "i2c";
741
+ spi: "spi";
742
+ uart: "uart";
743
+ usb: "usb";
744
+ clock: "clock";
745
+ reset: "reset";
746
+ enable: "enable";
747
+ nc: "nc";
748
+ other: "other";
749
+ }>>>;
750
+ right: z.ZodOptional<z.ZodArray<z.ZodEnum<{
751
+ power: "power";
752
+ gnd: "gnd";
753
+ io: "io";
754
+ analog: "analog";
755
+ pwm: "pwm";
756
+ i2c: "i2c";
757
+ spi: "spi";
758
+ uart: "uart";
759
+ usb: "usb";
760
+ clock: "clock";
761
+ reset: "reset";
762
+ enable: "enable";
763
+ nc: "nc";
764
+ other: "other";
765
+ }>>>;
766
+ top: z.ZodOptional<z.ZodArray<z.ZodEnum<{
767
+ power: "power";
768
+ gnd: "gnd";
769
+ io: "io";
770
+ analog: "analog";
771
+ pwm: "pwm";
772
+ i2c: "i2c";
773
+ spi: "spi";
774
+ uart: "uart";
775
+ usb: "usb";
776
+ clock: "clock";
777
+ reset: "reset";
778
+ enable: "enable";
779
+ nc: "nc";
780
+ other: "other";
781
+ }>>>;
782
+ bottom: z.ZodOptional<z.ZodArray<z.ZodEnum<{
783
+ power: "power";
784
+ gnd: "gnd";
785
+ io: "io";
786
+ analog: "analog";
787
+ pwm: "pwm";
788
+ i2c: "i2c";
789
+ spi: "spi";
790
+ uart: "uart";
791
+ usb: "usb";
792
+ clock: "clock";
793
+ reset: "reset";
794
+ enable: "enable";
795
+ nc: "nc";
796
+ other: "other";
797
+ }>>>;
798
+ }, z.core.$strict>>;
799
+ }, z.core.$strict>>;
800
+ pcb: z.ZodPrefault<z.ZodObject<{
801
+ mode: z.ZodDefault<z.ZodEnum<{
802
+ smd: "smd";
803
+ auto: "auto";
804
+ tht: "tht";
805
+ }>>;
806
+ silkscreenOutline: z.ZodDefault<z.ZodBoolean>;
807
+ }, z.core.$strict>>;
808
+ }, z.core.$strict>;
809
+ export type PartSpec = z.infer<typeof PartSpec>;
810
+ /** The spec as written on disk (before defaults are applied). */
811
+ export type PartSpecInput = z.input<typeof PartSpec>;
812
+ /** Parse and apply defaults. Throws ZodError on invalid input. */
813
+ export declare function parsePartSpec(input: unknown): PartSpec;
814
+ export declare function safeParsePartSpec(input: unknown): z.ZodSafeParseResult<{
815
+ slug: string;
816
+ title: string;
817
+ version: number;
818
+ label: string;
819
+ author: string;
820
+ tags: string[];
821
+ description: string;
822
+ sources: string[];
823
+ properties: Record<string, string>;
824
+ outline: {
825
+ widthMm: number;
826
+ heightMm: number;
827
+ shape: "rect" | "custom" | "rounded";
828
+ cornerRadiusMm: number;
829
+ holes: {
830
+ xMm: number;
831
+ yMm: number;
832
+ dMm: number;
833
+ }[];
834
+ pathMm?: string | undefined;
835
+ };
836
+ artwork: {
837
+ style: "vector" | "photo";
838
+ boardColor: string;
839
+ silkColor: string;
840
+ silkscreen: ({
841
+ kind: "text";
842
+ text: string;
843
+ xMm: number;
844
+ yMm: number;
845
+ sizeMm: number;
846
+ color: string;
847
+ anchor: "start" | "middle" | "end";
848
+ rotate: number;
849
+ } | {
850
+ kind: "rect";
851
+ xMm: number;
852
+ yMm: number;
853
+ wMm: number;
854
+ hMm: number;
855
+ color: string;
856
+ rxMm: number;
857
+ note?: string | undefined;
858
+ } | {
859
+ kind: "circle";
860
+ xMm: number;
861
+ yMm: number;
862
+ dMm: number;
863
+ color: string;
864
+ note?: string | undefined;
865
+ } | {
866
+ kind: "line";
867
+ x1Mm: number;
868
+ y1Mm: number;
869
+ x2Mm: number;
870
+ y2Mm: number;
871
+ widthMm: number;
872
+ color: string;
873
+ })[];
874
+ components: ({
875
+ kind: "text";
876
+ text: string;
877
+ xMm: number;
878
+ yMm: number;
879
+ sizeMm: number;
880
+ color: string;
881
+ anchor: "start" | "middle" | "end";
882
+ rotate: number;
883
+ } | {
884
+ kind: "rect";
885
+ xMm: number;
886
+ yMm: number;
887
+ wMm: number;
888
+ hMm: number;
889
+ color: string;
890
+ rxMm: number;
891
+ note?: string | undefined;
892
+ } | {
893
+ kind: "circle";
894
+ xMm: number;
895
+ yMm: number;
896
+ dMm: number;
897
+ color: string;
898
+ note?: string | undefined;
899
+ } | {
900
+ kind: "line";
901
+ x1Mm: number;
902
+ y1Mm: number;
903
+ x2Mm: number;
904
+ y2Mm: number;
905
+ widthMm: number;
906
+ color: string;
907
+ })[];
908
+ photo?: {
909
+ src: string;
910
+ rotate: 0 | 90 | 180 | 270;
911
+ removeBackground: boolean;
912
+ opacity: number;
913
+ crop?: [number, number, number, number] | undefined;
914
+ } | undefined;
915
+ };
916
+ pins: {
917
+ type: "male" | "female" | "pad" | "wire";
918
+ xMm: number;
919
+ yMm: number;
920
+ pad: {
921
+ shape: "rect" | "round" | "oval";
922
+ wMm: number;
923
+ hMm: number;
924
+ holeMm?: number | undefined;
925
+ smd?: boolean | undefined;
926
+ };
927
+ key: string;
928
+ name: string;
929
+ role: "power" | "gnd" | "io" | "analog" | "pwm" | "i2c" | "spi" | "uart" | "usb" | "clock" | "reset" | "enable" | "nc" | "other";
930
+ snap?: boolean | undefined;
931
+ label?: string | undefined;
932
+ description?: string | undefined;
933
+ }[];
934
+ headers: {
935
+ key: string;
936
+ kind: "male" | "female" | "castellated";
937
+ pitchMm: number;
938
+ rows: number;
939
+ cols: number;
940
+ xMm: number;
941
+ yMm: number;
942
+ orientation: "horizontal" | "vertical";
943
+ pins: ({
944
+ key: string;
945
+ name: string;
946
+ role: "power" | "gnd" | "io" | "analog" | "pwm" | "i2c" | "spi" | "uart" | "usb" | "clock" | "reset" | "enable" | "nc" | "other";
947
+ label?: string | undefined;
948
+ description?: string | undefined;
949
+ } | null)[];
950
+ pad?: {
951
+ shape: "rect" | "round" | "oval";
952
+ wMm: number;
953
+ hMm: number;
954
+ holeMm?: number | undefined;
955
+ smd?: boolean | undefined;
956
+ } | undefined;
957
+ }[];
958
+ leads: {
959
+ color: string;
960
+ lengthMm: number;
961
+ fromXMm: number;
962
+ fromYMm: number;
963
+ direction: "left" | "right" | "up" | "down";
964
+ gaugeMm: number;
965
+ key: string;
966
+ name: string;
967
+ role: "power" | "gnd" | "io" | "analog" | "pwm" | "i2c" | "spi" | "uart" | "usb" | "clock" | "reset" | "enable" | "nc" | "other";
968
+ label?: string | undefined;
969
+ description?: string | undefined;
970
+ }[];
971
+ pinIds: Record<string, number>;
972
+ buses: {
973
+ id: string;
974
+ pins: string[];
975
+ }[];
976
+ schematic: {
977
+ layout: "by-role";
978
+ sides?: {
979
+ left?: ("power" | "gnd" | "io" | "analog" | "pwm" | "i2c" | "spi" | "uart" | "usb" | "clock" | "reset" | "enable" | "nc" | "other")[] | undefined;
980
+ right?: ("power" | "gnd" | "io" | "analog" | "pwm" | "i2c" | "spi" | "uart" | "usb" | "clock" | "reset" | "enable" | "nc" | "other")[] | undefined;
981
+ top?: ("power" | "gnd" | "io" | "analog" | "pwm" | "i2c" | "spi" | "uart" | "usb" | "clock" | "reset" | "enable" | "nc" | "other")[] | undefined;
982
+ bottom?: ("power" | "gnd" | "io" | "analog" | "pwm" | "i2c" | "spi" | "uart" | "usb" | "clock" | "reset" | "enable" | "nc" | "other")[] | undefined;
983
+ } | undefined;
984
+ };
985
+ pcb: {
986
+ mode: "smd" | "auto" | "tht";
987
+ silkscreenOutline: boolean;
988
+ };
989
+ $schema?: string | undefined;
990
+ family?: string | undefined;
991
+ spice?: {
992
+ lines: string[];
993
+ model?: string | undefined;
994
+ } | undefined;
995
+ }>;