M3: component properties keep their order on rename; Make slot asks for the name (#1536, #1537) (#1565)

Properties were listed by name, so a rename moved one. Components now keep prop_order (the names as they were made; a rename keeps the place) and every listing follows it. Make slot opens a name field under the frame's Slot row; Enter makes the slot, Escape cancels, a taken name keeps the field open.
This commit is contained in:
BFlat
2026-10-30 04:49:00 +07:00
committed by GitHub
parent 3c1718bf86
commit 7d76b0c673
56 changed files with 589 additions and 135 deletions
+9 -2
View File
@@ -82,8 +82,15 @@ pub fn large_document(layers: usize) -> DocResult<(Document, NodeId)> {
let page = doc.first_page().ok_or(figcraft_doc::DocError::Invalid("new document has no page".into()))?;
let layers = layers.clamp(10, 2_000_000);
// The shared button component (3 layers), above the screens.
let button =
doc.create(page, NodeKind::Component { description: String::new(), props: Default::default() }, "Button", 0.0, -120.0, 96.0, 32.0)?;
let button = doc.create(
page,
NodeKind::Component { description: String::new(), props: Default::default(), prop_order: Vec::new() },
"Button",
0.0,
-120.0,
96.0,
32.0,
)?;
let bg = doc.create(button, NodeKind::Rectangle, "Background", 0.0, 0.0, 96.0, 32.0)?;
fill(&mut doc, bg, Color::from_rgb8_const(0x0D, 0x99, 0xFF));
if let Some(n) = doc.node_mut(bg) {
+1 -1
View File
@@ -118,7 +118,7 @@ fn var_id(name: &str) -> String {
}
fn component() -> NodeKind {
NodeKind::Component { description: String::new(), props: BTreeMap::new() }
NodeKind::Component { description: String::new(), props: BTreeMap::new(), prop_order: Vec::new() }
}
fn text(chars: &str) -> NodeKind {