@memberjunction/ng-dashboards 5.7.0 → 5.9.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/AI/components/models/model-management.component.d.ts +2 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +44 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +5 -2
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +10 -7
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +96 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -0
- package/dist/Integration/components/activity/activity.component.js +961 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -0
- package/dist/Integration/components/connections/connections.component.d.ts +194 -0
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -0
- package/dist/Integration/components/connections/connections.component.js +2368 -0
- package/dist/Integration/components/connections/connections.component.js.map +1 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts +241 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2373 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -0
- package/dist/Integration/components/overview/overview.component.d.ts +60 -0
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -0
- package/dist/Integration/components/overview/overview.component.js +628 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +203 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js +2057 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -0
- package/dist/Integration/components/schedules/schedules.component.d.ts +110 -0
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -0
- package/dist/Integration/components/schedules/schedules.component.js +842 -0
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -0
- package/dist/Integration/components/visual-editor/visual-editor.component.d.ts +141 -0
- package/dist/Integration/components/visual-editor/visual-editor.component.d.ts.map +1 -0
- package/dist/Integration/components/visual-editor/visual-editor.component.js +1538 -0
- package/dist/Integration/components/visual-editor/visual-editor.component.js.map +1 -0
- package/dist/Integration/components/widgets/integration-card.component.d.ts +22 -0
- package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -0
- package/dist/Integration/components/widgets/integration-card.component.js +262 -0
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -0
- package/dist/Integration/components/widgets/run-history-panel.component.d.ts +29 -0
- package/dist/Integration/components/widgets/run-history-panel.component.d.ts.map +1 -0
- package/dist/Integration/components/widgets/run-history-panel.component.js +399 -0
- package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -0
- package/dist/Integration/index.d.ts +11 -0
- package/dist/Integration/index.d.ts.map +1 -0
- package/dist/Integration/index.js +20 -0
- package/dist/Integration/index.js.map +1 -0
- package/dist/Integration/integration.module.d.ts +26 -0
- package/dist/Integration/integration.module.d.ts.map +1 -0
- package/dist/Integration/integration.module.js +107 -0
- package/dist/Integration/integration.module.js.map +1 -0
- package/dist/Integration/services/integration-data.service.d.ts +268 -0
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -0
- package/dist/Integration/services/integration-data.service.js +697 -0
- package/dist/Integration/services/integration-data.service.js.map +1 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +27 -4
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +338 -144
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/__tests__/integration-data-service.test.d.ts +2 -0
- package/dist/__tests__/integration-data-service.test.d.ts.map +1 -0
- package/dist/__tests__/integration-data-service.test.js +131 -0
- package/dist/__tests__/integration-data-service.test.js.map +1 -0
- package/dist/__tests__/mapping-validation.test.d.ts +2 -0
- package/dist/__tests__/mapping-validation.test.d.ts.map +1 -0
- package/dist/__tests__/mapping-validation.test.js +170 -0
- package/dist/__tests__/mapping-validation.test.js.map +1 -0
- package/dist/module.d.ts +2 -1
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +17 -6
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +2 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +42 -39
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connections.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/connections/connections.component.ts","../../../../src/Integration/components/connections/connections.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAqB,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAKlE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EAIvB,MAAM,yCAAyC,CAAC;;;;;;;;;;;;;;ICO3C,+BAA+B;IAC7B,iCAAwD;IAC1D,iBAAM;;;;IAKN,+BAAyB;IACvB,wBAA2C;IAC3C,0BAAI;IAAA,mCAAmB;IAAA,iBAAK;IAC5B,yBAAG;IAAA,yEAAyD;IAAA,iBAAI;IAChE,kCAAgE;IAA5C,wMAAS,mBAAY,KAAC;IACxC,wBAAgC;IAChC,4CACF;IACF,AADE,iBAAS,EACL;;;IAmCQ,wBAAwC;;;IAExC,wBAAwC;;;IAJ5C,+BAAmH;IAG/G,AAFF,uIAA0B,iHAEjB;IAGT,4BAAM;IAAA,YAAwB;IAChC,AADgC,iBAAO,EACjC;;;IAPkE,AAA1C,qDAAyC,wCAA2C;IAChH,cAIC;IAJD,+CAIC;IACK,eAAwB;IAAxB,2CAAwB;;;IAkBxB,wBAA2C;IAC3C,6BACF;;;IACE,wBACF;;;;IAbN,AADF,+BAAoC,cACE;IAClC,wBAAiE;IACjE,gCAAkC;IAAA,gEAAgD;IAAA,iBAAO;IAEvF,AADF,+BAAoC,iBAIsB;IAAhD,8QAAS,+CAAqC,KAAC;IAInD,AAHF,8HAAkB,wGAGT;IAGX,iBAAS;IACT,kCAA4D;IAAzB,6NAAS,qBAAc,KAAC;IACzD,yBACF;IAGN,AADE,AADE,AADE,iBAAS,EACL,EACF,EACF;;;IAdQ,eAAuB;IAAvB,4CAAuB;IAE7B,cAKC;IALD,2CAKC;;;IAiBL,wBAA2C;;;IAE3C,sBACF;;;;IAMA,kCAAmF;IAA1C,8QAAS,yCAA+B,KAAC;IAChF,0BACF;IAAA,iBAAS;;;;IAQL,AADF,+BAAgC,iBACoC;IAAxC,+QAAS,oBAAa,MAAM,aAAU,KAAC;IAC/D,wBAAyC;IAAC,sBAC5C;IAAA,iBAAS;IACT,kCAAqE;IAA3C,+QAAS,oBAAa,SAAS,aAAU,KAAC;IAClE,wBAAsC;IAAC,YACzC;IAAA,iBAAS;IACT,kCAAqF;IAA1C,+QAAS,oBAAa,QAAQ,aAAU,KAAC;IAClF,wBAAqC;IAAC,wBACxC;IACF,AADE,iBAAS,EACL;;;;IALqC,eACzC;IADyC,sEACzC;;;;IA7FR,AAFF,+BAA6B,cAE0C;IAAzC,wOAAS,wCAA8B,KAAC;IAEhE,AADF,+BAAyB,cACgF;IACrG,wBAAwF;IAC1F,iBAAM;IACN,4BAA6C;IAAA,YAA6B;IAC5E,AAD4E,iBAAO,EAC7E;IAIN,AADA,+BAAuB,cACA;IAAA,YAA8B;IAAA,iBAAM;IAC3D,gCAA0B;IAAA,aAAiC;IAAA,iBAAM;IAE/D,AADF,gCAAuB,gBACI;IAAA,aAAiC;IAAA,iBAAO;IACjE,iCAA6B;IAAA,uBAAQ;IAAA,iBAAO;IAC5C,iCAAyB;IAAA,aAAgC;IAC3D,AAD2D,iBAAO,EAC5D;IACN,gCAA4B;IAC1B,yBAAyC;IACzC,aACF;IAAA,iBAAM;IAGN,4HAAgE;IAWpE,AADE,iBAAM,EACF;IAGJ,6HAAkD;IA2BhD,AADF,gCAAyB,kBAI0C;IAAzD,4OAAS,wDAA8C,KAAC;IAG5D,AAFF,0HAA6C,2FAEpC;IAGX,iBAAS;IACT,mCAA2E;IAAxC,4OAAS,oBAAa,MAAM,aAAU,KAAC;IACxE,4BACF;IAAA,iBAAS;IACT,+HAAmC;IAMjC,AADF,gCAA+B,kBACqD;IAArD,kPAAS,oDAA0C,KAAC;IAC/E,yBAA6C;IAC/C,iBAAS;IACT,6HAA0C;IAehD,AADE,AADE,iBAAM,EACF,EACF;;;;;IAnGyB,eAA6E;IAA7E,gGAA6E;IACjG,cAA6D;IAA7D,4EAA6D;IAE5D,cAAsC;IAAtC,qDAAsC;IAAC,cAA6B;IAA7B,uDAA6B;IAKrD,eAA8B;IAA9B,iDAA8B;IAC3B,eAAiC;IAAjC,oDAAiC;IAEhC,eAAiC;IAAjC,2DAAiC;IAEjC,eAAgC;IAAhC,0DAAgC;IAIzD,eACF;IADE,qGACF;IAGA,cASC;IATD,sGASC;IAKH,cAuBC;IAvBD,gFAuBC;IAMS,eAA4B;IAA5B,iDAA4B;IAElC,cAIC;IAJD,2EAIC;IAKH,eAIC;IAJD,iEAIC;IAKC,eAYC;IAZD,wEAYC;;;;IAtGX,+BAAuB;IACrB,uHAyGC;IAGD,+BAAwE;IAAvB,qMAAS,mBAAY,KAAC;IAEnE,AADF,+BAA8B,cACD;IACzB,wBAAgC;IAClC,iBAAM;IACN,gCAA6B;IAAA,+BAAe;IAGlD,AADE,AADE,AAD8C,iBAAO,EAC/C,EACF,EACF;;;IApHJ,cAyGC;IAzGD,iCAyGC;;;;IAzID,AADF,AADF,8BAAgC,aACL,YACE;IAAA,4BAAY;IAAA,iBAAK;IAC1C,gCAA2B;IAAA,YAA6E;IAC1G,AAD0G,iBAAO,EAC3G;IACN,kCAAsE;IAAlD,wLAAS,mBAAY,KAAC;IACxC,wBAAgC;IAChC,iCACF;IACF,AADE,iBAAS,EACL;IAGN,qGAAiB;IAOjB,uGAA8C;IAa9C,uGAA4C;;;IA7Bb,eAA6E;IAA7E,gHAA6E;IAS5G,eAIC;IAJD,2CAIC;IAGD,cAUC;IAVD,gFAUC;IAGD,cAuHC;IAvHD,8EAuHC;;;;IAaG,mDAImC;IAAjC,yNAAS,6BAAsB,KAAC;IAClC,iBAA0B;;;IAFxB,AADA,AADA,kDAA6B,+DAC2B,wCACxB;;;;IAiC5B,kCAA2F;IAAlD,uNAAS,qDAAuC,KAAC;IACxF,wBAAyC;IAAC,0BAC5C;IAAA,iBAAS;;;IAmCL,+BAA6B;IAAA,wBAA2C;IAAC,2BAAU;IAAA,iBAAM;;;IAEzF,+BAA0B;IAAA,mDAAmC;IAAA,iBAAM;;;IAK/D,mCAA2B;IAAA,YAA2B;IAAA,iBAAS;;;IAAvD,oCAAkB;IAAC,cAA2B;IAA3B,mDAA2B;;;;IAH1D,mCAAoE;IAArC,sXAAoC;IACjE,mCAAgC;IAAA,uCAAuB;IAAA,iBAAS;IAChE,qJAEC;IACH,iBAAS;;;IALsB,6DAAoC;IACzD,cAAc;IAAd,4BAAc;IACtB,eAEC;IAFD,4CAEC;;;IA6CD,wBAA2C;;;IAE3C,yBAAiC;IAAC,qBACpC;;;;IA1DF,AADF,AADF,AADF,+BAA2B,cACA,cACI,gBACI;IAAA,6BAAa;IAAA,iBAAQ;IAKhD,AAFA,AAFF,kIAA8B,4GAEoB,+GAEzC;IAQX,iBAAM;IAGJ,AADF,+BAAmC,gBACJ;IAAA,0BAAS;IAAA,iBAAQ;IAE5C,AADF,gCAAoC,kBAC8E;IAA5D,iPAA2B,MAAM,KAAC;IACpF,yBAAuC;IACzC,iBAAS;IACT,mCAAoI;IAAvE,iPAA2B,eAAe,KAAC;IACtG,yBAAsC;IACxC,iBAAS;IACT,mCAA8G;IAA1D,iPAA2B,MAAM,KAAC;IACpF,yBAAsC;IAG5C,AADE,AADE,iBAAS,EACL,EACF;IAGJ,AADF,gCAAgD,iBACjB;IAAA,0BAAS;IAAA,iBAAQ;IAE5C,AADF,gCAA+B,+BAUuB;IAAlD,4PAAmB,oCAA6B,KAAC;IACnD,iBAAmB;IACnB,mCAA+F;IAAhE,wNAAS,4BAAqB,KAAC;IAC5D,yBAAgC;IAAC,sBACnC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;IAGJ,AADF,gCAA6B,mBAGI;IAAvB,wNAAS,mBAAY,KAAC;IAG1B,AAFF,kIAAsB,mGAEb;IAGX,iBAAS;IACT,oCAAgE;IAA7B,wNAAS,yBAAkB,KAAC;IAC7D,0BAAiC;IAIzC,AADE,AADE,AADE,iBAAS,EACL,EACF,EACF;;;IAhEA,eAWC;IAXD,wGAWC;IAMS,eAA2C;IAA3C,2DAA2C;IAG3C,eAAoD;IAApD,oEAAoD;IAGpD,eAA2C;IAA3C,2DAA2C;IAWjD,eAAmC;IAMnC,AADA,AADA,AADA,AADA,AADA,AADA,wDAAmC,uCACJ,qCACF,2BACH,2BACA,+CACoB,sBACzB;IAWjB,eAA6C;IAA7C,yEAA6C;IAEnD,cAIC;IAJD,iDAIC;;;IAYT,+BAA+B;IAC7B,kCAAuD;IACzD,iBAAM;;;;IAEN,+BAA0B;IACxB,yBAAgC;IAChC,0BAAI;IAAA,yCAAyB;IAAA,iBAAK;IAClC,yBAAG;IAAA,4EAA4D;IAAA,iBAAI;IACnE,mCAAyE;IAA9B,uNAAS,0BAAmB,KAAC;IACtE,wBAAgC;IAAC,2CACnC;IACF,AADE,iBAAS,EACL;;;IAoCI,iCAAoE;IAClE,yBAAgC;IAClC,iBAAO;;;;IAxBb,gCAAmG;IAA/B,oPAAS,+BAAoB,KAAC;IAChG,iCAA+D;IAAnC,8LAAS,wBAAwB,KAAC;IAE1D,AADF,kCAAyF,iBAGpC;IAA5C,8PAAU,yCAA8B,KAAC;IAFhD,iBAEmD;IACnD,4BAAmC;IAEvC,AADE,iBAAQ,EACH;IACP,iCAA4D;IAC1D,YACF;IAAA,iBAAO;IAEL,AADF,iCAA+B,WACyB;IACpD,YACF;IACF,AADE,iBAAO,EACF;IACP,kCAA8C;IAC5C,aACF;IAAA,iBAAO;IACP,kCAA0B;IACxB,6IAAwB;IAKxB,kCAAiF;IAC/E,yBAAyC;IAC3C,iBAAO;IACP,kCAA4B;IAC1B,0BAAyC;IAG/C,AADE,AADE,iBAAO,EACF,EACH;;;;IAjCsB,oDAAuC;IAElC,eAA2D;IAA3D,6EAA2D;IAE/E,cAA0B;IAA1B,4CAA0B;IAKT,eAA+B;IAA/B,iDAA+B;IACzD,cACF;IADE,wFACF;IAEQ,eAA+C;IAA/C,+DAA+C;IACnD,cACF;IADE,2EACF;IAEwB,cAAmB;IAAnB,qCAAmB;IAC3C,cACF;IADE,8CACF;IAEE,eAIC;IAJD,gDAIC;IACiC,cAA8C;IAA9C,gEAA8C;;;IASpF,gCAAgC;IAC9B,mDACF;IAAA,iBAAM;;;IA/CR,AADF,gCAA+B,gBACD;IAAA,oBAAI;IAAA,iBAAO;IACvC,iCAA4B;IAAA,+BAAe;IAAA,iBAAO;IAClD,4BAAsC;IACtC,iCAA0B;IAAA,yBAAS;IAAA,iBAAO;IAC1C,iCAA0B;IAAA,sBAAM;IAClC,AADkC,iBAAO,EACnC;IAGN,iCAA+B;IAC7B,uPAuCC;IACH,iBAAM;;;IAxCJ,gBAuCC;IAvCD,wCAuCC;;;;IA/LH,AADF,+BAA2B,iBACgE;IAAzD,wMAAS,wBAAiB,KAAC;IACzD,wBAAsC;IACxC,iBAAS;IAEP,AADF,+BAAgC,cACiF;IAC7G,wBAAgG;IAClG,iBAAM;IAEJ,AADF,+BAAgC,aACL;IAAA,YAAsC;IAAA,iBAAK;IACpE,gCAA8B;IAC5B,aACA;IAAA,iCAA6B;IAAA,uBAAQ;IAAA,iBAAO;IAC5C,aACA;IAAA,iCAA6B;IAAA,uBAAQ;IAAA,iBAAO;IAC5C,6BAAqD;IAAA,aAAqC;IAGhG,AADE,AADE,AAD4F,iBAAO,EAC5F,EACH,EACF;IAEJ,AADF,gCAAmC,kBAC0D;IAA3D,yMAAS,4CAA8B,KAAC;IACtE,yBAAyC;IAC3C,iBAAS;IACT,wHAA2C;IAM/C,AADE,iBAAM,EACF;IAKF,AADF,AADF,gCAA4B,eACO,gBACA;IAC7B,aACA;IAAA,iCAA6B;IAAA,uBAAQ;IAAA,iBAAO;IAC5C,aACF;IACF,AADE,iBAAO,EACH;IAEJ,AADF,gCAAkC,eACL;IACzB,yBAAkC;IAClC,kCAG0C;IAAnC,8MAAS,6BAAsB,KAAC;IACzC,AAJE,iBAG0C,EACtC;IACN,mCAA2F;IAA/D,yMAAS,0BAAmB,KAAC;IACvD,yBAAgC;IAAC,0BACnC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;IAGN,uHAAuB;IAsFrB,AATA,AAJF,qHAAuB,+FAIyC,qFAStB;;;IAxIb,eAAqF;IAArF,4GAAqF;IACzG,cAAqE;IAArE,wFAAqE;IAG/C,eAAsC;IAAtC,6DAAsC;IAE7D,eACA;IADA,2EACA;IACA,eACA;IADA,kFACA;IACM,eAA8C;IAA9C,iEAA8C;IAAC,cAAqC;IAArC,mEAAqC;IAQ9F,eAIC;IAJD,6EAIC;IAQC,eACA;IADA,+HACA;IACA,eACF;IADE,mEACF;IAOS,eAA0B;IAA1B,+CAA0B;IAGuB,cAAgC;IAAhC,gDAAgC;IAO9F,eAsEC;IAtED,kDAsEC;IAGD,cAkEC;IAlED,mKAkEC;;;IApNL,8BAAyB;IAgBrB,AAXF,yHAAuB,sEAWd;IAuMX,iBAAM;;;IAlNJ,cAgNC;IAhND,gDAgNC;;;IAyBS,yBAAiC;;;IAEjC,YACF;;;IADE,gDACF;;;IAKF,2BAAqF;;;;IAA9D,2EAAuD;;;IAV9E,AADF,gCAA6H,eAClG;IAGrB,AAFF,0GAAoC,0EAE3B;IAGX,iBAAM;IACN,iCAAyB;IAAA,YAAgB;IAC3C,AAD2C,iBAAO,EAC5C;IACN,4GAAwC;;;;IAV+B,AAAhD,mEAA+C,2DAAsD;IAExH,eAIC;IAJD,iEAIC;IAEsB,eAAgB;IAAhB,oCAAgB;IAE3C,cAEC;IAFD,sEAEC;;;IAoBG,gCAA6B;IAC3B,yBAAwC;IACxC,yBAAG;IAAA,0CAA0B;IAAA,iBAAI;IACjC,iCAAmC;IAAA,0EAA0D;IAC/F,AAD+F,iBAAO,EAChG;;;IAEN,gCAA6B;IAC3B,yBAAkC;IAClC,yBAAG;IAAA,wCAAwB;IAC7B,AAD6B,iBAAI,EAC3B;;;IAYE,gCAAgC;IAAA,YAAqB;IAAA,iBAAM;;;IAA3B,cAAqB;IAArB,yCAAqB;;;;IARzD,gCAEsC;IAAjC,oPAAS,iCAAsB,KAAC;IACnC,gCAAuF;IACrF,oBAA8C;IAChD,iBAAM;IACN,gCAAyB;IAAA,YAAc;IAAA,iBAAM;IAC7C,yIAAuB;IAGzB,iBAAM;;;;IATD,wEAAoD;IAEvB,cAAsD;IAAtD,0EAAsD;IACjF,cAAsC;IAAtC,sDAAsC;IAElB,eAAc;IAAd,kCAAc;IACvC,cAEC;IAFD,8CAEC;;;IAXP,gCAAqC;IACnC,oIAYC;IACH,iBAAM;;;IAbJ,cAYC;IAZD,0CAYC;;;;IAlCL,AADF,gCAA0B,cACD;IAAA,mDAAmC;IAAA,iBAAK;IAC/D,gCAAwB;IACtB,yBAA8C;IAC9C,kCAGmC;IAA5B,mUAAyB;IAClC,AAJE,iBAGmC,EAC/B;IAaJ,AALA,AANF,qHAA+E,+FAM/B,+FAKvC;IAiBX,iBAAM;;;IA/BK,eAAyB;IAAzB,kDAAyB;IAGlC,cA2BC;IA3BD,8JA2BC;;;IAuBO,mCAA6B;IAAA,YAAkB;IAAA,iBAAS;;;IAAhD,sCAAoB;IAAC,cAAkB;IAAlB,sCAAkB;;;;IAHnD,mCAA8E;IAAhC,+VAA+B;IAC3E,mCAAkC;IAAA,mCAAmB;IAAA,iBAAS;IAC9D,wIAEC;IACH,iBAAS;;;IALqC,wDAA+B;IACnE,cAAgB;IAAhB,8BAAgB;IACxB,eAEC;IAFD,+BAEC;;;IAGH,6BAA6E;;;IAAvC,gDAA2B;;;IAEjE,gCAAuB;IAAA,qEAAqD;IAAA,iBAAM;;;;IAkBhF,AADF,gCAAiC,eACF;IAC3B,yBAA+B;IAC/B,4BAAM;IAAA,YAA6B;IACrC,AADqC,iBAAO,EACtC;IACN,mCAA6D;IAA5B,wNAAS,wBAAiB,KAAC;IAC1D,yBAAiC;IAErC,AADE,iBAAS,EACL;;;IALI,eAA6B;IAA7B,oDAA6B;;;;IAQrC,AADF,gCAAgC,iBACyC;IAApC,wNAAS,gCAAyB,KAAC;IACpE,yBAA+B;IAC/B,4CACF;IAAA,iBAAS;IACT,kCAAoE;IAAjC,wNAAS,6BAAsB,KAAC;IACjE,wBAAgC;IAChC,uCACF;IACF,AADE,iBAAS,EACL;;;IAIN,gCAAgC;IAC9B,kCAAoE;IACtE,iBAAM;;;;IAMF,gCAA2E;IAAzC,sPAAS,yCAA8B,KAAC;IACxE,yBAA+B;IAC/B,4BAAM;IAAA,YAAe;IACvB,AADuB,iBAAO,EACxB;;;IADE,eAAe;IAAf,mCAAe;;;IAJ3B,gCAA6B;IAC3B,qIAKC;IACH,iBAAM;;;IANJ,cAKC;IALD,yCAKC;;;;IA1EP,AADF,gCAA0B,cACD;IAAA,sCAAsB;IAAA,iBAAK;IAEhD,AADF,gCAAwB,iBACyB;IAAA,+BAAe;IAAA,iBAAQ;IACtE,kCAIsC;IAA/B,yUAA4B;IACrC,AALE,iBAIsC,EAClC;IAGJ,AADF,gCAAwB,iBACwB;IAAA,uBAAO;IAAA,iBAAQ;IAU3D,AAFA,AAPF,0HAA0B,mGAOW,iGAE5B;IAGX,iBAAM;IAGJ,AADF,iCAAwB,kBACgC;IAAA,6BAAY;IAAA,kCAA6B;IAAA,2BAAU;IAAO,AAAP,iBAAO,EAAQ;IACxH,sCAImB;IADT,2VAAmC;IAE/C,AADqB,iBAAW,EAC1B;IAIJ,AADF,iCAAwB,kBACI;IAAA,2BAAU;IAAA,iBAAQ;IAW1C,AAVF,uHAA0B,iGAUjB;IAaT,uHAA4B;IAM5B,uHAAsF;IAW1F,AADE,iBAAM,EACF;;;IAvEK,eAA4B;IAA5B,qDAA4B;IAKnC,eAWC;IAXD,0FAWC;IAQS,eAAmC;IAAnC,4DAAmC;IAO7C,eAqBC;IArBD,qDAqBC;IAED,eAIC;IAJD,uDAIC;IAED,cASC;IATD,+HASC;;;;IAYC,AADF,gCAAyB,kBAIe;IAA9B,uNAAS,0BAAmB,KAAC;IACnC,yBAAgC;IAChC,iCACF;IAAA,iBAAS;IACT,8BAAqB;IAAA,uEAAuD;IAC9E,AAD8E,iBAAI,EAC5E;;;IAKJ,AADF,gCAA0B,eACE;IACxB,yBAAiD;IACnD,iBAAM;IACN,yBAAG;IAAA,qCAAqB;IAC1B,AAD0B,iBAAI,EACxB;;;IAOA,wBAAwC;;;IAExC,wBAAwC;;;IAK1C,gCAAgC;IAC9B,YACF;IAAA,iBAAM;;;IADJ,cACF;IADE,gFACF;;;;IAGA,mCAAwF;IAArD,qOAAS,0BAAmB,KAAC;IAC9D,yBAAwC;IACxC,uBACF;IAAA,iBAAS;;;IAjBX,AADF,gCAA4H,eAC5F;IAG1B,AAFF,gIAA0B,0GAEjB;IAGX,iBAAM;IACN,gCAAiC;IAAA,YAAwB;IAAA,iBAAM;IAC/D,mIAAsD;IAKtD,sIAA2B;IAM7B,iBAAM;;;IApBoE,AAAjD,gEAAgD,mDAAkD;IAEvH,eAIC;IAJD,mDAIC;IAE8B,eAAwB;IAAxB,+CAAwB;IACzD,cAIC;IAJD,uFAIC;IACD,cAKC;IALD,qDAKC;;;IA5CL,AADF,gCAAgD,cACvB;IAAA,6CAA6B;IAAA,iBAAK;IAEzD,qHAAiC;IAajC,qHAAiB;IASjB,qHAAkB;IAuBpB,iBAAM;;;IA7CJ,eAWC;IAXD,kEAWC;IAED,cAOC;IAPD,2CAOC;IAED,cAsBC;IAtBD,4CAsBC;;;;IAWD,kCAA4D;IAAzB,yMAAS,qBAAc,KAAC;IACzD,sBACF;IAAA,iBAAS;;;IAOP,wBAA2C;IAC3C,2BACF;;;IACE,YACF;;;IADE,uDACF;;;;IArOJ,AADF,AAFF,8BAA2B,eAEE,kBAC+B;IAAxB,yLAAS,oBAAa,KAAC;IACrD,wBAAsC;IACtC,sCACF;IAAA,iBAAS;IACT,+BAAyB;IAAA,+BAAe;IAC1C,AAD0C,iBAAK,EACzC;IAGN,gCAA4B;IAC1B,uGAcC;IACH,iBAAM;IAGN,iCAAyB;IAGvB,wGAAwB;IA2CxB,yGAAwB;IAoFxB,wGAAwB;IAoD1B,iBAAM;IAGN,iCAA2B;IACzB,4BAA+B;IAC/B,iCAA0B;IACxB,2GAAsB;IAKtB,oCAGiC;IAAzB,0LAAS,qBAAc,KAAC;IAI5B,AAHF,4FAAgB,sEAGP;IAMjB,AADE,AADE,AADE,iBAAS,EACL,EACF,EACF;;;IAhOF,eAcC;IAdD,iCAcC;IAOD,eAwCC;IAxCD,mDAwCC;IAGD,cAiFC;IAjFD,mDAiFC;IAGD,cAkDC;IAlDD,mDAkDC;IAQC,eAIC;IAJD,iDAIC;IAGO,cAAuC;IAAvC,mEAAuC;IAE7C,cAKC;IALD,2CAKC;;;IA8BP,gCAAgC;IAC9B,kCAAwD;IAC1D,iBAAM;;;;IA6BE,AADF,gCAAsC,eACF;IAChC,yBAA+B;IAC/B,4BAAM;IAAA,YAAyB;IACjC,AADiC,iBAAO,EAClC;IACN,mCAAsE;IAAhC,uNAAS,4BAAqB,KAAC;IACnE,yBAAiC;IAErC,AADE,iBAAS,EACL;;;IALI,eAAyB;IAAzB,gDAAyB;;;;IAe7B,gCAAuE;IAArC,mQAAS,qCAA0B,KAAC;IACpE,yBAA+B;IAC/B,4BAAM;IAAA,YAAe;IACvB,AADuB,iBAAO,EACxB;;;IADE,eAAe;IAAf,mCAAe;;;IAJ3B,gCAAkC;IAChC,kJAKC;IACH,iBAAM;;;IANJ,cAKC;IALD,qCAKC;;;;IAXH,AADF,gCAAqC,kBACkD;IAArC,uNAAS,iCAA0B,KAAC;IAClF,wBAAgC;IAAC,gCACnC;IACF,AADE,iBAAS,EACL;IACN,mIAAkC;;;IAAlC,eASC;IATD,4DASC;;;IA0BD,wBAA2C;IAAC,2BAC9C;;;IACE,8BACF;;;;IA5EA,AADF,AADF,gCAA6B,eACE,iBACI;IAAA,+BAAe;IAAA,iBAAQ;IACtD,kCAG0C;IADnC,4TAAsB;IAE/B,AAJE,iBAG0C,EACtC;IAGJ,AADF,gCAA6B,iBACI;IAAA,sBAAM;IAAA,iBAAQ;IAGzC,AADF,AADF,gCAA6B,iBACE,kBACyB;IAA7B,qUAA0B;IAAjD,iBAAoD;IACpD,6BAAmC;IACrC,iBAAQ;IACR,kCAA8D;IAC5D,aACF;IAEJ,AADE,AADE,iBAAO,EACH,EACF;IAGJ,AADF,iCAA6B,kBACI;IAAA,2BAAU;IAAA,iBAAQ;IAW/C,AAVF,sHAAsB,oFAUb;IAiBX,iBAAM;IAGJ,AADF,iCAA6B,kBACI;IAAA,4BAAW;IAAA,iBAAQ;IAClD,iCAAiC;IAC/B,aACF;IACF,AADE,iBAAM,EACF;IAGJ,AADF,iCAA6B,kBACI;IAAA,wBAAO;IAAA,iBAAQ;IAC9C,iCAAiC;IAC/B,aACF;IAEJ,AADE,AADE,iBAAM,EACF,EACF;IAIJ,AADF,iCAA+B,mBAIO;IAA5B,yMAAS,wBAAiB,KAAC;IAG/B,AAFF,0GAAoB,oFAEX;IAGX,iBAAS;IACT,mCAA8D;IAA3B,yMAAS,uBAAgB,KAAC;IAC3D,yBACF;IACF,AADE,iBAAS,EACL;;;IA9EK,eAAsB;IAAtB,+CAAsB;IAQF,eAA0B;IAA1B,mDAA0B;IAGnB,eAA6B;IAA7B,6CAA6B;IAC3D,cACF;IADE,4EACF;IAMF,eA0BC;IA1BD,iDA0BC;IAMC,eACF;IADE,8EACF;IAME,eACF;IADE,0EACF;IAQM,eAA6C;IAA7C,yEAA6C;IAEnD,cAIC;IAJD,+CAIC;;;;IA/FH,AADF,AADF,gCAA+B,eACC,eAE8D;IACxF,oBAA4E;IAC9E,iBAAM;IACN,4BAAM;IAAA,qCAAqB;IAC7B,AAD6B,iBAAO,EAC9B;IACN,mCAA0D;IAA3B,yLAAS,uBAAgB,KAAC;IACvD,yBAAiC;IAErC,AADE,iBAAS,EACL;IAMJ,AAJF,sGAAqB,sEAIZ;;;IAdA,eAAoF;IAApF,2GAAoF;IACpF,cAAoE;IAApE,uFAAoE;IAS7E,eA0FC;IA1FD,8CA0FC;;;;IAMH,iDAGkG;IAAhG,oOAAyB,0CAAmC,GAAG,sCAA+B,KAAC;IACjG,iBAAuB;;;IAFrB,AADA,8BAAgB,yDACiC;;;IA2BrC,YACF;;;IADE,8DACF;;;IACE,iCAAqC;IAAA,gEAAgD;IAAA,iBAAO;;;IA2BhG,gCAAyB;IAAA,yBAAgD;IAAC,YAAU;IAAA,iBAAM;;;IAAhB,eAAU;IAAV,oCAAU;;;IAFxF,gCAA0B;IACxB,wIAEC;IACH,iBAAM;;;IAHJ,cAEC;IAFD,wCAEC;;;IAUK,yBAAiC;IAAC,wBACpC;;;IACE,yBAAkC;IAAC,sBACrC;;;;IANF,AADF,AADF,gCAA+B,eACG,WACxB;IAAA,2BAAW;IAAA,iBAAO;IACxB,mCAAsF;IAAzD,yMAAS,2BAAoB,KAAC;IAGvD,AAFF,yGAAiB,mFAER;IAIb,AADE,iBAAS,EACL;IACN,gCAA8B;IAAA,YAAgB;IAChD,AADgD,iBAAM,EAChD;;;IARA,eAIC;IAJD,0CAIC;IAGyB,eAAgB;IAAhB,uCAAgB;;;IAM9C,AADF,gCAAmC,SAC7B;IAAA,yBAAsC;IAAC,2BAAU;IAAA,iBAAK;IAExD,AADF,0BAAI,SACE;IAAA,kEAAkD;IAAA,iBAAK;IAC3D,0BAAI;IAAA,uDAAuC;IAAA,iBAAK;IAChD,0BAAI;IAAA,yEAAwD;IAAA,iBAAK;IACjE,2BAAI;IAAA,wFAAwE;IAEhF,AADE,AAD8E,iBAAK,EAC9E,EACD;;;IAQJ,wBAA2C;IAAC,+BAC9C;;;IACE,yBAAgC;IAAC,8BACnC;;;;IA1FN,gCAAkE;IAAjC,sLAAS,6BAAsB,KAAC;IAAC,iBAAM;IAGpE,AADF,AADF,gCAA+B,eACS,SAChC;IAAA,uCAAuB;IAAA,iBAAK;IAChC,mCAAyE;IAAjC,yLAAS,6BAAsB,KAAC;IACtE,yBAAiC;IAErC,AADE,iBAAS,EACL;IAEJ,AADF,gCAAoC,aACA;IAChC,gMAEF;IAAA,iBAAI;IAKE,AADF,AADF,AADF,iCAAoC,gBACC,gBACI,kBACI;IAAA,8BAAa;IAAA,iBAAQ;IAC5D,iCAAqC;IAGjC,AAFF,4FAA8B,mFAErB;IAKf,AADE,AADE,iBAAM,EACF,EACF;IAGF,AADF,AADF,iCAAmC,gBACI,kBACI;IAAA,uBAAM;IAAA,iBAAQ;IACrD,mCAGuC;IAAhC,4TAA6B;IACtC,AAJE,iBAGuC,EACnC;IACN,kCAAoC;IAAA,kBAAC;IAAA,iBAAO;IAE1C,AADF,iCAAkE,kBACzB;IAAA,2BAAU;IAAA,iBAAQ;IACzD,mCAGsC;IAA/B,0TAA4B;IAGzC,AADE,AADE,AAJE,iBAGsC,EAClC,EACF,EACF;IAEN,wGAAqC;IAQrC,wGAAkB;IAgBlB,yGAAkB;IAWpB,iBAAM;IAEJ,AADF,iCAAsC,mBAGL;IAAvB,0LAAS,mBAAY,KAAC;IAG1B,AAFF,4FAAuB,sEAEd;IAGX,iBAAS;IACT,oCAA4E;IAAjC,0LAAS,6BAAsB,KAAC;IACzE,uBACF;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;IA7EM,gBAIC;IAJD,yDAIC;IAUI,eAA6B;IAA7B,sDAA6B;IAQ7B,eAA4B;IAA5B,qDAA4B;IAKzC,cAMC;IAND,gEAMC;IAED,cAcC;IAdD,6CAcC;IAED,cAUC;IAVD,6CAUC;IAIO,eAA+C;IAA/C,2EAA+C;IAErD,cAIC;IAJD,kDAIC;;AD5zBT,sDAAsD;AACtD,MAAM,eAAe,GAA8C;IACjE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE;IAC5C,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACxC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;IACvC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACxC,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,SAAS,EAAE;IAC1D,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACxC,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE;IAChD,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;IAC3C,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;IAC3C,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE;IAC5C,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE;IACnD,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE;IACnD,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,EAAE,OAAO,EAAE,8BAA8B,EAAE,KAAK,EAAE,SAAS,EAAE;IAC7D,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;IAClD,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE;IAChD,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE;CACxC,CAAC;AAgBF,MAAM,YAAY,GAAiB;IACjC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAC1C,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;IACjC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;CAC7B,CAAC;AASK,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,qBAAqB;IAE7D,0BAA0B;IAC1B,WAAW,GAAyB,EAAE,CAAC;IACvC,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,SAAS,GAAG,IAAI,CAAC;IAEjB,0BAA0B;IAC1B,aAAa,GAAkB,IAAI,CAAC;IACpC,eAAe,GAAG,IAAI,GAAG,EAAiD,CAAC;IAE3E,uBAAuB;IACvB,UAAU,GAAG,KAAK,CAAC;IACnB,UAAU,GAAmB,CAAC,CAAC;IAC/B,WAAW,GAAG,YAAY,CAAC;IAC3B,qBAAqB,GAA+B,EAAE,CAAC;IACvD,WAAW,GAAG,EAAE,CAAC;IAEjB,SAAS;IACT,mBAAmB,GAAoC,IAAI,CAAC;IAE5D,SAAS;IACT,cAAc,GAAG,EAAE,CAAC;IACpB,iBAAiB,GAAkB,IAAI,CAAC;IACxC,qBAAqB,GAAG,EAAE,CAAC;IAC3B,SAAS,GAAiB,EAAE,CAAC;IAC7B,oBAAoB,GAAkB,IAAI,CAAC;IAC3C,oBAAoB,GAAG,KAAK,CAAC;IAC7B,2BAA2B,CAAqB;IAChD,mBAAmB,GAAyB,EAAE,CAAC;IAC/C,oBAAoB,GAAG,KAAK,CAAC;IAC7B,kBAAkB,GAA8B,IAAI,CAAC;IAErD,SAAS;IACT,UAAU,GAAyE,IAAI,CAAC;IACxF,SAAS,GAAG,KAAK,CAAC;IAElB,aAAa;IACb,QAAQ,GAAG,KAAK,CAAC;IACjB,kBAAkB,GAAkB,IAAI,CAAC;IAEzC,YAAY;IACZ,UAAU,GAAkB,IAAI,CAAC;IAEjC,mBAAmB;IACnB,aAAa,GAAG,KAAK,CAAC;IACtB,cAAc,GAA8B,IAAI,CAAC;IACjD,UAAU,GAAsC,IAAI,CAAC;IACrD,QAAQ,GAAG,EAAE,CAAC;IACd,eAAe,GAAG,EAAE,CAAC;IACrB,gBAAgB,GAAkB,IAAI,CAAC;IACvC,cAAc,GAA8B,IAAI,CAAC;IACjD,eAAe,GAAyB,EAAE,CAAC;IAC3C,YAAY,GAAG,KAAK,CAAC;IACrB,YAAY,GAAG,KAAK,CAAC;IACrB,aAAa,GAAG,KAAK,CAAC;IAEtB,yEAAyE;IACzE,eAAe,GAA8B,IAAI,CAAC;IAClD,gBAAgB,GAAmB,EAAE,CAAC;IACtC,kBAAkB,GAAmB,EAAE,CAAC;IACxC,gBAAgB,GAAG,EAAE,CAAC;IACtB,eAAe,GAAG,KAAK,CAAC;IAExB,sDAAsD;IACtD,eAAe,GAAwB,IAAI,CAAC;IAE5C,uBAAuB;IACvB,eAAe,GAAG,KAAK,CAAC;IACxB,sBAAsB,GAA2C,EAAE,CAAC;IACpE,sBAAsB,GAAG,KAAK,CAAC;IAC/B,sBAAsB,GAAG,EAAE,CAAC;IAC5B,cAAc,GAAG,EAAE,CAAC;IACpB,eAAe,GAAsC,MAAM,CAAC;IAC5D,cAAc,GAAG,KAAK,CAAC;IAEvB,gEAAgE;IAC/B,kBAAkB,CAAoC;IAEvF,kBAAkB,GAAqB;QACrC,UAAU,EAAE,iBAAiB;QAC7B,YAAY,EAAE,YAAY;QAC1B,OAAO,EAAE,YAAY;QACrB,aAAa,EAAE,EAAE,EAAE,mCAAmC;QACtD,WAAW,EAAE,sBAAsB;QACnC,OAAO,EAAE,gBAAgB;KAC1B,CAAC;IAEF,gBAAgB,GAAmB;QACjC,UAAU,EAAE,cAAc;QAC1B,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,UAAU;KACpB,CAAC;IAEF,0BAA0B;IAC1B,gBAAgB,GAAG,KAAK,CAAC;IACzB,eAAe,GAAG,EAAE,CAAC;IACrB,cAAc,GAAG,EAAE,CAAC;IACpB,UAAU,GAAkB,IAAI,CAAC;IACjC,kBAAkB,GAAa,EAAE,CAAC;IAClC,eAAe,GAAG,KAAK,CAAC;IACxB,gBAAgB,GAAG,KAAK,CAAC;IAEzB,4BAA4B;IAC5B,eAAe,GAAkB,IAAI,CAAC;IACtC,UAAU,GAAG,KAAK,CAAC;IAEX,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC7C,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,oBAAoB,GAAgC,IAAI,CAAC;IAEjE,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAClE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,qBAAqB;IACrB,8EAA8E;IAE9E,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC9C,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC5C,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,8EAA8E;IAC9E,eAAe;IACf,8EAA8E;IAE9E,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YACnC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChD,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC;gBACnD,IAAI,CAAC,iBAAiB,EAAE;aACzB,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,eAAe;IACf,8EAA8E;IAE9E,cAAc,CAAC,OAA2B;QACxC,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,KAAK,aAAa;YAAE,OAAO,SAAS,CAAC;QAClE,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO;YAAE,OAAO,WAAW,CAAC;QACxD,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK;YAAE,OAAO,OAAO,CAAC;QAClD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,mBAAmB,CAAC,OAA2B;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,6BAA6B,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5D,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,iBAAiB,CAAC,aAAqB;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChD,IAAI,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC;gBAAE,OAAO,KAAK,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,iBAAiB,CAAC,OAA2B;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC;QACxD,IAAI,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,kBAAkB,CAAC;QAC5E,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,kBAAkB,CAAC,OAA2B;QAC5C,OAAO,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,KAAK,CAAC;IAC3C,CAAC;IAED,kBAAkB,CAAC,OAA2B;QAC5C,OAAO,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC/C,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E,UAAU,CAAC,aAAqB,EAAE,KAAY;QAC5C,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;QAC3E,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,aAAqB;QAC9B,OAAO,IAAI,CAAC,UAAU,KAAK,aAAa,CAAC;IAC3C,CAAC;IAED,YAAY,CAAC,MAAsB,EAAE,OAA2B;QAC9D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC/C,MAAM;QACV,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,OAA2B;QAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjE,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E,KAAK,CAAC,aAAa,CAAC,OAA2B;QAC7C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,KAAK,IAAI,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAA6B,0BAA0B,CAAC,CAAC;YAC5F,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC;YACzC,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC1C,CAAC;YACD,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iEAAiE,EAAE,GAAG,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YAC7C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACvD,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,uCAAuC,EACnD,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,UAA8B;QACjD,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,wBAAwB;QACtB,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;QAC7C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,2BAA2B,CAAC,MAA8B;QACxD,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;YACxC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,8EAA8E;IAC9E,sBAAsB;IACtB,8EAA8E;IAE9E,iBAAiB,CAAC,aAAqB;QACrC,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,YAAY;QACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,aAAqB;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAA6B,0BAA0B,CAAC,CAAC;YAC5F,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,yCAAyC,EACrD,EAAE,CAAC,YAAY,EAAE,eAAe,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,aAAqB;QACtC,OAAO,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E,KAAK,CAAC,sBAAsB,CAAC,aAAqB;QAChD,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE;gBACtC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE;gBACtC,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,gBAAgB,OAAO,EAAE;aACnC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,aAAa,CAAC,aAAqB;QACjC,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACvD,CAAC;IAED,iBAAiB,CAAC,aAAqB;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChD,IAAI,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC;gBAAE,OAAO,KAAK,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,cAAc;IACd,8EAA8E;IAE9E,KAAK,CAAC,OAAO,CAAC,aAAqB;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,uDAAuD;IACvD,8EAA8E;IAE9E,KAAK,CAAC,qBAAqB,CAAC,OAA2B;QACrD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,cAAc,CAAC,KAAY;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC1C,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC1C,IAAI,SAAS,KAAK,eAAe;YAAE,OAAO,QAAQ,CAAC;QACnD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,aAAa,CAAC;QAC/C,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,aAAa,CAAC;QAC/C,IAAI,SAAS,KAAK,eAAe;YAAE,OAAO,WAAW,CAAC;QACtD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,mBAAmB,CAAC,SAAiB;QACnC,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,sBAAsB,CAAC;QACxD,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,sBAAsB,CAAC;QACxD,IAAI,SAAS,KAAK,eAAe;YAAE,OAAO,+BAA+B,CAAC;QAC1E,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAgB,EAAE,KAAY;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAA0B,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;QAClC,EAAE,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,GAAG,CAAC,CAAC;YAC7E,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IACjE,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtC,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC5E,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACtC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,2CAA2C;IAC3C,8EAA8E;IAE9E,gBAAgB,CAAC,EAAgB;QAC/B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IAChE,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,CAAC;IAED,qBAAqB,CAAC,IAAkC;QACtD,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO;QACzC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,8DAA8D;IAC9D,8EAA8E;IAE9E,mBAAmB;QACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,SAAS,GAAG,KAAK,CAAC;IAElB,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACzB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC3B,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;YACzC,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;eAC/B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;eAC5B,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;IACrC,CAAC;IAED,IAAI,aAAa;QACf,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;aAC9B,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;aACnC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAC1D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,OAAO,GAA+B,CAAC;oBAC3C,gBAAgB,EAAE,IAAI,CAAC,sBAAsB;oBAC7C,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;oBACvC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;oBACrC,UAAU,EAAE,IAAI,CAAC,aAAa;iBAC/B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAwB,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CACtE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,EACnC,OAAO,CACR,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChE,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,aAAa,MAAM,CAAC,OAAO,EAAE,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,UAAU,GAAG,8BAA8B,GAAG,EAAE,CAAC;QACxD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QACzD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAChG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;gBACpD,oBAAoB,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE;gBACzD,kBAAkB,EAAE,IAAI,CAAC,sBAAsB;gBAC/C,mBAAmB,EAAE,SAAS,EAAE,KAAK,KAAK,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS;gBACxF,QAAQ,EAAE,IAAI,CAAC,cAAc;gBAC7B,aAAa,EAAE,IAAI,CAAC,eAAe;aACpC,CAAC,CAAC;YAEH,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC1F,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACnD,0BAA0B;gBAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,GAAG,CAAC,CAAC;QAC9E,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;QAC9B,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAElC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC;YAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,mCAAmC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpG,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,MAAM,CAAC,2BAA2B,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACnE,mDAAmD;gBACnD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACpF,IAAI,CAAC,sBAAsB,GAAG,OAAO;qBAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;qBACvC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACT,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI;iBAC/B,CAAC,CAAC,CAAC;YACR,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,GAAG,CAAC,CAAC;QAChF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,oBAA4B;QACrE,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAe;YAC5C,UAAU,EAAE,qCAAqC;YACjD,WAAW,EAAE,yBAAyB,oBAAoB,GAAG;YAC7D,OAAO,EAAE,8BAA8B;YACvC,MAAM,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,qBAAqB;gBACzE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe;gBAC3D,oBAAoB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC;YAChF,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,8EAA8E;IAC9E,qBAAqB;IACrB,8EAA8E;IAE9E,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,KAAoB;QAC5B,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,qBAAqB;IACrB,8EAA8E;IAE9E,QAAQ;QACN,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAmB,CAAC;YAC1D,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAmB,CAAC;YAC1D,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,cAAc;QAChB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAC5D,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACzF,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,eAAe;QACjB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,UAAkB;QAChC,OAAO,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACtC,CAAC;IAED,YAAY,CAAC,UAAkB;QAC7B,OAAO,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;IACxC,CAAC;IAED,8EAA8E;IAC9E,oCAAoC;IACpC,8EAA8E;IAE9E,iBAAiB,CAAC,GAA6B;QAC7C,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,qBAAqB,CAAC,GAA6B;QACjD,OAAO,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,oBAAoB;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC3C,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpC,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CACxD,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,2BAA2B;IAC3B,8EAA8E;IAE9E,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,2BAA2B;QAC7B,OAAO,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,IAAI,IAAI,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B;YAC7C,CAAC,CAAC,qBAAqB,IAAI,CAAC,2BAA2B,kBAAkB;YACzE,CAAC,CAAC,YAAY,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAqB;YAClD,UAAU,EAAE,iBAAiB;YAC7B,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,wBAAwB,CAAC,UAA8B;QACrD,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;QACrC,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,IAAI,SAAS,CAAC;QACjF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,uBAAuB,CAAC,MAA8B;QACpD,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC;YAC5C,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,8EAA8E;IAC9E,iCAAiC;IACjC,8EAA8E;IAE9E,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACjE,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,GAAG;oBAChB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,+DAA+D;iBACzE,CAAC;gBACF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;YAC3E,IAAI,CAAC,UAAU,GAAG;gBAChB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,SAAS;aACjD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,CAAC,UAAU,GAAG;gBAChB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2BAA2B,OAAO,EAAE;aAC9C,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAA6B,0BAA0B,CAAC,CAAC;YAC5F,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;YAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,GAAG,CAAC,CAAC;QACjF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEtB,oEAAoE;YACpE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC3C,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAmB,CAAC,CACvD,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAEtE,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YACnC,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACtD,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,QAAQ,CAAC;gBACrD,EAAE,CAAC,OAAO,CAAa;oBACrB,UAAU,EAAE,eAAe;oBAC3B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;oBACtB,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;iBACrB,CAAC;aACH,CAAC,CAAC;YACH,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC;YAC1C,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,IAAI,IAAI,CAAC,kBAAkB;YAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO,IAAI,CAAC;QAEtE,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAA6B,0BAA0B,CAAC,CAAC;QAC5F,EAAE,CAAC,SAAS,EAAE,CAAC;QACf,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACtC,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC/C,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC/D,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC/C,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC,EAAE,CAAC;QACf,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAC1E,EAAE,CAAC,YAAY,EAAE,eAAe,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAe;YAC5C,UAAU,EAAE,qCAAqC;YACjD,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,sBAAsB;YAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC;YACtC,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAEO,sBAAsB,CAAC,IAAoB;QACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,OAA2B;QAC9D,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAA6B,0BAA0B,CAAC,CAAC;QAC5F,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACtC,EAAE,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAqB;YAClD,UAAU,EAAE,iBAAiB;YAC7B,WAAW,EAAE,YAAY;YACzB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;QAEtC,kDAAkD;QAClD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAClD,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAiB,CAAC,CACzC,IAAI,IAAI,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEO,eAAe,CAAC,CAAQ;QAC9B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;6PAplCU,oBAAoB,yBAApB,oBAAoB;6DAApB,oBAAoB;;;;;;YCnEjC,8BAC+C;YAK7C,6EAAuC;YA+JvC,sFAAsC;YA8NtC,uFAAkB;YAgPpB,iBAAM;YAGN,8BAEgC;YAA3B,8FAAS,oBAAgB,IAAC;YAAC,iBAAM;YACtC,8BAAqD;YACnD,6EAAsB;YA2GxB,iBAAM;YAGN,uGAA4B;YAS5B,6EAAwB;;YAhvBnB,AAD8B,sDAAyC,wCAC9B;YAK5C,cA0JC;YA1JD,kEA0JC;YAKD,cAyNC;YAzND,iEAyNC;YAKD,cA8OC;YA9OD,yCA8OC;YAME,cAA4B;YAA5B,yCAA4B;YAET,cAA4B;YAA5B,yCAA4B;YAClD,cA0GC;YA1GD,6CA0GC;YAIH,cAMC;YAND,mDAMC;YAGD,cAkGC;YAlGD,+CAkGC;;;ADhxBY,oBAAoB;IAPhC,aAAa,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;GAOlD,oBAAoB,CAqlChC;;iFArlCY,oBAAoB;cANhC,SAAS;6BACI,KAAK,YACP,6BAA6B;;kBAiFtC,SAAS;mBAAC,oBAAoB;;kFA7EpB,oBAAoB;AAulCjC,MAAM,UAAU,wBAAwB;IACtC,wDAAwD;IACxD,6DAA6D;AAC/D,CAAC","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, OnDestroy, inject, ViewChild } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { CompositeKey, Metadata, RunView } from '@memberjunction/core';\nimport { IntegrationEngineBase } from '@memberjunction/integration-engine-base';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJCompanyIntegrationEntity, MJCredentialEntity } from '@memberjunction/core-entities';\nimport { CredentialDialogResult } from '@memberjunction/ng-credentials';\nimport { TreeBranchConfig, TreeLeafConfig, TreeNode, TreeDropdownComponent } from '@memberjunction/ng-trees';\nimport { SchemaPreviewObjectInput, SchemaPreviewResult } from '@memberjunction/graphql-dataprovider';\nimport {\n IntegrationDataService,\n ResolveIntegrationIcon,\n IntegrationSummary,\n IntegrationDefinitionRow,\n EntityMapRow\n} from '../../services/integration-data.service';\n\n/** Brand color mapping for known integration names */\nconst BRAND_COLOR_MAP: Array<{ Pattern: RegExp; Color: string }> = [\n { Pattern: /hubspot/i, Color: '#ff7a59' },\n { Pattern: /salesforce/i, Color: '#00a1e0' },\n { Pattern: /stripe/i, Color: '#635bff' },\n { Pattern: /slack/i, Color: '#4a154b' },\n { Pattern: /google/i, Color: '#4285f4' },\n { Pattern: /microsoft|azure|dynamics/i, Color: '#00a4ef' },\n { Pattern: /github/i, Color: '#24292f' },\n { Pattern: /jira|atlassian/i, Color: '#0052cc' },\n { Pattern: /mailchimp/i, Color: '#ffe01b' },\n { Pattern: /shopify/i, Color: '#96bf48' },\n { Pattern: /wordpress/i, Color: '#21759b' },\n { Pattern: /dropbox/i, Color: '#0061ff' },\n { Pattern: /aws|amazon/i, Color: '#ff9900' },\n { Pattern: /yourmembership|ym/i, Color: '#1a73e8' },\n { Pattern: /quickbooks|intuit/i, Color: '#2ca01c' },\n { Pattern: /zendesk/i, Color: '#03363d' },\n { Pattern: /database|sql|mysql|postgres/i, Color: '#336791' },\n { Pattern: /api|rest|graphql/i, Color: '#e535ab' },\n { Pattern: /file|csv|excel/i, Color: '#217346' },\n { Pattern: /ftp|sftp/i, Color: '#555' }\n];\n\ntype StatusBadgeType = 'Connected' | 'Error' | 'Inactive' | 'Syncing';\ntype WizardStepType = 1 | 2 | 3;\ntype CardMenuAction = 'edit' | 'disable' | 'delete';\n\ninterface WizardStep {\n Number: number;\n Label: string;\n}\n\ninterface CompanyRow {\n ID: string;\n Name: string;\n}\n\nconst WIZARD_STEPS: WizardStep[] = [\n { Number: 1, Label: 'Choose Integration' },\n { Number: 2, Label: 'Configure' },\n { Number: 3, Label: 'Test' }\n];\n\n@RegisterClass(BaseResourceComponent, 'IntegrationConnections')\n@Component({\n standalone: false,\n selector: 'app-integration-connections',\n templateUrl: './connections.component.html',\n styleUrls: ['./connections.component.css']\n})\nexport class ConnectionsComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n // --- Main view state ---\n Connections: IntegrationSummary[] = [];\n EntityMapCounts = new Map<string, number>();\n IsLoading = true;\n\n // --- Card test state ---\n TestingCardID: string | null = null;\n TestCardResults = new Map<string, { Success: boolean; Message: string }>();\n\n // --- Wizard state ---\n WizardOpen = false;\n WizardStep: WizardStepType = 1;\n WizardSteps = WIZARD_STEPS;\n AvailableIntegrations: IntegrationDefinitionRow[] = [];\n SearchQuery = '';\n\n // Step 1\n SelectedIntegration: IntegrationDefinitionRow | null = null;\n\n // Step 2\n ConnectionName = '';\n SelectedCompanyID: string | null = null;\n ConnectionDescription = '';\n Companies: CompanyRow[] = [];\n SelectedCredentialID: string | null = null;\n ShowCredentialDialog = false;\n PreselectedCredentialTypeId: string | undefined;\n ExistingCredentials: MJCredentialEntity[] = [];\n IsLoadingCredentials = false;\n SelectedCredential: MJCredentialEntity | null = null;\n\n // Step 3\n TestResult: { Success: boolean; Message: string; ServerVersion?: string } | null = null;\n IsTesting = false;\n\n // Save state\n IsSaving = false;\n SavedIntegrationID: string | null = null;\n\n // Card menu\n OpenMenuID: string | null = null;\n\n // Edit panel state\n EditPanelOpen = false;\n EditingSummary: IntegrationSummary | null = null;\n EditEntity: MJCompanyIntegrationEntity | null = null;\n EditName = '';\n EditDescription = '';\n EditCredentialID: string | null = null;\n EditCredential: MJCredentialEntity | null = null;\n EditCredentials: MJCredentialEntity[] = [];\n EditIsActive = false;\n IsEditSaving = false;\n IsEditLoading = false;\n\n // Detail view state (replaces card grid when an integration is selected)\n SelectedSummary: IntegrationSummary | null = null;\n DetailEntityMaps: EntityMapRow[] = [];\n DetailFilteredMaps: EntityMapRow[] = [];\n DetailSearchTerm = '';\n IsDetailLoading = false;\n\n // Entity map editor state (field mapping detail view)\n EditorEntityMap: EntityMapRow | null = null;\n\n // Add entity map state\n ShowAddMapPanel = false;\n AvailableSourceObjects: Array<{ Name: string; Label: string }> = [];\n IsLoadingSourceObjects = false;\n AddMapSourceObjectName = '';\n AddMapEntityID = '';\n AddMapDirection: 'Pull' | 'Push' | 'Bidirectional' = 'Pull';\n IsSavingAddMap = false;\n\n // Tree dropdown config for MJ Entity picker (schema → entities)\n @ViewChild('entityTreeDropdown') entityTreeDropdown: TreeDropdownComponent | undefined;\n\n EntityBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: Schema Info',\n DisplayField: 'SchemaName',\n IDField: 'SchemaName',\n ParentIDField: '', // flat list of schemas, no nesting\n DefaultIcon: 'fa-solid fa-database',\n OrderBy: 'SchemaName ASC'\n };\n\n EntityLeafConfig: TreeLeafConfig = {\n EntityName: 'MJ: Entities',\n DisplayField: 'Name',\n IDField: 'ID',\n ParentField: 'SchemaName',\n DefaultIcon: 'fa-solid fa-table',\n OrderBy: 'Name ASC'\n };\n\n // Create New Entity state\n ShowCreateEntity = false;\n NewEntitySchema = '';\n NewEntityTable = '';\n DDLPreview: string | null = null;\n DDLPreviewWarnings: string[] = [];\n IsGeneratingDDL = false;\n IsCreatingEntity = false;\n\n // Delete confirmation state\n DeleteConfirmID: string | null = null;\n IsDeleting = false;\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n private documentClickHandler: ((e: Event) => void) | null = null;\n\n async ngOnInit(): Promise<void> {\n this.documentClickHandler = (e: Event) => this.onDocumentClick(e);\n document.addEventListener('click', this.documentClickHandler);\n await this.LoadData();\n }\n\n ngOnDestroy(): void {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Resource overrides\n // ---------------------------------------------------------------------------\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Integrations';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-plug';\n }\n\n // ---------------------------------------------------------------------------\n // Data loading\n // ---------------------------------------------------------------------------\n\n async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n try {\n const provider = this.RunViewToUse;\n const [summaries, entityMaps] = await Promise.all([\n this.dataService.LoadIntegrationSummaries(provider),\n this.loadAllEntityMaps()\n ]);\n this.Connections = summaries;\n this.EntityMapCounts = this.countMapsByIntegration(entityMaps);\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Card helpers\n // ---------------------------------------------------------------------------\n\n GetStatusBadge(summary: IntegrationSummary): StatusBadgeType {\n if (summary.LatestRun?.Status === 'In Progress') return 'Syncing';\n if (summary.StatusColor === 'green') return 'Connected';\n if (summary.StatusColor === 'red') return 'Error';\n return 'Inactive';\n }\n\n GetStatusBadgeClass(summary: IntegrationSummary): string {\n const badge = this.GetStatusBadge(summary);\n return `status-badge status-badge-${badge.toLowerCase()}`;\n }\n\n GetIntegrationIcon(name: string): string {\n return this.resolveIconByName(name);\n }\n\n GetIconBrandColor(name: string): string {\n return this.resolveBrandColor(name);\n }\n\n GetEntityMapCount(integrationID: string): number {\n for (const [key, value] of this.EntityMapCounts) {\n if (UUIDsEqual(key, integrationID)) return value;\n }\n return 0;\n }\n\n GetCredentialHint(summary: IntegrationSummary): string {\n const driverClass = summary.Integration.DriverClassName;\n if (driverClass?.toLowerCase().includes('oauth')) return 'OAuth2 Connected';\n return 'API Key configured';\n }\n\n GetSourceTypeLabel(summary: IntegrationSummary): string {\n return summary.SourceType?.Name ?? 'API';\n }\n\n IsConnectionActive(summary: IntegrationSummary): boolean {\n return summary.Integration.IsActive === true;\n }\n\n // ---------------------------------------------------------------------------\n // Card menu\n // ---------------------------------------------------------------------------\n\n ToggleMenu(integrationID: string, event: Event): void {\n event.stopPropagation();\n this.OpenMenuID = this.OpenMenuID === integrationID ? null : integrationID;\n this.cdr.detectChanges();\n }\n\n IsMenuOpen(integrationID: string): boolean {\n return this.OpenMenuID === integrationID;\n }\n\n OnMenuAction(action: CardMenuAction, summary: IntegrationSummary): void {\n this.OpenMenuID = null;\n switch (action) {\n case 'edit':\n this.OpenEditPanel(summary);\n break;\n case 'disable':\n this.toggleConnectionActive(summary);\n break;\n case 'delete':\n this.ShowDeleteConfirm(summary.Integration.ID);\n break;\n }\n }\n\n GetMenuActionLabel(summary: IntegrationSummary): string {\n return this.IsConnectionActive(summary) ? 'Disable' : 'Enable';\n }\n\n // ---------------------------------------------------------------------------\n // Edit panel\n // ---------------------------------------------------------------------------\n\n async OpenEditPanel(summary: IntegrationSummary): Promise<void> {\n this.EditingSummary = summary;\n this.EditName = summary.Integration.Name;\n this.EditDescription = '';\n this.EditIsActive = summary.Integration.IsActive === true;\n this.EditCredentialID = null;\n this.EditCredential = null;\n this.EditCredentials = [];\n this.EditEntity = null;\n this.EditPanelOpen = true;\n this.IsEditLoading = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(summary.Integration.ID);\n this.EditEntity = ci;\n this.EditName = ci.Name;\n this.EditIsActive = ci.IsActive === true;\n if (ci.CredentialID) {\n this.EditCredentialID = ci.CredentialID;\n }\n await this.loadEditCredentials();\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load connection for editing:', err);\n } finally {\n this.IsEditLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n CloseEditPanel(): void {\n this.EditPanelOpen = false;\n setTimeout(() => {\n if (!this.EditPanelOpen) {\n this.EditingSummary = null;\n this.EditEntity = null;\n this.cdr.detectChanges();\n }\n }, 350);\n this.cdr.detectChanges();\n }\n\n async SaveEditChanges(): Promise<void> {\n if (!this.EditEntity) return;\n this.IsEditSaving = true;\n this.cdr.detectChanges();\n\n try {\n this.EditEntity.Name = this.EditName;\n this.EditEntity.IsActive = this.EditIsActive;\n if (this.EditCredentialID) {\n this.EditEntity.CredentialID = this.EditCredentialID;\n }\n const saved = await this.EditEntity.Save();\n if (saved) {\n this.CloseEditPanel();\n await this.LoadData();\n } else {\n console.error('[IntegrationConnections] Save failed:',\n this.EditEntity.LatestResult?.CompleteMessage ?? this.EditEntity.LatestResult?.Message);\n }\n } catch (err) {\n console.error('[IntegrationConnections] Save error:', err);\n } finally {\n this.IsEditSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n SelectEditCredential(credential: MJCredentialEntity): void {\n this.EditCredential = credential;\n this.EditCredentialID = credential.ID;\n }\n\n ClearEditCredential(): void {\n this.EditCredential = null;\n this.EditCredentialID = null;\n }\n\n OpenEditCredentialDialog(): void {\n this.PreselectedCredentialTypeId = undefined;\n this.ShowCredentialDialog = true;\n this.cdr.detectChanges();\n }\n\n OnEditCredentialDialogClose(result: CredentialDialogResult): void {\n this.ShowCredentialDialog = false;\n if (result.success && result.credential) {\n this.EditCredential = result.credential;\n this.EditCredentialID = result.credential.ID;\n }\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Delete confirmation\n // ---------------------------------------------------------------------------\n\n ShowDeleteConfirm(integrationID: string): void {\n this.DeleteConfirmID = integrationID;\n this.cdr.detectChanges();\n }\n\n CancelDelete(): void {\n this.DeleteConfirmID = null;\n this.cdr.detectChanges();\n }\n\n async ConfirmDelete(integrationID: string): Promise<void> {\n this.IsDeleting = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(integrationID);\n const deleted = await ci.Delete();\n if (deleted) {\n this.DeleteConfirmID = null;\n await this.LoadData();\n } else {\n console.error('[IntegrationConnections] Delete failed:',\n ci.LatestResult?.CompleteMessage ?? ci.LatestResult?.Message);\n }\n } catch (err) {\n console.error('[IntegrationConnections] Delete error:', err);\n } finally {\n this.IsDeleting = false;\n this.cdr.detectChanges();\n }\n }\n\n IsDeleteConfirming(integrationID: string): boolean {\n return UUIDsEqual(this.DeleteConfirmID, integrationID);\n }\n\n // ---------------------------------------------------------------------------\n // Card test\n // ---------------------------------------------------------------------------\n\n async TestExistingConnection(integrationID: string): Promise<void> {\n if (this.TestingCardID) return;\n this.TestingCardID = integrationID;\n this.TestCardResults.delete(integrationID);\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.TestConnection(integrationID);\n this.TestCardResults.set(integrationID, {\n Success: result.Success,\n Message: result.Message\n });\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n this.TestCardResults.set(integrationID, {\n Success: false,\n Message: `Test failed: ${message}`\n });\n } finally {\n this.TestingCardID = null;\n this.cdr.detectChanges();\n }\n }\n\n IsTestingCard(integrationID: string): boolean {\n return UUIDsEqual(this.TestingCardID, integrationID);\n }\n\n GetCardTestResult(integrationID: string): { Success: boolean; Message: string } | null {\n for (const [key, value] of this.TestCardResults) {\n if (UUIDsEqual(key, integrationID)) return value;\n }\n return null;\n }\n\n // ---------------------------------------------------------------------------\n // Sync action\n // ---------------------------------------------------------------------------\n\n async RunSync(integrationID: string): Promise<void> {\n try {\n const result = await this.dataService.RunSync(integrationID);\n if (!result.Success) {\n console.error('[IntegrationConnections] Sync failed:', result.Message);\n }\n await this.LoadData();\n } catch (err) {\n console.error('[IntegrationConnections] RunSync error:', err);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Detail view (entity maps for a selected integration)\n // ---------------------------------------------------------------------------\n\n async SelectIntegrationCard(summary: IntegrationSummary): Promise<void> {\n this.SelectedSummary = summary;\n this.DetailSearchTerm = '';\n this.IsDetailLoading = true;\n this.cdr.detectChanges();\n\n try {\n const maps = await this.loadEntityMapsForIntegration(summary.Integration.ID);\n this.DetailEntityMaps = maps;\n this.DetailFilteredMaps = maps;\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load entity maps:', err);\n } finally {\n this.IsDetailLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n CloseDetailView(): void {\n this.SelectedSummary = null;\n this.DetailEntityMaps = [];\n this.DetailFilteredMaps = [];\n this.DetailSearchTerm = '';\n this.cdr.detectChanges();\n }\n\n OnDetailSearch(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.DetailSearchTerm = input.value;\n this.DetailFilteredMaps = this.applyDetailFilter();\n this.cdr.detectChanges();\n }\n\n DirectionLabel(direction: string): string {\n if (direction === 'Pull') return '\\u2192';\n if (direction === 'Push') return '\\u2190';\n if (direction === 'Bidirectional') return '\\u2194';\n return '\\u2192';\n }\n\n DirectionText(direction: string): string {\n if (direction === 'Pull') return 'Pull \\u2192';\n if (direction === 'Push') return '\\u2190 Push';\n if (direction === 'Bidirectional') return '\\u2194 Bi';\n return 'Pull \\u2192';\n }\n\n DirectionBadgeClass(direction: string): string {\n if (direction === 'Pull') return 'direction-badge pull';\n if (direction === 'Push') return 'direction-badge push';\n if (direction === 'Bidirectional') return 'direction-badge bidirectional';\n return 'direction-badge';\n }\n\n async OnToggleMapEnabled(em: EntityMapRow, event: Event): Promise<void> {\n const checkbox = event.target as HTMLInputElement;\n const newValue = checkbox.checked;\n em.SyncEnabled = newValue;\n this.cdr.detectChanges();\n try {\n await this.dataService.ToggleEntityMapEnabled(em.ID, newValue);\n } catch (err) {\n em.SyncEnabled = !newValue;\n checkbox.checked = !newValue;\n console.error('[IntegrationConnections] Failed to toggle SyncEnabled:', err);\n this.cdr.detectChanges();\n }\n }\n\n get DetailActiveMapCount(): number {\n return this.DetailEntityMaps.filter(m => m.SyncEnabled).length;\n }\n\n private applyDetailFilter(): EntityMapRow[] {\n if (!this.DetailSearchTerm.trim()) return this.DetailEntityMaps;\n const term = this.DetailSearchTerm.toLowerCase();\n return this.DetailEntityMaps.filter(m =>\n (m.ExternalObjectLabel ?? m.ExternalObjectName).toLowerCase().includes(term) ||\n m.Entity.toLowerCase().includes(term)\n );\n }\n\n // ---------------------------------------------------------------------------\n // Entity map editor (field mapping detail)\n // ---------------------------------------------------------------------------\n\n OnEntityMapClick(em: EntityMapRow): void {\n this.EditorEntityMap = em;\n this.cdr.detectChanges();\n }\n\n CloseEntityMapEditor(): void {\n this.EditorEntityMap = null;\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Add entity map\n // ---------------------------------------------------------------------------\n\n async ToggleAddMapPanel(): Promise<void> {\n this.ShowAddMapPanel = !this.ShowAddMapPanel;\n if (this.ShowAddMapPanel) {\n this.resetAddMapState();\n await this.loadAddMapData();\n }\n this.cdr.detectChanges();\n }\n\n CloseAddMapPanel(): void {\n this.ShowAddMapPanel = false;\n this.cdr.detectChanges();\n }\n\n get CanSaveAddMap(): boolean {\n return !!this.AddMapSourceObjectName && !!this.AddMapEntityID;\n }\n\n get AddMapEntityIDAsKey(): CompositeKey | null {\n return this.AddMapEntityID ? CompositeKey.FromID(this.AddMapEntityID) : null;\n }\n\n OnEntityTreeSelection(node: TreeNode | TreeNode[] | null): void {\n if (!node || Array.isArray(node)) return;\n if (node.Type === 'leaf') {\n this.AddMapEntityID = node.ID;\n }\n }\n\n // ---------------------------------------------------------------------------\n // New Entity dialog (generates SQL migration for a new table)\n // ---------------------------------------------------------------------------\n\n OpenNewEntityDialog(): void {\n this.ShowCreateEntity = true;\n this.NewEntitySchema = '';\n this.NewEntityTable = '';\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }\n\n CloseNewEntityDialog(): void {\n this.ShowCreateEntity = false;\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }\n\n DDLCopied = false;\n\n async CopyDDLToClipboard(): Promise<void> {\n if (!this.DDLPreview) return;\n try {\n await navigator.clipboard.writeText(this.DDLPreview);\n this.DDLCopied = true;\n this.cdr.detectChanges();\n setTimeout(() => {\n this.DDLCopied = false;\n this.cdr.detectChanges();\n }, 2000);\n } catch {\n // Fallback: select text in the pre block\n console.warn('[IntegrationConnections] Clipboard API not available');\n }\n }\n\n get CanGenerateSQL(): boolean {\n return !!this.NewEntitySchema.trim()\n && !!this.NewEntityTable.trim()\n && !!this.AddMapSourceObjectName;\n }\n\n get NewEntityName(): string {\n if (!this.NewEntityTable.trim()) return '';\n return this.NewEntityTable.trim()\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ');\n }\n\n async PreviewDDL(): Promise<void> {\n if (!this.CanGenerateSQL || !this.SelectedSummary) return;\n this.IsGeneratingDDL = true;\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n this.cdr.detectChanges();\n\n try {\n const objects: SchemaPreviewObjectInput[] = [{\n SourceObjectName: this.AddMapSourceObjectName,\n SchemaName: this.NewEntitySchema.trim(),\n TableName: this.NewEntityTable.trim(),\n EntityName: this.NewEntityName\n }];\n\n const result: SchemaPreviewResult = await this.dataService.SchemaPreview(\n this.SelectedSummary.Integration.ID,\n objects\n );\n\n if (result.Success) {\n this.DDLPreview = result.Files.map(f => f.Content).join('\\n\\n');\n this.DDLPreviewWarnings = result.Warnings ?? [];\n } else {\n this.DDLPreview = `-- Error: ${result.Message}`;\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n this.DDLPreview = `-- Failed to generate DDL: ${msg}`;\n } finally {\n this.IsGeneratingDDL = false;\n this.cdr.detectChanges();\n }\n }\n\n async SaveAddMap(): Promise<void> {\n if (!this.CanSaveAddMap || !this.SelectedSummary) return;\n this.IsSavingAddMap = true;\n this.cdr.detectChanges();\n\n try {\n const sourceObj = this.AvailableSourceObjects.find(o => o.Name === this.AddMapSourceObjectName);\n const result = await this.dataService.CreateEntityMap({\n CompanyIntegrationID: this.SelectedSummary.Integration.ID,\n ExternalObjectName: this.AddMapSourceObjectName,\n ExternalObjectLabel: sourceObj?.Label !== sourceObj?.Name ? sourceObj?.Label : undefined,\n EntityID: this.AddMapEntityID,\n SyncDirection: this.AddMapDirection\n });\n\n if (result) {\n this.ShowAddMapPanel = false;\n const maps = await this.loadEntityMapsForIntegration(this.SelectedSummary.Integration.ID);\n this.DetailEntityMaps = maps;\n this.DetailFilteredMaps = this.applyDetailFilter();\n // Update entity map count\n this.EntityMapCounts = this.countMapsByIntegration(await this.loadAllEntityMaps());\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to create entity map:', err);\n } finally {\n this.IsSavingAddMap = false;\n this.cdr.detectChanges();\n }\n }\n\n private resetAddMapState(): void {\n this.AddMapSourceObjectName = '';\n this.AddMapEntityID = '';\n this.AddMapDirection = 'Pull';\n this.AvailableSourceObjects = [];\n this.ShowCreateEntity = false;\n this.NewEntitySchema = '';\n this.NewEntityTable = '';\n this.DDLPreview = null;\n this.DDLPreviewWarnings = [];\n }\n\n private async loadAddMapData(): Promise<void> {\n if (!this.SelectedSummary) return;\n\n this.IsLoadingSourceObjects = true;\n this.cdr.detectChanges();\n\n try {\n // Load source objects from IntegrationEngineBase metadata\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(this.SelectedSummary.Integration.ID);\n if (integration) {\n const objects = engine.GetActiveIntegrationObjects(integration.ID);\n // Filter out objects that already have entity maps\n const existingNames = new Set(this.DetailEntityMaps.map(m => m.ExternalObjectName));\n this.AvailableSourceObjects = objects\n .filter(o => !existingNames.has(o.Name))\n .map(o => ({\n Name: o.Name,\n Label: o.DisplayName || o.Name\n }));\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load source objects:', err);\n } finally {\n this.IsLoadingSourceObjects = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadEntityMapsForIntegration(companyIntegrationID: string): Promise<EntityMapRow[]> {\n const rv = new RunView(this.RunViewToUse ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: `CompanyIntegrationID='${companyIntegrationID}'`,\n OrderBy: 'Priority, ExternalObjectName',\n Fields: ['ID', 'CompanyIntegrationID', 'ExternalObjectName', 'ExternalObjectLabel',\n 'EntityID', 'SyncDirection', 'SyncEnabled', 'MatchStrategy',\n 'ConflictResolution', 'Priority', 'DeleteBehavior', 'Status', 'Entity'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n // ---------------------------------------------------------------------------\n // Wizard: open/close\n // ---------------------------------------------------------------------------\n\n async OpenWizard(): Promise<void> {\n this.resetWizardState();\n this.WizardOpen = true;\n this.cdr.detectChanges();\n await this.loadWizardData();\n }\n\n CloseWizard(): void {\n this.WizardOpen = false;\n if (this.SavedIntegrationID) {\n this.LoadData();\n }\n this.cdr.detectChanges();\n }\n\n OnKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.CloseWizard();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Wizard: navigation\n // ---------------------------------------------------------------------------\n\n NextStep(): void {\n if (this.WizardStep < 3) {\n this.WizardStep = (this.WizardStep + 1) as WizardStepType;\n if (this.WizardStep === 3) {\n this.TestResult = null;\n }\n this.cdr.detectChanges();\n }\n }\n\n PreviousStep(): void {\n if (this.WizardStep > 1) {\n this.WizardStep = (this.WizardStep - 1) as WizardStepType;\n this.cdr.detectChanges();\n }\n }\n\n get IsNextDisabled(): boolean {\n if (this.WizardStep === 1) return !this.SelectedIntegration;\n if (this.WizardStep === 2) return !this.ConnectionName.trim() || !this.SelectedCompanyID;\n if (this.WizardStep === 3) return !this.TestResult?.Success;\n return false;\n }\n\n get NextButtonLabel(): string {\n if (this.WizardStep === 3) return 'Finish';\n return 'Next';\n }\n\n IsStepCompleted(stepNumber: number): boolean {\n return stepNumber < this.WizardStep;\n }\n\n IsStepActive(stepNumber: number): boolean {\n return stepNumber === this.WizardStep;\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 1: Choose integration\n // ---------------------------------------------------------------------------\n\n SelectIntegration(def: IntegrationDefinitionRow): void {\n this.SelectedIntegration = def;\n this.ConnectionName = def.Name;\n }\n\n IsSelectedIntegration(def: IntegrationDefinitionRow): boolean {\n return UUIDsEqual(this.SelectedIntegration?.ID, def.ID);\n }\n\n get FilteredIntegrations(): IntegrationDefinitionRow[] {\n if (!this.SearchQuery.trim()) return this.AvailableIntegrations;\n const query = this.SearchQuery.toLowerCase();\n return this.AvailableIntegrations.filter(i =>\n i.Name.toLowerCase().includes(query) ||\n (i.Description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 2: Configure\n // ---------------------------------------------------------------------------\n\n get NeedsCompanyPicker(): boolean {\n return this.Companies.length > 1;\n }\n\n get IntegrationCredentialTypeID(): string | null {\n return this.SelectedIntegration?.CredentialTypeID ?? null;\n }\n\n async ShowExistingCredentials(): Promise<void> {\n this.IsLoadingCredentials = true;\n this.cdr.detectChanges();\n\n const rv = new RunView();\n const filter = this.IntegrationCredentialTypeID\n ? `CredentialTypeID='${this.IntegrationCredentialTypeID}' AND IsActive=1`\n : 'IsActive=1';\n const result = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n ExtraFilter: filter,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n this.ExistingCredentials = result.Results;\n this.IsLoadingCredentials = false;\n this.cdr.detectChanges();\n }\n\n SelectExistingCredential(credential: MJCredentialEntity): void {\n this.SelectedCredential = credential;\n this.SelectedCredentialID = credential.ID;\n }\n\n OpenCredentialDialog(): void {\n this.PreselectedCredentialTypeId = this.IntegrationCredentialTypeID ?? undefined;\n this.ShowCredentialDialog = true;\n this.cdr.detectChanges();\n }\n\n OnCredentialDialogClose(result: CredentialDialogResult): void {\n this.ShowCredentialDialog = false;\n if (result.success && result.credential) {\n this.SelectedCredential = result.credential;\n this.SelectedCredentialID = result.credential.ID;\n }\n this.cdr.detectChanges();\n }\n\n ClearCredential(): void {\n this.SelectedCredential = null;\n this.SelectedCredentialID = null;\n }\n\n // ---------------------------------------------------------------------------\n // Wizard Step 3: Test connection\n // ---------------------------------------------------------------------------\n\n async TestNewConnection(): Promise<void> {\n this.IsTesting = true;\n this.TestResult = null;\n this.cdr.detectChanges();\n\n try {\n const companyIntegrationID = await this.saveCompanyIntegration();\n if (!companyIntegrationID) {\n this.TestResult = {\n Success: false,\n Message: 'Could not save integration to test. Check your configuration.'\n };\n this.IsTesting = false;\n this.cdr.detectChanges();\n return;\n }\n\n const result = await this.dataService.TestConnection(companyIntegrationID);\n this.TestResult = {\n Success: result.Success,\n Message: result.Message,\n ServerVersion: result.ServerVersion ?? undefined\n };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n this.TestResult = {\n Success: false,\n Message: `Connection test failed: ${message}`\n };\n } finally {\n this.IsTesting = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Wizard: finish\n // ---------------------------------------------------------------------------\n\n async FinishWizard(): Promise<void> {\n if (this.WizardStep < 3) {\n this.NextStep();\n return;\n }\n\n // On step 3 with a successful test — activate the integration and close\n if (!this.SavedIntegrationID) return;\n this.IsSaving = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(this.SavedIntegrationID);\n ci.IsActive = true;\n ci.Name = this.ConnectionName;\n await ci.Save();\n } catch (err) {\n console.error('[IntegrationConnections] Failed to activate integration:', err);\n } finally {\n this.IsSaving = false;\n this.WizardOpen = false;\n await this.LoadData();\n\n // Auto-select the newly created integration to show its detail view\n if (this.SavedIntegrationID) {\n const newSummary = this.Connections.find(c =>\n UUIDsEqual(c.Integration.ID, this.SavedIntegrationID!)\n );\n if (newSummary) {\n await this.SelectIntegrationCard(newSummary);\n }\n }\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private async loadWizardData(): Promise<void> {\n try {\n const provider = this.RunViewToUse;\n const rv = new RunView(provider ?? null);\n const [integrations, companyResult] = await Promise.all([\n this.dataService.LoadIntegrationDefinitions(provider),\n rv.RunView<CompanyRow>({\n EntityName: 'MJ: Companies',\n Fields: ['ID', 'Name'],\n OrderBy: 'Name',\n ResultType: 'simple'\n })\n ]);\n this.AvailableIntegrations = integrations;\n this.Companies = companyResult.Success ? companyResult.Results : [];\n if (this.Companies.length === 1) {\n this.SelectedCompanyID = this.Companies[0].ID;\n }\n } catch (err) {\n console.error('[IntegrationConnections] Failed to load wizard data:', err);\n }\n this.cdr.detectChanges();\n }\n\n private async saveCompanyIntegration(): Promise<string | null> {\n if (this.SavedIntegrationID) return this.SavedIntegrationID;\n if (!this.SelectedCompanyID || !this.SelectedIntegration) return null;\n\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n ci.NewRecord();\n ci.CompanyID = this.SelectedCompanyID;\n ci.IntegrationID = this.SelectedIntegration.ID;\n ci.Name = this.ConnectionName || this.SelectedIntegration.Name;\n ci.IsActive = false;\n if (this.SelectedCredential) {\n ci.CredentialID = this.SelectedCredential.ID;\n }\n\n const saved = await ci.Save();\n if (saved) {\n this.SavedIntegrationID = ci.ID;\n return ci.ID;\n }\n console.error('[IntegrationConnections] Failed to save company integration:',\n ci.LatestResult?.CompleteMessage ?? ci.LatestResult?.Message);\n return null;\n }\n\n private async loadAllEntityMaps(): Promise<EntityMapRow[]> {\n const rv = new RunView(this.RunViewToUse ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: '',\n OrderBy: 'CompanyIntegrationID',\n Fields: ['ID', 'CompanyIntegrationID'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n private countMapsByIntegration(maps: EntityMapRow[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const map of maps) {\n const current = counts.get(map.CompanyIntegrationID) ?? 0;\n counts.set(map.CompanyIntegrationID, current + 1);\n }\n return counts;\n }\n\n private resolveIconByName(name: string): string {\n return ResolveIntegrationIcon(name);\n }\n\n private resolveBrandColor(name: string): string {\n const match = BRAND_COLOR_MAP.find(m => m.Pattern.test(name));\n return match ? match.Color : '#6366f1';\n }\n\n private async toggleConnectionActive(summary: IntegrationSummary): Promise<void> {\n const md = new Metadata();\n const ci = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await ci.Load(summary.Integration.ID);\n ci.IsActive = !summary.Integration.IsActive;\n const saved = await ci.Save();\n if (saved) {\n await this.LoadData();\n }\n }\n\n private async loadEditCredentials(): Promise<void> {\n const rv = new RunView();\n const result = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n ExtraFilter: 'IsActive=1',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n this.EditCredentials = result.Results;\n\n // Pre-select the current credential if one is set\n if (this.EditCredentialID) {\n this.EditCredential = this.EditCredentials.find(c =>\n UUIDsEqual(c.ID, this.EditCredentialID!)\n ) ?? null;\n }\n }\n\n private resetWizardState(): void {\n this.WizardStep = 1;\n this.AvailableIntegrations = [];\n this.SearchQuery = '';\n this.SelectedIntegration = null;\n this.ConnectionName = '';\n this.SelectedCompanyID = null;\n this.ConnectionDescription = '';\n this.SelectedCredentialID = null;\n this.SelectedCredential = null;\n this.ShowCredentialDialog = false;\n this.ExistingCredentials = [];\n this.Companies = [];\n this.TestResult = null;\n this.IsTesting = false;\n this.IsSaving = false;\n this.SavedIntegrationID = null;\n this.OpenMenuID = null;\n }\n\n private onDocumentClick(e: Event): void {\n if (this.OpenMenuID) {\n const target = e.target as HTMLElement;\n if (!target.closest('.card-menu-wrapper')) {\n this.OpenMenuID = null;\n this.cdr.detectChanges();\n }\n }\n }\n}\n\nexport function LoadConnectionsComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Header -->\n <div class=\"connections-header\">\n <div class=\"header-left\">\n <h2 class=\"header-title\">Integrations</h2>\n <span class=\"header-count\">{{ Connections.length }} integration{{ Connections.length !== 1 ? 's' : '' }}</span>\n </div>\n <button kendoButton (click)=\"OpenWizard()\" class=\"add-connection-btn\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Integration\n </button>\n </div>\n\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button kendoButton (click)=\"OpenWizard()\" themeColor=\"primary\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">·</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button kendoButton\n themeColor=\"error\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button kendoButton\n look=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <button kendoButton themeColor=\"primary\" (click)=\"RunSync(summary.Integration.ID)\">\n Sync Now\n </button>\n }\n <div class=\"card-menu-wrapper\">\n <button class=\"menu-trigger\" (click)=\"ToggleMenu(summary.Integration.ID, $event)\">\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </button>\n @if (IsMenuOpen(summary.Integration.ID)) {\n <div class=\"card-menu-dropdown\">\n <button class=\"menu-item\" (click)=\"OnMenuAction('edit', summary)\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </button>\n <button class=\"menu-item\" (click)=\"OnMenuAction('disable', summary)\">\n <i class=\"fa-solid fa-toggle-off\"></i> {{ GetMenuActionLabel(summary) }}\n </button>\n <button class=\"menu-item menu-item-danger\" (click)=\"OnMenuAction('delete', summary)\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">·</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">·</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <button kendoButton themeColor=\"primary\" (click)=\"RunSync(SelectedSummary.Integration.ID)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync Now\n </button>\n }\n </div>\n </div>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">·</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\">\n <span [class]=\"DirectionBadgeClass(em.SyncDirection)\">\n {{ DirectionText(em.SyncDirection) }}\n </span>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name)\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button kendoButton look=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button kendoButton look=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button kendoButton\n themeColor=\"primary\"\n size=\"large\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button kendoButton look=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button kendoButton look=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button kendoButton\n themeColor=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button kendoButton look=\"outline\" size=\"small\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button kendoButton\n themeColor=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button kendoButton look=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page — the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n"]}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
3
|
+
import { ResourceData, MJIntegrationObjectFieldEntity } from '@memberjunction/core-entities';
|
|
4
|
+
import { IntegrationRow, IntegrationRunRow, EntityMapRow, FieldMapRow, RunDetailRow } from '../../services/integration-data.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/** Source object from integration metadata */
|
|
7
|
+
interface DiscoveredObject {
|
|
8
|
+
Name: string;
|
|
9
|
+
Label: string;
|
|
10
|
+
Category: string;
|
|
11
|
+
Description: string;
|
|
12
|
+
SupportsIncrementalSync: boolean;
|
|
13
|
+
SupportsWrite: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Target MJ entity for the picker */
|
|
16
|
+
interface MJEntityOption {
|
|
17
|
+
ID: string;
|
|
18
|
+
Name: string;
|
|
19
|
+
}
|
|
20
|
+
/** MJ entity field for field mapping destination picker */
|
|
21
|
+
interface MJFieldOption {
|
|
22
|
+
ID: string;
|
|
23
|
+
Name: string;
|
|
24
|
+
Type: string;
|
|
25
|
+
IsRequired: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Transform type for the pipeline builder */
|
|
28
|
+
type TransformType = 'direct' | 'regex' | 'split' | 'combine' | 'lookup' | 'format' | 'coerce' | 'substring' | 'custom';
|
|
29
|
+
/** A single step in a transform pipeline */
|
|
30
|
+
interface TransformStepUI {
|
|
31
|
+
Type: TransformType;
|
|
32
|
+
Config: Record<string, unknown>;
|
|
33
|
+
OnError: 'Skip' | 'Null' | 'Fail';
|
|
34
|
+
}
|
|
35
|
+
/** Editable field map row used in the center panel */
|
|
36
|
+
interface EditableFieldMap {
|
|
37
|
+
ID: string | null;
|
|
38
|
+
SourceFieldName: string;
|
|
39
|
+
SourceFieldLabel: string;
|
|
40
|
+
SourceFieldType: string;
|
|
41
|
+
DestinationFieldName: string;
|
|
42
|
+
DestinationFieldLabel: string;
|
|
43
|
+
IsKeyField: boolean;
|
|
44
|
+
IsRequired: boolean;
|
|
45
|
+
Direction: 'Both' | 'DestToSource' | 'SourceToDest';
|
|
46
|
+
Status: 'Active' | 'Inactive';
|
|
47
|
+
IsNew: boolean;
|
|
48
|
+
IsDirty: boolean;
|
|
49
|
+
IsSourcePK: boolean;
|
|
50
|
+
IsSourceRequired: boolean;
|
|
51
|
+
IsSourceReadOnly: boolean;
|
|
52
|
+
TransformPipeline: TransformStepUI[];
|
|
53
|
+
ShowTransformEditor: boolean;
|
|
54
|
+
}
|
|
55
|
+
/** Pending entity map — entity hasn't been created yet */
|
|
56
|
+
interface PendingMapEntry {
|
|
57
|
+
LocalID: string;
|
|
58
|
+
SourceObjectName: string;
|
|
59
|
+
SourceObjectLabel: string;
|
|
60
|
+
SchemaName: string;
|
|
61
|
+
TableName: string;
|
|
62
|
+
EntityName: string;
|
|
63
|
+
SyncDirection: 'Bidirectional' | 'Pull' | 'Push';
|
|
64
|
+
SourceFields: MJIntegrationObjectFieldEntity[];
|
|
65
|
+
DDLContent: string;
|
|
66
|
+
CreatedAt: Date;
|
|
67
|
+
}
|
|
68
|
+
/** Combined list item for left panel — merges real and pending maps */
|
|
69
|
+
interface MapListItem {
|
|
70
|
+
ID: string;
|
|
71
|
+
SourceName: string;
|
|
72
|
+
TargetName: string;
|
|
73
|
+
SyncDirection: string;
|
|
74
|
+
SyncEnabled: boolean;
|
|
75
|
+
IsPending: boolean;
|
|
76
|
+
RealMap: EntityMapRow | null;
|
|
77
|
+
PendingMap: PendingMapEntry | null;
|
|
78
|
+
}
|
|
79
|
+
type TargetMode = 'existing' | 'new';
|
|
80
|
+
/** Data preview row — key/value record */
|
|
81
|
+
type PreviewRecord = Record<string, string | number | boolean | null>;
|
|
82
|
+
export declare class MappingWorkspaceComponent extends BaseResourceComponent implements OnInit {
|
|
83
|
+
Integrations: IntegrationRow[];
|
|
84
|
+
EntityMaps: EntityMapRow[];
|
|
85
|
+
FieldMaps: FieldMapRow[];
|
|
86
|
+
RunEntityDetails: RunDetailRow[];
|
|
87
|
+
LatestRun: IntegrationRunRow | null;
|
|
88
|
+
SelectedIntegrationID: string;
|
|
89
|
+
SelectedMapID: string | null;
|
|
90
|
+
EntityMapSearchText: string;
|
|
91
|
+
IsLoadingIntegrations: boolean;
|
|
92
|
+
IsLoadingEntityMaps: boolean;
|
|
93
|
+
IsLoadingFieldMaps: boolean;
|
|
94
|
+
IsLoadingRunDetails: boolean;
|
|
95
|
+
ShowAddPanel: boolean;
|
|
96
|
+
TargetMode: TargetMode;
|
|
97
|
+
DiscoveredObjects: DiscoveredObject[];
|
|
98
|
+
IsDiscoveringObjects: boolean;
|
|
99
|
+
DiscoverError: string;
|
|
100
|
+
SelectedSourceObjectName: string;
|
|
101
|
+
MJEntities: MJEntityOption[];
|
|
102
|
+
IsLoadingEntities: boolean;
|
|
103
|
+
SelectedEntityID: string | null;
|
|
104
|
+
NewEntitySchemaName: string;
|
|
105
|
+
NewEntityTableName: string;
|
|
106
|
+
NewEntityName: string;
|
|
107
|
+
DBSchemas: string[];
|
|
108
|
+
AddSyncDirection: 'Bidirectional' | 'Pull' | 'Push';
|
|
109
|
+
IsSavingEntityMap: boolean;
|
|
110
|
+
PendingMaps: PendingMapEntry[];
|
|
111
|
+
IsGeneratingDDL: boolean;
|
|
112
|
+
DDLPreviewContent: string;
|
|
113
|
+
DDLPreviewError: string;
|
|
114
|
+
EditableFields: EditableFieldMap[];
|
|
115
|
+
DestinationFields: MJFieldOption[];
|
|
116
|
+
IsLoadingDestFields: boolean;
|
|
117
|
+
IsSavingFields: boolean;
|
|
118
|
+
AutoMapCount: number;
|
|
119
|
+
ShowAutoMapBanner: boolean;
|
|
120
|
+
SourceFields: MJIntegrationObjectFieldEntity[];
|
|
121
|
+
IsLoadingSourceFields: boolean;
|
|
122
|
+
SourcePreviewData: PreviewRecord[];
|
|
123
|
+
DestPreviewData: PreviewRecord[];
|
|
124
|
+
IsLoadingSourcePreview: boolean;
|
|
125
|
+
IsLoadingDestPreview: boolean;
|
|
126
|
+
ShowSourcePreview: boolean;
|
|
127
|
+
ShowDestPreview: boolean;
|
|
128
|
+
private dataService;
|
|
129
|
+
private cdr;
|
|
130
|
+
private discoverCache;
|
|
131
|
+
private pendingCounter;
|
|
132
|
+
ngOnInit(): Promise<void>;
|
|
133
|
+
/** Merged list of real entity maps + pending maps, for the left panel */
|
|
134
|
+
get AllMaps(): MapListItem[];
|
|
135
|
+
get FilteredMaps(): MapListItem[];
|
|
136
|
+
get SelectedMap(): MapListItem | null;
|
|
137
|
+
get SelectedEntityMap(): EntityMapRow | null;
|
|
138
|
+
get SelectedPendingMap(): PendingMapEntry | null;
|
|
139
|
+
get HasDirtyFields(): boolean;
|
|
140
|
+
get ActiveEditableFields(): EditableFieldMap[];
|
|
141
|
+
get IsAddFormValid(): boolean;
|
|
142
|
+
/** Auto-suggest table/entity names from selected source object */
|
|
143
|
+
get SuggestedTableName(): string;
|
|
144
|
+
get SuggestedEntityName(): string;
|
|
145
|
+
LoadIntegrations(): Promise<void>;
|
|
146
|
+
OnIntegrationChange(integrationID: string): Promise<void>;
|
|
147
|
+
private LoadEntityMapsForIntegration;
|
|
148
|
+
private LoadLatestRunForIntegration;
|
|
149
|
+
/** Load source objects from IntegrationObject metadata via engine (cached per integration) */
|
|
150
|
+
private DiscoverSourceObjects;
|
|
151
|
+
OnMapSelect(item: MapListItem): Promise<void>;
|
|
152
|
+
IsSelectedMap(id: string): boolean;
|
|
153
|
+
OnToggleEntityMap(em: EntityMapRow): Promise<void>;
|
|
154
|
+
OnDeleteMap(item: MapListItem, event: Event): Promise<void>;
|
|
155
|
+
OpenAddPanel(): void;
|
|
156
|
+
CloseAddPanel(): void;
|
|
157
|
+
SetTargetMode(mode: TargetMode): void;
|
|
158
|
+
OnSourceObjectChange(objectName: string): void;
|
|
159
|
+
OnSchemaNameChange(): void;
|
|
160
|
+
SaveAddMap(): Promise<void>;
|
|
161
|
+
private SaveExistingEntityMap;
|
|
162
|
+
private SaveNewEntityMap;
|
|
163
|
+
private ResetAddForm;
|
|
164
|
+
private EnsureEntitiesLoaded;
|
|
165
|
+
private LoadDBSchemas;
|
|
166
|
+
PreviewDDL(): Promise<void>;
|
|
167
|
+
private ToEditableField;
|
|
168
|
+
private ParseTransformPipeline;
|
|
169
|
+
SerializeTransformPipeline(steps: TransformStepUI[]): string | null;
|
|
170
|
+
private LoadDestinationFields;
|
|
171
|
+
/** Auto-generate field mappings by matching source fields to destination by name */
|
|
172
|
+
AutoGenerateFieldMappings(entityMap: EntityMapRow): Promise<void>;
|
|
173
|
+
private MatchFieldsByName;
|
|
174
|
+
/** Validation: count fields missing destination mapping */
|
|
175
|
+
get UnmappedRequiredCount(): number;
|
|
176
|
+
/** Validation: check if at least one key field is configured */
|
|
177
|
+
get HasKeyField(): boolean;
|
|
178
|
+
/** Validation: overall mapping readiness */
|
|
179
|
+
get MappingValidation(): {
|
|
180
|
+
IsValid: boolean;
|
|
181
|
+
Warnings: string[];
|
|
182
|
+
};
|
|
183
|
+
/** Re-run auto-mapping for the currently selected entity map */
|
|
184
|
+
RerunAutoMap(): Promise<void>;
|
|
185
|
+
OnFieldChanged(field: EditableFieldMap): void;
|
|
186
|
+
AddFieldMapping(): void;
|
|
187
|
+
RemoveFieldMapping(index: number): void;
|
|
188
|
+
SaveFieldMappings(): Promise<void>;
|
|
189
|
+
DismissAutoMapBanner(): void;
|
|
190
|
+
/** Available transform types with display metadata */
|
|
191
|
+
readonly TransformTypes: Array<{
|
|
192
|
+
Value: TransformType;
|
|
193
|
+
Label: string;
|
|
194
|
+
Icon: string;
|
|
195
|
+
Description: string;
|
|
196
|
+
}>;
|
|
197
|
+
ToggleTransformEditor(field: EditableFieldMap): void;
|
|
198
|
+
AddTransformStep(field: EditableFieldMap): void;
|
|
199
|
+
RemoveTransformStep(field: EditableFieldMap, stepIndex: number): void;
|
|
200
|
+
OnTransformTypeChange(field: EditableFieldMap, step: TransformStepUI, newType: TransformType): void;
|
|
201
|
+
OnTransformConfigChange(field: EditableFieldMap): void;
|
|
202
|
+
private GetDefaultConfigForType;
|
|
203
|
+
GetTransformLabel(type: TransformType): string;
|
|
204
|
+
GetTransformIcon(type: TransformType): string;
|
|
205
|
+
/** For combine transforms: get available source field names */
|
|
206
|
+
GetAvailableSourceFields(): string[];
|
|
207
|
+
/**
|
|
208
|
+
* Resolve source fields from IntegrationObjectField metadata via IntegrationEngineBase.
|
|
209
|
+
* CompanyIntegrationID → Integration → IntegrationObject → IntegrationObjectFields.
|
|
210
|
+
*/
|
|
211
|
+
private resolveSourceFieldsFromMetadata;
|
|
212
|
+
/** For lookup transforms: add a new key-value pair */
|
|
213
|
+
AddLookupEntry(config: Record<string, unknown>): void;
|
|
214
|
+
GetLookupEntries(config: Record<string, unknown>): Array<{
|
|
215
|
+
key: string;
|
|
216
|
+
value: string;
|
|
217
|
+
}>;
|
|
218
|
+
UpdateLookupEntry(config: Record<string, unknown>, oldKey: string, newKey: string, newValue: string): void;
|
|
219
|
+
RemoveLookupEntry(config: Record<string, unknown>, key: string): void;
|
|
220
|
+
/** For combine transforms: toggle a source field */
|
|
221
|
+
ToggleCombineField(config: Record<string, unknown>, fieldName: string): void;
|
|
222
|
+
IsCombineFieldSelected(config: Record<string, unknown>, fieldName: string): boolean;
|
|
223
|
+
LoadSourcePreview(): Promise<void>;
|
|
224
|
+
LoadDestPreview(): Promise<void>;
|
|
225
|
+
CloseSourcePreview(): void;
|
|
226
|
+
CloseDestPreview(): void;
|
|
227
|
+
private CloseAllPreviews;
|
|
228
|
+
GetPreviewColumns(data: PreviewRecord[]): string[];
|
|
229
|
+
FormatPreviewValue(value: string | number | boolean | null): string;
|
|
230
|
+
CopyDDLToClipboard(ddl: string): void;
|
|
231
|
+
GetPendingStepStatus(pendingMap: PendingMapEntry, step: number): 'current' | 'done' | 'future';
|
|
232
|
+
get RunStatusColor(): string;
|
|
233
|
+
FormatDate(dateStr: string | null): string;
|
|
234
|
+
GetResourceDisplayName(_data: ResourceData): Promise<string>;
|
|
235
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
236
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MappingWorkspaceComponent, never>;
|
|
237
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MappingWorkspaceComponent, "app-mapping-workspace", never, {}, {}, never, never, false, never>;
|
|
238
|
+
}
|
|
239
|
+
export declare function LoadMappingWorkspace(): void;
|
|
240
|
+
export {};
|
|
241
|
+
//# sourceMappingURL=mapping-workspace.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping-workspace.component.d.ts","sourceRoot":"","sources":["../../../../src/Integration/components/mapping-workspace/mapping-workspace.component.ts"],"names":[],"mappings":"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"}
|