@memberjunction/ng-core-entity-forms 5.4.1 → 5.6.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 (345) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +6 -5
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  4. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  5. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +3 -2
  6. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +22 -22
  8. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  10. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +9 -8
  11. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  12. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +4 -3
  14. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +6 -5
  17. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  18. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +10 -10
  19. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  20. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  21. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +4 -3
  22. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  23. package/dist/lib/custom/Entities/entity-form.component.d.ts +2 -0
  24. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  25. package/dist/lib/custom/Entities/entity-form.component.js +15 -11
  26. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  27. package/dist/lib/custom/Lists/list-form.component.js +7 -7
  28. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  29. package/dist/lib/custom/Queries/query-form.component.js +4 -4
  30. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  31. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +4 -0
  32. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  33. package/dist/lib/custom/Tests/test-suite-form.component.js +13 -5
  34. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  35. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  36. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +3 -2
  37. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  38. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  39. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +4 -3
  40. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  41. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +1 -1
  42. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +5 -4
  43. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  44. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +1 -0
  45. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  46. package/dist/lib/custom/shared/entity-selector-dialog.component.js +7 -3
  47. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  48. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js +10 -10
  49. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js.map +1 -1
  50. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +90 -90
  51. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  52. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js +6 -6
  53. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js.map +1 -1
  54. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +11 -11
  55. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  56. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +3 -3
  57. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  58. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js +13 -13
  59. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js.map +1 -1
  60. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +6 -6
  61. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
  62. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js +4 -4
  63. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js.map +1 -1
  64. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js +13 -13
  65. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js.map +1 -1
  66. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js +23 -23
  67. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js.map +1 -1
  68. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +58 -58
  69. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  70. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js +3 -3
  71. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js.map +1 -1
  72. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js +3 -3
  73. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +10 -10
  75. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +3 -3
  77. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +55 -55
  79. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js +10 -10
  81. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +3 -3
  83. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +8 -8
  85. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js +3 -3
  87. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js.map +1 -1
  88. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js +6 -6
  89. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js.map +1 -1
  90. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +13 -13
  91. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js +4 -4
  93. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js.map +1 -1
  94. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js +5 -5
  95. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js.map +1 -1
  96. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js +5 -5
  97. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js.map +1 -1
  98. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js +5 -5
  99. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js.map +1 -1
  100. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +44 -44
  101. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js +11 -11
  103. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js.map +1 -1
  104. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js +6 -6
  105. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js.map +1 -1
  106. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js +6 -6
  107. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +10 -10
  109. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +19 -19
  111. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.d.ts.map +1 -1
  113. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js +8 -26
  114. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js.map +1 -1
  115. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +10 -10
  116. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js +6 -6
  118. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js.map +1 -1
  119. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js +10 -10
  120. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js +19 -19
  122. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +5 -5
  124. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  125. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js +10 -10
  126. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js.map +1 -1
  127. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +8 -8
  128. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js +6 -6
  130. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js +6 -6
  132. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.d.ts.map +1 -1
  134. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js +23 -41
  135. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +18 -18
  137. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js +14 -14
  139. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js.map +1 -1
  140. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js +6 -6
  141. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +15 -15
  143. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js +3 -3
  145. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js.map +1 -1
  146. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js +3 -3
  147. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js +10 -10
  149. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js.map +1 -1
  150. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +10 -10
  151. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  152. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +14 -14
  153. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  154. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js +10 -10
  155. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js.map +1 -1
  156. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +10 -10
  157. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +17 -17
  159. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  160. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js +8 -8
  161. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js.map +1 -1
  162. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js +6 -6
  163. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +20 -20
  165. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +6 -6
  167. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  168. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js +4 -4
  169. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js.map +1 -1
  170. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js +5 -5
  171. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js +6 -6
  173. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js +12 -12
  175. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js.map +1 -1
  176. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js +14 -14
  177. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js.map +1 -1
  178. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js +6 -6
  179. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +6 -6
  181. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
  182. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +6 -6
  183. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  184. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js +22 -22
  185. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js.map +1 -1
  186. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js +3 -3
  187. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js.map +1 -1
  188. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js +6 -6
  189. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js.map +1 -1
  190. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js +3 -3
  191. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js.map +1 -1
  192. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +217 -217
  193. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  194. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js +14 -14
  195. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js.map +1 -1
  196. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js +6 -6
  197. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js.map +1 -1
  198. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js +6 -6
  199. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js.map +1 -1
  200. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +14 -14
  201. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  202. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js +6 -6
  203. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js.map +1 -1
  204. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +3 -3
  205. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  206. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js +6 -6
  207. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js.map +1 -1
  208. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +18 -18
  209. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  210. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +9 -9
  211. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  212. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js +10 -10
  213. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js.map +1 -1
  214. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +12 -12
  215. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  216. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js +10 -10
  217. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js.map +1 -1
  218. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +14 -14
  219. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
  220. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js +10 -10
  221. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js.map +1 -1
  222. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js +12 -12
  223. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js.map +1 -1
  224. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js +10 -10
  225. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js.map +1 -1
  226. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js +5 -5
  227. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js.map +1 -1
  228. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js +8 -8
  229. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js.map +1 -1
  230. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js +4 -4
  231. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js.map +1 -1
  232. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +16 -16
  233. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
  234. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.js +6 -6
  235. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.js.map +1 -1
  236. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.js +6 -6
  237. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.js.map +1 -1
  238. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.js +6 -6
  239. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.js.map +1 -1
  240. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +8 -8
  241. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  242. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  243. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +74 -54
  244. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  245. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js +10 -10
  246. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js.map +1 -1
  247. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.d.ts +10 -0
  248. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.d.ts.map +1 -0
  249. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.js +63 -0
  250. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.js.map +1 -0
  251. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js +6 -6
  252. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js.map +1 -1
  253. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js +6 -6
  254. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js.map +1 -1
  255. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js +6 -6
  256. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js.map +1 -1
  257. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js +6 -6
  258. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js.map +1 -1
  259. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js +6 -6
  260. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js.map +1 -1
  261. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +3 -3
  262. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
  263. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js +6 -6
  264. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js.map +1 -1
  265. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js +10 -10
  266. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js.map +1 -1
  267. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.js +8 -8
  268. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.js.map +1 -1
  269. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.js +10 -10
  270. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.js.map +1 -1
  271. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +18 -18
  272. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  273. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +28 -28
  274. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  275. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +6 -6
  276. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  277. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.d.ts +10 -0
  278. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.d.ts.map +1 -0
  279. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js +109 -0
  280. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js.map +1 -0
  281. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js +6 -6
  282. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js.map +1 -1
  283. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +3 -3
  284. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  285. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js +3 -3
  286. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js.map +1 -1
  287. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js +3 -3
  288. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js.map +1 -1
  289. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js +10 -10
  290. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js.map +1 -1
  291. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +10 -10
  292. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  293. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +16 -16
  294. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  295. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js +3 -3
  296. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js.map +1 -1
  297. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js +34 -34
  298. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js.map +1 -1
  299. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js +10 -10
  300. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js.map +1 -1
  301. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js +6 -6
  302. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js.map +1 -1
  303. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js +6 -6
  304. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js.map +1 -1
  305. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +4 -4
  306. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
  307. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js +14 -14
  308. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js.map +1 -1
  309. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js +3 -3
  310. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js.map +1 -1
  311. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +5 -5
  312. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
  313. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +3 -3
  314. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
  315. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js +4 -4
  316. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js.map +1 -1
  317. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +334 -334
  318. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  319. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js +6 -6
  320. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js.map +1 -1
  321. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +7 -7
  322. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
  323. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +14 -14
  324. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
  325. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js +10 -10
  326. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js.map +1 -1
  327. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js +6 -6
  328. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js.map +1 -1
  329. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js +10 -10
  330. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js.map +1 -1
  331. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +6 -6
  332. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  333. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js +18 -18
  334. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js.map +1 -1
  335. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.js +10 -10
  336. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.js.map +1 -1
  337. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.js +6 -6
  338. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.js.map +1 -1
  339. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js +6 -6
  340. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js.map +1 -1
  341. package/dist/lib/generated/generated-forms.module.d.ts +80 -78
  342. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  343. package/dist/lib/generated/generated-forms.module.js +25 -19
  344. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  345. package/package.json +30 -30
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-run-visualization.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run-visualization.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run-visualization.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAqB,SAAS,EAAgD,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACtJ,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAQ,MAAM,gBAAgB,CAAC;;;;;;ICA7C,8BAAyB;IACvB,uBAAgD;IAChD,4BAAM;IAAA,YAAW;IACnB,AADmB,iBAAO,EACpB;;;IADE,eAAW;IAAX,kCAAW;;;IA0BX,+BAA6B;IAC3B,wBAA2C;IAC3C,4BAAM;IAAA,wCAAwB;IAChC,AADgC,iBAAO,EACjC;;;;IAQR,AADF,+CAA2F,sCAK3C;IAA5C,AADA,AADA,mPAAc,wBAAiB,KAAC,8PACT,kCAA2B,KAAC,sPAChC,8BAAuB,KAAC;IAE/C,AADE,iBAA8B,EACV;;;IAPgD,AAAhB,AAAhB,AAAjB,8BAAgB,gBAAgB,gBAAgB,qBAAqB;IAEtF,cAAqC;IAArC,0DAAqC;;;;IA9BrC,AADF,AADF,AADF,AAFF,yCAA+D,6BAElB,gBACI,aACd,aACA;IACzB,uBAA2C;IAC3C,sCACF;IAAA,iBAAM;IAEJ,AADF,+BAA2B,iBACkB;IAAnC,oMAAS,eAAQ,KAAC;IACxB,yBAAuC;IACzC,iBAAS;IACT,mCAA6C;IAArC,qMAAS,gBAAS,KAAC;IACzB,yBAAwC;IAC1C,iBAAS;IACT,mCAAiD;IAAzC,qMAAS,kBAAW,KAAC;IAC3B,yBAAoC;IACtC,iBAAS;IACT,iCAAyB;IAAA,aAAuC;IAEpE,AADE,AADkE,iBAAO,EACnE,EACF;IACN,mHAAe;IAOnB,AADE,iBAAM,EACc;IAGtB,mIAAoB;IAUtB,iBAAiB;;;IAxCM,cAAqB;IAArB,mCAAqB;IAiBT,gBAAuC;IAAvC,uEAAuC;IAGpE,cAKC;IALD,0CAKC;IAKL,cASC;IATD,+CASC;;ADbP,MAAM,OAAO,gCAAgC;IAW3C,yCAAyC;IACjC,yBAAyB,CAAC,SAAiB;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IA6DD,YACU,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;QA1ExB,aAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAC/B,oBAAe,GAAG,KAAK,CAAC;QAEhC,wCAAwC;QAChC,mBAAc,GAAa,EAAE,CAAC;QAS9B,gBAAW,GAA2J,IAAI,CAAC;QAEnL,YAAO,GAAG,KAAK,CAAC,CAAE,4CAA4C;QAC9D,UAAK,GAAkB,IAAI,CAAC;QACpB,gBAAW,GAAG,KAAK,CAAC,CAAE,wCAAwC;QAEtE,iBAAY,GAAwB,IAAI,CAAC;QAEzC,kBAAkB;QACV,UAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;QACpC,WAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;QACtC,gBAAW,GAA6D,EAAE,CAAC;QAEnF,qBAAqB;QACrB,YAAO,GAAG;YACR,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;SACV,CAAC;QAEF,aAAa;QACL,cAAS,GASb;YACF,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SAC/B,CAAC;QAEF,YAAY;QACJ,aAAQ,GAAG;YACjB,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;SACrB,CAAC;QAEF,iCAAiC;QACzB,qBAAgB,GAAkB,IAAI,CAAC;QAE/C,0CAA0C;QAClC,iBAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,wBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,wBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,sBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QA23BjD,gBAAW,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,OAAO;YAElE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;YACnD,IAAI,CAAC,GAAG;gBAAE,OAAO;YAEjB,MAAM,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YAChC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YACrB,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YACrB,MAAM,IAAI,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE/D,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;YAElD,0BAA0B;YAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC;YAEhF,mBAAmB;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAO,CAAC,CAAC;YACpD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;gBACd,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YAChB,CAAC;YAED,qBAAqB;YACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAA;QAEO,cAAS,GAAG,CAAC,KAAiB,EAAE,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,OAAO;YAElE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAEpD,WAAW;YACX,IAAI,CAAC,SAAS,GAAG;gBACf,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,CAAC;gBACT,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;aAC/B,CAAC;YAEF,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC,CAAA;IAv6BE,CAAC;IAEJ,QAAQ;QACN,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,gCAAgC;YAChC,aAAa,CAAC;gBACZ,IAAI,CAAC,UAAU,CAAC,MAAM;gBACtB,IAAI,CAAC,UAAU,CAAC,QAAQ;gBACxB,IAAI,CAAC,UAAU,CAAC,WAAW;gBAC3B,IAAI,CAAC,UAAU,CAAC,WAAW;gBAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ;aACzB,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE;gBAChE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;gBAE3B,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE;wBACvD,KAAK,EAAE,KAAK,CAAC,MAAM;wBACnB,OAAO,EAAE,OAAO,CAAC,MAAM;wBACvB,eAAe,EAAE,IAAI,CAAC,eAAe;qBACtC,CAAC,CAAC;oBAEH,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC;wBAC7D,mCAAmC;wBACnC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;oBAClE,CAAC;yBAAM,CAAC;wBACN,oCAAoC;wBACpC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;wBACtD,IAAI,CAAC,WAAW,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;oBAChE,CAAC;gBACH,CAAC;qBAAM,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBACtD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;oBACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,2BAA2B;YAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAoB,EAAE,EAAE;gBACvF,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;oBACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,GAAG,0BAA0B,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,eAAe;QACb,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,iBAAiB;QACjB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YACzD,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,0CAA0C;YAC1C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;gBACvD,IAAI,CAAC,kBAAkB,CACrB,IAAI,CAAC,WAAW,CAAC,KAAK,EACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,IAAI,CAAC,WAAW,CAAC,UAAU,EAC3B,IAAI,CAAC,WAAW,CAAC,UAAU,CAC5B,CAAC;gBACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,WAAW;QACT,uCAAuC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAEzB,4BAA4B;QAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACtC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAE/B,0CAA0C;QAC1C,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAExD,2CAA2C;QAC3C,IAAI,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACjE,IAAI,GAAG,EAAE,CAAC;gBACR,qDAAqD;gBACrD,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpD,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAC/D,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAC/D,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAE3D,4CAA4C;gBAC5C,yEAAyE;gBACzE,sFAAsF;gBACtF,GAAG,CAAC,gBAAgB,CAAC,iCAAiC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACxE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACtC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;gBAEH,iCAAiC;gBACjC,GAAG,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBACtD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACrC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;gBAEH,wBAAwB;gBACxB,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC;oBACtB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,qCAAqC;QACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,cAAc;QACd,IAAI,CAAC,SAAS,GAAG;YACf,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SAC/B,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG;YACd,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;SACrB,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,yCAAyC;QACzC,IAAI,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACpE,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAC/C,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEnC,0CAA0C;YAC1C,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACjD,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC5D,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC5D,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAExD,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,8BAA8B;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;QAChF,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAC3C,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC;QAClF,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACnD,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,KAA+B,EAC/B,OAA6B,EAC7B,UAAwC,EACxC,UAAiC;QAEjC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE;YACvC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;YACzB,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY;YACjC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa;SACnD,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,mCAAmC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC;YACH,6CAA6C;YAC7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;oBAChC,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;oBAC1C,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrB,CAAC,EAAE,CAAC,CAAkB,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,0BAA0B;YAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE1B,yBAAyB;YACzB,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAE3D,iBAAiB;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,mBAAmB;YACnB,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,cAAc;YACd,IAAI,CAAC,SAAS,EAAE,CAAC;YAEjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAEhD,oDAAoD;YACpD,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,+BAA+B,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAErB,oDAAoD;YACpD,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACd,wCAAwC;YACxC,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC5B,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,KAA+B,EAC/B,OAA6B,EAC7B,UAAiC;QAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,IAAI,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAgB,CAAC;QAChE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACxE,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC9C,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,6BAA6B;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtD,+BAA+B;gBAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACjE,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAEpC,MAAM,KAAK,GAAc;oBACvB,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,WAAW;oBAClC,CAAC,EAAE,CAAC;oBACJ,CAAC,EAAE,CAAC;oBACJ,KAAK,EAAE,GAAG;oBACV,MAAM,EAAE,GAAG;oBACX,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE,YAAY;iBACtB,CAAC;gBAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,sBAAsB;gBACtB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC7D,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAEnC,MAAM,QAAQ,GAAa;oBACzB,IAAI,EAAE,IAAI;oBACV,CAAC,EAAE,CAAC;oBACJ,CAAC,EAAE,CAAC;oBACJ,KAAK,EAAE,GAAG;oBACV,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,WAAW;iBACrB,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACpC,CAAC;YAED,sBAAsB;YACtB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBACrB,EAAE,EAAE,IAAI,CAAC,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,IAA4B,EAAE,UAAiC;QACvF,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACrC,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAExC,qBAAqB;QACrB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QAE3B,MAAM,SAAS,GAAG,GAAG,CAAC;QACtB,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,uBAAuB;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEpB,mBAAmB;QACnB,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;QACtF,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAE5B,OAAO;QACP,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEpB,QAAQ;QACR,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC7E,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9B,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9B,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACtC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACzC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACtC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAErB,YAAY;QACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEpB,yBAAyB;QACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC;YACjE,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;YACpE,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;gBAC7E,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC9B,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC9B,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACtC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACtC,KAAK,CAAC,WAAW,GAAG,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;gBACtD,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1E,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;YACpF,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrC,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC7C,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC7C,YAAY,CAAC,WAAW,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC5C,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAA4B,EAAE,MAA2B;QACxF,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAC3C,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzC,MAAM,UAAU,GAAG,GAAG,CAAC;QACvB,MAAM,WAAW,GAAG,GAAG,CAAC;QACxB,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,aAAa;QACb,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC1E,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACrC,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAElB,oBAAoB;QACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAChF,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAExB,qBAAqB;QACrB,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QACjF,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5D,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvD,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAEzB,aAAa;QACb,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEpB,QAAQ;QACR,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC7E,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9B,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9B,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACtC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACzC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACtC,KAAK,CAAC,WAAW,GAAG,MAAM,EAAE,KAAK,IAAI,WAAW,CAAC;QACjD,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAErB,yBAAyB;QACzB,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QAC9E,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACjD,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QACnC,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,UAAU,GAAG,EAAE,OAAO,CAAC,CAAC;QAEzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;QAClF,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3C,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEhC,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAClF,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACjD,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC3C,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC;QAC7B,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAElC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAEzB,0BAA0B;QAC1B,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YAChC,IAAI,CAAE,CAAC,CAAC,MAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,aAAa;QACnB,MAAM,YAAY,GAAG,GAAG,CAAC;QACzB,MAAM,YAAY,GAAG,GAAG,CAAC;QACzB,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,IAAI,QAAQ,GAAG,MAAM,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,wCAAwC;QACxC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtF,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAA4B;gBAC5C,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC,CAAC,CAAC;QAEL,mCAAmC;QACnC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,CAAC,CAAC,IAA8B,CAAC;YAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,IAA8B,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC;gBACpB,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC;gBAEtB,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACrB,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;gBACxF,CAAC;gBAED,QAAQ,IAAI,YAAY,CAAC;YAC3B,CAAC;iBAAM,IAAI,SAAS,EAAE,CAAC;gBACrB,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;gBACrB,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC;gBAEvB,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;oBACtB,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3F,CAAC;gBAED,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,yCAAyC;QACzC,IAAI,gBAAgB,GAAG,SAAS,CAAC,aAAa,CAAC,oBAAoB,CAAgB,CAAC;QACpF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,gBAAgB,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YAC/E,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAC5D,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC;QAED,6BAA6B;QAC7B,OAAO,gBAAgB,CAAC,UAAU,EAAE,CAAC;YACnC,gBAAgB,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEzC,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;YAE3C,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;gBACxC,KAAK,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;YACvC,CAAC;iBAAM,IAAI,SAAS,EAAE,CAAC;gBACrB,KAAK,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC1C,KAAK,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;YACzC,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBAClC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,OAAO,EAAE,CAAC;gBACnB,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;gBACpC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;gBAC5E,MAAM,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBAChD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACvC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;gBACvD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAEpC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,CAAkB,CAAC;QACpF,MAAM,SAAS,GAAG,GAAG,EAAE,aAAa,CAAC,aAAa,CAAgB,CAAC;QACnE,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS;YAAE,OAAO;QAE/B,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC;QACnH,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAEO,YAAY,CAAC,IAA4B;QAC/C,MAAM,QAAQ,GAA2B;YACvC,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;SACtB,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IAC9C,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,MAAM,QAAQ,GAA2B;YACvC,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;SACd,CAAC;QACF,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;IACnC,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,MAAM,QAAQ,GAA2B;YACvC,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,SAAS;YACnB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,SAAS;SACpB,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IACvC,CAAC;IAEO,YAAY,CAAC,IAAY,EAAE,SAAiB;QAClD,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IAEO,iBAAiB,CAAC,KAAW,EAAE,GAAiB;QACtD,IAAI,CAAC,GAAG;YAAE,OAAO,YAAY,CAAC;QAE9B,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/D,IAAI,EAAE,GAAG,IAAI;YAAE,OAAO,GAAG,EAAE,IAAI,CAAC;QAChC,IAAI,EAAE,GAAG,KAAK;YAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACpD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QAC1F,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IAC/E,CAAC;IAED,iBAAiB;IACT,WAAW,CAAC,KAAiB,EAAE,IAA4B;QACjE,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,iCAAiC;QACjC,MAAM,IAAI,GAAiB;YACzB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,CAAC,UAAU,EAAE;YACjD,QAAQ,EAAE,SAAS,IAAI,CAAC,QAAQ,EAAE;YAClC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;YACtC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;YAClE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3C,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,CAAC;SACT,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,MAAM,OAAO,GAA2B;YACtC,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,UAAU;YACvB,UAAU,EAAE,gBAAgB;YAC5B,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,WAAW;SACrB,CAAC;QACF,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;IAC1C,CAAC;IAEO,kBAAkB,CAAC,MAAc;QACvC,MAAM,QAAQ,GAA2B;YACvC,SAAS,EAAE,MAAM;YACjB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,WAAW;SACtB,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,KAAiB,EAAE,OAAe;QACjE,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAEjC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,uBAAuB;YACvB,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,YAAY;QACZ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAe;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,gBAAgB;QAChB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,IAAI;eAC9E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAElE,IAAI,CAAC,IAAI,IAAI,CAAE,IAAY,CAAC,WAAW;YAAE,OAAO;QAEhD,MAAM,WAAW,GAAI,IAAY,CAAC,WAAW,CAAC;QAE9C,IAAI,CAAC;YACH,sCAAsC;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAEjE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,yBAAyB;gBACzB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,KAAgB,EAAE,KAA+B,EAAE,UAAiC;QAC3G,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QAEzC,4BAA4B;QAC5B,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAE7D,0BAA0B;YAC1B,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAEvC,MAAM,QAAQ,GAAa;gBACzB,IAAI,EAAE,IAAI;gBACV,CAAC,EAAE,MAAM;gBACT,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,YAAY;gBAC5B,KAAK,EAAE,GAAG;gBACV,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,WAAW;aACrB,CAAC;YAEF,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;YAEjF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,sBAAsB;QACtB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY,GAAG,EAAE,CAAC,CAAC;IAC1E,CAAC;IAEO,iBAAiB,CAAC,KAAgB;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QAE3B,2BAA2B;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,EAAE,EAAE,CAAC;YACP,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,uBAAuB;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACtE,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACtD,CAAC;IACH,CAAC;IAED,gBAAgB;IACR,eAAe,CAAC,KAAiB,EAAE,MAAc;QACvD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAEnC,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,sBAAsB;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;QACzC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,EAAE,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;QAChC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QACrB,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QACrB,MAAM,IAAI,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAE/D,IAAI,CAAC,SAAS,GAAG;YACf,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,IAAI,CAAC,CAAC;YACd,MAAM,EAAE,IAAI,CAAC,CAAC;YACd,cAAc,EAAE;gBACd,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACxB;SACF,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEvC,qCAAqC;QACrC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAoDD,eAAe;IACf,OAAO,CAAC,KAAiB;QACvB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,cAAc,CAAC,KAAiB;QAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/D,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAC9D,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAiB;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9D,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAAiB;QAC5B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;IACjC,CAAC;IAEO,eAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;YACnD,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,YAAY,CAAC,WAAW,EAChC,aAAa,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,WAAW,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,uBAAuB;IACvB,eAAe;QACb,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,mBAAmB,CAAC,KAAa;QAC/B,iCAAiC;QACjC,gCAAgC;IAClC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;iIApkCU,gCAAgC;oEAAhC,gCAAgC;;;;;;YCnC7C,8BAAqC;YAMjC,AALF,kGAAa,wFAKJ;YA6CX,iBAAM;;YAlDJ,cAiDC;YAjDD,mCAiDC;;;iFDfU,gCAAgC;cAP5C,SAAS;6BACI,KAAK,YACP,+BAA+B,mBAGxB,uBAAuB,CAAC,MAAM;;kBAG9C,SAAS;mBAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;kBAC3C,KAAK;;kBACL,KAAK;;kFAHK,gCAAgC","sourcesContent":["import { Component, Input, OnInit, OnDestroy, ViewChild, ElementRef, AfterViewInit, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject, combineLatest } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\nimport { MJAIAgentRunEntity, MJAIAgentRunStepEntity, MJActionExecutionLogEntity, MJAIPromptRunEntity } from '@memberjunction/core-entities';\nimport { TimelineItem } from './ai-agent-run-timeline.component';\nimport { AIAgentRunDataHelper } from './ai-agent-run-data.service';\n\ninterface NodeData {\n step: MJAIAgentRunStepEntity;\n x: number;\n y: number;\n width: number;\n height: number;\n element?: SVGGElement;\n}\n\ninterface ScopeData {\n id: string;\n name: string;\n x: number;\n y: number;\n width: number;\n height: number;\n expanded: boolean;\n nodes: NodeData[];\n element?: SVGGElement;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-visualization',\n templateUrl: './ai-agent-run-visualization.component.html',\n styleUrls: ['./ai-agent-run-visualization.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AIAgentRunVisualizationComponent implements OnInit, OnDestroy, AfterViewInit {\n @ViewChild('svgContainer', { static: false }) svgContainer!: ElementRef<HTMLDivElement>;\n @Input() aiAgentRunId!: string;\n @Input() dataHelper!: AIAgentRunDataHelper;\n \n private destroy$ = new Subject<void>();\n private viewInitialized = false;\n \n /** Track active timeouts for cleanup */\n private activeTimeouts: number[] = [];\n \n /** Remove timeout from tracking array */\n private removeTimeoutFromTracking(timeoutId: number): void {\n const index = this.activeTimeouts.indexOf(timeoutId);\n if (index > -1) {\n this.activeTimeouts.splice(index, 1);\n }\n }\n private pendingData: { steps: MJAIAgentRunStepEntity[], subRuns: MJAIAgentRunEntity[], actionLogs: MJActionExecutionLogEntity[], promptRuns: MJAIPromptRunEntity[] } | null = null;\n \n loading = false; // Start with false so the container renders\n error: string | null = null;\n private dataLoading = false; // Track data loading state from service\n \n selectedItem: TimelineItem | null = null;\n \n // Node management\n private nodes = new Map<string, NodeData>();\n private scopes = new Map<string, ScopeData>();\n private connections: Array<{from: string, to: string, path?: SVGPathElement}> = [];\n \n // Pan and zoom state\n panZoom = {\n scale: 1,\n translateX: 0,\n translateY: 0,\n isPanning: false,\n startX: 0,\n startY: 0\n };\n \n // Drag state\n private dragState: {\n isDragging: boolean;\n element: SVGGElement | null;\n nodeId: string | null;\n startX: number;\n startY: number;\n startTransform: { x: number; y: number };\n initialX?: number;\n initialY?: number;\n } = {\n isDragging: false,\n element: null,\n nodeId: null,\n startX: 0,\n startY: 0,\n startTransform: { x: 0, y: 0 }\n };\n \n // Pan state\n private panState = {\n isPanning: false,\n startX: 0,\n startY: 0,\n initialTranslateX: 0,\n initialTranslateY: 0\n };\n \n // Animation frame ID for cleanup\n private animationFrameId: number | null = null;\n \n // Bound event handlers for proper cleanup\n private boundOnWheel = this.onWheel.bind(this);\n private boundOnSvgMouseDown = this.onSvgMouseDown.bind(this);\n private boundOnSvgMouseMove = this.onSvgMouseMove.bind(this);\n private boundOnSvgMouseUp = this.onSvgMouseUp.bind(this);\n \n constructor(\n private cdr: ChangeDetectorRef\n ) {}\n \n ngOnInit() {\n if (this.aiAgentRunId) {\n // Subscribe to data from helper\n combineLatest([\n this.dataHelper.steps$,\n this.dataHelper.subRuns$,\n this.dataHelper.actionLogs$,\n this.dataHelper.promptRuns$,\n this.dataHelper.loading$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([steps, subRuns, actionLogs, promptRuns, loading]) => {\n this.dataLoading = loading;\n \n if (!loading && steps && steps.length > 0) {\n console.log('Visualization: Received data from service', {\n steps: steps.length,\n subRuns: subRuns.length,\n viewInitialized: this.viewInitialized\n });\n \n if (this.viewInitialized && this.svgContainer?.nativeElement) {\n // View is ready, build immediately\n this.buildVisualization(steps, subRuns, actionLogs, promptRuns);\n } else {\n // Store data for when view is ready\n console.log('View not ready, storing data for later');\n this.pendingData = { steps, subRuns, actionLogs, promptRuns };\n }\n } else if (!loading && (!steps || steps.length === 0)) {\n console.log('Visualization: No steps available');\n this.error = null;\n }\n });\n \n // Subscribe to error state\n this.dataHelper.error$.pipe(takeUntil(this.destroy$)).subscribe((error: string | null) => {\n if (error) {\n this.error = error;\n this.loading = false;\n }\n });\n } else {\n console.error('Visualization: No agent run ID provided');\n this.error = 'No agent run ID provided';\n }\n }\n \n ngAfterViewInit() {\n console.log('Visualization ngAfterViewInit');\n this.viewInitialized = true;\n \n // Initialize SVG\n if (this.svgContainer && this.svgContainer.nativeElement) {\n this.initializeSVG();\n \n // If we have pending data, process it now\n if (this.pendingData) {\n console.log('Processing pending data after view init');\n this.buildVisualization(\n this.pendingData.steps,\n this.pendingData.subRuns,\n this.pendingData.actionLogs,\n this.pendingData.promptRuns\n );\n this.pendingData = null;\n }\n \n this.cdr.detectChanges();\n } else {\n console.error('SVG container not found in ngAfterViewInit');\n }\n }\n \n ngOnDestroy() {\n // Signal all subscriptions to complete\n this.destroy$.next();\n this.destroy$.complete();\n \n // Clear all active timeouts\n this.activeTimeouts.forEach(timeoutId => {\n clearTimeout(timeoutId);\n });\n this.activeTimeouts.length = 0;\n \n // Clean up document-level event listeners\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n \n // Clean up SVG and all its event listeners\n if (this.svgContainer?.nativeElement) {\n const svg = this.svgContainer.nativeElement.querySelector('svg');\n if (svg) {\n // Remove all SVG event listeners with bound handlers\n svg.removeEventListener('wheel', this.boundOnWheel);\n svg.removeEventListener('mousedown', this.boundOnSvgMouseDown);\n svg.removeEventListener('mousemove', this.boundOnSvgMouseMove);\n svg.removeEventListener('mouseup', this.boundOnSvgMouseUp);\n \n // Remove all node and scope event listeners\n // We can't remove specific listeners if we don't have references to them\n // The best approach is to clone and replace the elements, which removes all listeners\n svg.querySelectorAll('g[id^=\"node-\"], g[id^=\"scope-\"]').forEach(element => {\n const clone = element.cloneNode(true);\n element.parentNode?.replaceChild(clone, element);\n });\n \n // Remove expand button listeners\n svg.querySelectorAll('.expand-button').forEach(button => {\n const clone = button.cloneNode(true);\n button.parentNode?.replaceChild(clone, button);\n });\n \n // Clear all SVG content\n while (svg.firstChild) {\n svg.removeChild(svg.firstChild);\n }\n }\n }\n \n // Clear data structures\n this.nodes.clear();\n this.scopes.clear();\n this.connections = [];\n \n // Clear any pending animation frames\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n \n // Reset state\n this.dragState = {\n isDragging: false,\n element: null,\n nodeId: null,\n startX: 0,\n startY: 0,\n startTransform: { x: 0, y: 0 }\n };\n \n this.panState = {\n isPanning: false,\n startX: 0,\n startY: 0,\n initialTranslateX: 0,\n initialTranslateY: 0\n };\n }\n \n private initializeSVG() {\n const container = this.svgContainer?.nativeElement;\n if (!container) {\n console.error('SVG container element not found');\n return;\n }\n \n // Create SVG element if it doesn't exist\n let svg = container.querySelector('svg');\n if (!svg) {\n svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('class', 'visualization-svg');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n \n // Add event listeners with bound handlers\n svg.addEventListener('wheel', this.boundOnWheel);\n svg.addEventListener('mousedown', this.boundOnSvgMouseDown);\n svg.addEventListener('mousemove', this.boundOnSvgMouseMove);\n svg.addEventListener('mouseup', this.boundOnSvgMouseUp);\n \n container.appendChild(svg);\n }\n \n // Add arrow marker definition\n const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n const marker = document.createElementNS('http://www.w3.org/2000/svg', 'marker');\n marker.setAttribute('id', 'arrowhead-viz');\n marker.setAttribute('markerWidth', '10');\n marker.setAttribute('markerHeight', '7');\n marker.setAttribute('refX', '9');\n marker.setAttribute('refY', '3.5');\n marker.setAttribute('orient', 'auto');\n \n const polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');\n polygon.setAttribute('points', '0 0, 10 3.5, 0 7');\n polygon.setAttribute('fill', '#4a90e2');\n marker.appendChild(polygon);\n defs.appendChild(marker);\n svg.appendChild(defs);\n \n console.log('SVG initialized successfully');\n }\n \n private async buildVisualization(\n steps: MJAIAgentRunStepEntity[],\n subRuns: MJAIAgentRunEntity[],\n actionLogs: MJActionExecutionLogEntity[],\n promptRuns: MJAIPromptRunEntity[]\n ) {\n console.log('buildVisualization called', { \n steps: steps?.length || 0, \n hasContainer: !!this.svgContainer,\n containerElement: this.svgContainer?.nativeElement\n });\n \n if (!this.svgContainer || !this.svgContainer.nativeElement) {\n console.error('SVG container not available');\n this.loading = false;\n this.error = 'Visualization container not ready';\n return;\n }\n \n // If no steps, show empty state\n if (!steps || steps.length === 0) {\n console.log('No steps to visualize');\n this.loading = false;\n this.error = null;\n return;\n }\n \n this.loading = true;\n this.error = null;\n \n try {\n // Wait a tick for the view to be fully ready\n await new Promise(resolve => {\n const timeoutId = setTimeout(() => {\n this.removeTimeoutFromTracking(timeoutId);\n resolve(undefined);\n }, 0) as any as number;\n this.activeTimeouts.push(timeoutId);\n });\n \n // Clear existing elements\n this.clearVisualization();\n \n // Build nodes and scopes\n await this.buildNodesAndScopes(steps, subRuns, promptRuns);\n \n // Arrange layout\n this.arrangeLayout();\n \n // Draw connections\n this.drawConnections();\n \n // Fit to view\n this.fitToView();\n \n this.loading = false;\n console.log('Visualization built successfully');\n \n // Trigger change detection since we're using OnPush\n this.cdr.markForCheck();\n } catch (error) {\n this.error = 'Failed to build visualization';\n console.error('Visualization error:', error);\n this.loading = false;\n \n // Trigger change detection since we're using OnPush\n this.cdr.markForCheck();\n }\n }\n \n private clearVisualization() {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (!svg) return;\n \n const mainGroup = svg.querySelector('.main-group');\n if (mainGroup) {\n // Remove all child elements except defs\n while (mainGroup.firstChild) {\n mainGroup.removeChild(mainGroup.firstChild);\n }\n }\n \n this.nodes.clear();\n this.scopes.clear();\n this.connections = [];\n }\n \n private async buildNodesAndScopes(\n steps: MJAIAgentRunStepEntity[],\n subRuns: MJAIAgentRunEntity[],\n promptRuns: MJAIPromptRunEntity[]\n ) {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (!svg) return;\n \n let mainGroup = svg.querySelector('.main-group') as SVGGElement;\n if (!mainGroup) {\n mainGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n mainGroup.setAttribute('class', 'main-group');\n svg.appendChild(mainGroup);\n }\n \n // Create nodes for each step\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n \n if (step.StepType === 'Sub-Agent' && step.TargetLogID) {\n // Create a scope for sub-agent\n const subRun = subRuns.find(sr => sr.ID === step.TargetLogID);\n const scopeElement = await this.createScopeElement(step, subRun);\n mainGroup.appendChild(scopeElement);\n \n const scope: ScopeData = {\n id: step.ID,\n name: subRun?.Agent || 'Sub-Agent',\n x: 0,\n y: 0,\n width: 300,\n height: 200,\n expanded: false,\n nodes: [],\n element: scopeElement\n };\n \n this.scopes.set(step.ID, scope);\n } else {\n // Create regular node\n const nodeElement = this.createNodeElement(step, promptRuns);\n mainGroup.appendChild(nodeElement);\n \n const nodeData: NodeData = {\n step: step,\n x: 0,\n y: 0,\n width: 180,\n height: 80,\n element: nodeElement\n };\n \n this.nodes.set(step.ID, nodeData);\n }\n \n // Add connection info\n if (i > 0) {\n this.connections.push({\n from: steps[i - 1].ID,\n to: step.ID\n });\n }\n }\n }\n \n private createNodeElement(step: MJAIAgentRunStepEntity, promptRuns: MJAIPromptRunEntity[]): SVGGElement {\n const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n g.setAttribute('class', 'step-node');\n g.setAttribute('data-step-id', step.ID);\n \n // Add event handlers\n g.addEventListener('click', (e) => this.onNodeClick(e, step));\n g.addEventListener('mousedown', (e) => this.onNodeMouseDown(e, step.ID));\n g.style.cursor = 'pointer';\n \n const nodeWidth = 180;\n const nodeHeight = 80;\n \n // Background rectangle\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n rect.setAttribute('width', nodeWidth.toString());\n rect.setAttribute('height', nodeHeight.toString());\n rect.setAttribute('rx', '8');\n rect.setAttribute('fill', 'white');\n rect.setAttribute('stroke', this.getStepColor(step));\n rect.setAttribute('stroke-width', '2');\n g.appendChild(rect);\n \n // Status indicator\n const statusCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n statusCircle.setAttribute('cx', '12');\n statusCircle.setAttribute('cy', '12');\n statusCircle.setAttribute('r', '6');\n statusCircle.setAttribute('fill', this.getStatusColor(step.Status));\n g.appendChild(statusCircle);\n \n // Icon\n const icon = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n icon.setAttribute('x', '35');\n icon.setAttribute('y', '20');\n icon.setAttribute('font-size', '18');\n icon.setAttribute('fill', this.getStepColor(step));\n icon.textContent = this.getStepEmoji(step.StepType);\n g.appendChild(icon);\n \n // Title\n const title = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n title.setAttribute('x', '60');\n title.setAttribute('y', '20');\n title.setAttribute('font-size', '14');\n title.setAttribute('font-weight', '600');\n title.setAttribute('fill', '#2c3e50');\n title.textContent = this.truncateText(step.StepName || `Step ${step.StepNumber}`, 15);\n g.appendChild(title);\n \n // Step type\n const type = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n type.setAttribute('x', '12');\n type.setAttribute('y', '40');\n type.setAttribute('font-size', '12');\n type.setAttribute('fill', '#6c757d');\n type.textContent = step.StepType;\n g.appendChild(type);\n \n // Model info for prompts\n if (step.StepType === 'Prompt' && step.TargetLogID && promptRuns) {\n const promptRun = promptRuns.find(pr => pr.ID === step.TargetLogID);\n if (promptRun) {\n const model = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n model.setAttribute('x', '12');\n model.setAttribute('y', '55');\n model.setAttribute('font-size', '11');\n model.setAttribute('fill', '#868e96');\n model.textContent = `${promptRun.Model || 'Unknown'}`;\n g.appendChild(model);\n }\n }\n \n // Duration\n if (step.CompletedAt) {\n const duration = this.calculateDuration(step.StartedAt, step.CompletedAt);\n const durationText = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n durationText.setAttribute('x', '12');\n durationText.setAttribute('y', '70');\n durationText.setAttribute('font-size', '11');\n durationText.setAttribute('fill', '#868e96');\n durationText.textContent = `⏱️ ${duration}`;\n g.appendChild(durationText);\n }\n \n return g;\n }\n \n private async createScopeElement(step: MJAIAgentRunStepEntity, subRun?: MJAIAgentRunEntity): Promise<SVGGElement> {\n const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n g.setAttribute('class', 'scope-container');\n g.setAttribute('data-scope-id', step.ID);\n \n const scopeWidth = 300;\n const scopeHeight = 200;\n const headerHeight = 40;\n \n // Background\n const bg = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n bg.setAttribute('width', scopeWidth.toString());\n bg.setAttribute('height', scopeHeight.toString());\n bg.setAttribute('rx', '12');\n bg.setAttribute('fill', '#f8f9fa');\n bg.setAttribute('stroke', '#4a90e2');\n bg.setAttribute('stroke-width', '2');\n bg.setAttribute('stroke-dasharray', '5,5');\n g.appendChild(bg);\n \n // Header background\n const headerBg = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n headerBg.setAttribute('width', scopeWidth.toString());\n headerBg.setAttribute('height', headerHeight.toString());\n headerBg.setAttribute('rx', '12');\n headerBg.setAttribute('fill', '#e3f2fd');\n g.appendChild(headerBg);\n \n // Fix bottom corners\n const headerFix = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n headerFix.setAttribute('y', (headerHeight - 12).toString());\n headerFix.setAttribute('width', scopeWidth.toString());\n headerFix.setAttribute('height', '12');\n headerFix.setAttribute('fill', '#e3f2fd');\n g.appendChild(headerFix);\n \n // Robot icon\n const icon = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n icon.setAttribute('x', '12');\n icon.setAttribute('y', '26');\n icon.setAttribute('font-size', '20');\n icon.textContent = '🤖';\n g.appendChild(icon);\n \n // Title\n const title = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n title.setAttribute('x', '40');\n title.setAttribute('y', '26');\n title.setAttribute('font-size', '14');\n title.setAttribute('font-weight', '600');\n title.setAttribute('fill', '#1976d2');\n title.textContent = subRun?.Agent || 'Sub-Agent';\n g.appendChild(title);\n \n // Expand/collapse button\n const expandBtn = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n expandBtn.setAttribute('class', 'expand-button');\n expandBtn.style.cursor = 'pointer';\n expandBtn.setAttribute('transform', `translate(${scopeWidth - 30}, 10)`);\n \n const expandBg = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n expandBg.setAttribute('cx', '10');\n expandBg.setAttribute('cy', '10');\n expandBg.setAttribute('r', '10');\n expandBg.setAttribute('fill', 'white');\n expandBg.setAttribute('stroke', '#4a90e2');\n expandBtn.appendChild(expandBg);\n \n const expandIcon = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n expandIcon.setAttribute('x', '10');\n expandIcon.setAttribute('y', '15');\n expandIcon.setAttribute('text-anchor', 'middle');\n expandIcon.setAttribute('font-size', '12');\n expandIcon.setAttribute('fill', '#4a90e2');\n expandIcon.textContent = '+';\n expandBtn.appendChild(expandIcon);\n \n expandBtn.addEventListener('click', (e) => this.onScopeExpandClick(e, step.ID));\n g.appendChild(expandBtn);\n \n // Click handler for scope\n g.addEventListener('click', (e) => {\n if (!(e.target as Element).closest('.expand-button')) {\n this.onNodeClick(e, step);\n }\n });\n \n return g;\n }\n \n private arrangeLayout() {\n const nodeSpacingX = 250;\n const nodeSpacingY = 120;\n const startX = 50;\n const startY = 50;\n \n let currentY = startY;\n let index = 0;\n \n // Arrange nodes and scopes sequentially\n const allItems = [...this.nodes.values(), ...Array.from(this.scopes.values()).map(s => ({ \n step: { ID: s.id } as MJAIAgentRunStepEntity, \n x: 0, \n y: 0, \n width: s.width, \n height: s.height \n }))];\n \n // Sort by step number if available\n allItems.sort((a, b) => {\n const aStep = a.step as MJAIAgentRunStepEntity;\n const bStep = b.step as MJAIAgentRunStepEntity;\n return (aStep.StepNumber || 0) - (bStep.StepNumber || 0);\n });\n \n for (const item of allItems) {\n const nodeData = this.nodes.get(item.step.ID);\n const scopeData = this.scopes.get(item.step.ID);\n \n if (nodeData) {\n nodeData.x = startX;\n nodeData.y = currentY;\n \n if (nodeData.element) {\n nodeData.element.setAttribute('transform', `translate(${nodeData.x}, ${nodeData.y})`);\n }\n \n currentY += nodeSpacingY;\n } else if (scopeData) {\n scopeData.x = startX;\n scopeData.y = currentY;\n \n if (scopeData.element) {\n scopeData.element.setAttribute('transform', `translate(${scopeData.x}, ${scopeData.y})`);\n }\n \n currentY += scopeData.height + nodeSpacingY;\n }\n }\n }\n \n private drawConnections() {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (!svg) return;\n \n const mainGroup = svg.querySelector('.main-group');\n if (!mainGroup) return;\n \n // Create connections group if not exists\n let connectionsGroup = mainGroup.querySelector('.connections-group') as SVGGElement;\n if (!connectionsGroup) {\n connectionsGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n connectionsGroup.setAttribute('class', 'connections-group');\n mainGroup.insertBefore(connectionsGroup, mainGroup.firstChild);\n }\n \n // Clear existing connections\n while (connectionsGroup.firstChild) {\n connectionsGroup.removeChild(connectionsGroup.firstChild);\n }\n \n // Draw each connection\n for (const conn of this.connections) {\n const fromNode = this.nodes.get(conn.from);\n const fromScope = this.scopes.get(conn.from);\n const toNode = this.nodes.get(conn.to);\n const toScope = this.scopes.get(conn.to);\n \n let fromX = 0, fromY = 0, toX = 0, toY = 0;\n \n if (fromNode) {\n fromX = fromNode.x + fromNode.width / 2;\n fromY = fromNode.y + fromNode.height;\n } else if (fromScope) {\n fromX = fromScope.x + fromScope.width / 2;\n fromY = fromScope.y + fromScope.height;\n }\n \n if (toNode) {\n toX = toNode.x + toNode.width / 2;\n toY = toNode.y;\n } else if (toScope) {\n toX = toScope.x + toScope.width / 2;\n toY = toScope.y;\n }\n \n if (fromX && fromY && toX && toY) {\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n const d = `M ${fromX} ${fromY} L ${toX} ${toY}`;\n path.setAttribute('d', d);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', '#4a90e2');\n path.setAttribute('stroke-width', '2');\n path.setAttribute('marker-end', 'url(#arrowhead-viz)');\n path.setAttribute('opacity', '0.6');\n \n connectionsGroup.appendChild(path);\n conn.path = path;\n }\n }\n }\n \n private fitToView() {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg') as SVGSVGElement;\n const mainGroup = svg?.querySelector('.main-group') as SVGGElement;\n if (!svg || !mainGroup) return;\n \n const bbox = mainGroup.getBBox();\n const padding = 50;\n \n const viewBox = `${bbox.x - padding} ${bbox.y - padding} ${bbox.width + 2 * padding} ${bbox.height + 2 * padding}`;\n svg.setAttribute('viewBox', viewBox);\n }\n \n private getStepColor(step: MJAIAgentRunStepEntity): string {\n const colorMap: Record<string, string> = {\n 'Prompt': '#2196f3',\n 'Actions': '#4caf50',\n 'Sub-Agent': '#ff9800',\n 'Tool': '#9c27b0',\n 'Decision': '#f44336'\n };\n return colorMap[step.StepType] || '#757575';\n }\n \n private getStepEmoji(stepType: string): string {\n const emojiMap: Record<string, string> = {\n 'Prompt': '💬',\n 'Actions': '⚙️',\n 'Sub-Agent': '🤖',\n 'Tool': '🔧',\n 'Decision': '🔀',\n 'ForEach': '🔁',\n 'While': '🔄'\n };\n return emojiMap[stepType] || '⚪';\n }\n \n private getStatusColor(status: string): string {\n const colorMap: Record<string, string> = {\n 'Running': '#1976d2',\n 'Completed': '#388e3c',\n 'Failed': '#d32f2f',\n 'Cancelled': '#f57c00',\n 'Paused': '#757575'\n };\n return colorMap[status] || '#9e9e9e';\n }\n \n private truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.substring(0, maxLength - 3) + '...';\n }\n \n private calculateDuration(start: Date, end?: Date | null): string {\n if (!end) return 'Running...';\n \n const ms = new Date(end).getTime() - new Date(start).getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n \n // Event handlers\n private onNodeClick(event: MouseEvent, step: MJAIAgentRunStepEntity) {\n event.stopPropagation();\n \n // Create timeline item from step\n const item: TimelineItem = {\n id: step.ID,\n type: 'step',\n title: step.StepName || `Step ${step.StepNumber}`,\n subtitle: `Type: ${step.StepType}`,\n status: step.Status,\n startTime: step.StartedAt,\n endTime: step.CompletedAt || undefined,\n duration: this.calculateDuration(step.StartedAt, step.CompletedAt),\n icon: this.getStepIcon(step.StepType),\n color: this.getStatusColorName(step.Status),\n data: step,\n level: 0\n };\n \n this.selectedItem = item;\n this.cdr.detectChanges();\n }\n \n private getStepIcon(stepType: string): string {\n const iconMap: Record<string, string> = {\n 'Prompt': 'fa-microchip',\n 'Tool': 'fa-tools',\n 'Sub-Agent': 'fa-robot',\n 'Decision': 'fa-code-branch',\n 'Actions': 'fa-cog',\n 'ForEach': 'fa-repeat',\n 'While': 'fa-rotate'\n };\n return iconMap[stepType] || 'fa-circle';\n }\n \n private getStatusColorName(status: string): string {\n const colorMap: Record<string, string> = {\n 'Running': 'info',\n 'Completed': 'success',\n 'Failed': 'error',\n 'Cancelled': 'warning',\n 'Paused': 'secondary'\n };\n return colorMap[status] || 'secondary';\n }\n \n private async onScopeExpandClick(event: MouseEvent, scopeId: string) {\n event.stopPropagation();\n \n const scope = this.scopes.get(scopeId);\n if (!scope) return;\n \n scope.expanded = !scope.expanded;\n \n if (scope.expanded) {\n // Load sub-agent steps\n await this.loadScopeContents(scopeId);\n }\n \n // Update UI\n this.updateScopeVisual(scope);\n this.arrangeLayout();\n this.drawConnections();\n }\n \n private async loadScopeContents(scopeId: string) {\n const scope = this.scopes.get(scopeId);\n if (!scope) return;\n \n // Find the step\n const step = Array.from(this.nodes.values()).find(n => n.step.ID === scopeId)?.step\n || Array.from(this.scopes.values()).find(s => s.id === scopeId);\n \n if (!step || !(step as any).TargetLogID) return;\n \n const targetLogId = (step as any).TargetLogID;\n \n try {\n // Load sub-agent data through service\n const data = await this.dataHelper.loadSubAgentData(targetLogId);\n \n if (data.steps && data.steps.length > 0) {\n // Create nodes from data\n this.createScopeNodes(scope, data.steps, data.promptRuns);\n }\n } catch (error) {\n console.error('Failed to load scope contents:', error);\n }\n }\n \n private createScopeNodes(scope: ScopeData, steps: MJAIAgentRunStepEntity[], promptRuns: MJAIPromptRunEntity[]) {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (!svg) return;\n \n const mainGroup = svg.querySelector('.main-group');\n if (!mainGroup || !scope.element) return;\n \n // Create nodes inside scope\n const nodeSpacingY = 60;\n const startX = 20;\n const startY = 60;\n \n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n const nodeElement = this.createNodeElement(step, promptRuns);\n \n // Add node to scope group\n scope.element.appendChild(nodeElement);\n \n const nodeData: NodeData = {\n step: step,\n x: startX,\n y: startY + i * nodeSpacingY,\n width: 160,\n height: 60,\n element: nodeElement\n };\n \n nodeElement.setAttribute('transform', `translate(${nodeData.x}, ${nodeData.y})`);\n \n scope.nodes.push(nodeData);\n this.nodes.set(step.ID, nodeData);\n }\n \n // Update scope height\n scope.height = Math.max(200, startY + steps.length * nodeSpacingY + 20);\n }\n \n private updateScopeVisual(scope: ScopeData) {\n if (!scope.element) return;\n \n // Update background height\n const bg = scope.element.querySelector('rect');\n if (bg) {\n bg.setAttribute('height', scope.height.toString());\n }\n \n // Update expand button\n const expandIcon = scope.element.querySelector('.expand-button text');\n if (expandIcon) {\n expandIcon.textContent = scope.expanded ? '−' : '+';\n }\n }\n \n // Drag handling\n private onNodeMouseDown(event: MouseEvent, nodeId: string) {\n event.preventDefault();\n event.stopPropagation();\n \n const node = this.nodes.get(nodeId);\n if (!node || !node.element) return;\n \n // Get current transform\n const transform = node.element.getAttribute('transform');\n const match = transform?.match(/translate\\(([-\\d.]+),\\s*([-\\d.]+)\\)/);\n if (!match) return;\n \n // Get SVG coordinates\n const svg = node.element.ownerSVGElement;\n if (!svg) return;\n \n const pt = svg.createSVGPoint();\n pt.x = event.clientX;\n pt.y = event.clientY;\n const svgP = pt.matrixTransform(svg.getScreenCTM()?.inverse());\n \n this.dragState = {\n isDragging: true,\n element: node.element,\n nodeId: nodeId,\n startX: svgP.x,\n startY: svgP.y,\n startTransform: {\n x: parseFloat(match[1]),\n y: parseFloat(match[2])\n }\n };\n \n node.element.classList.add('dragging');\n \n // Add document-level event listeners\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n }\n \n private onMouseMove = (event: MouseEvent) => {\n if (!this.dragState.isDragging || !this.dragState.element) return;\n \n const svg = this.dragState.element.ownerSVGElement;\n if (!svg) return;\n \n const pt = svg.createSVGPoint();\n pt.x = event.clientX;\n pt.y = event.clientY;\n const svgP = pt.matrixTransform(svg.getScreenCTM()?.inverse());\n \n const dx = svgP.x - this.dragState.startX;\n const dy = svgP.y - this.dragState.startY;\n \n const newX = this.dragState.startTransform.x + dx;\n const newY = this.dragState.startTransform.y + dy;\n \n // Update element position\n this.dragState.element.setAttribute('transform', `translate(${newX}, ${newY})`);\n \n // Update node data\n const node = this.nodes.get(this.dragState.nodeId!);\n if (node) {\n node.x = newX;\n node.y = newY;\n }\n \n // Update connections\n this.drawConnections();\n }\n \n private onMouseUp = (event: MouseEvent) => {\n if (!this.dragState.isDragging || !this.dragState.element) return;\n \n this.dragState.element.classList.remove('dragging');\n \n // Clean up\n this.dragState = {\n isDragging: false,\n element: null,\n nodeId: null,\n startX: 0,\n startY: 0,\n startTransform: { x: 0, y: 0 }\n };\n \n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n \n // Pan and zoom\n onWheel(event: WheelEvent) {\n event.preventDefault();\n const delta = event.deltaY > 0 ? 0.9 : 1.1;\n this.panZoom.scale = Math.max(0.3, Math.min(3, this.panZoom.scale * delta));\n this.updateTransform();\n }\n \n onSvgMouseDown(event: MouseEvent) {\n if (event.button === 0 && event.target === event.currentTarget) {\n this.panZoom.isPanning = true;\n this.panZoom.startX = event.clientX - this.panZoom.translateX;\n this.panZoom.startY = event.clientY - this.panZoom.translateY;\n event.preventDefault();\n }\n }\n \n onSvgMouseMove(event: MouseEvent) {\n if (this.panZoom.isPanning) {\n this.panZoom.translateX = event.clientX - this.panZoom.startX;\n this.panZoom.translateY = event.clientY - this.panZoom.startY;\n this.updateTransform();\n }\n }\n \n onSvgMouseUp(event: MouseEvent) {\n this.panZoom.isPanning = false;\n }\n \n private updateTransform() {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (svg) {\n const mainGroup = svg.querySelector('.main-group');\n if (mainGroup) {\n mainGroup.setAttribute('transform', \n `translate(${this.panZoom.translateX}, ${this.panZoom.translateY}) scale(${this.panZoom.scale})`);\n }\n }\n }\n \n // Toolbar actions\n zoomIn() {\n this.panZoom.scale = Math.min(this.panZoom.scale * 1.2, 3);\n this.updateTransform();\n }\n \n zoomOut() {\n this.panZoom.scale = Math.max(this.panZoom.scale / 1.2, 0.3);\n this.updateTransform();\n }\n \n resetZoom() {\n this.panZoom.scale = 1;\n this.panZoom.translateX = 0;\n this.panZoom.translateY = 0;\n this.updateTransform();\n }\n \n // Detail pane handlers\n closeDetailPane() {\n this.selectedItem = null;\n this.cdr.detectChanges();\n }\n \n navigateToActionLog(logId: string) {\n // Emit event to parent component\n // Parent will handle navigation\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n}","<div class=\"visualization-container\">\n @if (error) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <span>{{ error }}</span>\n </div>\n } @else {\n <kendo-splitter orientation=\"horizontal\" style=\"height: 100%;\">\n <!-- Diagram Pane -->\n <kendo-splitter-pane [collapsible]=\"false\">\n <div class=\"diagram-container\" #svgContainer>\n <div class=\"diagram-toolbar\">\n <div class=\"toolbar-title\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Agent Execution Flow\n </div>\n <div class=\"zoom-controls\">\n <button (click)=\"zoomIn()\" title=\"Zoom in\">\n <i class=\"fa-solid fa-search-plus\"></i>\n </button>\n <button (click)=\"zoomOut()\" title=\"Zoom out\">\n <i class=\"fa-solid fa-search-minus\"></i>\n </button>\n <button (click)=\"resetZoom()\" title=\"Reset zoom\">\n <i class=\"fa-solid fa-compress\"></i>\n </button>\n <span class=\"zoom-level\">{{ (panZoom.scale * 100).toFixed(0) }}%</span>\n </div>\n </div>\n @if (loading) {\n <div class=\"loading-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading visualization...</span>\n </div>\n }\n </div>\n </kendo-splitter-pane>\n \n <!-- Detail Pane -->\n @if (selectedItem) {\n <kendo-splitter-pane [size]=\"'400px'\" [min]=\"'300px'\" [max]=\"'600px'\" [collapsible]=\"true\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedItem\"\n (closePanel)=\"closeDetailPane()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </kendo-splitter-pane>\n }\n </kendo-splitter>\n }\n</div>"]}
1
+ {"version":3,"file":"ai-agent-run-visualization.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run-visualization.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run-visualization.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit, OnDestroy, ViewChild, ElementRef, AfterViewInit, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject, combineLatest } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\nimport { MJAIAgentRunEntity, MJAIAgentRunStepEntity, MJActionExecutionLogEntity, MJAIPromptRunEntity } from '@memberjunction/core-entities';\nimport { TimelineItem } from './ai-agent-run-timeline.component';\nimport { AIAgentRunDataHelper } from './ai-agent-run-data.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\ninterface NodeData {\n step: MJAIAgentRunStepEntity;\n x: number;\n y: number;\n width: number;\n height: number;\n element?: SVGGElement;\n}\n\ninterface ScopeData {\n id: string;\n name: string;\n x: number;\n y: number;\n width: number;\n height: number;\n expanded: boolean;\n nodes: NodeData[];\n element?: SVGGElement;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-visualization',\n templateUrl: './ai-agent-run-visualization.component.html',\n styleUrls: ['./ai-agent-run-visualization.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AIAgentRunVisualizationComponent implements OnInit, OnDestroy, AfterViewInit {\n @ViewChild('svgContainer', { static: false }) svgContainer!: ElementRef<HTMLDivElement>;\n @Input() aiAgentRunId!: string;\n @Input() dataHelper!: AIAgentRunDataHelper;\n \n private destroy$ = new Subject<void>();\n private viewInitialized = false;\n \n /** Track active timeouts for cleanup */\n private activeTimeouts: number[] = [];\n \n /** Remove timeout from tracking array */\n private removeTimeoutFromTracking(timeoutId: number): void {\n const index = this.activeTimeouts.indexOf(timeoutId);\n if (index > -1) {\n this.activeTimeouts.splice(index, 1);\n }\n }\n private pendingData: { steps: MJAIAgentRunStepEntity[], subRuns: MJAIAgentRunEntity[], actionLogs: MJActionExecutionLogEntity[], promptRuns: MJAIPromptRunEntity[] } | null = null;\n \n loading = false; // Start with false so the container renders\n error: string | null = null;\n private dataLoading = false; // Track data loading state from service\n \n selectedItem: TimelineItem | null = null;\n \n // Node management\n private nodes = new Map<string, NodeData>();\n private scopes = new Map<string, ScopeData>();\n private connections: Array<{from: string, to: string, path?: SVGPathElement}> = [];\n \n // Pan and zoom state\n panZoom = {\n scale: 1,\n translateX: 0,\n translateY: 0,\n isPanning: false,\n startX: 0,\n startY: 0\n };\n \n // Drag state\n private dragState: {\n isDragging: boolean;\n element: SVGGElement | null;\n nodeId: string | null;\n startX: number;\n startY: number;\n startTransform: { x: number; y: number };\n initialX?: number;\n initialY?: number;\n } = {\n isDragging: false,\n element: null,\n nodeId: null,\n startX: 0,\n startY: 0,\n startTransform: { x: 0, y: 0 }\n };\n \n // Pan state\n private panState = {\n isPanning: false,\n startX: 0,\n startY: 0,\n initialTranslateX: 0,\n initialTranslateY: 0\n };\n \n // Animation frame ID for cleanup\n private animationFrameId: number | null = null;\n \n // Bound event handlers for proper cleanup\n private boundOnWheel = this.onWheel.bind(this);\n private boundOnSvgMouseDown = this.onSvgMouseDown.bind(this);\n private boundOnSvgMouseMove = this.onSvgMouseMove.bind(this);\n private boundOnSvgMouseUp = this.onSvgMouseUp.bind(this);\n \n constructor(\n private cdr: ChangeDetectorRef\n ) {}\n \n ngOnInit() {\n if (this.aiAgentRunId) {\n // Subscribe to data from helper\n combineLatest([\n this.dataHelper.steps$,\n this.dataHelper.subRuns$,\n this.dataHelper.actionLogs$,\n this.dataHelper.promptRuns$,\n this.dataHelper.loading$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([steps, subRuns, actionLogs, promptRuns, loading]) => {\n this.dataLoading = loading;\n \n if (!loading && steps && steps.length > 0) {\n console.log('Visualization: Received data from service', {\n steps: steps.length,\n subRuns: subRuns.length,\n viewInitialized: this.viewInitialized\n });\n \n if (this.viewInitialized && this.svgContainer?.nativeElement) {\n // View is ready, build immediately\n this.buildVisualization(steps, subRuns, actionLogs, promptRuns);\n } else {\n // Store data for when view is ready\n console.log('View not ready, storing data for later');\n this.pendingData = { steps, subRuns, actionLogs, promptRuns };\n }\n } else if (!loading && (!steps || steps.length === 0)) {\n console.log('Visualization: No steps available');\n this.error = null;\n }\n });\n \n // Subscribe to error state\n this.dataHelper.error$.pipe(takeUntil(this.destroy$)).subscribe((error: string | null) => {\n if (error) {\n this.error = error;\n this.loading = false;\n }\n });\n } else {\n console.error('Visualization: No agent run ID provided');\n this.error = 'No agent run ID provided';\n }\n }\n \n ngAfterViewInit() {\n console.log('Visualization ngAfterViewInit');\n this.viewInitialized = true;\n \n // Initialize SVG\n if (this.svgContainer && this.svgContainer.nativeElement) {\n this.initializeSVG();\n \n // If we have pending data, process it now\n if (this.pendingData) {\n console.log('Processing pending data after view init');\n this.buildVisualization(\n this.pendingData.steps,\n this.pendingData.subRuns,\n this.pendingData.actionLogs,\n this.pendingData.promptRuns\n );\n this.pendingData = null;\n }\n \n this.cdr.detectChanges();\n } else {\n console.error('SVG container not found in ngAfterViewInit');\n }\n }\n \n ngOnDestroy() {\n // Signal all subscriptions to complete\n this.destroy$.next();\n this.destroy$.complete();\n \n // Clear all active timeouts\n this.activeTimeouts.forEach(timeoutId => {\n clearTimeout(timeoutId);\n });\n this.activeTimeouts.length = 0;\n \n // Clean up document-level event listeners\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n \n // Clean up SVG and all its event listeners\n if (this.svgContainer?.nativeElement) {\n const svg = this.svgContainer.nativeElement.querySelector('svg');\n if (svg) {\n // Remove all SVG event listeners with bound handlers\n svg.removeEventListener('wheel', this.boundOnWheel);\n svg.removeEventListener('mousedown', this.boundOnSvgMouseDown);\n svg.removeEventListener('mousemove', this.boundOnSvgMouseMove);\n svg.removeEventListener('mouseup', this.boundOnSvgMouseUp);\n \n // Remove all node and scope event listeners\n // We can't remove specific listeners if we don't have references to them\n // The best approach is to clone and replace the elements, which removes all listeners\n svg.querySelectorAll('g[id^=\"node-\"], g[id^=\"scope-\"]').forEach(element => {\n const clone = element.cloneNode(true);\n element.parentNode?.replaceChild(clone, element);\n });\n \n // Remove expand button listeners\n svg.querySelectorAll('.expand-button').forEach(button => {\n const clone = button.cloneNode(true);\n button.parentNode?.replaceChild(clone, button);\n });\n \n // Clear all SVG content\n while (svg.firstChild) {\n svg.removeChild(svg.firstChild);\n }\n }\n }\n \n // Clear data structures\n this.nodes.clear();\n this.scopes.clear();\n this.connections = [];\n \n // Clear any pending animation frames\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n \n // Reset state\n this.dragState = {\n isDragging: false,\n element: null,\n nodeId: null,\n startX: 0,\n startY: 0,\n startTransform: { x: 0, y: 0 }\n };\n \n this.panState = {\n isPanning: false,\n startX: 0,\n startY: 0,\n initialTranslateX: 0,\n initialTranslateY: 0\n };\n }\n \n private initializeSVG() {\n const container = this.svgContainer?.nativeElement;\n if (!container) {\n console.error('SVG container element not found');\n return;\n }\n \n // Create SVG element if it doesn't exist\n let svg = container.querySelector('svg');\n if (!svg) {\n svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('class', 'visualization-svg');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n \n // Add event listeners with bound handlers\n svg.addEventListener('wheel', this.boundOnWheel);\n svg.addEventListener('mousedown', this.boundOnSvgMouseDown);\n svg.addEventListener('mousemove', this.boundOnSvgMouseMove);\n svg.addEventListener('mouseup', this.boundOnSvgMouseUp);\n \n container.appendChild(svg);\n }\n \n // Add arrow marker definition\n const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n const marker = document.createElementNS('http://www.w3.org/2000/svg', 'marker');\n marker.setAttribute('id', 'arrowhead-viz');\n marker.setAttribute('markerWidth', '10');\n marker.setAttribute('markerHeight', '7');\n marker.setAttribute('refX', '9');\n marker.setAttribute('refY', '3.5');\n marker.setAttribute('orient', 'auto');\n \n const polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');\n polygon.setAttribute('points', '0 0, 10 3.5, 0 7');\n polygon.setAttribute('fill', '#4a90e2');\n marker.appendChild(polygon);\n defs.appendChild(marker);\n svg.appendChild(defs);\n \n console.log('SVG initialized successfully');\n }\n \n private async buildVisualization(\n steps: MJAIAgentRunStepEntity[],\n subRuns: MJAIAgentRunEntity[],\n actionLogs: MJActionExecutionLogEntity[],\n promptRuns: MJAIPromptRunEntity[]\n ) {\n console.log('buildVisualization called', { \n steps: steps?.length || 0, \n hasContainer: !!this.svgContainer,\n containerElement: this.svgContainer?.nativeElement\n });\n \n if (!this.svgContainer || !this.svgContainer.nativeElement) {\n console.error('SVG container not available');\n this.loading = false;\n this.error = 'Visualization container not ready';\n return;\n }\n \n // If no steps, show empty state\n if (!steps || steps.length === 0) {\n console.log('No steps to visualize');\n this.loading = false;\n this.error = null;\n return;\n }\n \n this.loading = true;\n this.error = null;\n \n try {\n // Wait a tick for the view to be fully ready\n await new Promise(resolve => {\n const timeoutId = setTimeout(() => {\n this.removeTimeoutFromTracking(timeoutId);\n resolve(undefined);\n }, 0) as any as number;\n this.activeTimeouts.push(timeoutId);\n });\n \n // Clear existing elements\n this.clearVisualization();\n \n // Build nodes and scopes\n await this.buildNodesAndScopes(steps, subRuns, promptRuns);\n \n // Arrange layout\n this.arrangeLayout();\n \n // Draw connections\n this.drawConnections();\n \n // Fit to view\n this.fitToView();\n \n this.loading = false;\n console.log('Visualization built successfully');\n \n // Trigger change detection since we're using OnPush\n this.cdr.markForCheck();\n } catch (error) {\n this.error = 'Failed to build visualization';\n console.error('Visualization error:', error);\n this.loading = false;\n \n // Trigger change detection since we're using OnPush\n this.cdr.markForCheck();\n }\n }\n \n private clearVisualization() {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (!svg) return;\n \n const mainGroup = svg.querySelector('.main-group');\n if (mainGroup) {\n // Remove all child elements except defs\n while (mainGroup.firstChild) {\n mainGroup.removeChild(mainGroup.firstChild);\n }\n }\n \n this.nodes.clear();\n this.scopes.clear();\n this.connections = [];\n }\n \n private async buildNodesAndScopes(\n steps: MJAIAgentRunStepEntity[],\n subRuns: MJAIAgentRunEntity[],\n promptRuns: MJAIPromptRunEntity[]\n ) {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (!svg) return;\n \n let mainGroup = svg.querySelector('.main-group') as SVGGElement;\n if (!mainGroup) {\n mainGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n mainGroup.setAttribute('class', 'main-group');\n svg.appendChild(mainGroup);\n }\n \n // Create nodes for each step\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n \n if (step.StepType === 'Sub-Agent' && step.TargetLogID) {\n // Create a scope for sub-agent\n const subRun = subRuns.find(sr => UUIDsEqual(sr.ID, step.TargetLogID));\n const scopeElement = await this.createScopeElement(step, subRun);\n mainGroup.appendChild(scopeElement);\n \n const scope: ScopeData = {\n id: step.ID,\n name: subRun?.Agent || 'Sub-Agent',\n x: 0,\n y: 0,\n width: 300,\n height: 200,\n expanded: false,\n nodes: [],\n element: scopeElement\n };\n \n this.scopes.set(step.ID, scope);\n } else {\n // Create regular node\n const nodeElement = this.createNodeElement(step, promptRuns);\n mainGroup.appendChild(nodeElement);\n \n const nodeData: NodeData = {\n step: step,\n x: 0,\n y: 0,\n width: 180,\n height: 80,\n element: nodeElement\n };\n \n this.nodes.set(step.ID, nodeData);\n }\n \n // Add connection info\n if (i > 0) {\n this.connections.push({\n from: steps[i - 1].ID,\n to: step.ID\n });\n }\n }\n }\n \n private createNodeElement(step: MJAIAgentRunStepEntity, promptRuns: MJAIPromptRunEntity[]): SVGGElement {\n const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n g.setAttribute('class', 'step-node');\n g.setAttribute('data-step-id', step.ID);\n \n // Add event handlers\n g.addEventListener('click', (e) => this.onNodeClick(e, step));\n g.addEventListener('mousedown', (e) => this.onNodeMouseDown(e, step.ID));\n g.style.cursor = 'pointer';\n \n const nodeWidth = 180;\n const nodeHeight = 80;\n \n // Background rectangle\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n rect.setAttribute('width', nodeWidth.toString());\n rect.setAttribute('height', nodeHeight.toString());\n rect.setAttribute('rx', '8');\n rect.setAttribute('fill', 'white');\n rect.setAttribute('stroke', this.getStepColor(step));\n rect.setAttribute('stroke-width', '2');\n g.appendChild(rect);\n \n // Status indicator\n const statusCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n statusCircle.setAttribute('cx', '12');\n statusCircle.setAttribute('cy', '12');\n statusCircle.setAttribute('r', '6');\n statusCircle.setAttribute('fill', this.getStatusColor(step.Status));\n g.appendChild(statusCircle);\n \n // Icon\n const icon = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n icon.setAttribute('x', '35');\n icon.setAttribute('y', '20');\n icon.setAttribute('font-size', '18');\n icon.setAttribute('fill', this.getStepColor(step));\n icon.textContent = this.getStepEmoji(step.StepType);\n g.appendChild(icon);\n \n // Title\n const title = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n title.setAttribute('x', '60');\n title.setAttribute('y', '20');\n title.setAttribute('font-size', '14');\n title.setAttribute('font-weight', '600');\n title.setAttribute('fill', '#2c3e50');\n title.textContent = this.truncateText(step.StepName || `Step ${step.StepNumber}`, 15);\n g.appendChild(title);\n \n // Step type\n const type = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n type.setAttribute('x', '12');\n type.setAttribute('y', '40');\n type.setAttribute('font-size', '12');\n type.setAttribute('fill', '#6c757d');\n type.textContent = step.StepType;\n g.appendChild(type);\n \n // Model info for prompts\n if (step.StepType === 'Prompt' && step.TargetLogID && promptRuns) {\n const promptRun = promptRuns.find(pr => UUIDsEqual(pr.ID, step.TargetLogID));\n if (promptRun) {\n const model = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n model.setAttribute('x', '12');\n model.setAttribute('y', '55');\n model.setAttribute('font-size', '11');\n model.setAttribute('fill', '#868e96');\n model.textContent = `${promptRun.Model || 'Unknown'}`;\n g.appendChild(model);\n }\n }\n \n // Duration\n if (step.CompletedAt) {\n const duration = this.calculateDuration(step.StartedAt, step.CompletedAt);\n const durationText = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n durationText.setAttribute('x', '12');\n durationText.setAttribute('y', '70');\n durationText.setAttribute('font-size', '11');\n durationText.setAttribute('fill', '#868e96');\n durationText.textContent = `⏱️ ${duration}`;\n g.appendChild(durationText);\n }\n \n return g;\n }\n \n private async createScopeElement(step: MJAIAgentRunStepEntity, subRun?: MJAIAgentRunEntity): Promise<SVGGElement> {\n const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n g.setAttribute('class', 'scope-container');\n g.setAttribute('data-scope-id', step.ID);\n \n const scopeWidth = 300;\n const scopeHeight = 200;\n const headerHeight = 40;\n \n // Background\n const bg = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n bg.setAttribute('width', scopeWidth.toString());\n bg.setAttribute('height', scopeHeight.toString());\n bg.setAttribute('rx', '12');\n bg.setAttribute('fill', '#f8f9fa');\n bg.setAttribute('stroke', '#4a90e2');\n bg.setAttribute('stroke-width', '2');\n bg.setAttribute('stroke-dasharray', '5,5');\n g.appendChild(bg);\n \n // Header background\n const headerBg = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n headerBg.setAttribute('width', scopeWidth.toString());\n headerBg.setAttribute('height', headerHeight.toString());\n headerBg.setAttribute('rx', '12');\n headerBg.setAttribute('fill', '#e3f2fd');\n g.appendChild(headerBg);\n \n // Fix bottom corners\n const headerFix = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n headerFix.setAttribute('y', (headerHeight - 12).toString());\n headerFix.setAttribute('width', scopeWidth.toString());\n headerFix.setAttribute('height', '12');\n headerFix.setAttribute('fill', '#e3f2fd');\n g.appendChild(headerFix);\n \n // Robot icon\n const icon = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n icon.setAttribute('x', '12');\n icon.setAttribute('y', '26');\n icon.setAttribute('font-size', '20');\n icon.textContent = '🤖';\n g.appendChild(icon);\n \n // Title\n const title = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n title.setAttribute('x', '40');\n title.setAttribute('y', '26');\n title.setAttribute('font-size', '14');\n title.setAttribute('font-weight', '600');\n title.setAttribute('fill', '#1976d2');\n title.textContent = subRun?.Agent || 'Sub-Agent';\n g.appendChild(title);\n \n // Expand/collapse button\n const expandBtn = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n expandBtn.setAttribute('class', 'expand-button');\n expandBtn.style.cursor = 'pointer';\n expandBtn.setAttribute('transform', `translate(${scopeWidth - 30}, 10)`);\n \n const expandBg = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n expandBg.setAttribute('cx', '10');\n expandBg.setAttribute('cy', '10');\n expandBg.setAttribute('r', '10');\n expandBg.setAttribute('fill', 'white');\n expandBg.setAttribute('stroke', '#4a90e2');\n expandBtn.appendChild(expandBg);\n \n const expandIcon = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n expandIcon.setAttribute('x', '10');\n expandIcon.setAttribute('y', '15');\n expandIcon.setAttribute('text-anchor', 'middle');\n expandIcon.setAttribute('font-size', '12');\n expandIcon.setAttribute('fill', '#4a90e2');\n expandIcon.textContent = '+';\n expandBtn.appendChild(expandIcon);\n \n expandBtn.addEventListener('click', (e) => this.onScopeExpandClick(e, step.ID));\n g.appendChild(expandBtn);\n \n // Click handler for scope\n g.addEventListener('click', (e) => {\n if (!(e.target as Element).closest('.expand-button')) {\n this.onNodeClick(e, step);\n }\n });\n \n return g;\n }\n \n private arrangeLayout() {\n const nodeSpacingX = 250;\n const nodeSpacingY = 120;\n const startX = 50;\n const startY = 50;\n \n let currentY = startY;\n let index = 0;\n \n // Arrange nodes and scopes sequentially\n const allItems = [...this.nodes.values(), ...Array.from(this.scopes.values()).map(s => ({ \n step: { ID: s.id } as MJAIAgentRunStepEntity, \n x: 0, \n y: 0, \n width: s.width, \n height: s.height \n }))];\n \n // Sort by step number if available\n allItems.sort((a, b) => {\n const aStep = a.step as MJAIAgentRunStepEntity;\n const bStep = b.step as MJAIAgentRunStepEntity;\n return (aStep.StepNumber || 0) - (bStep.StepNumber || 0);\n });\n \n for (const item of allItems) {\n const nodeData = this.nodes.get(item.step.ID);\n const scopeData = this.scopes.get(item.step.ID);\n \n if (nodeData) {\n nodeData.x = startX;\n nodeData.y = currentY;\n \n if (nodeData.element) {\n nodeData.element.setAttribute('transform', `translate(${nodeData.x}, ${nodeData.y})`);\n }\n \n currentY += nodeSpacingY;\n } else if (scopeData) {\n scopeData.x = startX;\n scopeData.y = currentY;\n \n if (scopeData.element) {\n scopeData.element.setAttribute('transform', `translate(${scopeData.x}, ${scopeData.y})`);\n }\n \n currentY += scopeData.height + nodeSpacingY;\n }\n }\n }\n \n private drawConnections() {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (!svg) return;\n \n const mainGroup = svg.querySelector('.main-group');\n if (!mainGroup) return;\n \n // Create connections group if not exists\n let connectionsGroup = mainGroup.querySelector('.connections-group') as SVGGElement;\n if (!connectionsGroup) {\n connectionsGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n connectionsGroup.setAttribute('class', 'connections-group');\n mainGroup.insertBefore(connectionsGroup, mainGroup.firstChild);\n }\n \n // Clear existing connections\n while (connectionsGroup.firstChild) {\n connectionsGroup.removeChild(connectionsGroup.firstChild);\n }\n \n // Draw each connection\n for (const conn of this.connections) {\n const fromNode = this.nodes.get(conn.from);\n const fromScope = this.scopes.get(conn.from);\n const toNode = this.nodes.get(conn.to);\n const toScope = this.scopes.get(conn.to);\n \n let fromX = 0, fromY = 0, toX = 0, toY = 0;\n \n if (fromNode) {\n fromX = fromNode.x + fromNode.width / 2;\n fromY = fromNode.y + fromNode.height;\n } else if (fromScope) {\n fromX = fromScope.x + fromScope.width / 2;\n fromY = fromScope.y + fromScope.height;\n }\n \n if (toNode) {\n toX = toNode.x + toNode.width / 2;\n toY = toNode.y;\n } else if (toScope) {\n toX = toScope.x + toScope.width / 2;\n toY = toScope.y;\n }\n \n if (fromX && fromY && toX && toY) {\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n const d = `M ${fromX} ${fromY} L ${toX} ${toY}`;\n path.setAttribute('d', d);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', '#4a90e2');\n path.setAttribute('stroke-width', '2');\n path.setAttribute('marker-end', 'url(#arrowhead-viz)');\n path.setAttribute('opacity', '0.6');\n \n connectionsGroup.appendChild(path);\n conn.path = path;\n }\n }\n }\n \n private fitToView() {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg') as SVGSVGElement;\n const mainGroup = svg?.querySelector('.main-group') as SVGGElement;\n if (!svg || !mainGroup) return;\n \n const bbox = mainGroup.getBBox();\n const padding = 50;\n \n const viewBox = `${bbox.x - padding} ${bbox.y - padding} ${bbox.width + 2 * padding} ${bbox.height + 2 * padding}`;\n svg.setAttribute('viewBox', viewBox);\n }\n \n private getStepColor(step: MJAIAgentRunStepEntity): string {\n const colorMap: Record<string, string> = {\n 'Prompt': '#2196f3',\n 'Actions': '#4caf50',\n 'Sub-Agent': '#ff9800',\n 'Tool': '#9c27b0',\n 'Decision': '#f44336'\n };\n return colorMap[step.StepType] || '#757575';\n }\n \n private getStepEmoji(stepType: string): string {\n const emojiMap: Record<string, string> = {\n 'Prompt': '💬',\n 'Actions': '⚙️',\n 'Sub-Agent': '🤖',\n 'Tool': '🔧',\n 'Decision': '🔀',\n 'ForEach': '🔁',\n 'While': '🔄'\n };\n return emojiMap[stepType] || '⚪';\n }\n \n private getStatusColor(status: string): string {\n const colorMap: Record<string, string> = {\n 'Running': '#1976d2',\n 'Completed': '#388e3c',\n 'Failed': '#d32f2f',\n 'Cancelled': '#f57c00',\n 'Paused': '#757575'\n };\n return colorMap[status] || '#9e9e9e';\n }\n \n private truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.substring(0, maxLength - 3) + '...';\n }\n \n private calculateDuration(start: Date, end?: Date | null): string {\n if (!end) return 'Running...';\n \n const ms = new Date(end).getTime() - new Date(start).getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n \n // Event handlers\n private onNodeClick(event: MouseEvent, step: MJAIAgentRunStepEntity) {\n event.stopPropagation();\n \n // Create timeline item from step\n const item: TimelineItem = {\n id: step.ID,\n type: 'step',\n title: step.StepName || `Step ${step.StepNumber}`,\n subtitle: `Type: ${step.StepType}`,\n status: step.Status,\n startTime: step.StartedAt,\n endTime: step.CompletedAt || undefined,\n duration: this.calculateDuration(step.StartedAt, step.CompletedAt),\n icon: this.getStepIcon(step.StepType),\n color: this.getStatusColorName(step.Status),\n data: step,\n level: 0\n };\n \n this.selectedItem = item;\n this.cdr.detectChanges();\n }\n \n private getStepIcon(stepType: string): string {\n const iconMap: Record<string, string> = {\n 'Prompt': 'fa-microchip',\n 'Tool': 'fa-tools',\n 'Sub-Agent': 'fa-robot',\n 'Decision': 'fa-code-branch',\n 'Actions': 'fa-cog',\n 'ForEach': 'fa-repeat',\n 'While': 'fa-rotate'\n };\n return iconMap[stepType] || 'fa-circle';\n }\n \n private getStatusColorName(status: string): string {\n const colorMap: Record<string, string> = {\n 'Running': 'info',\n 'Completed': 'success',\n 'Failed': 'error',\n 'Cancelled': 'warning',\n 'Paused': 'secondary'\n };\n return colorMap[status] || 'secondary';\n }\n \n private async onScopeExpandClick(event: MouseEvent, scopeId: string) {\n event.stopPropagation();\n \n const scope = this.scopes.get(scopeId);\n if (!scope) return;\n \n scope.expanded = !scope.expanded;\n \n if (scope.expanded) {\n // Load sub-agent steps\n await this.loadScopeContents(scopeId);\n }\n \n // Update UI\n this.updateScopeVisual(scope);\n this.arrangeLayout();\n this.drawConnections();\n }\n \n private async loadScopeContents(scopeId: string) {\n const scope = this.scopes.get(scopeId);\n if (!scope) return;\n \n // Find the step\n const step = Array.from(this.nodes.values()).find(n => UUIDsEqual(n.step.ID, scopeId))?.step\n || Array.from(this.scopes.values()).find(s => s.id === scopeId);\n \n if (!step || !(step as any).TargetLogID) return;\n \n const targetLogId = (step as any).TargetLogID;\n \n try {\n // Load sub-agent data through service\n const data = await this.dataHelper.loadSubAgentData(targetLogId);\n \n if (data.steps && data.steps.length > 0) {\n // Create nodes from data\n this.createScopeNodes(scope, data.steps, data.promptRuns);\n }\n } catch (error) {\n console.error('Failed to load scope contents:', error);\n }\n }\n \n private createScopeNodes(scope: ScopeData, steps: MJAIAgentRunStepEntity[], promptRuns: MJAIPromptRunEntity[]) {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (!svg) return;\n \n const mainGroup = svg.querySelector('.main-group');\n if (!mainGroup || !scope.element) return;\n \n // Create nodes inside scope\n const nodeSpacingY = 60;\n const startX = 20;\n const startY = 60;\n \n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n const nodeElement = this.createNodeElement(step, promptRuns);\n \n // Add node to scope group\n scope.element.appendChild(nodeElement);\n \n const nodeData: NodeData = {\n step: step,\n x: startX,\n y: startY + i * nodeSpacingY,\n width: 160,\n height: 60,\n element: nodeElement\n };\n \n nodeElement.setAttribute('transform', `translate(${nodeData.x}, ${nodeData.y})`);\n \n scope.nodes.push(nodeData);\n this.nodes.set(step.ID, nodeData);\n }\n \n // Update scope height\n scope.height = Math.max(200, startY + steps.length * nodeSpacingY + 20);\n }\n \n private updateScopeVisual(scope: ScopeData) {\n if (!scope.element) return;\n \n // Update background height\n const bg = scope.element.querySelector('rect');\n if (bg) {\n bg.setAttribute('height', scope.height.toString());\n }\n \n // Update expand button\n const expandIcon = scope.element.querySelector('.expand-button text');\n if (expandIcon) {\n expandIcon.textContent = scope.expanded ? '−' : '+';\n }\n }\n \n // Drag handling\n private onNodeMouseDown(event: MouseEvent, nodeId: string) {\n event.preventDefault();\n event.stopPropagation();\n \n const node = this.nodes.get(nodeId);\n if (!node || !node.element) return;\n \n // Get current transform\n const transform = node.element.getAttribute('transform');\n const match = transform?.match(/translate\\(([-\\d.]+),\\s*([-\\d.]+)\\)/);\n if (!match) return;\n \n // Get SVG coordinates\n const svg = node.element.ownerSVGElement;\n if (!svg) return;\n \n const pt = svg.createSVGPoint();\n pt.x = event.clientX;\n pt.y = event.clientY;\n const svgP = pt.matrixTransform(svg.getScreenCTM()?.inverse());\n \n this.dragState = {\n isDragging: true,\n element: node.element,\n nodeId: nodeId,\n startX: svgP.x,\n startY: svgP.y,\n startTransform: {\n x: parseFloat(match[1]),\n y: parseFloat(match[2])\n }\n };\n \n node.element.classList.add('dragging');\n \n // Add document-level event listeners\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n }\n \n private onMouseMove = (event: MouseEvent) => {\n if (!this.dragState.isDragging || !this.dragState.element) return;\n \n const svg = this.dragState.element.ownerSVGElement;\n if (!svg) return;\n \n const pt = svg.createSVGPoint();\n pt.x = event.clientX;\n pt.y = event.clientY;\n const svgP = pt.matrixTransform(svg.getScreenCTM()?.inverse());\n \n const dx = svgP.x - this.dragState.startX;\n const dy = svgP.y - this.dragState.startY;\n \n const newX = this.dragState.startTransform.x + dx;\n const newY = this.dragState.startTransform.y + dy;\n \n // Update element position\n this.dragState.element.setAttribute('transform', `translate(${newX}, ${newY})`);\n \n // Update node data\n const node = this.nodes.get(this.dragState.nodeId!);\n if (node) {\n node.x = newX;\n node.y = newY;\n }\n \n // Update connections\n this.drawConnections();\n }\n \n private onMouseUp = (event: MouseEvent) => {\n if (!this.dragState.isDragging || !this.dragState.element) return;\n \n this.dragState.element.classList.remove('dragging');\n \n // Clean up\n this.dragState = {\n isDragging: false,\n element: null,\n nodeId: null,\n startX: 0,\n startY: 0,\n startTransform: { x: 0, y: 0 }\n };\n \n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n \n // Pan and zoom\n onWheel(event: WheelEvent) {\n event.preventDefault();\n const delta = event.deltaY > 0 ? 0.9 : 1.1;\n this.panZoom.scale = Math.max(0.3, Math.min(3, this.panZoom.scale * delta));\n this.updateTransform();\n }\n \n onSvgMouseDown(event: MouseEvent) {\n if (event.button === 0 && event.target === event.currentTarget) {\n this.panZoom.isPanning = true;\n this.panZoom.startX = event.clientX - this.panZoom.translateX;\n this.panZoom.startY = event.clientY - this.panZoom.translateY;\n event.preventDefault();\n }\n }\n \n onSvgMouseMove(event: MouseEvent) {\n if (this.panZoom.isPanning) {\n this.panZoom.translateX = event.clientX - this.panZoom.startX;\n this.panZoom.translateY = event.clientY - this.panZoom.startY;\n this.updateTransform();\n }\n }\n \n onSvgMouseUp(event: MouseEvent) {\n this.panZoom.isPanning = false;\n }\n \n private updateTransform() {\n const svg = this.svgContainer?.nativeElement?.querySelector('svg');\n if (svg) {\n const mainGroup = svg.querySelector('.main-group');\n if (mainGroup) {\n mainGroup.setAttribute('transform', \n `translate(${this.panZoom.translateX}, ${this.panZoom.translateY}) scale(${this.panZoom.scale})`);\n }\n }\n }\n \n // Toolbar actions\n zoomIn() {\n this.panZoom.scale = Math.min(this.panZoom.scale * 1.2, 3);\n this.updateTransform();\n }\n \n zoomOut() {\n this.panZoom.scale = Math.max(this.panZoom.scale / 1.2, 0.3);\n this.updateTransform();\n }\n \n resetZoom() {\n this.panZoom.scale = 1;\n this.panZoom.translateX = 0;\n this.panZoom.translateY = 0;\n this.updateTransform();\n }\n \n // Detail pane handlers\n closeDetailPane() {\n this.selectedItem = null;\n this.cdr.detectChanges();\n }\n \n navigateToActionLog(logId: string) {\n // Emit event to parent component\n // Parent will handle navigation\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n}","<div class=\"visualization-container\">\n @if (error) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <span>{{ error }}</span>\n </div>\n } @else {\n <kendo-splitter orientation=\"horizontal\" style=\"height: 100%;\">\n <!-- Diagram Pane -->\n <kendo-splitter-pane [collapsible]=\"false\">\n <div class=\"diagram-container\" #svgContainer>\n <div class=\"diagram-toolbar\">\n <div class=\"toolbar-title\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Agent Execution Flow\n </div>\n <div class=\"zoom-controls\">\n <button (click)=\"zoomIn()\" title=\"Zoom in\">\n <i class=\"fa-solid fa-search-plus\"></i>\n </button>\n <button (click)=\"zoomOut()\" title=\"Zoom out\">\n <i class=\"fa-solid fa-search-minus\"></i>\n </button>\n <button (click)=\"resetZoom()\" title=\"Reset zoom\">\n <i class=\"fa-solid fa-compress\"></i>\n </button>\n <span class=\"zoom-level\">{{ (panZoom.scale * 100).toFixed(0) }}%</span>\n </div>\n </div>\n @if (loading) {\n <div class=\"loading-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading visualization...</span>\n </div>\n }\n </div>\n </kendo-splitter-pane>\n \n <!-- Detail Pane -->\n @if (selectedItem) {\n <kendo-splitter-pane [size]=\"'400px'\" [min]=\"'300px'\" [max]=\"'600px'\" [collapsible]=\"true\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedItem\"\n (closePanel)=\"closeDetailPane()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </kendo-splitter-pane>\n }\n </kendo-splitter>\n }\n</div>"]}
@@ -28,6 +28,7 @@ export declare class EntitySelectorDialogComponent implements OnInit {
28
28
  selectEntity(entity: any): void;
29
29
  onSelect(): void;
30
30
  createNew(): void;
31
+ IsEntitySelected(entity: Record<string, unknown>): boolean;
31
32
  onCancel(): void;
32
33
  static ɵfac: i0.ɵɵFactoryDeclaration<EntitySelectorDialogComponent, never>;
33
34
  static ɵcmp: i0.ɵɵComponentDeclaration<EntitySelectorDialogComponent, "mj-entity-selector-dialog", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"entity-selector-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;;AAE3D,MAAM,WAAW,oBAAoB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAwOa,6BAA8B,YAAW,MAAM;IAUpD,OAAO,CAAC,aAAa;IACd,SAAS,EAAE,SAAS;IAVtB,MAAM,EAAG,oBAAoB,CAAC;IAEhC,QAAQ,EAAE,GAAG,EAAE,CAAM;IACrB,gBAAgB,EAAE,GAAG,EAAE,CAAM;IAC7B,cAAc,EAAE,GAAG,CAAQ;IAC3B,UAAU,EAAE,MAAM,CAAM;IACxB,SAAS,EAAE,OAAO,CAAQ;gBAGrB,aAAa,EAAE,aAAa,EAC7B,SAAS,EAAE,SAAS;IAGzB,QAAQ;IAIR,YAAY;IAqBlB,cAAc;IAcd,YAAY,CAAC,MAAM,EAAE,GAAG;IAIxB,QAAQ;IAMR,SAAS;IAIT,QAAQ;yCAnEC,6BAA6B;2CAA7B,6BAA6B;CAsEzC"}
1
+ {"version":3,"file":"entity-selector-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;;AAG3D,MAAM,WAAW,oBAAoB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAwOa,6BAA8B,YAAW,MAAM;IAUpD,OAAO,CAAC,aAAa;IACd,SAAS,EAAE,SAAS;IAVtB,MAAM,EAAG,oBAAoB,CAAC;IAEhC,QAAQ,EAAE,GAAG,EAAE,CAAM;IACrB,gBAAgB,EAAE,GAAG,EAAE,CAAM;IAC7B,cAAc,EAAE,GAAG,CAAQ;IAC3B,UAAU,EAAE,MAAM,CAAM;IACxB,SAAS,EAAE,OAAO,CAAQ;gBAGrB,aAAa,EAAE,aAAa,EAC7B,SAAS,EAAE,SAAS;IAGzB,QAAQ;IAIR,YAAY;IAqBlB,cAAc;IAcd,YAAY,CAAC,MAAM,EAAE,GAAG;IAIxB,QAAQ;IAMR,SAAS;IAIT,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAI1D,QAAQ;yCAvEC,6BAA6B;2CAA7B,6BAA6B;CA0EzC"}
@@ -1,5 +1,6 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import { RunView } from '@memberjunction/core';
3
+ import { UUIDsEqual } from '@memberjunction/global';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@memberjunction/ng-shared";
5
6
  import * as i2 from "@progress/kendo-angular-dialog";
@@ -76,7 +77,7 @@ function EntitySelectorDialogComponent_Conditional_10_Conditional_2_For_2_Templa
76
77
  } if (rf & 2) {
77
78
  const entity_r3 = ctx.$implicit;
78
79
  const ctx_r0 = i0.ɵɵnextContext(3);
79
- i0.ɵɵclassProp("selected", (ctx_r0.selectedEntity == null ? null : ctx_r0.selectedEntity.ID) === entity_r3.ID);
80
+ i0.ɵɵclassProp("selected", ctx_r0.IsEntitySelected(entity_r3));
80
81
  i0.ɵɵadvance(2);
81
82
  i0.ɵɵclassMap(ctx_r0.config.icon || "fa-solid fa-file");
82
83
  i0.ɵɵadvance(3);
@@ -163,6 +164,9 @@ export class EntitySelectorDialogComponent {
163
164
  createNew() {
164
165
  this.dialogRef.close({ createNew: true });
165
166
  }
167
+ IsEntitySelected(entity) {
168
+ return UUIDsEqual(this.selectedEntity?.ID, entity.ID);
169
+ }
166
170
  onCancel() {
167
171
  this.dialogRef.close(null);
168
172
  }
@@ -251,7 +255,7 @@ export class EntitySelectorDialogComponent {
251
255
  <div class="entity-list">
252
256
  @for (entity of filteredEntities; track entity.ID) {
253
257
  <div class="entity-item"
254
- [class.selected]="selectedEntity?.ID === entity.ID"
258
+ [class.selected]="IsEntitySelected(entity)"
255
259
  (click)="selectEntity(entity)">
256
260
  <div class="item-icon">
257
261
  <i [class]="config.icon || 'fa-solid fa-file'"></i>
@@ -288,5 +292,5 @@ export class EntitySelectorDialogComponent {
288
292
  }], () => [{ type: i1.SharedService }, { type: i2.DialogRef }], { config: [{
289
293
  type: Input
290
294
  }] }); })();
