diff --git a/dist/datamodel/node/BaseNode.d.ts b/dist/datamodel/node/BaseNode.d.ts
index 89912761..eb4f97b4 100644
--- a/dist/datamodel/node/BaseNode.d.ts
+++ b/dist/datamodel/node/BaseNode.d.ts
@@ -11,6 +11,7 @@ export interface PropClass {
unformat?: (text: string) => string;
sourceKeys?: string[];
format: (value: unknown) => string;
+ editableFor?: (node: BaseNode) => boolean;
}
export interface PropInfo {
key: string;
diff --git a/dist/datamodel/node/BaseNode.d.ts.map b/dist/datamodel/node/BaseNode.d.ts.map
index 34817b28..d1122911 100644
--- a/dist/datamodel/node/BaseNode.d.ts.map
+++ b/dist/datamodel/node/BaseNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"BaseNode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/BaseNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"BaseNode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/BaseNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/BaseNode.js b/dist/datamodel/node/BaseNode.js
index e380457c..76b4b108 100644
--- a/dist/datamodel/node/BaseNode.js
+++ b/dist/datamodel/node/BaseNode.js
@@ -428,6 +428,9 @@ export default class BaseNode {
if (key === 'Description') {
editable = editable && this.descriptionEditable;
}
+ if (editable && PropClassRef.editableFor) {
+ editable = PropClassRef.editableFor(this);
+ }
// Every other column of a node whose value is still an encoded stream, schema-projected
// ones included (Storage Class, Data Type…): they are all inside the stream. The Name
// was answered above, by nameEditable.
diff --git a/dist/datamodel/node/BaseNode.js.map b/dist/datamodel/node/BaseNode.js.map
index 073a9d59..c2dfbede 100644
--- a/dist/datamodel/node/BaseNode.js.map
+++ b/dist/datamodel/node/BaseNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"BaseNode.js","sourceRoot":"","sources":["../../../src/datamodel/node/BaseNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAqHlE,gFAAgF;AAChF,yEAAyE;AACzE,gFAAgF;AAChF,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAmCrH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAAiC;IAC/D,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAE,CAA0C,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/F,IAAK,CAAuC,CAAC,QAAQ,EAAE,CAAC;YACtD,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,QAAQ;IAa3B,YAAY,IAAY,EAAE,MAAuB;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACpE,CAAC;IAED,IAAI,IAAI;QACN,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,6EAA6E;IAC7E,UAAU;IACV,IAAI,SAAS;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,8FAA8F;IAC9F,0FAA0F;IAC1F,wEAAwE;IACxE,YAAY;QACV,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,0EAA0E;IAC1E,8EAA8E;IAC9E,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,gDAAgD;IAChD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gFAAgF;IAChF,kEAAkE;IAClE,IAAI,aAAa;QACf,OAAO,CAAC,CAAC,CACP,IAAI,CAAC,MAAM;YACX,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAClG,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,8EAA8E;IAC9E,iFAAiF;IACjF,iFAAiF;IACjF,kFAAkF;IAClF,qCAAqC;IACrC,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IACxE,CAAC;IAED,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,+EAA+E;IAC/E,iFAAiF;IACjF,0CAA0C;IAC1C,IAAI,mBAAmB;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mFAAmF;IACnF,sFAAsF;IACtF,kFAAkF;IAClF,uFAAuF;IACvF,gDAAgD;IAChD,IAAI,eAAe;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,YAAY;QACd,oFAAoF;QACpF,0EAA0E;QAC1E,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,0DAA0D;QAC1D,IAAI,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,iFAAiF;IACjF,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,0CAA0C;IAC1C,qBAAqB,CAAC,MAAgB,IAAS,CAAC;IAEhD,WAAW;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,KAAe,EAAE,KAAc;QACtC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,uFAAuF;QACvF,8EAA8E;QAC9E,qFAAqF;QACrF,yFAAyF;QACzF,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,KAAe;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,yEAAyE;YACzE,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,OAAiB;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,EAAE;IACF,wFAAwF;IACxF,sFAAsF;IACtF,uFAAuF;IACvF,6EAA6E;IAC7E,0CAA0C;IAC1C,EAAE;IACF,uFAAuF;IACvF,wFAAwF;IACxF,mBAAmB;IACnB,wBAAwB;QACtB,IAAI,IAAI,GAAa,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACA,IAAgD,CAAC,cAAc,GAAG,IAAI,CAAC;IAC1E,CAAC;IAED,gFAAgF;IAChF,gFAAgF;IAChF,4EAA4E;IAC5E,gFAAgF;IAChF,gFAAgF;IAChF,sCAAsC;IACtC,gBAAgB;QACd,IAAI,IAAI,GAAa,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,IAAsC,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,wFAAwF;QACxF,sFAAsF;QACtF,sDAAsD;QACtD,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,8EAA8E;IAC9E,EAAE;IACF,qFAAqF;IACrF,gFAAgF;IAChF,sFAAsF;IACtF,oFAAoF;IACpF,6EAA6E;IAC7E,kFAAkF;IAClF,oFAAoF;IACpF,mFAAmF;IACnF,uFAAuF;IACvF,uEAAuE;IACvE,EAAE;IACF,sFAAsF;IACtF,wFAAwF;IACxF,sFAAsF;IACtF,wFAAwF;IACxF,uFAAuF;IACvF,iFAAiF;IACjF,wFAAwF;IACxF,uFAAuF;IACvF,sFAAsF;IACtF,cAAc;IACd,EAAE;IACF,mFAAmF;IACnF,qFAAqF;IACrF,wBAAwB;IACxB,WAAW;QACT,IAAI,IAAI,GAAa,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAI,IAAsD,CAAC,cAAc,CAAC;QACvF,oFAAoF;QACpF,oFAAoF;QACpF,+EAA+E;QAC/E,8EAA8E;QAC9E,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,qFAAqF;QACrF,sFAAsF;QACtF,sFAAsF;QACtF,8CAA8C;QAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,kFAAkF;IAClF,yFAAyF;IACzF,uFAAuF;IACvF,gEAAgE;IAChE,EAAE;IACF,uFAAuF;IACvF,wFAAwF;IACxF,uFAAuF;IACvF,oFAAoF;IACpF,6EAA6E;IAC7E,aAAa,CAAC,QAAiB;QAC7B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACpD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,GAAa,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAI,IAA4D,CAAC,iBAAiB,CAAC;QAChG,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC;IACtD,CAAC;IAED,OAAO;QACL,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAe,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oFAAoF;IACpF,+CAA+C;IAC/C,EAAE;IACF,qFAAqF;IACrF,iFAAiF;IACjF,mFAAmF;IACnF,oFAAoF;IACpF,+EAA+E;IAC/E,EAAE;IACF,kFAAkF;IAClF,mFAAmF;IACnF,kFAAkF;IAClF,0EAA0E;IAC1E,qEAAqE;IACrE,4EAA4E;IAC5E,+DAA+D;IACvD,kBAAkB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAO,CAAC,QAAQ,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACtE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,WAAW;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC;IAClG,CAAC;IAED;;;;;OAKG;IACH,IAAI,UAAU;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9B,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAK,MAA+C,CAAC,WAAW,EAAE,CAAC;YAC5E,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;IAC1F,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,WAAyB;QACnC,iFAAiF;QACjF,oFAAoF;QACpF,oFAAoF;QACpF,mFAAmF;QACnF,SAAS;QACT,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YAC1B,OAAO,IAAI,IAAI,CAAC;gBACd,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;gBACjD,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACzE,CAAC;QACD,IACE,IAAI,CAAC,MAAM;YACX,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,EACjG,CAAC;YACD,yEAAyE;YACzE,sEAAsE;YACtE,EAAE;YACF,sEAAsE;YACtE,8DAA8D;YAC9D,qEAAqE;YACrE,2EAA2E;YAC3E,2EAA2E;YAC3E,2EAA2E;YAC3E,uEAAuE;YACvE,EAAE;YACF,wEAAwE;YACxE,4EAA4E;YAC5E,uEAAuE;YACvE,iCAAiC;YACjC,OAAO,cAAc,CACnB,WAAW,EAAE,EACb,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC3C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,aAAa;QACf,kFAAkF;QAClF,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qFAAqF;IACrF,kFAAkF;IAClF,qFAAqF;IACrF,uEAAuE;IACvE,mFAAmF;IACnF,qCAAqC;IACrC,EAAE;IACF,sFAAsF;IACtF,oFAAoF;IACpF,uFAAuF;IACvF,EAAE;IACF,8EAA8E;IAC9E,oFAAoF;IACpF,8BAA8B;IAC9B,IAAI,mBAAmB;QACrB,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,WAAW,CAAC,YAAuB;QACjC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;QAC7B,IAAI,YAAoB,CAAC;QACzB,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YAC3B,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,YAAY,CAAC,MAAM,CAAE,IAA2C,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,KAAK,OAAO,CAAC;QAC/C,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3C,CAAC;QACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC;QAC5C,CAAC;QACD,oFAAoF;QACpF,qFAAqF;QACrF,iBAAiB;QACjB,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC1B,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC;QAClD,CAAC;QACD,wFAAwF;QACxF,sFAAsF;QACtF,uCAAuC;QACvC,IAAI,GAAG,KAAK,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;QAED,OAAO;YACL,GAAG;YACH,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,KAAK,EAAG,IAA2C,CAAC,YAAY,CAAC,YAAY,IAAI,GAAG,CAAC;YACrF,YAAY;YACZ,QAAQ;YACR,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC/E,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,8EAA8E;IAC9E,mFAAmF;IACnF,uFAAuF;IACvF,kFAAkF;IAClF,KAAK,CAAC,IAAkB;QACtB,MAAM,QAAQ,GACZ,IAAI,CAAC,MAAM,IAAI,CAAE,IAAI,CAAC,MAA+C,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,GAAG,GAAY;YACnB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAG,IAAuC,CAAC,MAAM,IAAI,EAAE;SAC9D,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC;YAElC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5I,CAAC;iBAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,oEAAoE;gBACpE,yDAAyD;gBACzD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC7B,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBAClH,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;gBAChC,CAAC;gBACD,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3D,wEAAwE;gBACxE,uEAAuE;gBACvE,0EAA0E;gBAC1E,0EAA0E;gBAC1E,+DAA+D;gBAC/D,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACxG,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/I,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9B,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,CAAC,aAAa,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,WAAW,GAAI,IAA4C,CAAC,WAAW,IAAI,EAAE,CAAC;QACpF,CAAC;QACD,gFAAgF;QAChF,uEAAuE;QACvE,iFAAiF;QACjF,qEAAqE;QACrE,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAEpD,mFAAmF;QACnF,mFAAmF;QACnF,mFAAmF;QACnF,qFAAqF;QACrF,qFAAqF;QACrF,sEAAsE;QACtE,mFAAmF;QACnF,oFAAoF;QACpF,0EAA0E;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;QACtB,CAAC;QAED,sFAAsF;QACtF,+EAA+E;QAC/E,sFAAsF;QACtF,oFAAoF;QACpF,uFAAuF;QACvF,qFAAqF;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,gFAAgF;IAChF,8EAA8E;IAC9E,iCAAiC;IACjC,WAAW;QACT,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAc,EAAE,CAAC;QACjC,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,MAAM,GAAG,GAA4B,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;QAElE,+EAA+E;QAC/E,6EAA6E;QAC7E,yEAAyE;QACzE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,UAAU,GAAc,EAAE,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC5C,0EAA0E;gBAC1E,+EAA+E;gBAC/E,0CAA0C;gBAC1C,EAAE;gBACF,iFAAiF;gBACjF,kFAAkF;gBAClF,gFAAgF;gBAChF,kFAAkF;gBAClF,sDAAsD;gBACtD,EAAE;gBACF,kFAAkF;gBAClF,oFAAoF;gBACpF,qFAAqF;gBACrF,mFAAmF;gBACnF,mFAAmF;gBACnF,8DAA8D;gBAC9D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC;gBACrC,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC;gBAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3F,MAAM,SAAS,GACb,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ;oBACjF,CAAC,CAAC,QAAQ,CAAC,UAAU;oBACrB,CAAC,CAAC,SAAS,CAAC;gBAChB,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,IAAI,CAAC,GAAG;oBACd,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,QAAQ,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;oBACrD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,sCAAsC;oBAC3G,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI;oBAC9E,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI;oBACX,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;iBAClD,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACtD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;gBAClC,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;gBACxF,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,6EAA6E;YAC7E,8EAA8E;YAC9E,8EAA8E;YAC9E,gFAAgF;YAChF,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,OAAO;gBACzD,IAAI,EAAE,OAAO;gBACb,WAAW;gBACX,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC;QAED,4EAA4E;QAC5E,+EAA+E;QAC/E,4DAA4D;QAC5D,MAAM,QAAQ,GAAI,IAA0D,CAAC,MAAM,EAAE,WAAW,CAAC;QACjG,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAc,EAAE,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;gBACrC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,GAAG,CAAC,IAAI;oBACrB,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,sCAAsC;oBAChD,aAAa,EAAE,IAAI;oBACnB,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACtD,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YAC5B,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,OAAO;gBACpB,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;YACrC,OAAO,EAAE,CAAC,GAAG,CAAC;YACd,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
\ No newline at end of file
+{"version":3,"file":"BaseNode.js","sourceRoot":"","sources":["../../../src/datamodel/node/BaseNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/BreakpointNode.d.ts b/dist/datamodel/node/data/BreakpointNode.d.ts
index fc40b274..4d5affca 100644
--- a/dist/datamodel/node/data/BreakpointNode.d.ts
+++ b/dist/datamodel/node/data/BreakpointNode.d.ts
@@ -1,6 +1,7 @@
import SimulinkObjectNode from '../SimulinkObjectNode.js';
import type { PropClass } from '../BaseNode.js';
import type BaseNode from '../BaseNode.js';
+import type { SetPropertyResult } from '../DataNode.js';
export default class BreakpointNode extends SimulinkObjectNode {
Description: string;
constructor(name: string, parent: BaseNode | null, props: Record, serial: Record);
@@ -9,7 +10,8 @@ export default class BreakpointNode extends SimulinkObjectNode {
get displayValue(): string;
get valueEditable(): boolean;
getProperties(): PropClass[];
- _serializedOverrides(): Record;
+ get descriptionEditable(): boolean;
+ setProperty(propName: string, stringValue: string): true | SetPropertyResult;
static get defaultName(): string;
static createDefault(name: string, parent: BaseNode | null): BreakpointNode;
static parse(rawVal: Record, name: string, parent: BaseNode | null): BreakpointNode;
diff --git a/dist/datamodel/node/data/BreakpointNode.d.ts.map b/dist/datamodel/node/data/BreakpointNode.d.ts.map
index 450c8c42..dad49c9b 100644
--- a/dist/datamodel/node/data/BreakpointNode.d.ts.map
+++ b/dist/datamodel/node/data/BreakpointNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"BreakpointNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/BreakpointNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,kBAAkB;IAC1D,WAAW,EAAE,MAAM,CAAC;gBACR,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAmC;IACrD,IAAI,SAAS,IAAI,MAAM,CAAuB;IAE9C,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAE5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAAyB;IAQzD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,cAAc;IAC3E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,cAAc;CACvG"}
\ No newline at end of file
+{"version":3,"file":"BreakpointNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/BreakpointNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,kBAAkB;IAO1D,WAAW,EAAE,MAAM,CAAC;gBACR,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAmC;IACrD,IAAI,SAAS,IAAI,MAAM,CAAuB;IAE9C,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAG5B,IAAI,mBAAmB,IAAI,OAAO,CAAkB;IAGpD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAM5E,MAAM,KAAK,WAAW,IAAI,MAAM,CAAyB;IAQzD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,cAAc;IAC3E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,cAAc;CACvG"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/BreakpointNode.js b/dist/datamodel/node/data/BreakpointNode.js
index a8c8e29d..b852a4a6 100644
--- a/dist/datamodel/node/data/BreakpointNode.js
+++ b/dist/datamodel/node/data/BreakpointNode.js
@@ -2,7 +2,6 @@
import SimulinkObjectNode from '../SimulinkObjectNode.js';
import PropName from '../../prop/PropName.js';
import PropDataType from '../../prop/PropDataType.js';
-import PropDescription from '../../prop/PropDescription.js';
const CLASS_NAME = 'Simulink.Breakpoint';
export default class BreakpointNode extends SimulinkObjectNode {
constructor(name, parent, props, serial) { super(name, parent, serial); this.Description = props.Description || ''; }
@@ -11,9 +10,18 @@ export default class BreakpointNode extends SimulinkObjectNode {
// A Breakpoint has no scalar "value" — the Value column is empty and not editable.
get displayValue() { return ''; }
get valueEditable() { return false; }
- getProperties() { return [PropName, PropDataType, PropDescription]; }
+ getProperties() { return [PropName, PropDataType]; }
// PI layout: schema-driven "General" group (classes/breakpoint.json).
- _serializedOverrides() { return this._gatedProps({ Description: this.Description }); }
+ // No editor in the table (`row._descriptionEditable`) or the Property Inspector.
+ get descriptionEditable() { return false; }
+ // An edit is refused in MATLAB's words, rather than accepted and saved as a key MATLAB
+ // ignores on load, which is what an edit here used to do.
+ setProperty(propName, stringValue) {
+ if (propName === 'Description') {
+ return { error: true, reason: `Unrecognized property 'Description' for class '${CLASS_NAME}'.`, invalidValue: stringValue, validValue: this.Description };
+ }
+ return super.setProperty(propName, stringValue);
+ }
static get defaultName() { return 'Breakpoint'; }
// MEASURED from what MATLAB R2027a writes for `Simulink.Breakpoint` with nothing set, in
// MATLAB's own alphabetical key order. Three of the four properties are themselves nested
diff --git a/dist/datamodel/node/data/BreakpointNode.js.map b/dist/datamodel/node/data/BreakpointNode.js.map
index c60009c4..1d082902 100644
--- a/dist/datamodel/node/data/BreakpointNode.js.map
+++ b/dist/datamodel/node/data/BreakpointNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"BreakpointNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/BreakpointNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,MAAM,UAAU,GAAG,qBAAqB,CAAC;AACzC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,kBAAkB;IAE1D,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAI,KAAK,CAAC,WAAsB,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5M,IAAI,IAAI,KAAa,OAAO,sBAAsB,CAAC,CAAC,CAAC;IACrD,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,mFAAmF;IACnF,IAAI,YAAY,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9C,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAClF,sEAAsE;IACtE,oBAAoB,KAA8B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/G,MAAM,KAAK,WAAW,KAAa,OAAO,YAAY,CAAC,CAAC,CAAC;IACzD,yFAAyF;IACzF,0FAA0F;IAC1F,8FAA8F;IAC9F,4FAA4F;IAC5F,oFAAoF;IACpF,wFAAwF;IACxF,oFAAoF;IACpF,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAAoB,MAAM,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,iCAAiC,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,EAAE,aAAa,EAAE,qCAAqC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;IACnuB,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAoB,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CAC9Q"}
\ No newline at end of file
+{"version":3,"file":"BreakpointNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/BreakpointNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/LookupTableNode.d.ts b/dist/datamodel/node/data/LookupTableNode.d.ts
index 2f26aee7..e033f9bc 100644
--- a/dist/datamodel/node/data/LookupTableNode.d.ts
+++ b/dist/datamodel/node/data/LookupTableNode.d.ts
@@ -1,6 +1,7 @@
import SimulinkObjectNode from '../SimulinkObjectNode.js';
import type { PropClass } from '../BaseNode.js';
import type BaseNode from '../BaseNode.js';
+import type { SetPropertyResult } from '../DataNode.js';
export default class LookupTableNode extends SimulinkObjectNode {
Description: string;
constructor(name: string, parent: BaseNode | null, props: Record, serial: Record);
@@ -9,7 +10,8 @@ export default class LookupTableNode extends SimulinkObjectNode {
get displayValue(): string;
get valueEditable(): boolean;
getProperties(): PropClass[];
- _serializedOverrides(): Record;
+ get descriptionEditable(): boolean;
+ setProperty(propName: string, stringValue: string): true | SetPropertyResult;
static get defaultName(): string;
static createDefault(name: string, parent: BaseNode | null): LookupTableNode;
static parse(rawVal: Record, name: string, parent: BaseNode | null): LookupTableNode;
diff --git a/dist/datamodel/node/data/LookupTableNode.d.ts.map b/dist/datamodel/node/data/LookupTableNode.d.ts.map
index c61a111f..e41508bf 100644
--- a/dist/datamodel/node/data/LookupTableNode.d.ts.map
+++ b/dist/datamodel/node/data/LookupTableNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"LookupTableNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/LookupTableNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,kBAAkB;IAC3D,WAAW,EAAE,MAAM,CAAC;gBACR,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAuB;IACzC,IAAI,SAAS,IAAI,MAAM,CAAuB;IAE9C,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAE5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA0B;IAQ1D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe;IAC5E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe;CACxG"}
\ No newline at end of file
+{"version":3,"file":"LookupTableNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/LookupTableNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,kBAAkB;IAO3D,WAAW,EAAE,MAAM,CAAC;gBACR,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAuB;IACzC,IAAI,SAAS,IAAI,MAAM,CAAuB;IAE9C,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAG5B,IAAI,mBAAmB,IAAI,OAAO,CAAkB;IAGpD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAM5E,MAAM,KAAK,WAAW,IAAI,MAAM,CAA0B;IAQ1D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe;IAC5E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe;CACxG"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/LookupTableNode.js b/dist/datamodel/node/data/LookupTableNode.js
index 49572f65..c53bf370 100644
--- a/dist/datamodel/node/data/LookupTableNode.js
+++ b/dist/datamodel/node/data/LookupTableNode.js
@@ -2,7 +2,6 @@
import SimulinkObjectNode from '../SimulinkObjectNode.js';
import PropName from '../../prop/PropName.js';
import PropDataType from '../../prop/PropDataType.js';
-import PropDescription from '../../prop/PropDescription.js';
const CLASS_NAME = 'Simulink.LookupTable';
export default class LookupTableNode extends SimulinkObjectNode {
constructor(name, parent, props, serial) { super(name, parent, serial); this.Description = props.Description || ''; }
@@ -11,9 +10,18 @@ export default class LookupTableNode extends SimulinkObjectNode {
// A LookupTable has no scalar "value" — the Value column is empty and not editable.
get displayValue() { return ''; }
get valueEditable() { return false; }
- getProperties() { return [PropName, PropDataType, PropDescription]; }
+ getProperties() { return [PropName, PropDataType]; }
// PI layout: schema-driven "General" group (classes/lookupTable.json).
- _serializedOverrides() { return this._gatedProps({ Description: this.Description }); }
+ // No editor in the table (`row._descriptionEditable`) or the Property Inspector.
+ get descriptionEditable() { return false; }
+ // An edit is refused in MATLAB's words, rather than accepted and saved as a key MATLAB
+ // ignores on load, which is what an edit here used to do.
+ setProperty(propName, stringValue) {
+ if (propName === 'Description') {
+ return { error: true, reason: `Unrecognized property 'Description' for class '${CLASS_NAME}'.`, invalidValue: stringValue, validValue: this.Description };
+ }
+ return super.setProperty(propName, stringValue);
+ }
static get defaultName() { return 'LookupTable'; }
// MEASURED from what MATLAB R2027a writes for `Simulink.LookupTable` with nothing set, in
// MATLAB's own alphabetical key order. Four nested objects and two scalars, where the bag used
diff --git a/dist/datamodel/node/data/LookupTableNode.js.map b/dist/datamodel/node/data/LookupTableNode.js.map
index b3fbd150..3a4e7574 100644
--- a/dist/datamodel/node/data/LookupTableNode.js.map
+++ b/dist/datamodel/node/data/LookupTableNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"LookupTableNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/LookupTableNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"LookupTableNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/LookupTableNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/SignalNode.d.ts b/dist/datamodel/node/data/SignalNode.d.ts
index a11449e7..48b8015b 100644
--- a/dist/datamodel/node/data/SignalNode.d.ts
+++ b/dist/datamodel/node/data/SignalNode.d.ts
@@ -1,6 +1,6 @@
import DataNode from '../DataNode.js';
import type { SetPropertyResult } from '../DataNode.js';
-import type { PropClass } from '../BaseNode.js';
+import type { PropClass, PIGroupDef } from '../BaseNode.js';
import type BaseNode from '../BaseNode.js';
export default class SignalNode extends DataNode {
DataType: string;
@@ -8,6 +8,8 @@ export default class SignalNode extends DataNode {
Max: number | undefined;
Unit: string;
Description: string;
+ Complexity: string;
+ DimensionsMode: string;
constructor(name: string, parent: BaseNode | null, props: Record, serial: Record);
get icon(): string;
get className(): string;
@@ -15,9 +17,11 @@ export default class SignalNode extends DataNode {
get valueEditable(): boolean;
get dataType(): string;
getProperties(): PropClass[];
+ getPILayout(): PIGroupDef[] | null;
setProperty(propName: string, stringValue: string): true | SetPropertyResult;
_getSerializedProperties(): Record;
serializeValue(): unknown;
+ _enumOverrides(sp: Record): Record;
static get defaultName(): string;
static createDefault(name: string, parent: BaseNode | null): SignalNode;
static parse(rawVal: Record, name: string, parent: BaseNode | null): SignalNode;
diff --git a/dist/datamodel/node/data/SignalNode.d.ts.map b/dist/datamodel/node/data/SignalNode.d.ts.map
index 49fca774..83e258ce 100644
--- a/dist/datamodel/node/data/SignalNode.d.ts.map
+++ b/dist/datamodel/node/data/SignalNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"SignalNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/SignalNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAgC,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAa3C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,QAAQ;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;gBAER,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAgBlH,IAAI,IAAI,IAAI,MAAM,CAA8D;IAKhF,IAAI,SAAS,IAAI,MAAM,CAAmI;IAE1J,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAM9C,IAAI,QAAQ,IAAI,MAAM,CAA0B;IAEhD,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAgB5E,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWnD,cAAc,IAAI,OAAO;IAczB,MAAM,KAAK,WAAW,IAAI,MAAM,CAAqB;IAErD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU;IAUvE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU;CAMnG"}
\ No newline at end of file
+{"version":3,"file":"SignalNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/SignalNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAgC,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AA0B3C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,QAAQ;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;gBAEX,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkBlH,IAAI,IAAI,IAAI,MAAM,CAA8D;IAKhF,IAAI,SAAS,IAAI,MAAM,CAAmI;IAE1J,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAM9C,IAAI,QAAQ,IAAI,MAAM,CAA0B;IAEhD,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,IAAI,UAAU,EAAE,GAAG,IAAI;IAKlC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAyB5E,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAYnD,cAAc,IAAI,OAAO;IAuBzB,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASpE,MAAM,KAAK,WAAW,IAAI,MAAM,CAAqB;IAErD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU;IAUvE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU;CAMnG"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/SignalNode.js b/dist/datamodel/node/data/SignalNode.js
index 729f9074..a06a0aa8 100644
--- a/dist/datamodel/node/data/SignalNode.js
+++ b/dist/datamodel/node/data/SignalNode.js
@@ -7,10 +7,22 @@ import PropMin from '../../prop/PropMin.js';
import PropMax from '../../prop/PropMax.js';
import PropUnit from '../../prop/PropUnit.js';
import PropDescription from '../../prop/PropDescription.js';
+import PropSignalComplexity from '../../prop/PropSignalComplexity.js';
+import PropSignalDimensionsMode from '../../prop/PropSignalDimensionsMode.js';
import { withSourceKeys } from './BaseBusNode.js';
import { schemaColumns } from '../schemaBridge.js';
import { oneWrite, writeUnderWay } from '../../parser/MatWriter.js';
const CLASS_NAME = 'Simulink.Signal';
+// Complexity and DimensionsMode are editable node fields, so the table and the Property Inspector
+// read them through these atoms (the Signal's own enums, auto included) rather than through the
+// schema descriptors, which read the source bag and are labels. In place, by key, so the column
+// order and the schema layout's order stay what the schema authored. The schema keeps both
+// descriptors: Parameter's complexity is one too, and stays a label, derived from its Value.
+const ENUM_ATOMS = new Map([
+ ['complexity', PropSignalComplexity],
+ ['dimensionsMode', PropSignalDimensionsMode],
+]);
+const withEnumAtoms = (props) => props.map((p) => ENUM_ATOMS.get(p.key) ?? p);
export default class SignalNode extends DataNode {
constructor(name, parent, props, serial) {
super(name, parent, serial);
@@ -26,6 +38,8 @@ export default class SignalNode extends DataNode {
this.Max = props.Max;
this.Unit = props.DocUnits || props.Unit || '';
this.Description = props.Description || '';
+ this.Complexity = props.Complexity || 'auto';
+ this.DimensionsMode = props.DimensionsMode || 'auto';
}
get icon() { return this.isDerived ? 'serviceInterfaces' : 'wsSignal'; }
// Report the class the FILE actually holds — same reason as ParameterNode's:
@@ -41,9 +55,14 @@ export default class SignalNode extends DataNode {
// Data Type column. Without this the column and the PI row were blank for
// every Signal in every channel even though all four carry the key.
get dataType() { return this.DataType; }
- getProperties() { return [PropName, withSourceKeys(PropDataType, ['DataType', 'DataType_internal']), PropMin, PropMax, PropUnit, PropDescription, ...schemaColumns(this.className)]; }
- // PI layout is now declarative — see schema/classes/signal.json `layout`,
- // resolved by the inherited BaseNode.getPILayout via buildPILayout.
+ getProperties() { return [PropName, withSourceKeys(PropDataType, ['DataType', 'DataType_internal']), PropMin, PropMax, PropUnit, PropDescription, ...withEnumAtoms(schemaColumns(this.className))]; }
+ // PI layout is declarative (schema/classes/signal.json `layout`, resolved by buildPILayout),
+ // with the two enum atoms in place of their descriptors, so an edit the table makes shows in
+ // the PI too (ValueTypeNode.getPILayout gives the full account of that gap).
+ getPILayout() {
+ const layout = super.getPILayout();
+ return layout && layout.map((g) => ({ ...g, items: withEnumAtoms(g.items) }));
+ }
setProperty(propName, stringValue) {
// Its own shown text, set back, is no edit (DataNode._isUnchangedCommit).
if (this._isUnchangedCommit(propName, stringValue)) {
@@ -57,6 +76,15 @@ export default class SignalNode extends DataNode {
if (propName === 'Min' || propName === 'Max') {
return this._setMinMax(propName, stringValue);
}
+ // Complexity and DimensionsMode take only the Signal's own enumerals, as MATLAB does;
+ // the shared check reads the set off the atom the dropdown is built from. Only these
+ // two: Storage Class is a select too, and the schema path refuses it in its own words.
+ if (ENUM_ATOMS.has(propName)) {
+ const notAnEnumeral = this._rejectUnknownEnumeral(propName, stringValue);
+ if (notAnEnumeral) {
+ return notAnEnumeral;
+ }
+ }
return DataNode.prototype.setProperty.call(this, propName, stringValue);
}
_getSerializedProperties() {
@@ -75,6 +103,7 @@ export default class SignalNode extends DataNode {
if ('Description' in sp || this.Description) {
props.Description = this.Description;
}
+ Object.assign(props, this._enumOverrides(sp));
return props;
}
serializeValue() {
@@ -96,8 +125,29 @@ export default class SignalNode extends DataNode {
if ('Description' in sp || this.Description) {
overrides.Description = this.Description;
}
+ Object.assign(overrides, this._enumOverrides(sp));
return this._serializeSimulinkObject(overrides);
}
+ // Complexity and DimensionsMode, as both save paths write them: the key when the file had
+ // it, or when the value is not MATLAB's default. MATLAB's text form has a non-default value
+ // as a top-level key and no key at 'auto', even for a Signal set to 'complex' and back
+ // (measured in R2027a), so a Signal whose text file had no key saves with none until it
+ // leaves 'auto'. A key the file had stays, at 'auto' if set there, which MATLAB reads the
+ // same; a binary file always has both keys. A clear stores '' (DataNode._rejectUnknownEnumeral),
+ // which is no value either property has, so it is written as 'auto', what an absent key
+ // means, and never as ''.
+ _enumOverrides(sp) {
+ const overrides = {};
+ const complexity = this.Complexity || 'auto';
+ if ('Complexity' in sp || complexity !== 'auto') {
+ overrides.Complexity = complexity;
+ }
+ const dimensionsMode = this.DimensionsMode || 'auto';
+ if ('DimensionsMode' in sp || dimensionsMode !== 'auto') {
+ overrides.DimensionsMode = dimensionsMode;
+ }
+ return overrides;
+ }
static get defaultName() { return 'Signal'; }
static createDefault(name, parent) {
// Verified property-for-property against MATLAB R2027a's own default `Simulink.Signal`:
diff --git a/dist/datamodel/node/data/SignalNode.js.map b/dist/datamodel/node/data/SignalNode.js.map
index 501f1dbe..289be7f4 100644
--- a/dist/datamodel/node/data/SignalNode.js.map
+++ b/dist/datamodel/node/data/SignalNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"SignalNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/SignalNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,QAAQ,EAAE,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,QAAQ;IAO5C,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B;QAC9G,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,uEAAuE;QACvE,4EAA4E;QAC5E,0EAA0E;QAC1E,sEAAsE;QACtE,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrG,IAAI,CAAC,QAAQ,GAAI,WAAsB,IAAI,MAAM,CAAC;QAClD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAyB,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAyB,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAI,KAAK,CAAC,QAAmB,IAAK,KAAK,CAAC,IAAe,IAAI,EAAE,CAAC;QACvE,IAAI,CAAC,WAAW,GAAI,KAAK,CAAC,WAAsB,IAAI,EAAE,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAChF,6EAA6E;IAC7E,6EAA6E;IAC7E,gFAAgF;IAChF,uCAAuC;IACvC,IAAI,SAAS,KAAa,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAA8C,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IAC1J,+EAA+E;IAC/E,IAAI,YAAY,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAE9C,8EAA8E;IAC9E,8EAA8E;IAC9E,0EAA0E;IAC1E,oEAAoE;IACpE,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEhD,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnM,0EAA0E;IAC1E,oEAAoE;IAEpE,WAAW,CAAC,QAAgB,EAAE,WAAmB;QAC7C,0EAA0E;QAC1E,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,mGAAmG;QACnG,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACtE,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,cAAc,CAAC;QAC1B,CAAC;QACD,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC;IAED,wBAAwB;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAsC,CAAC;QAC9D,MAAM,OAAO,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;QACxB,IAAI,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,CAAC;QAClG,IAAI,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,CAAC;QAClG,IAAI,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAAC,CAAC;QAC/D,IAAI,aAAa,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,cAAc;QACV,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAsC,CAAC;QAC9D,MAAM,OAAO,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAAC,CAAC;QACxE,IAAI,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAAC,CAAC;QACxE,IAAI,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAAC,CAAC;QACnE,IAAI,aAAa,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,KAAK,WAAW,KAAa,OAAO,QAAQ,CAAC,CAAC,CAAC;IAErD,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB;QACtD,wFAAwF;QACxF,gFAAgF;QAChF,2FAA2F;QAC3F,iBAAiB;QACjB,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,sBAAsB,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrM,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB;QAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,IAAK,MAAM,CAAC,SAAuB,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAK,IAAgC,CAAC,WAAW,CAAC,IAAI,EAAE,CAA4B,CAAC;QACzG,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACvD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAiC,CAAC,CAAC;IAClF,CAAC;CACJ"}
\ No newline at end of file
+{"version":3,"file":"SignalNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/SignalNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/VariantBankCoderInfoNode.d.ts b/dist/datamodel/node/data/VariantBankCoderInfoNode.d.ts
index b3abc00b..79563bdc 100644
--- a/dist/datamodel/node/data/VariantBankCoderInfoNode.d.ts
+++ b/dist/datamodel/node/data/VariantBankCoderInfoNode.d.ts
@@ -1,13 +1,17 @@
import SimulinkObjectNode from '../SimulinkObjectNode.js';
import type { PropClass } from '../BaseNode.js';
import type BaseNode from '../BaseNode.js';
+import type { SetPropertyResult } from '../DataNode.js';
export default class VariantBankCoderInfoNode extends SimulinkObjectNode {
Value: unknown;
+ readonly _valueInFile: boolean;
constructor(name: string, parent: BaseNode | null, props: Record, serial: Record);
get icon(): string;
get className(): string;
get displayValue(): string;
+ get valueEditable(): boolean;
getProperties(): PropClass[];
+ setProperty(propName: string, stringValue: string): true | SetPropertyResult;
_serializedOverrides(): Record;
static get defaultName(): string;
static createDefault(name: string, parent: BaseNode | null): VariantBankCoderInfoNode;
diff --git a/dist/datamodel/node/data/VariantBankCoderInfoNode.d.ts.map b/dist/datamodel/node/data/VariantBankCoderInfoNode.d.ts.map
index 9f952c11..6aad5303 100644
--- a/dist/datamodel/node/data/VariantBankCoderInfoNode.d.ts.map
+++ b/dist/datamodel/node/data/VariantBankCoderInfoNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"VariantBankCoderInfoNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantBankCoderInfoNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,kBAAkB;IACpE,KAAK,EAAE,OAAO,CAAC;gBACH,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAyC;IAC3D,IAAI,SAAS,IAAI,MAAM,CAAuB;IAC9C,IAAI,YAAY,IAAI,MAAM,CAAyC;IACnE,aAAa,IAAI,SAAS,EAAE;IAG5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAAmC;IAKnE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,wBAAwB;IACrF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,wBAAwB;CACjH"}
\ No newline at end of file
+{"version":3,"file":"VariantBankCoderInfoNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantBankCoderInfoNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAcxD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,kBAAkB;IACpE,KAAK,EAAE,OAAO,CAAC;IAGf,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;gBACnB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAyC;IAC3D,IAAI,SAAS,IAAI,MAAM,CAAuB;IAC9C,IAAI,YAAY,IAAI,MAAM,CAAkE;IAE5F,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAK5B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAe5E,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAAmC;IAMnE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,wBAAwB;IACrF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,wBAAwB;CACjH"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/VariantBankCoderInfoNode.js b/dist/datamodel/node/data/VariantBankCoderInfoNode.js
index 16b27ce5..0b05dd72 100644
--- a/dist/datamodel/node/data/VariantBankCoderInfoNode.js
+++ b/dist/datamodel/node/data/VariantBankCoderInfoNode.js
@@ -4,17 +4,44 @@ import PropName from '../../prop/PropName.js';
import PropValue from '../../prop/PropValue.js';
import PropDataType from '../../prop/PropDataType.js';
const CLASS_NAME = 'Simulink.VariantBankCoderInfo';
+// MATLAB's Simulink.VariantBankCoderInfo has no Value (R2027a: `isprop(Simulink.VariantBankCoderInfo,
+// 'Value')` is 0, and setting one fails with "Unrecognized property 'Value' for class
+// 'Simulink.VariantBankCoderInfo'."). Its properties are HeaderFile, DefinitionFile, PreStatement,
+// PostStatement and Qualifier, which are also the fields of the saveobj envelope a dictionary
+// holds it as; none of them is modelled here yet. So, as for VariantBankNode (and a bus element,
+// BaseBusElementNode), the Value column offers no editor and a Value edit is refused. A Value key
+// a file already carries, which only this package ever wrote (MATLAB reads such a file without a
+// warning, builds the object with no Value, and drops the key on its next save), is shown and
+// written back as it was read, read-only.
export default class VariantBankCoderInfoNode extends SimulinkObjectNode {
- constructor(name, parent, props, serial) { super(name, parent, serial); this.Value = props.Value !== undefined ? props.Value : ''; }
+ constructor(name, parent, props, serial) { super(name, parent, serial); this._valueInFile = props.Value !== undefined; this.Value = this._valueInFile ? props.Value : ''; }
get icon() { return 'wsParameters_bankCoderInfo'; }
get className() { return CLASS_NAME; }
- get displayValue() { return PropValue.format(this.Value); }
+ get displayValue() { return this._valueInFile ? PropValue.format(this.Value) : ''; }
+ // The column stays, read-only, for a Value a file already carries.
+ get valueEditable() { return false; }
getProperties() { return [PropName, PropValue, PropDataType]; }
// PI layout: schema-driven "General" group (classes/variantBankCoderInfo.json).
- // UNGATED, as VariantBankNode's Value is.
- _serializedOverrides() { return { Value: this.Value }; }
+ // Refused rather than taken: DataNode's generic tail would keep the text, mark the entry
+ // Modified and answer `true`, and the file would gain a key MATLAB ignores. One still in the
+ // encoded stream it was read from keeps that refusal's own reason.
+ setProperty(propName, stringValue) {
+ if (this._resolveProperty(propName) === 'Value') {
+ return (this._refuseEncodedEdit(propName, stringValue) ?? {
+ error: true,
+ reason: `'${this.displayName}' is a ${this.className}, which has no Value, so none can be set on it.`,
+ invalidValue: stringValue,
+ validValue: this.displayValue,
+ });
+ }
+ return super.setProperty(propName, stringValue);
+ }
+ // Nothing overridden: the bag is written as it was read, so a file's own Value key (and
+ // only that) passes through `_mergeProps` unchanged, and no new one is ever written.
+ _serializedOverrides() { return {}; }
static get defaultName() { return 'VariantBankCoderInfo'; }
- // A saveobj envelope, as VariantBankNode's is, and the invented `Value` goes the same way.
+ // A saveobj envelope, as VariantBankNode's is, and nothing beside it: MATLAB has no `Value`
+ // property on this class, so none is written.
// The only field here whose default is not empty is Qualifier, which MATLAB defaults to the
// string 'None' — every field is a plain char, so this class's envelope is spelled
// identically in both formats. Measured from a MATLAB-written dictionary.
diff --git a/dist/datamodel/node/data/VariantBankCoderInfoNode.js.map b/dist/datamodel/node/data/VariantBankCoderInfoNode.js.map
index 669f4982..e894843a 100644
--- a/dist/datamodel/node/data/VariantBankCoderInfoNode.js.map
+++ b/dist/datamodel/node/data/VariantBankCoderInfoNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"VariantBankCoderInfoNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantBankCoderInfoNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,MAAM,UAAU,GAAG,+BAA+B,CAAC;AACnD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,kBAAkB;IAEpE,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/M,IAAI,IAAI,KAAa,OAAO,4BAA4B,CAAC,CAAC,CAAC;IAC3D,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,IAAI,YAAY,KAAa,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5E,gFAAgF;IAChF,0CAA0C;IAC1C,oBAAoB,KAA8B,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,KAAK,WAAW,KAAa,OAAO,sBAAsB,CAAC,CAAC,CAAC;IACnE,2FAA2F;IAC3F,4FAA4F;IAC5F,mFAAmF;IACnF,0EAA0E;IAC1E,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAA8B,MAAM,MAAM,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;IAC9gB,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAA8B,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CAC5S"}
\ No newline at end of file
+{"version":3,"file":"VariantBankCoderInfoNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantBankCoderInfoNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/VariantBankNode.d.ts b/dist/datamodel/node/data/VariantBankNode.d.ts
index 9c1f9cde..bdf67af3 100644
--- a/dist/datamodel/node/data/VariantBankNode.d.ts
+++ b/dist/datamodel/node/data/VariantBankNode.d.ts
@@ -1,13 +1,17 @@
import SimulinkObjectNode from '../SimulinkObjectNode.js';
import type { PropClass } from '../BaseNode.js';
import type BaseNode from '../BaseNode.js';
+import type { SetPropertyResult } from '../DataNode.js';
export default class VariantBankNode extends SimulinkObjectNode {
Value: unknown;
+ readonly _valueInFile: boolean;
constructor(name: string, parent: BaseNode | null, props: Record, serial: Record);
get icon(): string;
get className(): string;
get displayValue(): string;
+ get valueEditable(): boolean;
getProperties(): PropClass[];
+ setProperty(propName: string, stringValue: string): true | SetPropertyResult;
_serializedOverrides(): Record;
static get defaultName(): string;
static createDefault(name: string, parent: BaseNode | null): VariantBankNode;
diff --git a/dist/datamodel/node/data/VariantBankNode.d.ts.map b/dist/datamodel/node/data/VariantBankNode.d.ts.map
index a90cbf3e..97b51140 100644
--- a/dist/datamodel/node/data/VariantBankNode.d.ts.map
+++ b/dist/datamodel/node/data/VariantBankNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"VariantBankNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantBankNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,kBAAkB;IAC3D,KAAK,EAAE,OAAO,CAAC;gBACH,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAgC;IAClD,IAAI,SAAS,IAAI,MAAM,CAAuB;IAC9C,IAAI,YAAY,IAAI,MAAM,CAAyC;IACnE,aAAa,IAAI,SAAS,EAAE;IAI5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA0B;IAM1D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe;IAC5E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe;CACxG"}
\ No newline at end of file
+{"version":3,"file":"VariantBankNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantBankNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAcxD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,kBAAkB;IAC3D,KAAK,EAAE,OAAO,CAAC;IAGf,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;gBACnB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAgC;IAClD,IAAI,SAAS,IAAI,MAAM,CAAuB;IAC9C,IAAI,YAAY,IAAI,MAAM,CAAkE;IAE5F,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAK5B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAe5E,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA0B;IAK1D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe;IAC5E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,eAAe;CACxG"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/VariantBankNode.js b/dist/datamodel/node/data/VariantBankNode.js
index 41f07d48..c324a364 100644
--- a/dist/datamodel/node/data/VariantBankNode.js
+++ b/dist/datamodel/node/data/VariantBankNode.js
@@ -4,22 +4,46 @@ import PropName from '../../prop/PropName.js';
import PropValue from '../../prop/PropValue.js';
import PropDataType from '../../prop/PropDataType.js';
const CLASS_NAME = 'Simulink.VariantBank';
+// MATLAB's Simulink.VariantBank has no Value (R2027a: `isprop(Simulink.VariantBank, 'Value')`
+// is 0, and setting one fails with "Unrecognized property 'Value' for class
+// 'Simulink.VariantBank'."). Its properties are Name, Description, VariantConditions,
+// AllChoicesCoderInfo and ActiveChoiceCoderInfo, and the saveobj envelope a dictionary holds it
+// as adds BankCoderInfo; none of them is modelled here yet. So the Value column offers no editor
+// and a Value edit is refused, as a bus element's is (BaseBusElementNode). A Value key a file
+// already carries, which only this package ever wrote (MATLAB reads such a file without a
+// warning, builds a bank with no Value, and drops the key on its next save), is shown and
+// written back as it was read, read-only.
export default class VariantBankNode extends SimulinkObjectNode {
- constructor(name, parent, props, serial) { super(name, parent, serial); this.Value = props.Value !== undefined ? props.Value : ''; }
+ constructor(name, parent, props, serial) { super(name, parent, serial); this._valueInFile = props.Value !== undefined; this.Value = this._valueInFile ? props.Value : ''; }
get icon() { return 'wsParameters_bank'; }
get className() { return CLASS_NAME; }
- get displayValue() { return PropValue.format(this.Value); }
+ get displayValue() { return this._valueInFile ? PropValue.format(this.Value) : ''; }
+ // The column stays, read-only, for a Value a file already carries.
+ get valueEditable() { return false; }
getProperties() { return [PropName, PropValue, PropDataType]; }
// PI layout: schema-driven "General" group (classes/variantBank.json).
- // UNGATED: the Value is what the bank IS, so it is written whether or not the file
- // carried the key.
- _serializedOverrides() { return { Value: this.Value }; }
+ // Refused rather than taken: DataNode's generic tail would keep the text, mark the entry
+ // Modified and answer `true`, and the file would gain a key MATLAB ignores. One still in the
+ // encoded stream it was read from keeps that refusal's own reason.
+ setProperty(propName, stringValue) {
+ if (this._resolveProperty(propName) === 'Value') {
+ return (this._refuseEncodedEdit(propName, stringValue) ?? {
+ error: true,
+ reason: `'${this.displayName}' is a ${this.className}, which has no Value, so none can be set on it.`,
+ invalidValue: stringValue,
+ validValue: this.displayValue,
+ });
+ }
+ return super.setProperty(propName, stringValue);
+ }
+ // Nothing overridden: the bag is written as it was read, so a file's own Value key (and
+ // only that) passes through `_mergeProps` unchanged, and no new one is ever written.
+ _serializedOverrides() { return {}; }
static get defaultName() { return 'VariantBank'; }
- // A saveobj envelope, for the reason VariantVariableNode's carries one. MATLAB has no
- // `Value` property on this class at all, so the `{ Value: '' }` this used to write was pure
- // invention; under an envelope `_mergeProps` drops an empty override, so the
- // `_serializedOverrides` above now writes nothing until the user gives Value a value.
- // Fields, order and defaults measured from a MATLAB-written dictionary.
+ // A saveobj envelope, for the reason VariantVariableNode's carries one, and nothing beside
+ // it: MATLAB has no `Value` property on this class at all, so the `{ Value: '' }` this used
+ // to write was pure invention. Fields, order and defaults measured from a MATLAB-written
+ // dictionary.
static createDefault(name, parent) { const rawVal = VariantBankNode._defaultCustomSaveRawVal(CLASS_NAME, ['Name', 'Description', 'VariantConditions', 'AllChoicesCoderInfo', 'ActiveChoiceCoderInfo', 'BankCoderInfo'], { Name: '', Description: '', VariantConditions: VariantBankNode._emptyCell(), AllChoicesCoderInfo: '', ActiveChoiceCoderInfo: '', BankCoderInfo: '' }); const props = VariantBankNode._propsOf(rawVal); return new VariantBankNode(name, parent, props, { _rawVal: rawVal, _properties: props }); }
static parse(rawVal, name, parent) { const props = VariantBankNode._propsOf(rawVal); return new VariantBankNode(name, parent, props, { _rawVal: rawVal, _properties: props }); }
}
diff --git a/dist/datamodel/node/data/VariantBankNode.js.map b/dist/datamodel/node/data/VariantBankNode.js.map
index 3c85207d..43eee4c2 100644
--- a/dist/datamodel/node/data/VariantBankNode.js.map
+++ b/dist/datamodel/node/data/VariantBankNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"VariantBankNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantBankNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAC1C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,kBAAkB;IAE3D,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/M,IAAI,IAAI,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAClD,IAAI,SAAS,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;IAC9C,IAAI,YAAY,KAAa,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5E,uEAAuE;IACvE,mFAAmF;IACnF,mBAAmB;IACnB,oBAAoB,KAA8B,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,KAAK,WAAW,KAAa,OAAO,aAAa,CAAC,CAAC,CAAC;IAC1D,sFAAsF;IACtF,4FAA4F;IAC5F,6EAA6E;IAC7E,sFAAsF;IACtF,wEAAwE;IACxE,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB,IAAqB,MAAM,MAAM,GAAG,eAAe,CAAC,wBAAwB,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,iBAAiB,EAAE,eAAe,CAAC,UAAU,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;IAChkB,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAqB,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CACjR"}
\ No newline at end of file
+{"version":3,"file":"VariantBankNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantBankNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/VariantConfigurationDataNode.d.ts.map b/dist/datamodel/node/data/VariantConfigurationDataNode.d.ts.map
index 30c5cfb1..380f49db 100644
--- a/dist/datamodel/node/data/VariantConfigurationDataNode.d.ts.map
+++ b/dist/datamodel/node/data/VariantConfigurationDataNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"VariantConfigurationDataNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantConfigurationDataNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,kBAAkB;IACxE,KAAK,EAAE,OAAO,CAAC;gBACH,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAA8B;IAGhD,IAAI,SAAS,IAAI,MAAM,CAAmI;IAE1J,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAG5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAAuC;IAqCvE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,4BAA4B;IAwBzF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,4BAA4B;CACrH"}
\ No newline at end of file
+{"version":3,"file":"VariantConfigurationDataNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantConfigurationDataNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,kBAAkB;IACxE,KAAK,EAAE,OAAO,CAAC;gBACH,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAA8B;IAGhD,IAAI,SAAS,IAAI,MAAM,CAAmI;IAE1J,IAAI,YAAY,IAAI,MAAM,CAAe;IACzC,IAAI,aAAa,IAAI,OAAO,CAAkB;IAC9C,aAAa,IAAI,SAAS,EAAE;IAI5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAAuC;IAqCvE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,4BAA4B;IAwBzF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,4BAA4B;CACrH"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/VariantConfigurationDataNode.js b/dist/datamodel/node/data/VariantConfigurationDataNode.js
index faeb3b31..556dca66 100644
--- a/dist/datamodel/node/data/VariantConfigurationDataNode.js
+++ b/dist/datamodel/node/data/VariantConfigurationDataNode.js
@@ -15,7 +15,8 @@ export default class VariantConfigurationDataNode extends SimulinkObjectNode {
get valueEditable() { return false; }
getProperties() { return [PropName, PropDataType]; }
// PI layout: schema-driven "General" group (classes/variantConfigurationData.json).
- // UNGATED, as VariantBankNode's Value is.
+ // UNGATED. (VariantBankNode's Value was too, until it stopped writing one at all: MATLAB's
+ // Simulink.VariantBank has no Value.)
_serializedOverrides() { return { Value: this.Value }; }
static get defaultName() { return 'VariantConfigurationData'; }
// The one entry the Add gallery produced that MATLAB REFUSED to load, in both formats:
diff --git a/dist/datamodel/node/data/VariantConfigurationDataNode.js.map b/dist/datamodel/node/data/VariantConfigurationDataNode.js.map
index 3978ed30..ab4df3e8 100644
--- a/dist/datamodel/node/data/VariantConfigurationDataNode.js.map
+++ b/dist/datamodel/node/data/VariantConfigurationDataNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"VariantConfigurationDataNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantConfigurationDataNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"VariantConfigurationDataNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantConfigurationDataNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,MAAM,UAAU,GAAG,mCAAmC,CAAC;AACvD,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,kBAAkB;IAExE,YAAY,IAAY,EAAE,MAAuB,EAAE,KAA8B,EAAE,MAA+B,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/M,IAAI,IAAI,KAAa,OAAO,iBAAiB,CAAC,CAAC,CAAC;IAChD,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,SAAS,KAAa,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAA8C,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IAC1J,6FAA6F;IAC7F,IAAI,YAAY,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9C,aAAa,KAAkB,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACjE,oFAAoF;IACpF,2FAA2F;IAC3F,sCAAsC;IACtC,oBAAoB,KAA8B,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,KAAK,WAAW,KAAa,OAAO,0BAA0B,CAAC,CAAC,CAAC;IAEvE,uFAAuF;IACvF,yFAAyF;IACzF,2BAA2B;IAC3B,EAAE;IACF,wFAAwF;IACxF,yDAAyD;IACzD,iFAAiF;IACjF,kFAAkF;IAClF,yFAAyF;IACzF,wEAAwE;IACxE,wFAAwF;IACxF,uFAAuF;IACvF,0DAA0D;IAC1D,EAAE;IACF,wFAAwF;IACxF,6EAA6E;IAC7E,wFAAwF;IACxF,8EAA8E;IAC9E,8EAA8E;IAC9E,oDAAoD;IACpD,EAAE;IACF,mFAAmF;IACnF,kFAAkF;IAClF,qFAAqF;IACrF,wFAAwF;IACxF,qFAAqF;IACrF,sFAAsF;IACtF,oFAAoF;IACpF,yFAAyF;IACzF,sBAAsB;IACtB,EAAE;IACF,oFAAoF;IACpF,uFAAuF;IACvF,yFAAyF;IACzF,gFAAgF;IAChF,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,MAAuB;QACtD,MAAM,MAAM,GAAG,4BAA4B,CAAC,wBAAwB,CAChE,gCAAgC,EAChC,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,aAAa,EAAE,wBAAwB;YAC/E,0BAA0B,EAAE,oBAAoB,EAAE,uBAAuB;YACzE,mCAAmC,EAAE,4BAA4B,EAAE,SAAS,CAAC,EACjF;YACI,cAAc,EAAE,4BAA4B,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9G,qBAAqB,EAAE,4BAA4B,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,wBAAwB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/I,WAAW,EAAE,4BAA4B,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpG,sBAAsB,EAAE,EAAE;YAC1B,wBAAwB,EAAE,EAAE;YAC5B,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,EAAE;YACzB,iCAAiC,EAAE,IAAI;YACvC,0BAA0B,EAAE,4BAA4B,CAAC,YAAY,CACjE,CAAC,mBAAmB,EAAE,eAAe,EAAE,mCAAmC;gBACtE,4BAA4B,EAAE,+BAA+B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/E,OAAO,EAAE,MAAM;SAClB,CACJ,CAAC;QACF,MAAM,KAAK,GAAG,4BAA4B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,IAAI,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC;IACrI,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,MAA+B,EAAE,IAAY,EAAE,MAAuB,IAAkC,MAAM,KAAK,GAAG,4BAA4B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC;CACxT"}
\ No newline at end of file
diff --git a/dist/datamodel/node/schemaBridge.d.ts.map b/dist/datamodel/node/schemaBridge.d.ts.map
index 0f42d573..f9b67499 100644
--- a/dist/datamodel/node/schemaBridge.d.ts.map
+++ b/dist/datamodel/node/schemaBridge.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"schemaBridge.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/schemaBridge.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAkHvD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,CAcpE;AAMD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAE5D;AAUD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,GAAG,IAAI,CAgCtH;AAMD,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ3D"}
\ No newline at end of file
+{"version":3,"file":"schemaBridge.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/schemaBridge.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAuHvD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,CAcpE;AAMD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAE5D;AAUD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,GAAG,IAAI,CA0CtH;AA8ID,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ3D"}
\ No newline at end of file
diff --git a/dist/datamodel/node/schemaBridge.js b/dist/datamodel/node/schemaBridge.js
index d849c41b..c65d47b0 100644
--- a/dist/datamodel/node/schemaBridge.js
+++ b/dist/datamodel/node/schemaBridge.js
@@ -12,7 +12,7 @@
// - schemaColumns / schemaColumnLabels: the schema-driven read-only table
// columns (Dimensions, Complexity, Storage Class, …). Column GROUPING is NOT
// here — it is a global table concern owned by host/rowBuilder.COLUMN_GROUPS.
-import { getSchema, getSchemaClasses, getLayout, hydrate, writeSourcePath } from '../schema/index.js';
+import { getSchema, getSchemaClasses, getLayout, hydrate, isTypedScalar, sourceLeaf, writeSourcePath } from '../schema/index.js';
import PropName from '../prop/PropName.js';
import PropValue from '../prop/PropValue.js';
import PropDataType from '../prop/PropDataType.js';
@@ -69,6 +69,8 @@ function formatSchemaValue(value) {
// for a prop the table renders editable). readValue reads the node's
// serial._properties bag — display-only, never mutating serial. A 'select' prop
// with an options list contributes readOptions so the cell can render a dropdown.
+// Alignment contributes editableFor: MATLAB takes no edit of it under StorageClass
+// 'Auto', so on such a node its cell is a plain string.
function toPropClass(prop, column, editorOverride) {
const pc = {
key: prop.key,
@@ -89,6 +91,9 @@ function toPropClass(prop, column, editorOverride) {
const opts = prop.options;
pc.readOptions = () => opts;
}
+ if (isAlignment(prop)) {
+ pc.editableFor = (node) => storageClassOf(node) !== 'Auto';
+ }
return pc;
}
// The schema props the schema itself surfaces into the UI (PI groups + table
@@ -160,27 +165,167 @@ export function trySetSchemaProperty(node, key, stringValue) {
if (!prop || prop.editor === 'label') {
return null;
}
- // Every writable projected prop today is an enumerated 'select' — the two
- // other projected props (headerFile, alignment) are 'label' and returned
- // above. A prop of some other editor would fall through here unvalidated, so
- // adding one means adding its validation alongside; there is deliberately no
- // speculative branch for a type we do not yet expose (notably `int`: MATLAB
- // constrains Alignment to -1 or a power of 2, which Number.isInteger does
- // not express, so a generic int check would accept values MATLAB rejects).
+ // The writable projected props are the enumerated 'select's (Storage Class) and
+ // Alignment, a 'text' with a rule of its own. A prop of some other editor would
+ // fall through below unvalidated, so adding one means adding its validation
+ // alongside; there is deliberately no generic branch for a type (notably `int`:
+ // Number.isInteger accepts 3, which MATLAB refuses as an Alignment).
+ if (isAlignment(prop)) {
+ return setAlignment(node, prop, stringValue);
+ }
if (prop.editor === 'select') {
const options = prop.options ?? [];
if (options.length > 0 && !options.includes(stringValue)) {
return { error: true, reason: 'Invalid value for ' + prop.label, invalidValue: stringValue, validValue: '' };
}
}
- const props = node.serial?._properties;
+ const props = propertiesOf(node);
const ok = writeSourcePath(props, prop.sourcePath, stringValue);
if (!ok) {
return { error: true, reason: 'Cannot set ' + prop.label + ' (target property is absent)', invalidValue: stringValue, validValue: '' };
}
+ // MATLAB resets Alignment to -1 when StorageClass becomes 'Auto' (and warns
+ // "Alignment is ignored when StorageClass is 'Auto'.", which has no channel here).
+ // Undoing this edit restores the StorageClass and not the Alignment, as in MATLAB.
+ if (prop.key === 'storageClass' && stringValue === 'Auto') {
+ const alignment = resolved?.find(isAlignment);
+ if (alignment) {
+ writeAlignment(node, alignment, -1);
+ }
+ }
node._markModified?.();
return true;
}
+function propertiesOf(node) {
+ return node.serial?._properties;
+}
+// ---- Alignment (CoderInfo.Alignment on a Simulink.Parameter or Simulink.Signal) ----
+//
+// MATLAB's rule, measured in R2027a (27.1.0.3409468; test/alignmentEdit.test.ts):
+// - The value is converted as int32 first (round half away from zero, saturating;
+// NaN is 0, true is 1), then must be -1 or a power of two from 1 to 2^30. MATLAB's
+// refusal says "no more than 128", which is not what it does (256 through 2^30
+// are accepted), so that clause is left out of the refusal here. A char value is
+// refused with "Value must be numeric or logical."; a cell's text is read as the
+// number it spells.
+// - Then, under StorageClass 'Auto', every value but -1 is refused.
+// - A text .sldd holds a non-default Alignment as {"_type":"int32","_value":"8"},
+// the first key of CoderInfo's _properties, and leaves the key out at -1. A binary
+// one always holds an int32. A typed int32, a typed double and a bare number all
+// read back; a STRING "16" reads back as -1, silently, so a string is never written.
+//
+// Bus's Alignment is not this one: it is top-level, a double, PI-only and read-only.
+const ALIGNMENT_AUTO = "Cannot set Alignment when StorageClass is 'Auto'.";
+const ALIGNMENT_NOT_NUMERIC = 'Value must be numeric or logical.';
+const INT32_MIN = -2147483648;
+const INT32_MAX = 2147483647;
+const ALIGNMENT_MAX = 2 ** 30;
+function isAlignment(prop) {
+ return prop.key === 'alignment' && prop.editor === 'text';
+}
+// The StorageClass of the node's CoderInfo, as its class's storageClass prop shows it
+// (an absent one is that prop's default, 'Auto').
+function storageClassOf(node) {
+ const className = node.className;
+ const storageClass = className ? getSchema(className)?.find((p) => p.key === 'storageClass') : undefined;
+ return storageClass ? hydrate(propertiesOf(node), storageClass) : 'Auto';
+}
+// A cell's text as the number MATLAB would be given: a decimal literal, Inf, NaN, or
+// the logical true/false. Null for anything else, the empty text included.
+function alignmentNumber(text) {
+ const t = text.trim();
+ if (t === 'true' || t === 'false') {
+ return t === 'true' ? 1 : 0;
+ }
+ if (/^[+-]?(Inf|inf)$/.test(t)) {
+ return t.startsWith('-') ? -Infinity : Infinity;
+ }
+ if (/^[+-]?(NaN|nan)$/.test(t)) {
+ return NaN;
+ }
+ return /^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(t) ? Number(t) : null;
+}
+// MATLAB's int32(x): round half away from zero, saturate, NaN to 0.
+function toInt32(x) {
+ if (Number.isNaN(x)) {
+ return 0;
+ }
+ const r = Math.sign(x) * Math.round(Math.abs(x));
+ return Math.min(INT32_MAX, Math.max(INT32_MIN, r));
+}
+function isAlignmentBoundary(n) {
+ return n === -1 || (n >= 1 && n <= ALIGNMENT_MAX && (n & (n - 1)) === 0);
+}
+function setAlignment(node, prop, stringValue) {
+ const shown = formatSchemaValue(hydrate(propertiesOf(node), prop));
+ const refuse = (reason) => ({ error: true, reason, invalidValue: stringValue, validValue: shown });
+ const x = alignmentNumber(stringValue);
+ if (x === null) {
+ return refuse(ALIGNMENT_NOT_NUMERIC);
+ }
+ const n = toInt32(x);
+ if (!isAlignmentBoundary(n)) {
+ return refuse(n + ' is not a valid alignment boundary. The alignment boundary must be either -1 or a power of two.');
+ }
+ if (n !== -1 && storageClassOf(node) === 'Auto') {
+ return refuse(ALIGNMENT_AUTO);
+ }
+ const leaf = sourceLeaf(propertiesOf(node), prop.sourcePath);
+ if (!leaf) {
+ return refuse('Cannot set ' + prop.label + ' (target property is absent)');
+ }
+ const before = JSON.stringify(leaf.bag[leaf.key]);
+ writeAlignment(node, prop, n);
+ // Setting the value it already holds (-1 where there is no key, or under Auto) is no
+ // edit: nothing is marked, as DataNode._isUnchangedCommit answers for the shown text.
+ if (JSON.stringify(leaf.bag[leaf.key]) !== before) {
+ node._markModified?.();
+ }
+ return true;
+}
+// Write a validated Alignment `n` in the form MATLAB writes it, keeping the form the file
+// already holds: a typed leaf keeps its _type, a bare number stays bare. -1 removes the key
+// from a text dictionary, as MATLAB leaves it out there, and an absent key at -1 stays
+// absent in any format (absence reads as -1). A new key is a typed int32, inserted where
+// MATLAB's sorted text puts it (first in CoderInfo). Never a string: MATLAB reads "16" as -1.
+function writeAlignment(node, prop, n) {
+ const leaf = sourceLeaf(propertiesOf(node), prop.sourcePath);
+ if (!leaf) {
+ return;
+ }
+ const { bag, key } = leaf;
+ const existing = bag[key];
+ const format = node._ownerFormat?.();
+ if (n === -1 && (format === 'json' || existing === undefined)) {
+ delete bag[key];
+ }
+ else if (isTypedScalar(existing)) {
+ existing._value = String(n);
+ }
+ else if (typeof existing === 'number') {
+ bag[key] = n;
+ }
+ else if (existing === undefined) {
+ insertSorted(bag, key, { _type: 'int32', _value: String(n) });
+ }
+ else {
+ bag[key] = { _type: 'int32', _value: String(n) };
+ }
+}
+// Add `key` to `bag` in place, before the first key that sorts after it, as MATLAB's text
+// writer orders a bag. The bag keeps its identity: the keys after it are re-added in order.
+function insertSorted(bag, key, value) {
+ const keys = Object.keys(bag);
+ const at = keys.findIndex((k) => k > key);
+ const tail = at < 0 ? [] : keys.slice(at).map((k) => [k, bag[k]]);
+ for (const [k] of tail) {
+ delete bag[k];
+ }
+ bag[key] = value;
+ for (const [k, v] of tail) {
+ bag[k] = v;
+ }
+}
// Column-key → display label for every schema-driven read-only column, unioned
// across all schema classes. The label lives once in the shared prop registry,
// so the host merges this over its base-column labels instead of hand-copying
diff --git a/dist/datamodel/node/schemaBridge.js.map b/dist/datamodel/node/schemaBridge.js.map
index 7f15a388..b1d7affb 100644
--- a/dist/datamodel/node/schemaBridge.js.map
+++ b/dist/datamodel/node/schemaBridge.js.map
@@ -1 +1 @@
-{"version":3,"file":"schemaBridge.js","sourceRoot":"","sources":["../../../src/datamodel/node/schemaBridge.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"schemaBridge.js","sourceRoot":"","sources":["../../../src/datamodel/node/schemaBridge.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropComplexity.d.ts.map b/dist/datamodel/prop/PropComplexity.d.ts.map
index 536f56f5..caecc804 100644
--- a/dist/datamodel/prop/PropComplexity.d.ts.map
+++ b/dist/datamodel/prop/PropComplexity.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"PropComplexity.d.ts","sourceRoot":"","sources":["../../../src/datamodel/prop/PropComplexity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgC7C,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,GAAG,SAAgB;IAC1B,MAAM,CAAC,WAAW,SAAgB;IAClC,MAAM,CAAC,MAAM,SAAY;IACzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAgB;IAE5C,MAAM,CAAC,YAAY,SAAgB;IAGnC,MAAM,CAAC,UAAU,WAAkB;IAEnC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAIxC,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;IAI9B,MAAM,CAAC,MAAM,oBAAc;CAC9B"}
\ No newline at end of file
+{"version":3,"file":"PropComplexity.d.ts","sourceRoot":"","sources":["../../../src/datamodel/prop/PropComplexity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiC7C,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,MAAM,CAAC,GAAG,SAAgB;IAC1B,MAAM,CAAC,WAAW,SAAgB;IAClC,MAAM,CAAC,MAAM,SAAY;IACzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAgB;IAE5C,MAAM,CAAC,YAAY,SAAgB;IAGnC,MAAM,CAAC,UAAU,WAAkB;IAEnC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAIxC,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;IAI9B,MAAM,CAAC,MAAM,oBAAc;CAC9B"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropComplexity.js b/dist/datamodel/prop/PropComplexity.js
index cdc5a759..01c86d26 100644
--- a/dist/datamodel/prop/PropComplexity.js
+++ b/dist/datamodel/prop/PropComplexity.js
@@ -24,10 +24,11 @@ import { formatText } from './formatText.js';
// DEX_MATLAB_CMD set, "MATLAB accepts what we write here" is an expectation, not a
// result.
//
-// Only Simulink.BusElement uses this atom. The `complexity` COLUMN is also filled
-// for Parameter/Signal/ValueType, but through the declarative schema
-// (schema/props/dataObject.json), which still declares it a label — deliberately,
-// because those classes admit a third value ('auto') and are a separate unlock.
+// Simulink.BusElement and Simulink.ValueType use this atom. A Simulink.Signal's
+// Complexity admits a third value, 'auto' (its default), so it has its own atom over
+// its own set, PropSignalComplexity. A Parameter's `complexity` column still comes
+// from the declarative schema (schema/props/dataObject.json), as a label, because a
+// Parameter's Complexity is derived from its Value.
const OPTIONS = ['real', 'complex'];
export default class PropComplexity {
static { this.key = 'complexity'; }
diff --git a/dist/datamodel/prop/PropComplexity.js.map b/dist/datamodel/prop/PropComplexity.js.map
index a5f340da..729dd9b9 100644
--- a/dist/datamodel/prop/PropComplexity.js.map
+++ b/dist/datamodel/prop/PropComplexity.js.map
@@ -1 +1 @@
-{"version":3,"file":"PropComplexity.js","sourceRoot":"","sources":["../../../src/datamodel/prop/PropComplexity.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,2EAA2E;AAC3E,kFAAkF;AAClF,gFAAgF;AAChF,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,kFAAkF;AAClF,+EAA+E;AAC/E,oDAAoD;AACpD,EAAE;AACF,mFAAmF;AACnF,wEAAwE;AACxE,8EAA8E;AAC9E,+EAA+E;AAC/E,gBAAgB;AAChB,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,6EAA6E;AAC7E,mFAAmF;AACnF,sEAAsE;AACtE,mFAAmF;AACnF,UAAU;AACV,EAAE;AACF,kFAAkF;AAClF,qEAAqE;AACrE,kFAAkF;AAClF,gFAAgF;AAChF,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,cAAc;aACxB,QAAG,GAAG,YAAY,CAAC;aACnB,gBAAW,GAAG,YAAY,CAAC;aAC3B,WAAM,GAAG,QAAQ,CAAC;aAClB,WAAM,GAAkB,YAAY,CAAC;IAC5C,oEAAoE;aAC7D,iBAAY,GAAG,YAAY,CAAC;IACnC,yEAAyE;IACzE,gDAAgD;aACzC,eAAU,GAAG,CAAC,YAAY,CAAC,CAAC;IAEnC,MAAM,CAAC,SAAS,CAAC,IAAc;QAC3B,OAAO,CAAE,IAA2C,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,WAAW;QACd,OAAO,OAAO,CAAC;IACnB,CAAC;aAEM,WAAM,GAAG,UAAU,CAAC"}
\ No newline at end of file
+{"version":3,"file":"PropComplexity.js","sourceRoot":"","sources":["../../../src/datamodel/prop/PropComplexity.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,2EAA2E;AAC3E,kFAAkF;AAClF,gFAAgF;AAChF,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,kFAAkF;AAClF,+EAA+E;AAC/E,oDAAoD;AACpD,EAAE;AACF,mFAAmF;AACnF,wEAAwE;AACxE,8EAA8E;AAC9E,+EAA+E;AAC/E,gBAAgB;AAChB,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,6EAA6E;AAC7E,mFAAmF;AACnF,sEAAsE;AACtE,mFAAmF;AACnF,UAAU;AACV,EAAE;AACF,gFAAgF;AAChF,qFAAqF;AACrF,mFAAmF;AACnF,oFAAoF;AACpF,oDAAoD;AACpD,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,cAAc;aACxB,QAAG,GAAG,YAAY,CAAC;aACnB,gBAAW,GAAG,YAAY,CAAC;aAC3B,WAAM,GAAG,QAAQ,CAAC;aAClB,WAAM,GAAkB,YAAY,CAAC;IAC5C,oEAAoE;aAC7D,iBAAY,GAAG,YAAY,CAAC;IACnC,yEAAyE;IACzE,gDAAgD;aACzC,eAAU,GAAG,CAAC,YAAY,CAAC,CAAC;IAEnC,MAAM,CAAC,SAAS,CAAC,IAAc;QAC3B,OAAO,CAAE,IAA2C,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,WAAW;QACd,OAAO,OAAO,CAAC;IACnB,CAAC;aAEM,WAAM,GAAG,UAAU,CAAC"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropDimensionsMode.d.ts.map b/dist/datamodel/prop/PropDimensionsMode.d.ts.map
index 9aa4c08e..053c560f 100644
--- a/dist/datamodel/prop/PropDimensionsMode.d.ts.map
+++ b/dist/datamodel/prop/PropDimensionsMode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"PropDimensionsMode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/prop/PropDimensionsMode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgC7C,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,GAAG,SAAoB;IAC9B,MAAM,CAAC,WAAW,SAAqB;IACvC,MAAM,CAAC,MAAM,SAAY;IACzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAoB;IAEhD,MAAM,CAAC,YAAY,SAAoB;IAGvC,MAAM,CAAC,UAAU,WAAsB;IAEvC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAIxC,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;IAI9B,MAAM,CAAC,MAAM,oBAAc;CAC9B"}
\ No newline at end of file
+{"version":3,"file":"PropDimensionsMode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/prop/PropDimensionsMode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA8B7C,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,GAAG,SAAoB;IAC9B,MAAM,CAAC,WAAW,SAAqB;IACvC,MAAM,CAAC,MAAM,SAAY;IACzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAoB;IAEhD,MAAM,CAAC,YAAY,SAAoB;IAGvC,MAAM,CAAC,UAAU,WAAsB;IAEvC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAIxC,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;IAI9B,MAAM,CAAC,MAAM,oBAAc;CAC9B"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropDimensionsMode.js b/dist/datamodel/prop/PropDimensionsMode.js
index 72691b28..10a1f209 100644
--- a/dist/datamodel/prop/PropDimensionsMode.js
+++ b/dist/datamodel/prop/PropDimensionsMode.js
@@ -23,11 +23,9 @@ import { formatText } from './formatText.js';
// DEX_MATLAB_CMD set, "MATLAB accepts what we write here" is an expectation, not a
// result.
//
-// Only Simulink.BusElement uses this atom. The `dimensionsMode` COLUMN is also
-// filled for Simulink.Signal, but through the declarative schema
-// (schema/props/dataObject.json), which still declares it a label — deliberately,
-// because a Signal's DimensionsMode defaults to 'auto', a value this set does not
-// contain, so the two are separate unlocks with separate enums.
+// Simulink.BusElement and Simulink.ValueType use this atom. A Simulink.Signal's
+// DimensionsMode defaults to 'auto', a value this set does not contain, so it has
+// its own atom over its own set, PropSignalDimensionsMode.
const OPTIONS = ['Fixed', 'Variable'];
export default class PropDimensionsMode {
static { this.key = 'dimensionsMode'; }
diff --git a/dist/datamodel/prop/PropDimensionsMode.js.map b/dist/datamodel/prop/PropDimensionsMode.js.map
index d3daf674..8ac51e5b 100644
--- a/dist/datamodel/prop/PropDimensionsMode.js.map
+++ b/dist/datamodel/prop/PropDimensionsMode.js.map
@@ -1 +1 @@
-{"version":3,"file":"PropDimensionsMode.js","sourceRoot":"","sources":["../../../src/datamodel/prop/PropDimensionsMode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,+EAA+E;AAC/E,uEAAuE;AACvE,kFAAkF;AAClF,iFAAiF;AACjF,mFAAmF;AACnF,uEAAuE;AACvE,kFAAkF;AAClF,yEAAyE;AACzE,EAAE;AACF,mFAAmF;AACnF,4EAA4E;AAC5E,8EAA8E;AAC9E,iFAAiF;AACjF,sBAAsB;AACtB,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,6EAA6E;AAC7E,mFAAmF;AACnF,sEAAsE;AACtE,mFAAmF;AACnF,UAAU;AACV,EAAE;AACF,+EAA+E;AAC/E,iEAAiE;AACjE,kFAAkF;AAClF,kFAAkF;AAClF,gEAAgE;AAChE,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,kBAAkB;aAC5B,QAAG,GAAG,gBAAgB,CAAC;aACvB,gBAAW,GAAG,iBAAiB,CAAC;aAChC,WAAM,GAAG,QAAQ,CAAC;aAClB,WAAM,GAAkB,gBAAgB,CAAC;IAChD,oEAAoE;aAC7D,iBAAY,GAAG,gBAAgB,CAAC;IACvC,yEAAyE;IACzE,gDAAgD;aACzC,eAAU,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAEvC,MAAM,CAAC,SAAS,CAAC,IAAc;QAC3B,OAAO,CAAE,IAA+C,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC;IAED,MAAM,CAAC,WAAW;QACd,OAAO,OAAO,CAAC;IACnB,CAAC;aAEM,WAAM,GAAG,UAAU,CAAC"}
\ No newline at end of file
+{"version":3,"file":"PropDimensionsMode.js","sourceRoot":"","sources":["../../../src/datamodel/prop/PropDimensionsMode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,+EAA+E;AAC/E,uEAAuE;AACvE,kFAAkF;AAClF,iFAAiF;AACjF,mFAAmF;AACnF,uEAAuE;AACvE,kFAAkF;AAClF,yEAAyE;AACzE,EAAE;AACF,mFAAmF;AACnF,4EAA4E;AAC5E,8EAA8E;AAC9E,iFAAiF;AACjF,sBAAsB;AACtB,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,6EAA6E;AAC7E,mFAAmF;AACnF,sEAAsE;AACtE,mFAAmF;AACnF,UAAU;AACV,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,2DAA2D;AAC3D,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,kBAAkB;aAC5B,QAAG,GAAG,gBAAgB,CAAC;aACvB,gBAAW,GAAG,iBAAiB,CAAC;aAChC,WAAM,GAAG,QAAQ,CAAC;aAClB,WAAM,GAAkB,gBAAgB,CAAC;IAChD,oEAAoE;aAC7D,iBAAY,GAAG,gBAAgB,CAAC;IACvC,yEAAyE;IACzE,gDAAgD;aACzC,eAAU,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAEvC,MAAM,CAAC,SAAS,CAAC,IAAc;QAC3B,OAAO,CAAE,IAA+C,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC;IAED,MAAM,CAAC,WAAW;QACd,OAAO,OAAO,CAAC;IACnB,CAAC;aAEM,WAAM,GAAG,UAAU,CAAC"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropSignalComplexity.d.ts b/dist/datamodel/prop/PropSignalComplexity.d.ts
new file mode 100644
index 00000000..39fb7d9a
--- /dev/null
+++ b/dist/datamodel/prop/PropSignalComplexity.d.ts
@@ -0,0 +1,14 @@
+import type BaseNode from '../node/BaseNode.js';
+import { formatText } from './formatText.js';
+export default class PropSignalComplexity {
+ static key: string;
+ static displayName: string;
+ static editor: string;
+ static column: string | null;
+ static nodeProperty: string;
+ static sourceKeys: string[];
+ static readValue(node: BaseNode): string;
+ static readOptions(): string[];
+ static format: typeof formatText;
+}
+//# sourceMappingURL=PropSignalComplexity.d.ts.map
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropSignalComplexity.d.ts.map b/dist/datamodel/prop/PropSignalComplexity.d.ts.map
new file mode 100644
index 00000000..cc8f8a0f
--- /dev/null
+++ b/dist/datamodel/prop/PropSignalComplexity.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PropSignalComplexity.d.ts","sourceRoot":"","sources":["../../../src/datamodel/prop/PropSignalComplexity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAmB7C,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACrC,MAAM,CAAC,GAAG,SAAgB;IAC1B,MAAM,CAAC,WAAW,SAAgB;IAClC,MAAM,CAAC,MAAM,SAAY;IACzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAgB;IAE5C,MAAM,CAAC,YAAY,SAAgB;IAEnC,MAAM,CAAC,UAAU,WAAkB;IAEnC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAIxC,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;IAI9B,MAAM,CAAC,MAAM,oBAAc;CAC9B"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropSignalComplexity.js b/dist/datamodel/prop/PropSignalComplexity.js
new file mode 100644
index 00000000..dfd5aa9d
--- /dev/null
+++ b/dist/datamodel/prop/PropSignalComplexity.js
@@ -0,0 +1,36 @@
+// Copyright 2026 The MathWorks, Inc.
+import { formatText } from './formatText.js';
+// A Simulink.Signal's Complexity: an editable dropdown over the Signal's own enum,
+// 'auto' | 'real' | 'complex'. Measured in R2027a: `set(Simulink.Signal, 'Complexity')` is
+// exactly that set, mpt.Signal's is the same, the default is 'auto', and any other value is
+// refused with "There is no enumerated value named 'X'." So this is PropComplexity's mechanism
+// with the Signal's set. PropComplexity stays BusElement's and ValueType's, whose classes
+// have no 'auto'; the two share the column and nothing else.
+//
+// SignalNode.setProperty validates an edit against readOptions (DataNode._rejectUnknownEnumeral),
+// so the dropdown and the rule that refuses a typed-in value are one list. `nodeProperty` sends
+// an edit to the node field, which both panes read: SignalNode puts this atom in the table and
+// in the Property Inspector, in place of the schema descriptor that reads the source bag.
+//
+// readValue falls back to 'auto', not '': a cleared cell stores '' (the licence
+// _rejectUnknownEnumeral gives a clear), which SignalNode saves as 'auto', so the cell shows
+// what the save writes.
+const OPTIONS = ['auto', 'real', 'complex'];
+export default class PropSignalComplexity {
+ static { this.key = 'complexity'; }
+ static { this.displayName = 'Complexity'; }
+ static { this.editor = 'select'; }
+ static { this.column = 'complexity'; }
+ // The node field (and raw `_properties` key) an edit is written to.
+ static { this.nodeProperty = 'Complexity'; }
+ // Raw _properties key, so the PI "Other" catch-all treats it as already shown.
+ static { this.sourceKeys = ['Complexity']; }
+ static readValue(node) {
+ return (node.Complexity) || 'auto';
+ }
+ static readOptions() {
+ return OPTIONS;
+ }
+ static { this.format = formatText; }
+}
+//# sourceMappingURL=PropSignalComplexity.js.map
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropSignalComplexity.js.map b/dist/datamodel/prop/PropSignalComplexity.js.map
new file mode 100644
index 00000000..da7fe65a
--- /dev/null
+++ b/dist/datamodel/prop/PropSignalComplexity.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"PropSignalComplexity.js","sourceRoot":"","sources":["../../../src/datamodel/prop/PropSignalComplexity.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,mFAAmF;AACnF,2FAA2F;AAC3F,4FAA4F;AAC5F,+FAA+F;AAC/F,0FAA0F;AAC1F,6DAA6D;AAC7D,EAAE;AACF,kGAAkG;AAClG,gGAAgG;AAChG,+FAA+F;AAC/F,0FAA0F;AAC1F,EAAE;AACF,gFAAgF;AAChF,6FAA6F;AAC7F,wBAAwB;AACxB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,oBAAoB;aAC9B,QAAG,GAAG,YAAY,CAAC;aACnB,gBAAW,GAAG,YAAY,CAAC;aAC3B,WAAM,GAAG,QAAQ,CAAC;aAClB,WAAM,GAAkB,YAAY,CAAC;IAC5C,oEAAoE;aAC7D,iBAAY,GAAG,YAAY,CAAC;IACnC,+EAA+E;aACxE,eAAU,GAAG,CAAC,YAAY,CAAC,CAAC;IAEnC,MAAM,CAAC,SAAS,CAAC,IAAc;QAC3B,OAAO,CAAE,IAA2C,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,WAAW;QACd,OAAO,OAAO,CAAC;IACnB,CAAC;aAEM,WAAM,GAAG,UAAU,CAAC"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropSignalDimensionsMode.d.ts b/dist/datamodel/prop/PropSignalDimensionsMode.d.ts
new file mode 100644
index 00000000..9d59ab82
--- /dev/null
+++ b/dist/datamodel/prop/PropSignalDimensionsMode.d.ts
@@ -0,0 +1,14 @@
+import type BaseNode from '../node/BaseNode.js';
+import { formatText } from './formatText.js';
+export default class PropSignalDimensionsMode {
+ static key: string;
+ static displayName: string;
+ static editor: string;
+ static column: string | null;
+ static nodeProperty: string;
+ static sourceKeys: string[];
+ static readValue(node: BaseNode): string;
+ static readOptions(): string[];
+ static format: typeof formatText;
+}
+//# sourceMappingURL=PropSignalDimensionsMode.d.ts.map
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropSignalDimensionsMode.d.ts.map b/dist/datamodel/prop/PropSignalDimensionsMode.d.ts.map
new file mode 100644
index 00000000..9931c8fd
--- /dev/null
+++ b/dist/datamodel/prop/PropSignalDimensionsMode.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"PropSignalDimensionsMode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/prop/PropSignalDimensionsMode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAmB7C,MAAM,CAAC,OAAO,OAAO,wBAAwB;IACzC,MAAM,CAAC,GAAG,SAAoB;IAC9B,MAAM,CAAC,WAAW,SAAqB;IACvC,MAAM,CAAC,MAAM,SAAY;IACzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAoB;IAEhD,MAAM,CAAC,YAAY,SAAoB;IAEvC,MAAM,CAAC,UAAU,WAAsB;IAEvC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAIxC,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;IAI9B,MAAM,CAAC,MAAM,oBAAc;CAC9B"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropSignalDimensionsMode.js b/dist/datamodel/prop/PropSignalDimensionsMode.js
new file mode 100644
index 00000000..652d0e05
--- /dev/null
+++ b/dist/datamodel/prop/PropSignalDimensionsMode.js
@@ -0,0 +1,36 @@
+// Copyright 2026 The MathWorks, Inc.
+import { formatText } from './formatText.js';
+// A Simulink.Signal's DimensionsMode: an editable dropdown over the Signal's own enum,
+// 'auto' | 'Fixed' | 'Variable'. Measured in R2027a: `set(Simulink.Signal, 'DimensionsMode')`
+// is exactly that set, with that casing, mpt.Signal's is the same, the default is 'auto', and
+// any other value is refused with "There is no enumerated value named 'X'." So this is
+// PropDimensionsMode's mechanism with the Signal's set. PropDimensionsMode stays BusElement's
+// and ValueType's, whose classes have no 'auto'.
+//
+// SignalNode.setProperty validates an edit against readOptions (DataNode._rejectUnknownEnumeral),
+// so the dropdown and the rule that refuses a typed-in value are one list. `nodeProperty` sends
+// an edit to the node field, which both panes read: SignalNode puts this atom in the table and
+// in the Property Inspector, in place of the schema descriptor that reads the source bag.
+//
+// readValue falls back to 'auto', not '': a cleared cell stores '' (the licence
+// _rejectUnknownEnumeral gives a clear), which SignalNode saves as 'auto', so the cell shows
+// what the save writes.
+const OPTIONS = ['auto', 'Fixed', 'Variable'];
+export default class PropSignalDimensionsMode {
+ static { this.key = 'dimensionsMode'; }
+ static { this.displayName = 'Dimensions Mode'; }
+ static { this.editor = 'select'; }
+ static { this.column = 'dimensionsMode'; }
+ // The node field (and raw `_properties` key) an edit is written to.
+ static { this.nodeProperty = 'DimensionsMode'; }
+ // Raw _properties key, so the PI "Other" catch-all treats it as already shown.
+ static { this.sourceKeys = ['DimensionsMode']; }
+ static readValue(node) {
+ return (node.DimensionsMode) || 'auto';
+ }
+ static readOptions() {
+ return OPTIONS;
+ }
+ static { this.format = formatText; }
+}
+//# sourceMappingURL=PropSignalDimensionsMode.js.map
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropSignalDimensionsMode.js.map b/dist/datamodel/prop/PropSignalDimensionsMode.js.map
new file mode 100644
index 00000000..a8d211a1
--- /dev/null
+++ b/dist/datamodel/prop/PropSignalDimensionsMode.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"PropSignalDimensionsMode.js","sourceRoot":"","sources":["../../../src/datamodel/prop/PropSignalDimensionsMode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,uFAAuF;AACvF,8FAA8F;AAC9F,8FAA8F;AAC9F,uFAAuF;AACvF,8FAA8F;AAC9F,iDAAiD;AACjD,EAAE;AACF,kGAAkG;AAClG,gGAAgG;AAChG,+FAA+F;AAC/F,0FAA0F;AAC1F,EAAE;AACF,gFAAgF;AAChF,6FAA6F;AAC7F,wBAAwB;AACxB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,wBAAwB;aAClC,QAAG,GAAG,gBAAgB,CAAC;aACvB,gBAAW,GAAG,iBAAiB,CAAC;aAChC,WAAM,GAAG,QAAQ,CAAC;aAClB,WAAM,GAAkB,gBAAgB,CAAC;IAChD,oEAAoE;aAC7D,iBAAY,GAAG,gBAAgB,CAAC;IACvC,+EAA+E;aACxE,eAAU,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAEvC,MAAM,CAAC,SAAS,CAAC,IAAc;QAC3B,OAAO,CAAE,IAA+C,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC;IACvF,CAAC;IAED,MAAM,CAAC,WAAW;QACd,OAAO,OAAO,CAAC;IACnB,CAAC;aAEM,WAAM,GAAG,UAAU,CAAC"}
\ No newline at end of file
diff --git a/dist/datamodel/prop/PropValue.js b/dist/datamodel/prop/PropValue.js
index b888279f..a688a01e 100644
--- a/dist/datamodel/prop/PropValue.js
+++ b/dist/datamodel/prop/PropValue.js
@@ -55,7 +55,7 @@ export default class PropValue {
}
// The inverse of the quoting above — see PropClass.unformat. Consulted only by
// DataNode's generic string path, i.e. by the nodes that store a bare string
- // and let this atom decorate it (Simulink.VariantBank and friends). The classes
+ // and let this atom decorate it (Simulink.VariantExpression and friends). The classes
// whose Value is a real MATLAB expression (Parameter, a MATLAB variable,
// VariantControl) override setProperty and parse the text themselves, so their
// quotes stay meaningful and this is never reached for them.
diff --git a/dist/datamodel/prop/PropValue.js.map b/dist/datamodel/prop/PropValue.js.map
index 6e2e9ae3..4759cfa4 100644
--- a/dist/datamodel/prop/PropValue.js.map
+++ b/dist/datamodel/prop/PropValue.js.map
@@ -1 +1 @@
-{"version":3,"file":"PropValue.js","sourceRoot":"","sources":["../../../src/datamodel/prop/PropValue.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE3G,MAAM,CAAC,OAAO,OAAO,SAAS;aACnB,QAAG,GAAG,OAAO,CAAC;aACd,gBAAW,GAAG,OAAO,CAAC;aACtB,WAAM,GAAG,MAAM,CAAC;aAChB,WAAM,GAAG,OAAO,CAAC;IAExB,MAAM,CAAC,SAAS,CAAC,IAAc;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAc;QACxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,aAAa,CAAC;QACzB,CAAC;QACD,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,iBAAiB;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,4EAA4E;QAC5E,0EAA0E;QAC1E,4EAA4E;QAC5E,uEAAuE;QACvE,mEAAmE;QACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,OAAO,aAAa,CAAC;YAAC,CAAC;YACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,sEAAsE;YACtE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAC,OAAO,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAChE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzE,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,6EAA6E;IAC7E,gFAAgF;IAChF,yEAAyE;IACzE,+EAA+E;IAC/E,6DAA6D;aACtD,aAAQ,GAAG,iBAAiB,CAAC"}
\ No newline at end of file
+{"version":3,"file":"PropValue.js","sourceRoot":"","sources":["../../../src/datamodel/prop/PropValue.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE3G,MAAM,CAAC,OAAO,OAAO,SAAS;aACnB,QAAG,GAAG,OAAO,CAAC;aACd,gBAAW,GAAG,OAAO,CAAC;aACtB,WAAM,GAAG,MAAM,CAAC;aAChB,WAAM,GAAG,OAAO,CAAC;IAExB,MAAM,CAAC,SAAS,CAAC,IAAc;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAc;QACxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,aAAa,CAAC;QACzB,CAAC;QACD,0EAA0E;QAC1E,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,iBAAiB;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,4EAA4E;QAC5E,0EAA0E;QAC1E,4EAA4E;QAC5E,uEAAuE;QACvE,mEAAmE;QACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,OAAO,aAAa,CAAC;YAAC,CAAC;YACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,sEAAsE;YACtE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAC,OAAO,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAChE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzE,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,6EAA6E;IAC7E,sFAAsF;IACtF,yEAAyE;IACzE,+EAA+E;IAC/E,6DAA6D;aACtD,aAAQ,GAAG,iBAAiB,CAAC"}
\ No newline at end of file
diff --git a/dist/datamodel/schema/classes/breakpoint.json b/dist/datamodel/schema/classes/breakpoint.json
index a36d4119..8cad95c0 100644
--- a/dist/datamodel/schema/classes/breakpoint.json
+++ b/dist/datamodel/schema/classes/breakpoint.json
@@ -8,7 +8,7 @@
"supportTunableSize"
],
"layout": [
- { "group": "General", "items": ["name", "value", "dataType", "kind", "class", "description"] },
+ { "group": "General", "items": ["name", "value", "dataType", "kind", "class"] },
{ "group": "Code Generation", "items": ["storageClass", "structTypeName", "structTypeDataScope", "structTypeHeaderFile"] },
{ "group": "Advanced", "items": ["supportTunableSize"] }
]
diff --git a/dist/datamodel/schema/classes/lookupTable.json b/dist/datamodel/schema/classes/lookupTable.json
index 2ec50ecb..fd31dbf8 100644
--- a/dist/datamodel/schema/classes/lookupTable.json
+++ b/dist/datamodel/schema/classes/lookupTable.json
@@ -10,7 +10,7 @@
"supportTunableSize"
],
"layout": [
- { "group": "General", "items": ["name", "value", "dataType", "kind", "class", "description"] },
+ { "group": "General", "items": ["name", "value", "dataType", "kind", "class"] },
{ "group": "Value Properties", "items": ["breakpointsSpecification"] },
{ "group": "Code Generation", "items": ["storageClass", "structTypeName", "structTypeDataScope", "structTypeHeaderFile"] },
{ "group": "Advanced", "items": ["allowDifferentTableBpSizes", "supportTunableSize"] }
diff --git a/dist/datamodel/schema/classes/parameter.json b/dist/datamodel/schema/classes/parameter.json
index 648da38b..ad54780c 100644
--- a/dist/datamodel/schema/classes/parameter.json
+++ b/dist/datamodel/schema/classes/parameter.json
@@ -13,7 +13,7 @@
"storedIntMax",
"storageClass",
{ "$ref": "headerFile", "sourcePath": "CoderInfo.CustomAttributes.HeaderFile", "projected": true },
- { "$ref": "alignment", "sourcePath": "CoderInfo.Alignment", "projected": true },
+ { "$ref": "alignment", "sourcePath": "CoderInfo.Alignment", "projected": true, "editor": "text" },
"identifier",
"definitionFile",
"owner",
diff --git a/dist/datamodel/schema/classes/signal.json b/dist/datamodel/schema/classes/signal.json
index 36746299..ed89e497 100644
--- a/dist/datamodel/schema/classes/signal.json
+++ b/dist/datamodel/schema/classes/signal.json
@@ -16,7 +16,7 @@
{ "$ref": "samplingMode", "default": "auto" },
"storageClass",
"identifier",
- { "$ref": "alignment", "sourcePath": "CoderInfo.Alignment", "projected": true },
+ { "$ref": "alignment", "sourcePath": "CoderInfo.Alignment", "projected": true, "editor": "text" },
{ "$ref": "dataScope", "sourcePath": "CoderInfo.CustomAttributes.DataScope" },
{ "$ref": "headerFile", "sourcePath": "CoderInfo.CustomAttributes.HeaderFile", "projected": true },
"definitionFile",
diff --git a/dist/datamodel/schema/index.d.ts b/dist/datamodel/schema/index.d.ts
index fecc62fb..35384096 100644
--- a/dist/datamodel/schema/index.d.ts
+++ b/dist/datamodel/schema/index.d.ts
@@ -4,5 +4,13 @@ export declare function getLayout(className: string): PILayoutGroup[] | undefine
export declare function getSchemaClasses(): string[];
export declare function resolveSourcePath(properties: Record | undefined, path: string): unknown;
export declare function writeSourcePath(properties: Record | undefined, path: string, value: unknown): boolean;
+export declare function isTypedScalar(value: unknown): value is {
+ _type: unknown;
+ _value: unknown;
+};
+export declare function sourceLeaf(properties: Record | undefined, path: string): {
+ bag: Record;
+ key: string;
+} | null;
export declare function hydrate(properties: Record | undefined, prop: ResolvedProp): unknown;
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/dist/datamodel/schema/index.d.ts.map b/dist/datamodel/schema/index.d.ts.map
index 3253e676..f7a5f6c8 100644
--- a/dist/datamodel/schema/index.d.ts.map
+++ b/dist/datamodel/schema/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/datamodel/schema/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAA+B,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqH3F,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,SAAS,CAQvE;AAMD,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,SAAS,CAExE;AAID,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAiDD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAcxG;AAgCD,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC/C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACf,OAAO,CAsBT;AAMD,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAGpG"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/datamodel/schema/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAA+B,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqH3F,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,SAAS,CAQvE;AAMD,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,SAAS,CAExE;AAID,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAiDD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAcxG;AAgCD,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC/C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACf,OAAO,CAYT;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAE1F;AAOD,wBAAgB,UAAU,CACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC/C,IAAI,EAAE,MAAM,GACb;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CActD;AAMD,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAGpG"}
\ No newline at end of file
diff --git a/dist/datamodel/schema/index.js b/dist/datamodel/schema/index.js
index 7c81e3e7..a2409896 100644
--- a/dist/datamodel/schema/index.js
+++ b/dist/datamodel/schema/index.js
@@ -218,28 +218,42 @@ function writableBag(container) {
// (we never synthesize e.g. a missing CoderInfo). Display/edit-only; the caller
// owns dirty-marking and serialization.
export function writeSourcePath(properties, path, value) {
- if (!properties) {
+ const leaf = sourceLeaf(properties, path);
+ if (!leaf) {
return false;
}
+ const existing = leaf.bag[leaf.key];
+ if (isTypedScalar(existing)) {
+ existing._value = String(value);
+ }
+ else {
+ leaf.bag[leaf.key] = value;
+ }
+ return true;
+}
+// Whether `value` is a typed-scalar leaf `{ _type, _value }`, the form unwrapScalar reads.
+export function isTypedScalar(value) {
+ return !!value && typeof value === 'object' && !Array.isArray(value) && '_type' in value && '_value' in value;
+}
+// The bag a dotted sourcePath's leaf is (or would be) written into, and the leaf's key: the
+// place writeSourcePath writes, for a caller whose write is not a plain assignment (removing
+// the key, or choosing the leaf's form from the one already there). Null, with nothing
+// touched, when an intermediate sub-object is absent: a missing CoderInfo is never
+// synthesized, as for writeSourcePath.
+export function sourceLeaf(properties, path) {
+ if (!properties) {
+ return null;
+ }
const parts = path.split('.');
let current = properties;
for (let i = 0; i < parts.length - 1; i++) {
const next = propertyBag(current, parts[i])[parts[i]];
if (next === null || next === undefined || typeof next !== 'object') {
- return false;
+ return null;
}
current = next;
}
- const leafKey = parts[parts.length - 1];
- const bag = writableBag(current);
- const existing = bag[leafKey];
- if (existing && typeof existing === 'object' && !Array.isArray(existing) && '_type' in existing && '_value' in existing) {
- existing._value = String(value);
- }
- else {
- bag[leafKey] = value;
- }
- return true;
+ return { bag: writableBag(current), key: parts[parts.length - 1] };
}
// Read a property's value from a `_properties` bag for DISPLAY, substituting the
// descriptor's declared default when the value is absent. This is display-only:
diff --git a/dist/datamodel/schema/index.js.map b/dist/datamodel/schema/index.js.map
index 4552aaf7..429a02d0 100644
--- a/dist/datamodel/schema/index.js.map
+++ b/dist/datamodel/schema/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/datamodel/schema/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/datamodel/schema/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/src/datamodel/node/BaseNode.ts b/src/datamodel/node/BaseNode.ts
index e89d6f2c..144001ce 100644
--- a/src/datamodel/node/BaseNode.ts
+++ b/src/datamodel/node/BaseNode.ts
@@ -27,6 +27,11 @@ export interface PropClass {
// data. When omitted, toPIObject falls back to [nodeProperty ?? key].
sourceKeys?: string[];
format: (value: unknown) => string;
+ // Whether THIS node takes an edit of a prop whose editor is not 'label', for a prop
+ // whose editability depends on the node's other values rather than on its class alone:
+ // MATLAB refuses a CoderInfo.Alignment under StorageClass 'Auto' (schemaBridge). Omitted,
+ // the editor alone decides. It can only take editability away, never grant it.
+ editableFor?: (node: BaseNode) => boolean;
}
export interface PropInfo {
@@ -634,6 +639,9 @@ export default class BaseNode {
if (key === 'Description') {
editable = editable && this.descriptionEditable;
}
+ if (editable && PropClassRef.editableFor) {
+ editable = PropClassRef.editableFor(this);
+ }
// Every other column of a node whose value is still an encoded stream, schema-projected
// ones included (Storage Class, Data Type…): they are all inside the stream. The Name
// was answered above, by nameEditable.
diff --git a/src/datamodel/node/data/BreakpointNode.ts b/src/datamodel/node/data/BreakpointNode.ts
index 2dbc99aa..ed60c3ee 100644
--- a/src/datamodel/node/data/BreakpointNode.ts
+++ b/src/datamodel/node/data/BreakpointNode.ts
@@ -2,11 +2,17 @@
import SimulinkObjectNode from '../SimulinkObjectNode.js';
import type { PropClass } from '../BaseNode.js';
import type BaseNode from '../BaseNode.js';
+import type { SetPropertyResult } from '../DataNode.js';
import PropName from '../../prop/PropName.js';
import PropDataType from '../../prop/PropDataType.js';
-import PropDescription from '../../prop/PropDescription.js';
const CLASS_NAME = 'Simulink.Breakpoint';
export default class BreakpointNode extends SimulinkObjectNode {
+ // What the FILE says, shown read-only. MATLAB's Simulink.Breakpoint has no Description:
+ // `isprop` is 0, setting one fails with MATLAB:noPublicFieldForClass (R2027a, measured
+ // 2026-10-16), and a dictionary MATLAB writes carries no such key. A key some other writer
+ // left is read here for the Description column and written back exactly as read: nothing
+ // overrides it (`_serializedOverrides` is the inherited empty one), so the file's own bag
+ // passes through. Simulink.FunctionElement is the precedent (ServiceBusNode.ts).
Description: string;
constructor(name: string, parent: BaseNode | null, props: Record, serial: Record) { super(name, parent, serial); this.Description = (props.Description as string) || ''; }
get icon(): string { return 'wsSimulinkBreakpoint'; }
@@ -14,9 +20,18 @@ export default class BreakpointNode extends SimulinkObjectNode {
// A Breakpoint has no scalar "value" — the Value column is empty and not editable.
get displayValue(): string { return ''; }
get valueEditable(): boolean { return false; }
- getProperties(): PropClass[] { return [PropName, PropDataType, PropDescription]; }
+ getProperties(): PropClass[] { return [PropName, PropDataType]; }
// PI layout: schema-driven "General" group (classes/breakpoint.json).
- _serializedOverrides(): Record { return this._gatedProps({ Description: this.Description }); }
+ // No editor in the table (`row._descriptionEditable`) or the Property Inspector.
+ get descriptionEditable(): boolean { return false; }
+ // An edit is refused in MATLAB's words, rather than accepted and saved as a key MATLAB
+ // ignores on load, which is what an edit here used to do.
+ setProperty(propName: string, stringValue: string): true | SetPropertyResult {
+ if (propName === 'Description') {
+ return { error: true, reason: `Unrecognized property 'Description' for class '${CLASS_NAME}'.`, invalidValue: stringValue, validValue: this.Description };
+ }
+ return super.setProperty(propName, stringValue);
+ }
static get defaultName(): string { return 'Breakpoint'; }
// MEASURED from what MATLAB R2027a writes for `Simulink.Breakpoint` with nothing set, in
// MATLAB's own alphabetical key order. Three of the four properties are themselves nested
diff --git a/src/datamodel/node/data/CodeGeneration.schema-columns.md b/src/datamodel/node/data/CodeGeneration.schema-columns.md
index 1f1ae487..afa31fb2 100644
--- a/src/datamodel/node/data/CodeGeneration.schema-columns.md
+++ b/src/datamodel/node/data/CodeGeneration.schema-columns.md
@@ -11,14 +11,17 @@
The Code Generation group contributes three schema-projected columns to the
Property Inspector and data table: **Storage Class** (editable dropdown),
-**Header File** (read-only label), and **Alignment** (read-only label). These
-are properties of the `Simulink.CoderInfo` sub-object nested at
-`_properties.CoderInfo._properties.*` in the serialized entry.
-
-Only **Storage Class** is editable in the UI. Edits flow through
-`trySetSchemaProperty` in `schemaBridge.ts`, which validates the value against
-the schema's `options` list and then writes directly to
-`CoderInfo._properties.StorageClass` via `writeSourcePath`.
+**Header File** (read-only label), and **Alignment** (editable text, except
+under StorageClass `Auto`). These are properties of the `Simulink.CoderInfo`
+sub-object nested at `_properties.CoderInfo._properties.*` in the serialized
+entry.
+
+**Storage Class** and **Alignment** are editable in the table. The Property
+Inspector shows all three read-only: it has no edit channel for schema rows.
+Edits flow through `trySetSchemaProperty` in `schemaBridge.ts`. Storage Class is
+validated against the schema's `options` list and written to
+`CoderInfo._properties.StorageClass` via `writeSourcePath`. Alignment has its
+own rule and write form (below).
## Property table
@@ -26,7 +29,7 @@ the schema's `options` list and then writes directly to
|------------|-------|------------|------|--------|----------|-------|
| storageClass | Storage Class | CoderInfo.StorageClass | string | select | **yes** | Code Generation |
| headerFile | Header File | CoderInfo.CustomAttributes.HeaderFile | string | label | no | Code Generation |
-| alignment | Alignment | CoderInfo.Alignment | int | label | no | Code Generation |
+| alignment | Alignment | CoderInfo.Alignment | int | text | **yes**, unless StorageClass is `Auto` | Code Generation |
## StorageClass — allowed values (via CoderInfo.StorageClass path)
@@ -94,24 +97,48 @@ selected. Because:
It is rendered with `editor: 'label'` — `trySetSchemaProperty` returns `null`
(not a writable schema prop), so the edit path is never reached.
-## alignment — why read-only
-
-`CoderInfo.Alignment` is typed `int` in the schema but rendered with
-`editor: 'label'`. MATLAB accepts `-1` (inherit/default) and positive powers of
-2 (1, 2, 4, 8, ..., up to platform limit). The rejection:
-
-> "Invalid setting for property 'Alignment'. Must be a positive integer that is a
-> power of 2, or -1."
-
-Because of the power-of-2 constraint (which requires non-trivial validation) and
-the `-1` sentinel, it is kept read-only. The `trySetSchemaProperty` code path for
-`editor: 'label'` returns `null` immediately.
-
-Note that a *generic* `int` check (`Number.isInteger`) would NOT be the right
-validation if Alignment were ever made editable: it accepts 3, 5, 6, … which
-MATLAB rejects. Making it editable means writing the power-of-2 + `-1` rule
-explicitly, so no generic int branch is carried in `trySetSchemaProperty`
-speculatively — see below.
+## alignment — MATLAB's rule
+
+`CoderInfo.Alignment` is an int32. Measured in R2027a (27.1.0.3409468,
+2026-10-16), on `Simulink.Parameter`, `Simulink.Signal` and their `mpt.*`
+subclasses:
+
+- The value is converted as int32 first: round half away from zero,
+ saturating, with NaN as 0 and `true` as 1. So 1.5 is stored as 2, 2.5 becomes
+ 3 and is refused, and 2^31 becomes 2147483647 and is refused.
+- The value must then be -1 (the default) or a power of two from 1 to 2^30.
+ Anything else is refused with " is not a valid alignment boundary. The
+ alignment boundary must be either -1 or a power of two no more than 128." We
+ leave out "no more than 128", because MATLAB does not apply it: 256 through
+ 2^30 are all accepted.
+- A char value is refused with "Value must be numeric or logical." A table
+ cell's text is read as the number it spells: a decimal literal, `Inf`, `NaN`,
+ `true` or `false`. Anything else, including empty text, gets that refusal.
+- Only after the value check, under StorageClass `Auto` (the default, and most
+ entries), every value but -1 is refused: "Cannot set Alignment when
+ StorageClass is 'Auto'." So 3 under `Auto` is refused as 3. The table cell is
+ a plain string there, through the `editableFor` hook on the column's
+ PropClass, which `BaseNode.getPropInfo` honours.
+- Setting StorageClass to `Auto` resets Alignment to -1 (MATLAB also warns
+ "Alignment is ignored when StorageClass is 'Auto'.", which has no channel
+ here). Undoing that edit restores the StorageClass and not the Alignment, as
+ in MATLAB.
+
+### The written form
+
+- In a text `.sldd`, MATLAB writes a non-default value as
+ `"Alignment": {"_type": "int32", "_value": "8"}`, the first key of
+ CoderInfo's `_properties`, and leaves the key out at -1. A binary `.sldd`
+ always holds `
8
`, or -1.
+- On read-back, a typed int32, a typed double and a bare number all load. A
+ **string** `"16"` loads as -1, silently, so the edit would be lost. An
+ invalid value, or any value under `Auto`, also loads as -1.
+- So the write keeps the form the file already holds: a typed leaf keeps its
+ `_type`, and a bare number stays bare. A new key is a typed int32, inserted
+ where MATLAB's sorted text puts it. A string leaf is replaced by a typed one,
+ and a string is never written. Setting -1 removes the key in a text
+ dictionary and writes int32 -1 in a binary one. An absent key at -1 stays
+ absent. Setting the value already held marks nothing.
## Validation mirrored in code
@@ -119,21 +146,29 @@ speculatively — see below.
validates `stringValue` is in `prop.options`; rejects with
`"Invalid value for Storage Class"`. Test:
`test/parity/fidelity/schemaColumns.fidelity.test.ts`.
-- `headerFile` and `alignment` (editor 'label'): `trySetSchemaProperty` returns
- `null` (not writable), so `DataNode.setProperty` falls through to field-based
- logic which also does not handle them → effectively read-only.
-- **No dead validation code.** `trySetSchemaProperty` validates only the 'select'
- editor, because `storageClass` is the sole prop that is both `projected: true`
- and not `editor: 'label'` — i.e. the only writable schema prop that exists.
- A generic `int` branch was removed for this reason (it was unreachable, and
- would have been wrong for Alignment anyway; see above). Adding a writable prop
- of a new editor type requires adding its validation at the same time.
+- `alignment` (editor 'text', on Parameter and Signal): `setAlignment` and
+ `writeAlignment` in `schemaBridge.ts` apply the rule and the written form
+ above, and a `storageClass` write to `Auto` resets it. Test:
+ `test/alignmentEdit.test.ts`, which runs over the MATLAB-written entries in
+ `test/fixtures/classes_r2027a_{text,binary}.sldd`.
+- `headerFile` (editor 'label'): `trySetSchemaProperty` returns `null` (not
+ writable), so `DataNode.setProperty` falls through to field-based logic,
+ which also does not handle it. It is effectively read-only.
+- **No generic validation.** `trySetSchemaProperty` validates each writable
+ prop by its own rule: the 'select' options, and Alignment's. There is no
+ generic `int` branch, because `Number.isInteger` accepts 3, which MATLAB
+ refuses as an Alignment. Adding a writable prop of a new editor type
+ requires adding its validation at the same time.
## Round-trip coverage
- JSON sldd: set storageClass → serialize → re-parse → value preserved.
Test: `test/parity/fidelity/schemaColumns.fidelity.test.ts` (format 'json').
- Binary sldd: same. Test: same file (format 'binary').
+- Alignment, both formats: an edit saves as MATLAB wrote the same value
+ (pSC set to 8 gives pAl8's CoderInfo exactly). Set back to -1, it gives
+ pAlM1's. StorageClass set to `Auto` gives pNo's. Each re-parses. Test:
+ `test/alignmentEdit.test.ts`.
- MATLAB re-open value-equality gate: set CoderInfo.StorageClass to
'ExportedGlobal' → MATLAB reads it back as 'ExportedGlobal'. Set to 'Auto' →
reads back 'Auto'. Test: same file (gated on DEX_MATLAB_CMD).
diff --git a/src/datamodel/node/data/LookupTableNode.ts b/src/datamodel/node/data/LookupTableNode.ts
index 10ba25fe..a1a4ec9d 100644
--- a/src/datamodel/node/data/LookupTableNode.ts
+++ b/src/datamodel/node/data/LookupTableNode.ts
@@ -2,11 +2,17 @@
import SimulinkObjectNode from '../SimulinkObjectNode.js';
import type { PropClass } from '../BaseNode.js';
import type BaseNode from '../BaseNode.js';
+import type { SetPropertyResult } from '../DataNode.js';
import PropName from '../../prop/PropName.js';
import PropDataType from '../../prop/PropDataType.js';
-import PropDescription from '../../prop/PropDescription.js';
const CLASS_NAME = 'Simulink.LookupTable';
export default class LookupTableNode extends SimulinkObjectNode {
+ // What the FILE says, shown read-only. MATLAB's Simulink.LookupTable has no Description:
+ // `isprop` is 0, setting one fails with MATLAB:noPublicFieldForClass (R2027a, measured
+ // 2026-10-16), and a dictionary MATLAB writes carries no such key. A key some other writer
+ // left is read here for the Description column and written back exactly as read: nothing
+ // overrides it (`_serializedOverrides` is the inherited empty one), so the file's own bag
+ // passes through. Simulink.FunctionElement is the precedent (ServiceBusNode.ts).
Description: string;
constructor(name: string, parent: BaseNode | null, props: Record, serial: Record) { super(name, parent, serial); this.Description = (props.Description as string) || ''; }
get icon(): string { return 'wsLookup'; }
@@ -14,9 +20,18 @@ export default class LookupTableNode extends SimulinkObjectNode {
// A LookupTable has no scalar "value" — the Value column is empty and not editable.
get displayValue(): string { return ''; }
get valueEditable(): boolean { return false; }
- getProperties(): PropClass[] { return [PropName, PropDataType, PropDescription]; }
+ getProperties(): PropClass[] { return [PropName, PropDataType]; }
// PI layout: schema-driven "General" group (classes/lookupTable.json).
- _serializedOverrides(): Record { return this._gatedProps({ Description: this.Description }); }
+ // No editor in the table (`row._descriptionEditable`) or the Property Inspector.
+ get descriptionEditable(): boolean { return false; }
+ // An edit is refused in MATLAB's words, rather than accepted and saved as a key MATLAB
+ // ignores on load, which is what an edit here used to do.
+ setProperty(propName: string, stringValue: string): true | SetPropertyResult {
+ if (propName === 'Description') {
+ return { error: true, reason: `Unrecognized property 'Description' for class '${CLASS_NAME}'.`, invalidValue: stringValue, validValue: this.Description };
+ }
+ return super.setProperty(propName, stringValue);
+ }
static get defaultName(): string { return 'LookupTable'; }
// MEASURED from what MATLAB R2027a writes for `Simulink.LookupTable` with nothing set, in
// MATLAB's own alphabetical key order. Four nested objects and two scalars, where the bag used
diff --git a/src/datamodel/node/data/SignalNode.ts b/src/datamodel/node/data/SignalNode.ts
index 263a1eaf..2abdf3fe 100644
--- a/src/datamodel/node/data/SignalNode.ts
+++ b/src/datamodel/node/data/SignalNode.ts
@@ -3,7 +3,7 @@
import DataNode, { objectValueClassOf } from '../DataNode.js';
import type { SetPropertyResult } from '../DataNode.js';
import SimulinkObjectNode from '../SimulinkObjectNode.js';
-import type { PropClass } from '../BaseNode.js';
+import type { PropClass, PIGroupDef } from '../BaseNode.js';
import type BaseNode from '../BaseNode.js';
import PropName from '../../prop/PropName.js';
import PropDataType from '../../prop/PropDataType.js';
@@ -11,18 +11,35 @@ import PropMin from '../../prop/PropMin.js';
import PropMax from '../../prop/PropMax.js';
import PropUnit from '../../prop/PropUnit.js';
import PropDescription from '../../prop/PropDescription.js';
+import PropSignalComplexity from '../../prop/PropSignalComplexity.js';
+import PropSignalDimensionsMode from '../../prop/PropSignalDimensionsMode.js';
import { withSourceKeys } from './BaseBusNode.js';
import { schemaColumns } from '../schemaBridge.js';
import { oneWrite, writeUnderWay } from '../../parser/MatWriter.js';
const CLASS_NAME = 'Simulink.Signal';
+// Complexity and DimensionsMode are editable node fields, so the table and the Property Inspector
+// read them through these atoms (the Signal's own enums, auto included) rather than through the
+// schema descriptors, which read the source bag and are labels. In place, by key, so the column
+// order and the schema layout's order stay what the schema authored. The schema keeps both
+// descriptors: Parameter's complexity is one too, and stays a label, derived from its Value.
+const ENUM_ATOMS = new Map([
+ ['complexity', PropSignalComplexity as unknown as PropClass],
+ ['dimensionsMode', PropSignalDimensionsMode as unknown as PropClass],
+]);
+const withEnumAtoms = (props: PropClass[]): PropClass[] => props.map((p) => ENUM_ATOMS.get(p.key) ?? p);
+
export default class SignalNode extends DataNode {
DataType: string;
Min: number | undefined;
Max: number | undefined;
Unit: string;
Description: string;
+ // MATLAB's default for both is 'auto', and a text dictionary leaves the key out at 'auto'
+ // (measured in R2027a), so an absent key reads as 'auto'.
+ Complexity: string;
+ DimensionsMode: string;
constructor(name: string, parent: BaseNode | null, props: Record, serial: Record) {
super(name, parent, serial);
@@ -38,6 +55,8 @@ export default class SignalNode extends DataNode {
this.Max = props.Max as number | undefined;
this.Unit = (props.DocUnits as string) || (props.Unit as string) || '';
this.Description = (props.Description as string) || '';
+ this.Complexity = (props.Complexity as string) || 'auto';
+ this.DimensionsMode = (props.DimensionsMode as string) || 'auto';
}
get icon(): string { return this.isDerived ? 'serviceInterfaces' : 'wsSignal'; }
@@ -56,9 +75,14 @@ export default class SignalNode extends DataNode {
// every Signal in every channel even though all four carry the key.
get dataType(): string { return this.DataType; }
- getProperties(): PropClass[] { return [PropName, withSourceKeys(PropDataType, ['DataType', 'DataType_internal']), PropMin, PropMax, PropUnit, PropDescription, ...schemaColumns(this.className)]; }
- // PI layout is now declarative — see schema/classes/signal.json `layout`,
- // resolved by the inherited BaseNode.getPILayout via buildPILayout.
+ getProperties(): PropClass[] { return [PropName, withSourceKeys(PropDataType, ['DataType', 'DataType_internal']), PropMin, PropMax, PropUnit, PropDescription, ...withEnumAtoms(schemaColumns(this.className))]; }
+ // PI layout is declarative (schema/classes/signal.json `layout`, resolved by buildPILayout),
+ // with the two enum atoms in place of their descriptors, so an edit the table makes shows in
+ // the PI too (ValueTypeNode.getPILayout gives the full account of that gap).
+ getPILayout(): PIGroupDef[] | null {
+ const layout = super.getPILayout();
+ return layout && layout.map((g) => ({ ...g, items: withEnumAtoms(g.items) }));
+ }
setProperty(propName: string, stringValue: string): true | SetPropertyResult {
// Its own shown text, set back, is no edit (DataNode._isUnchangedCommit).
@@ -73,6 +97,15 @@ export default class SignalNode extends DataNode {
if (propName === 'Min' || propName === 'Max') {
return this._setMinMax(propName, stringValue);
}
+ // Complexity and DimensionsMode take only the Signal's own enumerals, as MATLAB does;
+ // the shared check reads the set off the atom the dropdown is built from. Only these
+ // two: Storage Class is a select too, and the schema path refuses it in its own words.
+ if (ENUM_ATOMS.has(propName)) {
+ const notAnEnumeral = this._rejectUnknownEnumeral(propName, stringValue);
+ if (notAnEnumeral) {
+ return notAnEnumeral;
+ }
+ }
return DataNode.prototype.setProperty.call(this, propName, stringValue);
}
@@ -84,6 +117,7 @@ export default class SignalNode extends DataNode {
if ('Max' in sp || this.Max !== undefined) { props.Max = this.Max !== undefined ? this.Max : []; }
if (unitKey in sp || this.Unit) { props[unitKey] = this.Unit; }
if ('Description' in sp || this.Description) { props.Description = this.Description; }
+ Object.assign(props, this._enumOverrides(sp));
return props;
}
@@ -98,9 +132,27 @@ export default class SignalNode extends DataNode {
if ('Max' in sp || this.Max !== undefined) { overrides.Max = this.Max; }
if (unitKey in sp || this.Unit) { overrides[unitKey] = this.Unit; }
if ('Description' in sp || this.Description) { overrides.Description = this.Description; }
+ Object.assign(overrides, this._enumOverrides(sp));
return this._serializeSimulinkObject(overrides);
}
+ // Complexity and DimensionsMode, as both save paths write them: the key when the file had
+ // it, or when the value is not MATLAB's default. MATLAB's text form has a non-default value
+ // as a top-level key and no key at 'auto', even for a Signal set to 'complex' and back
+ // (measured in R2027a), so a Signal whose text file had no key saves with none until it
+ // leaves 'auto'. A key the file had stays, at 'auto' if set there, which MATLAB reads the
+ // same; a binary file always has both keys. A clear stores '' (DataNode._rejectUnknownEnumeral),
+ // which is no value either property has, so it is written as 'auto', what an absent key
+ // means, and never as ''.
+ _enumOverrides(sp: Record): Record {
+ const overrides: Record = {};
+ const complexity = this.Complexity || 'auto';
+ if ('Complexity' in sp || complexity !== 'auto') { overrides.Complexity = complexity; }
+ const dimensionsMode = this.DimensionsMode || 'auto';
+ if ('DimensionsMode' in sp || dimensionsMode !== 'auto') { overrides.DimensionsMode = dimensionsMode; }
+ return overrides;
+ }
+
static get defaultName(): string { return 'Signal'; }
static createDefault(name: string, parent: BaseNode | null): SignalNode {
diff --git a/src/datamodel/node/data/Simulink.Breakpoint.md b/src/datamodel/node/data/Simulink.Breakpoint.md
index 79fe8e6d..30c6a39f 100644
--- a/src/datamodel/node/data/Simulink.Breakpoint.md
+++ b/src/datamodel/node/data/Simulink.Breakpoint.md
@@ -4,8 +4,10 @@
**Node class:** `BreakpointNode` (`src/datamodel/node/data/BreakpointNode.ts`)
**MATLAB class:** `Simulink.Breakpoint`
-**Editable in our UI:** Name, Description, and Storage Class (the table's Storage Class
-column, a 17-value dropdown). Everything else is a read-only projection of the source bag.
+**Editable in our UI:** Name and Storage Class (the table's Storage Class column, a
+17-value dropdown). Everything else is a read-only projection of the source bag. There is
+no Description: MATLAB's class has none, so none is offered and an edit to one is refused
+(see "Description" below).
**Verified against:** MATLAB R2027a (probe_class('Simulink.Breakpoint'))
## Overview
@@ -15,19 +17,19 @@ table blocks. It contains a Breakpoints sub-object (with Value, DataType,
Dimensions, Unit), CoderInfo, StructTypeInfo, and a SupportTunableSize flag. In our
UI the Breakpoint has no scalar value: the Value column is empty and not editable
(`valueEditable = false`). Its Property Inspector groups (from
-`schema/classes/breakpoint.json`) are General (Name, Value, Data Type, Kind, Class,
-Description), Code Generation (Storage Class and the three StructTypeInfo keys under their
+`schema/classes/breakpoint.json`) are General (Name, Value, Data Type, Kind, Class),
+Code Generation (Storage Class and the three StructTypeInfo keys under their
MATLAB labels Name / Data Scope / Header File) and Advanced (Support Tunable Size) — plus
the "Other" catch-all for what stays unmodelled. There is no Value Properties group,
-because a Breakpoint has no `BreakpointsSpecification`. Every PI row but Name and
-Description is a label; Storage Class is editable in the TABLE, not the PI.
+because a Breakpoint has no `BreakpointsSpecification`. Every PI row but Name is a
+label; Storage Class is editable in the TABLE, not the PI.
## Property table
| Property | MATLAB type | SetAccess | Editable here | Serialized key (JSON / binary) | Editor | Allowed values / constraint |
|---------------------|-----------------------------------|-----------|---------------|--------------------------------|--------|-----------------------------|
| Name | char | (entry) | yes | name / name | text | Valid MATLAB identifier, unique in namespace |
-| Description | char | public | yes | (nested or top-level) | text | Any string |
+| Description | — (not a property) | — | no (refused) | top-level key, only as read | — | A key the file already has is shown read-only and kept |
| Breakpoints | Simulink.lookuptable.Breakpoint | public | no | Breakpoints / Breakpoints | — | Sub-object (Value, DataType, Dimensions, Unit, FieldName) |
| CoderInfo | Simulink.CoderInfo | protected | no | CoderInfo / CoderInfo | — | Sub-object |
| StructTypeInfo | Simulink.lookuptable.StructTypeInfo | public | no | StructTypeInfo / StructTypeInfo | — | Sub-object (DataScope, HeaderFileName, Name) |
@@ -55,10 +57,23 @@ parentheses where the two differ.
### Description
-- The Breakpoint's Description (when present) is stored at the top level or
- within nested sub-objects. Non-string assignment in MATLAB produces "Value must be
- a character vector or a string scalar." — unreachable from our string editor.
- Type-guarded by the string editor.
+- `Simulink.Breakpoint` has no Description property. In MATLAB R2027a (27.1.0.3409468,
+ measured 2026-10-16) `isprop(Simulink.Breakpoint, 'Description')` is 0, and setting one
+ fails with MATLAB:noPublicFieldForClass, "Unrecognized property 'Description' for class
+ 'Simulink.Breakpoint'." A dictionary MATLAB writes carries no top-level Description key,
+ in either format. The `Breakpoints` sub-object has a Description of its own; that one is
+ nested, unmodelled, and passes through as read.
+- So none is offered, as for `Simulink.FunctionElement`: Description is not in
+ `getProperties` or in the General group, `descriptionEditable` is false (the table cell
+ has no editor), and `setProperty('Description', …)` is refused in MATLAB's words and
+ leaves the entry unmodified. It used to be offered, accepted, and written as a top-level
+ key.
+- A top-level Description key the file already has (written by another tool, or by this
+ package before the change) is shown read-only, in the Description column and in the
+ Property Inspector's "Other" group, and is written back as read on both save paths.
+ MATLAB opens such a file cleanly and ignores the key: measured in both formats with a key
+ added by hand and with our former writer's output, 14 of 14 entries read and no warning.
+ Test: `test/lutBreakpointNoDescription.test.ts`.
### Sub-objects
@@ -127,7 +142,9 @@ unmodelled.
identifier, unique in namespace, max 63 chars, not a keyword).
Test: `test/parity/fidelity/typedef.fidelity.test.ts`.
-- No additional validation for Description (any string accepted).
+- Description: refused outright by `BreakpointNode.setProperty`, with MATLAB's message,
+ because the class has no such property.
+ Test: `test/lutBreakpointNoDescription.test.ts`.
- `storageClass`: enforced by `trySetSchemaProperty` against this class's own 17-value
`options` list — the only one of the five with a write path at all. A value outside the
@@ -146,7 +163,9 @@ unmodelled.
Test: `test/parity/fidelity/typedef.fidelity.test.ts` (json format loop).
- Binary sldd: same.
Test: `test/parity/fidelity/typedef.fidelity.test.ts` (binary format loop).
-- MATLAB gate: Description edit → MATLAB reads back. PASS.
+- MATLAB gate: none for Description, which MATLAB does not have. An earlier line here read
+ "Description edit → MATLAB reads back. PASS.", but that gate asserted only the class.
+ A file carrying a top-level Description key opens in MATLAB, and the key is ignored.
- The five flat properties, in-process only: a configured Breakpoint renders all five,
including the two that travel through a nested sub-object, and a `storageClass` write
lands at `CoderInfo.StorageClass`. **No MATLAB re-open gate was run for any of the five.**
@@ -154,14 +173,6 @@ unmodelled.
## Open questions / deferred
-- **Description not a MATLAB property**: MATLAB's Simulink.Breakpoint does NOT
- expose a top-level `Description` property (attempting `obj.Description` errors:
- "Unrecognized method, property, or field 'Description' for class
- 'Simulink.Breakpoint'"). Our node stores/restores Description via the JSON
- `_properties` for in-process round-trip fidelity, but the MATLAB gate cannot
- assert it via the standard property-read path. The field is preserved in the
- serialized file but is not accessible from the MATLAB API at the top level.
-
- **Breakpoint array editing**: The numeric data in Breakpoints.Value is a 1-D
array that requires a dedicated editor UX. Not exposed via the scalar text
editor; fully deferred.
diff --git a/src/datamodel/node/data/Simulink.LookupTable.md b/src/datamodel/node/data/Simulink.LookupTable.md
index c63e26f5..3be11472 100644
--- a/src/datamodel/node/data/Simulink.LookupTable.md
+++ b/src/datamodel/node/data/Simulink.LookupTable.md
@@ -4,8 +4,10 @@
**Node class:** `LookupTableNode` (`src/datamodel/node/data/LookupTableNode.ts`)
**MATLAB class:** `Simulink.LookupTable`
-**Editable in our UI:** Name, Description, and Storage Class (the table's Storage Class
-column, a 17-value dropdown). Everything else is a read-only projection of the source bag.
+**Editable in our UI:** Name and Storage Class (the table's Storage Class column, a
+17-value dropdown). Everything else is a read-only projection of the source bag. There is
+no Description: MATLAB's class has none, so none is offered and an edit to one is refused
+(see "Description" below).
**Verified against:** MATLAB R2027a (probe_class('Simulink.LookupTable'))
## Overview
@@ -15,18 +17,18 @@ blocks. It contains a Table sub-object, one or more Breakpoint sub-objects,
CoderInfo, StructTypeInfo, and configuration flags. In our UI the LookupTable has no
scalar value: the Value column is empty and not editable (`valueEditable = false`). Its
Property Inspector groups (from `schema/classes/lookupTable.json`) are General (Name,
-Value, Data Type, Kind, Class, Description), Value Properties (Breakpoints
+Value, Data Type, Kind, Class), Value Properties (Breakpoints
Specification), Code Generation (Storage Class, and the three StructTypeInfo keys under
their MATLAB labels Name / Data Scope / Header File) and Advanced (the two tunable-size
switches) — plus the "Other" catch-all for what stays unmodelled. Every PI row but Name
-and Description is a label; Storage Class is editable in the TABLE, not the PI.
+is a label; Storage Class is editable in the TABLE, not the PI.
## Property table
| Property | MATLAB type | SetAccess | Editable here | Serialized key (JSON / binary) | Editor | Allowed values / constraint |
|---------------------|------------------------------|-----------|---------------|--------------------------------|--------|-----------------------------|
| Name | char | (entry) | yes | name / name | text | Valid MATLAB identifier, unique in namespace |
-| Description | char | public | yes | (nested in sub-objects) | text | Any string |
+| Description | — (not a property) | — | no (refused) | top-level key, only as read | — | A key the file already has is shown read-only and kept |
| Table | Simulink.lookuptable.Table | public | no | Table / Table | — | Sub-object (Value, DataType, Dimensions, Unit, FieldName) |
| Breakpoints | Simulink.lookuptable.Breakpoint | public | no | Breakpoints / Breakpoints | — | Sub-object (Value, DataType, Dimensions, Unit, FieldName) |
| CoderInfo | Simulink.CoderInfo | protected | no | CoderInfo / CoderInfo | — | Sub-object |
@@ -56,10 +58,23 @@ in parentheses where the two differ.
### Description
-- The LookupTable's Description property is stored at the top-level _properties
- (when present). Non-string assignment in MATLAB produces "Value must be a
- character vector or a string scalar." — unreachable from our string editor.
- Type-guarded by the string editor.
+- `Simulink.LookupTable` has no Description property. In MATLAB R2027a (27.1.0.3409468,
+ measured 2026-10-16) `isprop(Simulink.LookupTable, 'Description')` is 0, and setting one
+ fails with MATLAB:noPublicFieldForClass, "Unrecognized property 'Description' for class
+ 'Simulink.LookupTable'." A dictionary MATLAB writes carries no top-level Description key,
+ in either format. The `Table` and `Breakpoints` sub-objects each have a Description of
+ their own; those are nested, unmodelled, and pass through as read.
+- So none is offered, as for `Simulink.FunctionElement`: Description is not in
+ `getProperties` or in the General group, `descriptionEditable` is false (the table cell
+ has no editor), and `setProperty('Description', …)` is refused in MATLAB's words and
+ leaves the entry unmodified. It used to be offered, accepted, and written as a top-level
+ key.
+- A top-level Description key the file already has (written by another tool, or by this
+ package before the change) is shown read-only, in the Description column and in the
+ Property Inspector's "Other" group, and is written back as read on both save paths.
+ MATLAB opens such a file cleanly and ignores the key: measured in both formats with a key
+ added by hand and with our former writer's output, 14 of 14 entries read and no warning.
+ Test: `test/lutBreakpointNoDescription.test.ts`.
### Sub-objects
@@ -175,7 +190,9 @@ read-only and unmodelled.
identifier, unique in namespace, max 63 chars, not a keyword).
Test: `test/parity/fidelity/typedef.fidelity.test.ts`.
-- No additional validation for Description (any string accepted).
+- Description: refused outright by `LookupTableNode.setProperty`, with MATLAB's message,
+ because the class has no such property.
+ Test: `test/lutBreakpointNoDescription.test.ts`.
- `storageClass`: enforced by `trySetSchemaProperty` against the class's own 17-value
`options` list, returning `{ error: true, reason: 'Invalid value for Storage Class' }` on
@@ -194,7 +211,9 @@ read-only and unmodelled.
Test: `test/parity/fidelity/typedef.fidelity.test.ts` (json format loop).
- Binary sldd: same.
Test: `test/parity/fidelity/typedef.fidelity.test.ts` (binary format loop).
-- MATLAB gate: Description edit → MATLAB reads back. PASS.
+- MATLAB gate: none for Description, which MATLAB does not have. An earlier line here read
+ "Description edit → MATLAB reads back. PASS.", but that gate asserted only the class.
+ A file carrying a top-level Description key opens in MATLAB, and the key is ignored.
- The six flat properties, in-process only: a LookupTable that carries them renders every
value including the two nested paths; one that omits them renders each descriptor
default; and both bags keep exactly the keys they arrived with on both save paths after
@@ -204,14 +223,6 @@ read-only and unmodelled.
## Open questions / deferred
-- **Description not a MATLAB property**: MATLAB's Simulink.LookupTable does NOT
- expose a top-level `Description` property (attempting `obj.Description` errors:
- "Unrecognized method, property, or field 'Description' for class
- 'Simulink.LookupTable'"). Our node stores/restores Description via the JSON
- `_properties` for in-process round-trip fidelity, but the MATLAB gate cannot
- assert it via the standard property-read path. The field is preserved in the
- serialized file but is not accessible from the MATLAB API at the top level.
-
- **Table/Breakpoint array editing**: The numeric data in Table.Value and
Breakpoints[].Value is complex multi-dimensional data that requires a dedicated
editor UX. Not exposed via the scalar text editor; fully deferred.
diff --git a/src/datamodel/node/data/Simulink.Parameter.md b/src/datamodel/node/data/Simulink.Parameter.md
index d4de5e7d..706fe93e 100644
--- a/src/datamodel/node/data/Simulink.Parameter.md
+++ b/src/datamodel/node/data/Simulink.Parameter.md
@@ -30,6 +30,7 @@ schema-projected CoderInfo columns (StorageClass, Alias, etc.).
| Complexity | char (enum) | public | no (hidden) | Complexity / Complexity | — | 'real' or 'complex' |
| Dimensions | double row vector | public | no | Dimensions / Dimensions | — | Positive integer row vector |
| StorageClass | char (enum) | public | yes (schema) | CoderInfo.StorageClass | combo | schemaBridge-validated |
+| Alignment | int32 | public | yes (schema), not under StorageClass `Auto` | CoderInfo.Alignment | text | -1 or a power of two from 1 to 2^30; see CodeGeneration.schema-columns.md |
| CoderInfo | Simulink.CoderInfo | protected | nested | CoderInfo / CoderInfo | — | Sub-object, not directly assigned |
## Non-obvious behavior (the reason this doc exists)
diff --git a/src/datamodel/node/data/Simulink.Signal.md b/src/datamodel/node/data/Simulink.Signal.md
index 8d3f2759..a6a46f68 100644
--- a/src/datamodel/node/data/Simulink.Signal.md
+++ b/src/datamodel/node/data/Simulink.Signal.md
@@ -16,8 +16,10 @@ dimensions, sampling mode, etc.) that a Simulink model can reference. Unlike
and `valueEditable` is `false`.
The only directly-editable numeric properties surfaced in our UI are **Min** and
-**Max** (validated by `_setMinMax` on `DataNode`). All other properties are either
-read-only labels or delegated to the schema bridge (Code Generation columns).
+**Max** (validated by `_setMinMax` on `DataNode`). **Complexity** and
+**DimensionsMode** are editable dropdowns over the Signal's own enums (validated by
+`_rejectUnknownEnumeral` on `DataNode`). All other properties are either read-only
+labels or delegated to the schema bridge (Code Generation columns).
## Property table
@@ -30,8 +32,8 @@ read-only labels or delegated to the schema bridge (Code Generation columns).
| Unit | char | public | no | DocUnits or Unit | label | unit expression (parser too complex to mirror) |
| Description | char | public | yes | Description | textArea | any string |
| Dimensions | double/char | public | no | — | — | not an editable column (complex multi-type acceptance) |
-| DimensionsMode | char (enum) | public | no | — | — | enum {Fixed, Variable, auto}; not surfaced as editable column |
-| Complexity | char (enum) | public | no | — | — | enum {real, complex, auto}; not surfaced as editable column |
+| DimensionsMode | char (enum) | public | yes | DimensionsMode | select | enum {auto, Fixed, Variable}; default auto |
+| Complexity | char (enum) | public | yes | Complexity | select | enum {auto, real, complex}; default auto |
| SampleTime | double | public | no | — | — | not surfaced |
| SamplingMode | char (enum) | public | no | — | — | enum {auto}; not surfaced |
| InitialValue | char | public | no | — | — | free-form char; not surfaced as editable column |
@@ -87,8 +89,29 @@ These accept only specific tokens (case-insensitive on first char for some):
- **Complexity**: `real`, `complex`, `auto`. Same error pattern.
- **SamplingMode**: `auto` only. Same error pattern.
-These are NOT editable columns in our UI — they are either non-projected or
-read-only. Validation not mirrored.
+Measured in R2027a (27.1.0.3409468, 2026-10-16): `set(Simulink.Signal, 'Complexity')`
+is `auto|real|complex` and `set(Simulink.Signal, 'DimensionsMode')` is
+`auto|Fixed|Variable`, both defaulting to `auto`, and `mpt.Signal` has the same two.
+`''` is refused too. A text `.sldd` holds a non-default value as a top-level key
+(`"Complexity": "complex"`) and has no key at `auto`, even for a Signal set to
+`complex` and back; a binary one always holds the key
+(`
auto
`).
+
+**Complexity** and **DimensionsMode** are editable dropdowns (C-030, the 2026-10-16
+group E ruling): `PropSignalComplexity` and `PropSignalDimensionsMode`, in the table
+and in the Property Inspector, both reading the node field. `setProperty` refuses any
+other value with MATLAB's message. Two deliberate differences:
+- MATLAB matches case-insensitively and stores the canonical spelling (`'Complex'` →
+ `complex`, `'fixed'` → `Fixed`). We match exactly, as for BusElement and ValueType;
+ the dropdown only offers canonical spellings.
+- An empty value is a CLEAR (the licence `_rejectUnknownEnumeral` gives every enum),
+ so an undo of an edit can restore absence. It shows and saves as `auto`, never as `''`.
+
+Both save paths write the key when the file had it or the value is not `auto`, so an
+untouched Signal, or one set back to `auto`, saves with no new key, as MATLAB does.
+Test: `test/signalEnumProps.test.ts`.
+
+**SamplingMode** is still a label; its validation is not mirrored.
### Dimensions — complex multi-type
@@ -110,9 +133,13 @@ validation is not mirrored.
which enforces the finite-real-double-scalar rule. Returns
`{error, reason: "
\n \n ',
+ },
+] as const;
+type Case = (typeof CASES)[number];
+
+function fixture(format: Format): Uint8Array {
+ return new Uint8Array(readFileSync(fileURLToPath(new URL(`./fixtures/classes_r2027a_${format}.sldd`, import.meta.url))));
+}
+
+// The text dictionary's entry list, and the binary one's chunk XML, of whatever bytes a save gave.
+function textEntries(text: string): any[] {
+ return JSON.parse(text).__MW_TEXT_PARTS__['__MW_TEXT_PART__/data/chunk0'].__MW_TEXT_content.entries as any[];
+}
+function chunkXml(bytes: Uint8Array): string {
+ return strFromU8(unzipSync(bytes)['data/chunk0.xml']);
+}
+// The `` of one entry, as the binary file spells it.
+function bankXml(xml: string, entry: string, CLASS: string): string {
+ const at = xml.indexOf(`
${entry}
`);
+ expect(at, `no entry ${entry} in the chunk`).toBeGreaterThan(-1);
+ const open = xml.indexOf(``, at);
+ const close = xml.indexOf('', at);
+ expect(open > at && open < close, `${entry} is not a ${CLASS}`).toBe(true);
+ return xml.slice(open, close);
+}
+
+// The entry with a sibling Value 'b1' added to its bytes, in the place and the spelling this
+// package's old writer put one (MATLAB, given that file, opened it without a warning). Added to
+// the bytes, so the reader is what puts it in the node's bag.
+function withValue({ CLASS, ENTRY, envelopeEnd }: Case, format: Format, text: string): Uint8Array | string {
+ const bytes = fixture(format);
+ if (format === 'text') {
+ const json = JSON.parse(strFromU8(bytes));
+ const entries = json.__MW_TEXT_PARTS__['__MW_TEXT_PART__/data/chunk0'].__MW_TEXT_content.entries as any[];
+ const elem = entries.find((e) => e.name === ENTRY).value._elements[0] as Record;
+ expect(elem).not.toHaveProperty('_properties');
+ expect(elem).toHaveProperty('_custom_save');
+ elem._properties = { Value: text };
+ return JSON.stringify(json, null, '\t');
+ }
+ const parts = unzipSync(bytes);
+ const xml = strFromU8(parts['data/chunk0.xml']);
+ expect(xml.split(envelopeEnd).length - 1, `one ${CLASS} envelope in the binary fixture`).toBe(1);
+ parts['data/chunk0.xml'] = strToU8(
+ xml.replace(envelopeEnd, `${envelopeEnd}\n
${text}
`),
+ );
+ return zipSync(parts);
+}
+
+function entryIn(root: any, name: string): DataNode {
+ const stack = [root];
+ while (stack.length) {
+ const n = stack.shift();
+ if (n?.name === name && n.className && !String(n.id ?? '').startsWith('section:')) {
+ return n as DataNode;
+ }
+ stack.push(...(n?.children ?? []));
+ }
+ throw new Error(`no entry "${name}"`);
+}
+
+function open(content: Uint8Array | string) {
+ const session = createSession();
+ const source: any = ingest(session, content, { filename: 'classes.sldd' });
+ return { session, source };
+}
+
+function saved(session: any, source: any): Uint8Array | string {
+ const out = session.serializeSource(source.name) as SerializedSource;
+ return out.kind === 'binary' ? out.bytes : out.text;
+}
+
+// What a save wrote for the entry: its bag as the reader reads the saved file back, and the
+// entry's own spelling in that file (the text entry's element, or the binary entry's XML).
+function savedEntry(content: Uint8Array | string, entry: string, CLASS: string) {
+ const bag = (entryIn(open(content).source, entry) as any).serial._properties as Record;
+ const spelled =
+ typeof content === 'string'
+ ? JSON.stringify(textEntries(content).find((e) => e.name === entry).value)
+ : bankXml(chunkXml(content), entry, CLASS);
+ return { bag, spelled };
+}
+
+// The two save paths, each reduced to the bag it puts in the file.
+const binaryPath = (node: DataNode) => node._getSerializedProperties();
+const textElem = (node: DataNode) => JSON.parse(JSON.stringify((node.serializeValue() as any)._elements[0])) as Record;
+
+function piValue(node: DataNode) {
+ const pi = node.toPIObject()!;
+ const item = (pi.propertySheet.properties as any[]).find((p) => p.name === 'Value');
+ return { shown: (pi.objects[0] as Record).Value, editable: item.editable };
+}
+
+function expectRefused(CLASS: string, node: DataNode, text: string) {
+ const result = node.setProperty('Value', text);
+ expect(result).not.toBe(true);
+ expect(result).toMatchObject({
+ error: true,
+ reason: `'${node.name}' is a ${CLASS}, which has no Value, so none can be set on it.`,
+ invalidValue: text,
+ validValue: node.displayValue,
+ });
+}
+
+for (const c of CASES) {
+ const { CLASS, Node, what, ENTRY, RENAMED } = c;
+ describe(`${CLASS} has no Value`, () => {
+ for (const format of FORMATS) {
+ describe(`${ENTRY}, ${what} MATLAB wrote, ${format} dictionary`, () => {
+ it('shows no Value, and offers no editor in the table or the Property Inspector', () => {
+ const node = entryIn(open(fixture(format)).source, ENTRY);
+ expect(node.className).toBe(CLASS);
+ // Not `''`, which is a char value the class does not have.
+ expect(node.displayValue).toBe('');
+ expect(node.valueEditable).toBe(false);
+ const row = node.toRow()!;
+ expect(row.Value).toBe('');
+ expect(row._valueEditable).toBe(false);
+ expect(piValue(node)).toEqual({ shown: '', editable: false });
+ });
+
+ it('refuses a Value edit, and no save writes one', () => {
+ const { session, source } = open(fixture(format));
+ const node = entryIn(source, ENTRY);
+
+ expectRefused(CLASS, node, 'x');
+ // The quoted form the cell would have been seeded with, and the empty text it shows.
+ expectRefused(CLASS, node, "'x'");
+ expectRefused(CLASS, node, '');
+ expect(node.status).not.toBe('Modified');
+ expect(node.displayValue).toBe('');
+ expect(binaryPath(node)).not.toHaveProperty('Value');
+ expect(textElem(node)).not.toHaveProperty('_properties');
+
+ // A rename rewrites the entry from the node, so the save reaches the writer (a binary
+ // entry nobody edited is written as the bytes it was read from).
+ expect(node.setProperty('Name', RENAMED)).toBe(true);
+ const { bag, spelled } = savedEntry(saved(session, source), RENAMED, CLASS);
+ expect(bag).not.toHaveProperty('Value');
+ expect(spelled).not.toContain('"Value"');
+ expect(spelled).not.toContain('
{
+ // A guard: this held before the ruling too, because an EMPTY Value was never written
+ // under an envelope (DataNode._mergeProps). It pins that the change keeps it so.
+ const read = open(fixture(format));
+ const before = JSON.parse(JSON.stringify((entryIn(read.source, ENTRY) as any).serial._properties));
+ const untouched = saved(read.session, read.source);
+ if (format === 'text') {
+ expect(untouched).toBe(strFromU8(fixture('text')));
+ }
+ expect(savedEntry(untouched, ENTRY, CLASS).bag).toEqual(before);
+
+ expect(entryIn(read.source, ENTRY).setProperty('Name', RENAMED)).toBe(true);
+ const renamed = saved(read.session, read.source);
+ expect(savedEntry(renamed, RENAMED, CLASS).bag).toEqual(before);
+ const ownSpelling = savedEntry(renamed, RENAMED, CLASS).spelled;
+ if (format === 'text') {
+ const original = textEntries(strFromU8(fixture('text'))).find((e) => e.name === ENTRY).value;
+ expect(JSON.parse(ownSpelling)).toEqual(original);
+ } else {
+ // The writer's own XML spelling of the envelope (an empty cell as an open and a close
+ // tag, say) is not this item's; what is, is that nothing beside the envelope is added.
+ expect(ownSpelling).toContain('
> = {
+ 'Simulink.VariantBank': {
+ ActiveChoiceCoderInfo: '',
+ AllChoicesCoderInfo: '',
+ BankCoderInfo: '',
+ Description: '',
+ Name: '',
+ VariantConditions: { _array_type: 'Cell', _dimensions: [1, 0], _elements: [], _mw_element_type: 'MATLABArray' },
+ },
+ 'Simulink.VariantBankCoderInfo': {
+ DefinitionFile: '',
+ HeaderFile: '',
+ PostStatement: '',
+ PreStatement: '',
+ Qualifier: 'None',
+ },
+};
+
+// The text fixture with one case's entry (vbD or vbciD) rewritten into that form, the other left as
+// MATLAB wrote it, spelled as the fixture is (tabs) so that a save changing nothing gives these
+// bytes back.
+function withoutEnvelope({ CLASS, ENTRY }: Case): string {
+ const json = JSON.parse(strFromU8(fixture('text')));
+ const entries = json.__MW_TEXT_PARTS__['__MW_TEXT_PART__/data/chunk0'].__MW_TEXT_content.entries as any[];
+ const value = entries.find((e) => e.name === ENTRY).value;
+ expect(value._array_class).toBe(CLASS);
+ expect(value._elements[0]).toHaveProperty('_custom_save');
+ value._elements[0] = { _id: value._elements[0]._id, _properties: NO_ENVELOPE[CLASS] };
+ return JSON.stringify(json, null, '\t');
+}
+
+describe('a bank held with no saveobj envelope, as the corpus text dictionaries hold one', () => {
+ // The envelope cases above cannot see the writer's Value: under an envelope `_mergeProps` drops
+ // an EMPTY override, so the `{ Value: '' }` the node used to return never reached the file. With
+ // no envelope it did, and an unedited save added `"Value": ""` to every such bank and bank coder
+ // info. This pins that a save adds nothing, the unedited one included.
+ for (const c of CASES) {
+ const { CLASS, ENTRY, RENAMED } = c;
+ it(`${CLASS}: an unedited save writes no Value, and gives the file back as it was read`, () => {
+ const input = withoutEnvelope(c);
+ const { session, source } = open(input);
+ const node = entryIn(source, ENTRY);
+ expect(node.className).toBe(CLASS);
+ // The reader takes the bag as the file holds it: no Value.
+ expect((node as any).serial._properties).toEqual(NO_ENVELOPE[CLASS]);
+ expect(node.displayValue).toBe('');
+
+ // The save, where the old writer's `"Value": ""` appeared: the entry as read, and the whole file.
+ const out = saved(session, source) as string;
+ const elem = textEntries(out).find((e) => e.name === ENTRY).value._elements[0];
+ expect(elem._properties).not.toHaveProperty('Value');
+ expect(elem).toEqual({ _id: '1', _properties: NO_ENVELOPE[CLASS] });
+ expect(out).toBe(input);
+
+ // Both save paths, each reduced to the bag it puts in the file.
+ expect(textElem(node)._properties).toEqual(NO_ENVELOPE[CLASS]);
+ expect(binaryPath(node)).not.toHaveProperty('Value');
+ });
+
+ it(`${CLASS}: a save after a rename writes no Value either`, () => {
+ const { session, source } = open(withoutEnvelope(c));
+ expect(entryIn(source, ENTRY).setProperty('Name', RENAMED)).toBe(true);
+ const { bag, spelled } = savedEntry(saved(session, source), RENAMED, CLASS);
+ expect(spelled).not.toContain('"Value"');
+ expect(bag).toEqual(NO_ENVELOPE[CLASS]);
+ });
+ }
+});
diff --git a/test/variantLeafNodes.test.ts b/test/variantLeafNodes.test.ts
index 9d0a2dce..c4289815 100644
--- a/test/variantLeafNodes.test.ts
+++ b/test/variantLeafNodes.test.ts
@@ -6,7 +6,8 @@
// atom, and each has to write that live field back through
// _serializeSimulinkObject or an edit is silently dropped on save. They are
// near-identical by design, so the shared contract is tested as a table and only
-// the per-class differences get their own cases.
+// the per-class differences get their own cases. A class whose MATLAB class has no
+// such property takes no edit of it (READ_ONLY below).
import { describe, it, expect } from 'vitest';
import '../src/datamodel/node/data/NodeClassMap.js';
@@ -40,6 +41,12 @@ const LEAVES = [
{ cls: 'CustomObject', Node: CustomObjectNode, prop: 'Description', icon: 'ws3d', kind: 'CustomObject' },
] as const;
+// The classes whose one property MATLAB's class does not have, so the node shows a key a file
+// already carries but takes no edit of it: Simulink.VariantBank has no Value, and nor has
+// Simulink.VariantBankCoderInfo (R2027a; the 2026-10-16 ruling, group E, C-168 and C-169).
+// test/variantBankNoValue.test.ts covers both over the entries MATLAB wrote.
+const READ_ONLY = new Set(['Simulink.VariantBank', 'Simulink.VariantBankCoderInfo']);
+
// The `_array_class` a NEW entry is written with, where it differs from the class the node
// reports for a parsed one. Exactly one class differs, and it differs for a reason MATLAB
// enforced: a dictionary's config section accepts the CONTAINER class
@@ -71,13 +78,21 @@ describe('single-property leaf nodes — shared contract', () => {
expect(parsed()[prop]).toBe('');
});
- it('writes an edit back through the array wrapper', () => {
- // _serializeSimulinkObject rebuilds _elements[0]._properties from the live
- // field; without it the loaded raw value is written and the edit vanishes.
- const n = parsed({ [prop]: 'old', Untouched: 7 });
- expect(n.setProperty(prop, 'new')).toBe(true);
- expect(n.serializeValue()).toEqual(wrap(cls, { [prop]: 'new', Untouched: 7 }));
- });
+ if (READ_ONLY.has(cls)) {
+ it('refuses an edit, and writes the property back as it was read', () => {
+ const n = parsed({ [prop]: 'old', Untouched: 7 });
+ expect(n.setProperty(prop, 'new')).toMatchObject({ error: true });
+ expect(n.serializeValue()).toEqual(wrap(cls, { [prop]: 'old', Untouched: 7 }));
+ });
+ } else {
+ it('writes an edit back through the array wrapper', () => {
+ // _serializeSimulinkObject rebuilds _elements[0]._properties from the live
+ // field; without it the loaded raw value is written and the edit vanishes.
+ const n = parsed({ [prop]: 'old', Untouched: 7 });
+ expect(n.setProperty(prop, 'new')).toBe(true);
+ expect(n.serializeValue()).toEqual(wrap(cls, { [prop]: 'new', Untouched: 7 }));
+ });
+ }
it('createDefault produces a node that serializes to a valid wrapper', () => {
const n = (Node as any).createDefault('n', null);
@@ -98,7 +113,9 @@ describe('single-property leaf nodes — shared contract', () => {
});
describe('per-class display differences', () => {
- it('VariantBank and VariantBankCoderInfo quote their Value like MATLAB', () => {
+ it('VariantBank and VariantBankCoderInfo show a Value their file carries quoted', () => {
+ // Neither MATLAB class has a Value (READ_ONLY above); this is the key only this package's
+ // old writer put in a file, shown read-only.
for (const Node of [VariantBankNode, VariantBankCoderInfoNode]) {
const n = Node.parse(wrap('Simulink.VariantBank', { Value: 'b1' }), 'n', null) as any;
expect(n.displayValue).toBe("'b1'");
@@ -195,10 +212,10 @@ describe('REGRESSION: a quoted display round-trips through an edit', () => {
// edit wrapped them again ('a == 1' → ''a == 1'' → …), until the saved .sldd
// held a condition MATLAB could no longer evaluate. Note the edit is committed
// in the 'Value' COLUMN, which is how the table addresses these props.
+ // Simulink.VariantBank was a row here until it stopped taking a Value edit at all (READ_ONLY).
const QUOTED = [
{ cls: 'Simulink.VariantExpression', Node: VariantExpressionNode, prop: 'Condition', raw: "strcmp(mode,'fast')" },
{ cls: 'Simulink.VariantVariable', Node: VariantVariableNode, prop: 'Specification', raw: "p('x')" },
- { cls: 'Simulink.VariantBank', Node: VariantBankNode, prop: 'Value', raw: "bank'1" },
] as const;
for (const { cls, Node, prop, raw } of QUOTED) {