fritzkit 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +12 -0
- package/.claude-plugin/plugin.json +13 -0
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -0
- package/README.md +429 -2
- package/dist/cli/commands/doctor.d.ts +4 -0
- package/dist/cli/commands/doctor.js +7 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/export.d.ts +17 -0
- package/dist/cli/commands/export.js +81 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/kicad.d.ts +10 -0
- package/dist/cli/commands/kicad.js +22 -0
- package/dist/cli/commands/kicad.js.map +1 -0
- package/dist/cli/commands/parts.d.ts +22 -0
- package/dist/cli/commands/parts.js +46 -0
- package/dist/cli/commands/parts.js.map +1 -0
- package/dist/cli/commands/prune.d.ts +14 -0
- package/dist/cli/commands/prune.js +67 -0
- package/dist/cli/commands/prune.js.map +1 -0
- package/dist/cli/commands/render.d.ts +24 -0
- package/dist/cli/commands/render.js +62 -0
- package/dist/cli/commands/render.js.map +1 -0
- package/dist/cli/commands/schema.d.ts +10 -0
- package/dist/cli/commands/schema.js +35 -0
- package/dist/cli/commands/schema.js.map +1 -0
- package/dist/cli/commands/ui.d.ts +14 -0
- package/dist/cli/commands/ui.js +67 -0
- package/dist/cli/commands/ui.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +24 -0
- package/dist/cli/commands/validate.js +91 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/context.d.ts +81 -0
- package/dist/cli/context.js +139 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +8 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/program.d.ts +21 -0
- package/dist/cli/program.js +158 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/raster.d.ts +4 -0
- package/dist/cli/raster.js +9 -0
- package/dist/cli/raster.js.map +1 -0
- package/dist/core/compile/breadboard-util.d.ts +12 -0
- package/dist/core/compile/breadboard-util.js +107 -0
- package/dist/core/compile/breadboard-util.js.map +1 -0
- package/dist/core/compile/breadboard.d.ts +60 -0
- package/dist/core/compile/breadboard.js +513 -0
- package/dist/core/compile/breadboard.js.map +1 -0
- package/dist/core/compile/fzp.d.ts +12 -0
- package/dist/core/compile/fzp.js +183 -0
- package/dist/core/compile/fzp.js.map +1 -0
- package/dist/core/compile/icon.d.ts +17 -0
- package/dist/core/compile/icon.js +27 -0
- package/dist/core/compile/icon.js.map +1 -0
- package/dist/core/compile/index.d.ts +4 -0
- package/dist/core/compile/index.js +62 -0
- package/dist/core/compile/index.js.map +1 -0
- package/dist/core/compile/pcb.d.ts +39 -0
- package/dist/core/compile/pcb.js +164 -0
- package/dist/core/compile/pcb.js.map +1 -0
- package/dist/core/compile/schematic.d.ts +69 -0
- package/dist/core/compile/schematic.js +240 -0
- package/dist/core/compile/schematic.js.map +1 -0
- package/dist/core/compile/style.d.ts +52 -0
- package/dist/core/compile/style.js +72 -0
- package/dist/core/compile/style.js.map +1 -0
- package/dist/core/compile/types.d.ts +50 -0
- package/dist/core/compile/types.js +15 -0
- package/dist/core/compile/types.js.map +1 -0
- package/dist/core/export/bin.d.ts +61 -0
- package/dist/core/export/bin.js +221 -0
- package/dist/core/export/bin.js.map +1 -0
- package/dist/core/export/fzpz.d.ts +37 -0
- package/dist/core/export/fzpz.js +121 -0
- package/dist/core/export/fzpz.js.map +1 -0
- package/dist/core/export/index.d.ts +5 -0
- package/dist/core/export/index.js +6 -0
- package/dist/core/export/index.js.map +1 -0
- package/dist/core/export/install.d.ts +77 -0
- package/dist/core/export/install.js +183 -0
- package/dist/core/export/install.js.map +1 -0
- package/dist/core/export/prune.d.ts +72 -0
- package/dist/core/export/prune.js +165 -0
- package/dist/core/export/prune.js.map +1 -0
- package/dist/core/fritzing.d.ts +22 -0
- package/dist/core/fritzing.js +77 -0
- package/dist/core/fritzing.js.map +1 -0
- package/dist/core/identity.d.ts +29 -0
- package/dist/core/identity.js +70 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/image/bbox.d.ts +27 -0
- package/dist/core/image/bbox.js +24 -0
- package/dist/core/image/bbox.js.map +1 -0
- package/dist/core/image/index.d.ts +8 -0
- package/dist/core/image/index.js +9 -0
- package/dist/core/image/index.js.map +1 -0
- package/dist/core/image/key.d.ts +72 -0
- package/dist/core/image/key.js +317 -0
- package/dist/core/image/key.js.map +1 -0
- package/dist/core/image/prepare.d.ts +31 -0
- package/dist/core/image/prepare.js +98 -0
- package/dist/core/image/prepare.js.map +1 -0
- package/dist/core/image/remover.d.ts +17 -0
- package/dist/core/image/remover.js +51 -0
- package/dist/core/image/remover.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.js +17 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/kicad/footprint.d.ts +104 -0
- package/dist/core/kicad/footprint.js +317 -0
- package/dist/core/kicad/footprint.js.map +1 -0
- package/dist/core/kicad/index.d.ts +25 -0
- package/dist/core/kicad/index.js +197 -0
- package/dist/core/kicad/index.js.map +1 -0
- package/dist/core/kicad/sexpr.d.ts +35 -0
- package/dist/core/kicad/sexpr.js +163 -0
- package/dist/core/kicad/sexpr.js.map +1 -0
- package/dist/core/resolve.d.ts +113 -0
- package/dist/core/resolve.js +301 -0
- package/dist/core/resolve.js.map +1 -0
- package/dist/core/schema/part.d.ts +995 -0
- package/dist/core/schema/part.js +278 -0
- package/dist/core/schema/part.js.map +1 -0
- package/dist/core/schema/part.schema.json +1122 -0
- package/dist/core/svg.d.ts +20 -0
- package/dist/core/svg.js +56 -0
- package/dist/core/svg.js.map +1 -0
- package/dist/core/units.d.ts +28 -0
- package/dist/core/units.js +42 -0
- package/dist/core/units.js.map +1 -0
- package/dist/core/validate/checker.d.ts +46 -0
- package/dist/core/validate/checker.js +142 -0
- package/dist/core/validate/checker.js.map +1 -0
- package/dist/core/validate/doctor.d.ts +25 -0
- package/dist/core/validate/doctor.js +156 -0
- package/dist/core/validate/doctor.js.map +1 -0
- package/dist/core/validate/explain.d.ts +10 -0
- package/dist/core/validate/explain.js +135 -0
- package/dist/core/validate/explain.js.map +1 -0
- package/dist/core/validate/index.d.ts +21 -0
- package/dist/core/validate/index.js +96 -0
- package/dist/core/validate/index.js.map +1 -0
- package/dist/core/validate/structural.d.ts +74 -0
- package/dist/core/validate/structural.js +664 -0
- package/dist/core/validate/structural.js.map +1 -0
- package/dist/core/workspace.d.ts +69 -0
- package/dist/core/workspace.js +213 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/mcp/jsonpatch.d.ts +30 -0
- package/dist/mcp/jsonpatch.js +145 -0
- package/dist/mcp/jsonpatch.js.map +1 -0
- package/dist/mcp/main.d.ts +2 -0
- package/dist/mcp/main.js +5 -0
- package/dist/mcp/main.js.map +1 -0
- package/dist/mcp/server.d.ts +28 -0
- package/dist/mcp/server.js +310 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/server/api.d.ts +72 -0
- package/dist/server/api.js +507 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/events.d.ts +28 -0
- package/dist/server/events.js +134 -0
- package/dist/server/events.js.map +1 -0
- package/dist/server/http.d.ts +36 -0
- package/dist/server/http.js +127 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/index.d.ts +65 -0
- package/dist/server/index.js +193 -0
- package/dist/server/index.js.map +1 -0
- package/dist/ui/assets/index-DLU8opyI.js +63 -0
- package/dist/ui/assets/index-GhUA-T3b.css +1 -0
- package/dist/ui/index.html +14 -0
- package/package.json +89 -4
- package/skills/fritzkit/SKILL.md +690 -0
- package/skills/fritzkit/reference/examples.md +275 -0
- package/skills/fritzkit/reference/part-json.md +333 -0
- package/skills/fritzkit/scripts/measure.py +197 -0
- package/tools/fzp-checker/.python-version +1 -0
- package/tools/fzp-checker/README.md +45 -0
- package/tools/fzp-checker/check_fzp.py +48 -0
- package/tools/fzp-checker/pyproject.toml +26 -0
- package/tools/fzp-checker/uv.lock +266 -0
- package/tools/fzp-checker/vendor/LICENSE.txt +8 -0
- package/tools/fzp-checker/vendor/UPSTREAM.md +25 -0
- package/tools/fzp-checker/vendor/fzp_checker.py +14 -0
- package/tools/fzp-checker/vendor/scripts/checks/__init__.py +26 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/__init__.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/check_missing_leg_ids.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/connector_numbering.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/fzp_checker_runner.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/fzp_checkers.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/fzp_svg_checkers.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/fzp_utils.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/svg_checkers.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/__pycache__/svg_utils.cpython-313.pyc +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/check_missing_leg_ids.py +44 -0
- package/tools/fzp-checker/vendor/scripts/checks/checkascii.py +27 -0
- package/tools/fzp-checker/vendor/scripts/checks/checkcase.py +156 -0
- package/tools/fzp-checker/vendor/scripts/checks/checkcopies.py +104 -0
- package/tools/fzp-checker/vendor/scripts/checks/connector_numbering.py +79 -0
- package/tools/fzp-checker/vendor/scripts/checks/connectors_misnumbered.py +228 -0
- package/tools/fzp-checker/vendor/scripts/checks/explain_errors.md +95 -0
- package/tools/fzp-checker/vendor/scripts/checks/fzp_checker_runner.py +717 -0
- package/tools/fzp-checker/vendor/scripts/checks/fzp_checkers.py +1069 -0
- package/tools/fzp-checker/vendor/scripts/checks/fzp_svg_checkers.py +62 -0
- package/tools/fzp-checker/vendor/scripts/checks/fzp_utils.py +222 -0
- package/tools/fzp-checker/vendor/scripts/checks/inspector_fc51.png +0 -0
- package/tools/fzp-checker/vendor/scripts/checks/invisibleconnectors.py +118 -0
- package/tools/fzp-checker/vendor/scripts/checks/nolayeridcheck.txt +758 -0
- package/tools/fzp-checker/vendor/scripts/checks/requirements.txt +3 -0
- package/tools/fzp-checker/vendor/scripts/checks/svg_checkers.py +953 -0
- package/tools/fzp-checker/vendor/scripts/checks/svg_utils.py +96 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_checkers.py +839 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/author_missing.fzp.test +3 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/author_present.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/buses_missing_id.fzp.test +8 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/buses_missing_node_members.fzp.test +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/buses_present_valid.fzp.test +8 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_layers_missing_attributes.fzp.test +16 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_layers_present_valid.fzp.test +14 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_numbering_invalid.fzp.test +70 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_numbering_valid.fzp.test +70 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/connector_refs_valid.fzp.test +53 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_mixed.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_silkscreen_nested.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_style_attr.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_white_stroke.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_invalid_wrong_color.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_inherited.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_legacy.fzp.test +12 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_nested_copper.fzp.test +12 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_none.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_standard.fzp.test +12 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/copper_color_valid_uppercase.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/css_connector.fzp.test +100 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/description_missing.fzp.test +3 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/description_present.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/duplicate_ids.fzp.test +27 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/family_property_missing.fzp.test +6 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/family_property_present_valid.fzp.test +6 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/font_size.fzp.test +46 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/fritzing_version_invalid_format.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/fritzing_version_missing.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/fritzing_version_present_valid.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/gorn_absent.fzp.test +15 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/gorn_present.fzp.test +15 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/hybrid_connectors.fzp.test +232 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/invalid_xml.fzp.test +12 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/layer_ids_match.fzp.test +29 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/layer_ids_mismatch.fzp.test +30 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/layer_nesting_invalid.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/layer_nesting_valid.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/matrix_transform.fzp.test +8 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/missing_connector_refs.fzp.test +63 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/missing_leg_ids.fzp.test +34 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_missing.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_non_alnum.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_present.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_special_chars_absent.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_special_chars_present.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/module_id_too_short.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/no_layer_invalid.fzp.test +19 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/no_layer_namedview.fzp.test +19 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/no_layer_valid.fzp.test +19 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/pcb_only.fzp.test +48 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/property_fields_missing_name.fzp.test +6 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/property_fields_missing_value.fzp.test +6 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/property_fields_present.fzp.test +6 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/required_tags_missing.fzp.test +3 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/required_tags_present.fzp.test +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/stroke_test.fzp.test +60 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/template_svgs.fzp.test +35 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/title_missing.fzp.test +3 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/title_present.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/unique_ids.fzp.test +27 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/unique_property_names_duplicates.fzp.test +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/unique_property_names_unique.fzp.test +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/valid_xml.fzp.test +249 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/version_invalid_format.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/version_missing.fzp.test +3 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/version_present_valid.fzp.test +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/views_missing.fzp.test +3 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/core/views_present.fzp.test +8 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/connector_refs_valid_breadboard.svg +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/duplicate_ids_breadboard.svg +13 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/gorn_absent_breadboard.svg +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/gorn_present_breadboard.svg +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/hybrid_connectors_breadboard.svg +102 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/layer_nesting_invalid.svg +13 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/layer_nesting_valid.svg +13 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/matrix_transform.svg +11 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/missing_connector_refs_breadboard.svg +8 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/missing_leg_ids_breadboard.svg +9 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/test_layer_ids_match_breadboard.svg +9 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/test_layer_ids_mismatch_breadboard.svg +9 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/breadboard/unique_ids_breadboard.svg +13 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/hybrid_connectors_icon.svg +78 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/no_layer_invalid.svg +4 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/no_layer_namedview.svg +9 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/no_layer_valid.svg +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/icon/plain_pcb.svg +10 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/connector_refs_valid_pcb.svg +10 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_mixed.svg +8 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_silkscreen_nested.svg +10 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_style_attr.svg +6 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_white_stroke.svg +6 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_invalid_wrong_color.svg +6 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_inherited.svg +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_legacy.svg +10 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_nested_copper.svg +9 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_none.svg +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_standard.svg +10 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/copper_color_valid_uppercase.svg +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/css_connector.svg +25 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/font_size.svg +54 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/hybrid_connectors_pcb.svg +35 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/missing_connector_refs_pcb.svg +14 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/pcb-arduino-shield.svg +25 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/stroke_test.svg +12 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/test_layer_ids_match_pcb.svg +12 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/pcb/test_layer_ids_mismatch_pcb.svg +12 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/connector_refs_valid_schematic.svg +7 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/hybrid_connectors_schematic.svg +59 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/missing_connector_refs_schematic.svg +8 -0
- package/tools/fzp-checker/vendor/scripts/checks/test_data/svg/core/schematic/test_layer_ids_match_schematic.svg +6 -0
- 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;
|