291
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntitySelectorDialogComponent, { className: "EntitySelectorDialogComponent", filePath: "src/lib/custom/shared/entity-selector-dialog.component.ts", lineNumber: 249 }); })();
295
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntitySelectorDialogComponent, { className: "EntitySelectorDialogComponent", filePath: "src/lib/custom/shared/entity-selector-dialog.component.ts", lineNumber: 250 }); })();
292
296
  //# sourceMappingURL=entity-selector-dialog.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { DialogRef } from '@progress/kendo-angular-dialog';\n\nexport interface EntitySelectorConfig {\n entityName: string;\n title: string;\n displayField: string;\n descriptionField?: string;\n statusField?: string;\n filters?: string;\n orderBy?: string;\n icon?: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-entity-selector-dialog',\n template: `\n <div class=\"dialog-wrapper\">\n <div class=\"dialog-header\">\n <h3>@if (config.icon) {\n <i [class]=\"config.icon\"></i>\n } {{ config.title }}</h3>\n </div>\n <div class=\"dialog-content\">\n <!-- Search Bar -->\n <div class=\"search-bar\">\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n placeholder=\"Search...\"\n (valueChange)=\"onSearchChange()\"\n class=\"search-input\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading {{ config.entityName }}...</p>\n </div>\n }\n \n <!-- Entity List -->\n @if (!isLoading) {\n <div class=\"entity-list-container\">\n @if (filteredEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No {{ config.entityName }} found</p>\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (entity of filteredEntities; track entity.ID) {\n <div class=\"entity-item\"\n [class.selected]=\"selectedEntity?.ID === entity.ID\"\n (click)=\"selectEntity(entity)\">\n <div class=\"item-icon\">\n <i [class]=\"config.icon || 'fa-solid fa-file'\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ entity[config.displayField] || 'Untitled' }}</div>\n @if (config.descriptionField && entity[config.descriptionField]) {\n <div class=\"item-description\">{{ entity[config.descriptionField] }}</div>\n }\n @if (config.statusField && entity[config.statusField]) {\n <div class=\"item-status\">\n <span class=\"status-badge\" [class.active]=\"entity[config.statusField] === 'Active'\">\n {{ entity[config.statusField] }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <div class=\"dialog-actions\">\n <button kendoButton themeColor=\"primary\" (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i> Create New\n </button>\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" [disabled]=\"!selectedEntity\" (click)=\"onSelect()\">Select</button>\n </div>\n </div>\n `,\n styles: [`\n .dialog-wrapper {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header {\n padding: 16px;\n border-bottom: 1px solid #e0e6ed;\n }\n\n .dialog-header h3 {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions {\n padding: 16px;\n border-top: 1px solid #e0e6ed;\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar {\n display: flex;\n gap: 12px;\n }\n\n .search-input {\n flex: 1;\n }\n\n .loading-state,\n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #6c757d;\n gap: 12px;\n }\n\n .loading-state i,\n .empty-state i {\n font-size: 48px;\n color: #dee2e6;\n }\n\n .entity-list-container {\n flex: 1;\n overflow-y: auto;\n border: 1px solid #e0e6ed;\n border-radius: 8px;\n background: #f8f9fa;\n }\n\n .entity-list {\n padding: 8px;\n }\n\n .entity-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: white;\n border: 1px solid #e0e6ed;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item:hover {\n border-color: #2196f3;\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected {\n background: #e3f2fd;\n border-color: #2196f3;\n }\n\n .item-icon {\n width: 36px;\n height: 36px;\n background: #f0f4f8;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon i {\n color: #2196f3;\n font-size: 16px;\n }\n\n .item-content {\n flex: 1;\n min-width: 0;\n }\n\n .item-title {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n }\n\n .item-description {\n font-size: 13px;\n color: #6c757d;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status {\n margin-top: 4px;\n }\n\n .status-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-weight: 500;\n }\n\n .status-badge.active {\n background: #d4edda;\n color: #28a745;\n }\n `]\n})\nexport class EntitySelectorDialogComponent implements OnInit {\n @Input() config!: EntitySelectorConfig;\n\n public entities: any[] = [];\n public filteredEntities: any[] = [];\n public selectedEntity: any = null;\n public searchText: string = '';\n public isLoading: boolean = true;\n\n constructor(\n private sharedService: SharedService,\n public dialogRef: DialogRef\n ) {}\n\n async ngOnInit() {\n await this.loadEntities();\n }\n\n async loadEntities() {\n this.isLoading = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.config.entityName,\n ExtraFilter: this.config.filters,\n OrderBy: this.config.orderBy \n });\n\n this.entities = result.Results;\n this.filteredEntities = [...this.entities];\n } catch (error) {\n console.error('Error loading entities:', error);\n this.entities = [];\n this.filteredEntities = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n onSearchChange() {\n if (!this.searchText) {\n this.filteredEntities = [...this.entities];\n } else {\n const searchLower = this.searchText.toLowerCase();\n this.filteredEntities = this.entities.filter(entity => {\n const displayValue = entity[this.config.displayField] || '';\n const descriptionValue = this.config.descriptionField ? (entity[this.config.descriptionField] || '') : '';\n return displayValue.toLowerCase().includes(searchLower) || \n descriptionValue.toLowerCase().includes(searchLower);\n });\n }\n }\n\n selectEntity(entity: any) {\n this.selectedEntity = entity;\n }\n\n onSelect() {\n if (this.selectedEntity) {\n this.dialogRef.close({ entity: this.selectedEntity });\n }\n }\n\n createNew() {\n this.dialogRef.close({ createNew: true });\n }\n\n onCancel() {\n this.dialogRef.close(null);\n }\n}"]}
