Add persisted per-view port anchors and connection-aware border placement

This commit is contained in:
2026-09-06 01:20:28 +03:00
parent 93fd32c684
commit 35133de650
13 changed files with 1435 additions and 149 deletions
+11 -2
View File
@@ -66,7 +66,14 @@ impl ParseLimits {
project
.diagrams
.values()
.map(|d| d.nodes.len().saturating_add(d.routes.len()))
.map(|d| {
d.nodes.len().saturating_add(d.routes.len()).saturating_add(
d.nodes
.values()
.map(|n| n.port_anchors.len())
.sum::<usize>(),
)
})
.sum::<usize>(),
)
.saturating_add(project.artifact_links.len())
@@ -349,6 +356,7 @@ fn reference_field(key: &str) -> bool {
| "sa"
| "diagram"
| "edge"
| "port"
)
}
fn enum_field(key: &str) -> bool {
@@ -368,6 +376,7 @@ fn enum_field(key: &str) -> bool {
| "viewpoint"
| "message_kind"
| "transition_kind"
| "side"
)
}
@@ -1663,7 +1672,7 @@ pub(crate) fn resolve_declarations(
if !fields.contains_key("element") {
return Err(conversion_error("Missing required field 'element'.".into()));
}
let defaults = serde_json::json!({"element":null,"position":{"x":0.0,"y":0.0},"size":{"width":224.0,"height":94.0},"collapsed":false});
let defaults = serde_json::json!({"element":null,"position":{"x":0.0,"y":0.0},"size":{"width":224.0,"height":94.0},"collapsed":false,"port_anchors":[]});
let mut record = merge_fields(defaults.as_object().unwrap().clone(), fields)
.map_err(&conversion_error)?;
header(&mut record, d, false);