@memberjunction/ng-dashboards 5.47.0 → 5.49.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/DataExplorer/data-explorer-dashboard.component.d.ts +15 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +45 -35
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +7 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +2 -2
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +4 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +39 -30
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +14 -12
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +6 -1
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +11 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +56 -14
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +7 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +11 -4
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +35 -25
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts +5 -0
- package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.js +8 -2
- package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
- package/dist/ThemeStudio/theme-agent-context.d.ts +64 -0
- package/dist/ThemeStudio/theme-agent-context.d.ts.map +1 -0
- package/dist/ThemeStudio/theme-agent-context.js +129 -0
- package/dist/ThemeStudio/theme-agent-context.js.map +1 -0
- package/dist/ThemeStudio/theme-manager-dashboard.component.d.ts +62 -0
- package/dist/ThemeStudio/theme-manager-dashboard.component.d.ts.map +1 -0
- package/dist/ThemeStudio/theme-manager-dashboard.component.js +464 -0
- package/dist/ThemeStudio/theme-manager-dashboard.component.js.map +1 -0
- package/dist/ThemeStudio/theme-manager-resource.component.d.ts +31 -0
- package/dist/ThemeStudio/theme-manager-resource.component.d.ts.map +1 -0
- package/dist/ThemeStudio/theme-manager-resource.component.js +97 -0
- package/dist/ThemeStudio/theme-manager-resource.component.js.map +1 -0
- package/dist/ThemeStudio/theme-studio-dashboard.component.d.ts +351 -0
- package/dist/ThemeStudio/theme-studio-dashboard.component.d.ts.map +1 -0
- package/dist/ThemeStudio/theme-studio-dashboard.component.js +2931 -0
- package/dist/ThemeStudio/theme-studio-dashboard.component.js.map +1 -0
- package/dist/ThemeStudio/theme-studio-resource.component.d.ts +28 -0
- package/dist/ThemeStudio/theme-studio-resource.component.d.ts.map +1 -0
- package/dist/ThemeStudio/theme-studio-resource.component.js +96 -0
- package/dist/ThemeStudio/theme-studio-resource.component.js.map +1 -0
- package/dist/ThemeStudio/theme-studio.constants.d.ts +79 -0
- package/dist/ThemeStudio/theme-studio.constants.d.ts.map +1 -0
- package/dist/ThemeStudio/theme-studio.constants.js +217 -0
- package/dist/ThemeStudio/theme-studio.constants.js.map +1 -0
- package/dist/core-dashboards.module.d.ts +56 -52
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +24 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +4 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +63 -60
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-studio-dashboard.component.js","sourceRoot":"","sources":["../../src/ThemeStudio/theme-studio-dashboard.component.ts","../../src/ThemeStudio/theme-studio-dashboard.component.html"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAGL,SAAS,EAET,YAAY,EAEZ,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,cAAc,EAAuC,MAAM,0BAA0B,CAAC;AAE/F,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAgB,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAA+B,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAEL,MAAM,EAEN,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EAEb,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;;;;;;;;;;;;;;;;;;;IC7ClG,oCAEgD;IAFX,2TAAyB;IACY,AAAlC,AAAjC,gNAAiB,qBAAc,KAAC,qMAAmB,qBAAc,KAAC,iLAAS,qBAAc,KAAC;IADjG,iBAEgD;;;IAFX,kDAAyB;;;;IAM5D,kCAAgH;IAAxB,iNAAS,oBAAa,KAAC;IAC7G,wBAA+B;IACjC,iBAAS;;;;IAJX,6BAAiD;IAA3B,mMAAY,oBAAa,KAAC;IAAC,YAAiB;IAAA,iBAAI;IACtE,kHAA0B;;;IADuB,cAAiB;IAAjB,wCAAiB;IAClE,cAIC;IAJD,oDAIC;;;IAEsB,gCAAoB;IAAA,uBAAO;IAAA,iBAAO;;;IAYZ,oBAA8B;;;IAA3B,kCAAsB;;;IAG9C,gCAAoB;IAAA,uBAAO;IAAA,iBAAO;;;;IALxD,kCAAyG;IAAzB,gOAAS,wBAAc,KAAC;IACtG,+BAAiB;IACf,mIAAuE;IACzE,iBAAO;IACP,yBAAG;IAAA,YAAY;IAAA,iBAAI;IACnB,sHAAmB;IACrB,iBAAS;;;;IANqC,oDAAiC;IAE3E,eAAuE;IAAvE,4BAAuE;IAEtE,eAAY;IAAZ,+BAAY;IACf,cAAwD;IAAxD,yCAAwD;;;;IAR9D,+BAA6D;IAAlC,wNAA2B,KAAK,KAAC;IAAC,iBAAM;IACnE,+BAAwB;IACtB,mHAQC;IACD,kCAAkE;IAArB,kMAAS,iBAAU,KAAC;IAAC,wBAAgC;IAAC,0BAAS;IAC9G,AAD8G,iBAAS,EACjH;;;IAVJ,eAQC;IARD,4BAQC;;;IAML,gCAA4B;IAAA,wBAAgC;IAAC,0CAAoB;IAAA,iBAAO;;;IAGxF,gCAA2B;IAAA,wBAA+B;IAAC,mDAAkC;IAAA,iBAAO;;;;IAapG,kCAAoE;IAAvB,mMAAS,mBAAY,KAAC;IAAC,4BAAY;IAAA,iBAAS;;;;IAEzF,mCAAkF;IAAjB,mMAAS,aAAM,KAAC;IAAC,YAAuC;IAAA,iBAAS;;;IAArF,wCAAmB;IAAkB,cAAuC;IAAvC,mEAAuC;;;;IAkCnH,mCAAiE;IAA1B,kOAAS,0BAAe,KAAC;IAC9D,iCAAsE;IACpE,4BAAuE;IACvE,iCAA4B;IAE1B,AADA,4BAA8B,gBACM;IACpC,iCAA2B;IAGzB,AADA,AADA,4BAAoF,gBACoB,gBAEtC;IAGxE,AADE,AADE,iBAAO,EACF,EACF;IACP,0BAAG;IAAA,aAAY;IACjB,AADiB,iBAAI,EACZ;;;IAdgB,cAA8C;IAA9C,8DAA8C;IACxC,cAAoC;IAApC,iDAAoC;IAKrC,eAAsD;IAAtD,uEAAsD;IACtD,cAA0E;IAA1E,+FAA0E;IAC1E,cAAoC;IACpD,AADgB,iDAAoC,sDACA;IAI7D,eAAY;IAAZ,gCAAY;;;;IApBvB,gCAAyD;IAA/B,gMAAS,2BAAoB,KAAC;IAAC,iBAAM;IAE7D,AADF,mCAAyG,SACnG;IAAA,iCAAiB;IAAA,iBAAK;IAC1B,8BAAmB;IAAA,kHAA6F;IAAA,iBAAI;IACpH,gCAAsB;IACpB,sHAiBC;IACH,iBAAM;IAEJ,AADF,iCAAsB,kBACqD;IAA/B,oMAAS,2BAAoB,KAAC;IAAC,0CAAyB;IAEtG,AADE,AADoG,iBAAS,EACvG,EACF;;;IAtBF,eAiBC;IAjBD,6BAiBC;;;;IAcG,AADF,+BAAoB,yBAEiC;IAAnC,yNAAa,2BAAoB,KAAC;IAAC,iBAAiB;IACpE,mCAAiF;IAAlC,mMAAS,wBAAiB,KAAK,CAAC,KAAC;IAAC,iCAAiB;IAAA,iCAAkB;IAAA,mBAAG;IACzH,AADgI,AAAP,iBAAO,EAAS,EACnI;;;IAHY,cAAuB;IAAC,AAAxB,4CAAuB,iCAA0B;;;;IAgBvD,8BAE0D;IAAvD,AADsB,AAAtB,yQAAqB,4QAA8B,+QACrB,uBAAuB,KAAC;IAAC,YAAU;IAAA,iBAAI;;;;;IAFrE,wDAA0B;IAE6B,cAAU;IAAV,8BAAU;;;;IAsBlE,8BAE0D;IAAvD,AADsB,AAAtB,0QAAqB,6QAA8B,gRACrB,uBAAuB,KAAC;IAAC,YAAO;IAAA,iBAAI;;;;;IAFlE,wDAA0B;;IAE6B,cAAO;IAAP,2BAAO;;;IAwFjE,8BAAoC;IAAA,8BAAc;IAAA,iBAAI;IACtD,8BAAoC;IAAA,0BAAU;IAAA,iBAAI;;;;IAzH5D,AADF,+BAAqB,eACG;IAAA,0HAA+F;IAAA,iBAAM;IAGvH,AADF,AADF,gCAAgB,eACQ,gBACI;IAAA,yBAA6C;IAAA,iBAAO;IAC5E,iCAAqB;IACnB,iIAIC;IACH,iBAAO;IACP,kCAAqC;IAAA,0BAA4C;IAAC,yCAAkB;IAAA,iBAAO;IAC3G,6BAA2B;IAC3B,kCAAiC;IAAA,mBAAE;IACrC,AADqC,iBAAO,EACtC;IAGF,AADF,AADF,iCAAmB,gBACM,iBACG;IAAA,0BAAiC;IAAA,iBAAO;IAE9D,AADF,4BAAK,gBACsB;IAAA,oCAAmB;IAAA,iBAAM;IAClD,iCAAuB;IAAA,yEAA8C;IACvE,AADuE,iBAAM,EACvE;IAEJ,AADF,iCAA2B,mBACE;IAAA,uBAAM;IAAA,iBAAS;IAC1C,oCAA2B;IAAA,2BAAU;IAEzC,AADE,AADuC,iBAAS,EAC1C,EACF;IAEJ,AADF,iCAAwB,iBACe;IACnC,mIAIC;IAGP,AADE,AADE,iBAAO,EACH,EACF;IAGF,AADF,AADF,iCAAqB,gBACO,iBACH;IAAA,sFAAiD;IAAA,iBAAO;IAE3E,AADF,iCAAoB,mBACS;IAAA,qBAAI;IAAA,iBAAS;IACxC,oCAA2B;IAAA,uBAAM;IAAA,iBAAS;IAC1C,oCAA2B;IAAA,0BAAS;IAAA,iBAAS;IAC7C,oCAA2B;IAAA,uBAAM;IAErC,AADE,AADmC,iBAAS,EACtC,EACF;IAEJ,AADF,iCAA0B,iBACH;IAAA,kGAAwD;IAAA,iBAAO;IAElF,AADF,iCAA+B,mBACF;IAAA,qBAAI;IAAA,iBAAS;IACxC,oCAAoC;IAAA,sBAAK;IAAA,iBAAS;IAClD,oCAAqC;IAAA,uBAAM;IAAA,iBAAS;IACpD,oCAAoC;IAAA,sBAAK;IAAA,iBAAS;IAClD,oCAAoC;IAAA,yBAAQ;IAC9C,AAD8C,iBAAS,EACjD;IAEJ,AADF,iCAA+B,mBACF;IAAA,qBAAI;IAAA,iBAAS;IACxC,oCAAoC;IAAA,sBAAK;IAAA,iBAAS;IAClD,oCAAqC;IAAA,uBAAM;IAAA,iBAAS;IACpD,oCAAoC;IAAA,sBAAK;IAAA,iBAAS;IAClD,oCAAoC;IAAA,yBAAQ;IAC9C,AAD8C,iBAAS,EACjD;IAEJ,AADF,iCAA+B,mBACF;IAAA,qBAAI;IAAA,iBAAS;IACxC,oCAAoC;IAAA,sBAAK;IAAA,iBAAS;IAClD,oCAAqC;IAAA,uBAAM;IAAA,iBAAS;IACpD,oCAAoC;IAAA,sBAAK;IAAA,iBAAS;IAClD,oCAAoC;IAAA,yBAAQ;IAC9C,AAD8C,iBAAS,EACjD;IAEJ,AADF,iCAA+B,mBACF;IAAA,qBAAI;IAAA,iBAAS;IACxC,oCAAoC;IAAA,sBAAK;IAAA,iBAAS;IAClD,oCAAqC;IAAA,uBAAM;IAAA,iBAAS;IACpD,oCAAoC;IAAA,sBAAK;IAAA,iBAAS;IAClD,oCAAoC;IAAA,yBAAQ;IAEhD,AADE,AAD8C,iBAAS,EACjD,EACF;IAEJ,AADF,iCAA0B,iBACH;IAAA,6DAAkC;IAAA,iBAAO;IAE5D,AADF,iCAAoB,iBAC0B;IAAA,8BAAa;IAAA,iBAAO;IAChE,mCAAmD;IAAA,8BAAY;IAAA,2BAAwC;IACzG,AADyG,iBAAO,EAC1G;IAEJ,AADF,kCAAoB,kBAI0D;IAAtE,AADqC,AAArC,gPAAoC,mPAA6C,sPACpC,uBAAuB,KAAC;IAAC,iBAAO;IACnF,mCAG4E;IAAtE,AADqC,AAArC,gPAAoC,mPAA6C,sPACpC,uBAAuB,KAAC;IAAC,iBAAO;IACnF,mCAAqB;IAAA,4BAAU;IAEnC,AADE,AADiC,iBAAO,EAClC,EACF;IAEJ,AADF,kCAAqB,kBACE;IAAA,gCAAc;IAAA,iBAAO;IAExC,AADF,kCAAoB,kBACoB;IAAA,wBAAM;IAAA,iBAAO;IACnD,mCAAmC;IAAA,wBAAM;IAAA,iBAAO;IAChD,mCAAmC;IAAA,yBAAO;IAE9C,AADE,AAD4C,iBAAO,EAC7C,EACF;IAEJ,AADF,kCAAqB,kBACE;IAAA,sDAA+B;IAAA,iBAAO;IACvC,AAApB,kCAAoB,kBAA4B;IAAA,+BAAa;IAAA,iBAAO;IAAA,mCAA0B;IAAA,wBAAM;IAAA,iBAAO;IAAA,mCAA0B;IAAA,0BAAQ;IAAO,AAAP,iBAAO,EAAM;IACtI,AAApB,kCAAoB,kBAAsB;IAAA,sBAAO;IAAA,iBAAO;IAAA,mCAAqB;IAAA,qBAAG;IAClF,AADyF,AAAP,iBAAO,EAAM,EACzF;IAEJ,AADF,kCAAqB,kBACE;IAAA,iEAAqC;IAAA,iBAAO;IAE/D,AADF,kCAAqB,eACQ;IAAA,2BAAiC;IAAC,2BAAQ;IAAA,iBAAI;IACzE,gCAAgB;IAAA,2BAAiC;IAAC,0BAAO;IAAA,iBAAI;IAC7D,gCAEqF;IAAlF,AADiD,AAAjD,yPAAgD,4PAAyD,+PAChD,uBAAuB,KAAC;IAClF,2BAAkH;IAAC,2BACrH;IAAA,iBAAI;IACJ,wGAAyB;IAI3B,iBAAM;IACN,kCAAsB;IAAA,sBAAO;IAAA,+CAA6B;IAC5D,AAD4D,iBAAM,EAC5D;IAEJ,AADF,kCAAqB,kBACE;IAAA,oDAA6B;IAAA,iBAAO;IAEvD,AADF,kCAAoB,iBACI;IAAA,6BAAW;IAAA,iBAAM;IACjB,AAAtB,kCAAsB,kBAAgD;IAAA,qCAAmB;IAAO,AAAP,iBAAO,EAAM;IAChF,AAAtB,kCAAsB,oBAA2B;IAAA,sBAAI;IAAA,iBAAS;IAAA,qCAA2B;IAAA,wBAAM;IAKzG,AADE,AADE,AADE,AADE,AAD0G,AAAT,iBAAS,EAAM,EAC1G,EACF,EACF,EACF,EACF;;;IAnIE,eAIC;IAJD,kCAIC;IAoBC,gBAIC;IAJD,8BAIC;IAoDqB,gBAA0B;IAA1B,0CAA0B;;IAI1B,cAA0B;IAA1B,0CAA0B;;IAyBlB,gBAAwC;;IAGhD,cAA2C;IAAC,AAA5C,2DAA2C,+CAA8C;IAE/G,eAGC;IAHD,qDAGC;;;IAsCG,AADF,gCAAiB,gBACE;IAAA,YAAkB;IAAA,iBAAO;IAC1C,4BAAoG;IACtG,iBAAM;;;;;IAFa,eAAkB;IAAlB,uDAAkB;IAChB,cAAoB;IAAC,AAArB,oCAAoB,2EAAqD;;;IAKjE,4BAAM;IAAA,YAAO;IAAA,iBAAO;;;IAAd,cAAO;IAAP,2BAAO;;;IAvBlD,AADF,AADF,+BAAqB,eACC,eACC;IACjB,4BAA0B;IACrB,AAAL,2BAAK,eAAgB;IAAA,8BAAc;IAAA,iBAAM;IAAA,gCAAgB;IAAA,oCAAoB;IAAM,AAAN,iBAAM,EAAM;IACzF,gCAAgB;IAAA,0CAAoB;IACtC,AADsC,iBAAM,EACtC;IAGe,AAAjB,AADF,AADF,iCAAmB,gBACC,gBACC,gBAAe;IAAA,sBAAK;IAAA,iBAAM;IAAA,iCAAe;IAAA,+BAAc;IAAA,iBAAM;IAAA,iCAAkB;IAAA,6BAAO;IAAM,AAAN,iBAAM,EAAM;IAClG,AAAjB,iCAAiB,gBAAe;IAAA,oBAAG;IAAA,iBAAM;IAAA,iCAAe;IAAA,2BAAU;IAAA,iBAAM;IAAA,iCAAkB;IAAA,4BAAM;IAAM,AAAN,iBAAM,EAAM;IAC3F,AAAjB,iCAAiB,gBAAe;IAAA,oBAAG;IAAA,iBAAM;IAAA,iCAAe;IAAA,yBAAQ;IAAA,iBAAM;IAAA,iCAAkB;IAAA,4BAAM;IAChG,AADsG,AAAN,iBAAM,EAAM,EACtG;IAEJ,AADF,iCAAmB,gBACD;IAAA,kCAAiB;IAAA,iBAAM;IACvC,iCAAgB;IAAA,qDAAoC;IAAA,iBAAM;IAC1D,iCAAkB;IAChB,kIAKC;IACH,iBAAM;IACN,iCAAkB;IAChB,uIAAqD;IAEzD,AADE,iBAAM,EACF;IAEO,AAAJ,AAAP,AADF,mCAAoB,aACX,UAAI,UAAI;IAAA,wBAAO;IAAA,iBAAK;IAAA,2BAAI;IAAA,sBAAK;IAAA,iBAAK;IAAA,gCAAc;IAAA,sBAAK;IAAA,iBAAK;IAAA,gCAAc;IAAA,sBAAK;IAAU,AAAL,AAAL,iBAAK,EAAK,EAAQ;IAE5F,AAAJ,AAAJ,AADF,8BAAO,UACD,UAAI,SAAG;IAAA,kCAAiB;IAAI,AAAJ,iBAAI,EAAK;IAAA,2BAAI;IAAA,0BAAS;IAAA,iBAAK;IAAA,gCAAc;IAAA,yBAAQ;IAAA,iBAAK;IAAA,gCAAc;IAAA,uBAAM;IAAK,AAAL,iBAAK,EAAK;IACxG,AAAJ,AAAJ,2BAAI,UAAI,SAAG;IAAA,4BAAW;IAAI,AAAJ,iBAAI,EAAK;IAAA,2BAAI;IAAA,wBAAO;IAAA,iBAAK;IAAA,gCAAc;IAAA,yBAAQ;IAAA,iBAAK;IAAA,gCAAc;IAAA,uBAAM;IAAK,AAAL,iBAAK,EAAK;IAChG,AAAJ,AAAJ,2BAAI,UAAI,SAAG;IAAA,6BAAY;IAAI,AAAJ,iBAAI,EAAK;IAAA,2BAAI;IAAA,uBAAM;IAAA,iBAAK;IAAA,gCAAc;IAAA,2BAAU;IAAA,iBAAK;IAAA,gCAAc;IAAA,uBAAM;IAEpG,AADE,AADuG,AAAL,iBAAK,EAAK,EACpG,EACF;IACU,AAAlB,+BAAkB,SAAG;IAAA,yBAAQ;IAAA,iBAAI;IAAC,kKAC+C;IAAA,iBAAI;IAEnF,AADF,iCAAsB,gBACC;IAAA,6BAA0B;IAAM,AAAN,6BAAM,SAAG;IAAA,mCAAkB;IAAA,iBAAI;IAAC,yDAAkC;IAAA,iBAAO;IAAA,kCAA0B;IAAA,4BAAW;IAAO,AAAP,iBAAO,EAAM;IAC1K,kCAAqB;IAAA,8BAA0B;IAAM,AAAN,8BAAM,UAAG;IAAA,8BAAY;IAAA,iBAAI;IAAC,uDAA+B;IAAA,iBAAO;IAAA,mCAA4B;IAAA,uBAAK;IAAO,AAAP,iBAAO,EAAM;IAC7J,kCAAqB;IAAA,8BAA0B;IAAM,AAAN,8BAAM,UAAG;IAAA,mCAAiB;IAAA,iBAAI;IAAC,sDAA4B;IAAA,iBAAO;IAAA,mCAA0B;IAAA,yBAAO;IACpJ,AAD2J,AAAP,iBAAO,EAAM,EAC3J;IAEO,AAAJ,AAAP,AADF,oCAAoB,cACX,WAAI,WAAI;IAAA,wBAAM;IAAA,iBAAK;IAAA,4BAAI;IAAA,sBAAI;IAAA,iBAAK;IAAA,iCAAc;IAAA,4BAAU;IAAU,AAAL,AAAL,iBAAK,EAAK,EAAQ;IAEvE,AAAJ,AAAJ,AADF,+BAAO,WACD,WAAI,UAAG;IAAA,yCAAuB;IAAI,AAAJ,iBAAI,EAAK;IAAA,4BAAI;IAAA,yBAAO;IAAA,iBAAK;IAAA,iCAAc;IAAA,sBAAI;IAAK,AAAL,iBAAK,EAAK;IAC/E,AAAJ,AAAJ,4BAAI,WAAI,UAAG;IAAA,oCAAkB;IAAI,AAAJ,iBAAI,EAAK;IAAA,4BAAI;IAAA,yBAAO;IAAA,iBAAK;IAAA,iCAAc;IAAA,sBAAI;IAAK,AAAL,iBAAK,EAAK;IAC1E,AAAJ,AAAJ,4BAAI,WAAI,UAAG;IAAA,yCAAuB;IAAI,AAAJ,iBAAI,EAAK;IAAA,4BAAI;IAAA,0BAAQ;IAAA,iBAAK;IAAA,iCAAc;IAAA,wBAAM;IAGtF,AADE,AADE,AADuF,AAAL,iBAAK,EAAK,EACpF,EACF,EACJ;IACa,AAAnB,kCAAmB,aAAM;IAAA,cAAkB;IAAA,iBAAO;IAAA,8BAAyB;IAAA,8BAAM;IAAA,gCAAc;IAEnG,AADE,AADwG,AAAP,iBAAO,EAAM,EACxG,EACF;;;IArCI,gBAKC;IALD,gCAKC;IAGD,eAAqD;IAArD,6BAAqD;IA2BlC,iBAAkB;IAAlB,yCAAkB;;;;IA0B/C,mCAA+E;IAA1C,mNAAS,yBAAc,KAAC;IAC3D,+BAAiB;IAAuF,AAA3C,AAA5C,oBAA4C,QAA2C,QAA+D;IAAA,iBAAO;IAC9K,6BAAO;IAAA,YAAY;IACrB,AADqB,iBAAQ,EACpB;;;IAHqD,kCAAgB;IACxD,eAAoC;IAApC,iDAAoC;IAAQ,cAAmC;IAAnC,gDAAmC;IAAQ,cAAuD;IAAvD,wEAAuD;IAC3J,eAAY;IAAZ,gCAAY;;;IAwBqC,4BAAM;IAAC,YAAkC;IAAA,iBAAO;;;IAAzC,cAAkC;IAAlC,iEAAkC;;;IAHjG,iCAC8H;IAC5H,YAA+D;IAAA,+BAAqB;IAAA,YAAgB;IAAA,iBAAK;IACzG,6GAAqD;IACvD,iBAAO;;;;IAJU,+CAAkC;IAC7C,+PAAuH;IAC3H,cAA+D;IAA/D,2GAA+D;IAAqB,eAAgB;IAAhB,oCAAgB;IACpG,cAAwG;IAAxG,gFAAwG;;;IAM5G,gCAA0C;IAAA,YAA4G;IAAA,iBAAM;;;;IAAlH,cAA4G;IAA5G,0KAA4G;;;IADxJ,iHAAkC;;;;IAAlC,2EAEC;;;IASG,kCAA0B;IAAA,YAAa;IAAA,iBAAS;;;IAAxC,mCAAiB;IAAC,cAAa;IAAb,iCAAa;;;;IA4BzC,mCAA8D;IAArB,oMAAS,iBAAU,KAAC;IAAC,qBAAK;IAAA,iBAAS;;;;IAO1E,AADF,kCAA+C,gBACtB;IAAA,YAAW;IAAA,iBAAO;IACzC,kCAA6D;IAA7B,iOAAS,wCAAkB,KAAC;IAC9D,AADE,iBAA6D,EACvD;;;;IAHgB,mCAAsB;IACrB,eAAW;IAAX,0CAAW;IACd,cAAW;IAAX,6BAAW;;;;IAmBjC,AADF,+BAAiB,cACE;IAAA,YAAoB;IAAA,6BAAO;IAAA,YAA2B;IAAQ,AAAR,iBAAQ,EAAM;IAEnF,AADF,+BAAiB,oBAE2C;IAD7B,wOAAiB,kCAAuB,KAAC;IAG1E,AADE,AAD4D,iBAAY,EAClE,EACF;;;IALa,eAAoB;IAApB,wCAAoB;IAAO,eAA2B;IAA3B,+CAA2B;IAE1D,eAAiB;IAAjB,mCAAiB;;;;;IAchC,6BAAuB;IAAA,YACrB;IAAA,mCAA6E;IAA3B,oMAAS,uBAAgB,KAAC;IAAC,oBAAI;IACnF,AADmF,iBAAS,EACxF;;;IAFmB,cACrB;IADqB,sDACrB;;;IAyB+B,iCAA4B;IAAA,YAAyB;IAAA,iBAAO;;;IAAhC,cAAyB;IAAzB,sDAAyB;;;IASnD,iCAAwB;IAAA,wBAAQ;IAAA,iBAAO;;;;IAE1D,kCAC2G;IAD5E,oXAA+B;IACkB,AAArC,AAApC,6PAAiB,wBAAiB,KAAC,kPAAmB,wBAAiB,KAAC,8NAAS,wBAAiB,KAAC;IAD1G,iBAC2G;;;IAD5E,wDAA+B;;;;IAI5D,AADF,kCAAyC,iBACgD;IAA5C,+RAAS,4CAAiC,KAAC;IAAtF,iBAAuF;IACvF,iCAAsB;IAAA,YAAa;IACrC,AADqC,iBAAO,EACpC;;;IAHe,mCAAiB;IAClB,cAAsB;IAAtB,wCAAsB;IACpB,eAAa;IAAb,iCAAa;;;;IAGrC,mCAAiG;IAA5B,0RAAS,4BAAiB,KAAC;IAAC,YAAa;IAAA,iBAAS;;;IAA7E,4CAA0B;IAA6B,cAAa;IAAb,iCAAa;;;;IAG9G,mCAA4G;IAArC,0RAAS,qCAA0B,KAAC;IAAC,yBAAuC;IAAA,iBAAS;;;;IAjBhK,gCACuF;IAArC,AAA7C,+PAAc,wCAA6B,KAAC,0NAAe,4BAAqB,KAAC;IACpF,4BAAyD;IACzD,iCAAwC;IAAA,YAAY;IAAA,iBAAO;IAC3D,6IAAoB;IASlB,AALA,AAHF,8IAA+B,wHAGP,yHAKf;IAGT,+IAAoB;IAGtB,iBAAM;;;;IAnBe,uCAA0B;IAExB,cAA4B;IAA5B,yCAA4B;IAC1B,cAAgB;IAAhB,kCAAgB;IAAC,cAAY;IAAZ,gCAAY;IACpD,cAA8D;IAA9D,2CAA8D;IAC9D,cAUC;IAVD,gFAUC;IACD,eAEC;IAFD,2CAEC;;;IAnBL,uIAqBC;;;IArBD,yBAqBC;;;;IA5BH,AADF,gCAAuB,kBAC0D;IAArC,oOAAS,qCAA0B,KAAC;IAC5E,yBAAoI;IACpI,YACA;IAAA,yHAAsB;IACtB,iCAAwB;IAAA,YAAmB;IAC7C,AAD6C,iBAAO,EAC3C;IACT,4GAAkC;IAwBpC,iBAAM;;;;IA7BkB,eAAoD;IAAC,AAArD,wEAAoD,4DAAuD;IAC/H,cACA;IADA,4CACA;IAAA,cAAqF;IAArF,6CAAqF;IAC7D,eAAmB;IAAnB,uCAAmB;IAE7C,cAuBC;IAvBD,gEAuBC;;;;IAYH,mCAA0G;IAA3C,oOAAS,2CAAgC,KAAC;IAAC,YAAgB;IAAA,iBAAS;;;IAA5F,yCAAuB;IAA4C,cAAgB;IAAhB,oCAAgB;;;IAMjF,kCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;IAUtE,8BAAoB;IAAA,yBAAgD;IAAC,YAAO;IAAA,iBAAI;;;IAAX,eAAO;IAAP,iCAAO;;;;IAgB1E,AADF,gCAAqB,kBACiD;IAA7B,oNAAS,yBAAkB,KAAC;IAAC,yBAAgC;IAAC,qBAAI;IAAA,iBAAS;IAClH,gCAA4B;IAC1B,sCAAgG;IAEpG,AADE,iBAAM,EACF;;;IAFsD,eAAsB;IAAtB,2CAAsB;;;;IA5FrD,AAA/B,AADF,gCAAuC,gBACN,QAAG;IAAA,iBAAC;IAAA,iBAAI;IAAC,sBAAK;IAAA,iBAAO;IACpD,yBAAuC;IACb,AAA1B,iCAA0B,QAAG;IAAA,iBAAC;IAAA,iBAAI;IAAC,gCAAe;IAAA,iBAAO;IACzD,0BAAuC;IACT,AAA9B,kCAA8B,SAAG;IAAA,kBAAC;IAAA,iBAAI;IAAC,4BAAU;IACnD,AADmD,iBAAO,EACpD;IACN,8BAAe;IAAA,4KAA2J;IAAA,iBAAI;IAIvJ,AAArB,AADF,iCAAqB,gBACE,iBAAuB;IAAA,kBAAC;IAAA,iBAAO;IAAA,gCAAe;IAAA,iBAAM;IACzE,8BAAe;IAAA,8MAA6L;IAAA,iBAAI;IAChN,mCAC6F;IAAtF,+TAAyB;IAAC,oNAAiB,6BAAsB,KAAC;IADzE,iBAC6F;IAC7F,iCAAwB;IACtB,oHAiCC;IAEL,AADE,iBAAM,EACF;IAIiB,AAArB,AADF,iCAAqB,gBACE,iBAA2B;IAAA,kBAAC;IAAA,iBAAO;IAAA,2BAAU;IAAA,kCAAsB;IAAA,6BAAY;IAAO,AAAP,iBAAO,EAAM;IACjH,8BAAe;IAAA,+GAA8F;IAAA,6BAAM;IAAA,wBAAW;IAAA,iBAAO;IAAC,0DAAwC;IAAA,iBAAI;IAClL,iCAAuB;IACrB,uHAEC;IACH,iBAAM;IAEJ,AADF,iCAAuB,mBACmF;IAA/E,6MAAU,gCAAyB,KAAC;IAC3D,oCAAiB;IAAA,mCAAa;IAAA,iBAAS;IACvC,wIAA+E;IAEnF,AADE,iBAAS,EACL;IAEJ,AADF,iCAA4B,8BAI6C;IAFnC,qNAAU,gCAAyB,KAAC;IAG1E,AADyE,iBAAiB,EACpF;IACN,oIAEC;IACD,+BAAwB;IAAA,4KAAsJ;IAAA,iBAAI;IAClL,mCAAqH;IAAnC,qMAAS,+BAAwB,KAAC;IAClH,0BAAuG;IACvG,aACF;IACF,AADE,iBAAS,EACL;IAGJ,AADF,iCAAqB,mBACkE;IAA/C,4PAA8C;IAClF,0BAAmG;IACnG,aACF;IAAA,iBAAS;IACT,mHAAwB;IAQ1B,iBAAM;;;IAnFG,gBAAyB;IAAzB,kDAAyB;IAE9B,eAiCC;IAjCD,iCAiCC;IASD,gBAEC;IAFD,wCAEC;IAKC,eAA+E;IAA/E,uCAA+E;IAKjE,eAAmB;IACgB,AAAnC,AADA,wCAAmB,0CACe,sBAAsB;IAG1E,eAEC;IAFD,iCAEC;IAEgB,eAAsD;IAAtD,2EAAsD;IACjD,cAAoC;IAAC,AAArC,oDAAoC,2CAA0C;IAClG,cACF;IADE,gHACF;IAKsB,eAAkC;IAAC,AAAnC,kDAAkC,yCAAwC;IAC9F,cACF;IADE,wFACF;IACA,cAOC;IAPD,mDAOC;;AD5djB,6FAA6F;AAC7F,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,4DAA4D;AAC5D,MAAM,eAAe,GAAG,8BAA8B,CAAC;AACvD,qFAAqF;AACrF,MAAM,oBAAoB,GAAG,4BAA4B,CAAC;AASnD,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,aAAa;IAsH1C;IAAkC;IArHlB,aAAa,CAA2B;IAC5C,SAAS,CAAgC;IAC7C,OAAO,CAA2B;IAClC,KAAK,CAAuB;IACxB,SAAS,CAA2B;IAC5D,gBAAgB,CAAgB;IAExB,OAAO,GAAkB;QACvC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,GAAG,gBAAgB,EAAE,EAAE;QACtD,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3J,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5J,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACtJ,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;KAC/J,CAAC;IAEc,WAAW,GAAuC;QAChE,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,CAAC,UAAW,EAAE;QACjE,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,qCAAqC,EAAE;QAC1E,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,qCAAqC,EAAE;QACpE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,0DAA0D,EAAE;KAC1F,CAAC;IAEF,iDAAiD;IACjC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACvC,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnE,OAAO,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEpF,KAAK,GAAe,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC5C,OAAO,GAAiB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,GAAoB,EAAE,CAAC;IAC7B,cAAc,GAAkB,IAAI,CAAC;IACrC,WAAW,GAAG,WAAW,CAAC;IAC1B,WAAW,GAAqB,OAAO,CAAC;IACxC,UAAU,GAAmB,UAAU,CAAC;IACxC,cAAc,GAAG,KAAK,CAAC;IACvB,UAAU,GAAG,KAAK,CAAC;IACnB,WAAW,GAAG,KAAK,CAAC;IACnB,UAAU,GAAG,EAAE,CAAC;IACjB,eAAe,GAAG,KAAK,CAAC;IACxB,MAAM,GAAG,KAAK,CAAC;IAEtB,8DAA8D;IACvD,iBAAiB,GAAG,KAAK,CAAC;IAEjC,2DAA2D;IAC3C,cAAc,GAAuB;QACnD,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE;QACzC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;KACvC,CAAC;IACc,WAAW,GAAuB;QAChD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;QACzD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE;KACzD,CAAC;IAEF,+EAA+E;IACxE,YAAY,GAAG,cAAc,CAAC;IAC9B,YAAY,GAAG,EAAE,CAAC;IAClB,OAAO,GAAG,EAAE,CAAC;IAEpB;yFACqF;IACrE,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,CAAC;IACH,QAAQ,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC,CAAC;IACZ,WAAW,GAAG,IAAI,CAAC;IACnB,WAAW,GAAG,KAAK,CAAC;IACpB,iBAAiB,GAAG,KAAK,CAAC;IAEjC,gFAAgF;IACzE,YAAY,GAAG,KAAK,CAAC;IACrB,cAAc,GAA2B,EAAE,CAAC;IAC5C,SAAS,GAAG,EAAE,CAAC;IACf,gBAAgB,GAAG,KAAK,CAAC;IAEhC,yCAAyC;IAClC,WAAW,GAAG,EAAE,CAAC;IACjB,WAAW,GAAiB,EAAE,CAAC;IAC/B,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,YAAY,GAAkB,IAAI,CAAC;IACnC,iBAAiB,GAAG,EAAE,CAAC;IACtB,oBAAoB,GAAG,EAAE,CAAC;IAC1B,yBAAyB,GAAG,KAAK,CAAC;IAE1C;;;gEAG4D;IAC5C,kBAAkB,GAAG,uBAAuB,CAAC;IACtD,YAAY,GAA2C,EAAE,CAAC;IACzD,gBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEvD,mDAAmD;IAC5C,WAAW,GAAa,EAAE,CAAC;IAElC,8BAA8B;IACvB,UAAU,GAAG,eAAe,CAAC;IAC7B,aAAa,GAAG,KAAK,CAAC;IACrB,gBAAgB,GAAkB,IAAI,CAAC;IAE/C,wCAAwC;IACjC,kBAAkB,GAAG,KAAK,CAAC;IAC1B,cAAc,GAAkB,IAAI,CAAC;IACrC,qBAAqB,CAA4C;IAEzE,wFAAwF;IACxE,mBAAmB,GAAgB;QACjD,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC;IAEM,gBAAgB,GAA4B,IAAI,CAAC;IACjD,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,cAAc,GAAuB,IAAI,CAAC;IAClD,oFAAoF;IAC5E,wBAAwB,GAAG,CAAC,CAAC,CAAC;IAEtC,YAAoB,KAAwB,EAAU,YAA0B;QAC9E,KAAK,EAAE,CAAC;QADU,UAAK,GAAL,KAAK,CAAmB;QAAU,iBAAY,GAAZ,YAAY,CAAc;IAEhF,CAAC;IAED,eAAe;QACb,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC9C,OAAO,cAAc,CAAC;IACxB,CAAC;IAES,aAAa;QACrB,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;QACrC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,4EAA4E;QAC5E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE;YACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEQ,WAAW;QAClB,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,CAAC;QACrC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACrC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC;IAED;kEAC8D;IACvD,KAAK,CAAC,iBAAiB;QAC5B,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAES,KAAK,CAAC,QAAQ;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAgB;gBAC7C,UAAU,EAAE,YAAY;gBACxB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/D,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;aACpC,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,SAAiB;QACnC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAe,CAAC;YAC9C,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,mFAAmF;IACnF,2CAA2C;IAEpC,SAAS;QACd,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,gCAAgC,EAAE,CAAC;IAC1C,CAAC;IAED,2FAA2F;IAC3F,IAAW,cAAc;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,kFAAkF;IAClF,IAAW,eAAe;QACxB,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC;YAC5E,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC;SAC3E,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,IAAW,SAAS;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7G,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,0FAA0F;IAC1F,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,qDAAqD;IACrD,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC3D,CAAC;IAEM,OAAO,CAAC,KAAa,EAAE,KAAY;QACxC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACtC,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACK,gBAAgB;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;QAC7C,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,qFAAqF;QACrF,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/G,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;gBAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;QACxD,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QAC1D,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED;4FACwF;IAChF,qBAAqB,CAAC,EAAe;QAC3C,MAAM,QAAQ,GAAG,mBAAmB,CAAC;QACrC,IAAI,KAAK,GAAG,EAAE,CAAC,aAAa,CAAmB,SAAS,QAAQ,EAAE,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACxC,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC;YACpB,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACxC,0FAA0F;QAC1F,KAAK,CAAC,WAAW,GAAG,mBAAmB,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IAED,2CAA2C;IAC3C,6DAA6D;IAC7D,2CAA2C;IAE3C,mFAAmF;IACnF,IAAW,iBAAiB;QAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7G,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED;yFACqF;IAC9E,iBAAiB;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACtC,CAAC;IAED,yFAAyF;IAClF,cAAc;QACnB,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,wEAAwE;IACxE,IAAW,eAAe;QACxB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,aAAa;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,kBAAkB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAClG,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,QAAQ,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,wCAAwC;IAExC,kDAAkD;IAC1C,mBAAmB;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;YACpB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACxC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACzC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,MAAM,GAAiB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClH,MAAM,KAAK,GAAe,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAClF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvG,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC;YAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAClE,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,GAAG,GAAa,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC5G,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,UAAU;gBAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC;IAEM,oBAAoB;QACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEM,mBAAmB,CAAC,GAAW;QACpC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,uFAAuF;IAChF,mBAAmB,CAAC,GAAW;QACpC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3E,CAAC;IAEM,gBAAgB,CAAC,IAAY,EAAE,KAAa;QACjD,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;QAChE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,kBAAkB,CAAC,IAAY;QACpC,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,iBAAiB,CAAC,IAAY,EAAE,KAAY;QACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAG,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IAED,6DAA6D;IACtD,cAAc,CAAC,GAAa;QACjC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,yBAAyB,GAAG,GAAG,CAAC,UAAU,CAAC;IAClD,CAAC;IAEM,eAAe;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,gFAAgF;QAChF,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,IAAI,KAAK,KAAK,IAAI,CAAC,oBAAoB,CAAC;YAAE,OAAO;QAC/F,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAEM,eAAe;QACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,iFAAiF;IAEjF;8FAC0F;IACnF,qBAAqB,CAAC,KAAa;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACjE,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,oBAAoB,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,sFAAsF;QACtF,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,GAAG,MAAM,kEAAkE,CAAC;IAClH,CAAC;IAEM,mBAAmB;QACxB,IAAI,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,EAAE,CAAC;IACpE,CAAC;IAED,gDAAgD;IAEhD;;gFAE4E;IACrE,YAAY,CAAC,MAAmB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,gFAAgF;IACxE,mBAAmB;QACzB,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED;;+DAE2D;IACnD,sBAAsB,CAAC,IAAY;QACzC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACjD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,OAAO;YAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC1C,CAAC;IAED;;wFAEoF;IAC5E,qBAAqB;QAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC7C,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBACxB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;;mFAG+E;IACvE,kBAAkB;QACxB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED,2CAA2C;IAEpC,iBAAiB,CAAC,KAAa;QACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,wFAAwF;IACxF,IAAY,cAAc;QACxB,OAAO,CAAC,GAAG,mBAAmB,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAED,mFAAmF;IAC3E,qBAAqB,CAAC,OAA0B;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACtE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACvG,QAAQ,EAAE,WAAW;SACtB,CAAC;IACJ,CAAC;IAED,qFAAqF;IAC9E,oBAAoB,CAAC,QAAgB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,IAAI,CAAC,iBAAiB,CAAC,GAAG,MAAM,GAAG,QAAQ,WAAW,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,GAAG,QAAQ,QAAQ,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC;gBACZ,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE;gBAC9C,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;aAC3C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC;gBACZ,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;gBACxC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,gEAAgE;IACzD,iBAAiB,CAAC,KAAY;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAA2B,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,IAAI,GAAG,OAAO,KAAK,GAAG,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClG,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,qFAAqF;IAC7E,iBAAiB;QACvB,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,0FAA0F;IAClF,aAAa;QACnB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;yFAGqF;IAC7E,mBAAmB;QACzB,IAAI,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACzF,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACrD,IAAI,KAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,qBAAqB;YACjC,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,qBAAqB,CAAC,IAAa,EAAE,GAAgB;QAC3D,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;oBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAI,IAAwB,CAAC,QAAQ,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,6FAA6F;IAC7F,IAAW,YAAY;QACrB,OAAO,cAAc,CAAC,IAAI,CAAC,cAAc,IAAI,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;YACpE,SAAS,EAAE,IAAI,CAAC,cAAc;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,gBAAgB;QAC3B,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,mCAAmC;IACnC,2CAA2C;IAEpC,OAAO,CAAC,IAAoB;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEM,cAAc,CAAC,IAAsB;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACtC,CAAC;IAED,qEAAqE;IAC9D,YAAY,CAAC,GAAW;QAC7B,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,wEAAwE;IACjE,eAAe,CAAC,GAAW;QAChC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACtC,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACtC,CAAC;IAED,0EAA0E;IAE1E;+FAC2F;IACnF,eAAe,CAAC,KAAa;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,kBAAkB,EAAE,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC;QACjH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,uFAAuF;IAC/E,cAAc;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAChI,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,eAAe,EAAE,CAAC;gBACzD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEM,gBAAgB,CAAC,KAAmB;QACzC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,MAAM,GAAG,CAAC,CAAe,EAAE,EAAE;YACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,EAAE;YACf,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC;YACxC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACtF,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC,CAAC;QACF,8EAA8E;QAC9E,iFAAiF;QACjF,iFAAiF;QACjF,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAGM,cAAc;QACnB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;yCAGqC;IAC9B,KAAK,CAAC,gBAAgB,CAAC,EAAW;QACvC,IAAI,CAAC;YACH,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;gBAC7C,IAAI,EAAE,EAAE,iBAAiB,EAAE,CAAC;oBAC1B,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;oBAC7B,OAAO,CAAC,mCAAmC;gBAC7C,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBACtC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAGM,kBAAkB;QACvB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAGM,QAAQ;QACb,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,0EAA0E;QAC1E,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACnD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAEM,gBAAgB;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,iBAAiB;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,2CAA2C;IAC3C,UAAU;IACV,2CAA2C;IAEpC,WAAW,CAAC,MAAmB;QACpC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;gBAAE,OAAO,SAAS,CAAC;QAC5D,CAAC;QACD,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACjC,CAAC;IAEM,cAAc;QACnB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,IAAmB;QAC1C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAgB,YAAY,CAAC,CAAC;QACrE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,gBAAgB,EAAE,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAgB,EAAE,CAAC;QACpF,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,+EAA+E;QAC/E,4EAA4E;QAC5E,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,iFAAiF;QACjF,oEAAoE;QACpE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,IAAW,gBAAgB;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAC/B,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACxF,CAAC;IAED,0FAA0F;IACnF,cAAc,CAAC,EAAU;QAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACtE,CAAC;IAED,qFAAqF;IACrF,IAAW,iBAAiB;QAC1B,OAAO,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,0FAA0F;IACnF,UAAU;QACf,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,WAAW,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,CAAC,WAAW,uBAAuB,CAAC,CAAC;IAC5E,CAAC;IAED;qFACiF;IAC1E,WAAW;QAChB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,oEAAoE,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC;QAClF,kEAAkE;QAClE,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACnG,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAgB,YAAY,CAAC,CAAC;YACrE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAAE,OAAO;YACtD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,eAAe,IAAI,eAAe,CAAC;gBACpE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,IAAI,6CAA6C,CAAC,CAAC,CAAC,kBAAkB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;YACrK,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACvF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAEM,YAAY;QACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,WAAW,GAAG,IAAI;QAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;QACrC,IAAI,WAAW;YAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC7C,CAAC;IAED;8FAC0F;IAClF,kBAAkB;QACxB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,0EAA0E;IACnE,YAAY,CAAC,MAAmB;QACrC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,+EAA+E;IACxE,kBAAkB;QACvB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAEM,OAAO;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,cAAc;IACd,2CAA2C;IAEpC,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,uEAAuE,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,mFAAmF;QACnF,kFAAkF;QAClF,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7F,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,MAAM,CAAC,6DAA6D,CAAC,CAAC;oBAC3E,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAgB,YAAY,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;oBAC9C,IAAI,CAAC,MAAM,CAAC,uFAAuF,EAAE,OAAO,CAAC,CAAC;oBAC9G,OAAO;gBACT,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YAC3B,CAAC;YACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;YACjD,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;gBACpC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC;gBAChC,8EAA8E;gBAC9E,qEAAqE;gBACrE,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;gBACvG,IAAI,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1E,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,CAAC;gBACD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,gBAAgB,MAAM,CAAC,YAAY,EAAE,eAAe,IAAI,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,6CAA6C,CAAC,CAAC,CAAC,gBAAgB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5J,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,IAAI,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1E,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,cAAc,CAAC,EAAU;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAgB;gBAC7C,UAAU,EAAE,YAAY;gBACxB,WAAW,EAAE,4BAA4B,EAAE,GAAG;gBAC9C,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;oBACxB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC1B,IAAI,CAAC,MAAM,CAAC,yCAAyC,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,YAAY,EAAE,eAAe,IAAI,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;wBACxI,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAgB,YAAY,CAAC,CAAC;YACrE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAAE,OAAO;YACrC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,0BAA0B,MAAM,CAAC,YAAY,EAAE,eAAe,IAAI,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC1G,OAAO;YACT,CAAC;YACD,IAAI,KAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,KAAK,GAAG,EAAE,GAAG,gBAAgB,EAAE,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAgB,EAAE,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;YAClC,CAAC;YACD,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5I,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/F,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,wFAAwF;IAChF,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QACjC,gFAAgF;QAChF,iFAAiF;QACjF,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;YACnC,EAAE,EAAE,IAAI,CAAC,cAAc;YACvB,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,cAAc;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS;QACpB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QACjC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,WAAW,yDAAyD,CAAC,CAAC;QACnG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,4EAA4E;IAE5E;;;;;;OAMG;IACI,KAAK,CAAC,sBAAsB;QACjC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;QACvD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,wFAAwF,EAAE,MAAM,CAAC,CAAC;QAC9G,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;YACnC,EAAE,EAAE,oBAAoB;YACxB,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,kBAAkB;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,cAAc;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,iFAAiF;IACzE,gCAAgC;QACtC,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACrC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBAAE,OAAO;YACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED;;4FAEwF;IAChF,uBAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACrC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,UAAU,GAAG,IAAI;QACjD,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACrC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,wDAAwD,CAAC,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAe,EAAE,QAAsC,SAAS;QAC7E,qBAAqB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,kEAAkE;IAClE,mEAAmE;IACnE,qDAAqD;IACrD,kEAAkE;IAE1D,iBAAiB,CAA4C;IAE7D,WAAW;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,EACJ,4BAA4B,CAAC;YAC3B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE;YAC1B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,gBAAgB,EAAE,IAAI,CAAC,WAAW;YAClC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc,EAAE,IAAI,CAAC,UAAU;YAC/B,eAAe,EAAE,CAAC,IAAI,CAAC,cAAc;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM;YAC3D,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC9C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;SAChC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,4DAA4D;IACpD,4BAA4B;QAClC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7E,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,EAAE;YAC/C;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,mEAAmE;gBAChF,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;gBACnD,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9F,CAAC;aACF;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,0GAA0G;gBACvH,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE,EAAE;oBAC/E,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;gBACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBACxB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC7E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAC1D,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1E,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,gDAAgD,EAAE,CAAC;oBAC5F,CAAC;oBACD,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzE,CAAC;aACF;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,uGAAuG;gBACpH,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;gBACnD,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACrB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzE,CAAC;aACF;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,4EAA4E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACtI,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE,EAAE;oBACpG,QAAQ,EAAE,CAAC,QAAQ,CAAC;iBACrB;gBACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBACxB,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9F,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;2BAChE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,8BAA8B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvH,CAAC;oBACD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC1D,CAAC;aACF;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,iIAAiI;gBAC9I,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;wBACpE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;wBAC5D,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;wBAChE,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;wBAC9E,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;wBACjF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;wBAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;qBACtE;iBACF;gBACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;aACvD;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,gDAAgD;gBAC7D,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,EAAE;oBACzE,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;gBACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC5B,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;wBACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,iCAAiC,EAAE,CAAC;oBAC7E,CAAC;oBACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBAC1B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpE,CAAC;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,uGAAuG;gBACpH,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE,EAAE;oBACnF,QAAQ,EAAE,CAAC,SAAS,CAAC;iBACtB;gBACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBACxB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;oBAClC,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;wBACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,2CAA2C,EAAE,CAAC;oBACvF,CAAC;oBACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACtB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBACtE,CAAC;aACF;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,kJAAkJ;gBAC/J,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;gBACnD,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;wBACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,qDAAqD,EAAE,CAAC;oBACjG,CAAC;oBACD,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzE,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,wFAAwF;IAChF,cAAc,CAAC,MAA+B;QACpD,MAAM,GAAG,GAAG,mBAAmB,CAAC;QAChC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,IAAI,GAAe,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAU,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,4CAA4C,EAAE,CAAC;gBAC9F,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnC,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAA8F;YACzG,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE;YACzC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE;YACrC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YAChC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;SAC/B,CAAC;QACF,KAAK,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,6BAA6B,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;gBAC9F,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,sCAAsC,EAAE,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;IAC1G,CAAC;uHA14CU,6BAA6B;6DAA7B,6BAA6B;;;;;;;;;;YAA7B,oGAAA,oBAAgB,wBAAa,2GAA7B,wBAAoB,0BAAS,uGAA7B,cAAU,0BAAmB;;;YC1GhC,AADF,AADF,AADF,AAFF,AADF,sCAAgB,wBAC+F,aAEjG,aACqB,aACH,cACL;YAGf,AADA,AADA,oBAA0C,QACD,QACE;YAC7C,iBAAO;YAKL,AAJF,kGAAmB,iEAIV;YAQT,mGAAwB;YACxB,mCACgE;YAA9B,iJAAS,uBAAmB,KAAC;YAC7D,yBAA8C;YAElD,AADE,iBAAS,EACL;YACN,uFAAuB;YAezB,iBAAM;YACN,mGAAyB;YAGzB,mGAA0B;YAG5B,iBAAM;YAIJ,AADF,gCAAa,kBACmD;YAApB,iJAAS,aAAS,KAAC;YAAC,wBAAO;YAAA,iBAAS;YAC9E,mCAE8B;YAAtB,iJAAS,eAAW,KAAC;YAAC,4BAAW;YAAA,iBAAS;YAClD,mCACoG;YAAzB,iJAAS,kBAAc,KAAC;YAAC,mCAAkB;YAAA,iBAAS;YAG7H,AAFF,qGAAyB,+EAEhB;YAGX,iBAAM;YAIJ,AADF,gCAAa,0BAE2C;YAAtC,uKAAa,2BAAuB,KAAC;YAAC,iBAAiB;YACvE,4BAAoC;YACpC,2CACmD;YAAnC,uKAAa,wBAAoB,KAAC;YAAC,iBAAiB;YACpE,mCACyC;YAAjC,iJAAS,qBAAiB,IAAI,CAAC,KAAC;YAAC,yBAAkC;YAAA,iBAAS;YACpF,mCACgC;YAAxB,iJAAS,iBAAa,KAAC;YAAC,yBAAmC;YAAC,4BAAU;YAElF,AADE,AADgF,iBAAS,EACnF,EACS;YAIf,AAFF,yCAA8C,kBAEoB;YAO9D,wFAAyB;YAiCrB,AADF,AADF,gCAAqB,eACG,kBACkD;YAEpE,kGAAkB;YAOlB,gCAAuB;YAGrB,qGAAiC;YA8IjC,oGAAiC;YA6DzC,AADE,AADE,AADE,iBAAM,EACF,EACF,EACF;YAKJ,AAFF,kCAC0D,eAEa;YAAzC,gKAAe,4BAAwB,KAAC;YAAC,iBAAM;YAEzE,AADF,gCAAqB,gBACF;YAAA,yBAAmC;YAAA,iBAAO;YACtD,AAAL,4BAAK,UAAI;YAAA,2BAAU;YAAA,iBAAK;YAAA,8BAAO;YAAA,8CAAiC;YAAQ,AAAR,iBAAQ,EAAM;YAC9E,mCAA0F;YAA/C,iJAAS,iBAAa,KAAC;YAAwB,yBAAyC;YACrI,AADqI,iBAAS,EACxI;YAIE,AAAJ,AADF,AAFF,gCAAwB,eAEJ,UACZ,gBAAiB;YAAA,yBAAgC;YAAA,iBAAO;YAAA,oCAAmB;YAAA,iBAAK;YACpF,gCAAwB;YACtB,sGAKC;YAEL,AADE,iBAAM,EACF;YAGA,AAAJ,AADF,gCAAkB,UACZ,gBAAiB;YAAA,yBAAgC;YAAA,iBAAO;YAAA,6BAAY;YAAA,iCAAoB;YAAA,2BAAU;YAAO,AAAP,iBAAO,EAAK;YAClH,8BAAe;YAAA,8FAA6E;YAAA,iBAAI;YAC/E,AAAjB,gCAAiB,eAAiB;YAAA,wBAAO;YAAA,8BAAO;YAAA,wCAAuB;YAAQ,AAAR,iBAAQ,EAAM;YAChD,AAAlB,AAAjB,gCAAiB,gBAAkB,iBAAmF;YAA/D,yQAA2B;YAAC,gKAAiB,oBAAgB,KAAC;YAAlF,iBAAmF;YAAA,iCAAkB;YAAA,aAAmB;YAAoB,AAAN,AAAP,AAAP,iBAAO,EAAO,EAAM,EAAM;YACvL,gCAA0B;YAAA,qBAAwC;YAAA,wCAAuB;YAAA,6BAAM;YAAA,aAAiB;YAAA,iBAAO;YAAC,6BAAW;YAAA,iBAAM;YACxH,AAAjB,gCAAiB,eAAiB;YAAA,uBAAM;YAAA,8BAAO;YAAA,wCAAuB;YAAQ,AAAR,iBAAQ,EAAM;YAC/C,AAAlB,AAAjB,gCAAiB,gBAAkB,kBAAkF;YAA9D,wQAA0B;YAAC,iKAAiB,oBAAgB,KAAC;YAAjF,iBAAkF;YAAA,kCAAkB;YAAA,cAAkB;YAAoB,AAAN,AAAP,AAAP,iBAAO,EAAO,EAAM,EAAM;YACpK,AAAjB,iCAAiB,gBAAiB;YAAA,0BAAQ;YAAA,+BAAO;YAAA,yCAAuB;YAAQ,AAAR,iBAAQ,EAAM;YACjD,AAAlB,AAAjB,iCAAiB,iBAAkB,kBAAoF;YAAhE,4QAA4B;YAAC,iKAAiB,oBAAgB,KAAC;YAAnF,iBAAoF;YAAA,kCAAkB;YAAA,cAAoB;YAAoB,AAAN,AAAP,AAAP,iBAAO,EAAO,EAAM,EAAM;YACxK,AAAjB,iCAAiB,gBAAiB;YAAA,2BAAS;YAAA,+BAAO;YAAA,8CAAuB;YAAQ,AAAR,iBAAQ,EAAM;YACpE,AAAjB,iCAAiB,iBAAyB;YAAA,6BAAgE;YAAA,kCAAkB;YAAA,cAAoB;YAAoB,AAAN,AAAP,AAAP,iBAAO,EAAO,EAAM,EAAM;YAC3J,AAAjB,iCAAiB,gBAAiB;YAAA,iCAAe;YAAA,+BAAO;YAAA,uCAAyB;YAAQ,AAAR,iBAAQ,EAAM;YAC7F,iCAAiB;YACf,qGAAgC;YAO5B,AAAN,iBAAM,EAAM;YACd,yFAAmC;YAKrC,iBAAM;YAGA,AAAJ,AADF,iCAAkB,WACZ,iBAAiB;YAAA,0BAAgC;YAAA,iBAAO;YAAA,4BAAU;YAAA,kCAAoB;YAAA,4BAAU;YAAO,AAAP,iBAAO,EAAK;YAC/F,AAAjB,iCAAiB,gBAAiB;YAAA,6BAAW;YAAA,iBAAM;YAChC,AAAjB,iCAAiB,mBAA0E;YAAlE,iRAA8B;YAAC,kKAAiB,oBAAgB,KAAC;YACxF,wGAEC;YACY,AAAN,AAAT,iBAAS,EAAM,EAAM;YACN,AAAjB,iCAAiB,gBAAiB;YAAA,0BAAQ;YAAA,+BAAO;YAAA,uCAAqB;YAAQ,AAAR,iBAAQ,EAAM;YACjE,AAAjB,iCAAiB,kBAAoH;YAAhE,4QAA4B;YAAC,iKAAiB,oBAAgB,KAAC;YAAnH,iBAAoH;YAAA,kCAAkB;YAAA,cAAoB;YAAa,AAAN,AAAP,iBAAO,EAAM,EAAM;YAC/K,AAAjB,iCAAiB,gBAAiB;YAAA,mCAAiB;YAAA,+BAAO;YAAA,qCAAmB;YAAQ,AAAR,iBAAQ,EAAM;YACxE,AAAjB,iCAAiB,kBAAyH;YAArE,sRAAiC;YAAC,iKAAiB,oBAAgB,KAAC;YAAxH,iBAAyH;YAAA,kCAAkB;YAAA,cAAyB;YAAa,AAAN,AAAP,iBAAO,EAAM,EAAM;YACzL,AAAjB,iCAAiB,gBAAiB;YAAA,2BAAS;YAAA,+BAAO;YAAA,mCAAiB;YAAQ,AAAR,iBAAQ,EAAM;YAC9D,AAAjB,iCAAiB,kBAAgH;YAAjE,wQAA0B;YAAC,iKAAiB,uBAAmB,KAAC;YAA/G,iBAAgH;YAAA,kCAAkB;YAAA,cAAoB;YAC3K,AADwL,AAAN,AAAP,iBAAO,EAAM,EAAM,EACxL;YAGA,AAAJ,AADF,iCAAkB,WACZ,iBAAiB;YAAA,0BAAkC;YAAA,iBAAO;YAAA,iCAAmB;YAAA,kCAAoB;YAAA,mCAAiB;YAAO,AAAP,iBAAO,EAAK;YAClI,+BAAe;YAAA,qFAAmE;YAAA,iBAAI;YACrE,AAAjB,iCAAiB,gBAAiB;YAAA,+BAAa;YAAA,iBAAM;YAClC,AAAjB,iCAAiB,kBAA4G;YAA9D,wQAA0B;YAAC,iKAAiB,oBAAgB,KAAC;YAA3G,iBAA4G;YAAA,kCAAkB;YAAA,cAAoB;YAAa,AAAN,AAAP,iBAAO,EAAM,EAAM;YACvK,AAAjB,iCAAiB,gBAAiB;YAAA,iCAAe;YAAA,+BAAO;YAAA,uCAAqB;YAAQ,AAAR,iBAAQ,EAAM;YACxE,AAAjB,iCAAiB,kBAA4G;YAA7D,sQAAyB;YAAC,iKAAiB,oBAAgB,KAAC;YAA3G,iBAA4G;YAAA,kCAAkB;YAAA,cAAiB;YAAa,AAAN,AAAP,iBAAO,EAAM,EAAM;YACpK,AAAjB,iCAAiB,gBAAiB;YAAA,yBAAO;YAAA,iBAAM;YAE3C,AADe,AAAjB,iCAAiB,gBAAqB,mBACyD;YAA3C,0IAAmB,EAAE,wBAAE,sBAAkB,KAAC;YAAC,6BAAW;YAAA,iBAAS;YACjH,oCAA2F;YAA1C,0IAAmB,CAAC,wBAAE,sBAAkB,KAAC;YAAC,yBAAO;YAExG,AADgB,AAAN,AAAN,AADoG,iBAAS,EACvG,EAAM,EAAM,EAChB;YAGA,AAAJ,AADF,iCAAkB,WACZ,iBAAiB;YAAA,0BAAwC;YAAA,iBAAO;YAAA,gCAClE;YAAA,uGAAqB;YAGvB,iBAAK;YACL,+BAAe;YAAA,cAAyF;YAAA,iBAAI;YAC5G,iCAAmB;YACjB,sHAKC;YAEL,AADE,iBAAM,EACF;YAGA,AAAJ,AADF,iCAAkB,WACZ,iBAAiB;YAAA,0BAAiC;YAAA,iBAAO;YAAA,iCAAmB;YAAA,iBAAK;YACpE,AAAjB,iCAAiB,gBAAiB;YAAA,+BAAa;YAAA,+BAAO;YAAA,2CAAyB;YAAQ,AAAR,iBAAQ,EAAM;YAC1E,AAAjB,iCAAiB,kBAAiD;YAA3B,wQAA0B;YAAO,AAAN,AAAjD,iBAAiD,EAAM,EAAM;YAChF,+BAAsC;YAAA,kIAA2G;YACnJ,AADmJ,iBAAI,EACjJ;YAIA,AAAJ,AADF,iCAAkB,WACZ,iBAAiB;YAAA,0BAA+C;YAAA,iBAAO;YAAA,yBAAO;YAAA,iBAAK;YACvF,+BAAe;YAAA,gGAAyE;YAAA,iBAAI;YAC5F,qGAQC;YACH,iBAAM;YAIJ,AADF,iCAA2B,eACuB;YAA3B,8IAAS,oBAAgB,KAAC;YAC7C,kCAAiB;YAAA,0BAAgC;YAAA,iBAAO;YAAA,2BACxD;YAAA,0BAA8G;YAChH,iBAAK;YACL,kGAAwC;YAKxC,2FAAoB;YA0GhC,AADE,AADE,AADE,AADE,AAFE,iBAAM,EAEF,EACA,EACJ,EACO,EACA;;;;YA7jBF,eAAkC;YAAlC,+CAAkC;YAClC,cAAiC;YAAjC,8CAAiC;YACjC,cAAmC;YAAnC,gDAAmC;YAExC,cAWC;YAXD,0CAWC;YACD,eAA6D;YAA7D,gDAA6D;YAM/D,eAcC;YAdD,+CAcC;YAEH,cAEC;YAFD,iDAEC;YACD,cAEC;YAFD,kDAEC;YAM4C,eAA4B;YAA5B,8CAA4B;YAG5B,eAA4B;YAA5B,8CAA4B;YAEzE,eAIC;YAJD,iDAIC;YAKe,eAA0B;YAAC,AAA3B,4CAA0B,6BAAyB;YAGnD,eAAuB;YAAC,AAAxB,yCAAuB,8BAA0B;YAIhD,eAAoD;YAApD,sEAAoD;YAK3D,eAAiB;YAAC,AAAlB,+BAAiB,cAAc;YAEd,cAAkC;YAAlC,+CAAkC;YAO7D,eA6BC;YA7BD,iDA6BC;YAIyC,eAA+B;YAA/B,4CAA+B;YAEnE,eAMC;YAND,0CAMC;YAIC,eA2IC;YA3ID,yDA2IC;YAGD,cAwDC;YAxDD,yDAwDC;YASF,cAAkD;YAAlD,sEAAkD;YADP,6CAAgC;YAc1E,gBAKC;YALD,0BAKC;YAQsD,gBAA2B;YAA3B,iDAA2B;YAAsD,eAAmB;YAAnB,uCAAmB;YAChI,eAAgC;YAAhC,6CAAgC;YAAkC,eAAiB;YAAjB,qCAAiB;YAEvD,eAA0B;YAA1B,gDAA0B;YAAsD,eAAkB;YAAlB,sCAAkB;YAElG,eAA4B;YAA5B,kDAA4B;YAAsD,eAAoB;YAApB,wCAAoB;YAE9F,eAAmC;YAAnC,gDAAmC;YAA0B,eAAoB;YAApB,wCAAoB;YAG9I,eAMC;YAND,sEAMC;YAEL,cAIC;YAJD,6EAIC;YAM0B,gBAA8B;YAA9B,oDAA8B;YACrD,cAEC;YAFD,8BAEC;YAGkE,eAA4B;YAA5B,kDAA4B;YAAsD,eAAoB;YAApB,wCAAoB;YAEtG,eAAiC;YAAjC,uDAAiC;YAAsD,eAAyB;YAAzB,6CAAyB;YAErH,eAA0B;YAA1B,gDAA0B;YAAyD,eAAoB;YAApB,iDAAoB;YAOxG,gBAA0B;YAA1B,gDAA0B;YAAsD,eAAoB;YAApB,iDAAoB;YAEnG,eAAyB;YAAzB,+CAAyB;YAAsD,eAAiB;YAAjB,qCAAiB;YAGxI,eAA2B;YAA3B,wCAA2B;YAC3B,eAA0B;YAA1B,uCAA0B;YAMlD,eAEC;YAFD,8CAEC;YAEY,eAAyF;YAAzF,sHAAyF;YAEtG,eAKC;YALD,4BAKC;YAOsC,gBAA0B;YAA1B,gDAA0B;YAQnE,gBAQC;YARD,+BAQC;YAO2B,eAAsC;YAAC,AAAvC,mDAAsC,uCAAyC;YAE3G,cAIC;YAJD,qEAIC;YACD,cAmGC;YAnGD,6CAmGC;;;AD7cA,6BAA6B;IAPzC,aAAa,CAAC,aAAa,EAAE,sBAAsB,CAAC;GAOxC,6BAA6B,CA24CzC;;iFA34CY,6BAA6B;cANzC,SAAS;6BACI,KAAK,YACP,2BAA2B;;kBAKpC,SAAS;mBAAC,eAAe;;kBACzB,SAAS;mBAAC,WAAW;;kBACrB,SAAS;mBAAC,OAAO;;kBACjB,SAAS;mBAAC,OAAO;;kBACjB,SAAS;mBAAC,WAAW;;kBA6uBrB,YAAY;mBAAC,eAAe;;kBA4B5B,YAAY;mBAAC,2BAA2B;;kBAMxC,YAAY;mBAAC,yBAAyB;;kFApxB5B,6BAA6B","sourcesContent":["/**\n * @fileoverview Theme Studio dashboard (org-theming Phase 5) — the polished authoring\n * surface for brand themes, matching theme-studio-mockup-v2: a preview-primary layout\n * with a collapsible, resizable slide-panel editor, three switchable preview surfaces\n * (Explorer UI style-guide, Skip reports, agent output), and a fullscreen mode.\n *\n * Preview fidelity (proposal 16.2 / decision #4): every surface is fed by the SAME\n * derivation module as the save path (@memberjunction/theme-engine). The mockup's\n * parallel `--p-*` + JS color math is replaced by the real derived `--mj-*` token map,\n * pushed onto the preview canvas — so hovers, dark re-point, and status colors are the\n * true generator output, not an approximation.\n *\n * Customization escalates in order (design feedback v1.1): seeds → token overrides\n * (visual token browser + recipes) → custom CSS (escape hatch, CodeMirror-backed).\n * @module ThemeStudio\n */\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { autocompletion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport { Extension } from '@codemirror/state';\nimport { RunView } from '@memberjunction/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseDashboard, ThemeService } from '@memberjunction/ng-shared';\nimport { MJThemeEntity, ResourceData, UserInfoEngine } from '@memberjunction/core-entities';\nimport { CodeEditorComponent } from '@memberjunction/ng-code-editor';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ViewToggleOption } from '@memberjunction/ng-ui-components';\nimport {\n ContrastCheck,\n derive,\n DerivedTheme,\n emitOverlayCss,\n emitScopedCustomCss,\n MJ_DEFAULT_SEEDS,\n ThemeSeeds,\n} from '@memberjunction/theme-engine';\nimport {\n buildCssWarnings,\n isBuiltInTheme,\n MJ_CHROME_SELECTOR_INFO,\n MJ_CHROME_SELECTORS,\n parseOverridesJson,\n pickWorstOnPrimary,\n THEME_RECIPES,\n ThemeRecipe,\n TOKEN_CATEGORIES,\n TOKEN_PREVIEW_TARGETS,\n} from './theme-studio.constants';\nimport { buildThemeStudioAgentContext, resolveThemeByIDOrName, ThemeSummaryRow } from './theme-agent-context';\n\n/** A named starting point that leads with identity, not a blank color picker (16.5). */\ninterface ThemePreset {\n name: string;\n seeds: ThemeSeeds;\n}\n\n/** A row in the saved-themes picker. */\ninterface ThemeListItem {\n id: string;\n name: string;\n isDefault: boolean;\n swatches: string[];\n}\n\n/** One row in the visual token browser. */\ninterface TokenRow {\n name: string;\n /** Effective value shown (override if present, else derived for the preview mode). */\n value: string;\n overridden: boolean;\n /** Whether `value` is a plain hex color editable with a color picker. */\n isColor: boolean;\n /** Normalized 6-digit hex for input[type=color] (only meaningful when isColor). */\n colorValue: string;\n}\n\n/** One category group in the visual token browser. */\ninterface TokenGroup {\n key: string;\n label: string;\n rows: TokenRow[];\n modified: number;\n}\n\ntype PreviewSurface = 'explorer' | 'artifact';\n\n/** Panel sizing (Q3): resizable with a min, an advanced-mode preset, and a preview floor. */\nconst PANEL_MIN_WIDTH = 392;\nconst PANEL_ADVANCED_WIDTH = 600;\nconst PREVIEW_MIN_WIDTH = 640;\nconst PANEL_MAX_FRACTION = 0.55;\n/** User-settings key for a manually-dragged panel width. */\nconst PANEL_WIDTH_KEY = 'mj.themeStudio.panelWidth.v1';\n/** Brand-overlay id used for the temporary \"Preview on my workspace\" application. */\nconst WORKSPACE_PREVIEW_ID = 'theme-studio-draft-preview';\n\n@RegisterClass(BaseDashboard, 'ThemeStudioDashboard')\n@Component({\n standalone: false,\n selector: 'mj-theme-studio-dashboard',\n templateUrl: './theme-studio-dashboard.component.html',\n styleUrls: ['./theme-studio-dashboard.component.css'],\n})\nexport class ThemeStudioDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n @ViewChild('previewCanvas') private previewCanvas?: ElementRef<HTMLElement>;\n @ViewChild('nameInput') private nameInput?: ElementRef<HTMLInputElement>;\n @ViewChild('stage') private stageEl?: ElementRef<HTMLElement>;\n @ViewChild('cssCm') private cssCm?: CodeEditorComponent;\n @ViewChild('galDialog') private galDialog?: ElementRef<HTMLElement>;\n private themesChangedSub?: Subscription;\n\n public readonly presets: ThemePreset[] = [\n { name: 'MJ Default', seeds: { ...MJ_DEFAULT_SEEDS } },\n { name: 'Cool Professional', seeds: { primary: '#4f46e5', accent: '#22d3ee', tertiary: '#0ea5e9', neutralChroma: 0.02, vibrancy: 1, radius: 8, depth: 1 } },\n { name: 'Warm Editorial', seeds: { primary: '#b45309', accent: '#e11d48', tertiary: '#d97706', neutralChroma: 0.05, vibrancy: 1.05, radius: 14, depth: 1 } },\n { name: 'High Contrast', seeds: { primary: '#0f172a', accent: '#2563eb', tertiary: '#0891b2', neutralChroma: 0, vibrancy: 1.2, radius: 4, depth: 1 } },\n { name: 'Muted Enterprise', seeds: { primary: '#0f766e', accent: '#64748b', tertiary: '#0e7490', neutralChroma: 0.03, vibrancy: 0.8, radius: 8, depth: 0.8 } },\n ];\n\n public readonly fontOptions: { label: string; value: string }[] = [\n { label: 'Inter (default)', value: MJ_DEFAULT_SEEDS.fontFamily! },\n { label: 'Georgia (serif)', value: \"'Georgia', 'Times New Roman', serif\" },\n { label: 'Trebuchet', value: \"'Trebuchet MS', Verdana, sans-serif\" },\n { label: 'System UI', value: \"system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif\" },\n ];\n\n /** Height %s + labels for the demo bar chart. */\n public readonly barHeights = [64, 88, 72, 96, 80, 100];\n public readonly barValues = ['$0.5M', '$0.9M', '$0.7M', '$1.1M', '$0.8M', '$1.2M'];\n public readonly barCats = ['Prospect', 'Qualify', 'Propose', 'Negotiate', 'Commit', 'Won'];\n\n public seeds: ThemeSeeds = { ...MJ_DEFAULT_SEEDS };\n public derived: DerivedTheme = derive(this.seeds);\n\n public themes: ThemeListItem[] = [];\n public currentThemeId: string | null = null;\n public currentName = 'New Theme';\n public previewMode: 'light' | 'dark' = 'light';\n public activeView: PreviewSurface = 'explorer';\n public panelCollapsed = false;\n public fullscreen = false;\n public editingName = false;\n private nameBackup = '';\n public themePickerOpen = false;\n public saving = false;\n\n /** Preset gallery shown as step one of \"New theme\" (Q1#2). */\n public presetGalleryOpen = false;\n\n /** Toolbar segmented controls (mj-view-toggle options). */\n public readonly surfaceOptions: ViewToggleOption[] = [\n { key: 'explorer', label: 'Explorer UI' },\n { key: 'artifact', label: 'Artifact' },\n ];\n public readonly modeOptions: ViewToggleOption[] = [\n { key: 'light', label: 'Light', icon: 'fa-solid fa-sun' },\n { key: 'dark', label: 'Dark', icon: 'fa-solid fa-moon' },\n ];\n\n /** Preview-only branding/density knobs (not part of the seed contract yet). */\n public footerNotice = 'Confidential';\n public baseFontSize = 14;\n public density = 16;\n\n /** Interactive-mock state (Q1#6) — clickable tabs/nav/switches/accordion so the\n * derived state token families (hover/active/focus) demonstrate themselves live. */\n public readonly mockNavItems = ['Dashboards', 'Data', 'Agents'];\n public mockNav = 0;\n public readonly mockTabs = ['Overview', 'Members', 'Renewals'];\n public mockTab = 0;\n public mockSwitchA = true;\n public mockSwitchB = false;\n public mockAccordionOpen = false;\n\n /** Advanced customization (persisted): per-token overrides + raw scoped CSS. */\n public advancedOpen = false;\n public tokenOverrides: Record<string, string> = {};\n public customCss = '';\n public showGeneratedCss = false;\n\n /** Visual token browser state (Q2#1). */\n public tokenSearch = '';\n public tokenGroups: TokenGroup[] = [];\n public openTokenCats = new Set<string>();\n public editingToken: string | null = null;\n public editingTokenValue = '';\n private editingTokenOriginal = '';\n private editingTokenWasOverridden = false;\n\n /** Recipes (Q2#3): curated intents expanded to token sets. On/off is tracked by\n * PROVENANCE — `activeRecipeKeys` records exactly which override keys each active\n * recipe produced, so hand-set overrides never masquerade as an active recipe and\n * toggling off removes only keys the recipe still owns. */\n public readonly chromeSelectorInfo = MJ_CHROME_SELECTOR_INFO;\n public recipeStates: { recipe: ThemeRecipe; on: boolean }[] = [];\n private activeRecipeKeys = new Map<string, string[]>();\n\n /** Inline custom-CSS validation results (Q3#6). */\n public cssWarnings: string[] = [];\n\n /** Panel sizing (Q3#1/#2). */\n public panelWidth = PANEL_MIN_WIDTH;\n public panelResizing = false;\n private manualPanelWidth: number | null = null;\n\n /** \"Preview on my workspace\" (Q3#8). */\n public workspacePreviewOn = false;\n private priorOverlayId: string | null = null;\n private workspacePreviewTimer: ReturnType<typeof setTimeout> | undefined;\n\n /** CodeMirror extensions for the custom-CSS editor: MJ selector + token completions. */\n public readonly cssEditorExtensions: Extension[] = [\n autocompletion({ override: [(ctx) => this.mjCssCompletionSource(ctx)] }),\n ];\n\n private tokenHighlightEl: HTMLStyleElement | null = null;\n private appliedVarKeys = new Set<string>();\n private liveTokenCache: Set<string> | null = null;\n /** Sheet count the cache was built against — lazy-loaded chunks add stylesheets. */\n private liveTokenCacheSheetCount = -1;\n\n constructor(private cdRef: ChangeDetectorRef, private themeService: ThemeService) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.syncPanelWidth();\n this.applyPreviewVars();\n }\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Theme Studio';\n }\n\n protected initDashboard(): void {\n this.seeds = { ...MJ_DEFAULT_SEEDS };\n this.loadPersistedPanelWidth();\n this.refreshRecipeStates();\n this.recompute();\n // Keep the switcher list fresh when themes change in the Manage Themes tab.\n this.themesChangedSub = this.themeService.ThemesChanged$.subscribe(() => {\n this.loadData();\n });\n this.registerAgentTools();\n }\n\n override ngOnDestroy(): void {\n this.themesChangedSub?.unsubscribe();\n clearTimeout(this.agentContextTimer);\n clearTimeout(this.workspacePreviewTimer);\n if (this.workspacePreviewOn) {\n void this.endWorkspacePreview(false);\n }\n super.ngOnDestroy();\n }\n\n /** Toggle the theme switcher; refresh the list on open so deletes/renames made in the\n * Manage Themes tab are reflected without a hard refresh. */\n public async toggleThemePicker(): Promise<void> {\n this.themePickerOpen = !this.themePickerOpen;\n if (this.themePickerOpen) {\n await this.loadData();\n }\n }\n\n protected async loadData(): Promise<void> {\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJThemeEntity>({\n EntityName: 'MJ: Themes',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n });\n this.themes = (result.Success ? result.Results : []).map((t) => ({\n id: t.ID,\n name: t.Name,\n isDefault: t.IsDefault,\n swatches: this.swatchesFor(t.Seeds),\n }));\n } catch {\n this.themes = [];\n }\n this.publishAgentContext();\n this.cdRef.detectChanges();\n }\n\n private swatchesFor(seedsJson: string): string[] {\n try {\n const s = JSON.parse(seedsJson) as ThemeSeeds;\n return [s.primary, s.accent ?? s.primary, s.tertiary ?? s.accent ?? s.primary];\n } catch {\n return ['#0076b6', '#38a9d9', '#8b5cf6'];\n }\n }\n\n // ========================================\n // Derivation — the single source feeding every preview surface + validation + save\n // ========================================\n\n public recompute(): void {\n this.derived = derive(this.seeds);\n this.reexpandActiveRecipes();\n this.applyPreviewVars();\n this.rebuildTokenBrowser();\n this.refreshWorkspacePreviewDebounced();\n }\n\n /** The text-on-primary contrast headline, reporting the WORST of light and dark (Q1#3). */\n public get onPrimaryWorst(): { check: ContrastCheck; mode: 'light' | 'dark' } | undefined {\n const detail = this.onPrimaryDetail;\n return pickWorstOnPrimary(detail.light, detail.dark);\n }\n\n /** Per-mode text-on-primary detail shown alongside the worst-of-both headline. */\n public get onPrimaryDetail(): { light?: ContrastCheck; dark?: ContrastCheck } {\n return {\n light: this.derived.contrast.light.find((c) => c.name === 'text-on-primary'),\n dark: this.derived.contrast.dark.find((c) => c.name === 'text-on-primary'),\n };\n }\n\n /** All 10 derived categorical colors (--mj-viz-1..10) — the full chart-palette contract. */\n public get vizColors(): string[] {\n return Array.from({ length: 10 }, (_, i) => this.derived.overlayVars[`--mj-viz-${i + 1}`]).filter(Boolean);\n }\n\n public get vizOverridden(): boolean {\n return !!this.seeds.vizPalette && this.seeds.vizPalette.length > 0;\n }\n\n /** Dark-mode primary the theme derives (ramp step), shown as a note on the Brand card. */\n public get darkPrimary(): string {\n return this.derived.tokens.dark['--mj-brand-primary'];\n }\n\n /** Secondary (deep brand) derived for light mode. */\n public get secondaryColor(): string {\n return this.derived.tokens.light['--mj-brand-secondary'];\n }\n\n public editViz(index: number, event: Event): void {\n const color = (event.target as HTMLInputElement).value;\n const arr = [...(this.seeds.vizPalette ?? this.vizColors)];\n arr[index] = color;\n this.seeds.vizPalette = arr;\n this.recompute();\n this.publishAgentContextDebounced();\n }\n\n public resetViz(): void {\n delete this.seeds.vizPalette;\n this.recompute();\n }\n\n /**\n * Push the derived token map onto the preview canvas as scoped CSS vars — the\n * fidelity guarantee. Also sets preview-only density/size vars and the mode attr so\n * any [data-theme=\"dark\"] rules inside the canvas resolve. Stale keys from removed\n * overrides (e.g. a recipe toggled off) are cleared before re-applying.\n */\n private applyPreviewVars(): void {\n const el = this.previewCanvas?.nativeElement;\n if (!el) return;\n // Advanced token overrides win, layered last — mirrors emitOverlayCss's merge order.\n const vars = { ...this.derived.overlayVars, ...this.derived.tokens[this.previewMode], ...this.tokenOverrides };\n for (const k of this.appliedVarKeys) {\n if (!(k in vars)) el.style.removeProperty(k);\n }\n this.appliedVarKeys = new Set(Object.keys(vars));\n for (const [k, v] of Object.entries(vars)) {\n el.style.setProperty(k, v);\n }\n el.style.setProperty('--ts-space', `${this.density}px`);\n el.style.setProperty('--ts-fs', `${this.baseFontSize}px`);\n el.setAttribute('data-theme', this.previewMode);\n this.applyPreviewCustomCss(el);\n }\n\n /** Inject the raw custom CSS into the preview, scoped to the canvas so it only affects\n * the preview (approximate — the mock's markup differs from live chrome selectors). */\n private applyPreviewCustomCss(el: HTMLElement): void {\n const STYLE_ID = 'ts-preview-custom';\n let style = el.querySelector<HTMLStyleElement>(`style#${STYLE_ID}`);\n const css = this.customCss.trim();\n if (!css) {\n style?.remove();\n return;\n }\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n el.appendChild(style);\n }\n el.setAttribute('data-ts-preview', '1');\n // Same hoist-then-scope as the live overlay so @keyframes/@font-face work in preview too.\n style.textContent = emitScopedCustomCss('[data-ts-preview=\"1\"]', css);\n }\n\n // ========================================\n // Advanced customization — token browser + recipes + raw CSS\n // ========================================\n\n /** Token names in the derived contract (completion, insert picker, validation). */\n public get overridableTokens(): string[] {\n const names = new Set([...Object.keys(this.derived.overlayVars), ...Object.keys(this.derived.tokens.light)]);\n return Array.from(names).sort();\n }\n\n /** Overrides/custom CSS don't change derivation — re-apply the preview layer, refresh\n * the browser rows + recipe states, and keep any live workspace preview in sync. */\n public onAdvancedChanged(): void {\n this.applyPreviewVars();\n this.rebuildTokenBrowser();\n this.refreshWorkspacePreviewDebounced();\n this.publishAgentContextDebounced();\n }\n\n /** Expand/collapse the Advanced card, auto-widening the panel while it's open (Q3#2). */\n public toggleAdvanced(): void {\n this.advancedOpen = !this.advancedOpen;\n this.syncPanelWidth();\n }\n\n /** Closed-state summary — \"3 token overrides · 14 lines CSS\" (Q3#7). */\n public get advancedSummary(): string | null {\n const overrideCount = Object.keys(this.tokenOverrides).length;\n const cssLines = this.customCss.trim() ? this.customCss.trim().split('\\n').length : 0;\n if (!overrideCount && !cssLines) return null;\n const parts: string[] = [];\n if (overrideCount) parts.push(`${overrideCount} token override${overrideCount === 1 ? '' : 's'}`);\n if (cssLines) parts.push(`${cssLines} line${cssLines === 1 ? '' : 's'} CSS`);\n return parts.join(' · ');\n }\n\n // ---- Visual token browser (Q2#1) ----\n\n /** Rebuild the grouped, searchable token rows. */\n private rebuildTokenBrowser(): void {\n const q = this.tokenSearch.trim().toLowerCase();\n const names = new Set([\n ...Object.keys(this.derived.overlayVars),\n ...Object.keys(this.derived.tokens.light),\n ...Object.keys(this.tokenOverrides),\n ]);\n const groups: TokenGroup[] = TOKEN_CATEGORIES.map((c) => ({ key: c.key, label: c.label, rows: [], modified: 0 }));\n const other: TokenGroup = { key: 'other', label: 'Other', rows: [], modified: 0 };\n for (const name of Array.from(names).sort()) {\n if (q && !name.toLowerCase().includes(q)) continue;\n const derivedVal = this.derived.tokens[this.previewMode][name] ?? this.derived.overlayVars[name] ?? '';\n const overridden = name in this.tokenOverrides;\n const value = overridden ? this.tokenOverrides[name] : derivedVal;\n const hex = /^#[0-9a-fA-F]{6}$/.test(value.trim());\n const row: TokenRow = { name, value, overridden, isColor: hex, colorValue: hex ? value.trim() : '#000000' };\n const catIndex = TOKEN_CATEGORIES.findIndex((c) => c.match.test(name));\n const group = catIndex >= 0 ? groups[catIndex] : other;\n group.rows.push(row);\n if (overridden) group.modified++;\n }\n this.tokenGroups = [...groups, other].filter((g) => g.rows.length > 0);\n }\n\n public onTokenSearchChanged(): void {\n this.rebuildTokenBrowser();\n }\n\n public toggleTokenCategory(key: string): void {\n if (this.openTokenCats.has(key)) {\n this.openTokenCats.delete(key);\n } else {\n this.openTokenCats.add(key);\n }\n }\n\n /** A category is open when toggled open, or always while a search narrows the rows. */\n public isTokenCategoryOpen(key: string): boolean {\n return this.tokenSearch.trim().length > 0 || this.openTokenCats.has(key);\n }\n\n public setTokenOverride(name: string, value: string): void {\n this.tokenOverrides = { ...this.tokenOverrides, [name]: value };\n this.releaseRecipeOwnership(name);\n this.onAdvancedChanged();\n }\n\n public resetTokenOverride(name: string): void {\n const next = { ...this.tokenOverrides };\n delete next[name];\n this.tokenOverrides = next;\n this.releaseRecipeOwnership(name);\n if (this.editingToken === name) this.editingToken = null;\n this.onAdvancedChanged();\n }\n\n public onTokenColorInput(name: string, event: Event): void {\n this.setTokenOverride(name, (event.target as HTMLInputElement).value);\n }\n\n /** Begin inline text editing for a non-color token value. */\n public beginTokenEdit(row: TokenRow): void {\n this.editingToken = row.name;\n this.editingTokenValue = row.value;\n this.editingTokenOriginal = row.value;\n this.editingTokenWasOverridden = row.overridden;\n }\n\n public commitTokenEdit(): void {\n if (!this.editingToken) return;\n const name = this.editingToken;\n const value = this.editingTokenValue.trim();\n this.editingToken = null;\n // An unchanged, previously-underived value is a no-op — don't mark it modified.\n if (!value || (!this.editingTokenWasOverridden && value === this.editingTokenOriginal)) return;\n this.setTokenOverride(name, value);\n }\n\n public cancelTokenEdit(): void {\n this.editingToken = null;\n }\n\n // ---- Reverse highlight (Q2#2): token row hover → outline preview elements ----\n\n /** Outline the preview elements that use `token` (exact by construction — the canvas\n * markup is ours; see TOKEN_PREVIEW_TARGETS). Unmapped tokens simply don't highlight. */\n public highlightTokenTargets(token: string): void {\n const canvas = this.previewCanvas?.nativeElement;\n if (!canvas) return;\n const selectors = TOKEN_PREVIEW_TARGETS[token];\n if (!selectors?.length) {\n this.clearTokenHighlight();\n return;\n }\n if (!this.tokenHighlightEl || !this.tokenHighlightEl.isConnected) {\n this.tokenHighlightEl = document.createElement('style');\n this.tokenHighlightEl.id = 'ts-token-highlight';\n canvas.appendChild(this.tokenHighlightEl);\n }\n const scoped = selectors.map((s) => `.ts-canvas ${s}`).join(', ');\n // Fixed magenta on purpose: an inspector affordance that must stand out on any theme.\n this.tokenHighlightEl.textContent = `${scoped} { outline: 2px solid #e935c1 !important; outline-offset: 2px; }`;\n }\n\n public clearTokenHighlight(): void {\n if (this.tokenHighlightEl) this.tokenHighlightEl.textContent = '';\n }\n\n // ---- Recipes (Q2#3) — provenance-tracked ----\n\n /** Toggle a recipe: expand its token set into overrides (recording ownership), or\n * remove exactly the keys it still owns. Keys the user hand-edited after enabling\n * were released from ownership at edit time and are never touched here. */\n public toggleRecipe(recipe: ThemeRecipe): void {\n const owned = this.activeRecipeKeys.get(recipe.id);\n const next = { ...this.tokenOverrides };\n if (owned) {\n for (const k of owned) delete next[k];\n this.activeRecipeKeys.delete(recipe.id);\n } else {\n const tokens = recipe.tokens(this.derived, this.seeds);\n const keys = Object.keys(tokens);\n if (keys.length === 0) return;\n Object.assign(next, tokens);\n this.activeRecipeKeys.set(recipe.id, keys);\n }\n this.tokenOverrides = next;\n this.refreshRecipeStates();\n this.onAdvancedChanged();\n }\n\n /** Derive the on/off rows shown in the Recipes card from the provenance map. */\n private refreshRecipeStates(): void {\n this.recipeStates = THEME_RECIPES.map((recipe) => ({ recipe, on: this.activeRecipeKeys.has(recipe.id) }));\n }\n\n /** A hand edit (set or reset) takes ownership of `name` away from any active recipe,\n * so recipe toggle-off / re-expansion never clobbers or deletes the user's value.\n * A recipe left with no owned keys is effectively off. */\n private releaseRecipeOwnership(name: string): void {\n let changed = false;\n for (const [id, keys] of this.activeRecipeKeys) {\n if (!keys.includes(name)) continue;\n const remaining = keys.filter((k) => k !== name);\n if (remaining.length > 0) {\n this.activeRecipeKeys.set(id, remaining);\n } else {\n this.activeRecipeKeys.delete(id);\n }\n changed = true;\n }\n if (changed) this.refreshRecipeStates();\n }\n\n /** Re-expand active recipes from the CURRENT derived theme so their values follow the\n * brand as seeds change. Only recipe-owned keys are rewritten; keys a recipe no\n * longer produces are dropped from both the overrides and the ownership record. */\n private reexpandActiveRecipes(): void {\n if (this.activeRecipeKeys.size === 0) return;\n const next = { ...this.tokenOverrides };\n for (const recipe of THEME_RECIPES) {\n const owned = this.activeRecipeKeys.get(recipe.id);\n if (!owned) continue;\n const tokens = recipe.tokens(this.derived, this.seeds);\n const remaining: string[] = [];\n for (const key of owned) {\n if (key in tokens) {\n next[key] = tokens[key];\n remaining.push(key);\n } else {\n delete next[key];\n }\n }\n if (remaining.length > 0) {\n this.activeRecipeKeys.set(recipe.id, remaining);\n } else {\n this.activeRecipeKeys.delete(recipe.id);\n }\n }\n this.tokenOverrides = next;\n this.refreshRecipeStates();\n }\n\n /** Rebuild provenance for a freshly loaded override set (no stored provenance):\n * a recipe is considered active only when every key it would produce is present\n * with EXACTLY the value it would produce — since active recipes track the seeds\n * (see reexpandActiveRecipes), a saved active recipe always value-matches. */\n private inferActiveRecipes(): void {\n this.activeRecipeKeys.clear();\n for (const recipe of THEME_RECIPES) {\n const tokens = recipe.tokens(this.derived, this.seeds);\n const keys = Object.keys(tokens);\n if (keys.length > 0 && keys.every((k) => this.tokenOverrides[k] === tokens[k])) {\n this.activeRecipeKeys.set(recipe.id, keys);\n }\n }\n this.refreshRecipeStates();\n }\n\n // ---- Custom CSS editor (Q3#4/#5/#6) ----\n\n public onCssEditorChange(value: string): void {\n this.customCss = value;\n this.validateCustomCss();\n this.onAdvancedChanged();\n }\n\n /** All completions offered: real chrome selectors + the theme's derived token names. */\n private get cssSuggestions(): string[] {\n return [...MJ_CHROME_SELECTORS, ...this.overridableTokens];\n }\n\n /** CodeMirror completion source over the MJ chrome selectors + `--mj-*` tokens. */\n private mjCssCompletionSource(context: CompletionContext): CompletionResult | null {\n const word = context.matchBefore(/[-\\w.]+/);\n if (!word || (word.text.length < 2 && !context.explicit)) return null;\n return {\n from: word.from,\n options: this.cssSuggestions.map((s) => ({ label: s, type: s.startsWith('--') ? 'variable' : 'type' })),\n validFor: /^[-\\w.]*$/,\n };\n }\n\n /** Insert a chrome selector at the caret; on an empty line, scaffold a full rule. */\n public insertChromeSelector(selector: string): void {\n const view = this.cssCm?.view;\n if (!view) {\n const prefix = this.customCss.trim() ? `${this.customCss.replace(/\\s+$/, '')}\\n\\n` : '';\n this.onCssEditorChange(`${prefix}${selector} {\\n \\n}`);\n return;\n }\n const pos = view.state.selection.main.head;\n const line = view.state.doc.lineAt(pos);\n if (line.text.trim().length === 0) {\n const opener = `${selector} {\\n `;\n view.dispatch({\n changes: { from: pos, insert: `${opener}\\n}` },\n selection: { anchor: pos + opener.length },\n });\n } else {\n view.dispatch({\n changes: { from: pos, insert: selector },\n selection: { anchor: pos + selector.length },\n });\n }\n view.focus();\n }\n\n /** Insert-token picker (same enumeration the overrides use). */\n public onInsertTokenPick(event: Event): void {\n const select = event.target as HTMLSelectElement;\n const token = select.value;\n select.value = '';\n if (!token) return;\n const text = `var(${token})`;\n const view = this.cssCm?.view;\n if (!view) {\n this.onCssEditorChange(this.customCss + text);\n return;\n }\n const pos = view.state.selection.main.head;\n view.dispatch({ changes: { from: pos, insert: text }, selection: { anchor: pos + text.length } });\n view.focus();\n }\n\n /** Inline validation at edit time (Q3#6): @import removal + unknown --mj-* names. */\n private validateCustomCss(): void {\n this.cssWarnings = buildCssWarnings(this.customCss, this.knownMjTokens());\n }\n\n /** The full known --mj-* set: the derived contract ∪ every token the live app defines. */\n private knownMjTokens(): Set<string> {\n const known = new Set(this.overridableTokens);\n for (const t of this.collectLiveMjTokens()) known.add(t);\n return known;\n }\n\n /** Scan loaded stylesheets for every defined `--mj-*` custom property, so the\n * unknown-name warning validates against the real base contract (no false positives\n * on base tokens outside the derived overlay, e.g. --mj-shadow-sm). Re-scans when\n * the stylesheet count changes (lazy-loaded chunks add sheets after first scan). */\n private collectLiveMjTokens(): Set<string> {\n if (this.liveTokenCache && document.styleSheets.length === this.liveTokenCacheSheetCount) {\n return this.liveTokenCache;\n }\n this.liveTokenCacheSheetCount = document.styleSheets.length;\n const set = new Set<string>();\n for (const sheet of Array.from(document.styleSheets)) {\n let rules: CSSRuleList;\n try {\n rules = sheet.cssRules;\n } catch {\n continue; // cross-origin sheet\n }\n for (const rule of Array.from(rules)) {\n this.collectTokensFromRule(rule, set);\n }\n }\n this.liveTokenCache = set;\n return set;\n }\n\n private collectTokensFromRule(rule: CSSRule, set: Set<string>): void {\n if (rule instanceof CSSStyleRule) {\n for (const prop of Array.from(rule.style)) {\n if (prop.startsWith('--mj-')) set.add(prop);\n }\n }\n const children = (rule as CSSGroupingRule).cssRules;\n if (children) {\n for (const child of Array.from(children)) {\n this.collectTokensFromRule(child, set);\n }\n }\n }\n\n /** The actual overlay CSS this theme produces (tokens + advanced layer) — read-only view. */\n public get generatedCss(): string {\n return emitOverlayCss(this.currentThemeId ?? 'preview', this.derived, {\n overrides: this.tokenOverrides,\n customCss: this.customCss,\n });\n }\n\n public async copyGeneratedCss(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.generatedCss);\n this.notify('Generated CSS copied to clipboard.');\n } catch {\n this.notify('Copy failed — select the text and copy manually.');\n }\n }\n\n // ========================================\n // View / panel / fullscreen chrome\n // ========================================\n\n public setView(view: PreviewSurface): void {\n this.activeView = view;\n }\n\n public setPreviewMode(mode: 'light' | 'dark'): void {\n this.previewMode = mode;\n this.applyPreviewVars();\n this.rebuildTokenBrowser();\n this.publishAgentContextDebounced();\n }\n\n /** mj-view-toggle (KeyChange) adapter for the light/dark segment. */\n public onModeToggle(key: string): void {\n this.setPreviewMode(key === 'dark' ? 'dark' : 'light');\n }\n\n /** mj-view-toggle (KeyChange) adapter for the preview-surface chips. */\n public onSurfaceToggle(key: string): void {\n this.setView(key === 'artifact' ? 'artifact' : 'explorer');\n this.publishAgentContextDebounced();\n }\n\n public togglePanel(): void {\n this.panelCollapsed = !this.panelCollapsed;\n this.publishAgentContextDebounced();\n }\n\n // ---- Panel resize (Q3#1): drag handle, clamped, persisted per user ----\n\n /** Clamp a requested panel width: >= the design minimum, <= 55% of the stage, and\n * never eating the canvas below its ~640px floor (the resize clamps, not the preview). */\n private clampPanelWidth(width: number): number {\n const stageWidth = this.stageEl?.nativeElement.clientWidth ?? window.innerWidth;\n const max = Math.max(PANEL_MIN_WIDTH, Math.min(stageWidth * PANEL_MAX_FRACTION, stageWidth - PREVIEW_MIN_WIDTH));\n return Math.round(Math.min(max, Math.max(PANEL_MIN_WIDTH, width)));\n }\n\n /** Manually-dragged width wins; otherwise auto-widen while Advanced is open (Q3#2). */\n private syncPanelWidth(): void {\n this.panelWidth = this.clampPanelWidth(this.manualPanelWidth ?? (this.advancedOpen ? PANEL_ADVANCED_WIDTH : PANEL_MIN_WIDTH));\n }\n\n private loadPersistedPanelWidth(): void {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(PANEL_WIDTH_KEY);\n const parsed = raw ? parseInt(raw, 10) : NaN;\n if (Number.isFinite(parsed) && parsed >= PANEL_MIN_WIDTH) {\n this.manualPanelWidth = parsed;\n }\n } catch {\n // no persisted width — defaults apply\n }\n this.syncPanelWidth();\n }\n\n public startPanelResize(event: PointerEvent): void {\n event.preventDefault();\n const handle = event.target as HTMLElement;\n this.panelResizing = true;\n const startX = event.clientX;\n const startWidth = this.panelWidth;\n const onMove = (e: PointerEvent) => {\n this.panelWidth = this.clampPanelWidth(startWidth + (startX - e.clientX));\n this.cdRef.detectChanges();\n };\n const end = () => {\n handle.removeEventListener('pointermove', onMove);\n handle.removeEventListener('pointerup', end);\n handle.removeEventListener('pointercancel', end);\n this.panelResizing = false;\n this.manualPanelWidth = this.panelWidth;\n UserInfoEngine.Instance.SetSettingDebounced(PANEL_WIDTH_KEY, String(this.panelWidth));\n this.cdRef.detectChanges();\n };\n // Pointer capture routes all events to the handle until release: drags ending\n // outside the window still fire pointerup, pointercancel (touch interruption) is\n // handled, and the listeners die with the element if the component is destroyed.\n handle.setPointerCapture(event.pointerId);\n handle.addEventListener('pointermove', onMove);\n handle.addEventListener('pointerup', end);\n handle.addEventListener('pointercancel', end);\n }\n\n @HostListener('window:resize')\n public onWindowResize(): void {\n this.syncPanelWidth();\n }\n\n /** Prefer the native Fullscreen API — it promotes the canvas to the browser's top\n * layer, so it fills the real screen regardless of any transformed/`contain`ed\n * ancestor, and browser Esc reliably exits. Falls back to CSS-fixed overlay if the\n * API is unavailable or rejects. */\n public async toggleFullscreen(on: boolean): Promise<void> {\n try {\n if (on) {\n const el = this.previewCanvas?.nativeElement;\n if (el?.requestFullscreen) {\n await el.requestFullscreen();\n return; // state syncs via fullscreenchange\n }\n } else if (document.fullscreenElement) {\n await document.exitFullscreen();\n return;\n }\n } catch {\n /* fall through to CSS fallback */\n }\n this.fullscreen = on;\n this.cdRef.detectChanges();\n }\n\n @HostListener('document:fullscreenchange')\n public onFullscreenChange(): void {\n this.fullscreen = !!document.fullscreenElement;\n this.cdRef.detectChanges();\n }\n\n @HostListener('document:keydown.escape')\n public onEscape(): void {\n if (this.presetGalleryOpen) {\n this.presetGalleryOpen = false;\n this.cdRef.detectChanges();\n return;\n }\n // Only needed for the CSS fallback; native fullscreen handles Esc itself.\n if (this.fullscreen && !document.fullscreenElement) {\n this.fullscreen = false;\n this.cdRef.detectChanges();\n }\n }\n\n public onDensityChanged(): void {\n this.applyPreviewVars();\n }\n\n public onBaseSizeChanged(): void {\n this.applyPreviewVars();\n }\n\n // ========================================\n // Editing\n // ========================================\n\n public applyPreset(preset: ThemePreset): void {\n this.seeds = { ...preset.seeds };\n if (!this.currentThemeId) {\n this.currentName = this.uniqueName(preset.name);\n }\n this.recompute();\n }\n\n private uniqueName(base: string): string {\n const taken = new Set(this.themes.map((t) => t.name.trim().toLowerCase()));\n if (!taken.has(base.trim().toLowerCase())) return base;\n for (let i = 2; i < 1000; i++) {\n const candidate = `${base} ${i}`;\n if (!taken.has(candidate.toLowerCase())) return candidate;\n }\n return `${base} ${Date.now()}`;\n }\n\n public onSeedsChanged(): void {\n this.recompute();\n this.publishAgentContextDebounced();\n }\n\n public async selectTheme(item: ThemeListItem): Promise<void> {\n this.themePickerOpen = false;\n const md = this.ProviderToUse;\n const entity = await md.GetEntityObject<MJThemeEntity>('MJ: Themes');\n if (!(await entity.Load(item.id))) {\n this.cdRef.detectChanges();\n return;\n }\n this.currentThemeId = entity.ID;\n this.currentName = entity.Name;\n try {\n this.seeds = { ...MJ_DEFAULT_SEEDS, ...(JSON.parse(entity.Seeds) as ThemeSeeds) };\n } catch {\n this.seeds = { ...MJ_DEFAULT_SEEDS };\n }\n this.tokenOverrides = parseOverridesJson(entity.Overrides);\n this.customCss = entity.CustomCSS ?? '';\n this.validateCustomCss();\n // Provenance from the outgoing theme must not survive into the loaded one; the\n // loaded overrides carry no provenance, so rebuild it by exact value match.\n this.activeRecipeKeys.clear();\n this.recompute();\n this.inferActiveRecipes();\n this.publishAgentContext();\n // Async continuation under the OnPush resource wrapper: refresh the header pill,\n // editor inputs, and preview now that the loaded theme is in place.\n this.cdRef.detectChanges();\n }\n\n public get currentIsDefault(): boolean {\n const id = this.currentThemeId;\n return id ? this.themes.find((t) => UUIDsEqual(t.id, id))?.isDefault ?? false : false;\n }\n\n /** Whether a picker row is the currently-loaded theme (case-insensitive GUID compare). */\n public isCurrentTheme(id: string): boolean {\n return !!this.currentThemeId && UUIDsEqual(id, this.currentThemeId);\n }\n\n /** The protected built-in theme is read-only — editing/saving over it is blocked. */\n public get isBuiltInSelected(): boolean {\n return isBuiltInTheme(this.currentThemeId);\n }\n\n /** Fork the current seeds into a new, editable theme (used to customize the built-in). */\n public saveAsCopy(): void {\n this.currentThemeId = null;\n this.currentName = this.uniqueName(`${this.currentName} Copy`);\n this.notify(`Editing a copy — \"${this.currentName}\". Save to create it.`);\n }\n\n /** Inline-rename the current theme in the header. For a saved theme the new name is\n * persisted immediately on commit; for an unsaved draft it persists on Save. */\n public startRename(): void {\n if (this.isBuiltInSelected) {\n this.notify('The built-in theme is read-only — use \"Save as copy\" to rename it.');\n return;\n }\n this.nameBackup = this.currentName;\n this.editingName = true;\n setTimeout(() => this.nameInput?.nativeElement.select());\n }\n\n public async commitRename(): Promise<void> {\n if (!this.editingName) return;\n this.editingName = false;\n this.currentName = this.currentName.trim() || this.nameBackup || 'Untitled theme';\n // No change, unsaved draft, or built-in → nothing to persist now.\n if (this.currentName === this.nameBackup || !this.currentThemeId || this.isBuiltInSelected) return;\n try {\n const md = this.ProviderToUse;\n const entity = await md.GetEntityObject<MJThemeEntity>('MJ: Themes');\n if (!(await entity.Load(this.currentThemeId))) return;\n entity.Name = this.currentName;\n if (await entity.Save()) {\n await this.loadData();\n this.themeService.NotifyThemesChanged();\n this.notify(`Renamed to \"${this.currentName}\".`);\n } else {\n const msg = entity.LatestResult?.CompleteMessage ?? 'unknown error';\n this.currentName = this.nameBackup;\n this.notify(/UQ_Theme_Name|UNIQUE KEY/i.test(msg) ? `A theme named \"${entity.Name}\" already exists — choose a different name.` : `Rename failed: ${msg}`, 'error');\n }\n } catch (e) {\n this.currentName = this.nameBackup;\n this.notify(`Rename failed: ${e instanceof Error ? e.message : String(e)}`, 'error');\n } finally {\n this.cdRef.detectChanges();\n }\n }\n\n public cancelRename(): void {\n this.currentName = this.nameBackup;\n this.editingName = false;\n }\n\n /**\n * Start a fresh, unsaved draft. From the UI this opens on the preset gallery\n * (choosing a personality first, Q1#2); agent-driven calls skip straight to the\n * MJ default seeds.\n */\n public newTheme(showGallery = true): void {\n this.themePickerOpen = false;\n this.currentThemeId = null;\n this.currentName = 'New Theme';\n this.seeds = { ...MJ_DEFAULT_SEEDS };\n this.tokenOverrides = {};\n this.customCss = '';\n this.cssWarnings = [];\n this.activeRecipeKeys.clear();\n this.refreshRecipeStates();\n this.recompute();\n this.presetGalleryOpen = showGallery;\n if (showGallery) this.focusPresetGallery();\n }\n\n /** Move focus into the gallery once it renders — aria-modal without focus is a trap\n * for keyboard/AT users (Esc + Tab must operate on the dialog, not what's behind it). */\n private focusPresetGallery(): void {\n setTimeout(() => this.galDialog?.nativeElement.focus());\n }\n\n /** Preset gallery: pick a personality card as step one of a new theme. */\n public choosePreset(preset: ThemePreset): void {\n this.presetGalleryOpen = false;\n this.applyPreset(preset);\n this.cdRef.detectChanges();\n }\n\n /** Close the gallery keeping the MJ-default draft (the \"start blank\" path). */\n public closePresetGallery(): void {\n this.presetGalleryOpen = false;\n }\n\n public discard(): void {\n const id = this.currentThemeId;\n const current = id ? this.themes.find((t) => UUIDsEqual(t.id, id)) : undefined;\n if (current) {\n this.selectTheme(current);\n } else {\n this.newTheme(false);\n }\n }\n\n // ========================================\n // Persistence\n // ========================================\n\n public async save(): Promise<void> {\n if (this.isBuiltInSelected) {\n this.notify('The built-in theme is read-only — use \"Save as copy\" to customize it.');\n return;\n }\n const name = this.currentName.trim();\n if (!name) {\n this.notify('Give the theme a name before saving.');\n return;\n }\n // If this isn't already a loaded theme but the name matches an existing one, treat\n // Save as an UPDATE to that theme (names are unique, so a match is unambiguous) —\n // rather than blocking and forcing the user to make a new theme.\n if (!this.currentThemeId) {\n const existing = this.themes.find((t) => t.name.trim().toLowerCase() === name.toLowerCase());\n if (existing) {\n if (isBuiltInTheme(existing.id)) {\n this.notify('The built-in theme is read-only — rename it to save a copy.');\n return;\n }\n this.currentThemeId = existing.id;\n }\n }\n this.saving = true;\n try {\n const md = this.ProviderToUse;\n const entity = await md.GetEntityObject<MJThemeEntity>('MJ: Themes');\n if (this.currentThemeId) {\n if (!(await entity.Load(this.currentThemeId))) {\n this.notify('Could not load the theme to update — it may have been deleted. Refresh and try again.', 'error');\n return;\n }\n } else {\n entity.NewRecord();\n entity.Status = 'Active';\n }\n entity.Name = name;\n entity.Seeds = JSON.stringify(this.seeds);\n entity.Overrides = Object.keys(this.tokenOverrides).length ? JSON.stringify(this.tokenOverrides) : null;\n entity.CustomCSS = this.customCss.trim() || null;\n if (await entity.Save()) {\n const wasNew = !this.currentThemeId;\n this.currentThemeId = entity.ID;\n // While the draft preview is on, BrandOverlayId is the preview id — the theme\n // the user actually has applied is the one the preview will restore.\n const liveOverlayId = this.workspacePreviewOn ? this.priorOverlayId : this.themeService.BrandOverlayId;\n if (UUIDsEqual(liveOverlayId, entity.ID) || (!wasNew && entity.IsDefault)) {\n await this.applyLive();\n }\n await this.loadData();\n this.themeService.NotifyThemesChanged();\n this.notify(`Saved \"${entity.Name}\".`);\n } else {\n this.notify(`Save failed: ${entity.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error');\n }\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.notify(/UQ_Theme_Name|UNIQUE KEY/i.test(msg) ? `A theme named \"${name}\" already exists — choose a different name.` : `Save failed: ${msg}`, 'error');\n } finally {\n this.saving = false;\n this.cdRef.detectChanges();\n }\n }\n\n public async setAsDefault(): Promise<void> {\n if (this.currentThemeId) await this.setDefaultById(this.currentThemeId);\n }\n\n /**\n * Make theme `id` the single org default and apply it live. Clears any other\n * default first (app-layer enforcement — there is no DB unique index), then applies\n * the persisted seeds via ThemeService so the running app re-themes immediately.\n */\n private async setDefaultById(id: string): Promise<void> {\n try {\n const md = this.ProviderToUse;\n const rv = new RunView();\n const others = await rv.RunView<MJThemeEntity>({\n EntityName: 'MJ: Themes',\n ExtraFilter: `IsDefault = 1 AND ID <> '${id}'`,\n ResultType: 'entity_object',\n });\n if (others.Success) {\n for (const other of others.Results) {\n other.IsDefault = false;\n if (!(await other.Save())) {\n this.notify(`Could not clear the previous default \"${other.Name}\": ${other.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error');\n return;\n }\n }\n }\n const entity = await md.GetEntityObject<MJThemeEntity>('MJ: Themes');\n if (!(await entity.Load(id))) return;\n entity.IsDefault = true;\n if (!(await entity.Save())) {\n this.notify(`Could not set default: ${entity.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error');\n return;\n }\n let seeds: ThemeSeeds;\n try {\n seeds = { ...MJ_DEFAULT_SEEDS, ...(JSON.parse(entity.Seeds) as ThemeSeeds) };\n } catch {\n seeds = { ...MJ_DEFAULT_SEEDS };\n }\n this.abandonWorkspacePreview();\n this.themeService.RegisterBrandTheme({ id: entity.ID, name: entity.Name, seeds, overrides: entity.Overrides, customCss: entity.CustomCSS });\n await this.themeService.ApplyBrandOverlay(entity.ID);\n await this.loadData();\n this.themeService.NotifyThemesChanged();\n this.notify(`\"${entity.Name}\" is now the default and is applied.`);\n } catch (e) {\n this.notify(`Could not set default: ${e instanceof Error ? e.message : String(e)}`, 'error');\n } finally {\n this.cdRef.detectChanges();\n }\n }\n\n /** Apply the current (edited) theme to the live app via ThemeService (used on save). */\n private async applyLive(): Promise<void> {\n if (!this.currentThemeId) return;\n // A real apply supersedes any draft workspace preview — abandon it (no restore;\n // the overlay applied below takes over) so a later toggle-off can't revert this.\n this.abandonWorkspacePreview();\n this.themeService.RegisterBrandTheme({\n id: this.currentThemeId,\n name: this.currentName,\n seeds: this.seeds,\n overrides: this.tokenOverrides,\n customCss: this.customCss,\n });\n await this.themeService.ApplyBrandOverlay(this.currentThemeId);\n }\n\n /**\n * Apply this theme to the current user's workspace now and remember it as their\n * choice (persists across sessions). Distinct from \"Set as org default\", which is\n * the organization-wide fallback for everyone.\n */\n public async applyToMe(): Promise<void> {\n if (!this.currentThemeId) return;\n await this.applyLive();\n await this.themeService.SetSelectedBrandTheme(this.currentThemeId);\n this.notify(`Applied \"${this.currentName}\" to your workspace — it stays applied across sessions.`);\n this.cdRef.detectChanges();\n }\n\n // ---- \"Preview on my workspace\" (Q3#8): draft against the REAL chrome ----\n\n /**\n * Temporarily apply the in-memory draft (seeds + overrides + custom CSS) to the real\n * app chrome so custom-CSS selectors are authored against reality. The preview stays\n * on while you navigate other tabs (that's the point — the Studio tab is cached, not\n * destroyed) and reverts on toggle-off or when the Studio tab is closed. It is never\n * persisted ({ persist: false }), so a reload always restores the user's real theme.\n */\n public async toggleWorkspacePreview(): Promise<void> {\n if (this.workspacePreviewOn) {\n await this.endWorkspacePreview();\n return;\n }\n this.priorOverlayId = this.themeService.BrandOverlayId;\n this.registerDraftPreview();\n await this.themeService.ApplyBrandOverlay(WORKSPACE_PREVIEW_ID, { persist: false });\n this.workspacePreviewOn = true;\n this.notify('Draft applied to your workspace for preview — edits update live. Toggle off to revert.', 'info');\n this.cdRef.detectChanges();\n }\n\n private registerDraftPreview(): void {\n this.themeService.RegisterBrandTheme({\n id: WORKSPACE_PREVIEW_ID,\n name: `${this.currentName} (draft preview)`,\n seeds: this.seeds,\n overrides: this.tokenOverrides,\n customCss: this.customCss,\n });\n }\n\n /** While the workspace preview is on, keep it tracking the draft (debounced). */\n private refreshWorkspacePreviewDebounced(): void {\n if (!this.workspacePreviewOn) return;\n clearTimeout(this.workspacePreviewTimer);\n this.workspacePreviewTimer = setTimeout(() => {\n if (!this.workspacePreviewOn) return;\n this.registerDraftPreview();\n void this.themeService.ApplyBrandOverlay(WORKSPACE_PREVIEW_ID, { persist: false });\n }, 400);\n }\n\n /** Drop the draft preview WITHOUT restoring the prior overlay — used when a real\n * apply (Apply to me / save-of-live-theme / set org default) is about to take over\n * the workspace, so a later toggle-off can't silently revert what the user applied. */\n private abandonWorkspacePreview(): void {\n if (!this.workspacePreviewOn) return;\n this.workspacePreviewOn = false;\n clearTimeout(this.workspacePreviewTimer);\n this.priorOverlayId = null;\n }\n\n private async endWorkspacePreview(notifyUser = true): Promise<void> {\n if (!this.workspacePreviewOn) return;\n this.workspacePreviewOn = false;\n clearTimeout(this.workspacePreviewTimer);\n if (this.priorOverlayId) {\n await this.themeService.ApplyBrandOverlay(this.priorOverlayId);\n } else {\n this.themeService.ClearBrandOverlay();\n }\n this.priorOverlayId = null;\n if (notifyUser) {\n this.notify('Workspace preview ended — your previous theme is back.');\n this.cdRef.detectChanges();\n }\n }\n\n private notify(message: string, style: 'success' | 'error' | 'info' = 'success'): void {\n MJNotificationService.Instance.CreateSimpleNotification(message, style, 2500);\n }\n\n // ---------------------------------------------------------------\n // Agent context + tools (read / preview-state / user-scoped only —\n // see the SAFETY BOUNDARY in theme-agent-context.ts)\n // ---------------------------------------------------------------\n\n private agentContextTimer: ReturnType<typeof setTimeout> | undefined;\n\n private summaryRows(): ThemeSummaryRow[] {\n return this.themes.map((t) => ({\n ID: t.id,\n Name: t.name,\n Status: 'Active',\n IsDefault: t.isDefault,\n BuiltIn: isBuiltInTheme(t.id),\n }));\n }\n\n private publishAgentContext(): void {\n this.navigationService.SetAgentContext(\n this,\n buildThemeStudioAgentContext({\n Themes: this.summaryRows(),\n CurrentThemeID: this.currentThemeId,\n CurrentThemeName: this.currentName,\n IsBuiltInSelected: this.isBuiltInSelected,\n PreviewMode: this.previewMode,\n PreviewSurface: this.activeView,\n EditorPanelOpen: !this.panelCollapsed,\n Seeds: this.seeds,\n OverrideTokenCount: Object.keys(this.tokenOverrides).length,\n HasCustomCss: this.customCss.trim().length > 0,\n Contrast: this.derived.contrast,\n })\n );\n }\n\n /** Coalesce slider-drag bursts into one context publish. */\n private publishAgentContextDebounced(): void {\n clearTimeout(this.agentContextTimer);\n this.agentContextTimer = setTimeout(() => this.publishAgentContext(), 300);\n }\n\n private registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'ListThemes',\n Description: 'Reload and return the saved brand themes available in the studio.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n await this.loadData();\n return { Success: true, Data: { ThemeNames: this.themes.map((t) => t.name).slice(0, 25) } };\n },\n },\n {\n Name: 'SelectTheme',\n Description: 'Load a saved theme into the editor, referenced by ID or name (partial, case-insensitive match accepted).',\n ParameterSchema: {\n type: 'object',\n properties: { theme: { type: 'string', description: 'The theme ID or name.' } },\n required: ['theme'],\n },\n Handler: async (params) => {\n const resolved = resolveThemeByIDOrName(this.summaryRows(), params['theme']);\n if (!resolved.ok) {\n return { Success: false, ErrorMessage: resolved.error };\n }\n const item = this.themes.find((t) => UUIDsEqual(t.id, resolved.value.ID));\n if (!item) {\n return { Success: false, ErrorMessage: 'Theme list changed — run ListThemes and retry.' };\n }\n await this.selectTheme(item);\n return { Success: true, Data: { CurrentThemeName: this.currentName } };\n },\n },\n {\n Name: 'NewTheme',\n Description: 'Start a fresh, unsaved theme draft from the MJ default seeds (nothing persists until the user saves).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.newTheme(false);\n this.cdRef.detectChanges();\n return { Success: true, Data: { CurrentThemeName: this.currentName } };\n },\n },\n {\n Name: 'ApplyPreset',\n Description: `Apply a named starting preset to the in-memory draft. Available presets: ${this.presets.map((p) => p.name).join(', ')}.`,\n ParameterSchema: {\n type: 'object',\n properties: { preset: { type: 'string', description: 'The preset name (partial match accepted).' } },\n required: ['preset'],\n },\n Handler: async (params) => {\n const ref = typeof params['preset'] === 'string' ? params['preset'].trim().toLowerCase() : '';\n const preset = this.presets.find((p) => p.name.toLowerCase() === ref)\n ?? this.presets.find((p) => p.name.toLowerCase().includes(ref));\n if (!ref || !preset) {\n return { Success: false, ErrorMessage: `Unknown preset. Available: ${this.presets.map((p) => p.name).join(', ')}.` };\n }\n this.presetGalleryOpen = false;\n this.applyPreset(preset);\n this.publishAgentContext();\n this.cdRef.detectChanges();\n return { Success: true, Data: { Preset: preset.name } };\n },\n },\n {\n Name: 'SetSeeds',\n Description: 'Update one or more brand seeds on the IN-MEMORY draft (preview only — the user saves from the UI). Colors are hex like #0076b6.',\n ParameterSchema: {\n type: 'object',\n properties: {\n primary: { type: 'string', description: 'Primary brand hex color.' },\n accent: { type: 'string', description: 'Accent hex color.' },\n tertiary: { type: 'string', description: 'Tertiary hex color.' },\n neutralChroma: { type: 'number', description: 'Brand tint in grays, 0–0.08.' },\n vibrancy: { type: 'number', description: 'Ramp saturation multiplier, 0.5–1.4.' },\n radius: { type: 'number', description: 'Base corner radius in px, 0–20.' },\n depth: { type: 'number', description: 'Brand shadow strength, 0–1.' },\n },\n },\n Handler: async (params) => this.handleSetSeeds(params),\n },\n {\n Name: 'SetPreviewMode',\n Description: \"Switch the preview between 'light' and 'dark'.\",\n ParameterSchema: {\n type: 'object',\n properties: { mode: { type: 'string', description: \"'light' | 'dark'\" } },\n required: ['mode'],\n },\n Handler: async (params) => {\n const mode = params['mode'];\n if (mode !== 'light' && mode !== 'dark') {\n return { Success: false, ErrorMessage: \"mode must be 'light' or 'dark'.\" };\n }\n this.setPreviewMode(mode);\n this.cdRef.detectChanges();\n return { Success: true, Data: { PreviewMode: this.previewMode } };\n },\n },\n {\n Name: 'SetPreviewSurface',\n Description: \"Switch the preview surface between 'explorer' (chrome style guide) and 'artifact' (generated report).\",\n ParameterSchema: {\n type: 'object',\n properties: { surface: { type: 'string', description: \"'explorer' | 'artifact'\" } },\n required: ['surface'],\n },\n Handler: async (params) => {\n const surface = params['surface'];\n if (surface !== 'explorer' && surface !== 'artifact') {\n return { Success: false, ErrorMessage: \"surface must be 'explorer' or 'artifact'.\" };\n }\n this.setView(surface);\n this.cdRef.detectChanges();\n return { Success: true, Data: { PreviewSurface: this.activeView } };\n },\n },\n {\n Name: 'ApplyToMe',\n Description: \"Apply the currently-loaded SAVED theme to the CURRENT USER's workspace (a per-user preference — not the org default). Fails on an unsaved draft.\",\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n if (!this.currentThemeId) {\n return { Success: false, ErrorMessage: 'The draft is unsaved — the user must save it first.' };\n }\n await this.applyToMe();\n return { Success: true, Data: { AppliedThemeName: this.currentName } };\n },\n },\n ]);\n }\n\n /** Validate + apply a partial seed update from the agent (clamped to the UI ranges). */\n private handleSetSeeds(params: Record<string, unknown>): { Success: boolean; Data?: Record<string, unknown>; ErrorMessage?: string } {\n const HEX = /^#[0-9a-fA-F]{6}$/;\n const clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n const next: ThemeSeeds = { ...this.seeds };\n let changed = 0;\n for (const key of ['primary', 'accent', 'tertiary'] as const) {\n const v = params[key];\n if (v !== undefined) {\n if (typeof v !== 'string' || !HEX.test(v.trim())) {\n return { Success: false, ErrorMessage: `${key} must be a 6-digit hex color like #0076b6.` };\n }\n next[key] = v.trim().toLowerCase();\n changed++;\n }\n }\n const numeric: Array<{ key: 'neutralChroma' | 'vibrancy' | 'radius' | 'depth'; lo: number; hi: number }> = [\n { key: 'neutralChroma', lo: 0, hi: 0.08 },\n { key: 'vibrancy', lo: 0.5, hi: 1.4 },\n { key: 'radius', lo: 0, hi: 20 },\n { key: 'depth', lo: 0, hi: 1 },\n ];\n for (const { key, lo, hi } of numeric) {\n const v = params[key];\n if (v !== undefined) {\n if (typeof v !== 'number' || !Number.isFinite(v)) {\n return { Success: false, ErrorMessage: `${key} must be a number between ${lo} and ${hi}.` };\n }\n next[key] = clamp(v, lo, hi);\n changed++;\n }\n }\n if (changed === 0) {\n return { Success: false, ErrorMessage: 'Provide at least one seed to change.' };\n }\n this.seeds = next;\n this.recompute();\n this.publishAgentContext();\n this.cdRef.detectChanges();\n return { Success: true, Data: { SeedsChanged: changed, ContrastPasses: this.derived.contrast.passes } };\n }\n}\n","<mj-page-layout>\n <mj-page-header Title=\"Theme Studio\" Icon=\"fa-solid fa-palette\" Subtitle=\"Organization theme & branding\">\n <!-- [meta] = state: which theme is loaded (picker) + its read-only flag. -->\n <div meta>\n <div class=\"theme-pick-wrap\">\n <div class=\"theme-pick\">\n <span class=\"sw\">\n <i [style.background]=\"seeds.primary\"></i>\n <i [style.background]=\"seeds.accent\"></i>\n <i [style.background]=\"seeds.tertiary\"></i>\n </span>\n @if (editingName) {\n <input #nameInput class=\"name-input\" [(ngModel)]=\"currentName\"\n (keydown.enter)=\"commitRename()\" (keydown.escape)=\"cancelRename()\" (blur)=\"commitRename()\"\n maxlength=\"80\" aria-label=\"Theme name\" />\n } @else {\n <b class=\"theme-name\" (dblclick)=\"startRename()\">{{ currentName }}</b>\n @if (!isBuiltInSelected) {\n <button type=\"button\" class=\"rename-btn\" title=\"Rename theme\" aria-label=\"Rename theme\" (click)=\"startRename()\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n }\n @if (currentIsDefault) { <span class=\"badge\">DEFAULT</span> }\n <button type=\"button\" class=\"pick-caret\" title=\"Switch theme\"\n aria-label=\"Switch theme\" (click)=\"toggleThemePicker()\">\n <i class=\"fa-solid fa-chevron-down caret\"></i>\n </button>\n </div>\n @if (themePickerOpen) {\n <div class=\"menu-backdrop\" (click)=\"themePickerOpen = false\"></div>\n <div class=\"theme-menu\">\n @for (t of themes; track t.id) {\n <button type=\"button\" class=\"theme-menu-item\" [class.on]=\"isCurrentTheme(t.id)\" (click)=\"selectTheme(t)\">\n <span class=\"sw\">\n @for (c of t.swatches; track $index) { <i [style.background]=\"c\"></i> }\n </span>\n <b>{{ t.name }}</b>\n @if (t.isDefault) { <span class=\"badge\">DEFAULT</span> }\n </button>\n }\n <button type=\"button\" class=\"theme-menu-new\" (click)=\"newTheme()\"><i class=\"fa-solid fa-plus\"></i> New theme</button>\n </div>\n }\n </div>\n @if (isBuiltInSelected) {\n <span class=\"readonly-note\"><i class=\"fa-solid fa-lock\"></i> Built-in · read-only</span>\n }\n @if (workspacePreviewOn) {\n <span class=\"preview-note\"><i class=\"fa-solid fa-eye\"></i> Draft previewing on your workspace</span>\n }\n </div>\n\n <!-- [actions] = verbs: secondary actions, then the one primary CTA rightmost. -->\n <div actions>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"discard()\">Discard</button>\n <button mjButton variant=\"outline\" size=\"sm\" [disabled]=\"!currentThemeId\"\n title=\"Apply this theme to your workspace now — it persists across sessions until you pick another\"\n (click)=\"applyToMe()\">Apply to me</button>\n <button mjButton variant=\"outline\" size=\"sm\" [disabled]=\"!currentThemeId\"\n title=\"Make this the organization-wide default theme for everyone\" (click)=\"setAsDefault()\">Set as org default</button>\n @if (isBuiltInSelected) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"saveAsCopy()\">Save as copy</button>\n } @else {\n <button mjButton variant=\"primary\" size=\"sm\" [disabled]=\"saving\" (click)=\"save()\">{{ saving ? 'Saving…' : 'Save theme' }}</button>\n }\n </div>\n\n <!-- [toolbar] = secondary controls: preview surface / mode, fullscreen, panel toggle. -->\n <div toolbar>\n <mj-view-toggle [Options]=\"surfaceOptions\" [ActiveKey]=\"activeView\"\n (KeyChange)=\"onSurfaceToggle($event)\"></mj-view-toggle>\n <span class=\"toolbar-spacer\"></span>\n <mj-view-toggle [Options]=\"modeOptions\" [ActiveKey]=\"previewMode\"\n (KeyChange)=\"onModeToggle($event)\"></mj-view-toggle>\n <button mjButton variant=\"icon\" ariaLabel=\"Full screen preview\" title=\"Full screen preview\"\n (click)=\"toggleFullscreen(true)\"><i class=\"fa-solid fa-expand\"></i></button>\n <button mjButton [variant]=\"panelCollapsed ? 'outline' : 'secondary'\" size=\"sm\"\n (click)=\"togglePanel()\"><i class=\"fa-solid fa-sliders\"></i> Edit theme</button>\n </div>\n </mj-page-header>\n\n <mj-page-body [Padding]=\"false\" [Flex]=\"true\">\n <!-- Stage: preview (primary) + slide panel -->\n <div #stage class=\"ts-stage\" [class.collapsed]=\"panelCollapsed\">\n\n <!-- New-theme preset gallery (Q1#2): pick a personality before tuning seeds.\n Deliberately NOT mj-dialog (conscious exception): the gallery is positioned\n within the stage so the preview stays visible behind it, while mj-dialog is\n a viewport-centered overlay. Focus lands on the dialog when it opens and\n the document-level Escape handler closes it. -->\n @if (presetGalleryOpen) {\n <div class=\"gal-backdrop\" (click)=\"closePresetGallery()\"></div>\n <div #galDialog class=\"gal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Start a new theme\" tabindex=\"-1\">\n <h2>Start a new theme</h2>\n <p class=\"gal-sub\">Pick a personality first — everything derives from a few seeds, so you can tune it all after.</p>\n <div class=\"gal-grid\">\n @for (p of presets; track p.name) {\n <button type=\"button\" class=\"gal-card\" (click)=\"choosePreset(p)\">\n <span class=\"gal-mock\" [style.border-radius.px]=\"p.seeds.radius ?? 8\">\n <span class=\"gal-mock-bar\" [style.background]=\"p.seeds.primary\"></span>\n <span class=\"gal-mock-body\">\n <span class=\"gal-line\"></span>\n <span class=\"gal-line short\"></span>\n <span class=\"gal-mock-row\">\n <span class=\"gal-dot\" [style.background]=\"p.seeds.accent ?? p.seeds.primary\"></span>\n <span class=\"gal-dot\" [style.background]=\"p.seeds.tertiary ?? p.seeds.accent ?? p.seeds.primary\"></span>\n <span class=\"gal-btn\" [style.background]=\"p.seeds.primary\"\n [style.border-radius.px]=\"(p.seeds.radius ?? 8) / 2\"></span>\n </span>\n </span>\n </span>\n <b>{{ p.name }}</b>\n </button>\n }\n </div>\n <div class=\"gal-foot\">\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"closePresetGallery()\">Start blank (MJ defaults)</button>\n </div>\n </div>\n }\n\n <div class=\"pv-wrap\">\n <div class=\"pv-inner\">\n <div #previewCanvas class=\"ts-canvas\" [class.fullscreen]=\"fullscreen\">\n <!-- Fullscreen floating controls (inside canvas so they render in the top layer) -->\n @if (fullscreen) {\n <div class=\"fs-bar\">\n <mj-view-toggle [Options]=\"modeOptions\" [ActiveKey]=\"previewMode\"\n (KeyChange)=\"onModeToggle($event)\"></mj-view-toggle>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"toggleFullscreen(false)\">Exit full screen <span class=\"kbd\">Esc</span></button>\n </div>\n }\n <div class=\"pv-scroll\">\n\n <!-- ============ Explorer UI style guide (interactive — Q1#6) ============ -->\n @if (activeView === 'explorer') {\n <div class=\"pv-view\">\n <div class=\"zone-lab\">Explorer UI · shell + page chrome + ng-ui-components · hover & tab around — states are live</div>\n <div class=\"mx\">\n <div class=\"mx-shell\">\n <span class=\"mx-appico\"><i class=\"fa-solid fa-table-cells-large\"></i></span>\n <span class=\"mx-nav\">\n @for (item of mockNavItems; track item; let i = $index) {\n <b [class.on]=\"mockNav === i\" tabindex=\"0\" role=\"button\"\n (click)=\"mockNav = i\" (keydown.enter)=\"mockNav = i\"\n (keydown.space)=\"mockNav = i; $event.preventDefault()\">{{ item }}</b>\n }\n </span>\n <span class=\"mx-search\" tabindex=\"0\"><i class=\"fa-solid fa-magnifying-glass\"></i> Search everything…</span>\n <span class=\"mx-sp\"></span>\n <span class=\"mx-av\" tabindex=\"0\">AC</span>\n </div>\n <div class=\"mx-ph\">\n <div class=\"mx-ph-top\">\n <span class=\"mx-ph-ico\"><i class=\"fa-solid fa-users\"></i></span>\n <div>\n <div class=\"mx-ph-title\">Membership Overview</div>\n <div class=\"mx-ph-sub\">mj-page-layout · mj-page-header · mj-page-body</div>\n </div>\n <div class=\"mx-ph-actions\">\n <button class=\"mx-btn sec\">Export</button>\n <button class=\"mx-btn pri\">New record</button>\n </div>\n </div>\n <div class=\"mx-toolbar\">\n <span class=\"mx-tabs\" role=\"tablist\">\n @for (t of mockTabs; track t; let i = $index) {\n <i [class.on]=\"mockTab === i\" tabindex=\"0\" role=\"tab\" [attr.aria-selected]=\"mockTab === i\"\n (click)=\"mockTab = i\" (keydown.enter)=\"mockTab = i\"\n (keydown.space)=\"mockTab = i; $event.preventDefault()\">{{ t }}</i>\n }\n </span>\n </div>\n </div>\n <div class=\"mx-body\">\n <div class=\"mx-cell wide\">\n <span class=\"mx-cap\">mjButton — primary · secondary · outline · danger</span>\n <div class=\"mx-row\">\n <button class=\"mx-btn pri\">Save</button>\n <button class=\"mx-btn sec\">Cancel</button>\n <button class=\"mx-btn out\">Configure</button>\n <button class=\"mx-btn dgr\">Delete</button>\n </div>\n </div>\n <div class=\"mx-cell wide\">\n <span class=\"mx-cap\">Button states — rest · hover · active · focus · disabled</span>\n <div class=\"mx-row states-row\">\n <button class=\"mx-btn pri\">Rest</button>\n <button class=\"mx-btn pri is-hover\">Hover</button>\n <button class=\"mx-btn pri is-active\">Active</button>\n <button class=\"mx-btn pri is-focus\">Focus</button>\n <button class=\"mx-btn pri\" disabled>Disabled</button>\n </div>\n <div class=\"mx-row states-row\">\n <button class=\"mx-btn sec\">Rest</button>\n <button class=\"mx-btn sec is-hover\">Hover</button>\n <button class=\"mx-btn sec is-active\">Active</button>\n <button class=\"mx-btn sec is-focus\">Focus</button>\n <button class=\"mx-btn sec\" disabled>Disabled</button>\n </div>\n <div class=\"mx-row states-row\">\n <button class=\"mx-btn out\">Rest</button>\n <button class=\"mx-btn out is-hover\">Hover</button>\n <button class=\"mx-btn out is-active\">Active</button>\n <button class=\"mx-btn out is-focus\">Focus</button>\n <button class=\"mx-btn out\" disabled>Disabled</button>\n </div>\n <div class=\"mx-row states-row\">\n <button class=\"mx-btn dgr\">Rest</button>\n <button class=\"mx-btn dgr is-hover\">Hover</button>\n <button class=\"mx-btn dgr is-active\">Active</button>\n <button class=\"mx-btn dgr is-focus\">Focus</button>\n <button class=\"mx-btn dgr\" disabled>Disabled</button>\n </div>\n </div>\n <div class=\"mx-cell wide\">\n <span class=\"mx-cap\">mj-input · mj-combobox · mj-switch</span>\n <div class=\"mx-row\">\n <span class=\"mx-input focus\" style=\"flex:1\">Northwind Tra</span>\n <span class=\"mx-input\" tabindex=\"0\" style=\"flex:1\">Member type <i class=\"fa-solid fa-chevron-down\"></i></span>\n </div>\n <div class=\"mx-row\">\n <span class=\"mx-swch\" [class.off]=\"!mockSwitchA\" role=\"switch\" tabindex=\"0\"\n [attr.aria-checked]=\"mockSwitchA\" aria-label=\"Toggle switch\"\n (click)=\"mockSwitchA = !mockSwitchA\" (keydown.enter)=\"mockSwitchA = !mockSwitchA\"\n (keydown.space)=\"mockSwitchA = !mockSwitchA; $event.preventDefault()\"></span>\n <span class=\"mx-swch\" [class.off]=\"!mockSwitchB\" role=\"switch\" tabindex=\"0\"\n [attr.aria-checked]=\"mockSwitchB\" aria-label=\"Toggle auto-renew\"\n (click)=\"mockSwitchB = !mockSwitchB\" (keydown.enter)=\"mockSwitchB = !mockSwitchB\"\n (keydown.space)=\"mockSwitchB = !mockSwitchB; $event.preventDefault()\"></span>\n <span class=\"mx-lbl\">Auto-renew</span>\n </div>\n </div>\n <div class=\"mx-cell\">\n <span class=\"mx-cap\">mj-filter-chip</span>\n <div class=\"mx-row\">\n <span class=\"mx-chip on\" tabindex=\"0\">Active</span>\n <span class=\"mx-chip\" tabindex=\"0\">Lapsed</span>\n <span class=\"mx-chip\" tabindex=\"0\">Pending</span>\n </div>\n </div>\n <div class=\"mx-cell\">\n <span class=\"mx-cap\">mj-stat-badge · mj-progress-bar</span>\n <div class=\"mx-row\"><span class=\"mx-stat brand\">1,204 Members</span><span class=\"mx-stat suc\">Active</span><span class=\"mx-stat wrn\">Expiring</span></div>\n <div class=\"mx-row\"><span class=\"mx-prog\"><i></i></span><span class=\"mx-lbl\">64%</span></div>\n </div>\n <div class=\"mx-cell\">\n <span class=\"mx-cap\">mj-left-nav · mj-accordion · mj-alert</span>\n <div class=\"mx-lnav\">\n <b class=\"on\" tabindex=\"0\"><i class=\"fa-solid fa-house\"></i> Overview</b>\n <b tabindex=\"0\"><i class=\"fa-solid fa-users\"></i> Members</b>\n <b tabindex=\"0\" role=\"button\" [attr.aria-expanded]=\"mockAccordionOpen\"\n (click)=\"mockAccordionOpen = !mockAccordionOpen\" (keydown.enter)=\"mockAccordionOpen = !mockAccordionOpen\"\n (keydown.space)=\"mockAccordionOpen = !mockAccordionOpen; $event.preventDefault()\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"mockAccordionOpen\" [class.fa-chevron-right]=\"!mockAccordionOpen\"></i> Reports\n </b>\n @if (mockAccordionOpen) {\n <b class=\"mx-acc-item\" tabindex=\"0\">Renewal funnel</b>\n <b class=\"mx-acc-item\" tabindex=\"0\">Engagement</b>\n }\n </div>\n <div class=\"mx-alert\"><i></i>12 imports finished overnight</div>\n </div>\n <div class=\"mx-cell\">\n <span class=\"mx-cap\">mj-dialog · mj-dialog-actions</span>\n <div class=\"mx-dlg\">\n <div class=\"mx-dlg-t\">Rename view</div>\n <div class=\"mx-dlg-b\"><span class=\"mx-input focus\" style=\"width:100%\">Q3 Renewal Pipeline</span></div>\n <div class=\"mx-dlg-a\"><button class=\"mx-btn pri\">Save</button><button class=\"mx-btn sec\">Cancel</button></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ============ Artifact — one generated document, styled by the theme ============ -->\n @if (activeView === 'artifact') {\n <div class=\"pv-view\">\n <div class=\"report\">\n <div class=\"rhead\">\n <span class=\"logo\"></span>\n <div><div class=\"ti\">Acme Analytics</div><div class=\"su\">Q2 Pipeline Overview</div></div>\n <div class=\"rt\">Generated · Jul 2026</div>\n </div>\n <div class=\"rbody\">\n <div class=\"kpis\">\n <div class=\"kpi\"><div class=\"n\">$4.2M</div><div class=\"l\">Pipeline value</div><div class=\"d up\">▲ 12.4%</div></div>\n <div class=\"kpi\"><div class=\"n\">318</div><div class=\"l\">Open deals</div><div class=\"d up\">▲ 6.1%</div></div>\n <div class=\"kpi\"><div class=\"n\">27%</div><div class=\"l\">Win rate</div><div class=\"d dn\">▼ 1.8%</div></div>\n </div>\n <div class=\"chart\">\n <div class=\"ct\">Pipeline by stage</div>\n <div class=\"cs\">Value in each stage, current quarter</div>\n <div class=\"bars\">\n @for (h of barHeights; track $index; let i = $index) {\n <div class=\"bar\">\n <span class=\"bv\">{{ barValues[i] }}</span>\n <span class=\"fill\" [style.height.%]=\"h\" [style.background]=\"vizColors[i % vizColors.length]\"></span>\n </div>\n }\n </div>\n <div class=\"cats\">\n @for (c of barCats; track c) { <span>{{ c }}</span> }\n </div>\n </div>\n <table class=\"grid\">\n <thead><tr><th>Account</th><th>Stage</th><th class=\"r\">Value</th><th class=\"r\">Close</th></tr></thead>\n <tbody>\n <tr><td><b>Northwind Traders</b></td><td>Negotiate</td><td class=\"r\">$820,000</td><td class=\"r\">Aug 12</td></tr>\n <tr><td><b>Contoso Ltd</b></td><td>Propose</td><td class=\"r\">$465,000</td><td class=\"r\">Sep 03</td></tr>\n <tr><td><b>Fabrikam Inc</b></td><td>Commit</td><td class=\"r\">$1,240,000</td><td class=\"r\">Jul 29</td></tr>\n </tbody>\n </table>\n <p class=\"ag-sum\"><b>Summary.</b> Northwind expanded into two of Acme's core regions this quarter,\n hired a new VP of Partnerships, and repriced its mid-tier plan 8% below Acme's.</p>\n <div class=\"ag-finds\">\n <div class=\"ag-find\"><span class=\"fdot\"></span><span><b>Regional expansion</b> — opened Denver and Austin offices</span><span class=\"mx-stat wrn\">High impact</span></div>\n <div class=\"ag-find\"><span class=\"fdot\"></span><span><b>Pricing move</b> — mid-tier repriced to $79/seat</span><span class=\"mx-stat brand\">Watch</span></div>\n <div class=\"ag-find\"><span class=\"fdot\"></span><span><b>Positioning shift</b> — \"live in 30 days\" campaign</span><span class=\"mx-stat neu\">Monitor</span></div>\n </div>\n <table class=\"grid\">\n <thead><tr><th>Source</th><th>Type</th><th class=\"r\">Confidence</th></tr></thead>\n <tbody>\n <tr><td><b>Northwind press release</b></td><td>Primary</td><td class=\"r\">High</td></tr>\n <tr><td><b>G2 pricing capture</b></td><td>Primary</td><td class=\"r\">High</td></tr>\n <tr><td><b>LinkedIn hiring signals</b></td><td>Inferred</td><td class=\"r\">Medium</td></tr>\n </tbody>\n </table>\n </div>\n <div class=\"rfoot\"><span>{{ footerNotice }}</span><span class=\"dot\"></span><span>as of Jul 2026</span></div>\n </div>\n </div>\n }\n\n </div>\n </div>\n </div>\n </div>\n\n <!-- Slide panel: editor (resizable — Q3#1/#2) -->\n <aside class=\"ts-panel\" aria-label=\"Theme editor\" [class.resizing]=\"panelResizing\"\n [style.width.px]=\"panelCollapsed ? 0 : panelWidth\">\n <div class=\"panel-resize\" role=\"separator\" aria-orientation=\"vertical\" aria-label=\"Resize editor panel\"\n title=\"Drag to resize\" (pointerdown)=\"startPanelResize($event)\"></div>\n <div class=\"panel-h\">\n <span class=\"ic\"><i class=\"fa-solid fa-palette\"></i></span>\n <div><h2>Edit theme</h2><small>One theme serves light & dark</small></div>\n <button type=\"button\" class=\"collapse-btn\" (click)=\"togglePanel()\" title=\"Collapse panel\"><i class=\"fa-solid fa-chevron-right\"></i></button>\n </div>\n <div class=\"panel-body\">\n\n <div class=\"card\">\n <h3><span class=\"ic\"><i class=\"fa-solid fa-plus\"></i></span>Start from a preset</h3>\n <div class=\"preset-row\">\n @for (p of presets; track p.name) {\n <button type=\"button\" class=\"preset\" (click)=\"applyPreset(p)\" [title]=\"p.name\">\n <span class=\"sw\"><i [style.background]=\"p.seeds.primary\"></i><i [style.background]=\"p.seeds.accent\"></i><i [style.background]=\"p.seeds.tertiary || p.seeds.accent\"></i></span>\n <small>{{ p.name }}</small>\n </button>\n }\n </div>\n </div>\n\n <div class=\"card\">\n <h3><span class=\"ic\"><i class=\"fa-solid fa-plus\"></i></span>Brand colors<span class=\"scope\">Everywhere</span></h3>\n <p class=\"sub\">Anchor colors only. Ramps, hovers, and dark-mode values derive automatically.</p>\n <div class=\"row\"><div class=\"lab\">Primary<small>Buttons, links, headers</small></div>\n <div class=\"ctl\"><span class=\"clr\"><input type=\"color\" [(ngModel)]=\"seeds.primary\" (ngModelChange)=\"onSeedsChanged()\"><span class=\"hex\">{{ seeds.primary }}</span></span></div></div>\n <div class=\"derived-note\"><i [style.background]=\"darkPrimary\"></i>Dark mode uses derived <code>{{ darkPrimary }}</code> (ramp step)</div>\n <div class=\"row\"><div class=\"lab\">Accent<small>Highlights, KPI accents</small></div>\n <div class=\"ctl\"><span class=\"clr\"><input type=\"color\" [(ngModel)]=\"seeds.accent\" (ngModelChange)=\"onSeedsChanged()\"><span class=\"hex\">{{ seeds.accent }}</span></span></div></div>\n <div class=\"row\"><div class=\"lab\">Tertiary<small>Secondary actions, info</small></div>\n <div class=\"ctl\"><span class=\"clr\"><input type=\"color\" [(ngModel)]=\"seeds.tertiary\" (ngModelChange)=\"onSeedsChanged()\"><span class=\"hex\">{{ seeds.tertiary }}</span></span></div></div>\n <div class=\"row\"><div class=\"lab\">Secondary<small>Derived — deep surfaces</small></div>\n <div class=\"ctl\"><span class=\"clr static\"><span class=\"sw-box\" [style.background]=\"secondaryColor\"></span><span class=\"hex\">{{ secondaryColor }}</span></span></div></div>\n <div class=\"row\"><div class=\"lab\">Text on primary<small>Worst of light & dark</small></div>\n <div class=\"ctl\">\n @if (onPrimaryWorst; as worst) {\n <span class=\"ok\" [class.warn]=\"!worst.check.passes\"\n [title]=\"'light ' + (onPrimaryDetail.light?.ratio ?? '—') + ':1 · dark ' + (onPrimaryDetail.dark?.ratio ?? '—') + ':1'\">\n {{ worst.check.passes ? '✓' : '⚠' }} {{ worst.check.ratio }}:1 <em class=\"mode-tag\">{{ worst.mode }}</em>\n @if (!worst.check.passes && worst.check.suggestion) { <span> → {{ worst.check.suggestion.hex }}</span> }\n </span>\n }\n </div></div>\n @if (onPrimaryDetail.light; as l) {\n @if (onPrimaryDetail.dark; as d) {\n <div class=\"derived-note contrast-detail\">Per mode: light {{ l.ratio }}:1 {{ l.passes ? '✓' : '⚠' }} · dark {{ d.ratio }}:1 {{ d.passes ? '✓' : '⚠' }}</div>\n }\n }\n </div>\n\n <div class=\"card\">\n <h3><span class=\"ic\"><i class=\"fa-solid fa-font\"></i></span>Typography<span class=\"scope\">Everywhere</span></h3>\n <div class=\"row\"><div class=\"lab\">Font family</div>\n <div class=\"ctl\"><select [(ngModel)]=\"seeds.fontFamily\" (ngModelChange)=\"onSeedsChanged()\">\n @for (f of fontOptions; track f.value) {\n <option [value]=\"f.value\">{{ f.label }}</option>\n }\n </select></div></div>\n <div class=\"row\"><div class=\"lab\">Vibrancy<small>Brand ramp saturation</small></div>\n <div class=\"ctl\"><input type=\"range\" min=\"0.5\" max=\"1.4\" step=\"0.05\" [(ngModel)]=\"seeds.vibrancy\" (ngModelChange)=\"onSeedsChanged()\"><span class=\"val\">{{ seeds.vibrancy }}</span></div></div>\n <div class=\"row\"><div class=\"lab\">Neutral character<small>Brand tint in grays</small></div>\n <div class=\"ctl\"><input type=\"range\" min=\"0\" max=\"0.08\" step=\"0.005\" [(ngModel)]=\"seeds.neutralChroma\" (ngModelChange)=\"onSeedsChanged()\"><span class=\"val\">{{ seeds.neutralChroma }}</span></div></div>\n <div class=\"row\"><div class=\"lab\">Base size<small>Generated content</small></div>\n <div class=\"ctl\"><input type=\"range\" min=\"12\" max=\"18\" step=\"1\" [(ngModel)]=\"baseFontSize\" (ngModelChange)=\"onBaseSizeChanged()\"><span class=\"val\">{{ baseFontSize }}px</span></div></div>\n </div>\n\n <div class=\"card\">\n <h3><span class=\"ic\"><i class=\"fa-solid fa-square\"></i></span>Shape & density<span class=\"scope\">Generated content</span></h3>\n <p class=\"sub\">Applies to Skip / agent components. Explorer chrome keeps MJ shape.</p>\n <div class=\"row\"><div class=\"lab\">Corner radius</div>\n <div class=\"ctl\"><input type=\"range\" min=\"0\" max=\"20\" step=\"1\" [(ngModel)]=\"seeds.radius\" (ngModelChange)=\"onSeedsChanged()\"><span class=\"val\">{{ seeds.radius }}px</span></div></div>\n <div class=\"row\"><div class=\"lab\">Elevation depth<small>Brand shadow strength</small></div>\n <div class=\"ctl\"><input type=\"range\" min=\"0\" max=\"1\" step=\"0.1\" [(ngModel)]=\"seeds.depth\" (ngModelChange)=\"onSeedsChanged()\"><span class=\"val\">{{ seeds.depth }}</span></div></div>\n <div class=\"row\"><div class=\"lab\">Density</div>\n <div class=\"ctl\"><div class=\"miniseg\">\n <button type=\"button\" [class.on]=\"density === 16\" (click)=\"density = 16; onDensityChanged()\">Comfortable</button>\n <button type=\"button\" [class.on]=\"density === 9\" (click)=\"density = 9; onDensityChanged()\">Compact</button>\n </div></div></div>\n </div>\n\n <div class=\"card\">\n <h3><span class=\"ic\"><i class=\"fa-solid fa-chart-column\"></i></span>Chart palette\n @if (vizOverridden) {\n <button type=\"button\" class=\"reset-link\" (click)=\"resetViz()\">reset</button>\n }\n </h3>\n <p class=\"sub\">Series 1 follows Primary until you override it {{ vizOverridden ? '(overridden)' : '' }}.</p>\n <div class=\"swrow\">\n @for (c of vizColors; track $index; let i = $index) {\n <label class=\"chip-clr\" [style.background]=\"c\">\n <span class=\"chip-num\">{{ i + 1 }}</span>\n <input type=\"color\" [value]=\"c\" (input)=\"editViz(i, $event)\">\n </label>\n }\n </div>\n </div>\n\n <div class=\"card\">\n <h3><span class=\"ic\"><i class=\"fa-solid fa-image\"></i></span>Logo & branding</h3>\n <div class=\"row\"><div class=\"lab\">Footer notice<small>Shown in generated output</small></div>\n <div class=\"ctl\"><input class=\"tinput\" [(ngModel)]=\"footerNotice\"></div></div>\n <p class=\"sub\" style=\"margin:8px 0 0\">Logo variant uploads (light / dark / wordmark) are coming with the asset pipeline — no recolor knob needed.</p>\n </div>\n\n <!-- Recipes (Q2#3): curated intents that expand to reversible token sets. -->\n <div class=\"card\">\n <h3><span class=\"ic\"><i class=\"fa-solid fa-wand-magic-sparkles\"></i></span>Recipes</h3>\n <p class=\"sub\">Curated looks, expanded to token overrides underneath — fully reversible.</p>\n @for (rs of recipeStates; track rs.recipe.id) {\n <div class=\"row\">\n <div class=\"lab\">{{ rs.recipe.name }}<small>{{ rs.recipe.description }}</small></div>\n <div class=\"ctl\">\n <mj-switch [ngModel]=\"rs.on\" (ngModelChange)=\"toggleRecipe(rs.recipe)\"\n [attr.aria-label]=\"'Toggle ' + rs.recipe.name\"></mj-switch>\n </div>\n </div>\n }\n </div>\n\n <!-- Advanced: the explicit escalation ladder — seeds → token overrides → CSS (Q3#9). -->\n <div class=\"card adv-card\">\n <h3 class=\"adv-head\" (click)=\"toggleAdvanced()\">\n <span class=\"ic\"><i class=\"fa-solid fa-code\"></i></span>Advanced\n <i class=\"fa-solid caret\" [class.fa-chevron-down]=\"advancedOpen\" [class.fa-chevron-right]=\"!advancedOpen\"></i>\n </h3>\n @if (!advancedOpen && advancedSummary) {\n <p class=\"adv-summary\">{{ advancedSummary }}\n <button type=\"button\" class=\"reset-link adv-edit\" (click)=\"toggleAdvanced()\">Edit</button>\n </p>\n }\n @if (advancedOpen) {\n <div class=\"ladder\" aria-hidden=\"true\">\n <span class=\"ladder-step done\"><b>1</b> Seeds</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span class=\"ladder-step\"><b>2</b> Token overrides</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span class=\"ladder-step esc\"><b>3</b> Custom CSS</span>\n </div>\n <p class=\"sub\">Escalate in order. Seeds (above) cover most themes; token overrides refine specific surfaces; custom CSS is the escape hatch for what tokens can't express.</p>\n\n <!-- Step 2: visual token browser (Q2#1) -->\n <div class=\"adv-sec\">\n <div class=\"adv-lab\"><span class=\"step-num\">2</span>Token overrides</div>\n <p class=\"sub\">The full derived token contract, grouped and searchable. Click a swatch to override; hover a row to see where it's used in the preview. Overrides apply over the derived tokens (both modes).</p>\n <input class=\"tinput tok-search\" type=\"search\" placeholder=\"Search tokens (e.g. hover, surface, viz)…\"\n [(ngModel)]=\"tokenSearch\" (ngModelChange)=\"onTokenSearchChanged()\" spellcheck=\"false\">\n <div class=\"tok-groups\">\n @for (g of tokenGroups; track g.key) {\n <div class=\"tok-group\">\n <button type=\"button\" class=\"tok-group-h\" (click)=\"toggleTokenCategory(g.key)\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"isTokenCategoryOpen(g.key)\" [class.fa-chevron-right]=\"!isTokenCategoryOpen(g.key)\"></i>\n {{ g.label }}\n @if (g.modified > 0) { <span class=\"tok-mod-count\">{{ g.modified }} modified</span> }\n <span class=\"tok-count\">{{ g.rows.length }}</span>\n </button>\n @if (isTokenCategoryOpen(g.key)) {\n @for (t of g.rows; track t.name) {\n <div class=\"tok-row\" [class.mod]=\"t.overridden\"\n (mouseenter)=\"highlightTokenTargets(t.name)\" (mouseleave)=\"clearTokenHighlight()\">\n <span class=\"tok-sw\" [style.background]=\"t.value\"></span>\n <code class=\"tok-name\" [title]=\"t.name\">{{ t.name }}</code>\n @if (t.overridden) { <span class=\"tok-badge\">modified</span> }\n @if (editingToken === t.name) {\n <input class=\"tinput tok-edit\" [(ngModel)]=\"editingTokenValue\" spellcheck=\"false\"\n (keydown.enter)=\"commitTokenEdit()\" (keydown.escape)=\"cancelTokenEdit()\" (blur)=\"commitTokenEdit()\">\n } @else if (t.isColor) {\n <label class=\"tok-clr\" [title]=\"t.value\">\n <input type=\"color\" [value]=\"t.colorValue\" (input)=\"onTokenColorInput(t.name, $event)\">\n <span class=\"tok-val\">{{ t.value }}</span>\n </label>\n } @else {\n <button type=\"button\" class=\"tok-val-btn\" [title]=\"'Edit ' + t.name\" (click)=\"beginTokenEdit(t)\">{{ t.value }}</button>\n }\n @if (t.overridden) {\n <button type=\"button\" class=\"tok-reset\" title=\"Reset to derived value\" (click)=\"resetTokenOverride(t.name)\"><i class=\"fa-solid fa-rotate-left\"></i></button>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Step 3: custom CSS — the escape hatch (Q3#4/#5/#6/#8) -->\n <div class=\"adv-sec\">\n <div class=\"adv-lab\"><span class=\"step-num esc\">3</span>Custom CSS<span class=\"esc-tag\">escape hatch</span></div>\n <p class=\"sub\">Only for what tokens can't express. Appended to the theme overlay, auto-scoped to this theme. <code>@import</code> is not supported and is removed on save.</p>\n <div class=\"sel-chips\">\n @for (s of chromeSelectorInfo; track s.selector) {\n <button type=\"button\" class=\"sel-chip\" [title]=\"s.description\" (click)=\"insertChromeSelector(s.selector)\">{{ s.selector }}</button>\n }\n </div>\n <div class=\"css-tools\">\n <select class=\"tok-pick\" (change)=\"onInsertTokenPick($event)\" aria-label=\"Insert a token at the cursor\">\n <option value=\"\">Insert token…</option>\n @for (n of overridableTokens; track n) { <option [value]=\"n\">{{ n }}</option> }\n </select>\n </div>\n <div class=\"adv-css-editor\">\n <mj-code-editor #cssCm language=\"css\" setup=\"basic\"\n [value]=\"customCss\" (change)=\"onCssEditorChange($event)\"\n [extensions]=\"cssEditorExtensions\" [lineWrapping]=\"true\"\n placeholder=\"mj-shell { box-shadow: none; }\"></mj-code-editor>\n </div>\n @for (w of cssWarnings; track w) {\n <p class=\"css-warn\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ w }}</p>\n }\n <p class=\"sub adv-note\">The canvas preview of custom CSS is approximate — the mock's markup differs from the real chrome. Use the workspace preview to author against reality:</p>\n <button mjButton [variant]=\"workspacePreviewOn ? 'warning' : 'outline'\" size=\"sm\" (click)=\"toggleWorkspacePreview()\">\n <i class=\"fa-solid\" [class.fa-eye]=\"!workspacePreviewOn\" [class.fa-eye-slash]=\"workspacePreviewOn\"></i>\n {{ workspacePreviewOn ? 'End workspace preview' : 'Preview on my workspace' }}\n </button>\n </div>\n\n <div class=\"adv-sec\">\n <button type=\"button\" class=\"adv-add\" (click)=\"showGeneratedCss = !showGeneratedCss\">\n <i class=\"fa-solid\" [class.fa-eye]=\"!showGeneratedCss\" [class.fa-eye-slash]=\"showGeneratedCss\"></i>\n {{ showGeneratedCss ? 'Hide' : 'View' }} generated CSS\n </button>\n @if (showGeneratedCss) {\n <div class=\"gen-css\">\n <button type=\"button\" class=\"gen-copy\" (click)=\"copyGeneratedCss()\"><i class=\"fa-solid fa-copy\"></i> Copy</button>\n <div class=\"gen-css-editor\">\n <mj-code-editor language=\"css\" setup=\"minimal\" readonly [value]=\"generatedCss\"></mj-code-editor>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n </div>\n </aside>\n </div>\n </mj-page-body>\n</mj-page-layout>\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
3
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Resource wrapper for the Theme Studio (org-theming Phase 5). Wraps
|
|
7
|
+
* {@link ThemeStudioDashboardComponent} as a BaseResourceComponent so it can be
|
|
8
|
+
* targeted by an application nav item with ResourceType "Custom" +
|
|
9
|
+
* DriverClass "ThemeStudioResource" (see metadata/applications/.theme-studio-application.json).
|
|
10
|
+
* Mirrors the Data Explorer resource wrapper.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ThemeStudioResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {
|
|
13
|
+
private cdr;
|
|
14
|
+
private dashboard;
|
|
15
|
+
private _loaded;
|
|
16
|
+
constructor(cdr: ChangeDetectorRef);
|
|
17
|
+
set Data(value: ResourceData);
|
|
18
|
+
get Data(): ResourceData;
|
|
19
|
+
ngOnInit(): void;
|
|
20
|
+
ngOnDestroy(): void;
|
|
21
|
+
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
22
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
23
|
+
/** Wire the inner dashboard's load-complete signal up to the shell (with race guard). */
|
|
24
|
+
private wireDashboard;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ThemeStudioResourceComponent, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ThemeStudioResourceComponent, "mj-theme-studio-resource", never, {}, {}, never, never, false, never>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=theme-studio-resource.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-studio-resource.component.d.ts","sourceRoot":"","sources":["../../src/ThemeStudio/theme-studio-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,iBAAiB,EAAa,SAAS,EAAE,MAAM,EAAa,MAAM,eAAe,CAAC;AAEpH,OAAO,EAAE,qBAAqB,EAAmB,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAqB,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAGhF;;;;;;GAMG;AACH,qBAea,4BAA6B,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IAItF,OAAO,CAAC,GAAG;IAHmB,OAAO,CAAC,SAAS,CAAiC;IAC5F,OAAO,CAAC,OAAO,CAAS;gBAEJ,GAAG,EAAE,iBAAiB;IAI1C,IAAa,IAAI,CAAC,KAAK,EAAE,YAAY,EAMpC;IACD,IAAa,IAAI,IAAI,YAAY,CAEhC;IAED,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;IAIb,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,yFAAyF;IACzF,OAAO,CAAC,aAAa;yCApCV,4BAA4B;2CAA5B,4BAA4B;CAqDxC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { ChangeDetectionStrategy, Component, ViewChild } from '@angular/core';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
10
|
+
import { ThemeStudioDashboardComponent } from './theme-studio-dashboard.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "./theme-studio-dashboard.component";
|
|
13
|
+
/**
|
|
14
|
+
* Resource wrapper for the Theme Studio (org-theming Phase 5). Wraps
|
|
15
|
+
* {@link ThemeStudioDashboardComponent} as a BaseResourceComponent so it can be
|
|
16
|
+
* targeted by an application nav item with ResourceType "Custom" +
|
|
17
|
+
* DriverClass "ThemeStudioResource" (see metadata/applications/.theme-studio-application.json).
|
|
18
|
+
* Mirrors the Data Explorer resource wrapper.
|
|
19
|
+
*/
|
|
20
|
+
let ThemeStudioResourceComponent = class ThemeStudioResourceComponent extends BaseResourceComponent {
|
|
21
|
+
cdr;
|
|
22
|
+
dashboard;
|
|
23
|
+
_loaded = false;
|
|
24
|
+
constructor(cdr) {
|
|
25
|
+
super();
|
|
26
|
+
this.cdr = cdr;
|
|
27
|
+
}
|
|
28
|
+
set Data(value) {
|
|
29
|
+
super.Data = value;
|
|
30
|
+
if (!this._loaded) {
|
|
31
|
+
this._loaded = true;
|
|
32
|
+
this.wireDashboard();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
get Data() {
|
|
36
|
+
return super.Data;
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
super.ngOnInit();
|
|
40
|
+
}
|
|
41
|
+
ngOnDestroy() {
|
|
42
|
+
super.ngOnDestroy();
|
|
43
|
+
}
|
|
44
|
+
async GetResourceDisplayName(data) {
|
|
45
|
+
return data?.Name || 'Theme Studio';
|
|
46
|
+
}
|
|
47
|
+
async GetResourceIconClass(_data) {
|
|
48
|
+
return 'fa-solid fa-palette';
|
|
49
|
+
}
|
|
50
|
+
/** Wire the inner dashboard's load-complete signal up to the shell (with race guard). */
|
|
51
|
+
wireDashboard() {
|
|
52
|
+
this.cdr.detectChanges();
|
|
53
|
+
setTimeout(() => {
|
|
54
|
+
if (!this.dashboard) {
|
|
55
|
+
this.NotifyLoadComplete();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.dashboard.LoadCompleteEvent = () => this.NotifyLoadComplete();
|
|
59
|
+
this.dashboard.Config = { dashboard: null, userState: {} };
|
|
60
|
+
this.dashboard.Refresh();
|
|
61
|
+
// Race guard: the dashboard may finish (microtask) before this macrotask attaches
|
|
62
|
+
// the handler — forward completion if it already loaded (see DataExplorerResource).
|
|
63
|
+
if (this.dashboard.LoadComplete) {
|
|
64
|
+
this.NotifyLoadComplete();
|
|
65
|
+
}
|
|
66
|
+
}, 0);
|
|
67
|
+
}
|
|
68
|
+
static ɵfac = function ThemeStudioResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ThemeStudioResourceComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
69
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ThemeStudioResourceComponent, selectors: [["mj-theme-studio-resource"]], viewQuery: function ThemeStudioResourceComponent_Query(rf, ctx) { if (rf & 1) {
|
|
70
|
+
i0.ɵɵviewQuery(ThemeStudioDashboardComponent, 5);
|
|
71
|
+
} if (rf & 2) {
|
|
72
|
+
let _t;
|
|
73
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dashboard = _t.first);
|
|
74
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 0, consts: [[1, "theme-studio-resource-container"]], template: function ThemeStudioResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
76
|
+
i0.ɵɵelement(1, "mj-theme-studio-dashboard");
|
|
77
|
+
i0.ɵɵelementEnd();
|
|
78
|
+
} }, dependencies: [i1.ThemeStudioDashboardComponent], styles: ["[_nghost-%COMP%] { display: block; width: 100%; height: 100%; }\n .theme-studio-resource-container[_ngcontent-%COMP%] { width: 100%; height: 100%; }"], changeDetection: 0 });
|
|
79
|
+
};
|
|
80
|
+
ThemeStudioResourceComponent = __decorate([
|
|
81
|
+
RegisterClass(BaseResourceComponent, 'ThemeStudioResource')
|
|
82
|
+
], ThemeStudioResourceComponent);
|
|
83
|
+
export { ThemeStudioResourceComponent };
|
|
84
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ThemeStudioResourceComponent, [{
|
|
85
|
+
type: Component,
|
|
86
|
+
args: [{ standalone: false, selector: 'mj-theme-studio-resource', template: `
|
|
87
|
+
<div class="theme-studio-resource-container">
|
|
88
|
+
<mj-theme-studio-dashboard></mj-theme-studio-dashboard>
|
|
89
|
+
</div>
|
|
90
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["\n :host { display: block; width: 100%; height: 100%; }\n .theme-studio-resource-container { width: 100%; height: 100%; }\n "] }]
|
|
91
|
+
}], () => [{ type: i0.ChangeDetectorRef }], { dashboard: [{
|
|
92
|
+
type: ViewChild,
|
|
93
|
+
args: [ThemeStudioDashboardComponent]
|
|
94
|
+
}] }); })();
|
|
95
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ThemeStudioResourceComponent, { className: "ThemeStudioResourceComponent", filePath: "src/ThemeStudio/theme-studio-resource.component.ts", lineNumber: 29 }); })();
|
|
96
|
+
//# sourceMappingURL=theme-studio-resource.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-studio-resource.component.js","sourceRoot":"","sources":["../../src/ThemeStudio/theme-studio-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,uBAAuB,EAAqB,SAAS,EAAqB,SAAS,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAmB,MAAM,2BAA2B,CAAC;AAEnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;;;AAEnF;;;;;;GAMG;AAgBI,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,qBAAqB;IAIjD;IAH8B,SAAS,CAAiC;IACpF,OAAO,GAAG,KAAK,CAAC;IAExB,YAAoB,GAAsB;QACxC,KAAK,EAAE,CAAC;QADU,QAAG,GAAH,GAAG,CAAmB;IAE1C,CAAC;IAED,IAAa,IAAI,CAAC,KAAmB;QACnC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAa,IAAI;QACf,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC;IAED,WAAW;QACT,KAAK,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC7C,OAAO,IAAI,EAAE,IAAI,IAAI,cAAc,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC5C,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,yFAAyF;IACjF,aAAa;QACnB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACnE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,SAAS,EAAE,IAAoC,EAAE,SAAS,EAAE,EAAE,EAAqB,CAAC;YAC9G,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACzB,kFAAkF;YAClF,oFAAoF;YACpF,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;gBAChC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;sHApDU,4BAA4B;6DAA5B,4BAA4B;2BAC5B,6BAA6B;;;;;YAXtC,8BAA6C;YAC3C,4CAAuD;YACzD,iBAAM;;;AAQG,4BAA4B;IAfxC,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GAe/C,4BAA4B,CAqDxC;;iFArDY,4BAA4B;cAdxC,SAAS;6BACI,KAAK,YACP,0BAA0B,YAC1B;;;;GAIT,mBAKgB,uBAAuB,CAAC,MAAM;;kBAG9C,SAAS;mBAAC,6BAA6B;;kFAD7B,4BAA4B","sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent, DashboardConfig } from '@memberjunction/ng-shared';\nimport { MJDashboardEntity, ResourceData } from '@memberjunction/core-entities';\nimport { ThemeStudioDashboardComponent } from './theme-studio-dashboard.component';\n\n/**\n * Resource wrapper for the Theme Studio (org-theming Phase 5). Wraps\n * {@link ThemeStudioDashboardComponent} as a BaseResourceComponent so it can be\n * targeted by an application nav item with ResourceType \"Custom\" +\n * DriverClass \"ThemeStudioResource\" (see metadata/applications/.theme-studio-application.json).\n * Mirrors the Data Explorer resource wrapper.\n */\n@RegisterClass(BaseResourceComponent, 'ThemeStudioResource')\n@Component({\n standalone: false,\n selector: 'mj-theme-studio-resource',\n template: `\n <div class=\"theme-studio-resource-container\">\n <mj-theme-studio-dashboard></mj-theme-studio-dashboard>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; height: 100%; }\n .theme-studio-resource-container { width: 100%; height: 100%; }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThemeStudioResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n @ViewChild(ThemeStudioDashboardComponent) private dashboard!: ThemeStudioDashboardComponent;\n private _loaded = false;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n override set Data(value: ResourceData) {\n super.Data = value;\n if (!this._loaded) {\n this._loaded = true;\n this.wireDashboard();\n }\n }\n override get Data(): ResourceData {\n return super.Data;\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return data?.Name || 'Theme Studio';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-palette';\n }\n\n /** Wire the inner dashboard's load-complete signal up to the shell (with race guard). */\n private wireDashboard(): void {\n this.cdr.detectChanges();\n setTimeout(() => {\n if (!this.dashboard) {\n this.NotifyLoadComplete();\n return;\n }\n this.dashboard.LoadCompleteEvent = () => this.NotifyLoadComplete();\n this.dashboard.Config = { dashboard: null as unknown as MJDashboardEntity, userState: {} } as DashboardConfig;\n this.dashboard.Refresh();\n // Race guard: the dashboard may finish (microtask) before this macrotask attaches\n // the handler — forward completion if it already loaded (see DataExplorerResource).\n if (this.dashboard.LoadComplete) {\n this.NotifyLoadComplete();\n }\n }, 0);\n }\n}\n"]}
|