@memberjunction/ng-core-entity-forms 5.30.1 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/lib/__tests__/content-source-form.test.d.ts +2 -0
  2. package/dist/lib/__tests__/content-source-form.test.d.ts.map +1 -0
  3. package/dist/lib/__tests__/content-source-form.test.js +183 -0
  4. package/dist/lib/__tests__/content-source-form.test.js.map +1 -0
  5. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +2 -1
  6. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +6 -4
  8. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +2 -1
  12. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +6 -4
  14. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +15 -15
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  17. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +2 -1
  18. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  19. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +9 -7
  20. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  21. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +2 -1
  22. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +11 -9
  24. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  25. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +2 -1
  26. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +6 -5
  28. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  29. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +2 -1
  30. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  31. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +6 -4
  32. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  33. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +2 -1
  34. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  35. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +6 -4
  36. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  37. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +2 -1
  38. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  39. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +6 -4
  40. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  41. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +3 -3
  42. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  43. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +1 -1
  44. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  45. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +6 -6
  46. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  47. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +2 -1
  48. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  49. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +7 -5
  50. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  51. package/dist/lib/custom/Actions/action-execution-log-form.component.js +3 -3
  52. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  53. package/dist/lib/custom/Actions/action-form.component.js +12 -12
  54. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  55. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +59 -5
  56. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +1 -1
  57. package/dist/lib/custom/ContentSources/content-source-form.component.js +379 -34
  58. package/dist/lib/custom/ContentSources/content-source-form.component.js.map +1 -1
  59. package/dist/lib/custom/Entities/entity-form.component.d.ts +1 -1
  60. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  61. package/dist/lib/custom/Entities/entity-form.component.js +5 -5
  62. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  63. package/dist/lib/custom/Lists/list-form.component.d.ts +1 -1
  64. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  65. package/dist/lib/custom/Lists/list-form.component.js +10 -10
  66. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  67. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +2 -1
  68. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Queries/query-category-dialog.component.js +9 -7
  70. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-form.component.js +17 -17
  72. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  73. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +2 -1
  74. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Queries/query-run-dialog.component.js +7 -6
  76. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  77. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +2 -1
  78. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Templates/template-param-dialog.component.js +10 -8
  80. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  81. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +2 -1
  82. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Templates/template-params-grid.component.js +9 -7
  84. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  85. package/dist/lib/custom/Templates/templates-form.component.js +8 -8
  86. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  87. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +3 -2
  88. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  89. package/dist/lib/custom/Tests/entity-link-pill.component.js +8 -6
  90. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  91. package/dist/lib/custom/Tests/test-form.component.d.ts +1 -1
  92. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  93. package/dist/lib/custom/Tests/test-form.component.js +7 -7
  94. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  95. package/dist/lib/custom/Tests/test-run-form.component.js +5 -5
  96. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  97. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +1 -1
  98. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  99. package/dist/lib/custom/Tests/test-suite-form.component.js +8 -8
  100. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  101. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +1 -1
  102. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  103. package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -6
  104. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  105. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +2 -1
  106. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  107. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +8 -6
  108. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  109. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +9 -0
  110. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  111. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +15 -3
  112. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  113. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +3 -2
  114. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  115. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +10 -5
  116. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  117. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
  118. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  119. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -1
  120. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  121. package/dist/lib/custom/shared/entity-selector-dialog.component.js +6 -4
  122. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  124. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +46 -28
  125. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +10 -10
  127. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
  128. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
  129. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +25 -7
  130. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
  132. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +25 -7
  133. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  134. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +106 -88
  136. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  137. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
  138. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +181 -61
  139. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  140. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts +10 -0
  141. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts.map +1 -0
  142. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js +63 -0
  143. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js.map +1 -0
  144. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts +10 -0
  145. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts.map +1 -0
  146. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js +95 -0
  147. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js.map +1 -0
  148. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +63 -0
  151. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +199 -181
  154. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  155. package/dist/lib/generated/generated-forms.module.d.ts +51 -48
  156. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  157. package/dist/lib/generated/generated-forms.module.js +27 -18
  158. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  159. package/dist/lib/shared/components/template-editor.component.d.ts +3 -2
  160. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  161. package/dist/lib/shared/components/template-editor.component.js +8 -6
  162. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  163. package/package.json +37 -35
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { Component, ChangeDetectionStrategy, HostListener, ViewContainerRef, inject } from '@angular/core';
8
8
  import { Subject, interval } from 'rxjs';
9
9
  import { takeUntil } from 'rxjs/operators';
10
- import { CompositeKey, Metadata, RunView } from '@memberjunction/core';
10
+ import { CompositeKey, RunView } from '@memberjunction/core';
11
11
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
12
12
  import { RegisterClass } from '@memberjunction/global';
13
13
  import { SharedService, NavigationService } from '@memberjunction/ng-shared';
