@memberjunction/ng-dashboards 5.8.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.
Files changed (77) hide show
  1. package/dist/AI/components/models/model-management.component.d.ts +2 -0
  2. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  3. package/dist/AI/components/models/model-management.component.js +44 -2
  4. package/dist/AI/components/models/model-management.component.js.map +1 -1
  5. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  6. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +5 -2
  7. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  8. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  9. package/dist/Home/home-dashboard.component.js +10 -7
  10. package/dist/Home/home-dashboard.component.js.map +1 -1
  11. package/dist/Integration/components/activity/activity.component.d.ts +96 -0
  12. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -0
  13. package/dist/Integration/components/activity/activity.component.js +961 -0
  14. package/dist/Integration/components/activity/activity.component.js.map +1 -0
  15. package/dist/Integration/components/connections/connections.component.d.ts +194 -0
  16. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -0
  17. package/dist/Integration/components/connections/connections.component.js +2368 -0
  18. package/dist/Integration/components/connections/connections.component.js.map +1 -0
  19. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts +211 -13
  20. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  21. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2093 -187
  22. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  23. package/dist/Integration/components/overview/overview.component.d.ts +60 -0
  24. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -0
  25. package/dist/Integration/components/overview/overview.component.js +628 -0
  26. package/dist/Integration/components/overview/overview.component.js.map +1 -0
  27. package/dist/Integration/components/pipelines/pipelines.component.d.ts +203 -0
  28. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -0
  29. package/dist/Integration/components/pipelines/pipelines.component.js +2057 -0
  30. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -0
  31. package/dist/Integration/components/schedules/schedules.component.d.ts +110 -0
  32. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -0
  33. package/dist/Integration/components/schedules/schedules.component.js +842 -0
  34. package/dist/Integration/components/schedules/schedules.component.js.map +1 -0
  35. package/dist/Integration/components/visual-editor/visual-editor.component.d.ts +141 -0
  36. package/dist/Integration/components/visual-editor/visual-editor.component.d.ts.map +1 -0
  37. package/dist/Integration/components/visual-editor/visual-editor.component.js +1538 -0
  38. package/dist/Integration/components/visual-editor/visual-editor.component.js.map +1 -0
  39. package/dist/Integration/components/widgets/run-history-panel.component.js +3 -2
  40. package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
  41. package/dist/Integration/index.d.ts +5 -3
  42. package/dist/Integration/index.d.ts.map +1 -1
  43. package/dist/Integration/index.js +11 -7
  44. package/dist/Integration/index.js.map +1 -1
  45. package/dist/Integration/integration.module.d.ts +20 -16
  46. package/dist/Integration/integration.module.d.ts.map +1 -1
  47. package/dist/Integration/integration.module.js +40 -21
  48. package/dist/Integration/integration.module.js.map +1 -1
  49. package/dist/Integration/services/integration-data.service.d.ts +117 -3
  50. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  51. package/dist/Integration/services/integration-data.service.js +415 -10
  52. package/dist/Integration/services/integration-data.service.js.map +1 -1
  53. package/dist/QueryBrowser/query-browser-resource.component.d.ts +27 -4
  54. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  55. package/dist/QueryBrowser/query-browser-resource.component.js +338 -144
  56. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  57. package/dist/__tests__/mapping-validation.test.d.ts +2 -0
  58. package/dist/__tests__/mapping-validation.test.d.ts.map +1 -0
  59. package/dist/__tests__/mapping-validation.test.js +170 -0
  60. package/dist/__tests__/mapping-validation.test.js.map +1 -0
  61. package/package.json +40 -38
  62. package/dist/Integration/components/connection-studio/connection-studio.component.d.ts +0 -81
  63. package/dist/Integration/components/connection-studio/connection-studio.component.d.ts.map +0 -1
  64. package/dist/Integration/components/connection-studio/connection-studio.component.js +0 -960
  65. package/dist/Integration/components/connection-studio/connection-studio.component.js.map +0 -1
  66. package/dist/Integration/components/control-tower/control-tower.component.d.ts +0 -43
  67. package/dist/Integration/components/control-tower/control-tower.component.d.ts.map +0 -1
  68. package/dist/Integration/components/control-tower/control-tower.component.js +0 -446
  69. package/dist/Integration/components/control-tower/control-tower.component.js.map +0 -1
  70. package/dist/Integration/components/sync-activity/sync-activity.component.d.ts +0 -65
  71. package/dist/Integration/components/sync-activity/sync-activity.component.d.ts.map +0 -1
  72. package/dist/Integration/components/sync-activity/sync-activity.component.js +0 -671
  73. package/dist/Integration/components/sync-activity/sync-activity.component.js.map +0 -1
  74. package/dist/__tests__/connection-studio.test.d.ts +0 -2
  75. package/dist/__tests__/connection-studio.test.d.ts.map +0 -1
  76. package/dist/__tests__/connection-studio.test.js +0 -186
  77. package/dist/__tests__/connection-studio.test.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/schedules/schedules.component.ts","../../../../src/Integration/components/schedules/schedules.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAqB,MAAM,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;;;;ICHvG,8BAA+B;IAC7B,gCAAqD;IACvD,iBAAM;;;IAgBE,+BAAwC;IACtC,wBAA2C;IAC3C,YACF;IAAA,iBAAO;;;IADL,eACF;IADE,2DACF;;;IAyBQ,gCACwD;IACtD,YACF;IAAA,iBAAO;;;;IAFD,uEAAiD;IACrD,cACF;IADE,2CACF;;;IAJF,yHAAsB;;;IAAtB,4CAKC;;;IAeG,0BAEM;;;;IADD,uEAAiD;;;IAFxD,+HAAsB;;;IAAtB,4CAIC;;;IAQD,0BAIM;;;;IAFD,6FAAoE;IADpE,wDAA4C;IAE5C,uFAAmE;;;IAMxE,+BAAuC;IACrC,wBAA2C;IAC7C,iBAAM;;;IA7BV,AADF,+BAA0B,cACsC;IAC5D,YACF;IAAA,iBAAM;IACN,+BAAsC;IAEpC,yJAMC;IAGD,0BAAkC;IAGlC,0JAMC;IAGD,yHAAoB;IAOpB,2BAAqC;IAEzC,AADE,iBAAM,EACF;;;;IAnC4B,cAA6B;IAA7B,8CAA6B;IAC3D,cACF;IADE,uDACF;IAGE,eAMC;IAND,mCAMC;IAMD,eAMC;IAND,6BAMC;IAGD,eAIC;IAJD,0CAIC;;;IArDT,AADF,+BAA8B,cACA;IAC1B,wBAAmC;IACnC,+BACF;IAAA,iBAAM;IAGJ,AAFF,+BAAgC,cAEI;IAChC,0BAAyC;IACzC,+BAAiC;IAC/B,kJAOC;IAEL,AADE,iBAAM,EACF;IAGN,4JAsCC;IAEL,AADE,iBAAM,EACF;;;IApDE,eAOC;IAPD,mCAOC;IAKL,eAsCC;IAtCD,qCAsCC;;;IAsBO,gCAAkC;IAAA,sBAAM;IAAA,iBAAO;;;IAE/C,gCAA+B;IAAA,wBAAQ;IAAA,iBAAO;;;IAG9C,gCAAkC;IAChC,wBAA2C;IAC3C,yBACF;IAAA,iBAAO;;;;IAiDH,kCAE2D;IAAnD,kTAAS,sDAAwC,KAAC;IACxD,YACF;IAAA,iBAAS;;;;;IAHD,+FAAwE;IAE9E,cACF;IADE,iDACF;;;;IANJ,AADF,+BAAwB,cACQ;IAC5B,oLAMC;IACH,iBAAM;IAEJ,AADF,+BAA6B,gBAMgC;IAApD,sRAAU,gDAAsC,KAAC;IALxD,iBAK2D;IAC3D,gCAA4B;IAAA,mBAAG;IAEnC,AADE,AADiC,iBAAO,EAClC,EACF;;;;IAjBF,eAMC;IAND,qCAMC;IAOM,eAAwC;IAAxC,gEAAwC;;;;IAY7C,kCAEoE;IAA5D,kTAAS,+DAAiD,KAAC;IACjE,YACF;IAAA,iBAAS;;;;;IAHD,mGAA4E;IAElF,cACF;IADE,iDACF;;;IAUA,gCAA+B;IAC7B,YACF;IAAA,iBAAO;;;;IADL,cACF;IADE,gGACF;;;;IAlBJ,AADF,+BAAwB,cACI;IACxB,qLAMC;IACH,iBAAM;IAEJ,AADF,+BAA4B,gBAKiC;IAApD,sRAAU,gDAAsC,KAAC;IAJxD,iBAI2D;IAC3D,wIAAkC;IAMtC,AADE,iBAAM,EACF;;;;IApBF,eAMC;IAND,iCAMC;IAMM,eAA0C;IAA1C,kEAA0C;IAEjD,cAIC;IAJD,+DAIC;;;;IAhEH,AADF,AADF,+BAAwB,cACE,iBAGmC;IAAjD,+PAAS,uCAA6B,QAAQ,CAAC,KAAC;IACtD,wBACF;IAAA,iBAAS;IACT,kCAE2D;IAAnD,+PAAS,uCAA6B,UAAU,CAAC,KAAC;IACxD,0BACF;IAAA,iBAAS;IACT,kCAEuD;IAA/C,+PAAS,uCAA6B,MAAM,CAAC,KAAC;IACpD,sBACF;IAEJ,AADE,AADE,iBAAS,EACL,EACF;IAGN,yHAAyD;IAwBzD,yHAAqD;;;;IA1CzC,eAA0E;IAA1E,6FAA0E;IAK1E,eAA4E;IAA5E,+FAA4E;IAK5E,eAAwE;IAAxE,2FAAwE;IAQpF,eAqBC;IArBD,sFAqBC;IAGD,cAwBC;IAxBD,kFAwBC;;;IAkBG,gCAA0C;IACxC,wBAA2C;IAC3C,yBACF;IAAA,iBAAO;;;IAEP,gCAAuC;IAAA,oBAAI;IAAA,iBAAO;;;IAWhD,wBAA2C;IAC3C,2BACF;;;IACE,wBAAiC;IACjC,sBACF;;;;IATF,kCAE4C;IAApC,gQAAS,mCAAyB,KAAC;IAIvC,AAHF,8GAA6B,wFAGpB;IAIX,iBAAS;;;;IATD,0DAAkC;IAExC,cAMC;IAND,yDAMC;;;IAOD,wBAA2C;IAC3C,4BACF;;;IACE,wBAAgC;IAChC,yBACF;;;;IAhKJ,AADF,AAHF,+BAA+E,cAGtD,cACE;IACrB,oBAA2E;IAC7E,iBAAM;IAEJ,AADF,+BAA0B,cACD;IAAA,YAA2C;IAAA,iBAAM;IACxE,+BAA0B;IAAA,YAAsB;IAAA,iBAAM;IACtD,+BAAyB;IAGrB,AAFF,6GAAyB,uFAEhB;IAGT,6GAAyB;IAQ/B,AADE,AADE,iBAAM,EACF,EACF;IAMF,AADF,AAFF,gCAAyB,eAEC,iBACM;IAC1B,4BACA;IAAA,mCAIsB;IAFd,6NAAS,4CAAkC,KAAC;IAGlD,4BAAiC;IAGvC,AADE,AADE,iBAAS,EACH,EACJ;IAEN,kGAA6C;IAyE/C,iBAAM;IAMA,AADF,AADF,AADF,gCAAyB,eACG,eACC,gBACI;IAAA,yBAAQ;IAAA,iBAAO;IAC1C,iCAA2B;IAAA,aAAkC;IAC/D,AAD+D,iBAAO,EAChE;IAEJ,AADF,gCAAyB,gBACI;IAAA,yBAAQ;IAAA,iBAAO;IAC1C,iCAA2B;IAAA,aAAkC;IAC/D,AAD+D,iBAAO,EAChE;IAEJ,AADF,gCAAyB,gBACI;IAAA,uBAAM;IAAA,iBAAO;IAMtC,AALF,6GAAyB,uFAKhB;IAIb,AADE,iBAAM,EACF;IAEN,gCAA0B;IACxB,+GAA+B;IAa/B,mCAEsC;IAA9B,6NAAS,6BAAmB,KAAC;IAIjC,AAHF,iGAA8B,2EAGrB;IAOjB,AADE,AADE,AADE,iBAAS,EACL,EACF,EACF;;;;IAxKqB,+DAAmD;IAKrE,eAAmE;IAAnE,qFAAmE;IAG/C,eAA2C;IAA3C,iEAA2C;IACxC,eAAsB;IAAtB,yCAAsB;IAE9C,eAIC;IAJD,gDAIC;IACD,eAKC;IALD,gDAKC;IAYO,eAAyD;IAAzD,4EAAyD;;IASrE,eAwEC;IAxED,2EAwEC;IAQ8B,eAAkC;IAAlC,4DAAkC;IAIlC,eAAkC;IAAlC,4DAAkC;IAI7D,eAOC;IAPD,gDAOC;IAKH,eAYC;IAZD,6DAYC;IAEO,cAAwD;IAAxD,mFAAwD;IAE9D,cAMC;IAND,4DAMC;;;IAQT,+BAAyB;IACvB,wBAA0C;IAC1C,yBAAG;IAAA,qCAAqB;IAC1B,AAD0B,iBAAI,EACxB;;;;IA5QN,AADF,AADF,AALF,8BAA4B,aAKE,aACD,YACG;IACxB,uBAA0C;IAC1C,gCACF;IAAA,iBAAK;IACL,+BAA0B;IAAA,YAAyE;IAAA,iBAAO;IAC1G,+BAA0B;IAAA,YAA8B;IAAA,iBAAO;IAC/D,qGAAuB;IAMzB,iBAAM;IACN,kCAAqD;IAArB,uLAAS,iBAAU,KAAC;IAClD,yBAAyC;IACzC,0BACF;IACF,AADE,iBAAS,EACL;IAKN,sGAAkC;IAqElC,gCAA2B;IACzB,sIA0KC;IAED,qGAA8B;IAOlC,AADE,iBAAM,EACF;;;IA3Q0B,eAAyE;IAAzE,4GAAyE;IACzE,eAA8B;IAA9B,8DAA8B;IACxD,cAKC;IALD,kDAKC;IAWL,eAgEC;IAhED,6DAgEC;IAMC,eA0KC;IA1KD,+BA0KC;IAED,eAKC;IALD,yDAKC;;ADxOP,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AASvE,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,qBAAqB;IAE3D,8EAA8E;IAC9E,eAAe;IACf,8EAA8E;IAE9E,SAAS,GAAkB,EAAE,CAAC;IAC9B,SAAS,GAAG,IAAI,CAAC;IACjB,QAAQ,GAAkB,IAAI,CAAC;IAC/B,SAAS,GAAkB,IAAI,CAAC;IAEhC,6CAA6C;IAC7C,cAAc,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEzD,yCAAyC;IACzC,eAAe,GAAkB,EAAE,CAAC;IACpC,aAAa,GAAa,EAAE,CAAC;IAE7B,8BAA8B;IAC9B,eAAe,GAAqB;QAClC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;QAC3B,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7B,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7B,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;QAC7B,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE;QAC9B,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;KAChC,CAAC;IAEF,8BAA8B;IAC9B,WAAW,GAAiB;QAC1B,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE;QAChD,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE;QACrD,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE;QACpD,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE;KACrD,CAAC;IAEF,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAEtE,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC7C,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,YAAY,GAA0C,IAAI,CAAC;IAEnE,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,0CAA0C;QAC1C,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,qBAAqB;IACrB,8EAA8E;IAE9E,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC9C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC5C,OAAO,4BAA4B,CAAC;IACtC,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,EAAE,GAAG,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAc;gBAC3C,UAAU,EAAE,0BAA0B;gBACtC,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,MAAM;gBACf,MAAM,EAAE;oBACN,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU;oBAClD,iBAAiB,EAAE,cAAc,EAAE,yBAAyB;oBAC5D,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB;oBAC5D,UAAU,EAAE,UAAU;iBACvB;gBACD,UAAU,EAAE,QAAQ;aACrB,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;QAClE,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,WAAW;IACX,8EAA8E;IAE9E,aAAa;QACX,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAkB,EAAE,CAAC;QAE/B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,eAAe;gBAAE,SAAS;YAExC,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,IAAI,CAAC;oBACR,aAAa,EAAE,QAAQ,CAAC,EAAE;oBAC1B,eAAe,EAAE,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI;oBACtD,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,8EAA8E;IAC9E,mBAAmB;IACnB,8EAA8E;IAE9E,qBAAqB,CAAC,aAAqB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,iBAAiB,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;QACnG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,eAAe,CAAC,aAAqB,EAAE,IAAoC;QACzE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,aAAqB,EAAE,OAAe;QAChD,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,yBAAyB,EAAE,OAAO,CAAC,CAAC;QACzE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,iBAAiB,CAAC,aAAqB,EAAE,UAAkB;QACzD,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,iBAAiB,CAAC,aAAqB,EAAE,KAAY;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,iBAAiB,CAAC,aAAqB,EAAE,KAAY;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,UAAU,CAAC,aAAqB;QAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E,KAAK,CAAC,YAAY,CAAC,aAAqB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAA6B,0BAA0B,CAAC,CAAC;YAChG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAEjC,8EAA8E;YAC9E,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;YAClG,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YACzF,IAAI,OAAO,CAAC,uBAAuB,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC1H,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YAE/F,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC1C,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;YACvG,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,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,sCAAsC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,mBAAmB;IACnB,8EAA8E;IAE9E,2BAA2B,CAAC,QAAqB;QAC/C,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,CAAC,eAAe,CAAY,CAAC;IACrG,CAAC;IAED,wBAAwB,CAAC,QAAqB;QAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,YAAY,CAAmC,CAAC;IACtH,CAAC;IAED,oBAAoB,CAAC,QAAqB;QACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,yBAAyB,EAAE,QAAQ,CAAC,uBAAuB,CAAkB,CAAC;IAC3H,CAAC;IAED,gBAAgB,CAAC,QAAqB;QACpC,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAkB,CAAC;IACzG,CAAC;IAED,kBAAkB,CAAC,QAAqB,EAAE,OAAe;QACvD,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;IACzD,CAAC;IAED,kBAAkB,CAAC,QAAqB;QACtC,IAAI,CAAC,QAAQ,CAAC,kBAAkB;YAAE,OAAO,eAAe,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3C,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACjC,OAAO,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB,CAAC,QAAqB;QACtC,IAAI,CAAC,QAAQ,CAAC,kBAAkB;YAAE,OAAO,OAAO,CAAC;QACjD,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC3E,CAAC;IAED,kBAAkB,CAAC,UAAyB;QAC1C,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QAC1C,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,AAAD,EAAG,AAAD,EAAG,GAAG,CAAC,GAAG,KAAK,CAAC;QACnC,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,YAAY,CAAC;QACrD,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChF,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,YAAY,IAAI,KAAK,CAAC;QAC7E,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,eAAe,IAAI,KAAK,CAAC;QAClF,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,eAAe,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC7B,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,uBAAuB,CAAC,IAAY,EAAE,MAAc;QAClD,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IAClD,CAAC;IAED,QAAQ,CAAC,aAAqB;QAC5B,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,CAAC,aAAqB;QAC7B,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,IAAiB;QACzC,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,MAAc,EAAE,IAAiB;QACjD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,oBAAoB,CAAC,MAAc,EAAE,IAAoB;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,qBAAqB,CAAC,MAAc,EAAE,IAAgB;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,IAAY;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,KAAqB;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAEtE,YAAY,CAAC,aAAqB;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,iBAAiB,CACvB,aAAqB,EACrB,KAAQ,EACR,aAA6B;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC,KAAK,CAAmB,CAAC;QAC1C,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,gBAAgB,CACtB,aAAqB,EACrB,KAAQ,EACR,KAAqB;QAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC9D,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,yBAAyB,CAAC,QAAqB,EAAE,GAAS;QAChE,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;QAEnC,IAAI,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,uBAAuB,IAAI,QAAQ,CAAC,uBAAuB,GAAG,CAAC,EAAE,CAAC;YACpG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YACtD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,sBAAsB,CAAC,QAAqB,EAAE,GAAS,EAAE,OAAyB;QACxF,MAAM,UAAU,GAAG,QAAQ,CAAC,uBAAwB,GAAG,MAAM,CAAC;QAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;QAEjD,gDAAgD;QAChD,IAAI,MAAM,GAAG,QAAQ,CAAC,kBAAkB;YACtC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE;YACjD,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAElB,kEAAkE;QAClE,OAAO,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,UAAU,CAAC;QACvB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC;QAEvB,OAAO,MAAM,GAAG,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;gBAClB,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE;gBACtB,MAAM,EAAE,MAAM,KAAK,OAAO;aAC3B,CAAC,CAAC;YACH,MAAM,IAAI,UAAU,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,QAAqB,EAAE,GAAS,EAAE,OAAyB;QACpF,iDAAiD;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,cAAe,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,WAAW,IAAI,IAAI;mBAC7B,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,QAAQ,EAAE;mBACpC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,UAAU,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,QAAqB,EAAE,GAAS,EAAE,OAAyB;QAClF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAmB,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,oBAAoB,CAAC,UAAkB;QAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,KAAK,GAA4C,EAAE,CAAC;QAE1D,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrB,aAAa;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;oBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB,CAAC,EAAU;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QAC7C,IAAI,YAAY,GAAG,CAAC;YAAE,OAAO,oBAAoB,CAAC;QAClD,IAAI,YAAY,GAAG,EAAE;YAAE,OAAO,GAAG,YAAY,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACvF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;QAClC,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACnE,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,CAAC;IACjC,CAAC;qPAndU,kBAAkB,yBAAlB,kBAAkB;6DAAlB,kBAAkB;YCxD7B,AAJF,oFAAiB,+DAIR;;YAJT,uCA4RC;;;ADhOY,kBAAkB;IAP9B,aAAa,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;GAOhD,kBAAkB,CAod9B;;iFApdY,kBAAkB;cAN9B,SAAS;6BACI,KAAK,YACP,2BAA2B;;kFAI1B,kBAAkB;AAsd/B,MAAM,UAAU,sBAAsB;IACpC,wDAAwD;IACxD,6DAA6D;AAC/D,CAAC","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, OnDestroy, inject } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJCompanyIntegrationEntity } from '@memberjunction/core-entities';\nimport { IntegrationDataService, ResolveIntegrationIcon } from '../../services/integration-data.service';\n\n// ---------------------------------------------------------------------------\n// Data interfaces\n// ---------------------------------------------------------------------------\n\ninterface ScheduleRow {\n ID: string;\n Name: string;\n Integration: string;\n Company: string;\n IsActive: boolean | null;\n ScheduleEnabled: boolean;\n ScheduleType: 'Manual' | 'Interval' | 'Cron';\n ScheduleIntervalMinutes: number | null;\n CronExpression: string | null;\n NextScheduledRunAt: string | null;\n LastScheduledRunAt: string | null;\n IsLocked: boolean;\n LockedAt: string | null;\n}\n\ninterface TimelineMarker {\n Hour: number;\n Minute: number;\n IsNext: boolean;\n}\n\ninterface TimelineRow {\n IntegrationID: string;\n IntegrationName: string;\n Markers: TimelineMarker[];\n IsLocked: boolean;\n}\n\ninterface IntervalPreset {\n Label: string;\n Minutes: number;\n}\n\ninterface CronPreset {\n Label: string;\n Expression: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n@RegisterClass(BaseResourceComponent, 'IntegrationSchedules')\n@Component({\n standalone: false,\n selector: 'app-integration-schedules',\n templateUrl: './schedules.component.html',\n styleUrls: ['./schedules.component.css']\n})\nexport class SchedulesComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n // ---------------------------------------------------------------------------\n // Public state\n // ---------------------------------------------------------------------------\n\n Schedules: ScheduleRow[] = [];\n IsLoading = true;\n SavingID: string | null = null;\n RunningID: string | null = null;\n\n /** Track pending edits per integration ID */\n PendingChanges = new Map<string, Partial<ScheduleRow>>();\n\n /** Timeline data built from schedules */\n TimelineMarkers: TimelineRow[] = [];\n TimelineHours: number[] = [];\n\n /** Preset interval choices */\n IntervalPresets: IntervalPreset[] = [\n { Label: '5m', Minutes: 5 },\n { Label: '15m', Minutes: 15 },\n { Label: '30m', Minutes: 30 },\n { Label: '1h', Minutes: 60 },\n { Label: '6h', Minutes: 360 },\n { Label: '12h', Minutes: 720 },\n { Label: '24h', Minutes: 1440 }\n ];\n\n /** Preset cron expressions */\n CronPresets: CronPreset[] = [\n { Label: 'Every hour', Expression: '0 * * * *' },\n { Label: 'Every 6 hours', Expression: '0 */6 * * *' },\n { Label: 'Daily midnight', Expression: '0 0 * * *' },\n { Label: 'Weekdays 9am', Expression: '0 9 * * 1-5' }\n ];\n\n // ---------------------------------------------------------------------------\n // Private\n // ---------------------------------------------------------------------------\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n private refreshTimer: ReturnType<typeof setInterval> | null = null;\n\n // ---------------------------------------------------------------------------\n // Lifecycle\n // ---------------------------------------------------------------------------\n\n async ngOnInit(): Promise<void> {\n this.buildTimelineHours();\n await this.LoadData();\n // Refresh relative times every 60 seconds\n this.refreshTimer = setInterval(() => this.cdr.detectChanges(), 60_000);\n }\n\n ngOnDestroy(): void {\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n this.refreshTimer = null;\n }\n }\n\n // ---------------------------------------------------------------------------\n // Resource overrides\n // ---------------------------------------------------------------------------\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Schedules';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-calendar-check';\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 rv = new RunView(provider ?? null);\n const result = await rv.RunView<ScheduleRow>({\n EntityName: 'MJ: Company Integrations',\n ExtraFilter: '',\n OrderBy: 'Name',\n Fields: [\n 'ID', 'Name', 'Integration', 'Company', 'IsActive',\n 'ScheduleEnabled', 'ScheduleType', 'ScheduleIntervalMinutes',\n 'CronExpression', 'NextScheduledRunAt', 'LastScheduledRunAt',\n 'IsLocked', 'LockedAt'\n ],\n ResultType: 'simple'\n });\n this.Schedules = result.Results;\n this.BuildTimeline();\n } catch (err) {\n console.error('[SchedulesComponent] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Timeline\n // ---------------------------------------------------------------------------\n\n BuildTimeline(): void {\n const now = new Date();\n const rows: TimelineRow[] = [];\n\n for (const schedule of this.Schedules) {\n if (!schedule.ScheduleEnabled) continue;\n\n const markers = this.computeMarkersForSchedule(schedule, now);\n if (markers.length > 0 || schedule.IsLocked) {\n rows.push({\n IntegrationID: schedule.ID,\n IntegrationName: schedule.Integration ?? schedule.Name,\n Markers: markers,\n IsLocked: schedule.IsLocked\n });\n }\n }\n this.TimelineMarkers = rows;\n }\n\n // ---------------------------------------------------------------------------\n // Schedule editing\n // ---------------------------------------------------------------------------\n\n ToggleScheduleEnabled(integrationID: string): void {\n const schedule = this.findSchedule(integrationID);\n if (!schedule) return;\n\n const current = this.getEffectiveValue(integrationID, 'ScheduleEnabled', schedule.ScheduleEnabled);\n this.setPendingChange(integrationID, 'ScheduleEnabled', !current);\n }\n\n SetScheduleType(integrationID: string, type: 'Manual' | 'Interval' | 'Cron'): void {\n this.setPendingChange(integrationID, 'ScheduleType', type);\n }\n\n SetInterval(integrationID: string, minutes: number): void {\n this.setPendingChange(integrationID, 'ScheduleIntervalMinutes', minutes);\n this.setPendingChange(integrationID, 'ScheduleType', 'Interval');\n }\n\n SetCronExpression(integrationID: string, expression: string): void {\n this.setPendingChange(integrationID, 'CronExpression', expression);\n }\n\n OnCronInputChange(integrationID: string, event: Event): void {\n const input = event.target as HTMLInputElement;\n this.SetCronExpression(integrationID, input.value);\n }\n\n SetCustomInterval(integrationID: string, event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = parseInt(input.value, 10);\n if (!isNaN(value) && value > 0) {\n this.SetInterval(integrationID, value);\n }\n }\n\n HasChanges(integrationID: string): boolean {\n return this.PendingChanges.has(integrationID);\n }\n\n // ---------------------------------------------------------------------------\n // Save & Run\n // ---------------------------------------------------------------------------\n\n async SaveSchedule(integrationID: string): Promise<void> {\n const changes = this.PendingChanges.get(integrationID);\n if (!changes) return;\n\n this.SavingID = integrationID;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const entity = await md.GetEntityObject<MJCompanyIntegrationEntity>('MJ: Company Integrations');\n await entity.Load(integrationID);\n\n // Use Set() method since scheduling fields are not in the generated class yet\n if (changes.ScheduleEnabled !== undefined) entity.Set('ScheduleEnabled', changes.ScheduleEnabled);\n if (changes.ScheduleType !== undefined) entity.Set('ScheduleType', changes.ScheduleType);\n if (changes.ScheduleIntervalMinutes !== undefined) entity.Set('ScheduleIntervalMinutes', changes.ScheduleIntervalMinutes);\n if (changes.CronExpression !== undefined) entity.Set('CronExpression', changes.CronExpression);\n\n const saved = await entity.Save();\n if (saved) {\n this.PendingChanges.delete(integrationID);\n await this.LoadData();\n } else {\n console.error('[SchedulesComponent] Failed to save schedule:', entity.LatestResult?.CompleteMessage);\n }\n } catch (err) {\n console.error('[SchedulesComponent] Error saving schedule:', err);\n } finally {\n this.SavingID = null;\n this.cdr.detectChanges();\n }\n }\n\n async RunNow(integrationID: string): Promise<void> {\n if (this.RunningID) return;\n this.RunningID = integrationID;\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.RunSync(integrationID);\n if (!result.Success) {\n console.error('[SchedulesComponent] RunSync failed:', result.Message);\n }\n await this.LoadData();\n } catch (err) {\n console.error('[SchedulesComponent] RunNow error:', err);\n } finally {\n this.RunningID = null;\n this.cdr.detectChanges();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Template helpers\n // ---------------------------------------------------------------------------\n\n GetEffectiveScheduleEnabled(schedule: ScheduleRow): boolean {\n return this.getEffectiveValue(schedule.ID, 'ScheduleEnabled', schedule.ScheduleEnabled) as boolean;\n }\n\n GetEffectiveScheduleType(schedule: ScheduleRow): 'Manual' | 'Interval' | 'Cron' {\n return this.getEffectiveValue(schedule.ID, 'ScheduleType', schedule.ScheduleType) as 'Manual' | 'Interval' | 'Cron';\n }\n\n GetEffectiveInterval(schedule: ScheduleRow): number | null {\n return this.getEffectiveValue(schedule.ID, 'ScheduleIntervalMinutes', schedule.ScheduleIntervalMinutes) as number | null;\n }\n\n GetEffectiveCron(schedule: ScheduleRow): string | null {\n return this.getEffectiveValue(schedule.ID, 'CronExpression', schedule.CronExpression) as string | null;\n }\n\n IsIntervalSelected(schedule: ScheduleRow, minutes: number): boolean {\n return this.GetEffectiveInterval(schedule) === minutes;\n }\n\n GetNextRunRelative(schedule: ScheduleRow): string {\n if (!schedule.NextScheduledRunAt) return 'Not scheduled';\n const next = new Date(schedule.NextScheduledRunAt);\n const diffMs = next.getTime() - Date.now();\n if (diffMs < 0) return 'Overdue';\n return 'in ' + this.formatDurationMs(diffMs);\n }\n\n GetLastRunRelative(schedule: ScheduleRow): string {\n if (!schedule.LastScheduledRunAt) return 'Never';\n return this.dataService.ComputeRelativeTime(schedule.LastScheduledRunAt);\n }\n\n GetCronDescription(expression: string | null): string {\n if (!expression) return '';\n const parts = expression.split(' ');\n if (parts.length !== 5) return expression;\n const [min, hour, , , dow] = parts;\n if (min === '0' && hour === '*') return 'Every hour';\n if (min === '0' && hour.startsWith('*/')) return `Every ${hour.slice(2)} hours`;\n if (min === '0' && hour !== '*' && dow === '*') return `Daily at ${hour}:00`;\n if (min === '0' && hour !== '*' && dow === '1-5') return `Weekdays at ${hour}:00`;\n if (dow === '1-5') return `Weekdays at ${hour}:${min.padStart(2, '0')}`;\n return expression;\n }\n\n GetIntegrationIcon(name: string): string {\n return ResolveIntegrationIcon(name);\n }\n\n ComputeTimelinePosition(hour: number, minute: number): number {\n return ((hour * 60 + minute) / (24 * 60)) * 100;\n }\n\n IsSaving(integrationID: string): boolean {\n return UUIDsEqual(this.SavingID, integrationID);\n }\n\n IsRunning(integrationID: string): boolean {\n return UUIDsEqual(this.RunningID, integrationID);\n }\n\n get ScheduledCount(): number {\n return this.Schedules.filter(s => s.ScheduleEnabled).length;\n }\n\n get LockedCount(): number {\n return this.Schedules.filter(s => s.IsLocked).length;\n }\n\n TrackByID(_index: number, item: ScheduleRow): string {\n return item.ID;\n }\n\n TrackTimelineByID(_index: number, item: TimelineRow): string {\n return item.IntegrationID;\n }\n\n TrackPresetByMinutes(_index: number, item: IntervalPreset): number {\n return item.Minutes;\n }\n\n TrackCronPresetByExpr(_index: number, item: CronPreset): string {\n return item.Expression;\n }\n\n TrackHour(_index: number, hour: number): number {\n return hour;\n }\n\n TrackMarker(index: number, _item: TimelineMarker): number {\n return index;\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n private findSchedule(integrationID: string): ScheduleRow | undefined {\n return this.Schedules.find(s => UUIDsEqual(s.ID, integrationID));\n }\n\n private getEffectiveValue<K extends keyof ScheduleRow>(\n integrationID: string,\n field: K,\n originalValue: ScheduleRow[K]\n ): ScheduleRow[K] {\n const changes = this.PendingChanges.get(integrationID);\n if (changes && field in changes) {\n return changes[field] as ScheduleRow[K];\n }\n return originalValue;\n }\n\n private setPendingChange<K extends keyof ScheduleRow>(\n integrationID: string,\n field: K,\n value: ScheduleRow[K]\n ): void {\n const existing = this.PendingChanges.get(integrationID) ?? {};\n existing[field] = value;\n this.PendingChanges.set(integrationID, existing);\n this.cdr.detectChanges();\n }\n\n private buildTimelineHours(): void {\n this.TimelineHours = Array.from({ length: 24 }, (_, i) => i);\n }\n\n private computeMarkersForSchedule(schedule: ScheduleRow, now: Date): TimelineMarker[] {\n const markers: TimelineMarker[] = [];\n const type = schedule.ScheduleType;\n\n if (type === 'Interval' && schedule.ScheduleIntervalMinutes && schedule.ScheduleIntervalMinutes > 0) {\n this.computeIntervalMarkers(schedule, now, markers);\n } else if (type === 'Cron' && schedule.CronExpression) {\n this.computeCronMarkers(schedule, now, markers);\n } else if (schedule.NextScheduledRunAt) {\n this.addNextRunMarker(schedule, now, markers);\n }\n\n return markers;\n }\n\n private computeIntervalMarkers(schedule: ScheduleRow, now: Date, markers: TimelineMarker[]): void {\n const intervalMs = schedule.ScheduleIntervalMinutes! * 60_000;\n const endTime = now.getTime() + 24 * 60 * 60_000;\n\n // Start from the next scheduled run or from now\n let cursor = schedule.NextScheduledRunAt\n ? new Date(schedule.NextScheduledRunAt).getTime()\n : now.getTime();\n\n // If cursor is in the past, advance to the next future occurrence\n while (cursor < now.getTime()) {\n cursor += intervalMs;\n }\n\n const nextRun = cursor;\n\n while (cursor < endTime) {\n const d = new Date(cursor);\n markers.push({\n Hour: d.getHours(),\n Minute: d.getMinutes(),\n IsNext: cursor === nextRun\n });\n cursor += intervalMs;\n }\n }\n\n private computeCronMarkers(schedule: ScheduleRow, now: Date, markers: TimelineMarker[]): void {\n // Simple cron approximation for timeline display\n const times = this.approximateCronTimes(schedule.CronExpression!);\n const nextRunTime = schedule.NextScheduledRunAt ? new Date(schedule.NextScheduledRunAt) : null;\n\n for (const time of times) {\n const isNext = nextRunTime != null\n && time.Hour === nextRunTime.getHours()\n && time.Minute === nextRunTime.getMinutes();\n markers.push({ Hour: time.Hour, Minute: time.Minute, IsNext: isNext });\n }\n }\n\n private addNextRunMarker(schedule: ScheduleRow, now: Date, markers: TimelineMarker[]): void {\n const next = new Date(schedule.NextScheduledRunAt!);\n const diffMs = next.getTime() - now.getTime();\n if (diffMs >= 0 && diffMs <= 24 * 60 * 60_000) {\n markers.push({ Hour: next.getHours(), Minute: next.getMinutes(), IsNext: true });\n }\n }\n\n /**\n * Approximate cron schedule times within a 24-hour window.\n * Handles common patterns only -- not a full cron parser.\n */\n private approximateCronTimes(expression: string): Array<{ Hour: number; Minute: number }> {\n const parts = expression.split(' ');\n if (parts.length !== 5) return [];\n const [minPart, hourPart] = parts;\n const minute = minPart === '*' ? 0 : parseInt(minPart, 10);\n const times: Array<{ Hour: number; Minute: number }> = [];\n\n if (hourPart === '*') {\n // Every hour\n for (let h = 0; h < 24; h++) {\n times.push({ Hour: h, Minute: isNaN(minute) ? 0 : minute });\n }\n } else if (hourPart.startsWith('*/')) {\n const step = parseInt(hourPart.slice(2), 10);\n if (!isNaN(step) && step > 0) {\n for (let h = 0; h < 24; h += step) {\n times.push({ Hour: h, Minute: isNaN(minute) ? 0 : minute });\n }\n }\n } else {\n // Specific hour(s) — comma-separated\n const hours = hourPart.split(',').map(h => parseInt(h.trim(), 10)).filter(h => !isNaN(h));\n for (const h of hours) {\n times.push({ Hour: h, Minute: isNaN(minute) ? 0 : minute });\n }\n }\n\n return times;\n }\n\n private formatDurationMs(ms: number): string {\n const totalMinutes = Math.floor(ms / 60_000);\n if (totalMinutes < 1) return 'less than a minute';\n if (totalMinutes < 60) return `${totalMinutes} minute${totalMinutes === 1 ? '' : 's'}`;\n const hours = Math.floor(totalMinutes / 60);\n const minutes = totalMinutes % 60;\n if (minutes === 0) return `${hours} hour${hours === 1 ? '' : 's'}`;\n return `${hours}h ${minutes}m`;\n }\n}\n\nexport function LoadSchedulesComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<!-- Loading state -->\n@if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading schedules...\"></mj-loading>\n </div>\n} @else {\n <div class=\"schedules-root\">\n\n <!-- ================================================================= -->\n <!-- HEADER -->\n <!-- ================================================================= -->\n <div class=\"section-header\">\n <div class=\"header-left\">\n <h2 class=\"section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n Sync Schedules\n </h2>\n <span class=\"header-meta\">{{ Schedules.length }} integration{{ Schedules.length === 1 ? '' : 's' }}</span>\n <span class=\"header-meta\">{{ ScheduledCount }} scheduled</span>\n @if (LockedCount > 0) {\n <span class=\"header-meta running-badge\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n {{ LockedCount }} running\n </span>\n }\n </div>\n <button class=\"btn btn-outline\" (click)=\"LoadData()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Refresh\n </button>\n </div>\n\n <!-- ================================================================= -->\n <!-- TIMELINE (24-hour visual) -->\n <!-- ================================================================= -->\n @if (TimelineMarkers.length > 0) {\n <div class=\"timeline-section\">\n <div class=\"timeline-title\">\n <i class=\"fa-regular fa-clock\"></i>\n Next 24 Hours\n </div>\n <div class=\"timeline-container\">\n <!-- Hour grid labels -->\n <div class=\"timeline-grid-labels\">\n <div class=\"timeline-label-spacer\"></div>\n <div class=\"timeline-grid-track\">\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <span class=\"timeline-hour-label\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n {{ hour }}:00\n </span>\n }\n }\n </div>\n </div>\n\n <!-- Integration rows -->\n @for (row of TimelineMarkers; track TrackTimelineByID($index, row)) {\n <div class=\"timeline-row\">\n <div class=\"timeline-row-label\" [title]=\"row.IntegrationName\">\n {{ row.IntegrationName }}\n </div>\n <div class=\"timeline-track-container\">\n <!-- Hour grid lines -->\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <div class=\"timeline-grid-line\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n </div>\n }\n }\n\n <!-- Track bar -->\n <div class=\"timeline-track\"></div>\n\n <!-- Markers -->\n @for (marker of row.Markers; track TrackMarker($index, marker)) {\n <div class=\"timeline-marker\"\n [class.timeline-marker-next]=\"marker.IsNext\"\n [style.left.%]=\"ComputeTimelinePosition(marker.Hour, marker.Minute)\"\n [title]=\"marker.Hour + ':' + ('' + marker.Minute).padStart(2, '0')\">\n </div>\n }\n\n <!-- Locked indicator -->\n @if (row.IsLocked) {\n <div class=\"timeline-locked-indicator\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n }\n\n <!-- Current time line -->\n <div class=\"timeline-now-line\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ================================================================= -->\n <!-- SCHEDULE CARDS -->\n <!-- ================================================================= -->\n <div class=\"cards-section\">\n @for (schedule of Schedules; track TrackByID($index, schedule)) {\n <div class=\"schedule-card\" [class.schedule-card-disabled]=\"!schedule.IsActive\">\n\n <!-- LEFT: Icon + Info -->\n <div class=\"card-info\">\n <div class=\"card-icon\">\n <i [class]=\"GetIntegrationIcon(schedule.Integration || schedule.Name)\"></i>\n </div>\n <div class=\"card-details\">\n <div class=\"card-name\">{{ schedule.Integration || schedule.Name }}</div>\n <div class=\"card-company\">{{ schedule.Company }}</div>\n <div class=\"card-badges\">\n @if (schedule.IsActive) {\n <span class=\"badge badge-success\">Active</span>\n } @else {\n <span class=\"badge badge-gray\">Inactive</span>\n }\n @if (schedule.IsLocked) {\n <span class=\"badge badge-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- CENTER: Schedule Configuration -->\n <div class=\"card-config\">\n <!-- Schedule toggle -->\n <div class=\"config-row\">\n <label class=\"toggle-label\">\n Auto-sync\n <button class=\"toggle-switch\"\n [class.toggle-on]=\"GetEffectiveScheduleEnabled(schedule)\"\n (click)=\"ToggleScheduleEnabled(schedule.ID)\"\n [attr.aria-checked]=\"GetEffectiveScheduleEnabled(schedule)\"\n role=\"switch\">\n <span class=\"toggle-knob\"></span>\n </button>\n </label>\n </div>\n\n @if (GetEffectiveScheduleEnabled(schedule)) {\n <!-- Schedule type pills -->\n <div class=\"config-row\">\n <div class=\"type-pills\">\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Manual'\"\n (click)=\"SetScheduleType(schedule.ID, 'Manual')\">\n Manual\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Interval'\"\n (click)=\"SetScheduleType(schedule.ID, 'Interval')\">\n Interval\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Cron'\"\n (click)=\"SetScheduleType(schedule.ID, 'Cron')\">\n Cron\n </button>\n </div>\n </div>\n\n <!-- Interval config -->\n @if (GetEffectiveScheduleType(schedule) === 'Interval') {\n <div class=\"config-row\">\n <div class=\"interval-presets\">\n @for (preset of IntervalPresets; track TrackPresetByMinutes($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"IsIntervalSelected(schedule, preset.Minutes)\"\n (click)=\"SetInterval(schedule.ID, preset.Minutes)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"custom-interval\">\n <input type=\"number\"\n class=\"interval-input\"\n placeholder=\"Custom min\"\n min=\"1\"\n [value]=\"GetEffectiveInterval(schedule)\"\n (change)=\"SetCustomInterval(schedule.ID, $event)\" />\n <span class=\"interval-unit\">min</span>\n </div>\n </div>\n }\n\n <!-- Cron config -->\n @if (GetEffectiveScheduleType(schedule) === 'Cron') {\n <div class=\"config-row\">\n <div class=\"cron-presets\">\n @for (preset of CronPresets; track TrackCronPresetByExpr($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"GetEffectiveCron(schedule) === preset.Expression\"\n (click)=\"SetCronExpression(schedule.ID, preset.Expression)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"cron-input-row\">\n <input type=\"text\"\n class=\"cron-input\"\n placeholder=\"* * * * *\"\n [value]=\"GetEffectiveCron(schedule) ?? ''\"\n (change)=\"OnCronInputChange(schedule.ID, $event)\" />\n @if (GetEffectiveCron(schedule)) {\n <span class=\"cron-description\">\n {{ GetCronDescription(GetEffectiveCron(schedule)) }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- RIGHT: Status + Actions -->\n <div class=\"card-status\">\n <div class=\"status-items\">\n <div class=\"status-item\">\n <span class=\"status-label\">Next run</span>\n <span class=\"status-value\">{{ GetNextRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Last run</span>\n <span class=\"status-value\">{{ GetLastRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Status</span>\n @if (schedule.IsLocked) {\n <span class=\"status-value status-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n } @else {\n <span class=\"status-value status-idle\">Idle</span>\n }\n </div>\n </div>\n\n <div class=\"card-actions\">\n @if (HasChanges(schedule.ID)) {\n <button class=\"btn btn-primary btn-save\"\n [disabled]=\"IsSaving(schedule.ID)\"\n (click)=\"SaveSchedule(schedule.ID)\">\n @if (IsSaving(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Save\n }\n </button>\n }\n <button class=\"btn btn-outline btn-run\"\n [disabled]=\"IsRunning(schedule.ID) || schedule.IsLocked\"\n (click)=\"RunNow(schedule.ID)\">\n @if (IsRunning(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Run Now\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n @if (Schedules.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <p>No integrations found</p>\n </div>\n }\n </div>\n </div>\n}\n"]}
