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,513 @@
1
+ /**
2
+ * Breadboard view renderer (Fritzing house style).
3
+ *
4
+ * Coordinates: part frame mm -> canvas mm (toCanvas) -> mil (1 viewBox unit = 1 mil).
5
+ * Draw order: board, photo, silkscreen + components, header bodies, leads, pads/pins,
6
+ * labels, terminals. Attributes only (no CSS), font Noto Sans only, no tspans.
7
+ *
8
+ * Conventions:
9
+ * - Silkscreen rect xMm/yMm is the TOP-LEFT corner; circle xMm/yMm is the centre; text
10
+ * xMm/yMm is the anchor point, yMm being the vertical CENTRE of the text.
11
+ * - Free-standing pins: the pad element is connectorNpin; a 1 mil connectorNterminal
12
+ * sits at its centre.
13
+ * - Headers: one cell per pin in the core header style; connectorNpin is the inner pin
14
+ * square (male), the hole (female) or the pad (castellated).
15
+ * - Leads follow the bendable-leg SVGs of the core library (LED-5mm-red-leg.svg and
16
+ * friends): the connectorNpin element sits where the lead leaves the board (it
17
+ * doubles as the solder blob) and the connectorNleg line runs from there to the free
18
+ * end. Leads have no terminal.
19
+ */
20
+ import { toCanvas } from "../resolve.js";
21
+ import { el, svgRoot, text, wrapBase64, FONT_SANS } from "../svg.js";
22
+ import { fmt, mmToMil } from "../units.js";
23
+ import { darkenHex, scalePath } from "./breadboard-util.js";
24
+ import { ROLE_COLORS, STYLE } from "./style.js";
25
+ export const XLINK_NS = "http://www.w3.org/1999/xlink";
26
+ /** Breadboard-only colours and sizes not (yet) in STYLE. */
27
+ export const BB = {
28
+ boardStrokeMil: 8,
29
+ boardDarken: 0.3,
30
+ mountHoleFill: "#000000",
31
+ mountRingMil: 10,
32
+ padStroke: STYLE.male.center,
33
+ padStrokeMil: 6,
34
+ padHole: "#1F1F1F",
35
+ labelGapMm: 0.4,
36
+ headerLabelScale: 0.8,
37
+ minLabelPitchMm: 2,
38
+ /** Average glyph advance of Noto Sans caps/digits, in em (for label fitting). */
39
+ charWidthEm: 0.6,
40
+ minHeaderLabelMil: 20,
41
+ };
42
+ /** Part-frame mm -> canvas mil. */
43
+ function cv(part, xMm, yMm) {
44
+ const c = toCanvas(part.frame, xMm, yMm);
45
+ return { x: mmToMil(c.x), y: mmToMil(c.y) };
46
+ }
47
+ function pts(list) {
48
+ return list.map(([x, y]) => `${fmt(x)},${fmt(y)}`).join(" ");
49
+ }
50
+ function labelColor(c) {
51
+ return c.role === "power" || c.role === "gnd" ? ROLE_COLORS[c.role] : STYLE.labelColor;
52
+ }
53
+ /** Baseline offset that vertically centres a text of the given size on a point. */
54
+ function centreBaseline(sizeMil) {
55
+ return sizeMil * 0.35;
56
+ }
57
+ function drawBoard(part, out) {
58
+ const o = part.spec.outline;
59
+ const fill = part.spec.artwork.boardColor;
60
+ const stroke = darkenHex(fill, BB.boardDarken);
61
+ const sw = BB.boardStrokeMil;
62
+ const tl = cv(part, 0, 0);
63
+ const w = mmToMil(o.widthMm);
64
+ const h = mmToMil(o.heightMm);
65
+ if (o.shape === "custom" && o.pathMm) {
66
+ out.push(el("g", { transform: `translate(${fmt(tl.x)} ${fmt(tl.y)})` }, [
67
+ el("path", {
68
+ d: scalePath(o.pathMm, mmToMil(1)),
69
+ fill,
70
+ stroke,
71
+ "stroke-width": sw,
72
+ }),
73
+ ]));
74
+ }
75
+ else {
76
+ // Inset by half the stroke so the stroke stays inside the outline.
77
+ const r = o.shape === "rounded" ? Math.max(0, mmToMil(o.cornerRadiusMm) - sw / 2) : 0;
78
+ out.push(el("rect", {
79
+ x: tl.x + sw / 2,
80
+ y: tl.y + sw / 2,
81
+ width: w - sw,
82
+ height: h - sw,
83
+ rx: r > 0 ? r : undefined,
84
+ ry: r > 0 ? r : undefined,
85
+ fill,
86
+ stroke,
87
+ "stroke-width": sw,
88
+ }));
89
+ }
90
+ for (const hole of o.holes) {
91
+ const p = cv(part, hole.xMm, hole.yMm);
92
+ out.push(el("circle", {
93
+ cx: p.x,
94
+ cy: p.y,
95
+ r: mmToMil(hole.dMm / 2),
96
+ fill: BB.mountHoleFill,
97
+ stroke: STYLE.contactColor,
98
+ "stroke-width": BB.mountRingMil,
99
+ }));
100
+ }
101
+ }
102
+ function drawPhoto(part, ctx, out) {
103
+ if (!ctx.photo)
104
+ return;
105
+ const o = part.spec.outline;
106
+ const tl = cv(part, 0, 0);
107
+ const b64 = Buffer.from(ctx.photo.png).toString("base64");
108
+ out.push(el("image", {
109
+ x: tl.x,
110
+ y: tl.y,
111
+ width: mmToMil(o.widthMm),
112
+ height: mmToMil(o.heightMm),
113
+ preserveAspectRatio: "none",
114
+ opacity: ctx.photo.opacity < 1 ? ctx.photo.opacity : undefined,
115
+ "xlink:href": `data:image/png;base64,${wrapBase64(b64)}`,
116
+ }));
117
+ }
118
+ function drawSilk(part, item, out) {
119
+ switch (item.kind) {
120
+ case "text": {
121
+ const p = cv(part, item.xMm, item.yMm);
122
+ const size = mmToMil(item.sizeMm);
123
+ out.push(text(item.text, {
124
+ x: p.x,
125
+ y: p.y + centreBaseline(size),
126
+ "font-family": FONT_SANS,
127
+ "font-size": size,
128
+ fill: item.color,
129
+ "text-anchor": item.anchor,
130
+ transform: item.rotate !== 0 ? `rotate(${fmt(item.rotate)} ${fmt(p.x)} ${fmt(p.y)})` : undefined,
131
+ }));
132
+ return;
133
+ }
134
+ case "rect": {
135
+ const p = cv(part, item.xMm, item.yMm);
136
+ const rx = item.rxMm > 0 ? mmToMil(item.rxMm) : undefined;
137
+ out.push(el("rect", {
138
+ x: p.x,
139
+ y: p.y,
140
+ width: mmToMil(item.wMm),
141
+ height: mmToMil(item.hMm),
142
+ rx,
143
+ ry: rx,
144
+ fill: item.color,
145
+ }));
146
+ return;
147
+ }
148
+ case "circle": {
149
+ const p = cv(part, item.xMm, item.yMm);
150
+ out.push(el("circle", { cx: p.x, cy: p.y, r: mmToMil(item.dMm / 2), fill: item.color }));
151
+ return;
152
+ }
153
+ case "line": {
154
+ const a = cv(part, item.x1Mm, item.y1Mm);
155
+ const b = cv(part, item.x2Mm, item.y2Mm);
156
+ out.push(el("line", {
157
+ x1: a.x,
158
+ y1: a.y,
159
+ x2: b.x,
160
+ y2: b.y,
161
+ stroke: item.color,
162
+ "stroke-width": mmToMil(item.widthMm),
163
+ "stroke-linecap": "round",
164
+ }));
165
+ return;
166
+ }
167
+ }
168
+ }
169
+ function terminal(c, p, fill, ids) {
170
+ const s = STYLE.terminalSizeMil;
171
+ return el("rect", {
172
+ id: ids ? c.terminalId : undefined,
173
+ x: p.x - s / 2,
174
+ y: p.y - s / 2,
175
+ width: s,
176
+ height: s,
177
+ fill,
178
+ stroke: "none",
179
+ });
180
+ }
181
+ function drawPin(part, c, L, ids) {
182
+ const p = cv(part, c.xMm, c.yMm);
183
+ const w = mmToMil(c.pad.wMm);
184
+ const h = mmToMil(c.pad.hMm);
185
+ const common = {
186
+ fill: STYLE.contactColor,
187
+ stroke: BB.padStroke,
188
+ "stroke-width": BB.padStrokeMil,
189
+ };
190
+ const id = ids ? c.svgId : undefined;
191
+ if (c.pad.shape === "round") {
192
+ L.pins.push(el("circle", { id, cx: p.x, cy: p.y, r: Math.min(w, h) / 2, ...common }));
193
+ }
194
+ else {
195
+ const rx = c.pad.shape === "oval" ? Math.min(w, h) / 2 : undefined;
196
+ L.pins.push(el("rect", {
197
+ id,
198
+ x: p.x - w / 2,
199
+ y: p.y - h / 2,
200
+ width: w,
201
+ height: h,
202
+ rx,
203
+ ry: rx,
204
+ ...common,
205
+ }));
206
+ }
207
+ const hole = c.pad.holeMm ?? 0;
208
+ if (hole > 0) {
209
+ L.pins.push(el("circle", { cx: p.x, cy: p.y, r: mmToMil(hole / 2), fill: BB.padHole }));
210
+ }
211
+ // Label beside the pad, pointing into the board (label "" hides it).
212
+ if (c.label !== "") {
213
+ const size = STYLE.labelFontSizeMil;
214
+ const gap = mmToMil(BB.labelGapMm) + w / 2;
215
+ const left = c.xMm < part.spec.outline.widthMm / 2;
216
+ L.labels.push(text(c.label, {
217
+ x: left ? p.x + gap : p.x - gap,
218
+ y: p.y + centreBaseline(size),
219
+ "font-family": FONT_SANS,
220
+ "font-size": size,
221
+ fill: labelColor(c),
222
+ "text-anchor": left ? "start" : "end",
223
+ }));
224
+ }
225
+ L.terminals.push(terminal(c, p, hole > 0 ? BB.padHole : STYLE.contactColor, ids));
226
+ }
227
+ /** Fractions of a 0.1 in cell taken from the core header SVGs (7.199 / 7.178 units). */
228
+ const MALE = { chamfer: 1.563 / 7.199, a: 2.451 / 7.199, b: 3.009 / 7.199 };
229
+ const FEMALE = { o: 1.18 / 7.178, h: 2.202 / 7.178 };
230
+ /** Inner square corners [lo, hi] on both axes for a cell of side s at x0/y0 and inset f. */
231
+ function inset(x0, y0, s, f) {
232
+ return { x: x0 + f * s, X: x0 + (1 - f) * s, y: y0 + f * s, Y: y0 + (1 - f) * s };
233
+ }
234
+ /** Four trapezoids framing the inner square `i` inside the outer square `o`. */
235
+ function bevels(o, i, colors) {
236
+ return [
237
+ el("polygon", {
238
+ fill: colors.top,
239
+ points: pts([
240
+ [o.x, o.y],
241
+ [i.x, i.y],
242
+ [i.X, i.y],
243
+ [o.X, o.y],
244
+ ]),
245
+ }),
246
+ el("polygon", {
247
+ fill: colors.right,
248
+ points: pts([
249
+ [o.X, o.y],
250
+ [i.X, i.y],
251
+ [i.X, i.Y],
252
+ [o.X, o.Y],
253
+ ]),
254
+ }),
255
+ el("polygon", {
256
+ fill: colors.bottom,
257
+ points: pts([
258
+ [o.X, o.Y],
259
+ [i.X, i.Y],
260
+ [i.x, i.Y],
261
+ [o.x, o.Y],
262
+ ]),
263
+ }),
264
+ el("polygon", {
265
+ fill: colors.left,
266
+ points: pts([
267
+ [o.x, o.Y],
268
+ [i.x, i.Y],
269
+ [i.x, i.y],
270
+ [o.x, o.y],
271
+ ]),
272
+ }),
273
+ ];
274
+ }
275
+ function drawMaleCell(c, p, s, L, ids) {
276
+ const x0 = p.x - s / 2;
277
+ const y0 = p.y - s / 2;
278
+ const k = MALE.chamfer * s;
279
+ L.bodies.push(el("polygon", {
280
+ fill: STYLE.male.body,
281
+ points: pts([
282
+ [x0 + k, y0],
283
+ [x0, y0 + k],
284
+ [x0, y0 + s - k],
285
+ [x0 + k, y0 + s],
286
+ [x0 + s - k, y0 + s],
287
+ [x0 + s, y0 + s - k],
288
+ [x0 + s, y0 + k],
289
+ [x0 + s - k, y0],
290
+ ]),
291
+ }));
292
+ const outer = inset(x0, y0, s, MALE.a);
293
+ const inner = inset(x0, y0, s, MALE.b);
294
+ L.pins.push(el("rect", {
295
+ id: ids ? c.svgId : undefined,
296
+ x: outer.x,
297
+ y: outer.y,
298
+ width: outer.X - outer.x,
299
+ height: outer.Y - outer.y,
300
+ fill: STYLE.male.pinSquare,
301
+ }), el("rect", {
302
+ x: inner.x,
303
+ y: inner.y,
304
+ width: inner.X - inner.x,
305
+ height: inner.Y - inner.y,
306
+ fill: STYLE.male.center,
307
+ }), ...bevels(outer, inner, {
308
+ top: STYLE.male.bevelTop,
309
+ right: STYLE.male.bevelRight,
310
+ bottom: STYLE.male.bevelBottom,
311
+ left: STYLE.male.bevelLeft,
312
+ }));
313
+ L.terminals.push(terminal(c, p, STYLE.male.center, ids));
314
+ }
315
+ function drawFemaleCell(c, p, s, L, ids) {
316
+ const x0 = p.x - s / 2;
317
+ const y0 = p.y - s / 2;
318
+ const outer = inset(x0, y0, s, FEMALE.o);
319
+ const hole = inset(x0, y0, s, FEMALE.h);
320
+ L.bodies.push(el("rect", { x: x0, y: y0, width: s, height: s, fill: STYLE.female.body }), ...bevels(outer, hole, {
321
+ top: STYLE.female.bevelTop,
322
+ right: STYLE.female.bevelRight,
323
+ bottom: STYLE.female.bevelBottom,
324
+ left: STYLE.female.bevelLeft,
325
+ }));
326
+ L.pins.push(el("rect", {
327
+ id: ids ? c.svgId : undefined,
328
+ x: hole.x,
329
+ y: hole.y,
330
+ width: hole.X - hole.x,
331
+ height: hole.Y - hole.y,
332
+ fill: STYLE.female.hole,
333
+ }));
334
+ L.terminals.push(terminal(c, p, STYLE.female.hole, ids));
335
+ }
336
+ function drawCastellatedCell(c, p, L, ids) {
337
+ const w = mmToMil(c.pad.wMm);
338
+ const h = mmToMil(c.pad.hMm);
339
+ L.pins.push(el("rect", {
340
+ id: ids ? c.svgId : undefined,
341
+ x: p.x - w / 2,
342
+ y: p.y - h / 2,
343
+ width: w,
344
+ height: h,
345
+ fill: STYLE.contactColor,
346
+ stroke: BB.padStroke,
347
+ "stroke-width": BB.padStrokeMil,
348
+ }), el("rect", {
349
+ x: p.x - w * 0.2,
350
+ y: p.y - h * 0.2,
351
+ width: w * 0.4,
352
+ height: h * 0.4,
353
+ fill: BB.padHole,
354
+ }));
355
+ L.terminals.push(terminal(c, p, BB.padHole, ids));
356
+ }
357
+ /**
358
+ * Font size for one header's labels. Horizontal rows put labels side by side one pitch
359
+ * apart, so the size shrinks (for the whole header, never below BB.minHeaderLabelMil)
360
+ * until the longest label fits in 90% of the pitch; vertical columns keep the default.
361
+ */
362
+ export function headerLabelSize(group, orientation, pitchMil) {
363
+ const size = STYLE.labelFontSizeMil * BB.headerLabelScale;
364
+ if (orientation !== "horizontal")
365
+ return size;
366
+ const longest = Math.max(...group.map((c) => c.label.length));
367
+ const fit = (0.9 * pitchMil) / (longest * BB.charWidthEm);
368
+ return Math.max(BB.minHeaderLabelMil, Math.min(size, Math.floor(fit)));
369
+ }
370
+ /**
371
+ * Header pin labels sit on the inward side of the header (towards the board centre):
372
+ * a horizontal row in the top half is labelled below, in the bottom half above; a
373
+ * vertical column in the left half is labelled to its right, in the right half to its
374
+ * left. Multi-row headers label only the innermost row. No labels below 2 mm pitch.
375
+ */
376
+ function drawHeaderLabels(part, group, L) {
377
+ const ref = group[0].header;
378
+ if (ref.pitchMm < BB.minLabelPitchMm)
379
+ return;
380
+ const o = part.spec.outline;
381
+ const xs = group.map((c) => c.xMm);
382
+ const ys = group.map((c) => c.yMm);
383
+ const cx = (Math.min(...xs) + Math.max(...xs)) / 2;
384
+ const cy = (Math.min(...ys) + Math.max(...ys)) / 2;
385
+ const lastRow = Math.max(...group.map((c) => c.header.row));
386
+ const size = headerLabelSize(group, ref.orientation, mmToMil(ref.pitchMm));
387
+ for (const c of group) {
388
+ if (c.label === "")
389
+ continue;
390
+ const hr = c.header;
391
+ const halfMm = hr.kind === "castellated"
392
+ ? ref.orientation === "horizontal"
393
+ ? c.pad.hMm / 2
394
+ : c.pad.wMm / 2
395
+ : hr.pitchMm / 2;
396
+ const p = cv(part, c.xMm, c.yMm);
397
+ const off = mmToMil(halfMm + BB.labelGapMm);
398
+ let a;
399
+ if (ref.orientation === "horizontal") {
400
+ const top = cy < o.heightMm / 2;
401
+ if (hr.row !== (top ? lastRow : 0))
402
+ continue;
403
+ a = { x: p.x, y: top ? p.y + off + size * 0.75 : p.y - off, "text-anchor": "middle" };
404
+ }
405
+ else {
406
+ const leftSide = cx < o.widthMm / 2;
407
+ if (hr.row !== (leftSide ? lastRow : 0))
408
+ continue;
409
+ a = {
410
+ x: leftSide ? p.x + off : p.x - off,
411
+ y: p.y + centreBaseline(size),
412
+ "text-anchor": leftSide ? "start" : "end",
413
+ };
414
+ }
415
+ L.labels.push(text(c.label, { ...a, "font-family": FONT_SANS, "font-size": size, fill: labelColor(c) }));
416
+ }
417
+ }
418
+ function drawLead(part, c, L, ids) {
419
+ const lead = c.lead;
420
+ const from = cv(part, lead.fromXMm, lead.fromYMm);
421
+ const to = cv(part, c.xMm, c.yMm);
422
+ const gauge = mmToMil(lead.gaugeMm);
423
+ L.leads.push(el("line", {
424
+ id: ids ? c.legId : undefined,
425
+ x1: from.x,
426
+ y1: from.y,
427
+ x2: to.x,
428
+ y2: to.y,
429
+ stroke: lead.color,
430
+ "stroke-width": gauge,
431
+ "stroke-linecap": "round",
432
+ }));
433
+ L.pins.push(el("circle", {
434
+ id: ids ? c.svgId : undefined,
435
+ cx: from.x,
436
+ cy: from.y,
437
+ r: gauge / 2,
438
+ fill: STYLE.contactColor,
439
+ }));
440
+ }
441
+ /**
442
+ * The breadboard artwork as a list of elements, without the root svg or layer group.
443
+ * Shared by the breadboard view (ids on) and the icon view (ids off) so the icon is
444
+ * literally the same drawing, scaled.
445
+ */
446
+ export function renderBreadboardContent(part, ctx, opts) {
447
+ const L = {
448
+ board: [],
449
+ photo: [],
450
+ silk: [],
451
+ bodies: [],
452
+ leads: [],
453
+ pins: [],
454
+ labels: [],
455
+ terminals: [],
456
+ };
457
+ drawBoard(part, L.board);
458
+ drawPhoto(part, ctx, L.photo);
459
+ for (const item of part.spec.artwork.silkscreen)
460
+ drawSilk(part, item, L.silk);
461
+ for (const item of part.spec.artwork.components)
462
+ drawSilk(part, item, L.silk);
463
+ const headerGroups = new Map();
464
+ for (const c of part.connectors) {
465
+ if (c.source === "pin") {
466
+ drawPin(part, c, L, opts.ids);
467
+ }
468
+ else if (c.source === "lead" && c.lead) {
469
+ drawLead(part, c, L, opts.ids);
470
+ }
471
+ else if (c.header) {
472
+ const p = cv(part, c.xMm, c.yMm);
473
+ const s = mmToMil(c.header.pitchMm);
474
+ if (c.header.kind === "male")
475
+ drawMaleCell(c, p, s, L, opts.ids);
476
+ else if (c.header.kind === "female")
477
+ drawFemaleCell(c, p, s, L, opts.ids);
478
+ else
479
+ drawCastellatedCell(c, p, L, opts.ids);
480
+ const g = headerGroups.get(c.header.key);
481
+ if (g)
482
+ g.push(c);
483
+ else
484
+ headerGroups.set(c.header.key, [c]);
485
+ }
486
+ }
487
+ for (const group of headerGroups.values())
488
+ drawHeaderLabels(part, group, L);
489
+ return [
490
+ ...L.board,
491
+ ...L.photo,
492
+ ...L.silk,
493
+ ...L.bodies,
494
+ ...L.leads,
495
+ ...L.pins,
496
+ ...L.labels,
497
+ ...L.terminals,
498
+ ];
499
+ }
500
+ /** Root namespace attributes: xlink only when a photo is embedded. */
501
+ export function extraNamespaces(ctx) {
502
+ return ctx.photo ? { "xmlns:xlink": XLINK_NS } : {};
503
+ }
504
+ /** Join elements one per line inside a group, indented two spaces. */
505
+ export function group(id, children, extra = {}) {
506
+ const inner = children.map((c) => ` ${c}\n`).join("");
507
+ return el("g", { id, ...extra }, inner ? `\n${inner}` : "");
508
+ }
509
+ export function renderBreadboard(part, ctx) {
510
+ const body = renderBreadboardContent(part, ctx, { ids: true });
511
+ return svgRoot(part.frame.widthMm, part.frame.heightMm, [group("breadboard", body)], extraNamespaces(ctx));
512
+ }
513
+ //# sourceMappingURL=breadboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadboard.js","sourceRoot":"","sources":["../../../src/core/compile/breadboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ResolvedPart } from "../resolve.js";
2
+ import { type RenderContext } from "./types.js";
3
+ export declare const FRITZING_VERSION = "1.0.7";
4
+ export declare const PROJECT_URL = "https://github.com/pmaxhogan/fritzkit";
5
+ /**
6
+ * The fzp <description> text: the spec description, the source URLs, then the
7
+ * generator and licence notice. Plain text (escaped by the writer), LF newlines.
8
+ */
9
+ export declare function fzpDescription(part: ResolvedPart, ctx: RenderContext): string;
10
+ /** Ordered [name, value] pairs for <properties>: family, variant, then spec.properties by key. */
11
+ export declare function fzpProperties(part: ResolvedPart, ctx: RenderContext): [string, string][];
12
+ export declare function buildFzp(part: ResolvedPart, ctx: RenderContext): string;