@memberjunction/ng-dashboards 5.45.1 → 5.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +33 -0
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +69 -2
- package/dist/PredictiveStudio/at-risk.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-catalog.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-catalog.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-compare.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-compare.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-home.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-home.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-operate-dialog.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-operate-dialog.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +306 -297
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-production.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.d.ts +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.js +15 -9
- package/dist/PredictiveStudio/components/ps-registry.component.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +115 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js +119 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-copilot.view-models.d.ts +36 -0
- package/dist/PredictiveStudio/predictive-studio-copilot.view-models.d.ts.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-copilot.view-models.js +52 -0
- package/dist/PredictiveStudio/predictive-studio-copilot.view-models.js.map +1 -0
- package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts +9 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.js +133 -56
- package/dist/PredictiveStudio/resources/ps-models-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +50 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +591 -165
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.d.ts +17 -0
- package/dist/PredictiveStudio/resources/ps-resource-base.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.js +27 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts +11 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +199 -99
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/package.json +59 -59
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps-pipelines.component.js","sourceRoot":"","sources":["../../../src/PredictiveStudio/components/ps-pipelines.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAU,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC7H,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAA8B,mCAAmC,EAAE,MAAM,+BAA+B,CAAC;;;;;;;;;;IAyFtG,AADF,8BAAuD,cAC1B;IAAA,uBAA2C;IAAA,iBAAO;IAC7E,0BAAI;IAAA,yCAAyB;IAAA,iBAAK;IAClC,yBAAG;IACD,kSAGF;IAAA,iBAAI;IACJ,iCACyC;IAAvC,wLAAS,0CAA4B,KAAC;IACtC,uBAAiC;IAAC,4CACpC;IACF,AADE,iBAAS,EACL;;;;IAKF,kCACiE;IAA/B,sNAAS,8BAAoB,KAAC;IAC9D,uBAA2C;IAAC,YAC5C;IAAA,gCAAuD;IAAA,YAAc;IACvE,AADuE,iBAAO,EACrE;;;;IAJe,qDAAkC;IAEZ,eAC5C;IAD4C,0CAC5C;IAAuB,cAA+B;IAA/B,8CAA+B;IAAC,cAAc;IAAd,iCAAc;;;IAI3D,+BAA4D;IAAA,wBAA+B;IAAC,wBAAO;IAAA,iBAAO;;;;IAgChH,uBAAuC;;;;;;;IAUpB,gCAAqB;IAAA,YAAc;IAAA,iBAAO;;;IAArB,cAAc;IAAd,iCAAc;;;IAI9B,AAApB,+BAAoB,eAAgB;IAAA,YAAW;IAAA,iBAAO;IAAA,4BAAM;IAAA,YAAW;IAAO,AAAP,iBAAO,EAAM;;;IAAhD,eAAW;IAAX,8BAAW;IAAa,eAAW;IAAX,8BAAW;;;IAGxD,2BAA6B;;;IAC5B,2BAA8B;;;;IAdpD,+BAEiF;IAA9B,uNAAS,6BAAmB,KAAC;IAC9E,+BAAgB;IACd,wBAA0C;IAC1C,4BAAM;IAAA,YAAgB;IAAA,iBAAO;IAC7B,6GAAgB;IAClB,iBAAM;IACN,+BAAgB;IACd,6GAEC;IACH,iBAAM;IACN,6GAAkB;IAClB,+GAAmB;IACrB,iBAAM;;;;IAbqB,AAAzB,uCAAwB,wBAAwB;IAD1B,4DAAyC;IAA/D,sCAAqB;;IAGH,eAAqB;IAArB,sCAAqB;IAC/B,eAAgB;IAAhB,mCAAgB;IACtB,cAA6D;IAA7D,sCAA6D;IAG7D,eAEC;IAFD,2BAEC;IAEH,eAAkD;IAAlD,wCAAkD;IAClD,cAAoD;IAApD,0CAAoD;;;;IA0BpD,kCAA4G;IAA3B,yMAAS,uBAAgB,KAAC;IAAC,wBAAiC;IAAA,iBAAS;;;IAQ/G,kCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IAF5C,AAAtB,+BAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IACvC,kCAA2G;IAApD,iNAAU,yCAAwC,KAAC;IACxG,0IAAyE;IAE7E,AADE,iBAAS,EACL;IACgB,AAAtB,+BAAsB,YAAO;IAAA,+CAA+B;IAAA,iBAAQ;IAClE,iCAAqH;IAApD,8MAAS,wCAAuC,KAAC;IACpH,AADE,iBAAqH,EACjH;IACgB,AAAtB,gCAAsB,aAAO;IAAA,iCAAgB;IAAA,iBAAQ;IACnD,kCAA+H;IAAtD,+MAAS,0CAAyC,KAAC;IAC9H,AADE,iBAA+H,EAC3H;;;IATqB,eAA6B;IAA7B,kDAA6B;IACpD,cAAyE;IAAzE,iCAAyE;IAIvC,eAA4B;IAA5B,iDAA4B;IAG5B,eAAoC;IAApC,yDAAoC;;;IAOrC,kCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IAOrB,AAAtB,+BAAsB,YAAO;IAAA,yCAAyB;IAAA,iBAAQ;IAAA,iCAA4G;IAAlD,sNAAS,sCAAqC,KAAC;IAAG,AAA5G,iBAA4G,EAAM;;;IAA9E,eAAqB;IAArB,0CAAqB;;;;IAC5F,AAAtB,+BAAsB,YAAO;IAAA,yCAAyB;IAAA,iBAAQ;IAAA,iCAA4G;IAAlD,sNAAS,sCAAqC,KAAC;IAAG,AAA5G,iBAA4G,EAAM;;;IAA9E,eAAqB;IAArB,0CAAqB;;;IAG8D,kCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IADhN,AAAtB,+BAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,iCAA8H;IAA5D,sNAAS,kBAAW,QAAQ,sBAA4B,KAAC;IAAG,AAA9H,iBAA8H,EAAM;IACzJ,AAAtB,+BAAsB,YAAO;IAAA,wBAAQ;IAAA,iBAAQ;IAAA,kCAAsH;IAA7D,yNAAU,kBAAW,UAAU,sBAA4B,KAAC;IAAC,kJAA8E;IAAS,AAAT,iBAAS,EAAM;;;IADjL,eAA6B;IAA7B,kDAA6B;IACtC,eAA+B;IAA/B,oDAA+B;IAA8D,cAA8E;IAA9E,sCAA8E;;;;IAE1M,AAAtB,+BAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,iCAA8H;IAA5D,sNAAS,kBAAW,QAAQ,sBAA4B,KAAC;IAAG,AAA9H,iBAA8H,EAAM;;;IAAhG,eAA6B;IAA7B,kDAA6B;;;;IAEvG,AAAtB,+BAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,iCAA8H;IAA5D,sNAAS,kBAAW,QAAQ,sBAA4B,KAAC;IAAG,AAA9H,iBAA8H,EAAM;IACzJ,AAAtB,+BAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IAAA,iCAA4H;IAA1D,sNAAS,kBAAW,MAAM,sBAA4B,KAAC;IAAG,AAA5H,iBAA4H,EAAM;;;IAD5F,eAA6B;IAA7B,kDAA6B;IAC7B,eAA2B;IAA3B,gDAA2B;;;;IAGpF,AAAtB,+BAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,iCAA8H;IAA5D,sNAAS,kBAAW,QAAQ,sBAA4B,KAAC;IAAG,AAA9H,iBAA8H,EAAM;IACzJ,AAAtB,+BAAsB,YAAO;IAAA,mCAAmB;IAAA,iBAAQ;IAAA,iCAAoJ;IAAvE,sNAAS,kBAAW,mBAAmB,sBAA4B,KAAC;IAAG,AAApJ,iBAAoJ,EAAM;IAC5L,AAAtB,+BAAsB,YAAO;IAAA,2BAAU;IAAA,iBAAQ;IAAA,kCAA4H;IAA1D,uNAAS,kBAAW,MAAM,sBAA4B,KAAC;IAAG,AAA5H,iBAA4H,EAAM;;;IAFlG,eAA6B;IAA7B,kDAA6B;IAChB,eAAwC;IAAxC,6DAAwC;IAC/C,eAA2B;IAA3B,gDAA2B;;;;IAEpE,AAAtB,+BAAsB,YAAO;IAAA,oCAAoB;IAAA,iBAAQ;IAAA,iCAAsJ;IAAxE,sNAAS,kBAAW,oBAAoB,sBAA4B,KAAC;IAAG,AAAtJ,iBAAsJ,EAAM;;;IAAxH,eAAyC;IAAzC,8DAAyC;;;;IACjH,AAAtB,+BAAsB,YAAO;IAAA,8BAAc;IAAA,iBAAQ;IAAA,iCAA0I;IAAlE,sNAAS,kBAAW,cAAc,sBAA4B,KAAC;IAAG,AAA1I,iBAA0I,EAAM;;;IAA5G,eAAmC;IAAnC,wDAAmC;;;;IACpG,AAAtB,+BAAsB,YAAO;IAAA,4BAAY;IAAA,iBAAQ;IAAA,iCAAwI;IAAjE,sNAAS,kBAAW,aAAa,sBAA4B,KAAC;IAAG,AAAxI,iBAAwI,EAAM;;;IAA1G,eAAkC;IAAlC,uDAAkC;;;;IAOjH,AAAvB,iCAAuB,gBAAiF;IAA/B,uPAAU,4BAAiB,KAAC;IAA9E,iBAAiF;IAAC,YAAuB;IAAA,iBAAQ;;;;IAA1F,cAA0B;IAA1B,mDAA0B;IAAiC,cAAuB;IAAvB,qDAAuB;;;IAHhH,AAAtB,+BAAsB,YAAO;IAAA,uCAAuB;IAAA,iBAAQ;IAC1D,+BAAyB;IACvB,sIAEC;IACH,iBAAM;IACN,+BAAsD;IAAA,oEAAoD;IAC5G,AAD4G,iBAAM,EAC5G;;;IALF,eAEC;IAFD,gCAEC;;;;IAnCe,AAAtB,+BAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IACvC,kCAAuG;IAAlD,iNAAU,uCAAsC,KAAC;IACpG,0IAAuE;IAE3E,AADE,iBAAS,EACL;IACgB,AAAtB,+BAAsB,YAAO;IAAA,qBAAK;IAAA,iBAAQ;IACxC,iCAA2H;IAApD,8MAAS,wCAAuC,KAAC;IAC1H,AADE,iBAA2H,EACvH;IAoBJ,AADA,AADA,AALA,AAJA,AADA,AAJA,AADA,AADA,+GAAkB,yFACK,+EACL,yFAIA,8EACH,+EAIM,yFAKE,yFACD,yFACA;IAGxB,sHAA6B;;;;IA7BF,eAA2B;IAA3B,gDAA2B;IAClD,cAAuE;IAAvE,+BAAuE;IAIrC,eAAkC;IAAlC,uDAAkC;IAExE,cAoBC;IApBD,0DAAA,QAAQ,oBAAR,aAAa,oBAAb,QAAQ,oBAAR,QAAQ,oBAAR,KAAK,oBAAL,WAAW,oBAAX,aAAa,oBAAb,YAAY,oBAAZ,YAAY,WAoBX;IAED,eASC;IATD,wDASC;;;IAK8L,kCAAqB;IAAA,YAAQ;IAAA,iBAAS;;;IAA9B,8BAAY;IAAC,cAAQ;IAAR,4BAAQ;;;;IADtM,AAAtB,+BAAsB,YAAO;IAAA,+BAAe;IAAA,iBAAQ;IAAA,iCAA0H;IAAzD,8MAAS,6CAA4C,KAAC;IAAG,AAA1H,iBAA0H,EAAM;IAC9J,AAAtB,+BAAsB,YAAO;IAAA,4BAAY;IAAA,iBAAQ;IAAA,kCAAwG;IAArD,iNAAU,0CAAyC,KAAC;IAAC,0IAA8E;IAAS,AAAT,iBAAS,EAAM;;;IAD9J,eAA4B;IAA5B,iDAA4B;IAC1C,eAAyB;IAAzB,8CAAyB;IAAsD,cAA8E;IAA9E,kCAA8E;;;IAI9C,kCAAuB;IAAA,YAAY;IAAA,iBAAS;;;IAApC,gCAAc;IAAC,cAAY;IAAZ,gCAAY;;;;IAAtM,AAAtB,+BAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,kCAAsG;IAAnD,iNAAU,wCAAuC,KAAC;IAAC,wHAAmF;IAAS,AAAT,iBAAS,EAAM;IAChO,AAAtB,+BAAsB,YAAO;IAAA,sCAAsB;IAAA,iBAAQ;IAAA,oCAAqH;IAApD,iNAAS,0CAAyC,KAAC;IAAY,AAAX,iBAAW,EAAM;;;IAD1H,eAAyB;IAAzB,8CAAyB;IAAoD,cAAmF;IAAnF,gCAAmF;IACrI,eAAyB;IAAzB,8CAAyB;;;IAG3H,+BAA+B;IAAA,gDAAgC;IAAA,8BAAQ;IAAA,qBAAK;IAAA,iBAAS;IAAC,qEAAoD;IAAA,iBAAM;;;;IAmBzF,AAAtB,+BAAsB,YAAO;IAAA,oCAAoB;IAAA,iBAAQ;IAAA,iCAAyH;IAArD,+MAAS,yCAAwC,KAAC;IAAG,AAAzH,iBAAyH,EAAM;;;IAA3F,eAA+B;IAA/B,oDAA+B;;;;IACtG,AAAtB,+BAAsB,YAAO;IAAA,wCAAwB;IAAA,iBAAQ;IAAA,iCAA8H;IAArD,+MAAS,yCAAwC,KAAC;IAAG,AAA9H,iBAA8H,EAAM;;;IAA9F,eAAkC;IAAlC,uDAAkC;;;;IAS3F,AAAtB,+BAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,iCAA8I;IAAnD,+MAAS,uCAAsC,KAAC;IAAG,AAA9I,iBAA8I,EAAM;;;IAAlG,eAAwC;IAAxC,6DAAwC;;;;IAC7H,AAAtB,+BAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,iCAAkH;IAA5C,+MAAS,gCAA+B,KAAC;IAAG,AAAlH,iBAAkH,EAAM;;;IAAlF,eAA+B;IAA/B,oDAA+B;;;;IA3LvK,8BAAsD;IACpD,wGAMC;IACD,0BAA+B;IAC/B,qGAAa;IACb,kCAA0H;IAAjB,wLAAS,aAAM,KAAC;IACvH,wBAAuC;IAAC,sBAC1C;IAAA,iBAAS;IACT,kCAA0H;IAArB,wLAAS,iBAAU,KAAC;IACvH,wBAAwC;IAAC,2BAC3C;IAAA,iBAAS;IACT,mCAA6H;IAAlB,yLAAS,cAAO,KAAC;IAC1H,yBAAgC;IAAC,wBACnC;IAAA,iBAAS;IACT,mCAAkE;IAAnB,yLAAS,eAAQ,KAAC;IAC/D,yBAA+C;IAAC,wBAClD;IACF,AADE,iBAAS,EACL;IAMA,AADF,AADF,AAFF,gCAAqB,eAEM,eACC,gBACkC;IAAA,qBAAI;IAAA,iBAAO;IACnE,mCAAuF;IAAtB,yLAAS,kBAAW,KAAC;IAAC,yBAAoC;IAAC,wBAAM;IAAA,iBAAS;IAC3I,mCAAmF;IAApB,yLAAS,gBAAS,KAAC;IAAC,yBAAmC;IAAC,8BAAY;IAAA,iBAAS;IAC5I,2BAA+B;IAC/B,iCAAgC;IAAA,yBAAwC;IAAC,aAAmD;IAC9H,AAD8H,iBAAO,EAC/H;IAEN,gCACyD;;IACvD,gCAEoD;IAClD,gHAEC;IACH,iBAAM;IACN,0GAiBC;IACH,iBAAM;;IAIF,AADF,AADF,gCAA0B,eACJ,YACZ;IAAA,yBAAsB;IAAC,wBAAM;IAAA,iBAAO;IAC1C,6BAAM;IAAA,yBAAuB;IAAC,yBAAO;IAAA,iBAAO;IAC5C,6BAAM;IAAA,yBAAsB;IAAC,2BAAS;IAAA,iBAAO;IAC7C,6BAAM;IAAA,yBAAyB;IAAC,wBAAM;IAAA,iBAAO;IAC7C,6BAAM;IAAA,yBAAuB;IAAC,2BAAS;IAG7C,AADE,AADE,AADyC,iBAAO,EAC1C,EACF,EACF;IAKF,AADF,AADF,gCAAmE,eACvC,eACL;IACjB,yBAAuF;IAErF,AADF,gCAAoB,cAC6B;IAAA,aAAwB;IAAA,iBAAK;IAC5E,gCAA+B;IAAA,aAAiD;IAClF,AADkF,iBAAM,EAClF;IACN,0GAAkG;IAGpG,iBAAM;IACN,gCAA0B;IAExB,6FAAsB;IActB,6FAAoB;IA2CpB,6FAAsC;IAKtC,6FAAoC;IAIpC,uGAAsC;IAI1C,AADE,iBAAM,EACF;IAIJ,AADF,gCAAqB,eACO;IAAA,yBAAgF;IAAA,2BAAI;IAAA,8BAAa;IAAK,AAAL,iBAAK,EAAM;IAE9G,AAAtB,AADF,gCAA0B,eACF,aAAO;IAAA,oDAAmC;IAAA,iBAAQ;IAAA,kCAAsG;IAA/C,8LAAS,mCAAkC,KAAC;IAAG,AAAtG,iBAAsG,EAAM;IAC9J,AAAtB,gCAAsB,aAAO;IAAA,mDAAkC;IAAA,iBAAQ;IAAA,kCAA4K;IAApD,8LAAS,wCAAuC,KAAC;IAEpP,AADE,AADqP,AAA5K,iBAA4K,EAAM,EACrP,EACF;IAIJ,AADF,gCAAqB,eACO;IAAA,yBAAmF;IAAA,2BAAI;IAAA,+BAAc;IAAK,AAAL,iBAAK,EAAM;IAElH,AAAtB,AADF,gCAA0B,eACF,aAAO;IAAA,qBAAI;IAAA,iBAAQ;IAAA,mCAAmG;IAAlD,iMAAU,uCAAsC,KAAC;IAAC,mCAAqB;IAAA,qBAAI;IAAA,iBAAS;IAAA,mCAAuB;IAAA,uBAAM;IAAA,iBAAS;IAAA,mCAAuB;IAAA,wBAAM;IAAkB,AAAT,AAAT,iBAAS,EAAS,EAAM;IACzQ,yGAAkC;IAClC,yGAAkC;IAEtC,AADE,iBAAM,EACF;IAIJ,AADF,iCAAqB,gBACO;IAAA,0BAA0E;IAAA,4BAAI;IAAA,4BAAU;IAAK,AAAL,iBAAK,EAAM;IAErG,AAAtB,AADF,iCAA0B,gBACF,cAAO;IAAA,0BAAQ;IAAA,iBAAQ;IAAA,oCAAgH;IAArD,kMAAU,0CAAyC,KAAC;IAAC,oCAAiC;IAAA,kCAAgB;IAAA,iBAAS;IAAA,oCAAsB;IAAA,uBAAK;IAAA,iBAAS;IAAA,oCAAwB;IAAA,yBAAO;IAAkB,AAAT,AAAT,iBAAS,EAAS,EAAM;IAClT,yGAAsD;IACtD,yGAA2C;IACrB,AAAtB,iCAAsB,cAAO;IAAA,yCAAuB;IAAA,iBAAQ;IAAA,mCAAmJ;IAAlD,+LAAS,sCAAqC,KAAC;IAIpN,AADE,AADE,AADE,AADiN,AAAnJ,iBAAmJ,EAAM,EACjN,EACF,EACF,EACF;;;IA/LJ,cAMC;IAND,+BAMC;IAED,eAA0H;IAA1H,uCAA0H;IAC7C,cAA2B;IAA3B,uDAA2B;IAGrB,eAAiB;IAAjB,sCAAiB;IAGpB,eAA0B;IAA1B,sDAA0B;IAgB7B,gBAAmD;IAAnD,gGAAmD;IAI5H,cAA0B;IAAC,AAA3B,6CAA0B,gCAA4B;IAEpD,cAAsB;;IAEtB,cAEC;IAFD,2BAEC;IAEH,eAiBC;IAjBD,2BAiBC;IAkBiB,gBAA6B;IAA7B,kDAA6B;;IAEI,eAAwB;IAAxB,+CAAwB;IACxC,eAAiD;IAAjD,6FAAiD;IAElF,cAEC;IAFD,2IAEC;IAID,eAYC;IAZD,iDAYC;IAED,cAyCC;IAzCD,+CAyCC;IAED,cAGC;IAHD,iEAGC;IAED,cAGC;IAHD,+DAGC;IACD,cAEC;IAFD,iEAEC;IAQ2G,gBAAkB;IAAlB,uCAAkB;IACW,eAAqD;IAArD,0EAAqD;IAQ5H,gBAAuB;IAAvB,4CAAuB;IACzF,eAA6N;IAA7N,8DAA6N;IAC7N,cAAsO;IAAtO,8DAAsO;IAQhK,gBAAiC;IAAjC,sDAAiC;IACvG,eAA2P;IAA3P,kFAA2P;IAC3P,cAAoN;IAApN,uEAAoN;IACtG,eAA8C;IAA9C,mEAA8C;;AAlQ5K,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,KAAK,GAAG,EAAE,CAAC;AAEjB,MAAM,YAAY,GAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACpH,MAAM,UAAU,GAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AACnJ,MAAM,aAAa,GAAkB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AACtE,MAAM,iBAAiB,GAAmD,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjH,MAAM,YAAY,GAA0C;IAC1D,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,oCAAoC;IAC3C,cAAc,EAAE,iCAAiC;IACjD,SAAS,EAAE,2BAA2B;IACtC,eAAe,EAAE,6BAA6B;CAC/C,CAAC;AAEF,MAAM,UAAU,GAAoC;IAClD,MAAM,EAAE,wBAAwB;IAChC,MAAM,EAAE,uBAAuB;IAC/B,WAAW,EAAE,4BAA4B;IACzC,MAAM,EAAE,yBAAyB;IACjC,GAAG,EAAE,0BAA0B;IAC/B,SAAS,EAAE,2BAA2B;IACtC,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,mBAAmB;IACjC,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,MAAM,2BAA2B,GAC/B,iGAAiG;IACjG,uGAAuG,CAAC;AAE1G;;;;;;;;;GASG;AA8NH,MAAM,OAAO,oBAAoB;IACtB,MAAM,CAA0B;IAChC,QAAQ,GAA6B,IAAI,CAAC;IAC1C,WAAW,GAAoB,IAAI,CAAC;IAEnC,QAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;IAExC,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,aAAa,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEtC,aAAa,GAAG,2BAA2B,CAAC;IAC5C,WAAW,GAAG,YAAY,CAAC;IAC3B,SAAS,GAAG,UAAU,CAAC;IACvB,YAAY,GAAG,aAAa,CAAC;IAC7B,gBAAgB,GAAG,iBAAiB,CAAC;IAE9C,SAAS,GAAiC,EAAE,CAAC;IAC7C,kBAAkB,GAAG,EAAE,CAAC;IAE/B,sEAAsE;IAC9D,WAAW,GAAoB,EAAE,CAAC;IAClC,SAAS,GAAkB,EAAE,CAAC;IAC/B,kBAAkB,GAAG,EAAE,CAAC;IACxB,eAAe,GAAgB,gBAAgB,CAAC;IAChD,eAAe,GAAG,EAAE,CAAC;IACrB,eAAe,GAAG,IAAI,CAAC;IACvB,WAAW,GAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,+BAA+B,EAAE,GAAG,EAAE,CAAC;IACrF,QAAQ,GAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1C,cAAc,GAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAElH,KAAK,GAAc,EAAE,CAAC;IACtB,KAAK,GAAc,EAAE,CAAC;IACtB,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,GAAG,GAAG,CAAC;IACd,OAAO,GAAG,GAAG,CAAC;IACd,KAAK,GAAG,KAAK,CAAC;IACd,IAAI,GAAG,KAAK,CAAC;IAEZ,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtC,OAAO,GAAG,CAAC,CAAC;IAEpB,QAAQ;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,6DAA6D;IAEtD,cAAc,CAAC,EAAU;QAC9B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAkB,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAmB,CAAC,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzF,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,eAAe,GAAI,CAAC,CAAC,WAA2B,IAAI,gBAAgB,CAAC;QAC1E,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAe,CAAC,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;QACtH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAe,CAAC,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAqB,CAAC,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,IAAY,gBAAgB;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/E,CAAC;IAEM,kBAAkB,CAAC,CAA6B;QACrD,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAI,GAA8B,EAAE,QAAW;QAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAM,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,mDAAmD;IAE3C,OAAO;QACb,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAc,EAAE,CAAC;QAE5B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAExM,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACtC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QACxG,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEO,UAAU,CAAC,EAAiB,EAAE,CAAS;QAC7C,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QACzE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,sBAAsB,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnM,CAAC;IAEO,QAAQ,CAAC,IAAiB;QAChC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,qBAAqB,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnP,CAAC;IAEO,QAAQ,CAAC,IAAiB;QAChC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;YAC3E,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7F,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/G,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1F,KAAK,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChG,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAC3E,KAAK,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACjE,KAAK,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7G,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,kBAAkB,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC5Q,CAAC;IAEO,QAAQ;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAA0B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC9H,CAAC;IAEO,SAAS;QACf,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,sBAAsB;IAEf,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACrL,CAAC;IAED,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,IAAW,cAAc;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IACD,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IACtE,CAAC;IACD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IACD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,2BAA2B;IAEpB,aAAa,CAAC,IAAY,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,IAAI,GAAG,IAA6B,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IACzI,YAAY,CAAC,GAAW,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAC5G,cAAc,CAAC,KAAa,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAExI,yBAAyB;IAEzB,IAAW,WAAW;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACM,UAAU,CAAC,IAAY;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;YAC3D,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,gGAAgG;IACzF,SAAS,CAAC,KAAa;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACM,UAAU,CAAC,KAAa,EAAE,KAAa;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,IAAI,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,CAAC;IAChD,CAAC;IACM,UAAU,CAAC,KAAa,EAAE,KAAa;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,CAAC;IAChE,CAAC;IACM,YAAY,CAAC,KAAa,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAEpI,uGAAuG;IAChG,WAAW,CAAC,IAAY;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAuB,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClG,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEM,QAAQ,CAAC,MAAc;QAC5B,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,wDAAwD;IACjD,WAAW,CAAC,MAAc;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,4BAA4B,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IACD,oGAAoG;IAC5F,YAAY,CAAC,IAAY,EAAE,MAAc;QAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YACxB,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uCAAuC;IAEhC,iBAAiB,CAAC,CAAS,IAAU,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACrF,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,eAAe,GAAG,CAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9F,YAAY,CAAC,EAAU,IAAU,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC/E,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEtF,iDAAiD;IAEjD,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,IAAY,IAAU,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACtI,YAAY,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,WAAW,CAAC,+BAA+B,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IACzJ,WAAW,CAAC,CAAS,IAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1H,aAAa,CAAC,CAAS,IAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/E,aAAa,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IAClI,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAmC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACvJ,WAAW,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IACpI,IAAI,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IACtH,UAAU,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IAEvJ,+BAA+B;IAExB,SAAS;QACd,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACzD,CAAC;IACM,OAAO;QACZ,MAAM,EAAE,GAAG,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IACM,cAAc;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAChE,kDAAkD;YAClD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAChC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,IAAqB,EAAE,EAAU,EAAE,KAAc,EAAE,MAAiB;QACtF,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAC/D,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YAChF,KAAK,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACzE,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC9D,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACtG,KAAK,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC;YACpF,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;YACjH,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;QAC1J,CAAC;IACH,CAAC;IAED,oCAAoC;IAEpC,6EAA6E;IACtE,KAAK,CAAC,IAAI;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YACH,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC3C,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;YACjD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,YAAY,EAAE,eAAe,IAAI,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACnI,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,qDAAqD;IAC9C,QAAQ;QACb,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACvG,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,wCAAwC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAED,yEAAyE;IAClE,KAAK,CAAC,KAAK;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,mCAAmC,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;YACrI,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9F,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,iBAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACrI,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;YAC5F,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,CAAC,YAAY,IAAI,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9H,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,MAAM;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,IAAI,sBAAsB,QAAQ,mFAAmF,CAAC,CAAC;IACrK,CAAC;IAEM,WAAW,CAAC,MAAqB;QACtC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,QAAQ,CAAC,CAAC,OAAO,OAAO,CAAC;YAC9B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,KAAK,UAAU,CAAC,CAAC,OAAO,MAAM,CAAC;YAC/B,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC;QACzB,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,IAAc;QACjC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC5B,KAAK,MAAM,CAAC,CAAC,OAAO,cAAc,CAAC;YACnC,KAAK,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC;YAC/B,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC/B,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC;YAChC,KAAK,QAAQ,CAAC,CAAC,OAAO,cAAc,CAAC;QACvC,CAAC;IACH,CAAC;IAED,4DAA4D;IAEpD,SAAS;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,MAAM,OAAO,GAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAEO,aAAa,CAAC,QAA+B,EAAE,QAA+B;QACpF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,CAAC;gBACrC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,eAAe,CAAC,OAAoB;QAC1C,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QAC5D,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC;YAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YAC9D,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;gBACvB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QACpF,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC;IACtC,CAAC;IAEM,QAAQ,CAAC,IAAa;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;QAC1B,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;QAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IACnE,CAAC;8GApjBU,oBAAoB;6DAApB,oBAAoB;YAtN7B,8BAAoE;YAehE,AAdF,uFAA8B,yDAcrB;YAoMX,iBAAM;;YAlNJ,cAiNC;YAjND,oDAiNC;4BAtNK,YAAY,cAAE,iBAAiB;;iFA0N9B,oBAAoB;cA7NhC,SAAS;6BACI,IAAI,YACN,cAAc,WACf,CAAC,YAAY,EAAE,iBAAiB,CAAC,iBAC3B,iBAAiB,CAAC,IAAI,YAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqNT;;kBAGA,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAEL,MAAM;;kFALI,oBAAoB","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { IMetadataProvider, UserInfo } from '@memberjunction/core';\nimport { MJMLTrainingPipelineEntity, PredictiveStudioTrainModelOperation } from '@memberjunction/core-entities';\nimport type {\n SourceBinding,\n FeatureStepGraph,\n FeatureStep,\n FeatureStepKind,\n AsOfStrategy,\n LeakageGuard,\n ValidationStrategy,\n ProblemType,\n} from '@memberjunction/predictive-studio-core';\nimport { PredictiveStudioEngine } from '../engine/predictive-studio.engine';\n\ntype NodeType = 'src' | 'feat' | 'emb' | 'target' | 'algo' | 'output';\n\ninterface DagNode {\n id: string;\n type: NodeType;\n title: string;\n icon: string;\n tag?: string;\n rows: { k: string; v: string }[];\n x: number;\n y: number;\n hasIn: boolean;\n hasOut: boolean;\n}\n\ninterface DagEdge {\n from: string;\n to: string;\n}\n\nconst NODE_W = 190;\nconst NODE_H = 86;\nconst COL_GAP = 86;\nconst ROW_GAP = 30;\nconst PAD_X = 28;\nconst PAD_Y = 28;\n\nconst SOURCE_KINDS: SourceBinding['Kind'][] = ['Entity', 'Query', 'ExternalEntity', 'VectorSet', 'FeaturePipeline'];\nconst STEP_KINDS: FeatureStepKind[] = ['select', 'impute', 'standardize', 'onehot', 'bin', 'embedding', 'llm-derived', 'flow-agent', 'vision-llm'];\nconst PROBLEM_TYPES: ProblemType[] = ['classification', 'regression'];\nconst IMPUTE_STRATEGIES: Array<'mean' | 'median' | 'mode' | 'constant'> = ['mean', 'median', 'mode', 'constant'];\n\nconst SOURCE_ICONS: Record<SourceBinding['Kind'], string> = {\n Entity: 'fa-solid fa-table',\n Query: 'fa-solid fa-magnifying-glass-chart',\n ExternalEntity: 'fa-solid fa-arrows-turn-to-dots',\n VectorSet: 'fa-solid fa-vector-square',\n FeaturePipeline: 'fa-solid fa-diagram-project',\n};\n\nconst STEP_ICONS: Record<FeatureStepKind, string> = {\n select: 'fa-solid fa-list-check',\n impute: 'fa-solid fa-fill-drip',\n standardize: 'fa-solid fa-ruler-combined',\n onehot: 'fa-solid fa-table-cells',\n bin: 'fa-solid fa-chart-simple',\n embedding: 'fa-solid fa-vector-square',\n 'llm-derived': 'fa-solid fa-wand-magic-sparkles',\n 'flow-agent': 'fa-solid fa-robot',\n 'vision-llm': 'fa-solid fa-eye',\n};\n\nconst PS_PIPELINES_STARTER_PROMPT =\n 'Help me build a training pipeline. I will tell you what I want to predict and on which entity; ' +\n 'you assemble the features (guarding against leakage), pick an algorithm, and train a versioned model.';\n\n/**\n * Training Pipelines panel — a LIVE, **editable** visual DAG builder over `MJ: ML Training Pipelines`.\n * The whole graph is persisted as JSON (`SourceBindings` + `FeatureSteps` + `AlgorithmID` +\n * `TargetVariable` + `AsOfStrategy`/`LeakageGuard`/`ValidationStrategy`), so the editor reads/writes the\n * REAL spec. The parsed spec is the editable state; nodes/edges are derived from it for rendering, so an\n * edit → re-derive → re-layout. Save serializes back to the entity; Train runs the pipeline. Editing is\n * inspector-driven (explicit controls, no fiddly port-dragging) — better for a structured, persisted DAG.\n * Fully entity-agnostic — every node derives from the pipeline's own refs. See\n * plans/predictive-studio-pipeline-builder.md.\n */\n@Component({\n standalone: true,\n selector: 'ps-pipelines',\n imports: [CommonModule, MJButtonDirective],\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['../predictive-studio.shared.scss', './ps-pipelines.component.scss'],\n template: `\n <div class=\"ps-panel ps-pipelines\" data-testid=\"ps-pipelines-panel\">\n @if (pipelines.length === 0) {\n <div class=\"ps-empty\" data-testid=\"ps-pipelines-empty\">\n <span class=\"ps-empty-ico\"><i class=\"fa-solid fa-diagram-project\"></i></span>\n <h3>No training pipelines yet</h3>\n <p>\n A training pipeline assembles features from your data, picks an algorithm, and trains a\n versioned model. The fastest way to build one is to describe your goal to the Model\n Development Agent — it designs the pipeline, guards against target leakage, and trains for you.\n </p>\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-ask-agent\"\n (click)=\"askAgent.emit(starterPrompt)\">\n <i class=\"fa-solid fa-robot\"></i> Ask the agent to build one\n </button>\n </div>\n } @else {\n <!-- Pipeline picker + toolbar -->\n <div class=\"pl-bar\" data-testid=\"ps-pipelines-picker\">\n @for (p of pipelines; track p.ID) {\n <button class=\"pl-pill\" [class.on]=\"isSelectedPipeline(p)\"\n data-testid=\"ps-pipelines-pill\" (click)=\"selectPipeline(p.ID)\">\n <i class=\"fa-solid fa-diagram-project\"></i> {{ p.Name }}\n <span class=\"ps-badge\" [class]=\"statusClass(p.Status)\">{{ p.Status }}</span>\n </button>\n }\n <span class=\"ps-spacer\"></span>\n @if (dirty) { <span class=\"ps-tag amber\" data-testid=\"ps-pipelines-dirty\"><i class=\"fa-solid fa-pen\"></i> Unsaved</span> }\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-save\" [disabled]=\"!dirty || busy\" (click)=\"save()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-validate\" [disabled]=\"busy\" (click)=\"validate()\">\n <i class=\"fa-solid fa-circle-check\"></i> Validate\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-train\" [disabled]=\"busy || dirty\" (click)=\"train()\">\n <i class=\"fa-solid fa-play\"></i> Train\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"refine()\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Agent\n </button>\n </div>\n\n <div class=\"builder\">\n <!-- Canvas -->\n <div class=\"canvas-wrap\">\n <div class=\"canvas-bar\">\n <span class=\"ps-small ps-muted\" style=\"font-weight:600\">Add:</span>\n <button class=\"ps-pchip s\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-database\"></i> Source</button>\n <button class=\"ps-pchip f\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Feature step</button>\n <span class=\"ps-spacer\"></span>\n <span class=\"ps-small ps-muted\"><i class=\"fa-solid fa-circle-nodes\"></i> {{ nodes.length }} nodes · {{ edges.length }} edges</span>\n </div>\n\n <div class=\"ps-flow big\" data-testid=\"ps-pipelines-canvas\"\n [style.width.px]=\"canvasW\" [style.height.px]=\"canvasH\">\n <svg class=\"ps-edges\" data-testid=\"ps-pipelines-edges\"\n [attr.width]=\"canvasW\" [attr.height]=\"canvasH\"\n [attr.viewBox]=\"'0 0 ' + canvasW + ' ' + canvasH\">\n @for (edge of edges; track edge.from + edge.to) {\n <path [attr.d]=\"edgePath(edge)\"></path>\n }\n </svg>\n @for (node of nodes; track node.id) {\n <div class=\"ps-node\" data-testid=\"ps-pipelines-node\" [attr.data-node-id]=\"node.id\"\n [ngClass]=\"node.type\" [class.selected]=\"node.id === selectedId\"\n [style.left.px]=\"node.x\" [style.top.px]=\"node.y\" (click)=\"selectNode(node.id)\">\n <div class=\"nh\">\n <i class=\"tile\" [ngClass]=\"node.icon\"></i>\n <span>{{ node.title }}</span>\n @if (node.tag) { <span class=\"ps-tag\">{{ node.tag }}</span> }\n </div>\n <div class=\"nb\">\n @for (row of node.rows; track row.k) {\n <div class=\"nb-row\"><span class=\"k\">{{ row.k }}</span><span>{{ row.v }}</span></div>\n }\n </div>\n @if (node.hasIn) { <span class=\"port in\"></span> }\n @if (node.hasOut) { <span class=\"port out\"></span> }\n </div>\n }\n </div>\n\n <div class=\"flow-toolbar\">\n <div class=\"legend\">\n <span><i class=\"sw src\"></i> Source</span>\n <span><i class=\"sw feat\"></i> Feature</span>\n <span><i class=\"sw emb\"></i> Embedding</span>\n <span><i class=\"sw target\"></i> Target</span>\n <span><i class=\"sw algo\"></i> Algorithm</span>\n </div>\n </div>\n </div>\n\n <!-- Inspector (editable) -->\n <div class=\"ps-col inspector\" data-testid=\"ps-pipelines-inspector\">\n <div class=\"ps-card insp\">\n <div class=\"ihead\">\n <i class=\"tile\" [ngClass]=\"selectedNode.icon\" [attr.data-type]=\"selectedNode.type\"></i>\n <div style=\"flex:1\">\n <h3 data-testid=\"ps-pipelines-inspector-title\">{{ selectedNode.title }}</h3>\n <div class=\"ps-small ps-muted\">{{ nodeTypeLabel(selectedNode.type) }} · selected</div>\n </div>\n @if (selectedNode.type === 'src' || selectedNode.type === 'feat' || selectedNode.type === 'emb') {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-delete\" (click)=\"deleteSelected()\"><i class=\"fa-solid fa-trash\"></i></button>\n }\n </div>\n <div class=\"ps-card-body\">\n <!-- SOURCE editor -->\n @if (selectedSource) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedSource.Kind\" (change)=\"setSourceKind($any($event.target).value)\">\n @for (k of sourceKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Reference (entity / query / id)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Ref\" (input)=\"setSourceRef($any($event.target).value)\" />\n </div>\n <div class=\"ps-field\"><label>Alias (optional)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Alias || ''\" (input)=\"setSourceAlias($any($event.target).value)\" />\n </div>\n }\n <!-- STEP editor -->\n @if (selectedStep) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedStep.Kind\" (change)=\"setStepKind($any($event.target).value)\">\n @for (k of stepKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Label</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedStep.Label || ''\" (input)=\"setStepLabel($any($event.target).value)\" />\n </div>\n @switch (selectedStep.Kind) {\n @case ('select') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns($any($event.target).value)\" /></div> }\n @case ('standardize') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns($any($event.target).value)\" /></div> }\n @case ('impute') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"stepField('Strategy')\" (change)=\"setStepStr('Strategy', $any($event.target).value)\">@for (s of imputeStrategies; track s) { <option [value]=\"s\">{{ s }}</option> }</select></div>\n }\n @case ('onehot') { <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div> }\n @case ('bin') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Bins</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Bins')\" (input)=\"setStepNum('Bins', $any($event.target).value)\" /></div>\n }\n @case ('embedding') {\n <div class=\"ps-field\"><label>Entity</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Entity')\" (input)=\"setStepStr('Entity', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Embedding model ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('EmbeddingModelRef')\" (input)=\"setStepStr('EmbeddingModelRef', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Dimensions</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Dims')\" (input)=\"setStepNum('Dims', $any($event.target).value)\" /></div>\n }\n @case ('llm-derived') { <div class=\"ps-field\"><label>Feature Pipeline ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FeaturePipelineRef')\" (input)=\"setStepStr('FeaturePipelineRef', $any($event.target).value)\" /></div> }\n @case ('flow-agent') { <div class=\"ps-field\"><label>Flow Agent ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FlowAgentRef')\" (input)=\"setStepStr('FlowAgentRef', $any($event.target).value)\" /></div> }\n @case ('vision-llm') { <div class=\"ps-field\"><label>Image column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('ImageColumn')\" (input)=\"setStepStr('ImageColumn', $any($event.target).value)\" /></div> }\n }\n <!-- rewire: upstream step inputs -->\n @if (otherSteps.length > 0) {\n <div class=\"ps-field\"><label>Inputs (upstream steps)</label>\n <div class=\"inputs-list\">\n @for (s of otherSteps; track s.Id) {\n <label class=\"inp-row\"><input type=\"checkbox\" [checked]=\"hasInput(s.Id)\" (change)=\"toggleInput(s.Id)\" /> {{ s.Label || s.Kind }}</label>\n }\n </div>\n <div class=\"ps-small ps-muted\" style=\"margin-top:4px\">No inputs = a root step fed directly by the sources.</div>\n </div>\n }\n }\n <!-- TARGET editor -->\n @if (selectedNode.type === 'target') {\n <div class=\"ps-field\"><label>Target variable</label><input class=\"mj-input\" type=\"text\" [value]=\"editTargetVariable\" (input)=\"setTargetVariable($any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Problem type</label><select class=\"mj-input\" [value]=\"editProblemType\" (change)=\"setProblemType($any($event.target).value)\">@for (pt of problemTypes; track pt) { <option [value]=\"pt\">{{ pt }}</option> }</select></div>\n }\n <!-- ALGORITHM editor -->\n @if (selectedNode.type === 'algo') {\n <div class=\"ps-field\"><label>Algorithm</label><select class=\"mj-input\" [value]=\"editAlgorithmId\" (change)=\"setAlgorithm($any($event.target).value)\">@for (a of algorithms; track a.ID) { <option [value]=\"a.ID\">{{ a.Name }}</option> }</select></div>\n <div class=\"ps-field\"><label>Hyperparameters (JSON)</label><textarea class=\"mj-textarea\" rows=\"4\" [value]=\"editHyperparams\" (input)=\"setHyperparams($any($event.target).value)\"></textarea></div>\n }\n @if (selectedNode.type === 'output') {\n <div class=\"ps-small ps-muted\">The trained model artifact. Run <strong>Train</strong> to produce a new versioned model from this pipeline.</div>\n }\n </div>\n </div>\n\n <!-- Leakage guard (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-shield-halved\" style=\"color:var(--mj-status-warning)\"></i><h3>Leakage guard</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Deny-list columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"denyText\" (input)=\"setDeny($any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Single-feature dominance threshold</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" min=\"0\" max=\"1\" [value]=\"editLeakage.SingleFeatureDominanceThreshold\" (input)=\"setThreshold($any($event.target).value)\" /></div>\n </div>\n </div>\n\n <!-- As-of strategy (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i><h3>As-of strategy</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Mode</label><select class=\"mj-input\" [value]=\"editAsOf.Mode\" (change)=\"setAsOfMode($any($event.target).value)\"><option value=\"none\">none</option><option value=\"column\">column</option><option value=\"offset\">offset</option></select></div>\n @if (editAsOf.Mode === 'column') { <div class=\"ps-field\"><label>Decision-date column</label><input class=\"mj-input\" type=\"text\" [value]=\"editAsOf.Column || ''\" (input)=\"setAsOfColumn($any($event.target).value)\" /></div> }\n @if (editAsOf.Mode === 'offset') { <div class=\"ps-field\"><label>Offset days before label</label><input class=\"mj-input\" type=\"number\" [value]=\"editAsOf.OffsetDays ?? 0\" (input)=\"setAsOfOffset($any($event.target).value)\" /></div> }\n </div>\n </div>\n\n <!-- Validation (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-scissors\" style=\"color:var(--mj-brand-primary)\"></i><h3>Validation</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"editValidation.Strategy\" (change)=\"setValStrategy($any($event.target).value)\"><option value=\"train_test_split\">train_test_split</option><option value=\"kfold\">kfold</option><option value=\"holdout\">holdout</option></select></div>\n @if (editValidation.Strategy === 'train_test_split') { <div class=\"ps-field\"><label>Test size</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.TestSize ?? 0.2\" (input)=\"setTestSize($any($event.target).value)\" /></div> }\n @if (editValidation.Strategy === 'kfold') { <div class=\"ps-field\"><label>Folds (k)</label><input class=\"mj-input\" type=\"number\" [value]=\"editValidation.K ?? 5\" (input)=\"setK($any($event.target).value)\" /></div> }\n <div class=\"ps-field\"><label>Locked holdout fraction</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.LockedHoldoutFraction\" (input)=\"setHoldout($any($event.target).value)\" /></div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class PSPipelinesComponent implements OnInit {\n @Input() engine!: PredictiveStudioEngine;\n @Input() provider: IMetadataProvider | null = null;\n @Input() currentUser: UserInfo | null = null;\n\n @Output() askAgent = new EventEmitter<string>();\n\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n\n public readonly starterPrompt = PS_PIPELINES_STARTER_PROMPT;\n public readonly sourceKinds = SOURCE_KINDS;\n public readonly stepKinds = STEP_KINDS;\n public readonly problemTypes = PROBLEM_TYPES;\n public readonly imputeStrategies = IMPUTE_STRATEGIES;\n\n public pipelines: MJMLTrainingPipelineEntity[] = [];\n public selectedPipelineId = '';\n\n // Editable spec state (the source of truth; nodes/edges are derived).\n private editSources: SourceBinding[] = [];\n private editSteps: FeatureStep[] = [];\n public editTargetVariable = '';\n public editProblemType: ProblemType = 'classification';\n public editAlgorithmId = '';\n public editHyperparams = '{}';\n public editLeakage: LeakageGuard = { DenyFields: [], SingleFeatureDominanceThreshold: 0.6 };\n public editAsOf: AsOfStrategy = { Mode: 'none' };\n public editValidation: ValidationStrategy = { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 };\n\n public nodes: DagNode[] = [];\n public edges: DagEdge[] = [];\n public selectedId = '';\n public canvasW = 800;\n public canvasH = 460;\n public dirty = false;\n public busy = false;\n\n private nodeById = new Map<string, DagNode>();\n private stepSeq = 0;\n\n ngOnInit(): void {\n this.pipelines = this.engine?.Pipelines ?? [];\n if (this.pipelines.length > 0) {\n this.selectPipeline(this.pipelines[0].ID);\n }\n }\n\n // ---- pipeline selection: entity JSON → editable state ----\n\n public selectPipeline(id: string): void {\n this.selectedPipelineId = id;\n const p = this.pipelines.find((x) => UUIDsEqual(x.ID, id));\n if (!p) {\n return;\n }\n this.editSources = this.parse<SourceBinding[]>(p.SourceBindings, []);\n this.editSteps = this.parse<FeatureStepGraph>(p.FeatureSteps, { Steps: [] }).Steps ?? [];\n this.editTargetVariable = p.TargetVariable ?? '';\n this.editProblemType = (p.ProblemType as ProblemType) ?? 'classification';\n this.editAlgorithmId = p.AlgorithmID ?? '';\n this.editHyperparams = p.Hyperparameters ?? '{}';\n this.editLeakage = this.parse<LeakageGuard>(p.LeakageGuard, { DenyFields: [], SingleFeatureDominanceThreshold: 0.6 });\n this.editAsOf = this.parse<AsOfStrategy>(p.AsOfStrategy, { Mode: 'none' });\n this.editValidation = this.parse<ValidationStrategy>(p.ValidationStrategy, { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 });\n this.stepSeq = this.editSteps.length;\n this.dirty = false;\n this.rebuild();\n this.selectedId = this.nodes[0]?.id ?? '';\n }\n\n private get selectedPipeline(): MJMLTrainingPipelineEntity | undefined {\n return this.pipelines.find((p) => UUIDsEqual(p.ID, this.selectedPipelineId));\n }\n\n public isSelectedPipeline(p: MJMLTrainingPipelineEntity): boolean {\n return UUIDsEqual(p.ID, this.selectedPipelineId);\n }\n\n private parse<T>(raw: string | null | undefined, fallback: T): T {\n if (!raw) {\n return fallback;\n }\n try {\n const value: unknown = JSON.parse(raw);\n return (value ?? fallback) as T;\n } catch {\n return fallback;\n }\n }\n\n private markDirty(): void {\n this.dirty = true;\n this.rebuild();\n }\n\n // ---- derive nodes/edges from editable state ----\n\n private rebuild(): void {\n const nodes: DagNode[] = [];\n const edges: DagEdge[] = [];\n\n this.editSources.forEach((sb, i) => nodes.push(this.sourceNode(sb, i)));\n this.editSteps.forEach((step) => nodes.push(this.stepNode(step)));\n nodes.push(this.targetNode());\n nodes.push(this.algoNode());\n nodes.push({ id: '__output', type: 'output', title: 'Model', icon: 'fa-solid fa-cube', x: 0, y: 0, hasIn: false, hasOut: false, rows: [{ k: 'status', v: this.selectedPipeline?.Status ?? 'Draft' }] });\n\n const stepIds = new Set(this.editSteps.map((s) => s.Id));\n const referenced = new Set<string>();\n for (const step of this.editSteps) {\n for (const input of step.Inputs ?? []) {\n if (stepIds.has(input)) {\n edges.push({ from: input, to: step.Id });\n referenced.add(input);\n }\n }\n }\n const roots = this.editSteps.filter((s) => (s.Inputs ?? []).filter((i) => stepIds.has(i)).length === 0);\n const sourceIds = this.editSources.map((_s, i) => `src:${i}`);\n if (this.editSteps.length > 0) {\n for (const sid of sourceIds) {\n for (const r of roots) {\n edges.push({ from: sid, to: r.Id });\n }\n }\n } else {\n for (const sid of sourceIds) {\n edges.push({ from: sid, to: '__algo' });\n }\n }\n for (const t of this.editSteps.filter((s) => !referenced.has(s.Id))) {\n edges.push({ from: t.Id, to: '__algo' });\n }\n edges.push({ from: '__target', to: '__algo' });\n edges.push({ from: '__algo', to: '__output' });\n\n this.nodes = nodes;\n this.edges = edges;\n this.markPorts();\n this.layoutDag();\n }\n\n private sourceNode(sb: SourceBinding, i: number): DagNode {\n const rows = [{ k: 'kind', v: sb.Kind }, { k: 'ref', v: sb.Ref || '—' }];\n if (sb.Alias) {\n rows.push({ k: 'alias', v: sb.Alias });\n }\n return { id: `src:${i}`, type: 'src', title: sb.Alias || sb.Ref || 'source', icon: SOURCE_ICONS[sb.Kind] ?? 'fa-solid fa-database', tag: sb.Kind, rows, x: 0, y: 0, hasIn: false, hasOut: true };\n }\n\n private stepNode(step: FeatureStep): DagNode {\n return { id: step.Id, type: step.Kind === 'embedding' ? 'emb' : 'feat', title: step.Label || step.Kind, icon: STEP_ICONS[step.Kind] ?? 'fa-solid fa-sliders', tag: step.Kind, rows: this.stepRows(step), x: 0, y: 0, hasIn: true, hasOut: true };\n }\n\n private stepRows(step: FeatureStep): { k: string; v: string }[] {\n switch (step.Kind) {\n case 'select': return [{ k: 'columns', v: `${step.Columns.length} cols` }];\n case 'impute': return [{ k: 'column', v: step.Column }, { k: 'strategy', v: step.Strategy }];\n case 'standardize': return [{ k: 'columns', v: `${step.Columns.length} cols` }, { k: 'scaler', v: 'z-score' }];\n case 'onehot': return [{ k: 'column', v: step.Column }];\n case 'bin': return [{ k: 'column', v: step.Column }, { k: 'bins', v: String(step.Bins) }];\n case 'embedding': return [{ k: 'entity', v: step.Entity }, { k: 'dims', v: String(step.Dims) }];\n case 'llm-derived': return [{ k: 'pipeline', v: step.FeaturePipelineRef }];\n case 'flow-agent': return [{ k: 'agent', v: step.FlowAgentRef }];\n case 'vision-llm': return [{ k: 'image', v: step.ImageColumn }, { k: 'output', v: step.Output.FeatureName }];\n default: return [];\n }\n }\n\n private targetNode(): DagNode {\n return { id: '__target', type: 'target', title: `Target: ${this.editTargetVariable || '—'}`, icon: 'fa-solid fa-bullseye', rows: [{ k: 'variable', v: this.editTargetVariable || '—' }, { k: 'type', v: this.editProblemType }], x: 0, y: 0, hasIn: false, hasOut: true };\n }\n\n private algoNode(): DagNode {\n const name = this.engine.AlgorithmName(this.editAlgorithmId);\n const rows = [{ k: 'algorithm', v: name }];\n const hp = this.parse<Record<string, unknown>>(this.editHyperparams, {});\n Object.entries(hp).slice(0, 2).forEach(([k, v]) => rows.push({ k, v: String(v) }));\n return { id: '__algo', type: 'algo', title: name, icon: 'fa-solid fa-shapes', rows, x: 0, y: 0, hasIn: true, hasOut: true };\n }\n\n private markPorts(): void {\n const hasIn = new Set(this.edges.map((e) => e.to));\n const hasOut = new Set(this.edges.map((e) => e.from));\n for (const n of this.nodes) {\n n.hasIn = hasIn.has(n.id);\n n.hasOut = hasOut.has(n.id);\n }\n }\n\n // ---- selection ----\n\n public selectNode(id: string): void {\n this.selectedId = id;\n }\n\n public get selectedNode(): DagNode {\n return this.nodeById.get(this.selectedId) ?? this.nodes[0] ?? { id: '', type: 'feat', title: '—', icon: 'fa-solid fa-sliders', rows: [], x: 0, y: 0, hasIn: false, hasOut: false };\n }\n\n public get selectedSourceIndex(): number {\n return this.selectedId.startsWith('src:') ? Number(this.selectedId.slice(4)) : -1;\n }\n public get selectedSource(): SourceBinding | null {\n const i = this.selectedSourceIndex;\n return i >= 0 ? this.editSources[i] ?? null : null;\n }\n public get selectedStep(): FeatureStep | null {\n return this.editSteps.find((s) => s.Id === this.selectedId) ?? null;\n }\n public get otherSteps(): FeatureStep[] {\n return this.editSteps.filter((s) => s.Id !== this.selectedId);\n }\n public get algorithms() {\n return this.engine?.Algorithms ?? [];\n }\n\n // ---- source editing ----\n\n public setSourceKind(kind: string): void { const s = this.selectedSource; if (s) { s.Kind = kind as SourceBinding['Kind']; this.markDirty(); } }\n public setSourceRef(ref: string): void { const s = this.selectedSource; if (s) { s.Ref = ref; this.markDirty(); } }\n public setSourceAlias(alias: string): void { const s = this.selectedSource; if (s) { s.Alias = alias || undefined; this.markDirty(); } }\n\n // ---- step editing ----\n\n public get columnsText(): string {\n const s = this.selectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n return s.Columns.join(', ');\n }\n return '';\n }\n public setColumns(text: string): void {\n const s = this.selectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n s.Columns = text.split(',').map((c) => c.trim()).filter(Boolean);\n this.markDirty();\n }\n }\n /** Read an arbitrary field off the selected step for display (narrowed by template @switch). */\n public stepField(field: string): string {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n const v = s?.[field];\n return v == null ? '' : String(v);\n }\n public setStepStr(field: string, value: string): void {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n if (s) { s[field] = value; this.markDirty(); }\n }\n public setStepNum(field: string, value: string): void {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n const n = Number(value);\n if (s && !Number.isNaN(n)) { s[field] = n; this.markDirty(); }\n }\n public setStepLabel(label: string): void { const s = this.selectedStep; if (s) { s.Label = label || undefined; this.markDirty(); } }\n\n /** Change a step's Kind, resetting its config to that Kind's defaults (preserving Id/Label/Inputs). */\n public setStepKind(kind: string): void {\n const idx = this.editSteps.findIndex((s) => s.Id === this.selectedId);\n if (idx < 0) {\n return;\n }\n const prev = this.editSteps[idx];\n this.editSteps[idx] = this.defaultStep(kind as FeatureStepKind, prev.Id, prev.Label, prev.Inputs);\n this.markDirty();\n }\n\n public hasInput(stepId: string): boolean {\n return (this.selectedStep?.Inputs ?? []).includes(stepId);\n }\n /** Toggle an upstream step input, preventing cycles. */\n public toggleInput(stepId: string): void {\n const s = this.selectedStep;\n if (!s) {\n return;\n }\n const inputs = s.Inputs ?? [];\n if (inputs.includes(stepId)) {\n s.Inputs = inputs.filter((i) => i !== stepId);\n } else if (!this.createsCycle(stepId, s.Id)) {\n s.Inputs = [...inputs, stepId];\n } else {\n this.notifications.CreateSimpleNotification('That would create a cycle.', 'warning', 2500);\n return;\n }\n this.markDirty();\n }\n /** True if making `target` depend on `from` would create a cycle (from is downstream of target). */\n private createsCycle(from: string, target: string): boolean {\n const byId = new Map(this.editSteps.map((s) => [s.Id, s]));\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n const id = stack.pop()!;\n if (id === target) {\n return true;\n }\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n stack.push(...(byId.get(id)?.Inputs ?? []));\n }\n return false;\n }\n\n // ---- target / algorithm editing ----\n\n public setTargetVariable(v: string): void { this.editTargetVariable = v; this.markDirty(); }\n public setProblemType(v: string): void { this.editProblemType = v as ProblemType; this.markDirty(); }\n public setAlgorithm(id: string): void { this.editAlgorithmId = id; this.markDirty(); }\n public setHyperparams(v: string): void { this.editHyperparams = v; this.markDirty(); }\n\n // ---- leakage / as-of / validation editing ----\n\n public get denyText(): string { return this.editLeakage.DenyFields.join(', '); }\n public setDeny(text: string): void { this.editLeakage.DenyFields = text.split(',').map((c) => c.trim()).filter(Boolean); this.dirty = true; }\n public setThreshold(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editLeakage.SingleFeatureDominanceThreshold = n; this.dirty = true; } }\n public setAsOfMode(v: string): void { this.editAsOf = { ...this.editAsOf, Mode: v as AsOfStrategy['Mode'] }; this.dirty = true; }\n public setAsOfColumn(v: string): void { this.editAsOf.Column = v; this.dirty = true; }\n public setAsOfOffset(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editAsOf.OffsetDays = n; this.dirty = true; } }\n public setValStrategy(v: string): void { this.editValidation = { ...this.editValidation, Strategy: v as ValidationStrategy['Strategy'] }; this.dirty = true; }\n public setTestSize(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.TestSize = n; this.dirty = true; } }\n public setK(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.K = n; this.dirty = true; } }\n public setHoldout(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.LockedHoldoutFraction = n; this.dirty = true; } }\n\n // ---- add / delete nodes ----\n\n public addSource(): void {\n this.editSources = [...this.editSources, { Kind: 'Entity', Ref: '' }];\n this.markDirty();\n this.selectedId = `src:${this.editSources.length - 1}`;\n }\n public addStep(): void {\n const id = `step_${++this.stepSeq}`;\n this.editSteps = [...this.editSteps, this.defaultStep('select', id)];\n this.markDirty();\n this.selectedId = id;\n }\n public deleteSelected(): void {\n const si = this.selectedSourceIndex;\n if (si >= 0) {\n this.editSources = this.editSources.filter((_s, i) => i !== si);\n this.markDirty();\n this.selectedId = this.nodes[0]?.id ?? '';\n return;\n }\n const step = this.selectedStep;\n if (step) {\n this.editSteps = this.editSteps.filter((s) => s.Id !== step.Id);\n // Drop the deleted id from any downstream Inputs.\n for (const s of this.editSteps) {\n if (s.Inputs?.includes(step.Id)) {\n s.Inputs = s.Inputs.filter((i) => i !== step.Id);\n }\n }\n this.markDirty();\n this.selectedId = this.nodes[0]?.id ?? '';\n }\n }\n\n private defaultStep(kind: FeatureStepKind, id: string, label?: string, inputs?: string[]): FeatureStep {\n const base = { Id: id, Label: label, Inputs: inputs };\n switch (kind) {\n case 'select': return { ...base, Kind: 'select', Columns: [] };\n case 'impute': return { ...base, Kind: 'impute', Column: '', Strategy: 'mean' };\n case 'standardize': return { ...base, Kind: 'standardize', Columns: [] };\n case 'onehot': return { ...base, Kind: 'onehot', Column: '' };\n case 'bin': return { ...base, Kind: 'bin', Column: '', Bins: 5 };\n case 'embedding': return { ...base, Kind: 'embedding', Entity: '', EmbeddingModelRef: '', Dims: 384 };\n case 'llm-derived': return { ...base, Kind: 'llm-derived', FeaturePipelineRef: '' };\n case 'flow-agent': return { ...base, Kind: 'flow-agent', FlowAgentRef: '', InputMapping: {}, OutputMapping: {} };\n case 'vision-llm': return { ...base, Kind: 'vision-llm', ImageColumn: '', Prompt: { InlinePrompt: '' }, Output: { FeatureName: '', Kind: 'category' } };\n }\n }\n\n // ---- save / validate / train ----\n\n /** Serialize the editable state back onto the pipeline entity and Save(). */\n public async save(): Promise<void> {\n const p = this.selectedPipeline;\n if (!p || this.busy) {\n return;\n }\n this.busy = true;\n try {\n p.SourceBindings = JSON.stringify(this.editSources);\n p.FeatureSteps = JSON.stringify({ Steps: this.editSteps });\n p.TargetVariable = this.editTargetVariable;\n p.ProblemType = this.editProblemType;\n p.AlgorithmID = this.editAlgorithmId;\n p.Hyperparameters = this.editHyperparams || null;\n p.LeakageGuard = JSON.stringify(this.editLeakage);\n p.AsOfStrategy = JSON.stringify(this.editAsOf);\n p.ValidationStrategy = JSON.stringify(this.editValidation);\n const ok = await p.Save();\n if (ok) {\n this.dirty = false;\n this.notifications.CreateSimpleNotification(`Saved \"${p.Name}\".`, 'success', 3000);\n } else {\n this.notifications.CreateSimpleNotification(`Save failed: ${p.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error', 5000);\n }\n } finally {\n this.busy = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Client-side spec sanity check before training. */\n public validate(): void {\n const issues: string[] = [];\n if (this.editSources.length === 0) {\n issues.push('at least one source');\n }\n if (!this.editTargetVariable) {\n issues.push('a target variable');\n }\n if (!this.editAlgorithmId) {\n issues.push('an algorithm');\n }\n try {\n JSON.parse(this.editHyperparams || '{}');\n } catch {\n issues.push('valid hyperparameters JSON');\n }\n if (issues.length > 0) {\n this.notifications.CreateSimpleNotification(`Pipeline needs ${issues.join(', ')}.`, 'warning', 4500);\n } else {\n this.notifications.CreateSimpleNotification('Pipeline looks valid — ready to train.', 'success', 3000);\n }\n }\n\n /** Run the pipeline via the Train Remote Op, then refresh the engine. */\n public async train(): Promise<void> {\n const p = this.selectedPipeline;\n if (!p || this.busy || this.dirty) {\n return;\n }\n this.busy = true;\n this.notifications.CreateSimpleNotification(`Training \"${p.Name}\"…`, 'info', 2500);\n try {\n const op = new PredictiveStudioTrainModelOperation();\n const result = await op.Execute({ pipelineId: p.ID }, { provider: this.provider ?? undefined, user: this.currentUser ?? undefined });\n if (result.Success && result.Output) {\n const flagged = result.Output.leakageFlagged ? ' (leakage flag raised — needs sign-off)' : '';\n this.notifications.CreateSimpleNotification(`Trained ${p.Name} v${result.Output.version}${flagged}. See Registry.`, 'success', 5000);\n await this.engine.Config(true, this.currentUser ?? undefined, this.provider ?? undefined);\n } else {\n this.notifications.CreateSimpleNotification(result.ErrorMessage || 'Training failed.', 'error', 6000);\n }\n } catch (e) {\n this.notifications.CreateSimpleNotification(`Training error: ${e instanceof Error ? e.message : String(e)}`, 'error', 6000);\n } finally {\n this.busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public refine(): void {\n const p = this.selectedPipeline;\n if (!p) {\n this.askAgent.emit(this.starterPrompt);\n return;\n }\n const predicts = p.TargetVariable ? ` (predicts ${p.TargetVariable})` : '';\n this.askAgent.emit(`Help me refine the \"${p.Name}\" training pipeline${predicts}. Suggest improvements to the features or algorithm to raise holdout performance.`);\n }\n\n public statusClass(status: string | null): string {\n switch (status) {\n case 'Active': return 'green';\n case 'Draft': return 'amber';\n case 'Disabled': return 'gray';\n default: return 'gray';\n }\n }\n\n public nodeTypeLabel(type: NodeType): string {\n switch (type) {\n case 'src': return 'Source';\n case 'feat': return 'Feature step';\n case 'emb': return 'Embedding';\n case 'target': return 'Target';\n case 'algo': return 'Algorithm';\n case 'output': return 'Model output';\n }\n }\n\n // ---- layered layout (deterministic, topology-driven) ----\n\n private layoutDag(): void {\n this.nodeById = new Map(this.nodes.map((n) => [n.id, n]));\n const incoming = new Map<string, string[]>();\n const outgoing = new Map<string, string[]>();\n for (const n of this.nodes) {\n incoming.set(n.id, []);\n outgoing.set(n.id, []);\n }\n for (const e of this.edges) {\n if (this.nodeById.has(e.from) && this.nodeById.has(e.to)) {\n outgoing.get(e.from)!.push(e.to);\n incoming.get(e.to)!.push(e.from);\n }\n }\n const depth = this.computeLayers(incoming, outgoing);\n const maxDepth = Math.max(0, ...depth.values());\n const columns: DagNode[][] = Array.from({ length: maxDepth + 1 }, () => []);\n for (const n of this.nodes) {\n columns[depth.get(n.id) ?? 0].push(n);\n }\n this.positionColumns(columns);\n }\n\n private computeLayers(incoming: Map<string, string[]>, outgoing: Map<string, string[]>): Map<string, number> {\n const depth = new Map<string, number>(this.nodes.map((n) => [n.id, 0]));\n const indeg = new Map<string, number>(this.nodes.map((n) => [n.id, incoming.get(n.id)!.length]));\n const queue = this.nodes.filter((n) => indeg.get(n.id) === 0).map((n) => n.id);\n while (queue.length) {\n const id = queue.shift()!;\n const d = depth.get(id)!;\n for (const next of outgoing.get(id)!) {\n depth.set(next, Math.max(depth.get(next)!, d + 1));\n indeg.set(next, indeg.get(next)! - 1);\n if (indeg.get(next) === 0) {\n queue.push(next);\n }\n }\n }\n return depth;\n }\n\n private positionColumns(columns: DagNode[][]): void {\n const colStep = NODE_W + COL_GAP;\n const rowStep = NODE_H + ROW_GAP;\n const tallest = Math.max(1, ...columns.map((c) => c.length));\n const contentH = tallest * NODE_H + (tallest - 1) * ROW_GAP;\n columns.forEach((col, ci) => {\n const x = PAD_X + ci * colStep;\n const colH = col.length * NODE_H + (col.length - 1) * ROW_GAP;\n const yStart = PAD_Y + (contentH - colH) / 2;\n col.forEach((node, ri) => {\n node.x = x;\n node.y = yStart + ri * rowStep;\n });\n });\n this.canvasW = PAD_X * 2 + columns.length * NODE_W + (columns.length - 1) * COL_GAP;\n this.canvasH = PAD_Y * 2 + contentH;\n }\n\n public edgePath(edge: DagEdge): string {\n const from = this.nodeById.get(edge.from);\n const to = this.nodeById.get(edge.to);\n if (!from || !to) {\n return '';\n }\n const sx = from.x + NODE_W;\n const sy = from.y + NODE_H / 2;\n const tx = to.x;\n const ty = to.y + NODE_H / 2;\n const dx = tx - sx;\n const c1x = sx + dx * 0.5;\n const c2x = tx - dx * 0.5;\n return `M ${sx} ${sy} C ${c1x} ${sy}, ${c2x} ${ty}, ${tx} ${ty}`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ps-pipelines.component.js","sourceRoot":"","sources":["../../../src/PredictiveStudio/components/ps-pipelines.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { IMetadataProvider, UserInfo } from '@memberjunction/core';\nimport { MJMLTrainingPipelineEntity, PredictiveStudioTrainModelOperation } from '@memberjunction/core-entities';\nimport type {\n SourceBinding,\n FeatureStepGraph,\n FeatureStep,\n FeatureStepKind,\n AsOfStrategy,\n LeakageGuard,\n ValidationStrategy,\n ProblemType,\n} from '@memberjunction/predictive-studio-core';\nimport { PredictiveStudioEngine } from '../engine/predictive-studio.engine';\n\ntype NodeType = 'src' | 'feat' | 'emb' | 'target' | 'algo' | 'output';\n\ninterface DagNode {\n id: string;\n type: NodeType;\n title: string;\n icon: string;\n tag?: string;\n rows: { k: string; v: string }[];\n x: number;\n y: number;\n hasIn: boolean;\n hasOut: boolean;\n}\n\ninterface DagEdge {\n from: string;\n to: string;\n}\n\nconst NODE_W = 190;\nconst NODE_H = 86;\nconst COL_GAP = 86;\nconst ROW_GAP = 30;\nconst PAD_X = 28;\nconst PAD_Y = 28;\n\nconst SOURCE_KINDS: SourceBinding['Kind'][] = ['Entity', 'Query', 'ExternalEntity', 'VectorSet', 'FeaturePipeline'];\nconst STEP_KINDS: FeatureStepKind[] = ['select', 'impute', 'standardize', 'onehot', 'bin', 'embedding', 'llm-derived', 'flow-agent', 'vision-llm'];\nconst PROBLEM_TYPES: ProblemType[] = ['classification', 'regression'];\nconst IMPUTE_STRATEGIES: Array<'mean' | 'median' | 'mode' | 'constant'> = ['mean', 'median', 'mode', 'constant'];\n\nconst SOURCE_ICONS: Record<SourceBinding['Kind'], string> = {\n Entity: 'fa-solid fa-table',\n Query: 'fa-solid fa-magnifying-glass-chart',\n ExternalEntity: 'fa-solid fa-arrows-turn-to-dots',\n VectorSet: 'fa-solid fa-vector-square',\n FeaturePipeline: 'fa-solid fa-diagram-project',\n};\n\nconst STEP_ICONS: Record<FeatureStepKind, string> = {\n select: 'fa-solid fa-list-check',\n impute: 'fa-solid fa-fill-drip',\n standardize: 'fa-solid fa-ruler-combined',\n onehot: 'fa-solid fa-table-cells',\n bin: 'fa-solid fa-chart-simple',\n embedding: 'fa-solid fa-vector-square',\n 'llm-derived': 'fa-solid fa-wand-magic-sparkles',\n 'flow-agent': 'fa-solid fa-robot',\n 'vision-llm': 'fa-solid fa-eye',\n};\n\nconst PS_PIPELINES_STARTER_PROMPT =\n 'Help me build a training pipeline. I will tell you what I want to predict and on which entity; ' +\n 'you assemble the features (guarding against leakage), pick an algorithm, and train a versioned model.';\n\n/**\n * Training Pipelines panel — a LIVE, **editable** visual DAG builder over `MJ: ML Training Pipelines`.\n * The whole graph is persisted as JSON (`SourceBindings` + `FeatureSteps` + `AlgorithmID` +\n * `TargetVariable` + `AsOfStrategy`/`LeakageGuard`/`ValidationStrategy`), so the editor reads/writes the\n * REAL spec. The parsed spec is the editable state; nodes/edges are derived from it for rendering, so an\n * edit → re-derive → re-layout. Save serializes back to the entity; Train runs the pipeline. Editing is\n * inspector-driven (explicit controls, no fiddly port-dragging) — better for a structured, persisted DAG.\n * Fully entity-agnostic — every node derives from the pipeline's own refs. See\n * plans/predictive-studio-pipeline-builder.md.\n */\n@Component({\n standalone: true,\n selector: 'ps-pipelines',\n imports: [CommonModule, MJButtonDirective],\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['../predictive-studio.shared.css', './ps-pipelines.component.css'],\n template: `\n <div class=\"ps-panel ps-pipelines\" data-testid=\"ps-pipelines-panel\">\n @if (pipelines.length === 0) {\n <div class=\"ps-empty\" data-testid=\"ps-pipelines-empty\">\n <span class=\"ps-empty-ico\"><i class=\"fa-solid fa-diagram-project\"></i></span>\n <h3>No training pipelines yet</h3>\n <p>\n A training pipeline assembles features from your data, picks an algorithm, and trains a\n versioned model. The fastest way to build one is to describe your goal to the Model\n Development Agent — it designs the pipeline, guards against target leakage, and trains for you.\n </p>\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-ask-agent\"\n (click)=\"askAgent.emit(starterPrompt)\">\n <i class=\"fa-solid fa-robot\"></i> Ask the agent to build one\n </button>\n </div>\n } @else {\n <!-- Pipeline picker (its own scrollable row) -->\n <div class=\"pl-picker\" data-testid=\"ps-pipelines-picker\">\n @for (p of pipelines; track p.ID) {\n <button class=\"pl-pill\" [class.on]=\"isSelectedPipeline(p)\"\n data-testid=\"ps-pipelines-pill\" (click)=\"selectPipeline(p.ID)\" [title]=\"p.Name\">\n <i class=\"fa-solid fa-diagram-project\"></i> <span class=\"pl-pill-name\">{{ p.Name }}</span>\n <span class=\"ps-badge\" [class]=\"statusClass(p.Status)\">{{ p.Status }}</span>\n </button>\n }\n </div>\n\n <!-- Toolbar for the selected pipeline (its own row) -->\n <div class=\"pl-toolbar\">\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-save\" [disabled]=\"!dirty || busy\" (click)=\"save()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-validate\" [disabled]=\"busy\" (click)=\"validate()\">\n <i class=\"fa-solid fa-circle-check\"></i> Validate\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-train\" [disabled]=\"busy || dirty\" (click)=\"train()\">\n <i class=\"fa-solid fa-play\"></i> Train\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"refine()\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Agent\n </button>\n <span class=\"ps-spacer\"></span>\n @if (dirty) { <span class=\"ps-tag amber\" data-testid=\"ps-pipelines-dirty\"><i class=\"fa-solid fa-pen\"></i> Unsaved</span> }\n </div>\n\n <div class=\"builder\">\n <!-- Canvas -->\n <div class=\"canvas-wrap\">\n <div class=\"canvas-bar\">\n <span class=\"ps-small ps-muted\" style=\"font-weight:600\">Add:</span>\n <button class=\"ps-pchip s\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-database\"></i> Source</button>\n <button class=\"ps-pchip f\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Feature step</button>\n <span class=\"ps-spacer\"></span>\n <span class=\"ps-small ps-muted\"><i class=\"fa-solid fa-circle-nodes\"></i> {{ nodes.length }} nodes · {{ edges.length }} edges</span>\n </div>\n\n <div class=\"ps-flow big\" data-testid=\"ps-pipelines-canvas\"\n [style.width.px]=\"canvasW\" [style.height.px]=\"canvasH\">\n <svg class=\"ps-edges\" data-testid=\"ps-pipelines-edges\"\n [attr.width]=\"canvasW\" [attr.height]=\"canvasH\"\n [attr.viewBox]=\"'0 0 ' + canvasW + ' ' + canvasH\">\n @for (edge of edges; track edge.from + edge.to) {\n <path [attr.d]=\"edgePath(edge)\"></path>\n }\n </svg>\n @for (node of nodes; track node.id) {\n <div class=\"ps-node\" data-testid=\"ps-pipelines-node\" [attr.data-node-id]=\"node.id\"\n [ngClass]=\"node.type\" [class.selected]=\"node.id === selectedId\"\n [style.left.px]=\"node.x\" [style.top.px]=\"node.y\" (click)=\"selectNode(node.id)\">\n <div class=\"nh\">\n <i class=\"tile\" [ngClass]=\"node.icon\"></i>\n <span>{{ node.title }}</span>\n @if (node.tag) { <span class=\"ps-tag\">{{ node.tag }}</span> }\n </div>\n <div class=\"nb\">\n @for (row of node.rows; track row.k) {\n <div class=\"nb-row\"><span class=\"k\">{{ row.k }}</span><span>{{ row.v }}</span></div>\n }\n </div>\n @if (node.hasIn) { <span class=\"port in\"></span> }\n @if (node.hasOut) { <span class=\"port out\"></span> }\n </div>\n }\n </div>\n\n <div class=\"flow-toolbar\">\n <div class=\"legend\">\n <span><i class=\"sw src\"></i> Source</span>\n <span><i class=\"sw feat\"></i> Feature</span>\n <span><i class=\"sw emb\"></i> Embedding</span>\n <span><i class=\"sw target\"></i> Target</span>\n <span><i class=\"sw algo\"></i> Algorithm</span>\n </div>\n </div>\n </div>\n\n <!-- Inspector (editable) -->\n <div class=\"ps-col inspector\" data-testid=\"ps-pipelines-inspector\">\n <div class=\"ps-card insp\">\n <div class=\"ihead\">\n <i class=\"tile\" [ngClass]=\"selectedNode.icon\" [attr.data-type]=\"selectedNode.type\"></i>\n <div style=\"flex:1\">\n <h3 data-testid=\"ps-pipelines-inspector-title\">{{ selectedNode.title }}</h3>\n <div class=\"ps-small ps-muted\">{{ nodeTypeLabel(selectedNode.type) }} · selected</div>\n </div>\n @if (selectedNode.type === 'src' || selectedNode.type === 'feat' || selectedNode.type === 'emb') {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-delete\" (click)=\"deleteSelected()\"><i class=\"fa-solid fa-trash\"></i></button>\n }\n </div>\n <div class=\"ps-card-body\">\n <!-- SOURCE editor -->\n @if (selectedSource) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedSource.Kind\" (change)=\"setSourceKind($any($event.target).value)\">\n @for (k of sourceKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Reference (entity / query / id)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Ref\" (input)=\"setSourceRef($any($event.target).value)\" />\n </div>\n <div class=\"ps-field\"><label>Alias (optional)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Alias || ''\" (input)=\"setSourceAlias($any($event.target).value)\" />\n </div>\n }\n <!-- STEP editor -->\n @if (selectedStep) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedStep.Kind\" (change)=\"setStepKind($any($event.target).value)\">\n @for (k of stepKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Label</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedStep.Label || ''\" (input)=\"setStepLabel($any($event.target).value)\" />\n </div>\n @switch (selectedStep.Kind) {\n @case ('select') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns($any($event.target).value)\" /></div> }\n @case ('standardize') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns($any($event.target).value)\" /></div> }\n @case ('impute') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"stepField('Strategy')\" (change)=\"setStepStr('Strategy', $any($event.target).value)\">@for (s of imputeStrategies; track s) { <option [value]=\"s\">{{ s }}</option> }</select></div>\n }\n @case ('onehot') { <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div> }\n @case ('bin') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Bins</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Bins')\" (input)=\"setStepNum('Bins', $any($event.target).value)\" /></div>\n }\n @case ('embedding') {\n <div class=\"ps-field\"><label>Entity</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Entity')\" (input)=\"setStepStr('Entity', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Embedding model ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('EmbeddingModelRef')\" (input)=\"setStepStr('EmbeddingModelRef', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Dimensions</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Dims')\" (input)=\"setStepNum('Dims', $any($event.target).value)\" /></div>\n }\n @case ('llm-derived') { <div class=\"ps-field\"><label>Feature Pipeline ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FeaturePipelineRef')\" (input)=\"setStepStr('FeaturePipelineRef', $any($event.target).value)\" /></div> }\n @case ('flow-agent') { <div class=\"ps-field\"><label>Flow Agent ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FlowAgentRef')\" (input)=\"setStepStr('FlowAgentRef', $any($event.target).value)\" /></div> }\n @case ('vision-llm') { <div class=\"ps-field\"><label>Image column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('ImageColumn')\" (input)=\"setStepStr('ImageColumn', $any($event.target).value)\" /></div> }\n }\n <!-- rewire: upstream step inputs -->\n @if (otherSteps.length > 0) {\n <div class=\"ps-field\"><label>Inputs (upstream steps)</label>\n <div class=\"inputs-list\">\n @for (s of otherSteps; track s.Id) {\n <label class=\"inp-row\"><input type=\"checkbox\" [checked]=\"hasInput(s.Id)\" (change)=\"toggleInput(s.Id)\" /> {{ s.Label || s.Kind }}</label>\n }\n </div>\n <div class=\"ps-small ps-muted\" style=\"margin-top:4px\">No inputs = a root step fed directly by the sources.</div>\n </div>\n }\n }\n <!-- TARGET editor -->\n @if (selectedNode.type === 'target') {\n <div class=\"ps-field\"><label>Target variable</label><input class=\"mj-input\" type=\"text\" [value]=\"editTargetVariable\" (input)=\"setTargetVariable($any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Problem type</label><select class=\"mj-input\" [value]=\"editProblemType\" (change)=\"setProblemType($any($event.target).value)\">@for (pt of problemTypes; track pt) { <option [value]=\"pt\">{{ pt }}</option> }</select></div>\n }\n <!-- ALGORITHM editor -->\n @if (selectedNode.type === 'algo') {\n <div class=\"ps-field\"><label>Algorithm</label><select class=\"mj-input\" [value]=\"editAlgorithmId\" (change)=\"setAlgorithm($any($event.target).value)\">@for (a of algorithms; track a.ID) { <option [value]=\"a.ID\">{{ a.Name }}</option> }</select></div>\n <div class=\"ps-field\"><label>Hyperparameters (JSON)</label><textarea class=\"mj-textarea\" rows=\"4\" [value]=\"editHyperparams\" (input)=\"setHyperparams($any($event.target).value)\"></textarea></div>\n }\n @if (selectedNode.type === 'output') {\n <div class=\"ps-small ps-muted\">The trained model artifact. Run <strong>Train</strong> to produce a new versioned model from this pipeline.</div>\n }\n </div>\n </div>\n\n <!-- Leakage guard (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-shield-halved\" style=\"color:var(--mj-status-warning)\"></i><h3>Leakage guard</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Deny-list columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"denyText\" (input)=\"setDeny($any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Single-feature dominance threshold</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" min=\"0\" max=\"1\" [value]=\"editLeakage.SingleFeatureDominanceThreshold\" (input)=\"setThreshold($any($event.target).value)\" /></div>\n </div>\n </div>\n\n <!-- As-of strategy (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i><h3>As-of strategy</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Mode</label><select class=\"mj-input\" [value]=\"editAsOf.Mode\" (change)=\"setAsOfMode($any($event.target).value)\"><option value=\"none\">none</option><option value=\"column\">column</option><option value=\"offset\">offset</option></select></div>\n @if (editAsOf.Mode === 'column') { <div class=\"ps-field\"><label>Decision-date column</label><input class=\"mj-input\" type=\"text\" [value]=\"editAsOf.Column || ''\" (input)=\"setAsOfColumn($any($event.target).value)\" /></div> }\n @if (editAsOf.Mode === 'offset') { <div class=\"ps-field\"><label>Offset days before label</label><input class=\"mj-input\" type=\"number\" [value]=\"editAsOf.OffsetDays ?? 0\" (input)=\"setAsOfOffset($any($event.target).value)\" /></div> }\n </div>\n </div>\n\n <!-- Validation (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-scissors\" style=\"color:var(--mj-brand-primary)\"></i><h3>Validation</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"editValidation.Strategy\" (change)=\"setValStrategy($any($event.target).value)\"><option value=\"train_test_split\">train_test_split</option><option value=\"kfold\">kfold</option><option value=\"holdout\">holdout</option></select></div>\n @if (editValidation.Strategy === 'train_test_split') { <div class=\"ps-field\"><label>Test size</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.TestSize ?? 0.2\" (input)=\"setTestSize($any($event.target).value)\" /></div> }\n @if (editValidation.Strategy === 'kfold') { <div class=\"ps-field\"><label>Folds (k)</label><input class=\"mj-input\" type=\"number\" [value]=\"editValidation.K ?? 5\" (input)=\"setK($any($event.target).value)\" /></div> }\n <div class=\"ps-field\"><label>Locked holdout fraction</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.LockedHoldoutFraction\" (input)=\"setHoldout($any($event.target).value)\" /></div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class PSPipelinesComponent implements OnInit {\n @Input() engine!: PredictiveStudioEngine;\n @Input() provider: IMetadataProvider | null = null;\n @Input() currentUser: UserInfo | null = null;\n\n @Output() askAgent = new EventEmitter<string>();\n\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n\n public readonly starterPrompt = PS_PIPELINES_STARTER_PROMPT;\n public readonly sourceKinds = SOURCE_KINDS;\n public readonly stepKinds = STEP_KINDS;\n public readonly problemTypes = PROBLEM_TYPES;\n public readonly imputeStrategies = IMPUTE_STRATEGIES;\n\n public pipelines: MJMLTrainingPipelineEntity[] = [];\n public selectedPipelineId = '';\n\n // Editable spec state (the source of truth; nodes/edges are derived).\n private editSources: SourceBinding[] = [];\n private editSteps: FeatureStep[] = [];\n public editTargetVariable = '';\n public editProblemType: ProblemType = 'classification';\n public editAlgorithmId = '';\n public editHyperparams = '{}';\n public editLeakage: LeakageGuard = { DenyFields: [], SingleFeatureDominanceThreshold: 0.6 };\n public editAsOf: AsOfStrategy = { Mode: 'none' };\n public editValidation: ValidationStrategy = { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 };\n\n public nodes: DagNode[] = [];\n public edges: DagEdge[] = [];\n public selectedId = '';\n public canvasW = 800;\n public canvasH = 460;\n public dirty = false;\n public busy = false;\n\n private nodeById = new Map<string, DagNode>();\n private stepSeq = 0;\n\n ngOnInit(): void {\n this.pipelines = this.engine?.Pipelines ?? [];\n if (this.pipelines.length > 0) {\n this.selectPipeline(this.pipelines[0].ID);\n }\n }\n\n // ---- pipeline selection: entity JSON → editable state ----\n\n public selectPipeline(id: string): void {\n this.selectedPipelineId = id;\n const p = this.pipelines.find((x) => UUIDsEqual(x.ID, id));\n if (!p) {\n return;\n }\n this.editSources = this.parse<SourceBinding[]>(p.SourceBindings, []);\n this.editSteps = this.parse<FeatureStepGraph>(p.FeatureSteps, { Steps: [] }).Steps ?? [];\n this.editTargetVariable = p.TargetVariable ?? '';\n this.editProblemType = (p.ProblemType as ProblemType) ?? 'classification';\n this.editAlgorithmId = p.AlgorithmID ?? '';\n this.editHyperparams = p.Hyperparameters ?? '{}';\n this.editLeakage = this.parse<LeakageGuard>(p.LeakageGuard, { DenyFields: [], SingleFeatureDominanceThreshold: 0.6 });\n this.editAsOf = this.parse<AsOfStrategy>(p.AsOfStrategy, { Mode: 'none' });\n this.editValidation = this.parse<ValidationStrategy>(p.ValidationStrategy, { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 });\n this.stepSeq = this.editSteps.length;\n this.dirty = false;\n this.rebuild();\n this.selectedId = this.nodes[0]?.id ?? '';\n }\n\n private get selectedPipeline(): MJMLTrainingPipelineEntity | undefined {\n return this.pipelines.find((p) => UUIDsEqual(p.ID, this.selectedPipelineId));\n }\n\n public isSelectedPipeline(p: MJMLTrainingPipelineEntity): boolean {\n return UUIDsEqual(p.ID, this.selectedPipelineId);\n }\n\n private parse<T>(raw: string | null | undefined, fallback: T): T {\n if (!raw) {\n return fallback;\n }\n try {\n const value: unknown = JSON.parse(raw);\n return (value ?? fallback) as T;\n } catch {\n return fallback;\n }\n }\n\n private markDirty(): void {\n this.dirty = true;\n this.rebuild();\n }\n\n // ---- derive nodes/edges from editable state ----\n\n private rebuild(): void {\n const nodes: DagNode[] = [];\n const edges: DagEdge[] = [];\n\n this.editSources.forEach((sb, i) => nodes.push(this.sourceNode(sb, i)));\n this.editSteps.forEach((step) => nodes.push(this.stepNode(step)));\n nodes.push(this.targetNode());\n nodes.push(this.algoNode());\n nodes.push({ id: '__output', type: 'output', title: 'Model', icon: 'fa-solid fa-cube', x: 0, y: 0, hasIn: false, hasOut: false, rows: [{ k: 'status', v: this.selectedPipeline?.Status ?? 'Draft' }] });\n\n const stepIds = new Set(this.editSteps.map((s) => s.Id));\n const referenced = new Set<string>();\n for (const step of this.editSteps) {\n for (const input of step.Inputs ?? []) {\n if (stepIds.has(input)) {\n edges.push({ from: input, to: step.Id });\n referenced.add(input);\n }\n }\n }\n const roots = this.editSteps.filter((s) => (s.Inputs ?? []).filter((i) => stepIds.has(i)).length === 0);\n const sourceIds = this.editSources.map((_s, i) => `src:${i}`);\n if (this.editSteps.length > 0) {\n for (const sid of sourceIds) {\n for (const r of roots) {\n edges.push({ from: sid, to: r.Id });\n }\n }\n } else {\n for (const sid of sourceIds) {\n edges.push({ from: sid, to: '__algo' });\n }\n }\n for (const t of this.editSteps.filter((s) => !referenced.has(s.Id))) {\n edges.push({ from: t.Id, to: '__algo' });\n }\n edges.push({ from: '__target', to: '__algo' });\n edges.push({ from: '__algo', to: '__output' });\n\n this.nodes = nodes;\n this.edges = edges;\n this.markPorts();\n this.layoutDag();\n }\n\n private sourceNode(sb: SourceBinding, i: number): DagNode {\n const rows = [{ k: 'kind', v: sb.Kind }, { k: 'ref', v: sb.Ref || '—' }];\n if (sb.Alias) {\n rows.push({ k: 'alias', v: sb.Alias });\n }\n return { id: `src:${i}`, type: 'src', title: sb.Alias || sb.Ref || 'source', icon: SOURCE_ICONS[sb.Kind] ?? 'fa-solid fa-database', tag: sb.Kind, rows, x: 0, y: 0, hasIn: false, hasOut: true };\n }\n\n private stepNode(step: FeatureStep): DagNode {\n return { id: step.Id, type: step.Kind === 'embedding' ? 'emb' : 'feat', title: step.Label || step.Kind, icon: STEP_ICONS[step.Kind] ?? 'fa-solid fa-sliders', tag: step.Kind, rows: this.stepRows(step), x: 0, y: 0, hasIn: true, hasOut: true };\n }\n\n private stepRows(step: FeatureStep): { k: string; v: string }[] {\n switch (step.Kind) {\n case 'select': return [{ k: 'columns', v: `${step.Columns.length} cols` }];\n case 'impute': return [{ k: 'column', v: step.Column }, { k: 'strategy', v: step.Strategy }];\n case 'standardize': return [{ k: 'columns', v: `${step.Columns.length} cols` }, { k: 'scaler', v: 'z-score' }];\n case 'onehot': return [{ k: 'column', v: step.Column }];\n case 'bin': return [{ k: 'column', v: step.Column }, { k: 'bins', v: String(step.Bins) }];\n case 'embedding': return [{ k: 'entity', v: step.Entity }, { k: 'dims', v: String(step.Dims) }];\n case 'llm-derived': return [{ k: 'pipeline', v: step.FeaturePipelineRef }];\n case 'flow-agent': return [{ k: 'agent', v: step.FlowAgentRef }];\n case 'vision-llm': return [{ k: 'image', v: step.ImageColumn }, { k: 'output', v: step.Output.FeatureName }];\n default: return [];\n }\n }\n\n private targetNode(): DagNode {\n return { id: '__target', type: 'target', title: `Target: ${this.editTargetVariable || '—'}`, icon: 'fa-solid fa-bullseye', rows: [{ k: 'variable', v: this.editTargetVariable || '—' }, { k: 'type', v: this.editProblemType }], x: 0, y: 0, hasIn: false, hasOut: true };\n }\n\n private algoNode(): DagNode {\n const name = this.engine.AlgorithmName(this.editAlgorithmId);\n const rows = [{ k: 'algorithm', v: name }];\n const hp = this.parse<Record<string, unknown>>(this.editHyperparams, {});\n Object.entries(hp).slice(0, 2).forEach(([k, v]) => rows.push({ k, v: String(v) }));\n return { id: '__algo', type: 'algo', title: name, icon: 'fa-solid fa-shapes', rows, x: 0, y: 0, hasIn: true, hasOut: true };\n }\n\n private markPorts(): void {\n const hasIn = new Set(this.edges.map((e) => e.to));\n const hasOut = new Set(this.edges.map((e) => e.from));\n for (const n of this.nodes) {\n n.hasIn = hasIn.has(n.id);\n n.hasOut = hasOut.has(n.id);\n }\n }\n\n // ---- selection ----\n\n public selectNode(id: string): void {\n this.selectedId = id;\n }\n\n public get selectedNode(): DagNode {\n return this.nodeById.get(this.selectedId) ?? this.nodes[0] ?? { id: '', type: 'feat', title: '—', icon: 'fa-solid fa-sliders', rows: [], x: 0, y: 0, hasIn: false, hasOut: false };\n }\n\n public get selectedSourceIndex(): number {\n return this.selectedId.startsWith('src:') ? Number(this.selectedId.slice(4)) : -1;\n }\n public get selectedSource(): SourceBinding | null {\n const i = this.selectedSourceIndex;\n return i >= 0 ? this.editSources[i] ?? null : null;\n }\n public get selectedStep(): FeatureStep | null {\n return this.editSteps.find((s) => s.Id === this.selectedId) ?? null;\n }\n public get otherSteps(): FeatureStep[] {\n return this.editSteps.filter((s) => s.Id !== this.selectedId);\n }\n public get algorithms() {\n return this.engine?.Algorithms ?? [];\n }\n\n // ---- source editing ----\n\n public setSourceKind(kind: string): void { const s = this.selectedSource; if (s) { s.Kind = kind as SourceBinding['Kind']; this.markDirty(); } }\n public setSourceRef(ref: string): void { const s = this.selectedSource; if (s) { s.Ref = ref; this.markDirty(); } }\n public setSourceAlias(alias: string): void { const s = this.selectedSource; if (s) { s.Alias = alias || undefined; this.markDirty(); } }\n\n // ---- step editing ----\n\n public get columnsText(): string {\n const s = this.selectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n return s.Columns.join(', ');\n }\n return '';\n }\n public setColumns(text: string): void {\n const s = this.selectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n s.Columns = text.split(',').map((c) => c.trim()).filter(Boolean);\n this.markDirty();\n }\n }\n /** Read an arbitrary field off the selected step for display (narrowed by template @switch). */\n public stepField(field: string): string {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n const v = s?.[field];\n return v == null ? '' : String(v);\n }\n public setStepStr(field: string, value: string): void {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n if (s) { s[field] = value; this.markDirty(); }\n }\n public setStepNum(field: string, value: string): void {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n const n = Number(value);\n if (s && !Number.isNaN(n)) { s[field] = n; this.markDirty(); }\n }\n public setStepLabel(label: string): void { const s = this.selectedStep; if (s) { s.Label = label || undefined; this.markDirty(); } }\n\n /** Change a step's Kind, resetting its config to that Kind's defaults (preserving Id/Label/Inputs). */\n public setStepKind(kind: string): void {\n const idx = this.editSteps.findIndex((s) => s.Id === this.selectedId);\n if (idx < 0) {\n return;\n }\n const prev = this.editSteps[idx];\n this.editSteps[idx] = this.defaultStep(kind as FeatureStepKind, prev.Id, prev.Label, prev.Inputs);\n this.markDirty();\n }\n\n public hasInput(stepId: string): boolean {\n return (this.selectedStep?.Inputs ?? []).includes(stepId);\n }\n /** Toggle an upstream step input, preventing cycles. */\n public toggleInput(stepId: string): void {\n const s = this.selectedStep;\n if (!s) {\n return;\n }\n const inputs = s.Inputs ?? [];\n if (inputs.includes(stepId)) {\n s.Inputs = inputs.filter((i) => i !== stepId);\n } else if (!this.createsCycle(stepId, s.Id)) {\n s.Inputs = [...inputs, stepId];\n } else {\n this.notifications.CreateSimpleNotification('That would create a cycle.', 'warning', 2500);\n return;\n }\n this.markDirty();\n }\n /** True if making `target` depend on `from` would create a cycle (from is downstream of target). */\n private createsCycle(from: string, target: string): boolean {\n const byId = new Map(this.editSteps.map((s) => [s.Id, s]));\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n const id = stack.pop()!;\n if (id === target) {\n return true;\n }\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n stack.push(...(byId.get(id)?.Inputs ?? []));\n }\n return false;\n }\n\n // ---- target / algorithm editing ----\n\n public setTargetVariable(v: string): void { this.editTargetVariable = v; this.markDirty(); }\n public setProblemType(v: string): void { this.editProblemType = v as ProblemType; this.markDirty(); }\n public setAlgorithm(id: string): void { this.editAlgorithmId = id; this.markDirty(); }\n public setHyperparams(v: string): void { this.editHyperparams = v; this.markDirty(); }\n\n // ---- leakage / as-of / validation editing ----\n\n public get denyText(): string { return this.editLeakage.DenyFields.join(', '); }\n public setDeny(text: string): void { this.editLeakage.DenyFields = text.split(',').map((c) => c.trim()).filter(Boolean); this.dirty = true; }\n public setThreshold(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editLeakage.SingleFeatureDominanceThreshold = n; this.dirty = true; } }\n public setAsOfMode(v: string): void { this.editAsOf = { ...this.editAsOf, Mode: v as AsOfStrategy['Mode'] }; this.dirty = true; }\n public setAsOfColumn(v: string): void { this.editAsOf.Column = v; this.dirty = true; }\n public setAsOfOffset(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editAsOf.OffsetDays = n; this.dirty = true; } }\n public setValStrategy(v: string): void { this.editValidation = { ...this.editValidation, Strategy: v as ValidationStrategy['Strategy'] }; this.dirty = true; }\n public setTestSize(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.TestSize = n; this.dirty = true; } }\n public setK(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.K = n; this.dirty = true; } }\n public setHoldout(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.LockedHoldoutFraction = n; this.dirty = true; } }\n\n // ---- add / delete nodes ----\n\n public addSource(): void {\n this.editSources = [...this.editSources, { Kind: 'Entity', Ref: '' }];\n this.markDirty();\n this.selectedId = `src:${this.editSources.length - 1}`;\n }\n public addStep(): void {\n const id = `step_${++this.stepSeq}`;\n this.editSteps = [...this.editSteps, this.defaultStep('select', id)];\n this.markDirty();\n this.selectedId = id;\n }\n public deleteSelected(): void {\n const si = this.selectedSourceIndex;\n if (si >= 0) {\n this.editSources = this.editSources.filter((_s, i) => i !== si);\n this.markDirty();\n this.selectedId = this.nodes[0]?.id ?? '';\n return;\n }\n const step = this.selectedStep;\n if (step) {\n this.editSteps = this.editSteps.filter((s) => s.Id !== step.Id);\n // Drop the deleted id from any downstream Inputs.\n for (const s of this.editSteps) {\n if (s.Inputs?.includes(step.Id)) {\n s.Inputs = s.Inputs.filter((i) => i !== step.Id);\n }\n }\n this.markDirty();\n this.selectedId = this.nodes[0]?.id ?? '';\n }\n }\n\n private defaultStep(kind: FeatureStepKind, id: string, label?: string, inputs?: string[]): FeatureStep {\n const base = { Id: id, Label: label, Inputs: inputs };\n switch (kind) {\n case 'select': return { ...base, Kind: 'select', Columns: [] };\n case 'impute': return { ...base, Kind: 'impute', Column: '', Strategy: 'mean' };\n case 'standardize': return { ...base, Kind: 'standardize', Columns: [] };\n case 'onehot': return { ...base, Kind: 'onehot', Column: '' };\n case 'bin': return { ...base, Kind: 'bin', Column: '', Bins: 5 };\n case 'embedding': return { ...base, Kind: 'embedding', Entity: '', EmbeddingModelRef: '', Dims: 384 };\n case 'llm-derived': return { ...base, Kind: 'llm-derived', FeaturePipelineRef: '' };\n case 'flow-agent': return { ...base, Kind: 'flow-agent', FlowAgentRef: '', InputMapping: {}, OutputMapping: {} };\n case 'vision-llm': return { ...base, Kind: 'vision-llm', ImageColumn: '', Prompt: { InlinePrompt: '' }, Output: { FeatureName: '', Kind: 'category' } };\n }\n }\n\n // ---- save / validate / train ----\n\n /** Serialize the editable state back onto the pipeline entity and Save(). */\n public async save(): Promise<void> {\n const p = this.selectedPipeline;\n if (!p || this.busy) {\n return;\n }\n this.busy = true;\n try {\n p.SourceBindings = JSON.stringify(this.editSources);\n p.FeatureSteps = JSON.stringify({ Steps: this.editSteps });\n p.TargetVariable = this.editTargetVariable;\n p.ProblemType = this.editProblemType;\n p.AlgorithmID = this.editAlgorithmId;\n p.Hyperparameters = this.editHyperparams || null;\n p.LeakageGuard = JSON.stringify(this.editLeakage);\n p.AsOfStrategy = JSON.stringify(this.editAsOf);\n p.ValidationStrategy = JSON.stringify(this.editValidation);\n const ok = await p.Save();\n if (ok) {\n this.dirty = false;\n this.notifications.CreateSimpleNotification(`Saved \"${p.Name}\".`, 'success', 3000);\n } else {\n this.notifications.CreateSimpleNotification(`Save failed: ${p.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error', 5000);\n }\n } finally {\n this.busy = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Client-side spec sanity check before training. */\n public validate(): void {\n const issues: string[] = [];\n if (this.editSources.length === 0) {\n issues.push('at least one source');\n }\n if (!this.editTargetVariable) {\n issues.push('a target variable');\n }\n if (!this.editAlgorithmId) {\n issues.push('an algorithm');\n }\n try {\n JSON.parse(this.editHyperparams || '{}');\n } catch {\n issues.push('valid hyperparameters JSON');\n }\n if (issues.length > 0) {\n this.notifications.CreateSimpleNotification(`Pipeline needs ${issues.join(', ')}.`, 'warning', 4500);\n } else {\n this.notifications.CreateSimpleNotification('Pipeline looks valid — ready to train.', 'success', 3000);\n }\n }\n\n /** Run the pipeline via the Train Remote Op, then refresh the engine. */\n public async train(): Promise<void> {\n const p = this.selectedPipeline;\n if (!p || this.busy || this.dirty) {\n return;\n }\n this.busy = true;\n this.notifications.CreateSimpleNotification(`Training \"${p.Name}\"…`, 'info', 2500);\n try {\n const op = new PredictiveStudioTrainModelOperation();\n const result = await op.Execute({ pipelineId: p.ID }, { provider: this.provider ?? undefined, user: this.currentUser ?? undefined });\n if (result.Success && result.Output) {\n const flagged = result.Output.leakageFlagged ? ' (leakage flag raised — needs sign-off)' : '';\n this.notifications.CreateSimpleNotification(`Trained ${p.Name} v${result.Output.version}${flagged}. See Registry.`, 'success', 5000);\n await this.engine.Config(true, this.currentUser ?? undefined, this.provider ?? undefined);\n } else {\n this.notifications.CreateSimpleNotification(result.ErrorMessage || 'Training failed.', 'error', 6000);\n }\n } catch (e) {\n this.notifications.CreateSimpleNotification(`Training error: ${e instanceof Error ? e.message : String(e)}`, 'error', 6000);\n } finally {\n this.busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public refine(): void {\n const p = this.selectedPipeline;\n if (!p) {\n this.askAgent.emit(this.starterPrompt);\n return;\n }\n const predicts = p.TargetVariable ? ` (predicts ${p.TargetVariable})` : '';\n this.askAgent.emit(`Help me refine the \"${p.Name}\" training pipeline${predicts}. Suggest improvements to the features or algorithm to raise holdout performance.`);\n }\n\n public statusClass(status: string | null): string {\n switch (status) {\n case 'Active': return 'green';\n case 'Draft': return 'amber';\n case 'Disabled': return 'gray';\n default: return 'gray';\n }\n }\n\n public nodeTypeLabel(type: NodeType): string {\n switch (type) {\n case 'src': return 'Source';\n case 'feat': return 'Feature step';\n case 'emb': return 'Embedding';\n case 'target': return 'Target';\n case 'algo': return 'Algorithm';\n case 'output': return 'Model output';\n }\n }\n\n // ---- layered layout (deterministic, topology-driven) ----\n\n private layoutDag(): void {\n this.nodeById = new Map(this.nodes.map((n) => [n.id, n]));\n const incoming = new Map<string, string[]>();\n const outgoing = new Map<string, string[]>();\n for (const n of this.nodes) {\n incoming.set(n.id, []);\n outgoing.set(n.id, []);\n }\n for (const e of this.edges) {\n if (this.nodeById.has(e.from) && this.nodeById.has(e.to)) {\n outgoing.get(e.from)!.push(e.to);\n incoming.get(e.to)!.push(e.from);\n }\n }\n const depth = this.computeLayers(incoming, outgoing);\n const maxDepth = Math.max(0, ...depth.values());\n const columns: DagNode[][] = Array.from({ length: maxDepth + 1 }, () => []);\n for (const n of this.nodes) {\n columns[depth.get(n.id) ?? 0].push(n);\n }\n this.positionColumns(columns);\n }\n\n private computeLayers(incoming: Map<string, string[]>, outgoing: Map<string, string[]>): Map<string, number> {\n const depth = new Map<string, number>(this.nodes.map((n) => [n.id, 0]));\n const indeg = new Map<string, number>(this.nodes.map((n) => [n.id, incoming.get(n.id)!.length]));\n const queue = this.nodes.filter((n) => indeg.get(n.id) === 0).map((n) => n.id);\n while (queue.length) {\n const id = queue.shift()!;\n const d = depth.get(id)!;\n for (const next of outgoing.get(id)!) {\n depth.set(next, Math.max(depth.get(next)!, d + 1));\n indeg.set(next, indeg.get(next)! - 1);\n if (indeg.get(next) === 0) {\n queue.push(next);\n }\n }\n }\n return depth;\n }\n\n private positionColumns(columns: DagNode[][]): void {\n const colStep = NODE_W + COL_GAP;\n const rowStep = NODE_H + ROW_GAP;\n const tallest = Math.max(1, ...columns.map((c) => c.length));\n const contentH = tallest * NODE_H + (tallest - 1) * ROW_GAP;\n columns.forEach((col, ci) => {\n const x = PAD_X + ci * colStep;\n const colH = col.length * NODE_H + (col.length - 1) * ROW_GAP;\n const yStart = PAD_Y + (contentH - colH) / 2;\n col.forEach((node, ri) => {\n node.x = x;\n node.y = yStart + ri * rowStep;\n });\n });\n this.canvasW = PAD_X * 2 + columns.length * NODE_W + (columns.length - 1) * COL_GAP;\n this.canvasH = PAD_Y * 2 + contentH;\n }\n\n public edgePath(edge: DagEdge): string {\n const from = this.nodeById.get(edge.from);\n const to = this.nodeById.get(edge.to);\n if (!from || !to) {\n return '';\n }\n const sx = from.x + NODE_W;\n const sy = from.y + NODE_H / 2;\n const tx = to.x;\n const ty = to.y + NODE_H / 2;\n const dx = tx - sx;\n const c1x = sx + dx * 0.5;\n const c2x = tx - dx * 0.5;\n return `M ${sx} ${sy} C ${c1x} ${sy}, ${c2x} ${ty}, ${tx} ${ty}`;\n }\n}\n"]}
|