1
+ {"version":3,"file":"entity-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { DialogRef } from '@progress/kendo-angular-dialog';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface EntitySelectorConfig {\n entityName: string;\n title: string;\n displayField: string;\n descriptionField?: string;\n statusField?: string;\n filters?: string;\n orderBy?: string;\n icon?: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-entity-selector-dialog',\n template: `\n <div class=\"dialog-wrapper\">\n <div class=\"dialog-header\">\n <h3>@if (config.icon) {\n <i [class]=\"config.icon\"></i>\n } {{ config.title }}</h3>\n </div>\n <div class=\"dialog-content\">\n <!-- Search Bar -->\n <div class=\"search-bar\">\n <kendo-textbox\n [(ngModel)]=\"searchText\"\n placeholder=\"Search...\"\n (valueChange)=\"onSearchChange()\"\n class=\"search-input\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading {{ config.entityName }}...</p>\n </div>\n }\n \n <!-- Entity List -->\n @if (!isLoading) {\n <div class=\"entity-list-container\">\n @if (filteredEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No {{ config.entityName }} found</p>\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (entity of filteredEntities; track entity.ID) {\n <div class=\"entity-item\"\n [class.selected]=\"IsEntitySelected(entity)\"\n (click)=\"selectEntity(entity)\">\n <div class=\"item-icon\">\n <i [class]=\"config.icon || 'fa-solid fa-file'\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ entity[config.displayField] || 'Untitled' }}</div>\n @if (config.descriptionField && entity[config.descriptionField]) {\n <div class=\"item-description\">{{ entity[config.descriptionField] }}</div>\n }\n @if (config.statusField && entity[config.statusField]) {\n <div class=\"item-status\">\n <span class=\"status-badge\" [class.active]=\"entity[config.statusField] === 'Active'\">\n {{ entity[config.statusField] }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <div class=\"dialog-actions\">\n <button kendoButton themeColor=\"primary\" (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i> Create New\n </button>\n <button kendoButton (click)=\"onCancel()\">Cancel</button>\n <button kendoButton themeColor=\"primary\" [disabled]=\"!selectedEntity\" (click)=\"onSelect()\">Select</button>\n </div>\n </div>\n `,\n styles: [`\n .dialog-wrapper {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header {\n padding: 16px;\n border-bottom: 1px solid #e0e6ed;\n }\n\n .dialog-header h3 {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions {\n padding: 16px;\n border-top: 1px solid #e0e6ed;\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar {\n display: flex;\n gap: 12px;\n }\n\n .search-input {\n flex: 1;\n }\n\n .loading-state,\n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #6c757d;\n gap: 12px;\n }\n\n .loading-state i,\n .empty-state i {\n font-size: 48px;\n color: #dee2e6;\n }\n\n .entity-list-container {\n flex: 1;\n overflow-y: auto;\n border: 1px solid #e0e6ed;\n border-radius: 8px;\n background: #f8f9fa;\n }\n\n .entity-list {\n padding: 8px;\n }\n\n .entity-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: white;\n border: 1px solid #e0e6ed;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item:hover {\n border-color: #2196f3;\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected {\n background: #e3f2fd;\n border-color: #2196f3;\n }\n\n .item-icon {\n width: 36px;\n height: 36px;\n background: #f0f4f8;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon i {\n color: #2196f3;\n font-size: 16px;\n }\n\n .item-content {\n flex: 1;\n min-width: 0;\n }\n\n .item-title {\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 4px;\n }\n\n .item-description {\n font-size: 13px;\n color: #6c757d;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status {\n margin-top: 4px;\n }\n\n .status-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-weight: 500;\n }\n\n .status-badge.active {\n background: #d4edda;\n color: #28a745;\n }\n `]\n})\nexport class EntitySelectorDialogComponent implements OnInit {\n @Input() config!: EntitySelectorConfig;\n\n public entities: any[] = [];\n public filteredEntities: any[] = [];\n public selectedEntity: any = null;\n public searchText: string = '';\n public isLoading: boolean = true;\n\n constructor(\n private sharedService: SharedService,\n public dialogRef: DialogRef\n ) {}\n\n async ngOnInit() {\n await this.loadEntities();\n }\n\n async loadEntities() {\n this.isLoading = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.config.entityName,\n ExtraFilter: this.config.filters,\n OrderBy: this.config.orderBy \n });\n\n this.entities = result.Results;\n this.filteredEntities = [...this.entities];\n } catch (error) {\n console.error('Error loading entities:', error);\n this.entities = [];\n this.filteredEntities = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n onSearchChange() {\n if (!this.searchText) {\n this.filteredEntities = [...this.entities];\n } else {\n const searchLower = this.searchText.toLowerCase();\n this.filteredEntities = this.entities.filter(entity => {\n const displayValue = entity[this.config.displayField] || '';\n const descriptionValue = this.config.descriptionField ? (entity[this.config.descriptionField] || '') : '';\n return displayValue.toLowerCase().includes(searchLower) || \n descriptionValue.toLowerCase().includes(searchLower);\n });\n }\n }\n\n selectEntity(entity: any) {\n this.selectedEntity = entity;\n }\n\n onSelect() {\n if (this.selectedEntity) {\n this.dialogRef.close({ entity: this.selectedEntity });\n }\n }\n\n createNew() {\n this.dialogRef.close({ createNew: true });\n }\n\n IsEntitySelected(entity: Record<string, unknown>): boolean {\n return UUIDsEqual(this.selectedEntity?.ID, entity.ID as string);\n }\n\n onCancel() {\n this.dialogRef.close(null);\n }\n}"]}