Feat/pentagon ports #32

Open
dstadelm wants to merge 6 commits from dstadelm/circuiteria:feat/pentagon-ports into main
pull from: dstadelm/circuiteria:feat/pentagon-ports
6 Commits
Author SHA1 Message Date
David Stadelmann d9abaf4a53 feat: add pentagon-shaped ports
Add an optional pentagon shape for block and group ports, configured via
the element-level `port-shape`, `port-kind` and `port-size` parameters.
Individual ports can override them with `shape`, `kind`, `size`,
`stroke` and `fill`. Clock ports with a pentagon shape drop the clock
triangle and default to a gray fill.

Wires attach to the outer end of the pentagon by default. With the new
`shell` parameter on `element.elmt` they attach to the inner tip
instead.

Each port is exposed as a CeTZ group with a `default` anchor plus the
cardinal sub-anchors `.east`, `.west`, `.north` and `.south` on the
pentagon's bounding box, so wires can attach to any face. For
non-pentagon ports the sub-anchors collapse to the default attach point,
and the bare `<elmt-id>-port-<port-id>` anchor resolves as before.

Add the `port-shape` and `port-shape-attach` examples and the
`gallery/test_port_shape` gallery entry.
2026-10-22 00:30:10 +02:00
David Stadelmann c14e2ceab9 feat: add port-name-padding parameter
Replaces the hard-coded 2pt padding used when placing port name labels.
Configurable per element via port-name-padding on elmt (forwarded by
block and group), defaulting to 2pt to preserve existing layout.
2026-10-22 00:29:52 +02:00
David Stadelmann 13e3fee913 feat: add ports on group elements
Groups now accept ports/ports-margins like blocks. Port name labels
default to outside the group border (outside-port-names: true) so they
don't overlap child elements; set to false for block-style inside
labels.
2026-10-22 00:28:18 +02:00
David Stadelmann df4c956a0b chore: update minimum compiler version to 0.15.0 2026-10-21 23:39:59 +02:00
David Stadelmann ac087087c5 deps: update tidy to 0.4.3 2026-10-21 23:39:59 +02:00
David Stadelmann 77eb4fa946 deps: update CeTZ 0.3.4 to 0.5.2 with coordinate fixes
CeTZ 0.5.2 requires 3D coordinate vectors (x, y, z) for raw
coordinate tuples passed to coordinate.resolve(). Update internal
wire computations (dodge, guided) to use 3-element tuples, fix
.last() to .at(1) for y-component access on resolved coordinates,
and add a normalize-coord utility that automatically pads user-
provided 2D points (x, y) to (x, y, 0) so users do not need to
specify the z dimension.
2026-10-21 23:39:59 +02:00