@@ -0,0 +1,141 @@
1
+ import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { EntityMapRow } from '../../services/integration-data.service';
3
+ import { IRunViewProvider } from '@memberjunction/core';
4
+ import * as i0 from "@angular/core";
5
+ type TransformType = 'direct' | 'regex' | 'split' | 'combine' | 'lookup' | 'format' | 'coerce' | 'substring' | 'custom';
6
+ interface TransformStepUI {
7
+ Type: TransformType;
8
+ Config: Record<string, unknown>;
9
+ OnError: 'Skip' | 'Null' | 'Fail';
10
+ }
11
+ interface VisualSourceField {
12
+ Name: string;
13
+ Label: string;
14
+ Type: string;
15
+ IsRequired: boolean;
16
+ IsPrimaryKey: boolean;
17
+ }
18
+ interface VisualDestField {
19
+ Name: string;
20
+ Type: string;
21
+ IsRequired: boolean;
22
+ }
23
+ interface VisualConnection {
24
+ ID: string | null;
25
+ SourceFieldName: string;
26
+ DestFieldName: string;
27
+ IsKeyField: boolean;
28
+ IsRequired: boolean;
29
+ Direction: 'SourceToDest' | 'DestToSource' | 'Both';
30
+ TransformSteps: TransformStepUI[];
31
+ IsDirty: boolean;
32
+ IsNew: boolean;
33
+ MarkedForDelete: boolean;
34
+ }
35
+ export declare class VisualFieldEditorComponent implements OnChanges {
36
+ EntityMap: EntityMapRow | null;
37
+ CompanyIntegrationID: string | null;
38
+ RunViewProvider: IRunViewProvider | null;
39
+ Close: EventEmitter<void>;
40
+ EditorSourceFields: VisualSourceField[];
41
+ EditorDestFields: VisualDestField[];
42
+ EditorConnections: VisualConnection[];
43
+ EditorLoading: boolean;
44
+ EditorSaving: boolean;
45
+ EditorSaveSuccess: boolean;
46
+ SelectedConnectionIdx: number | null;
47
+ ConnectingFromSource: string | null;
48
+ EditorSearchSource: string;
49
+ EditorSearchDest: string;
50
+ ShowSourcePreview: boolean;
51
+ ShowDestPreview: boolean;
52
+ PreviewSourceLoading: boolean;
53
+ PreviewDestLoading: boolean;
54
+ PreviewSourceRows: Array<Record<string, string | number | boolean | null>>;
55
+ PreviewDestRows: Array<Record<string, string | number | boolean | null>>;
56
+ PreviewSourceColumns: string[];
57
+ PreviewDestColumns: string[];
58
+ FieldMapsExpanded: boolean;
59
+ InfoPanelExpanded: boolean;
60
+ InfoPanelLoading: boolean;
61
+ InfoDestRecordCount: number | null;
62
+ InfoLastSync: {
63
+ StartedAt: string | null;
64
+ EndedAt: string | null;
65
+ Status: string;
66
+ TotalRecords: number;
67
+ } | null;
68
+ readonly FIELD_HEIGHT = 40;
69
+ readonly SVG_WIDTH = 200;
70
+ readonly TRANSFORM_TYPES: Array<{
71
+ Value: TransformType;
72
+ Label: string;
73
+ Icon: string;
74
+ }>;
75
+ private dataService;
76
+ private cdr;
77
+ ngOnChanges(changes: SimpleChanges): void;
78
+ private openEditor;
79
+ OnClose(): void;
80
+ OnToggleEditorSyncEnabled(event: Event): Promise<void>;
81
+ LoadVisualEditorData(): Promise<void>;
82
+ get FilteredEditorSourceFields(): VisualSourceField[];
83
+ get FilteredEditorDestFields(): VisualDestField[];
84
+ get VisibleConnections(): VisualConnection[];
85
+ get EditorCanvasHeight(): number;
86
+ GetConnectionPath(conn: VisualConnection): string;
87
+ GetConnectionMidY(conn: VisualConnection): number;
88
+ GetConnectionLineClass(conn: VisualConnection): string;
89
+ GetConnectionBadgeClass(conn: VisualConnection): string;
90
+ GetConnectionTransformIcon(conn: VisualConnection): string;
91
+ GetConnectionDirectionIcon(conn: VisualConnection): string;
92
+ GetTransformTypeLabel(type: TransformType): string;
93
+ IsSourceFieldMapped(fieldName: string): boolean;
94
+ IsDestFieldMapped(fieldName: string): boolean;
95
+ OnEditorSourceClick(fieldName: string): void;
96
+ OnEditorDestClick(fieldName: string): void;
97
+ CancelConnect(): void;
98
+ SelectConnection(index: number, event: Event): void;
99
+ DeselectConnection(): void;
100
+ get SelectedConnection(): VisualConnection | null;
101
+ RemoveSelectedConnection(): void;
102
+ ToggleConnectionKey(): void;
103
+ ToggleConnectionRequired(): void;
104
+ GetDirectionArrowClass(direction: string): string;
105
+ OnConnectionDirectionChange(direction: 'SourceToDest' | 'DestToSource' | 'Both'): void;
106
+ OnConnectionTransformChange(stepIndex: number, type: TransformType): void;
107
+ OnTransformConfigChange(conn: VisualConnection, stepIndex: number, key: string, value: string): void;
108
+ AddTransformStep(): void;
109
+ RemoveTransformStep(stepIndex: number): void;
110
+ ToggleSourcePreview(): Promise<void>;
111
+ ToggleDestPreview(): Promise<void>;
112
+ private loadSourcePreview;
113
+ private loadDestPreview;
114
+ ToggleFieldMaps(): void;
115
+ ToggleInfoPanel(): void;
116
+ private loadInfoPanelData;
117
+ FormatSyncDate(dateStr: string | null): string;
118
+ SyncStatusClass(status: string): string;
119
+ get HasEditorChanges(): boolean;
120
+ SaveVisualEditor(): Promise<void>;
121
+ AutoMapEditorFields(): Promise<void>;
122
+ get EditorMappedCount(): number;
123
+ get EditorKeyFieldCount(): number;
124
+ get EditorRequiredCount(): number;
125
+ GetConfigKeys(step: TransformStepUI): string[];
126
+ GetConfigValue(step: TransformStepUI, key: string): string;
127
+ private getSourceFieldIndex;
128
+ private getDestFieldIndex;
129
+ private getSourceFieldY;
130
+ private getDestFieldY;
131
+ private getPrimaryTransformType;
132
+ private parseTransformPipeline;
133
+ private serializeTransformPipeline;
134
+ private getDefaultConfigForType;
135
+ private resolveSourceFieldsFromMetadata;
136
+ static ɵfac: i0.ɵɵFactoryDeclaration<VisualFieldEditorComponent, never>;
137
+ static ɵcmp: i0.ɵɵComponentDeclaration<VisualFieldEditorComponent, "app-visual-field-editor", never, { "EntityMap": { "alias": "EntityMap"; "required": false; }; "CompanyIntegrationID": { "alias": "CompanyIntegrationID"; "required": false; }; "RunViewProvider": { "alias": "RunViewProvider"; "required": false; }; }, { "Close": "Close"; }, never, never, false, never>;
138
+ }
139
+ export declare function LoadVisualFieldEditorComponent(): void;
140
+ export {};
141
+ //# sourceMappingURL=visual-editor.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-editor.component.d.ts","sourceRoot":"","sources":["../../../../src/Integration/components/visual-editor/visual-editor.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,YAAY,EAAS,SAAS,EAAU,aAAa,EAAU,MAAM,eAAe,CAAC;AAE5H,OAAO,EAEL,YAAY,EAEb,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;;AAMxD,KAAK,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExH,UAAU,eAAe;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC;IACpD,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,qBAMa,0BAA2B,YAAW,SAAS;IAMjD,SAAS,EAAE,YAAY,GAAG,IAAI,CAAQ;IACtC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3C,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC/C,KAAK,qBAA4B;IAM3C,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAC7C,gBAAgB,EAAE,eAAe,EAAE,CAAM;IACzC,iBAAiB,EAAE,gBAAgB,EAAE,CAAM;IAC3C,aAAa,UAAS;IACtB,YAAY,UAAS;IACrB,iBAAiB,UAAS;IAE1B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C,kBAAkB,SAAM;IACxB,gBAAgB,SAAM;IAEtB,iBAAiB,UAAS;IAC1B,eAAe,UAAS;IACxB,oBAAoB,UAAS;IAC7B,kBAAkB,UAAS;IAC3B,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAM;IAChF,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAM;IAC9E,oBAAoB,EAAE,MAAM,EAAE,CAAM;IACpC,kBAAkB,EAAE,MAAM,EAAE,CAAM;IAElC,iBAAiB,UAAQ;IACzB,iBAAiB,UAAS;IAE1B,gBAAgB,UAAS;IACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1C,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAQ;IAEvH,QAAQ,CAAC,YAAY,MAAM;IAC3B,QAAQ,CAAC,SAAS,OAAO;IAEzB,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAUpF;IAEF,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,GAAG,CAA6B;IAMxC,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAUzC,OAAO,CAAC,UAAU;IAoBlB,OAAO,IAAI,IAAI;IAQT,yBAAyB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBtD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgE3C,IAAI,0BAA0B,IAAI,iBAAiB,EAAE,CAMpD;IAED,IAAI,wBAAwB,IAAI,eAAe,EAAE,CAIhD;IAED,IAAI,kBAAkB,IAAI,gBAAgB,EAAE,CAM3C;IAMD,IAAI,kBAAkB,IAAI,MAAM,CAI/B;IAED,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IASjD,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAMjD,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAItD,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAIvD,0BAA0B,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAK1D,0BAA0B,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAQ1D,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAQlD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQ7C,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAW5C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA8B1C,aAAa,IAAI,IAAI;IASrB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAOnD,kBAAkB,IAAI,IAAI;IAK1B,IAAI,kBAAkB,IAAI,gBAAgB,GAAG,IAAI,CAGhD;IAED,wBAAwB,IAAI,IAAI;IAahC,mBAAmB,IAAI,IAAI;IAQ3B,wBAAwB,IAAI,IAAI;IAQhC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAQjD,2BAA2B,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,GAAG,MAAM,GAAG,IAAI;IAQtF,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IASzE,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMpG,gBAAgB,IAAI,IAAI;IAQxB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYtC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;YAQ1B,iBAAiB;YAsBjB,eAAe;IA0B7B,eAAe,IAAI,IAAI;IAKvB,eAAe,IAAI,IAAI;YAQT,iBAAiB;IAuB/B,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAe9C,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAavC,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAEK,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CjC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC1C,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,EAAE;IAI9C,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAW1D,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,+BAA+B;yCA/sB5B,0BAA0B;2CAA1B,0BAA0B;CAouBtC;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}