@@ -1004,7 +1004,7 @@ let MJTestRunFormComponentExtended = class MJTestRunFormComponentExtended extend
1004
1004
  try {
1005
1005
  // Load test
1006
1006
  if (this.record.TestID) {
1007
- const md = new Metadata();
1007
+ const md = this.ProviderToUse;
1008
1008
  const test = await md.GetEntityObject('MJ: Tests');
1009
1009
  if (test && await test.Load(this.record.TestID)) {
1010
1010
  this.test = test;
@@ -1012,7 +1012,7 @@ let MJTestRunFormComponentExtended = class MJTestRunFormComponentExtended extend
1012
1012
  }
1013
1013
  // Load test suite run if part of a suite
1014
1014
  if (this.record.TestSuiteRunID) {
1015
- const md = new Metadata();
1015
+ const md = this.ProviderToUse;
1016
1016
  const suiteRun = await md.GetEntityObject('MJ: Test Suite Runs');
1017
1017
  if (suiteRun && await suiteRun.Load(this.record.TestSuiteRunID)) {
1018
1018
  this.testSuiteRun = suiteRun;
@@ -1039,7 +1039,7 @@ let MJTestRunFormComponentExtended = class MJTestRunFormComponentExtended extend
1039
1039
  this.loadingAIRuns = true;
1040
1040
  this.cdr.markForCheck();
1041
1041
  try {
1042
- const rv = new RunView();
1042
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1043
1043
  const [agentRuns, promptRuns] = await rv.RunViews([
1044
1044
  {
1045
1045
  EntityName: 'MJ: AI Agent Runs',
@@ -1077,7 +1077,7 @@ let MJTestRunFormComponentExtended = class MJTestRunFormComponentExtended extend
1077
1077
  this.loadingFeedback = true;
1078
1078
  this.cdr.markForCheck();
1079
1079
  try {
1080
- const rv = new RunView();
1080
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1081
1081
  const result = await rv.RunView({
1082
1082
  EntityName: 'MJ: Test Run Feedbacks',
1083
1083
  ExtraFilter: `TestRunID='${this.record.ID}'`,
@@ -1 +1 @@
1
- {"version":3,"file":"test-run-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-run-form.component.ts","../../../../src/lib/custom/Tests/test-run-form.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAqB,uBAAuB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC9H,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAiB,MAAM,gCAAgC,CAAC;;;;;;;;mBCgcvE,CAAC,EAAC,CAAC,EAAC,CAAC;mBA2FL,CAAC,EAAC,CAAC;mBAgCK,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE;;;IAnkBvC,+BAAgD;IAAtB,+LAAS,kBAAW,KAAC;IAC7C,wBAA2C;IAC3C,4BAAM;IAAA,YAAW;IAAA,iBAAO;IACxB,kCAA0B;IACxB,wBAA2B;IAAC,uBAC9B;IACF,AADE,iBAAS,EACL;;;IAJE,eAAW;IAAX,kCAAW;;;;IAmBb,0BAAI;IACF,uBAA8C;IAC9C,4BAAkD;IAArB,8LAAS,iBAAU,KAAC;IAC/C,wBAA4B;IAC5B,+BAA8B;IAAA,YAAe;IAEjD,AADE,AAD+C,iBAAO,EAClD,EACD;;;IAF6B,eAAe;IAAf,sCAAe;;;IA4B7C,gCAAwB;IACtB,wBAA4B;IAC5B,YACF;IAAA,iBAAO;;;IADL,eACF;IADE,iDACF;;;IAGA,gCAAwB;IACtB,wBAAuC;IACvC,iCACF;IAAA,iBAAO;;;IAiDT,+BAA6B;IAC3B,0BAAmH;IACrH,iBAAM;;;IADsB,cAAsC;IAAC,AAAvC,yDAAsC,6CAA4C;;;IAc9G,+BAA6B;IAC3B,0BAAsH;IACxH,iBAAM;;;IADsB,cAAyC;IAAC,AAA1C,4DAAyC,6CAA4C;;;IAqBnH,gCAAwB;IACtB,wBAA2B;IAC3B,YACF;IAAA,iBAAO;;;IADL,eACF;IADE,wDACF;;;;IAGA,gCAA+D;IAA7B,gNAAS,yBAAkB,KAAC;IAC5D,wBAAkC;IAClC,YACF;IAAA,iBAAO;;;IADL,eACF;IADE,gFACF;;;IAIA,0CAGsB;;;IADpB,AADA,0DAAqC,uCACN;;;IAjBrC,+BAA4B;IAC1B,iHAAwB;IAMxB,iHAAoB;IAOpB,gIAAsD;IAMxD,iBAAM;;;IAnBJ,cAKC;IALD,kDAKC;IACD,cAKC;IALD,8CAKC;IAED,cAKC;IALD,uFAKC;;;IAYO,gCAAyB;IAAA,YAAS;IAAA,iBAAO;;;IAAhB,cAAS;IAAT,4BAAS;;;IAFtC,+BAA4B;IAC1B,kJAEC;IACH,iBAAM;;;IAHJ,cAEC;IAFD,0BAEC;;;IAIH,gCAA6B;IAAA,uBAAO;IAAA,iBAAO;;;;IAT7C,AADF,AADF,+BAAsB,cACU,eACC;IAAA,wBAA2B;IAAA,iBAAO;IAC/D,gHAAuB;IAOvB,iHAAyB;IAGzB,kCAA6E;IAA/C,mMAAS,yBAAkB,KAAC;IACxD,wBAA2B;IAAC,qBAC9B;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;IAdF,eAMC;IAND,iDAMC;IACD,cAEC;IAFD,mDAEC;;;;IAiBG,gCAA2B;IACzB,YACA;IAAA,kCAA2E;IAA5C,mOAAS,wBAAc,KAAC;IACrD,wBAA4B;IAEhC,AADE,iBAAS,EACJ;;;IAJL,cACA;IADA,uCACA;;;IAMF,gCAA8B;IAAA,2BAAW;IAAA,iBAAO;;;IAiBhD,wBAAsC;;;;IA9B1C,AADF,AADF,+BAA+B,cACG,eACE;IAAA,wBAA2B;IAAC,0BAAS;IACvE,AADuE,iBAAO,EACxE;IAEJ,AADF,+BAA8B,cACG;IAC7B,oIAOC;IACD,iHAAyB;IAG3B,iBAAM;IAEJ,AADF,gCAA+B,iBAKF;IAHzB,oTAAoB;IAEpB,+MAAe,eAAQ,KAAC;IAH1B,iBAI2B;IAC3B,mCAA+E;IAA9D,oMAAS,eAAQ,KAAC;IACjC,yBAA2B;IAGjC,AADE,AADE,iBAAS,EACL,EACF;IAEJ,AADF,gCAAgC,kBACkD;IAA/D,oMAAS,iBAAU,KAAC;IACnC,gHAAkB;IAGlB,aACF;IAAA,iBAAS;IACT,mCAA8D;IAA7C,oMAAS,0BAAmB,KAAC;IAAgB,uBAAM;IAExE,AADE,AADsE,iBAAS,EACzE,EACF;;;IAhCA,eAOC;IAPD,0BAOC;IACD,eAEC;IAFD,mDAEC;IAIC,eAAoB;IAApB,6CAAoB;IAIc,cAA2B;IAA3B,gDAA2B;IAMT,eAAuB;IAAvB,4CAAuB;IAC7E,cAEC;IAFD,6CAEC;IACD,cACF;IADE,yEACF;;;IAyBA,gCAAwB;IAAA,YAA8C;IAAA,iBAAO;;;IAArD,cAA8C;IAA9C,4EAA8C;;;IAQtE,gCAAwB;IAAA,YAAsB;IAAA,iBAAO;;;IAA7B,cAAsB;IAAtB,6CAAsB;;;;IAShD,kCACwE;IADf,qMAAS,iBAAU,KAAK,CAAC,KAAC;IAEjF,yBAA+B;IAC/B,4BAAM;IAAA,mBAAG;IACX,AADW,iBAAO,EACT;;;IAJW,oDAAoC;;;;IAqBlD,2BAAgC;;;IA8BxB,gCAA2B;IAAA,YAAmB;IAAA,iBAAM;;;IAAzB,cAAmB;IAAnB,uCAAmB;;;IAK9C,AADF,gCAA0B,gBACG;IAAA,uBAAO;IAAA,iBAAO;IAAC,YAC5C;IAAA,iBAAM;;;IADsC,eAC5C;IAD4C,iDAC5C;;;IAZF,AAHF,gCAEsC,eACV;IACxB,yBAAkG;IACpG,iBAAM;IAEJ,AADF,gCAA2B,eACD;IAAA,YAAgB;IAAA,iBAAM;IAC9C,uIAAqB;IAGvB,iBAAM;IACN,uIAAoB;IAKtB,iBAAM;;;;IAfJ,6DAAmC;IADL,AAA9B,0CAA6B,6BAA+B;IAG3C,eAAsC;IAAC,AAAvC,mDAAsC,sCAAwC;IAGrE,eAAgB;IAAhB,oCAAgB;IACxC,cAEC;IAFD,4CAEC;IAEH,cAIC;IAJD,2CAIC;;;IArBL,AADF,AADF,gCAA2B,eACG,SACtB;IAAA,yBAA4B;IAAC,8BAAa;IAAA,iBAAK;IACnD,iCAA4B;IAAA,YAAkE;IAChG,AADgG,iBAAO,EACjG;IACN,gCAAwB;IACtB,qJAmBC;IAEL,AADE,iBAAM,EACF;;;IAxB0B,eAAkE;IAAlE,yGAAkE;IAG9F,eAmBC;IAnBD,cAAA,wBAAiB,CAmBhB;;;;IA3CH,AADF,AADF,AAFF,+BAAoC,eAEkB,eACjB,eACN;IACvB,wBAA+C;IACjD,iBAAM;IACN,kHAAmC;IAGrC,iBAAM;IAEJ,AADF,gCAAyB,SACnB;IAAA,YAAsC;IAAA,iBAAK;IAE7C,AADF,gCAA4B,iBACC;IAAA,aAAsC;IAAA,iBAAO;IACxE,kCAA6B;IAAA,kBAAC;IAAA,iBAAO;IACrC,kCAA4B;IAAA,aAAmE;IAGrG,AADE,AADE,AADiG,iBAAO,EAClG,EACF,EACF;IAEN,qHAAoC;IAiChC,AADF,AADF,iCAAgC,gBACF,UACtB;IAAA,0BAAmC;IAAC,iCAAe;IACzD,AADyD,iBAAK,EACxD;IAEJ,AADF,iCAA6B,mBACqF;IAArC,sMAAS,yBAAkB,OAAO,CAAC,KAAC;IAC7G,0BAAkC;IAAC,wBACrC;IAAA,iBAAS;IACT,oCAAsH;IAAxC,sMAAS,yBAAkB,UAAU,CAAC,KAAC;IACnH,0BAA+B;IAAC,2BAClC;IAAA,iBAAS;IACT,oCAAkH;IAAtC,sMAAS,yBAAkB,QAAQ,CAAC,KAAC;IAC/G,0BAAmC;IAAC,yBACtC;IACF,AADE,iBAAS,EACL;IACN,iCAAgC;IAC9B,uCAMiB;IAGvB,AADE,AADE,iBAAM,EACF,EACF;;;IA7EoB,mCAAS;IAER,cAA0B;IAA1B,sCAA0B;IAG9B,eAA2B;IAA3B,gDAA2B;IAE5C,cAEC;IAFD,6DAEC;IAGG,eAAsC;IAAtC,kEAAsC;IAEb,eAAsC;IAAtC,yEAAsC;IAErC,eAAmE;IAAnE,0GAAmE;IAKrG,cA6BC;IA7BD,+DA6BC;IAOkC,eAA2C;IAA3C,2DAA2C;IAG3C,eAA8C;IAA9C,8DAA8C;IAG9C,eAA4C;IAA5C,4DAA4C;IAMzE,eAA6B;IAI7B,AADA,AADA,AAFA,kDAA6B,kBAEZ,+BACM,sBACF;;;;IAmBvB,gCAAwD;IAArB,kNAAS,iBAAU,KAAC;IACrD,gCAAyB;IAAA,wBAA4B;IAAA,iBAAM;IAEzD,AADF,gCAA4B,eACA;IAAA,oBAAI;IAAA,iBAAM;IACpC,gCAA+B;IAAA,YAAe;IAChD,AADgD,iBAAM,EAChD;IACN,yBAAsD;IACxD,iBAAM;;;IAH6B,eAAe;IAAf,sCAAe;;;IAsChD,AADF,AADF,gCAA2B,eACS,SAC5B;IAAA,wBAA2C;IAAC,8BAAa;IAC/D,AAD+D,iBAAK,EAC9D;IACN,gCAA2B;IACzB,sCAKiB;IAErB,AADE,iBAAM,EACF;;;IANA,eAA6B;IAG7B,AADA,AADA,AADA,kDAA6B,kBACZ,+BACM,sBACF;;;IASvB,AADF,AADF,gCAAoC,eACN,SACtB;IAAA,yBAAgC;IAAC,+BAAc;IACrD,AADqD,iBAAK,EACpD;IACN,gCAAoC;IAClC,sCAMiB;IAErB,AADE,iBAAM,EACF;;;IAPA,eAAqC;IAIrC,AADA,AADA,AAFA,0DAAqC,kBAEpB,+BACM,sBACF;;;IAzEzB,AADF,AADF,AADF,+BAAmC,eACP,eACC,eACE;IAAA,yBAAkC;IAAA,iBAAM;IAE/D,AADF,gCAA4B,eACA;IAAA,2BAAW;IAAA,iBAAM;IAC3C,gCAAoC;IAAA,YAAe;IAEvD,AADE,AADqD,iBAAM,EACrD,EACF;IACN,oHAAY;IAWV,AADF,iCAAyB,gBACE;IAAA,0BAA0B;IAAA,iBAAM;IAEvD,AADF,iCAA4B,gBACA;IAAA,4BAAW;IAAA,iBAAM;IAC3C,iCAA0B;IAAA,aAAgC;IAE9D,AADE,AAD4D,iBAAM,EAC5D,EACF;IAEJ,AADF,iCAAyB,gBACE;IAAA,0BAAkC;IAAA,iBAAM;IAE/D,AADF,iCAA4B,gBACA;IAAA,2BAAU;IAAA,iBAAM;IAC1C,iCAA0B;IAAA,aAAsC;;IAEpE,AADE,AADkE,iBAAM,EAClE,EACF;IAEJ,AADF,iCAAyB,gBACE;IAAA,0BAAkC;IAAA,iBAAM;IAE/D,AADF,iCAA4B,gBACA;IAAA,6BAAY;IAAA,iBAAM;IAC5C,iCAA0B;IAAA,aAAwC;;IAEtE,AADE,AADoE,iBAAM,EACpE,EACF;IAEJ,AADF,iCAAyB,gBACE;IAAA,0BAAqC;IAAA,iBAAM;IAElE,AADF,iCAA4B,gBACA;IAAA,yBAAQ;IAAA,iBAAM;IACxC,iCAA0B;IAAA,aAAyB;IAGzD,AADE,AADE,AADqD,iBAAM,EACrD,EACF,EACF;IAEN,oHAA2B;IAgB3B,oHAAgC;IAgBlC,iBAAM;;;IAjFmB,mCAAS;IAMU,eAAe;IAAf,sCAAe;IAGvD,cASC;IATD,uCASC;IAK6B,eAAgC;IAAhC,uDAAgC;IAOhC,eAAsC;IAAtC,8EAAsC;IAOtC,eAAwC;IAAxC,iFAAwC;IAOxC,eAAyB;IAAzB,gDAAyB;IAKzD,cAcC;IAdD,sDAcC;IAED,cAeC;IAfD,2DAeC;;;IAYO,gCAA2B;IACzB,2BAAiC;IACjC,gCAA8B;IAE5B,AADA,2BAAsC,eACE;IAE5C,AADE,iBAAM,EACF;;;IARV,AADF,gCAA2B,eACE;IACzB,mJAQC;IAEL,AADE,iBAAM,EACF;;IAVF,eAQC;IARD,yCAQC;;;IAsBS,iCAAwB;IACtB,wBAAkC;IAAC,YACrC;;IAAA,iBAAO;;;IAD8B,eACrC;IADqC,iFACrC;;;;IAXR,gCAA0D;IAAjC,iPAAS,iCAAsB,KAAC;IACvD,gCAA+B;IAC7B,wBAA4B;IAC9B,iBAAM;IAEJ,AADF,gCAA4B,eACD;IAAA,YAAe;IAAA,iBAAM;IAE5C,AADF,gCAAyB,gBACsC;IAAA,YAAgB;IAAA,iBAAO;IACpF,uIAAqB;IAMzB,AADE,iBAAM,EACF;IACN,0BAAiD;IACnD,iBAAM;;;IAXuB,eAAe;IAAf,mCAAe;IAEZ,eAAkC;IAAlC,2CAAkC;IAAC,cAAgB;IAAhB,oCAAgB;IAC7E,cAIC;IAJD,4CAIC;;;IAjBT,AADF,AADF,gCAAwB,eACM,SACtB;IAAA,wBAA4B;IAAC,8BAAa;IAAA,iBAAK;IACnD,iCAA0B;IAAA,YAAwB;IACpD,AADoD,iBAAO,EACrD;IACN,gCAAyB;IACvB,oJAkBC;IAEL,AADE,iBAAM,EACF;;;IAvBwB,eAAwB;IAAxB,+CAAwB;IAGlD,eAkBC;IAlBD,iCAkBC;;;IAqBS,iCAAwB;IACtB,wBAAkC;IAAC,YACrC;;IAAA,iBAAO;;;IAD8B,eACrC;IADqC,iFACrC;;;;IAVR,gCAA2D;IAAlC,iPAAS,kCAAuB,KAAC;IACxD,gCAAgC;IAC9B,yBAAmC;IACrC,iBAAM;IAEJ,AADF,gCAA4B,eACD;IAAA,YAA6B;IAAA,iBAAM;IAC5D,gCAAyB;IACvB,uIAAqB;IAMzB,AADE,iBAAM,EACF;IACN,yBAAiD;IACnD,iBAAM;;;IAVuB,eAA6B;IAA7B,qDAA6B;IAEpD,eAIC;IAJD,4CAIC;;;IAhBT,AADF,AADF,gCAAwB,eACM,SACtB;IAAA,yBAAmC;IAAC,+BAAc;IAAA,iBAAK;IAC3D,iCAA0B;IAAA,YAAyB;IACrD,AADqD,iBAAO,EACtD;IACN,gCAAyB;IACvB,mJAiBC;IAEL,AADE,iBAAM,EACF;;;IAtBwB,eAAyB;IAAzB,gDAAyB;IAGnD,eAiBC;IAjBD,kCAiBC;;;IAOH,AADF,gCAAyB,eACC;IACtB,wBAA4B;IAC9B,iBAAM;IACN,0BAAI;IAAA,0BAAU;IAAA,iBAAK;IACnB,yBAAG;IAAA,+EAA+D;IACpE,AADoE,iBAAI,EAClE;;;IApFV,+BAAmC;IAEjC,kHAAqB;IAgBrB,mHAAgD;IA8BhD,mHAAiD;IA6BjD,kHAA6E;IAS/E,iBAAM;;;IAtFmB,mCAAS;IAEhC,cAcC;IAdD,+CAcC;IAED,cA4BC;IA5BD,iFA4BC;IAED,cA2BC;IA3BD,kFA2BC;IAED,cAQC;IARD,qHAQC;;;IAYO,gCAA2B;IACzB,2BAAmC;IACnC,gCAA8B;IAG5B,AADA,AADA,2BAAsC,eACE,eACA;IAE5C,AADE,iBAAM,EACF;;;IATV,AADF,gCAA2B,eACE;IACzB,mJASC;IAEL,AADE,iBAAM,EACF;;IAXF,eASC;IATD,yCASC;;;IAwBS,wBACiD;;;;IAAjD,6DAA4C;;;IAO9C,AADF,gCAA8B,gBAC6E;IACvG,yBAAgG;IAChG,YACF;IACF,AADE,iBAAO,EACH;;;IAJwB,cAAoC;IAAC,AAArC,iDAAoC,sCAAwC;IACvF,cAAqC;IAAC,AAAtC,kDAAqC,qCAAuC;IAC3F,cACF;IADE,+FACF;;;IAKA,AADF,gCAA+B,QAC1B;IAAA,YAAgC;IACrC,AADqC,iBAAI,EACnC;;;IADD,eAAgC;IAAhC,oDAAgC;;;IA7BrC,AADF,AADF,AADF,gCAA2B,eACI,eACA,eACA;IACvB,wBAA2B;IAC7B,iBAAM;IACN,iCAAwB;IAAA,YAA2B;IACrD,AADqD,iBAAO,EACtD;IACN,gCAA2B;IACzB,YACF;IACF,AADE,iBAAM,EACF;IAGF,AADF,AADF,gCAA2B,gBACI,gBACD;IACxB,yJAGC;IACH,iBAAM;IACN,kCAA2B;IAAA,aAAwB;IACrD,AADqD,iBAAO,EACtD;IACN,wIAAmC;IAQnC,wIAAkC;IAMtC,AADE,iBAAM,EACF;;;;IA9BwB,eAA2B;IAA3B,+CAA2B;IAGnD,eACF;IADE,oFACF;IAKI,eAGC;IAHD,yCAGC;IAEwB,eAAwB;IAAxB,qDAAwB;IAErD,cAOC;IAPD,2DAOC;IACD,cAIC;IAJD,0DAIC;;;IApCT,gCAA2B;IACzB,oJAsCC;IACH,iBAAM;;;IAvCJ,cAsCC;IAtCD,+BAsCC;;;IAMD,AADF,gCAAyB,eACC;IACtB,wBAA+B;IACjC,iBAAM;IACN,0BAAI;IAAA,+BAAe;IAAA,iBAAK;IACxB,yBAAG;IAAA,wFAAwE;IAC7E,AAD6E,iBAAI,EAC3E;;;IAtEV,+BAAoC;IAElC,kHAAuB;IAiBvB,kHAAgD;IA4ChD,kHAAgD;IASlD,iBAAM;;;IAxEoB,mCAAS;IAEjC,cAeC;IAfD,iDAeC;IAED,cA0CC;IA1CD,iFA0CC;IAED,cAQC;IARD,iFAQC;;;IAMH,+BAAqC;IACnC,4CAMuB;IACzB,iBAAM;;;IARqB,mCAAS;IAEhC,cAAkC;IAIlC,AADA,AADA,AADA,AADA,uDAAkC,sCACJ,8CACQ,gDACE,0DACU;;;;IASlD,AADF,AADF,+BAA+B,eACL,eACC;IACrB,yBAA+B;IAC/B,0BAAI;IAAA,6BAAa;IACnB,AADmB,iBAAK,EAClB;IAEJ,AADF,gCAAyB,iBACwC;IAA9C,qMAAS,2BAAoB,KAAC;IAC7C,yBAA2B;IAC3B,gCAAuB;IAAA,qBAAI;IAGjC,AADE,AADE,AAD6B,iBAAO,EAC3B,EACL,EACF;IACN,iCAA2B;IACzB,uCAKiB;IAErB,AADE,iBAAM,EACF;;;IArBe,mCAAS;IAexB,gBAA0B;IAG1B,AADA,AADA,AADA,+CAA0B,kBACT,+BACM,sBACF;;AD1mB1B,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,sBAAsB;IAAnE;;QAGG,aAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEvC,WAAW;QACX,cAAS,GAAG,UAAU,CAAC;QACvB,YAAO,GAAG,KAAK,CAAC;QAChB,kBAAa,GAAG,KAAK,CAAC;QACtB,oBAAe,GAAG,KAAK,CAAC;QACxB,UAAK,GAAkB,IAAI,CAAC;QAC5B,iBAAY,GAAG,KAAK,CAAC;QACrB,mBAAc,GAAG,KAAK,CAAC;QACvB,iBAAY,GAAG,KAAK,CAAC;QACrB,uBAAkB,GAAG,KAAK,CAAC;QAE3B,mBAAmB;QACnB,SAAI,GAAwB,IAAI,CAAC;QACjC,iBAAY,GAAgC,IAAI,CAAC;QACjD,gBAAW,GAAyB,EAAE,CAAC;QACvC,iBAAY,GAA0B,EAAE,CAAC;QACzC,cAAS,GAA8B,EAAE,CAAC;QAE1C,mBAAmB;QACnB,eAAU,GAAe,EAAE,CAAC;QAE5B,yBAAyB;QACzB,mBAAc,GAAoC,OAAO,CAAC;QAE1D,4BAA4B;QAC5B,gBAAW,GAAkB,qBAAqB,EAAE,CAAC;QAErD,4BAA4B;QAC5B,6BAAwB,GAAG,IAAI,CAAC;QAEhC,kBAAkB;QAClB,SAAI,GAAa,EAAE,CAAC;QACpB,WAAM,GAAG,EAAE,CAAC;QACZ,gBAAW,GAAG,KAAK,CAAC;QACpB,eAAU,GAAG,KAAK,CAAC;QACX,iBAAY,GAAa,EAAE,CAAC;QAEpC,qBAAqB;QACb,sBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC9C,yBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACpD,eAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACxC,qBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;KA6drD;IA3dC,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEhB,iCAAiC;YACjC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAExC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,qBAAqB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,qBAAqB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,qBAAqB;IAErB,sBAAsB,CAAC,KAAoB;QACzC,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE,OAAO;QAE3C,wBAAwB;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7E,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC5E,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtD,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;gBAClB,KAAK,GAAG;oBAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBAAC,MAAM;gBAC5C,KAAK,GAAG;oBAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAAC,MAAM;gBAC3C,KAAK,GAAG;oBAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAAC,MAAM;gBAC3C,KAAK,GAAG;oBAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBAAC,MAAM;gBAC5C,KAAK,GAAG;oBAAE,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG;wBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAAC,MAAM;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC;aACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,GAAG,EAAE;YACd,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;gBACtG,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC;YACH,YAAY;YACZ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,eAAe,CAAe,WAAW,CAAC,CAAC;gBACjE,IAAI,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACnB,CAAC;YACH,CAAC;YAED,yCAAyC;YACzC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,eAAe,CAAuB,qBAAqB,CAAC,CAAC;gBACvF,IAAI,QAAQ,IAAI,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;oBAChE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,GAAG,8CAA8C,CAAC;QAC9D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAE9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAChD;oBACE,UAAU,EAAE,mBAAmB;oBAC/B,WAAW,EAAE,cAAc,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG;oBAC5C,OAAO,EAAE,WAAW;oBACpB,UAAU,EAAE,eAAe;iBAC5B;gBACD;oBACE,UAAU,EAAE,oBAAoB;oBAChC,WAAW,EAAE,cAAc,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG;oBAC5C,OAAO,EAAE,OAAO;oBAChB,UAAU,EAAE,eAAe;iBAC5B;aACF,CAAC,CAAC;YAEH,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7C,CAAC;YAED,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,wBAAwB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3F,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAEhC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAA0B;gBACvD,UAAU,EAAE,wBAAwB;gBACpC,WAAW,EAAE,cAAc,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG;gBAC5C,OAAO,EAAE,qBAAqB;gBAC9B,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACxC,CAAC;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,yBAAyB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5F,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACjC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,iBAAiB;QACjB,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAED,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,iBAAiB,CAAC,IAAqC;QACrD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,cAAc;QACZ,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC3B,KAAK,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC;YAChC,KAAK,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC;YAChC,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;YAC/B,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;YACjC,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;YACjC,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;YACjC,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;YACjC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,aAAa;QACX,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC3B,KAAK,QAAQ,CAAC,CAAC,OAAO,iBAAiB,CAAC;YACxC,KAAK,QAAQ,CAAC,CAAC,OAAO,iBAAiB,CAAC;YACxC,KAAK,OAAO,CAAC,CAAC,OAAO,yBAAyB,CAAC;YAC/C,KAAK,SAAS,CAAC,CAAC,OAAO,cAAc,CAAC;YACtC,KAAK,SAAS,CAAC,CAAC,OAAO,yBAAyB,CAAC;YACjD,KAAK,SAAS,CAAC,CAAC,OAAO,mBAAmB,CAAC;YAC3C,KAAK,SAAS,CAAC,CAAC,OAAO,YAAY,CAAC;YACpC,OAAO,CAAC,CAAC,OAAO,oBAAoB,CAAC;QACvC,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,SAAS,EAAE,CAAC;IACpE,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO,KAAK,CAAC;QAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QAC5C,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,IAAI,OAAO,GAAG,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;YACtC,OAAO,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;QAC7B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,KAAoB;QAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACxD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU,CAAC,IAAmB;QAC5B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACtD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,qBAAqB;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,0BAA0B;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,eAAe,CAAC,KAAa;QAC3B,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,sCAAsC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,yCAAyC;YACzC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YAEpB,oCAAoC;YACpC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1B,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5B,CAAC;YAED,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,wBAAwB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7F,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,mBAAmB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACtF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,IAAI,IAAyC,CAAC;QAC9C,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,KAAK,OAAO;gBAAE,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAC,MAAM;YAClD,KAAK,UAAU;gBAAE,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAC,MAAM;YACxD,KAAK,QAAQ;gBAAE,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAC,MAAM;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC;IACvE,CAAC;IAED,eAAe;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAoD,CAAC;QACrF,IAAI,CAAC,OAAO,EAAE,YAAY;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,YAA6B,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrD,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,yBAAyB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC9F,CAAC;YAAC,MAAM,CAAC;gBACP,aAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;YAClC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC,CAAC,gCAAgC,CAAC;IACvC,CAAC;IAED,mCAAmC;IACnC,eAAe,CAAC,IAA0B;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAE/C,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QACpC,IAAI,QAAQ,GAAG,EAAE;YAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;QAC7C,IAAI,SAAS,GAAG,EAAE;YAAE,OAAO,GAAG,SAAS,OAAO,CAAC;QAC/C,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;QAC5C,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAChC,CAAC;4SA1gBU,8BAA8B,yBAA9B,8BAA8B;oEAA9B,8BAA8B;YAA9B,6GAAA,kCAA8B,0BAAA;;YCnC3C,8BAAqD;YAEnD,gGAAa;YAgBL,AADF,AADF,AADF,AAFF,8BAAwD,aAEN,SAC1C,SACE,WACkE;YAAvC,sGAAS,gCAA4B,IAAC;YACjE,uBAA2B;YAC3B,+BAA8B;YAAA,uBAAO;YAEzC,AADE,AADuC,iBAAO,EAC1C,EACD;YACL,8FAAY;YASZ,8BAAoB;YAClB,wBAA8C;YAC9C,6BAAM;YAAA,aAAoC;YAGhD,AADE,AADE,AAD4C,iBAAO,EAC9C,EACF,EACD;YAKF,AAFF,AADF,+BAA4B,eACD,eAEmD;YACxE,yBAA+C;YACjD,iBAAM;YAGJ,AADF,gCAA2B,UACrB;YACF,2BACA;YAAA,iCAAqB;YAAA,aAAgC;YACvD,AADuD,iBAAO,EACzD;YAEH,AADF,gCAA2B,gBAC8C;YACrE,aACF;YAAA,iBAAO;YACP,oGAAY;YAMZ,oGAA0B;YAQhC,AADE,AADE,iBAAM,EACF,EACF;YAGJ,AADF,gCAA4B,kBACgF;YAAzF,4GAAS,eAAW,IAAC;YACpC,yBAA2B;YAC3B,iCAAuB;YAAA,uBAAM;YAC/B,AAD+B,iBAAO,EAC7B;YACT,mCAAuF;YAAtE,4GAAS,aAAS,IAAC;YAClC,yBAA8D;YAC9D,iCAAuB;YAAA,wBAAO;YAGpC,AADE,AADE,AADgC,iBAAO,EAC9B,EACL,EACF;YAKF,AADF,AADF,gCAAyB,eACE,eACE;YACvB,yBAA4B;YAC9B,iBAAM;YAEJ,AADF,gCAA4B,eACA;YAAA,wBAAO;YAAA,iBAAM;YACvC,gCAA0B;YAAA,aAAuC;YAAA,iBAAM;YACvE,gCAA2B;YAAA,aAAqC;;YAEpE,AADE,AADkE,iBAAM,EAClE,EACF;YAGJ,AADF,gCAAyB,eACE;YACvB,yBAAgC;YAClC,iBAAM;YAEJ,AADF,gCAA4B,eACA;YAAA,yBAAQ;YAAA,iBAAM;YACxC,gCAA0B;YAAA,aAAyB;YAEvD,AADE,AADqD,iBAAM,EACrD,EACF;YAGJ,AADF,gCAAyB,eACE;YACvB,yBAA2B;YAC7B,iBAAM;YAEJ,AADF,gCAA4B,eACA;YAAA,sBAAK;YAAA,iBAAM;YACrC,gCAA0B;YAAA,aAA+B;YAAA,iBAAM;YAC/D,mGAA4B;YAMhC,AADE,iBAAM,EACF;YAGJ,AADF,gCAAyB,eACE;YACvB,yBAAmC;YACrC,iBAAM;YAEJ,AADF,gCAA4B,eACA;YAAA,uBAAM;YAAA,iBAAM;YACtC,gCAA0B;YAAA,aAAkD;YAAA,iBAAM;YAClF,mGAA0B;YAM9B,AADE,iBAAM,EACF;YAGJ,AADF,gCAAyB,eACE;YACvB,yBAAkC;YACpC,iBAAM;YAEJ,AADF,gCAA4B,eACA;YAAA,qBAAI;YAAA,iBAAM;YACpC,gCAA0B;YAAA,aAAgC;YAGhE,AADE,AADE,AAD4D,iBAAM,EAC5D,EACF,EACF;YAGN,mGAAoE;YAyBpE,mGAAoB;YAsBpB,oGAAmB;YAyCrB,iBAAM;YAKF,AADF,AADF,gCAA4B,eACO,kBAE8C;YADf,4GAAS,cAAU,UAAU,CAAC,IAAC;YAE3F,yBAAgC;YAChC,6BAAM;YAAA,yBAAQ;YAChB,AADgB,iBAAO,EACd;YACT,mCAC4E;YADf,4GAAS,cAAU,SAAS,CAAC,IAAC;YAEzF,yBAAkC;YAClC,6BAAM;YAAA,wBAAO;YACf,AADe,iBAAO,EACb;YACT,mCAC4E;YADf,4GAAS,cAAU,SAAS,CAAC,IAAC;YAEzF,yBAA4B;YAC5B,6BAAM;YAAA,yBAAO;YAAA,iBAAO;YACpB,sGAAoB;YAGtB,iBAAS;YACT,oCAC6E;YADf,6GAAS,cAAU,UAAU,CAAC,IAAC;YAE3F,0BAA+B;YAC/B,8BAAM;YAAA,0BAAQ;YAAA,iBAAO;YACrB,sGAAsB;YAGxB,iBAAS;YACT,oCAC8E;YADf,6GAAS,cAAU,WAAW,CAAC,IAAC;YAE7F,0BAAgC;YAChC,8BAAM;YAAA,2BAAS;YACjB,AADiB,iBAAO,EACf;YACT,wGAAkB;YAQtB,AADE,iBAAM,EACF;YAGN,iCAAyB;YAEvB,uGAAgC;YAkFhC,uGAA+B;YAsF/B,qGAA+B;YA2F/B,qGAAgC;YA6EhC,qGAAiC;YAajC,sGAA2B;YAwB7B,iBAAM;YAGN,iCAAuD;YACrD,0BAA+B;YAE7B,AADF,iCAA6B,WACvB;YAAA,oCAAkB;YAAA,iBAAK;YAErB,AAAJ,AADF,4BAAI,WACE,YAAK;YAAA,qBAAG;YAAA,iBAAM;YAAC,8BAAW;YAAA,iBAAK;YAC/B,AAAJ,4BAAI,YAAK;YAAA,uBAAK;YAAA,iBAAM;YAAC,0BAAO;YAAA,iBAAK;YAC7B,AAAJ,4BAAI,YAAK;YAAA,6BAAW;YAAA,iBAAM;YAAC,8BAAW;YAI9C,AADE,AADE,AADE,AADwC,iBAAK,EACxC,EACD,EACF,EACF;;YAhqBqB,kCAAyB;YAElD,cAQC;YARD,oCAQC;YAG4B,cAA0B;YAA1B,mCAA0B;YAUjD,eAQC;YARD,oCAQC;YAGO,eAAoC;YAApC,6DAAoC;YAQd,eAA2C;YAA3C,wDAA2C;YACxD,cAA2B;YAA3B,6CAA2B;YAMnB,eAAgC;YAAhC,yDAAgC;YAG1B,eAA2C;YAA3C,wDAA2C;YACpE,cACF;YADE,kDACF;YACA,cAKC;YALD,oCAKC;YACD,cAKC;YALD,kDAKC;YAMkC,eAA2B;YAA3B,6CAA2B;YAI7B,eAAyB;YAAzB,2CAAyB;YACjC,cAA8B;YAA9B,2CAA8B;YAc/B,gBAAuC;YAAvC,+DAAuC;YACtC,eAAqC;YAArC,2EAAqC;YAUtC,eAAyB;YAAzB,6CAAyB;YAUzB,eAA+B;YAA/B,uDAA+B;YACzD,cAIC;YAJD,oDAIC;YAUyB,eAAkD;YAAlD,+EAAkD;YAC5E,cAIC;YAJD,kDAIC;YAUyB,eAAgC;YAAhC,wDAAgC;YAMhE,cAsBC;YAtBD,oGAsBC;YAGD,cAmBC;YAnBD,4CAmBC;YAGD,cAwCC;YAxCD,2CAwCC;YAMqB,eAAyC;YAAzC,sDAAyC;;YAKzC,eAAwC;YAAxC,qDAAwC;;YAKxC,eAAwC;YAAxC,qDAAwC;;YAI1D,eAEC;YAFD,6CAEC;YAEiB,cAAyC;YAAzC,sDAAyC;;YAI3D,eAEC;YAFD,+CAEC;YAEiB,cAA0C;YAA1C,uDAA0C;;YAK9D,eAMC;YAND,2CAMC;YAOH,eA+EC;YA/ED,yDA+EC;YAGD,cAmFC;YAnFD,wDAmFC;YAGD,cAwFC;YAxFD,wDAwFC;YAGD,cA0EC;YA1ED,yDA0EC;YAGD,cAUC;YAVD,0DAUC;YAGD,cAuBC;YAvBD,oDAuBC;;;AD9mBQ,8BAA8B;IAR1C,aAAa,CAAC,iBAAiB,EAAE,eAAe,CAAC;GAQrC,8BAA8B,CA2gB1C;;iFA3gBY,8BAA8B;cAP1C,SAAS;6BACI,KAAK,YACP,kBAAkB,mBAGX,uBAAuB,CAAC,MAAM;;kBAqI9C,YAAY;mBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;kFAnIjC,8BAA8B","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, HostListener, ViewContainerRef, inject } from '@angular/core';\nimport { Subject, interval } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CompositeKey, Metadata, RunView } from '@memberjunction/core';\nimport { MJTestRunEntity, MJTestEntity, MJTestSuiteRunEntity, MJAIAgentRunEntity, MJAIPromptRunEntity, MJTestRunFeedbackEntity } from '@memberjunction/core-entities';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { RegisterClass } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\nimport { MJTestRunFormComponent } from '../../generated/Entities/MJTestRun/mjtestrun.form.component';\nimport { TestingDialogService, TagsHelper } from '@memberjunction/ng-testing';\nimport { createCopyOnlyToolbar, ToolbarConfig } from '@memberjunction/ng-code-editor';\n\ninterface ParsedData {\n input?: Record<string, unknown>;\n expected?: Record<string, unknown>;\n actual?: Record<string, unknown>;\n resultDetails?: Record<string, unknown>;\n}\n\ninterface CheckResult {\n name: string;\n passed: boolean;\n message?: string;\n weight?: number;\n}\n\n@RegisterClass(BaseFormComponent, 'MJ: Test Runs')\n@Component({\n standalone: false,\n selector: 'mj-test-run-form',\n templateUrl: './test-run-form.component.html',\n styleUrls: ['./test-run-form.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJTestRunFormComponentExtended extends MJTestRunFormComponent implements OnInit, OnDestroy {\n public override record!: MJTestRunEntity;\n\n private destroy$ = new Subject<void>();\n\n // UI state\n activeTab = 'overview';\n loading = false;\n loadingAIRuns = false;\n loadingFeedback = false;\n error: string | null = null;\n aiRunsLoaded = false;\n feedbackLoaded = false;\n isRefreshing = false;\n autoRefreshEnabled = false;\n\n // Related entities\n test: MJTestEntity | null = null;\n testSuiteRun: MJTestSuiteRunEntity | null = null;\n aiAgentRuns: MJAIAgentRunEntity[] = [];\n aiPromptRuns: MJAIPromptRunEntity[] = [];\n feedbacks: MJTestRunFeedbackEntity[] = [];\n\n // Parsed JSON data\n parsedData: ParsedData = {};\n\n // Active comparison view\n comparisonView: 'input' | 'expected' | 'actual' = 'input';\n\n // Code editor configuration\n jsonToolbar: ToolbarConfig = createCopyOnlyToolbar();\n\n // Keyboard shortcuts active\n keyboardShortcutsEnabled = true;\n\n // Tags management\n tags: string[] = [];\n newTag = '';\n editingTags = false;\n savingTags = false;\n private originalTags: string[] = [];\n\n // Service injections\n private navigationService = inject(NavigationService);\n private testingDialogService = inject(TestingDialogService);\n private appManager = inject(ApplicationManager);\n private viewContainerRef = inject(ViewContainerRef);\n\n async ngOnInit() {\n await super.ngOnInit();\n\n if (this.record && this.record.ID) {\n await this.loadRelatedData();\n this.parseJsonFields();\n this.loadTags();\n\n // Auto-refresh for running tests\n if (this.record.Status === 'Running' || this.record.Status === 'Pending') {\n this.startAutoRefresh();\n }\n }\n }\n\n private loadTags(): void {\n this.tags = TagsHelper.parseTags(this.record.Tags);\n this.originalTags = [...this.tags];\n }\n\n startEditingTags(): void {\n this.originalTags = [...this.tags];\n this.editingTags = true;\n this.cdr.markForCheck();\n }\n\n cancelEditingTags(): void {\n this.tags = [...this.originalTags];\n this.newTag = '';\n this.editingTags = false;\n this.cdr.markForCheck();\n }\n\n addTag(): void {\n const tag = this.newTag.trim();\n if (tag && !this.tags.includes(tag)) {\n this.tags = [...this.tags, tag];\n this.newTag = '';\n this.cdr.markForCheck();\n }\n }\n\n removeTag(tag: string): void {\n this.tags = this.tags.filter(t => t !== tag);\n this.cdr.markForCheck();\n }\n\n async saveTags(): Promise<void> {\n // Auto-add any pending tag in the input before saving\n const pendingTag = this.newTag.trim();\n if (pendingTag && !this.tags.includes(pendingTag)) {\n this.tags = [...this.tags, pendingTag];\n this.newTag = '';\n }\n\n this.savingTags = true;\n this.cdr.markForCheck();\n\n try {\n this.record.Tags = TagsHelper.toJson(this.tags);\n const result = await this.record.Save();\n\n if (result) {\n this.originalTags = [...this.tags];\n this.editingTags = false;\n SharedService.Instance.CreateSimpleNotification('Tags saved', 'success', 2000);\n } else {\n SharedService.Instance.CreateSimpleNotification('Failed to save tags', 'error', 3000);\n }\n } catch {\n SharedService.Instance.CreateSimpleNotification('Failed to save tags', 'error', 3000);\n } finally {\n this.savingTags = false;\n this.cdr.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // Keyboard shortcuts\n @HostListener('document:keydown', ['$event'])\n handleKeyboardShortcut(event: KeyboardEvent) {\n if (!this.keyboardShortcutsEnabled) return;\n\n // Cmd/Ctrl + R: Refresh\n if ((event.metaKey || event.ctrlKey) && event.key === 'r' && !event.shiftKey) {\n event.preventDefault();\n this.refresh();\n return;\n }\n\n // Cmd/Ctrl + Shift + R: Re-run test\n if ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key === 'r') {\n event.preventDefault();\n this.reRunTest();\n return;\n }\n\n // Number keys for tabs (1-5)\n if (!event.metaKey && !event.ctrlKey && !event.altKey) {\n switch (event.key) {\n case '1': this.changeTab('overview'); break;\n case '2': this.changeTab('details'); break;\n case '3': this.changeTab('ai-runs'); break;\n case '4': this.changeTab('feedback'); break;\n case '5': if (this.record.Log) this.changeTab('log'); break;\n }\n }\n }\n\n private startAutoRefresh() {\n this.autoRefreshEnabled = true;\n interval(5000)\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.autoRefreshEnabled && (this.record.Status === 'Running' || this.record.Status === 'Pending')) {\n this.silentRefresh();\n } else {\n this.autoRefreshEnabled = false;\n }\n });\n }\n\n private async silentRefresh() {\n try {\n await this.record.Load(this.record.ID);\n this.parseJsonFields();\n this.cdr.markForCheck();\n } catch {\n // Silently fail on auto-refresh\n }\n }\n\n private async loadRelatedData() {\n this.loading = true;\n this.error = null;\n\n try {\n // Load test\n if (this.record.TestID) {\n const md = new Metadata();\n const test = await md.GetEntityObject<MJTestEntity>('MJ: Tests');\n if (test && await test.Load(this.record.TestID)) {\n this.test = test;\n }\n }\n\n // Load test suite run if part of a suite\n if (this.record.TestSuiteRunID) {\n const md = new Metadata();\n const suiteRun = await md.GetEntityObject<MJTestSuiteRunEntity>('MJ: Test Suite Runs');\n if (suiteRun && await suiteRun.Load(this.record.TestSuiteRunID)) {\n this.testSuiteRun = suiteRun;\n }\n }\n\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading related data:', error);\n this.error = 'Failed to load related data. Click to retry.';\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async retryLoad() {\n this.error = null;\n await this.loadRelatedData();\n }\n\n private async loadAIRuns() {\n if (this.aiRunsLoaded) return;\n\n this.loadingAIRuns = true;\n this.cdr.markForCheck();\n\n try {\n const rv = new RunView();\n const [agentRuns, promptRuns] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `TestRunID='${this.record.ID}'`,\n OrderBy: 'StartedAt',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `TestRunID='${this.record.ID}'`,\n OrderBy: 'RunAt',\n ResultType: 'entity_object'\n }\n ]);\n\n if (agentRuns.Success) {\n this.aiAgentRuns = agentRuns.Results || [];\n }\n\n if (promptRuns.Success) {\n this.aiPromptRuns = promptRuns.Results || [];\n }\n\n this.aiRunsLoaded = true;\n } catch (error) {\n console.error('Error loading AI runs:', error);\n SharedService.Instance.CreateSimpleNotification('Failed to load AI runs', 'error', 3000);\n } finally {\n this.loadingAIRuns = false;\n this.cdr.markForCheck();\n }\n }\n\n private async loadFeedback() {\n if (this.feedbackLoaded) return;\n\n this.loadingFeedback = true;\n this.cdr.markForCheck();\n\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJTestRunFeedbackEntity>({\n EntityName: 'MJ: Test Run Feedbacks',\n ExtraFilter: `TestRunID='${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.feedbacks = result.Results || [];\n }\n\n this.feedbackLoaded = true;\n } catch (error) {\n console.error('Error loading feedback:', error);\n SharedService.Instance.CreateSimpleNotification('Failed to load feedback', 'error', 3000);\n } finally {\n this.loadingFeedback = false;\n this.cdr.markForCheck();\n }\n }\n\n private parseJsonFields() {\n try {\n if (this.record.InputData) {\n this.parsedData.input = JSON.parse(this.record.InputData);\n }\n if (this.record.ExpectedOutputData) {\n this.parsedData.expected = JSON.parse(this.record.ExpectedOutputData);\n }\n if (this.record.ActualOutputData) {\n this.parsedData.actual = JSON.parse(this.record.ActualOutputData);\n }\n if (this.record.ResultDetails) {\n this.parsedData.resultDetails = JSON.parse(this.record.ResultDetails);\n }\n } catch (error) {\n console.error('Error parsing JSON fields:', error);\n }\n }\n\n changeTab(tab: string) {\n this.activeTab = tab;\n\n // Lazy load tabs\n if (tab === 'ai-runs' && !this.aiRunsLoaded) {\n this.loadAIRuns();\n }\n\n if (tab === 'feedback' && !this.feedbackLoaded) {\n this.loadFeedback();\n }\n\n this.cdr.markForCheck();\n }\n\n setComparisonView(view: 'input' | 'expected' | 'actual') {\n this.comparisonView = view;\n this.cdr.markForCheck();\n }\n\n getStatusColor(): string {\n switch (this.record.Status) {\n case 'Passed': return '#10b981';\n case 'Failed': return '#ef4444';\n case 'Error': return '#f59e0b';\n case 'Timeout': return '#f97316';\n case 'Running': return '#3b82f6';\n case 'Pending': return '#8b5cf6';\n case 'Skipped': return '#6b7280';\n default: return '#9ca3af';\n }\n }\n\n getStatusIcon(): string {\n switch (this.record.Status) {\n case 'Passed': return 'fa-check-circle';\n case 'Failed': return 'fa-times-circle';\n case 'Error': return 'fa-exclamation-triangle';\n case 'Timeout': return 'fa-stopwatch';\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Pending': return 'fa-hourglass-half';\n case 'Skipped': return 'fa-forward';\n default: return 'fa-question-circle';\n }\n }\n\n getStatusClass(): string {\n return `status-${this.record.Status?.toLowerCase() || 'unknown'}`;\n }\n\n calculateDuration(): string {\n if (!this.record.DurationSeconds) return 'N/A';\n\n const seconds = this.record.DurationSeconds;\n if (seconds < 60) return `${seconds.toFixed(1)}s`;\n if (seconds < 3600) {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}m ${secs}s`;\n }\n\n const hours = Math.floor(seconds / 3600);\n const mins = Math.floor((seconds % 3600) / 60);\n return `${hours}h ${mins}m`;\n }\n\n formatScore(score: number | null): string {\n if (score === null || score === undefined) return 'N/A';\n return score.toFixed(4);\n }\n\n formatCost(cost: number | null): string {\n if (cost === null || cost === undefined) return 'N/A';\n return `$${cost.toFixed(6)}`;\n }\n\n getScorePercentage(): number {\n if (this.record.Score === null || this.record.Score === undefined) return 0;\n return Math.round(this.record.Score * 100);\n }\n\n getPassRatePercentage(): number {\n const total = this.record.TotalChecks || 0;\n const passed = this.record.PassedChecks || 0;\n if (total === 0) return 0;\n return Math.round((passed / total) * 100);\n }\n\n openTest() {\n if (this.test) {\n SharedService.Instance.OpenEntityRecord('MJ: Tests', CompositeKey.FromID(this.test.ID));\n }\n }\n\n navigateToTestingDashboard() {\n const testingApp = this.appManager.GetAppByName('Testing');\n if (testingApp) {\n this.navigationService.SwitchToApp(testingApp.ID);\n }\n }\n\n openTestSuiteRun() {\n if (this.testSuiteRun) {\n SharedService.Instance.OpenEntityRecord('MJ: Test Suite Runs', CompositeKey.FromID(this.testSuiteRun.ID));\n }\n }\n\n openAIAgentRun(runId: string) {\n SharedService.Instance.OpenEntityRecord('MJ: AI Agent Runs', CompositeKey.FromID(runId));\n }\n\n openAIPromptRun(runId: string) {\n SharedService.Instance.OpenEntityRecord('MJ: AI Prompt Runs', CompositeKey.FromID(runId));\n }\n\n async reRunTest() {\n if (!this.record.TestID) {\n SharedService.Instance.CreateSimpleNotification('Cannot re-run: Test ID not available', 'error', 3000);\n return;\n }\n\n this.testingDialogService.OpenTestPanel(this.record.TestID);\n }\n\n async refresh() {\n this.isRefreshing = true;\n this.cdr.markForCheck();\n\n try {\n await this.record.Load(this.record.ID);\n await this.loadRelatedData();\n this.parseJsonFields();\n\n // Reset lazy-loaded data to force reload\n this.aiRunsLoaded = false;\n this.feedbackLoaded = false;\n this.aiAgentRuns = [];\n this.aiPromptRuns = [];\n this.feedbacks = [];\n\n // Reload current tab data if needed\n if (this.activeTab === 'ai-runs') {\n await this.loadAIRuns();\n } else if (this.activeTab === 'feedback') {\n await this.loadFeedback();\n }\n\n SharedService.Instance.CreateSimpleNotification('Refreshed successfully', 'success', 2000);\n } catch {\n SharedService.Instance.CreateSimpleNotification('Failed to refresh', 'error', 3000);\n } finally {\n this.isRefreshing = false;\n this.cdr.markForCheck();\n }\n }\n\n getComparisonData(): string {\n let data: Record<string, unknown> | undefined;\n switch (this.comparisonView) {\n case 'input': data = this.parsedData.input; break;\n case 'expected': data = this.parsedData.expected; break;\n case 'actual': data = this.parsedData.actual; break;\n }\n return data ? JSON.stringify(data, null, 2) : '// No data available';\n }\n\n getCheckResults(): CheckResult[] {\n const details = this.parsedData.resultDetails as Record<string, unknown> | undefined;\n if (!details?.checkResults) return [];\n return details.checkResults as CheckResult[];\n }\n\n getPassRate(): number {\n const total = this.record.TotalChecks || 0;\n const passed = this.record.PassedChecks || 0;\n if (total === 0) return 0;\n return (passed / total) * 100;\n }\n\n async copyLogToClipboard(): Promise<void> {\n if (this.record.Log) {\n try {\n await navigator.clipboard.writeText(this.record.Log);\n SharedService.Instance.CreateSimpleNotification('Log copied to clipboard', 'success', 2000);\n } catch {\n SharedService.Instance.CreateSimpleNotification('Failed to copy log', 'error', 2000);\n }\n }\n }\n\n getFormattedResultDetails(): string {\n return this.parsedData.resultDetails\n ? JSON.stringify(this.parsedData.resultDetails, null, 2)\n : '// No result details available';\n }\n\n // Helper for relative time display\n getRelativeTime(date: Date | string | null): string {\n if (!date) return 'N/A';\n const d = new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return d.toLocaleDateString();\n }\n}\n","<div class=\"test-run-form\" [class.is-mobile]=\"false\">\n <!-- Error State -->\n @if (error) {\n <div class=\"error-banner\" (click)=\"retryLoad()\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n <span>{{ error }}</span>\n <button class=\"retry-btn\">\n <i class=\"fas fa-redo\"></i> Retry\n </button>\n </div>\n }\n\n <!-- Header Section -->\n <div class=\"test-run-header\" [class]=\"getStatusClass()\">\n <!-- Breadcrumb Navigation -->\n <nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n <ol>\n <li>\n <a href=\"javascript:void(0)\" (click)=\"navigateToTestingDashboard()\">\n <i class=\"fas fa-vial\"></i>\n <span class=\"breadcrumb-text\">Testing</span>\n </a>\n </li>\n @if (test) {\n <li>\n <i class=\"fas fa-chevron-right separator\"></i>\n <a href=\"javascript:void(0)\" (click)=\"openTest()\">\n <i class=\"fas fa-flask\"></i>\n <span class=\"breadcrumb-text\">{{ test.Name }}</span>\n </a>\n </li>\n }\n <li class=\"current\">\n <i class=\"fas fa-chevron-right separator\"></i>\n <span>Run #{{ record.ID.substring(0, 8) }}</span>\n </li>\n </ol>\n </nav>\n\n <div class=\"header-content\">\n <div class=\"header-left\">\n <!-- Status Indicator -->\n <div class=\"status-indicator\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n\n <div class=\"test-run-info\">\n <h1>\n Test Run\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n </h1>\n <div class=\"test-run-meta\">\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n {{ record.Status }}\n </span>\n @if (test) {\n <span class=\"meta-item\">\n <i class=\"fas fa-flask\"></i>\n {{ test.Type }}\n </span>\n }\n @if (autoRefreshEnabled) {\n <span class=\"meta-item\">\n <i class=\"fas fa-sync-alt fa-spin\"></i>\n Auto-refreshing\n </span>\n }\n </div>\n </div>\n </div>\n\n <div class=\"header-actions\">\n <button mjButton (click)=\"reRunTest()\" [disabled]=\"!record.TestID\" title=\"Re-run this test (Cmd+Shift+R)\">\n <i class=\"fas fa-redo\"></i>\n <span class=\"btn-text\">Re-run</span>\n </button>\n <button mjButton (click)=\"refresh()\" [disabled]=\"isRefreshing\" title=\"Refresh (Cmd+R)\">\n <i class=\"fas fa-sync-alt\" [class.fa-spin]=\"isRefreshing\"></i>\n <span class=\"btn-text\">Refresh</span>\n </button>\n </div>\n </div>\n\n <!-- Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-clock\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ getRelativeTime(record.StartedAt) }}</div>\n <div class=\"metric-detail\">{{ record.StartedAt | date:'short' }}</div>\n </div>\n </div>\n\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-stopwatch\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ calculateDuration() }}</div>\n </div>\n </div>\n\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-star\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Score</div>\n <div class=\"metric-value\">{{ formatScore(record.Score) }}</div>\n @if (record.Score != null) {\n <div class=\"metric-progress\">\n <div class=\"progress-bar\" [style.width.%]=\"getScorePercentage()\" [style.background-color]=\"getStatusColor()\"></div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-check-double\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Checks</div>\n <div class=\"metric-value\">{{ record.PassedChecks }}/{{ record.TotalChecks }}</div>\n @if (record.TotalChecks) {\n <div class=\"metric-progress\">\n <div class=\"progress-bar\" [style.width.%]=\"getPassRatePercentage()\" [style.background-color]=\"getStatusColor()\"></div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-dollar-sign\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.CostUSD) }}</div>\n </div>\n </div>\n </div>\n\n <!-- Secondary Info -->\n @if (record.RunByUser || testSuiteRun || record.TargetLogEntityID) {\n <div class=\"secondary-info\">\n @if (record.RunByUser) {\n <span class=\"info-chip\">\n <i class=\"fas fa-user\"></i>\n {{ record.RunByUser }}\n </span>\n }\n @if (testSuiteRun) {\n <span class=\"info-chip clickable\" (click)=\"openTestSuiteRun()\">\n <i class=\"fas fa-layer-group\"></i>\n Part of Suite Run (Seq: {{ record.Sequence }})\n </span>\n }\n <!-- Target Entity Link Pill -->\n @if (record.TargetLogEntityID && record.TargetLogID) {\n <mj-entity-link-pill\n [entityName]=\"record.TargetLogEntity\"\n [recordId]=\"record.TargetLogID\">\n </mj-entity-link-pill>\n }\n </div>\n }\n\n <!-- Tags Section - Sleek inline design -->\n @if (!editingTags) {\n <div class=\"tags-bar\">\n <div class=\"tags-bar-content\">\n <span class=\"tags-bar-label\"><i class=\"fas fa-tags\"></i></span>\n @if (tags.length > 0) {\n <div class=\"tags-bar-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-inline\">{{ tag }}</span>\n }\n </div>\n }\n @if (tags.length === 0) {\n <span class=\"tags-bar-empty\">No tags</span>\n }\n <button class=\"tags-bar-edit\" (click)=\"startEditingTags()\" title=\"Edit tags\">\n <i class=\"fas fa-plus\"></i> Add\n </button>\n </div>\n </div>\n }\n\n <!-- Tags Editor - Expanded when editing -->\n @if (editingTags) {\n <div class=\"tags-editor-panel\">\n <div class=\"tags-editor-header\">\n <span class=\"tags-editor-title\"><i class=\"fas fa-tags\"></i> Edit Tags</span>\n </div>\n <div class=\"tags-editor-body\">\n <div class=\"tags-editor-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-editable\">\n {{ tag }}\n <button class=\"tag-remove-btn\" (click)=\"removeTag(tag)\" title=\"Remove tag\">\n <i class=\"fas fa-times\"></i>\n </button>\n </span>\n }\n @if (tags.length === 0) {\n <span class=\"tags-empty-hint\">No tags yet</span>\n }\n </div>\n <div class=\"tags-editor-input\">\n <input type=\"text\"\n [(ngModel)]=\"newTag\"\n placeholder=\"Type a tag and press Enter...\"\n (keyup.enter)=\"addTag()\"\n class=\"tag-text-input\" />\n <button mjButton (click)=\"addTag()\" [disabled]=\"!newTag.trim()\" variant=\"flat\">\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n </div>\n <div class=\"tags-editor-footer\">\n <button mjButton (click)=\"saveTags()\" variant=\"primary\" [disabled]=\"savingTags\">\n @if (savingTags) {\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n {{ savingTags ? 'Saving...' : 'Save' }}\n </button>\n <button mjButton (click)=\"cancelEditingTags()\" variant=\"flat\">Cancel</button>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <div class=\"tabs\" role=\"tablist\">\n <button class=\"tab\" [class.active]=\"activeTab === 'overview'\" (click)=\"changeTab('overview')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'overview'\" title=\"Press 1\">\n <i class=\"fas fa-chart-pie\"></i>\n <span>Overview</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'details'\" title=\"Press 2\">\n <i class=\"fas fa-info-circle\"></i>\n <span>Details</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'ai-runs'\" (click)=\"changeTab('ai-runs')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'ai-runs'\" title=\"Press 3\">\n <i class=\"fas fa-robot\"></i>\n <span>AI Runs</span>\n @if (aiRunsLoaded) {\n <span class=\"tab-badge\">{{ aiAgentRuns.length + aiPromptRuns.length }}</span>\n }\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'feedback'\" (click)=\"changeTab('feedback')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'feedback'\" title=\"Press 4\">\n <i class=\"fas fa-comments\"></i>\n <span>Feedback</span>\n @if (feedbackLoaded) {\n <span class=\"tab-badge\">{{ feedbacks.length }}</span>\n }\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'execution'\" (click)=\"changeTab('execution')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'execution'\" title=\"Press 5\">\n <i class=\"fas fa-microchip\"></i>\n <span>Execution</span>\n </button>\n @if (record.Log) {\n <button class=\"tab\" [class.active]=\"activeTab === 'log'\" (click)=\"changeTab('log')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'log'\" title=\"Press 6\">\n <i class=\"fas fa-terminal\"></i>\n <span>Log</span>\n </button>\n }\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n @if (activeTab === 'overview') {\n <div class=\"overview-tab\" [@fadeIn]>\n <!-- Result Hero -->\n <div class=\"result-hero\" [class]=\"getStatusClass()\">\n <div class=\"result-icon-wrapper\">\n <div class=\"result-icon\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n @if (record.Status === 'Running') {\n <div class=\"result-pulse\"></div>\n }\n </div>\n <div class=\"result-text\">\n <h2>TEST {{ record.Status.toUpperCase() }}</h2>\n <div class=\"result-details\">\n <span class=\"result-score\">Score: {{ formatScore(record.Score) }}</span>\n <span class=\"result-divider\">|</span>\n <span class=\"result-checks\">{{ record.PassedChecks }} of {{ record.TotalChecks }} checks passed</span>\n </div>\n </div>\n </div>\n <!-- Check Results -->\n @if (getCheckResults().length > 0) {\n <div class=\"check-results\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-tasks\"></i> Check Results</h3>\n <span class=\"check-summary\">{{ record.PassedChecks }} passed, {{ record.FailedChecks }} failed</span>\n </div>\n <div class=\"check-list\">\n @for (check of getCheckResults(); track check; let i = $index) {\n <div class=\"check-item\"\n [class.passed]=\"check.passed\" [class.failed]=\"!check.passed\"\n [style.animation-delay.ms]=\"i * 50\">\n <div class=\"check-status\">\n <i class=\"fas\" [class.fa-check-circle]=\"check.passed\" [class.fa-times-circle]=\"!check.passed\"></i>\n </div>\n <div class=\"check-content\">\n <div class=\"check-name\">{{ check.name }}</div>\n @if (check.message) {\n <div class=\"check-message\">{{ check.message }}</div>\n }\n </div>\n @if (check.weight) {\n <div class=\"check-weight\">\n <span class=\"weight-label\">Weight:</span> {{ check.weight }}\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Data Comparison -->\n <div class=\"comparison-section\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-exchange-alt\"></i> Data Comparison</h3>\n </div>\n <div class=\"comparison-tabs\">\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'input'\" (click)=\"setComparisonView('input')\">\n <i class=\"fas fa-sign-in-alt\"></i> Input\n </button>\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'expected'\" (click)=\"setComparisonView('expected')\">\n <i class=\"fas fa-bullseye\"></i> Expected\n </button>\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'actual'\" (click)=\"setComparisonView('actual')\">\n <i class=\"fas fa-check-square\"></i> Actual\n </button>\n </div>\n <div class=\"comparison-content\">\n <mj-code-editor\n [value]=\"getComparisonData()\"\n language=\"json\"\n [readonly]=\"true\"\n [toolbar]=\"jsonToolbar\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"details-tab\" [@fadeIn]>\n <div class=\"details-grid\">\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-fingerprint\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Test Run ID</div>\n <div class=\"detail-value monospace\">{{ record.ID }}</div>\n </div>\n </div>\n @if (test) {\n <div class=\"detail-card clickable\" (click)=\"openTest()\">\n <div class=\"detail-icon\"><i class=\"fas fa-flask\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Test</div>\n <div class=\"detail-value link\">{{ test.Name }}</div>\n </div>\n <i class=\"fas fa-external-link-alt detail-action\"></i>\n </div>\n }\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-tag\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Target Type</div>\n <div class=\"detail-value\">{{ record.TargetType || 'N/A' }}</div>\n </div>\n </div>\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-play-circle\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Started At</div>\n <div class=\"detail-value\">{{ record.StartedAt | date:'medium' }}</div>\n </div>\n </div>\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-stop-circle\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Completed At</div>\n <div class=\"detail-value\">{{ record.CompletedAt | date:'medium' }}</div>\n </div>\n </div>\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-hourglass-half\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Duration</div>\n <div class=\"detail-value\">{{ calculateDuration() }}</div>\n </div>\n </div>\n </div>\n <!-- Error Message -->\n @if (record.ErrorMessage) {\n <div class=\"error-section\">\n <div class=\"section-header error\">\n <h3><i class=\"fas fa-exclamation-triangle\"></i> Error Message</h3>\n </div>\n <div class=\"error-content\">\n <mj-code-editor\n [value]=\"record.ErrorMessage\"\n [readonly]=\"true\"\n [toolbar]=\"jsonToolbar\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n <!-- Result Details -->\n @if (parsedData.resultDetails) {\n <div class=\"result-details-section\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-file-code\"></i> Result Details</h3>\n </div>\n <div class=\"result-details-content\">\n <mj-code-editor\n [value]=\"getFormattedResultDetails()\"\n language=\"json\"\n [readonly]=\"true\"\n [toolbar]=\"jsonToolbar\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- AI Runs Tab -->\n @if (activeTab === 'ai-runs') {\n <div class=\"ai-runs-tab\" [@fadeIn]>\n <!-- Loading State -->\n @if (loadingAIRuns) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2,3]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- AI Agent Runs -->\n @if (!loadingAIRuns && aiAgentRuns.length > 0) {\n <div class=\"ai-section\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-robot\"></i> AI Agent Runs</h3>\n <span class=\"count-badge\">{{ aiAgentRuns.length }}</span>\n </div>\n <div class=\"ai-run-list\">\n @for (run of aiAgentRuns; track run) {\n <div class=\"ai-run-card\" (click)=\"openAIAgentRun(run.ID)\">\n <div class=\"ai-run-icon agent\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <div class=\"ai-run-content\">\n <div class=\"ai-run-name\">{{ run.Agent }}</div>\n <div class=\"ai-run-meta\">\n <span class=\"status-chip\" [class]=\"run.Status.toLowerCase()\">{{ run.Status }}</span>\n @if (run.TotalCost) {\n <span class=\"cost-chip\">\n <i class=\"fas fa-dollar-sign\"></i> {{ run.TotalCost | number:'1.4-4' }}\n </span>\n }\n </div>\n </div>\n <i class=\"fas fa-chevron-right ai-run-arrow\"></i>\n </div>\n }\n </div>\n </div>\n }\n <!-- AI Prompt Runs -->\n @if (!loadingAIRuns && aiPromptRuns.length > 0) {\n <div class=\"ai-section\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-comment-dots\"></i> AI Prompt Runs</h3>\n <span class=\"count-badge\">{{ aiPromptRuns.length }}</span>\n </div>\n <div class=\"ai-run-list\">\n @for (run of aiPromptRuns; track run) {\n <div class=\"ai-run-card\" (click)=\"openAIPromptRun(run.ID)\">\n <div class=\"ai-run-icon prompt\">\n <i class=\"fas fa-comment-dots\"></i>\n </div>\n <div class=\"ai-run-content\">\n <div class=\"ai-run-name\">{{ run.Prompt || run.Model }}</div>\n <div class=\"ai-run-meta\">\n @if (run.TotalCost) {\n <span class=\"cost-chip\">\n <i class=\"fas fa-dollar-sign\"></i> {{ run.TotalCost | number:'1.4-4' }}\n </span>\n }\n </div>\n </div>\n <i class=\"fas fa-chevron-right ai-run-arrow\"></i>\n </div>\n }\n </div>\n </div>\n }\n <!-- Empty State -->\n @if (aiRunsLoaded && aiAgentRuns.length === 0 && aiPromptRuns.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <h3>No AI Runs</h3>\n <p>This test execution didn't involve any AI agent or prompt runs.</p>\n </div>\n }\n </div>\n }\n\n <!-- Feedback Tab -->\n @if (activeTab === 'feedback') {\n <div class=\"feedback-tab\" [@fadeIn]>\n <!-- Loading State -->\n @if (loadingFeedback) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-avatar\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n <div class=\"skeleton-line medium\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Feedback List -->\n @if (!loadingFeedback && feedbacks.length > 0) {\n <div class=\"feedback-list\">\n @for (feedback of feedbacks; track feedback) {\n <div class=\"feedback-item\">\n <div class=\"feedback-header\">\n <div class=\"feedback-user\">\n <div class=\"user-avatar\">\n <i class=\"fas fa-user\"></i>\n </div>\n <span class=\"user-name\">{{ feedback.ReviewerUser }}</span>\n </div>\n <div class=\"feedback-date\">\n {{ getRelativeTime(feedback.__mj_CreatedAt) }}\n </div>\n </div>\n <div class=\"feedback-body\">\n <div class=\"feedback-rating\">\n <div class=\"rating-stars\">\n @for (s of [1,2,3,4,5,6,7,8,9,10]; track s) {\n <i class=\"fas fa-star\"\n [class.filled]=\"s <= (feedback.Rating || 0)\"></i>\n }\n </div>\n <span class=\"rating-value\">{{ feedback.Rating }}/10</span>\n </div>\n @if (feedback.IsCorrect !== null) {\n <div class=\"feedback-verdict\">\n <span class=\"verdict-badge\" [class.correct]=\"feedback.IsCorrect\" [class.incorrect]=\"!feedback.IsCorrect\">\n <i class=\"fas\" [class.fa-check]=\"feedback.IsCorrect\" [class.fa-times]=\"!feedback.IsCorrect\"></i>\n {{ feedback.IsCorrect ? 'Marked Correct' : 'Marked Incorrect' }}\n </span>\n </div>\n }\n @if (feedback.CorrectionSummary) {\n <div class=\"feedback-comments\">\n <p>{{ feedback.CorrectionSummary }}</p>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (feedbackLoaded && feedbacks.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-comments\"></i>\n </div>\n <h3>No Feedback Yet</h3>\n <p>No one has reviewed this test run yet. Be the first to provide feedback!</p>\n </div>\n }\n </div>\n }\n\n <!-- Execution Context Tab -->\n @if (activeTab === 'execution') {\n <div class=\"execution-tab\" [@fadeIn]>\n <mj-execution-context\n [machineName]=\"record.MachineName\"\n [machineId]=\"record.MachineID\"\n [runByUserName]=\"record.RunByUserName\"\n [runByUserEmail]=\"record.RunByUserEmail\"\n [runContextDetailsJson]=\"record.RunContextDetails\">\n </mj-execution-context>\n </div>\n }\n\n <!-- Execution Log Tab -->\n @if (activeTab === 'log') {\n <div class=\"log-tab\" [@fadeIn]>\n <div class=\"log-header\">\n <div class=\"log-title\">\n <i class=\"fas fa-terminal\"></i>\n <h3>Execution Log</h3>\n </div>\n <div class=\"log-actions\">\n <button mjButton (click)=\"copyLogToClipboard()\" variant=\"flat\">\n <i class=\"fas fa-copy\"></i>\n <span class=\"btn-text\">Copy</span>\n </button>\n </div>\n </div>\n <div class=\"log-container\">\n <mj-code-editor\n [value]=\"record.Log || ''\"\n [readonly]=\"true\"\n [toolbar]=\"jsonToolbar\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n\n <!-- Keyboard Shortcuts Help (shown on hover of ? icon) -->\n <div class=\"shortcuts-hint\" title=\"Keyboard Shortcuts\">\n <i class=\"fas fa-keyboard\"></i>\n <div class=\"shortcuts-popup\">\n <h4>Keyboard Shortcuts</h4>\n <ul>\n <li><kbd>1-6</kbd> Switch tabs</li>\n <li><kbd>Cmd+R</kbd> Refresh</li>\n <li><kbd>Cmd+Shift+R</kbd> Re-run test</li>\n </ul>\n </div>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"test-run-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-run-form.component.ts","../../../../src/lib/custom/Tests/test-run-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, HostListener, ViewContainerRef, inject } from '@angular/core';\nimport { Subject, interval } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CompositeKey, Metadata, RunView } from '@memberjunction/core';\nimport { MJTestRunEntity, MJTestEntity, MJTestSuiteRunEntity, MJAIAgentRunEntity, MJAIPromptRunEntity, MJTestRunFeedbackEntity } from '@memberjunction/core-entities';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { RegisterClass } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\nimport { MJTestRunFormComponent } from '../../generated/Entities/MJTestRun/mjtestrun.form.component';\nimport { TestingDialogService, TagsHelper } from '@memberjunction/ng-testing';\nimport { createCopyOnlyToolbar, ToolbarConfig } from '@memberjunction/ng-code-editor';\n\ninterface ParsedData {\n input?: Record<string, unknown>;\n expected?: Record<string, unknown>;\n actual?: Record<string, unknown>;\n resultDetails?: Record<string, unknown>;\n}\n\ninterface CheckResult {\n name: string;\n passed: boolean;\n message?: string;\n weight?: number;\n}\n\n@RegisterClass(BaseFormComponent, 'MJ: Test Runs')\n@Component({\n standalone: false,\n selector: 'mj-test-run-form',\n templateUrl: './test-run-form.component.html',\n styleUrls: ['./test-run-form.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJTestRunFormComponentExtended extends MJTestRunFormComponent implements OnInit, OnDestroy {\n public override record!: MJTestRunEntity;\n\n private destroy$ = new Subject<void>();\n\n // UI state\n activeTab = 'overview';\n loading = false;\n loadingAIRuns = false;\n loadingFeedback = false;\n error: string | null = null;\n aiRunsLoaded = false;\n feedbackLoaded = false;\n isRefreshing = false;\n autoRefreshEnabled = false;\n\n // Related entities\n test: MJTestEntity | null = null;\n testSuiteRun: MJTestSuiteRunEntity | null = null;\n aiAgentRuns: MJAIAgentRunEntity[] = [];\n aiPromptRuns: MJAIPromptRunEntity[] = [];\n feedbacks: MJTestRunFeedbackEntity[] = [];\n\n // Parsed JSON data\n parsedData: ParsedData = {};\n\n // Active comparison view\n comparisonView: 'input' | 'expected' | 'actual' = 'input';\n\n // Code editor configuration\n jsonToolbar: ToolbarConfig = createCopyOnlyToolbar();\n\n // Keyboard shortcuts active\n keyboardShortcutsEnabled = true;\n\n // Tags management\n tags: string[] = [];\n newTag = '';\n editingTags = false;\n savingTags = false;\n private originalTags: string[] = [];\n\n // Service injections\n private navigationService = inject(NavigationService);\n private testingDialogService = inject(TestingDialogService);\n private appManager = inject(ApplicationManager);\n private viewContainerRef = inject(ViewContainerRef);\n\n async ngOnInit() {\n await super.ngOnInit();\n\n if (this.record && this.record.ID) {\n await this.loadRelatedData();\n this.parseJsonFields();\n this.loadTags();\n\n // Auto-refresh for running tests\n if (this.record.Status === 'Running' || this.record.Status === 'Pending') {\n this.startAutoRefresh();\n }\n }\n }\n\n private loadTags(): void {\n this.tags = TagsHelper.parseTags(this.record.Tags);\n this.originalTags = [...this.tags];\n }\n\n startEditingTags(): void {\n this.originalTags = [...this.tags];\n this.editingTags = true;\n this.cdr.markForCheck();\n }\n\n cancelEditingTags(): void {\n this.tags = [...this.originalTags];\n this.newTag = '';\n this.editingTags = false;\n this.cdr.markForCheck();\n }\n\n addTag(): void {\n const tag = this.newTag.trim();\n if (tag && !this.tags.includes(tag)) {\n this.tags = [...this.tags, tag];\n this.newTag = '';\n this.cdr.markForCheck();\n }\n }\n\n removeTag(tag: string): void {\n this.tags = this.tags.filter(t => t !== tag);\n this.cdr.markForCheck();\n }\n\n async saveTags(): Promise<void> {\n // Auto-add any pending tag in the input before saving\n const pendingTag = this.newTag.trim();\n if (pendingTag && !this.tags.includes(pendingTag)) {\n this.tags = [...this.tags, pendingTag];\n this.newTag = '';\n }\n\n this.savingTags = true;\n this.cdr.markForCheck();\n\n try {\n this.record.Tags = TagsHelper.toJson(this.tags);\n const result = await this.record.Save();\n\n if (result) {\n this.originalTags = [...this.tags];\n this.editingTags = false;\n SharedService.Instance.CreateSimpleNotification('Tags saved', 'success', 2000);\n } else {\n SharedService.Instance.CreateSimpleNotification('Failed to save tags', 'error', 3000);\n }\n } catch {\n SharedService.Instance.CreateSimpleNotification('Failed to save tags', 'error', 3000);\n } finally {\n this.savingTags = false;\n this.cdr.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // Keyboard shortcuts\n @HostListener('document:keydown', ['$event'])\n handleKeyboardShortcut(event: KeyboardEvent) {\n if (!this.keyboardShortcutsEnabled) return;\n\n // Cmd/Ctrl + R: Refresh\n if ((event.metaKey || event.ctrlKey) && event.key === 'r' && !event.shiftKey) {\n event.preventDefault();\n this.refresh();\n return;\n }\n\n // Cmd/Ctrl + Shift + R: Re-run test\n if ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key === 'r') {\n event.preventDefault();\n this.reRunTest();\n return;\n }\n\n // Number keys for tabs (1-5)\n if (!event.metaKey && !event.ctrlKey && !event.altKey) {\n switch (event.key) {\n case '1': this.changeTab('overview'); break;\n case '2': this.changeTab('details'); break;\n case '3': this.changeTab('ai-runs'); break;\n case '4': this.changeTab('feedback'); break;\n case '5': if (this.record.Log) this.changeTab('log'); break;\n }\n }\n }\n\n private startAutoRefresh() {\n this.autoRefreshEnabled = true;\n interval(5000)\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.autoRefreshEnabled && (this.record.Status === 'Running' || this.record.Status === 'Pending')) {\n this.silentRefresh();\n } else {\n this.autoRefreshEnabled = false;\n }\n });\n }\n\n private async silentRefresh() {\n try {\n await this.record.Load(this.record.ID);\n this.parseJsonFields();\n this.cdr.markForCheck();\n } catch {\n // Silently fail on auto-refresh\n }\n }\n\n private async loadRelatedData() {\n this.loading = true;\n this.error = null;\n\n try {\n // Load test\n if (this.record.TestID) {\n const md = this.ProviderToUse;\n const test = await md.GetEntityObject<MJTestEntity>('MJ: Tests');\n if (test && await test.Load(this.record.TestID)) {\n this.test = test;\n }\n }\n\n // Load test suite run if part of a suite\n if (this.record.TestSuiteRunID) {\n const md = this.ProviderToUse;\n const suiteRun = await md.GetEntityObject<MJTestSuiteRunEntity>('MJ: Test Suite Runs');\n if (suiteRun && await suiteRun.Load(this.record.TestSuiteRunID)) {\n this.testSuiteRun = suiteRun;\n }\n }\n\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading related data:', error);\n this.error = 'Failed to load related data. Click to retry.';\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async retryLoad() {\n this.error = null;\n await this.loadRelatedData();\n }\n\n private async loadAIRuns() {\n if (this.aiRunsLoaded) return;\n\n this.loadingAIRuns = true;\n this.cdr.markForCheck();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [agentRuns, promptRuns] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `TestRunID='${this.record.ID}'`,\n OrderBy: 'StartedAt',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `TestRunID='${this.record.ID}'`,\n OrderBy: 'RunAt',\n ResultType: 'entity_object'\n }\n ]);\n\n if (agentRuns.Success) {\n this.aiAgentRuns = agentRuns.Results || [];\n }\n\n if (promptRuns.Success) {\n this.aiPromptRuns = promptRuns.Results || [];\n }\n\n this.aiRunsLoaded = true;\n } catch (error) {\n console.error('Error loading AI runs:', error);\n SharedService.Instance.CreateSimpleNotification('Failed to load AI runs', 'error', 3000);\n } finally {\n this.loadingAIRuns = false;\n this.cdr.markForCheck();\n }\n }\n\n private async loadFeedback() {\n if (this.feedbackLoaded) return;\n\n this.loadingFeedback = true;\n this.cdr.markForCheck();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJTestRunFeedbackEntity>({\n EntityName: 'MJ: Test Run Feedbacks',\n ExtraFilter: `TestRunID='${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.feedbacks = result.Results || [];\n }\n\n this.feedbackLoaded = true;\n } catch (error) {\n console.error('Error loading feedback:', error);\n SharedService.Instance.CreateSimpleNotification('Failed to load feedback', 'error', 3000);\n } finally {\n this.loadingFeedback = false;\n this.cdr.markForCheck();\n }\n }\n\n private parseJsonFields() {\n try {\n if (this.record.InputData) {\n this.parsedData.input = JSON.parse(this.record.InputData);\n }\n if (this.record.ExpectedOutputData) {\n this.parsedData.expected = JSON.parse(this.record.ExpectedOutputData);\n }\n if (this.record.ActualOutputData) {\n this.parsedData.actual = JSON.parse(this.record.ActualOutputData);\n }\n if (this.record.ResultDetails) {\n this.parsedData.resultDetails = JSON.parse(this.record.ResultDetails);\n }\n } catch (error) {\n console.error('Error parsing JSON fields:', error);\n }\n }\n\n changeTab(tab: string) {\n this.activeTab = tab;\n\n // Lazy load tabs\n if (tab === 'ai-runs' && !this.aiRunsLoaded) {\n this.loadAIRuns();\n }\n\n if (tab === 'feedback' && !this.feedbackLoaded) {\n this.loadFeedback();\n }\n\n this.cdr.markForCheck();\n }\n\n setComparisonView(view: 'input' | 'expected' | 'actual') {\n this.comparisonView = view;\n this.cdr.markForCheck();\n }\n\n getStatusColor(): string {\n switch (this.record.Status) {\n case 'Passed': return '#10b981';\n case 'Failed': return '#ef4444';\n case 'Error': return '#f59e0b';\n case 'Timeout': return '#f97316';\n case 'Running': return '#3b82f6';\n case 'Pending': return '#8b5cf6';\n case 'Skipped': return '#6b7280';\n default: return '#9ca3af';\n }\n }\n\n getStatusIcon(): string {\n switch (this.record.Status) {\n case 'Passed': return 'fa-check-circle';\n case 'Failed': return 'fa-times-circle';\n case 'Error': return 'fa-exclamation-triangle';\n case 'Timeout': return 'fa-stopwatch';\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Pending': return 'fa-hourglass-half';\n case 'Skipped': return 'fa-forward';\n default: return 'fa-question-circle';\n }\n }\n\n getStatusClass(): string {\n return `status-${this.record.Status?.toLowerCase() || 'unknown'}`;\n }\n\n calculateDuration(): string {\n if (!this.record.DurationSeconds) return 'N/A';\n\n const seconds = this.record.DurationSeconds;\n if (seconds < 60) return `${seconds.toFixed(1)}s`;\n if (seconds < 3600) {\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}m ${secs}s`;\n }\n\n const hours = Math.floor(seconds / 3600);\n const mins = Math.floor((seconds % 3600) / 60);\n return `${hours}h ${mins}m`;\n }\n\n formatScore(score: number | null): string {\n if (score === null || score === undefined) return 'N/A';\n return score.toFixed(4);\n }\n\n formatCost(cost: number | null): string {\n if (cost === null || cost === undefined) return 'N/A';\n return `$${cost.toFixed(6)}`;\n }\n\n getScorePercentage(): number {\n if (this.record.Score === null || this.record.Score === undefined) return 0;\n return Math.round(this.record.Score * 100);\n }\n\n getPassRatePercentage(): number {\n const total = this.record.TotalChecks || 0;\n const passed = this.record.PassedChecks || 0;\n if (total === 0) return 0;\n return Math.round((passed / total) * 100);\n }\n\n openTest() {\n if (this.test) {\n SharedService.Instance.OpenEntityRecord('MJ: Tests', CompositeKey.FromID(this.test.ID));\n }\n }\n\n navigateToTestingDashboard() {\n const testingApp = this.appManager.GetAppByName('Testing');\n if (testingApp) {\n this.navigationService.SwitchToApp(testingApp.ID);\n }\n }\n\n openTestSuiteRun() {\n if (this.testSuiteRun) {\n SharedService.Instance.OpenEntityRecord('MJ: Test Suite Runs', CompositeKey.FromID(this.testSuiteRun.ID));\n }\n }\n\n openAIAgentRun(runId: string) {\n SharedService.Instance.OpenEntityRecord('MJ: AI Agent Runs', CompositeKey.FromID(runId));\n }\n\n openAIPromptRun(runId: string) {\n SharedService.Instance.OpenEntityRecord('MJ: AI Prompt Runs', CompositeKey.FromID(runId));\n }\n\n async reRunTest() {\n if (!this.record.TestID) {\n SharedService.Instance.CreateSimpleNotification('Cannot re-run: Test ID not available', 'error', 3000);\n return;\n }\n\n this.testingDialogService.OpenTestPanel(this.record.TestID);\n }\n\n async refresh() {\n this.isRefreshing = true;\n this.cdr.markForCheck();\n\n try {\n await this.record.Load(this.record.ID);\n await this.loadRelatedData();\n this.parseJsonFields();\n\n // Reset lazy-loaded data to force reload\n this.aiRunsLoaded = false;\n this.feedbackLoaded = false;\n this.aiAgentRuns = [];\n this.aiPromptRuns = [];\n this.feedbacks = [];\n\n // Reload current tab data if needed\n if (this.activeTab === 'ai-runs') {\n await this.loadAIRuns();\n } else if (this.activeTab === 'feedback') {\n await this.loadFeedback();\n }\n\n SharedService.Instance.CreateSimpleNotification('Refreshed successfully', 'success', 2000);\n } catch {\n SharedService.Instance.CreateSimpleNotification('Failed to refresh', 'error', 3000);\n } finally {\n this.isRefreshing = false;\n this.cdr.markForCheck();\n }\n }\n\n getComparisonData(): string {\n let data: Record<string, unknown> | undefined;\n switch (this.comparisonView) {\n case 'input': data = this.parsedData.input; break;\n case 'expected': data = this.parsedData.expected; break;\n case 'actual': data = this.parsedData.actual; break;\n }\n return data ? JSON.stringify(data, null, 2) : '// No data available';\n }\n\n getCheckResults(): CheckResult[] {\n const details = this.parsedData.resultDetails as Record<string, unknown> | undefined;\n if (!details?.checkResults) return [];\n return details.checkResults as CheckResult[];\n }\n\n getPassRate(): number {\n const total = this.record.TotalChecks || 0;\n const passed = this.record.PassedChecks || 0;\n if (total === 0) return 0;\n return (passed / total) * 100;\n }\n\n async copyLogToClipboard(): Promise<void> {\n if (this.record.Log) {\n try {\n await navigator.clipboard.writeText(this.record.Log);\n SharedService.Instance.CreateSimpleNotification('Log copied to clipboard', 'success', 2000);\n } catch {\n SharedService.Instance.CreateSimpleNotification('Failed to copy log', 'error', 2000);\n }\n }\n }\n\n getFormattedResultDetails(): string {\n return this.parsedData.resultDetails\n ? JSON.stringify(this.parsedData.resultDetails, null, 2)\n : '// No result details available';\n }\n\n // Helper for relative time display\n getRelativeTime(date: Date | string | null): string {\n if (!date) return 'N/A';\n const d = new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return d.toLocaleDateString();\n }\n}\n","<div class=\"test-run-form\" [class.is-mobile]=\"false\">\n <!-- Error State -->\n @if (error) {\n <div class=\"error-banner\" (click)=\"retryLoad()\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n <span>{{ error }}</span>\n <button class=\"retry-btn\">\n <i class=\"fas fa-redo\"></i> Retry\n </button>\n </div>\n }\n\n <!-- Header Section -->\n <div class=\"test-run-header\" [class]=\"getStatusClass()\">\n <!-- Breadcrumb Navigation -->\n <nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n <ol>\n <li>\n <a href=\"javascript:void(0)\" (click)=\"navigateToTestingDashboard()\">\n <i class=\"fas fa-vial\"></i>\n <span class=\"breadcrumb-text\">Testing</span>\n </a>\n </li>\n @if (test) {\n <li>\n <i class=\"fas fa-chevron-right separator\"></i>\n <a href=\"javascript:void(0)\" (click)=\"openTest()\">\n <i class=\"fas fa-flask\"></i>\n <span class=\"breadcrumb-text\">{{ test.Name }}</span>\n </a>\n </li>\n }\n <li class=\"current\">\n <i class=\"fas fa-chevron-right separator\"></i>\n <span>Run #{{ record.ID.substring(0, 8) }}</span>\n </li>\n </ol>\n </nav>\n\n <div class=\"header-content\">\n <div class=\"header-left\">\n <!-- Status Indicator -->\n <div class=\"status-indicator\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n\n <div class=\"test-run-info\">\n <h1>\n Test Run\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n </h1>\n <div class=\"test-run-meta\">\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n {{ record.Status }}\n </span>\n @if (test) {\n <span class=\"meta-item\">\n <i class=\"fas fa-flask\"></i>\n {{ test.Type }}\n </span>\n }\n @if (autoRefreshEnabled) {\n <span class=\"meta-item\">\n <i class=\"fas fa-sync-alt fa-spin\"></i>\n Auto-refreshing\n </span>\n }\n </div>\n </div>\n </div>\n\n <div class=\"header-actions\">\n <button mjButton (click)=\"reRunTest()\" [disabled]=\"!record.TestID\" title=\"Re-run this test (Cmd+Shift+R)\">\n <i class=\"fas fa-redo\"></i>\n <span class=\"btn-text\">Re-run</span>\n </button>\n <button mjButton (click)=\"refresh()\" [disabled]=\"isRefreshing\" title=\"Refresh (Cmd+R)\">\n <i class=\"fas fa-sync-alt\" [class.fa-spin]=\"isRefreshing\"></i>\n <span class=\"btn-text\">Refresh</span>\n </button>\n </div>\n </div>\n\n <!-- Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-clock\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ getRelativeTime(record.StartedAt) }}</div>\n <div class=\"metric-detail\">{{ record.StartedAt | date:'short' }}</div>\n </div>\n </div>\n\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-stopwatch\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ calculateDuration() }}</div>\n </div>\n </div>\n\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-star\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Score</div>\n <div class=\"metric-value\">{{ formatScore(record.Score) }}</div>\n @if (record.Score != null) {\n <div class=\"metric-progress\">\n <div class=\"progress-bar\" [style.width.%]=\"getScorePercentage()\" [style.background-color]=\"getStatusColor()\"></div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-check-double\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Checks</div>\n <div class=\"metric-value\">{{ record.PassedChecks }}/{{ record.TotalChecks }}</div>\n @if (record.TotalChecks) {\n <div class=\"metric-progress\">\n <div class=\"progress-bar\" [style.width.%]=\"getPassRatePercentage()\" [style.background-color]=\"getStatusColor()\"></div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"metric-card\">\n <div class=\"metric-icon\">\n <i class=\"fas fa-dollar-sign\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.CostUSD) }}</div>\n </div>\n </div>\n </div>\n\n <!-- Secondary Info -->\n @if (record.RunByUser || testSuiteRun || record.TargetLogEntityID) {\n <div class=\"secondary-info\">\n @if (record.RunByUser) {\n <span class=\"info-chip\">\n <i class=\"fas fa-user\"></i>\n {{ record.RunByUser }}\n </span>\n }\n @if (testSuiteRun) {\n <span class=\"info-chip clickable\" (click)=\"openTestSuiteRun()\">\n <i class=\"fas fa-layer-group\"></i>\n Part of Suite Run (Seq: {{ record.Sequence }})\n </span>\n }\n <!-- Target Entity Link Pill -->\n @if (record.TargetLogEntityID && record.TargetLogID) {\n <mj-entity-link-pill\n [entityName]=\"record.TargetLogEntity\"\n [recordId]=\"record.TargetLogID\">\n </mj-entity-link-pill>\n }\n </div>\n }\n\n <!-- Tags Section - Sleek inline design -->\n @if (!editingTags) {\n <div class=\"tags-bar\">\n <div class=\"tags-bar-content\">\n <span class=\"tags-bar-label\"><i class=\"fas fa-tags\"></i></span>\n @if (tags.length > 0) {\n <div class=\"tags-bar-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-inline\">{{ tag }}</span>\n }\n </div>\n }\n @if (tags.length === 0) {\n <span class=\"tags-bar-empty\">No tags</span>\n }\n <button class=\"tags-bar-edit\" (click)=\"startEditingTags()\" title=\"Edit tags\">\n <i class=\"fas fa-plus\"></i> Add\n </button>\n </div>\n </div>\n }\n\n <!-- Tags Editor - Expanded when editing -->\n @if (editingTags) {\n <div class=\"tags-editor-panel\">\n <div class=\"tags-editor-header\">\n <span class=\"tags-editor-title\"><i class=\"fas fa-tags\"></i> Edit Tags</span>\n </div>\n <div class=\"tags-editor-body\">\n <div class=\"tags-editor-chips\">\n @for (tag of tags; track tag) {\n <span class=\"tag-editable\">\n {{ tag }}\n <button class=\"tag-remove-btn\" (click)=\"removeTag(tag)\" title=\"Remove tag\">\n <i class=\"fas fa-times\"></i>\n </button>\n </span>\n }\n @if (tags.length === 0) {\n <span class=\"tags-empty-hint\">No tags yet</span>\n }\n </div>\n <div class=\"tags-editor-input\">\n <input type=\"text\"\n [(ngModel)]=\"newTag\"\n placeholder=\"Type a tag and press Enter...\"\n (keyup.enter)=\"addTag()\"\n class=\"tag-text-input\" />\n <button mjButton (click)=\"addTag()\" [disabled]=\"!newTag.trim()\" variant=\"flat\">\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n </div>\n <div class=\"tags-editor-footer\">\n <button mjButton (click)=\"saveTags()\" variant=\"primary\" [disabled]=\"savingTags\">\n @if (savingTags) {\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n {{ savingTags ? 'Saving...' : 'Save' }}\n </button>\n <button mjButton (click)=\"cancelEditingTags()\" variant=\"flat\">Cancel</button>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <div class=\"tabs\" role=\"tablist\">\n <button class=\"tab\" [class.active]=\"activeTab === 'overview'\" (click)=\"changeTab('overview')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'overview'\" title=\"Press 1\">\n <i class=\"fas fa-chart-pie\"></i>\n <span>Overview</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'details'\" title=\"Press 2\">\n <i class=\"fas fa-info-circle\"></i>\n <span>Details</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'ai-runs'\" (click)=\"changeTab('ai-runs')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'ai-runs'\" title=\"Press 3\">\n <i class=\"fas fa-robot\"></i>\n <span>AI Runs</span>\n @if (aiRunsLoaded) {\n <span class=\"tab-badge\">{{ aiAgentRuns.length + aiPromptRuns.length }}</span>\n }\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'feedback'\" (click)=\"changeTab('feedback')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'feedback'\" title=\"Press 4\">\n <i class=\"fas fa-comments\"></i>\n <span>Feedback</span>\n @if (feedbackLoaded) {\n <span class=\"tab-badge\">{{ feedbacks.length }}</span>\n }\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'execution'\" (click)=\"changeTab('execution')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'execution'\" title=\"Press 5\">\n <i class=\"fas fa-microchip\"></i>\n <span>Execution</span>\n </button>\n @if (record.Log) {\n <button class=\"tab\" [class.active]=\"activeTab === 'log'\" (click)=\"changeTab('log')\"\n role=\"tab\" [attr.aria-selected]=\"activeTab === 'log'\" title=\"Press 6\">\n <i class=\"fas fa-terminal\"></i>\n <span>Log</span>\n </button>\n }\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n @if (activeTab === 'overview') {\n <div class=\"overview-tab\" [@fadeIn]>\n <!-- Result Hero -->\n <div class=\"result-hero\" [class]=\"getStatusClass()\">\n <div class=\"result-icon-wrapper\">\n <div class=\"result-icon\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n </div>\n @if (record.Status === 'Running') {\n <div class=\"result-pulse\"></div>\n }\n </div>\n <div class=\"result-text\">\n <h2>TEST {{ record.Status.toUpperCase() }}</h2>\n <div class=\"result-details\">\n <span class=\"result-score\">Score: {{ formatScore(record.Score) }}</span>\n <span class=\"result-divider\">|</span>\n <span class=\"result-checks\">{{ record.PassedChecks }} of {{ record.TotalChecks }} checks passed</span>\n </div>\n </div>\n </div>\n <!-- Check Results -->\n @if (getCheckResults().length > 0) {\n <div class=\"check-results\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-tasks\"></i> Check Results</h3>\n <span class=\"check-summary\">{{ record.PassedChecks }} passed, {{ record.FailedChecks }} failed</span>\n </div>\n <div class=\"check-list\">\n @for (check of getCheckResults(); track check; let i = $index) {\n <div class=\"check-item\"\n [class.passed]=\"check.passed\" [class.failed]=\"!check.passed\"\n [style.animation-delay.ms]=\"i * 50\">\n <div class=\"check-status\">\n <i class=\"fas\" [class.fa-check-circle]=\"check.passed\" [class.fa-times-circle]=\"!check.passed\"></i>\n </div>\n <div class=\"check-content\">\n <div class=\"check-name\">{{ check.name }}</div>\n @if (check.message) {\n <div class=\"check-message\">{{ check.message }}</div>\n }\n </div>\n @if (check.weight) {\n <div class=\"check-weight\">\n <span class=\"weight-label\">Weight:</span> {{ check.weight }}\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Data Comparison -->\n <div class=\"comparison-section\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-exchange-alt\"></i> Data Comparison</h3>\n </div>\n <div class=\"comparison-tabs\">\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'input'\" (click)=\"setComparisonView('input')\">\n <i class=\"fas fa-sign-in-alt\"></i> Input\n </button>\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'expected'\" (click)=\"setComparisonView('expected')\">\n <i class=\"fas fa-bullseye\"></i> Expected\n </button>\n <button class=\"comparison-tab\" [class.active]=\"comparisonView === 'actual'\" (click)=\"setComparisonView('actual')\">\n <i class=\"fas fa-check-square\"></i> Actual\n </button>\n </div>\n <div class=\"comparison-content\">\n <mj-code-editor\n [value]=\"getComparisonData()\"\n language=\"json\"\n [readonly]=\"true\"\n [toolbar]=\"jsonToolbar\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"details-tab\" [@fadeIn]>\n <div class=\"details-grid\">\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-fingerprint\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Test Run ID</div>\n <div class=\"detail-value monospace\">{{ record.ID }}</div>\n </div>\n </div>\n @if (test) {\n <div class=\"detail-card clickable\" (click)=\"openTest()\">\n <div class=\"detail-icon\"><i class=\"fas fa-flask\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Test</div>\n <div class=\"detail-value link\">{{ test.Name }}</div>\n </div>\n <i class=\"fas fa-external-link-alt detail-action\"></i>\n </div>\n }\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-tag\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Target Type</div>\n <div class=\"detail-value\">{{ record.TargetType || 'N/A' }}</div>\n </div>\n </div>\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-play-circle\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Started At</div>\n <div class=\"detail-value\">{{ record.StartedAt | date:'medium' }}</div>\n </div>\n </div>\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-stop-circle\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Completed At</div>\n <div class=\"detail-value\">{{ record.CompletedAt | date:'medium' }}</div>\n </div>\n </div>\n <div class=\"detail-card\">\n <div class=\"detail-icon\"><i class=\"fas fa-hourglass-half\"></i></div>\n <div class=\"detail-content\">\n <div class=\"detail-label\">Duration</div>\n <div class=\"detail-value\">{{ calculateDuration() }}</div>\n </div>\n </div>\n </div>\n <!-- Error Message -->\n @if (record.ErrorMessage) {\n <div class=\"error-section\">\n <div class=\"section-header error\">\n <h3><i class=\"fas fa-exclamation-triangle\"></i> Error Message</h3>\n </div>\n <div class=\"error-content\">\n <mj-code-editor\n [value]=\"record.ErrorMessage\"\n [readonly]=\"true\"\n [toolbar]=\"jsonToolbar\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n <!-- Result Details -->\n @if (parsedData.resultDetails) {\n <div class=\"result-details-section\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-file-code\"></i> Result Details</h3>\n </div>\n <div class=\"result-details-content\">\n <mj-code-editor\n [value]=\"getFormattedResultDetails()\"\n language=\"json\"\n [readonly]=\"true\"\n [toolbar]=\"jsonToolbar\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- AI Runs Tab -->\n @if (activeTab === 'ai-runs') {\n <div class=\"ai-runs-tab\" [@fadeIn]>\n <!-- Loading State -->\n @if (loadingAIRuns) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2,3]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- AI Agent Runs -->\n @if (!loadingAIRuns && aiAgentRuns.length > 0) {\n <div class=\"ai-section\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-robot\"></i> AI Agent Runs</h3>\n <span class=\"count-badge\">{{ aiAgentRuns.length }}</span>\n </div>\n <div class=\"ai-run-list\">\n @for (run of aiAgentRuns; track run) {\n <div class=\"ai-run-card\" (click)=\"openAIAgentRun(run.ID)\">\n <div class=\"ai-run-icon agent\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <div class=\"ai-run-content\">\n <div class=\"ai-run-name\">{{ run.Agent }}</div>\n <div class=\"ai-run-meta\">\n <span class=\"status-chip\" [class]=\"run.Status.toLowerCase()\">{{ run.Status }}</span>\n @if (run.TotalCost) {\n <span class=\"cost-chip\">\n <i class=\"fas fa-dollar-sign\"></i> {{ run.TotalCost | number:'1.4-4' }}\n </span>\n }\n </div>\n </div>\n <i class=\"fas fa-chevron-right ai-run-arrow\"></i>\n </div>\n }\n </div>\n </div>\n }\n <!-- AI Prompt Runs -->\n @if (!loadingAIRuns && aiPromptRuns.length > 0) {\n <div class=\"ai-section\">\n <div class=\"section-header\">\n <h3><i class=\"fas fa-comment-dots\"></i> AI Prompt Runs</h3>\n <span class=\"count-badge\">{{ aiPromptRuns.length }}</span>\n </div>\n <div class=\"ai-run-list\">\n @for (run of aiPromptRuns; track run) {\n <div class=\"ai-run-card\" (click)=\"openAIPromptRun(run.ID)\">\n <div class=\"ai-run-icon prompt\">\n <i class=\"fas fa-comment-dots\"></i>\n </div>\n <div class=\"ai-run-content\">\n <div class=\"ai-run-name\">{{ run.Prompt || run.Model }}</div>\n <div class=\"ai-run-meta\">\n @if (run.TotalCost) {\n <span class=\"cost-chip\">\n <i class=\"fas fa-dollar-sign\"></i> {{ run.TotalCost | number:'1.4-4' }}\n </span>\n }\n </div>\n </div>\n <i class=\"fas fa-chevron-right ai-run-arrow\"></i>\n </div>\n }\n </div>\n </div>\n }\n <!-- Empty State -->\n @if (aiRunsLoaded && aiAgentRuns.length === 0 && aiPromptRuns.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <h3>No AI Runs</h3>\n <p>This test execution didn't involve any AI agent or prompt runs.</p>\n </div>\n }\n </div>\n }\n\n <!-- Feedback Tab -->\n @if (activeTab === 'feedback') {\n <div class=\"feedback-tab\" [@fadeIn]>\n <!-- Loading State -->\n @if (loadingFeedback) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-avatar\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n <div class=\"skeleton-line medium\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Feedback List -->\n @if (!loadingFeedback && feedbacks.length > 0) {\n <div class=\"feedback-list\">\n @for (feedback of feedbacks; track feedback) {\n <div class=\"feedback-item\">\n <div class=\"feedback-header\">\n <div class=\"feedback-user\">\n <div class=\"user-avatar\">\n <i class=\"fas fa-user\"></i>\n </div>\n <span class=\"user-name\">{{ feedback.ReviewerUser }}</span>\n </div>\n <div class=\"feedback-date\">\n {{ getRelativeTime(feedback.__mj_CreatedAt) }}\n </div>\n </div>\n <div class=\"feedback-body\">\n <div class=\"feedback-rating\">\n <div class=\"rating-stars\">\n @for (s of [1,2,3,4,5,6,7,8,9,10]; track s) {\n <i class=\"fas fa-star\"\n [class.filled]=\"s <= (feedback.Rating || 0)\"></i>\n }\n </div>\n <span class=\"rating-value\">{{ feedback.Rating }}/10</span>\n </div>\n @if (feedback.IsCorrect !== null) {\n <div class=\"feedback-verdict\">\n <span class=\"verdict-badge\" [class.correct]=\"feedback.IsCorrect\" [class.incorrect]=\"!feedback.IsCorrect\">\n <i class=\"fas\" [class.fa-check]=\"feedback.IsCorrect\" [class.fa-times]=\"!feedback.IsCorrect\"></i>\n {{ feedback.IsCorrect ? 'Marked Correct' : 'Marked Incorrect' }}\n </span>\n </div>\n }\n @if (feedback.CorrectionSummary) {\n <div class=\"feedback-comments\">\n <p>{{ feedback.CorrectionSummary }}</p>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (feedbackLoaded && feedbacks.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-comments\"></i>\n </div>\n <h3>No Feedback Yet</h3>\n <p>No one has reviewed this test run yet. Be the first to provide feedback!</p>\n </div>\n }\n </div>\n }\n\n <!-- Execution Context Tab -->\n @if (activeTab === 'execution') {\n <div class=\"execution-tab\" [@fadeIn]>\n <mj-execution-context\n [machineName]=\"record.MachineName\"\n [machineId]=\"record.MachineID\"\n [runByUserName]=\"record.RunByUserName\"\n [runByUserEmail]=\"record.RunByUserEmail\"\n [runContextDetailsJson]=\"record.RunContextDetails\">\n </mj-execution-context>\n </div>\n }\n\n <!-- Execution Log Tab -->\n @if (activeTab === 'log') {\n <div class=\"log-tab\" [@fadeIn]>\n <div class=\"log-header\">\n <div class=\"log-title\">\n <i class=\"fas fa-terminal\"></i>\n <h3>Execution Log</h3>\n </div>\n <div class=\"log-actions\">\n <button mjButton (click)=\"copyLogToClipboard()\" variant=\"flat\">\n <i class=\"fas fa-copy\"></i>\n <span class=\"btn-text\">Copy</span>\n </button>\n </div>\n </div>\n <div class=\"log-container\">\n <mj-code-editor\n [value]=\"record.Log || ''\"\n [readonly]=\"true\"\n [toolbar]=\"jsonToolbar\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n\n <!-- Keyboard Shortcuts Help (shown on hover of ? icon) -->\n <div class=\"shortcuts-hint\" title=\"Keyboard Shortcuts\">\n <i class=\"fas fa-keyboard\"></i>\n <div class=\"shortcuts-popup\">\n <h4>Keyboard Shortcuts</h4>\n <ul>\n <li><kbd>1-6</kbd> Switch tabs</li>\n <li><kbd>Cmd+R</kbd> Refresh</li>\n <li><kbd>Cmd+Shift+R</kbd> Re-run test</li>\n </ul>\n </div>\n </div>\n</div>\n"]}
@@ -37,7 +37,7 @@ export declare class MJTestSuiteFormComponentExtended extends MJTestSuiteFormCom
37
37
  keyboardShortcutsEnabled: boolean;
38
38
  showShortcuts: boolean;
39
39
  private shortcutsSettingEntity;
40
- private metadata;
40
+ private get metadata();
41
41
  evalPreferences: EvaluationPreferences;
42
42
  filtersCollapsed: boolean;
43
43
  matrixSortBy: 'sequence' | 'name';
@@ -1 +1 @@
1
- {"version":3,"file":"test-suite-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-suite-form.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-suite-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Tests/test-suite-form.component.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import { Component, ChangeDetectionStrategy, HostListener, ViewChild, ViewContai
8
8
  import * as d3 from 'd3';
9
9
  import { Subject } from 'rxjs';
10
10
  import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
11
- import { CompositeKey, Metadata, RunView } from '@memberjunction/core';
11
+ import { CompositeKey, RunView } from '@memberjunction/core';
12
12
  import { UserInfoEngine } from '@memberjunction/core-entities';
13
13
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
14
14
  import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
@@ -1703,7 +1703,6 @@ let MJTestSuiteFormComponentExtended = class MJTestSuiteFormComponentExtended ex
1703
1703
  this.keyboardShortcutsEnabled = true;
1704
1704
  this.showShortcuts = false; // Hidden by default
1705
1705
  this.shortcutsSettingEntity = null;
1706
- this.metadata = new Metadata();
1707
1706
  // Evaluation preferences
1708
1707
  this.evalPreferences = { showExecution: true, showHuman: true, showAuto: false };
1709
1708
  // Filter collapse state
@@ -1723,6 +1722,7 @@ let MJTestSuiteFormComponentExtended = class MJTestSuiteFormComponentExtended ex
1723
1722
  this.viewContainerRef = inject(ViewContainerRef);
1724
1723
  this.appManager = inject(ApplicationManager);
1725
1724
  }
1725
+ get metadata() { return this.ProviderToUse; }
1726
1726
  async ngOnInit() {
1727
1727
  await super.ngOnInit();
1728
1728
  this.loadShortcutsSetting();
@@ -1811,7 +1811,7 @@ let MJTestSuiteFormComponentExtended = class MJTestSuiteFormComponentExtended ex
1811
1811
  this.loadingTests = true;
1812
1812
  this.cdr.markForCheck();
1813
1813
  try {
1814
- const rv = new RunView();
1814
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1815
1815
  const result = await rv.RunView({
1816
1816
  EntityName: 'MJ: Test Suite Tests',
1817
1817
  ExtraFilter: `SuiteID='${this.record.ID}'`,
@@ -1837,7 +1837,7 @@ let MJTestSuiteFormComponentExtended = class MJTestSuiteFormComponentExtended ex
1837
1837
  this.loadingRuns = true;
1838
1838
  this.cdr.markForCheck();
1839
1839
  try {
1840
- const rv = new RunView();
1840
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1841
1841
  const result = await rv.RunView({
1842
1842
  EntityName: 'MJ: Test Suite Runs',
1843
1843
  ExtraFilter: `SuiteID='${this.record.ID}'`,
@@ -1990,7 +1990,7 @@ let MJTestSuiteFormComponentExtended = class MJTestSuiteFormComponentExtended ex
1990
1990
  this.cdr.markForCheck();
1991
1991
  try {
1992
1992
  // Load all runs for analytics (not just recent 50)
1993
- const rv = new RunView();
1993
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1994
1994
  const result = await rv.RunView({
1995
1995
  EntityName: 'MJ: Test Suite Runs',
1996
1996
  ExtraFilter: `SuiteID='${this.record.ID}'`,
@@ -2126,7 +2126,7 @@ let MJTestSuiteFormComponentExtended = class MJTestSuiteFormComponentExtended ex
2126
2126
  this.loadingMatrix = true;
2127
2127
  this.cdr.markForCheck();
2128
2128
  try {
2129
- const rv = new RunView();
2129
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
2130
2130
  const filteredRuns = this.getFilteredAnalyticsData();
2131
2131
  // Load test runs for each suite run (limit to most recent 10 for performance)
2132
2132
  const runsToLoad = filteredRuns.slice(0, 10);
@@ -2211,7 +2211,7 @@ let MJTestSuiteFormComponentExtended = class MJTestSuiteFormComponentExtended ex
2211
2211
  if (testRunIds.length === 0)
2212
2212
  return feedbackMap;
2213
2213
  try {
2214
- const rv = new RunView();
2214
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
2215
2215
  // Build IN clause for the IDs (batch in chunks to avoid query size limits)
2216
2216
  const chunkSize = 50;
2217
2217
  for (let i = 0; i < testRunIds.length; i += chunkSize) {
@@ -3094,7 +3094,7 @@ let MJTestSuiteFormComponentExtended = class MJTestSuiteFormComponentExtended ex
3094
3094
  this.loadingCompare = true;
3095
3095
  this.cdr.markForCheck();
3096
3096
  try {
3097
- const rv = new RunView();
3097
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
3098
3098
  // Load test runs for both suite runs in parallel
3099
3099
  const [resultA, resultB] = await Promise.all([
3100
3100
  rv.RunView({