@memberjunction/ng-core-entity-forms 6.2.0-edge.0 → 6.2.0-edge.1

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 (275) hide show
  1. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
  4. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
  6. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
  8. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  11. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +146 -46
  12. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +794 -262
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  17. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
  18. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  19. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
  20. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  21. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
  22. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
  24. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  25. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +105 -25
  26. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +272 -112
  28. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  29. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +32 -6
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
  34. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  35. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
  36. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  37. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
  38. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  39. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
  40. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  41. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +81 -15
  42. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  43. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +145 -45
  44. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  45. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +71 -17
  46. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  47. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +175 -67
  48. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  49. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
  50. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  51. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
  52. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  53. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
  54. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
  55. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
  56. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  57. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
  58. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  59. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +686 -238
  60. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  61. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
  62. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  63. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
  64. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  65. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
  66. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  67. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
  68. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  69. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
  70. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  71. package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
  72. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  73. package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
  74. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Actions/action-form.component.js +387 -107
  76. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  77. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
  78. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
  79. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
  80. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
  81. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
  82. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
  83. package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
  84. package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
  85. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
  86. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
  87. package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
  88. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  89. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
  90. package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
  91. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
  92. package/dist/lib/custom/Entities/entity-form.component.d.ts +209 -28
  93. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  94. package/dist/lib/custom/Entities/entity-form.component.js +494 -138
  95. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  96. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
  97. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
  98. package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
  99. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  100. package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
  101. package/dist/lib/custom/Files/file-form.component.js +2 -2
  102. package/dist/lib/custom/Files/file-form.component.js.map +1 -1
  103. package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
  104. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  105. package/dist/lib/custom/Lists/list-form.component.js +664 -208
  106. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  107. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +31 -0
  108. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  109. package/dist/lib/custom/MLModels/ml-model-view-models.js +52 -16
  110. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  111. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +107 -10
  112. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  113. package/dist/lib/custom/MLModels/ps-model-detail.component.js +291 -101
  114. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  115. package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
  116. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  117. package/dist/lib/custom/Queries/query-form.component.js +429 -109
  118. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  119. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
  120. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
  121. package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
  122. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  123. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +110 -4
  124. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
  125. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +858 -86
  126. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
  127. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
  128. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
  129. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  130. package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
  131. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
  132. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  133. package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
  134. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  135. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
  136. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  137. package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
  138. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  139. package/dist/lib/custom/Templates/templates-form.component.d.ts +142 -17
  140. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  141. package/dist/lib/custom/Templates/templates-form.component.js +333 -113
  142. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  143. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
  144. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  145. package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
  146. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  147. package/dist/lib/custom/Tests/test-form.component.d.ts +217 -27
  148. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  149. package/dist/lib/custom/Tests/test-form.component.js +549 -169
  150. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  151. package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
  152. package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
  153. package/dist/lib/custom/Tests/test-run-checks.js +5 -1
  154. package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
  155. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
  156. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
  157. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
  158. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  159. package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
  160. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  161. package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
  162. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  163. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +390 -47
  164. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  165. package/dist/lib/custom/Tests/test-suite-form.component.js +1015 -343
  166. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  167. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
  168. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  169. package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
  170. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  171. package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
  172. package/dist/lib/custom/Users/user-overview.panel.js +2 -2
  173. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  174. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
  175. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  176. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
  177. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  178. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +6 -0
  179. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
  180. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
  181. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
  182. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
  183. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  184. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +84 -12
  185. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  186. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +89 -5
  187. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  188. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
  189. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  190. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
  191. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  192. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
  193. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  194. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
  195. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  196. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +165 -37
  197. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  198. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +140 -15
  199. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  200. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +326 -100
  201. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  202. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
  203. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
  204. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
  205. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
  206. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
  207. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
  208. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
  209. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
  210. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
  211. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
  212. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
  213. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
  214. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
  215. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
  216. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
  217. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
  218. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
  219. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
  220. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
  221. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
  222. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
  223. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
  224. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
  225. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
  226. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
  227. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
  228. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
  229. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
  230. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
  231. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
  232. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
  233. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
  234. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
  235. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
  236. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
  237. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
  238. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
  239. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  240. package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
  241. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  242. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  243. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +59 -51
  244. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  245. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
  246. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  247. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
  248. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  249. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  250. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +155 -119
  251. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  252. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
  253. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
  254. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
  255. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
  256. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
  257. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
  258. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
  259. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
  260. package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
  261. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
  262. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
  263. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +45 -19
  264. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  265. package/dist/lib/panels/model-predictions/model-prediction.logic.js +95 -43
  266. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  267. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +20 -16
  268. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
  269. package/dist/lib/panels/model-predictions/model-prediction.panel.js +73 -65
  270. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  271. package/dist/lib/shared/components/template-editor.component.d.ts +133 -14
  272. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  273. package/dist/lib/shared/components/template-editor.component.js +322 -124
  274. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  275. package/package.json +43 -42
@@ -295,28 +295,28 @@ function MJTemplateFormComponentExtended_Conditional_0_Template(rf, ctx) { if (r
295
295
  let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended extends MJTemplateFormComponent {
296
296
  constructor() {
297
297
  super(...arguments);
298
- this.toolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
299
- this.templateContents = [];
300
- this.selectedContentIndex = 0;
301
- this.isAddingNewContent = false;
302
- this.newTemplateContent = null;
303
- this.hasUnsavedChanges = false;
304
- this.templateInfoExpanded = true;
305
- this.templateContentsExpanded = true;
306
- this.categoryOptions = [
298
+ this.ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
299
+ this.TemplateContents = [];
300
+ this.SelectedContentIndex = 0;
301
+ this.IsAddingNewContent = false;
302
+ this.NewTemplateContent = null;
303
+ this.HasUnsavedChanges = false;
304
+ this.TemplateInfoExpanded = true;
305
+ this.TemplateContentsExpanded = true;
306
+ this.CategoryOptions = [
307
307
  { text: 'Select Category...', value: '' },
308
308
  // TODO: Load from database
309
309
  ];
310
- this.contentTypeOptions = [];
311
- this.supportedLanguages = languages;
312
- this.codeEditor = null;
310
+ this.ContentTypeOptions = [];
311
+ this.SupportedLanguages = languages;
312
+ this.CodeEditor = null;
313
313
  this.isUpdatingEditorValue = false;
314
- this.isRunningTemplate = false;
315
- this.templateTestResult = null;
316
- this.templateTestError = null;
317
- this.showParamDialog = false;
314
+ this.IsRunningTemplate = false;
315
+ this.TemplateTestResult = null;
316
+ this.TemplateTestError = null;
317
+ this.ShowParamDialog = false;
318
318
  // Template editor configuration for shared component
319
- this.templateEditorConfig = {
319
+ this.TemplateEditorConfig = {
320
320
  allowEdit: true,
321
321
  showRunButton: true,
322
322
  compactMode: false
@@ -325,13 +325,145 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
325
325
  this.activeTimeouts = [];
326
326
  this.confirmService = inject(MJConfirmService);
327
327
  }
328
+ /** @deprecated Use {@link ToolbarConfig}. */
329
+ get toolbarConfig() {
330
+ return this.ToolbarConfig;
331
+ }
328
332
  /** Custom-layout Template form looks best full-width on first open. */
329
333
  getDefaultFormWidthMode() { return 'full-width'; }
334
+ /** @deprecated Use {@link TemplateContents}. */
335
+ get templateContents() {
336
+ return this.TemplateContents;
337
+ }
338
+ /** @deprecated Use {@link TemplateContents}. */
339
+ set templateContents(value) {
340
+ this.TemplateContents = value;
341
+ }
342
+ /** @deprecated Use {@link SelectedContentIndex}. */
343
+ get selectedContentIndex() {
344
+ return this.SelectedContentIndex;
345
+ }
346
+ /** @deprecated Use {@link SelectedContentIndex}. */
347
+ set selectedContentIndex(value) {
348
+ this.SelectedContentIndex = value;
349
+ }
350
+ /** @deprecated Use {@link IsAddingNewContent}. */
351
+ get isAddingNewContent() {
352
+ return this.IsAddingNewContent;
353
+ }
354
+ /** @deprecated Use {@link IsAddingNewContent}. */
355
+ set isAddingNewContent(value) {
356
+ this.IsAddingNewContent = value;
357
+ }
358
+ /** @deprecated Use {@link NewTemplateContent}. */
359
+ get newTemplateContent() {
360
+ return this.NewTemplateContent;
361
+ }
362
+ /** @deprecated Use {@link NewTemplateContent}. */
363
+ set newTemplateContent(value) {
364
+ this.NewTemplateContent = value;
365
+ }
366
+ /** @deprecated Use {@link HasUnsavedChanges}. */
367
+ get hasUnsavedChanges() {
368
+ return this.HasUnsavedChanges;
369
+ }
370
+ /** @deprecated Use {@link HasUnsavedChanges}. */
371
+ set hasUnsavedChanges(value) {
372
+ this.HasUnsavedChanges = value;
373
+ }
374
+ /** @deprecated Use {@link TemplateInfoExpanded}. */
375
+ get templateInfoExpanded() {
376
+ return this.TemplateInfoExpanded;
377
+ }
378
+ /** @deprecated Use {@link TemplateInfoExpanded}. */
379
+ set templateInfoExpanded(value) {
380
+ this.TemplateInfoExpanded = value;
381
+ }
382
+ /** @deprecated Use {@link TemplateContentsExpanded}. */
383
+ get templateContentsExpanded() {
384
+ return this.TemplateContentsExpanded;
385
+ }
386
+ /** @deprecated Use {@link TemplateContentsExpanded}. */
387
+ set templateContentsExpanded(value) {
388
+ this.TemplateContentsExpanded = value;
389
+ }
390
+ /** @deprecated Use {@link CategoryOptions}. */
391
+ get categoryOptions() {
392
+ return this.CategoryOptions;
393
+ }
394
+ /** @deprecated Use {@link CategoryOptions}. */
395
+ set categoryOptions(value) {
396
+ this.CategoryOptions = value;
397
+ }
398
+ /** @deprecated Use {@link ContentTypeOptions}. */
399
+ get contentTypeOptions() {
400
+ return this.ContentTypeOptions;
401
+ }
402
+ /** @deprecated Use {@link ContentTypeOptions}. */
403
+ set contentTypeOptions(value) {
404
+ this.ContentTypeOptions = value;
405
+ }
406
+ /** @deprecated Use {@link SupportedLanguages}. */
407
+ get supportedLanguages() {
408
+ return this.SupportedLanguages;
409
+ }
410
+ /** @deprecated Use {@link SupportedLanguages}. */
411
+ set supportedLanguages(value) {
412
+ this.SupportedLanguages = value;
413
+ }
414
+ /** @deprecated Use {@link CodeEditor}. */
415
+ get codeEditor() {
416
+ return this.CodeEditor;
417
+ }
418
+ /** @deprecated Use {@link CodeEditor}. */
419
+ set codeEditor(value) {
420
+ this.CodeEditor = value;
421
+ }
422
+ /** @deprecated Use {@link IsRunningTemplate}. */
423
+ get isRunningTemplate() {
424
+ return this.IsRunningTemplate;
425
+ }
426
+ /** @deprecated Use {@link IsRunningTemplate}. */
427
+ set isRunningTemplate(value) {
428
+ this.IsRunningTemplate = value;
429
+ }
430
+ /** @deprecated Use {@link TemplateTestResult}. */
431
+ get templateTestResult() {
432
+ return this.TemplateTestResult;
433
+ }
434
+ /** @deprecated Use {@link TemplateTestResult}. */
435
+ set templateTestResult(value) {
436
+ this.TemplateTestResult = value;
437
+ }
438
+ /** @deprecated Use {@link TemplateTestError}. */
439
+ get templateTestError() {
440
+ return this.TemplateTestError;
441
+ }
442
+ /** @deprecated Use {@link TemplateTestError}. */
443
+ set templateTestError(value) {
444
+ this.TemplateTestError = value;
445
+ }
446
+ /** @deprecated Use {@link ShowParamDialog}. */
447
+ get showParamDialog() {
448
+ return this.ShowParamDialog;
449
+ }
450
+ /** @deprecated Use {@link ShowParamDialog}. */
451
+ set showParamDialog(value) {
452
+ this.ShowParamDialog = value;
453
+ }
454
+ /** @deprecated Use {@link TemplateEditorConfig}. */
455
+ get templateEditorConfig() {
456
+ return this.TemplateEditorConfig;
457
+ }
458
+ /** @deprecated Use {@link TemplateEditorConfig}. */
459
+ set templateEditorConfig(value) {
460
+ this.TemplateEditorConfig = value;
461
+ }
330
462
  async ngOnInit() {
331
463
  await super.ngOnInit();
332
- await this.loadTemplateContents();
333
- await this.loadCategories();
334
- this.loadContentTypes();
464
+ await this.LoadTemplateContents();
465
+ await this.LoadCategories();
466
+ this.LoadContentTypes();
335
467
  }
336
468
  ngOnDestroy() {
337
469
  this.destroy$.next();
@@ -344,7 +476,7 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
344
476
  // Initial sync when view is ready
345
477
  this.syncEditorValue();
346
478
  }
347
- async loadTemplateContents() {
479
+ async LoadTemplateContents() {
348
480
  if (this.record && this.record.ID) {
349
481
  try {
350
482
  const rv = RunView.FromMetadataProvider(this.ProviderToUse);
@@ -354,14 +486,14 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
354
486
  OrderBy: 'Priority ASC, __mj_CreatedAt ASC',
355
487
  ResultType: 'entity_object'
356
488
  });
357
- this.templateContents = results.Results;
489
+ this.TemplateContents = results.Results;
358
490
  // If we have contents but no selection, select the first one
359
- if (this.templateContents.length > 0 && this.selectedContentIndex === 0) {
360
- this.selectedContentIndex = 0;
491
+ if (this.TemplateContents.length > 0 && this.SelectedContentIndex === 0) {
492
+ this.SelectedContentIndex = 0;
361
493
  }
362
494
  // If no template contents exist, create a default one for single-content optimization
363
- if (this.templateContents.length === 0) {
364
- await this.createDefaultTemplateContent();
495
+ if (this.TemplateContents.length === 0) {
496
+ await this.CreateDefaultTemplateContent();
365
497
  }
366
498
  // Entity change tracking is handled automatically by BaseEntity
367
499
  // Sync editor value after loading content
@@ -372,25 +504,33 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
372
504
  }
373
505
  }
374
506
  }
375
- async createDefaultTemplateContent() {
507
+ /** @deprecated Use {@link LoadTemplateContents}. */
508
+ async loadTemplateContents() {
509
+ return this.LoadTemplateContents();
510
+ }
511
+ async CreateDefaultTemplateContent() {
376
512
  const md = this.ProviderToUse;
377
513
  const defaultContent = await md.GetEntityObject('MJ: Template Contents');
378
514
  defaultContent.TemplateID = this.record.ID;
379
515
  defaultContent.Priority = 1;
380
516
  defaultContent.IsActive = true;
381
517
  // Set default to first real content type (skip "Select Type..." if it exists)
382
- const validContentTypes = this.contentTypeOptions.filter(option => option.value !== '');
518
+ const validContentTypes = this.ContentTypeOptions.filter(option => option.value !== '');
383
519
  if (validContentTypes.length > 0) {
384
520
  defaultContent.TypeID = validContentTypes[0].value;
385
521
  }
386
- this.templateContents = [defaultContent];
387
- this.selectedContentIndex = 0;
522
+ this.TemplateContents = [defaultContent];
523
+ this.SelectedContentIndex = 0;
388
524
  // Sync editor value after creating default content
389
525
  this.syncEditorValue();
390
526
  }
391
- async selectTemplateContent(index, confirmSwitch = true) {
527
+ /** @deprecated Use {@link CreateDefaultTemplateContent}. */
528
+ async createDefaultTemplateContent() {
529
+ return this.CreateDefaultTemplateContent();
530
+ }
531
+ async SelectTemplateContent(index, confirmSwitch = true) {
392
532
  // If we're adding new content and user clicks on existing content, ask for confirmation
393
- if (this.isAddingNewContent && confirmSwitch) {
533
+ if (this.IsAddingNewContent && confirmSwitch) {
394
534
  if (!(await this.confirmService.Confirm({
395
535
  title: 'Discard changes?',
396
536
  message: 'Switch content version and lose your unsaved changes?',
@@ -399,21 +539,25 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
399
539
  return;
400
540
  }
401
541
  }
402
- if (index >= 0 && index < this.templateContents.length) {
403
- this.selectedContentIndex = index;
404
- this.isAddingNewContent = false;
542
+ if (index >= 0 && index < this.TemplateContents.length) {
543
+ this.SelectedContentIndex = index;
544
+ this.IsAddingNewContent = false;
405
545
  // Don't clear newTemplateContent to preserve the work in progress
406
546
  // Sync editor value when switching content
407
547
  this.syncEditorValue();
408
548
  }
409
549
  }
410
- async loadCategories() {
550
+ /** @deprecated Use {@link SelectTemplateContent}. */
551
+ async selectTemplateContent(index, confirmSwitch = true) {
552
+ return this.SelectTemplateContent(index, confirmSwitch);
553
+ }
554
+ async LoadCategories() {
411
555
  try {
412
556
  const rv = RunView.FromMetadataProvider(this.ProviderToUse);
413
557
  const results = await rv.RunView({
414
558
  EntityName: 'MJ: Template Categories'
415
559
  });
416
- this.categoryOptions = [
560
+ this.CategoryOptions = [
417
561
  { text: 'Select Category...', value: '' },
418
562
  ...results.Results.map((cat) => ({
419
563
  text: cat.Name,
@@ -423,14 +567,18 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
423
567
  }
424
568
  catch (error) {
425
569
  console.error('Error loading categories:', error);
426
- this.categoryOptions = [{ text: 'Select Category...', value: '' }];
570
+ this.CategoryOptions = [{ text: 'Select Category...', value: '' }];
427
571
  }
428
572
  }
429
- loadContentTypes() {
573
+ /** @deprecated Use {@link LoadCategories}. */
574
+ async loadCategories() {
575
+ return this.LoadCategories();
576
+ }
577
+ LoadContentTypes() {
430
578
  try {
431
579
  // Get content types from TemplateEngine cache
432
580
  const contentTypes = TemplateEngineBase.Instance.TemplateContentTypes;
433
- this.contentTypeOptions = [
581
+ this.ContentTypeOptions = [
434
582
  { text: 'Select Type...', value: '' },
435
583
  ...contentTypes.map(ct => ({
436
584
  text: ct.Name,
@@ -441,7 +589,7 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
441
589
  catch (error) {
442
590
  console.error('Error loading content types:', error);
443
591
  // Fallback to basic types
444
- this.contentTypeOptions = [
592
+ this.ContentTypeOptions = [
445
593
  { text: 'Select Type...', value: '' },
446
594
  { text: 'HTML', value: 'HTML' },
447
595
  { text: 'Plain Text', value: 'Text' },
@@ -449,12 +597,16 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
449
597
  ];
450
598
  }
451
599
  }
452
- async onCategoryChange(value) {
600
+ /** @deprecated Use {@link LoadContentTypes}. */
601
+ loadContentTypes() {
602
+ return this.LoadContentTypes();
603
+ }
604
+ async OnCategoryChange(value) {
453
605
  // If it's a new category (string but not in existing options)
454
- if (value && !this.categoryOptions.find(opt => opt.value === value)) {
606
+ if (value && !this.CategoryOptions.find(opt => opt.value === value)) {
455
607
  // Check for duplicate category names (case-insensitive, trimmed)
456
608
  if (this.isDuplicateCategory(value)) {
457
- const existingCategory = this.categoryOptions.find(option => option.text && option.text.trim().toLowerCase() === value.trim().toLowerCase());
609
+ const existingCategory = this.CategoryOptions.find(option => option.text && option.text.trim().toLowerCase() === value.trim().toLowerCase());
458
610
  if (existingCategory) {
459
611
  // Use the existing category instead
460
612
  this.record.CategoryID = existingCategory.value;
@@ -471,7 +623,7 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
471
623
  const saved = await newCategory.Save();
472
624
  if (saved) {
473
625
  // Add to options and set the ID
474
- this.categoryOptions.push({
626
+ this.CategoryOptions.push({
475
627
  text: newCategory.Name,
476
628
  value: newCategory.ID
477
629
  });
@@ -488,44 +640,56 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
488
640
  }
489
641
  }
490
642
  }
491
- async addNewTemplateContent() {
643
+ /** @deprecated Use {@link OnCategoryChange}. */
644
+ async onCategoryChange(value) {
645
+ return this.OnCategoryChange(value);
646
+ }
647
+ async AddNewTemplateContent() {
492
648
  const md = this.ProviderToUse;
493
- this.newTemplateContent = await md.GetEntityObject('MJ: Template Contents');
494
- this.newTemplateContent.TemplateID = this.record.ID;
495
- this.newTemplateContent.Priority = this.templateContents.length + 1;
496
- this.newTemplateContent.IsActive = true;
649
+ this.NewTemplateContent = await md.GetEntityObject('MJ: Template Contents');
650
+ this.NewTemplateContent.TemplateID = this.record.ID;
651
+ this.NewTemplateContent.Priority = this.TemplateContents.length + 1;
652
+ this.NewTemplateContent.IsActive = true;
497
653
  // Set default to first real content type (skip "Select Type..." if it exists)
498
- const validContentTypes = this.contentTypeOptions.filter(option => option.value !== '');
654
+ const validContentTypes = this.ContentTypeOptions.filter(option => option.value !== '');
499
655
  if (validContentTypes.length > 0) {
500
- this.newTemplateContent.TypeID = validContentTypes[0].value;
656
+ this.NewTemplateContent.TypeID = validContentTypes[0].value;
501
657
  }
502
- this.newTemplateContent.TemplateText = '';
658
+ this.NewTemplateContent.TemplateText = '';
503
659
  // Add immediately to the array
504
- this.templateContents.push(this.newTemplateContent);
505
- this.selectedContentIndex = this.templateContents.length - 1;
506
- this.isAddingNewContent = true;
660
+ this.TemplateContents.push(this.NewTemplateContent);
661
+ this.SelectedContentIndex = this.TemplateContents.length - 1;
662
+ this.IsAddingNewContent = true;
507
663
  // Sync editor value when adding new content
508
664
  this.syncEditorValue();
509
665
  }
666
+ /** @deprecated Use {@link AddNewTemplateContent}. */
667
+ async addNewTemplateContent() {
668
+ return this.AddNewTemplateContent();
669
+ }
670
+ CancelNewTemplateContent() {
671
+ this.IsAddingNewContent = false;
672
+ this.NewTemplateContent = null;
673
+ }
674
+ /** @deprecated Use {@link CancelNewTemplateContent}. */
510
675
  cancelNewTemplateContent() {
511
- this.isAddingNewContent = false;
512
- this.newTemplateContent = null;
676
+ return this.CancelNewTemplateContent();
513
677
  }
514
- async deleteTemplateContent(index) {
515
- if (index >= 0 && index < this.templateContents.length) {
516
- const contentToDelete = this.templateContents[index];
678
+ async DeleteTemplateContent(index) {
679
+ if (index >= 0 && index < this.TemplateContents.length) {
680
+ const contentToDelete = this.TemplateContents[index];
517
681
  if (contentToDelete.ID) {
518
682
  try {
519
683
  const result = await contentToDelete.Delete();
520
684
  if (result) {
521
- this.templateContents.splice(index, 1);
685
+ this.TemplateContents.splice(index, 1);
522
686
  // Adjust selected index if necessary
523
- if (this.selectedContentIndex >= this.templateContents.length) {
524
- this.selectedContentIndex = Math.max(0, this.templateContents.length - 1);
687
+ if (this.SelectedContentIndex >= this.TemplateContents.length) {
688
+ this.SelectedContentIndex = Math.max(0, this.TemplateContents.length - 1);
525
689
  }
526
690
  // If no contents remain, create a default one
527
- if (this.templateContents.length === 0) {
528
- await this.createDefaultTemplateContent();
691
+ if (this.TemplateContents.length === 0) {
692
+ await this.CreateDefaultTemplateContent();
529
693
  }
530
694
  }
531
695
  else {
@@ -539,14 +703,14 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
539
703
  }
540
704
  else {
541
705
  // Not saved yet, just remove from array
542
- this.templateContents.splice(index, 1);
543
- if (this.selectedContentIndex >= this.templateContents.length) {
544
- this.selectedContentIndex = Math.max(0, this.templateContents.length - 1);
706
+ this.TemplateContents.splice(index, 1);
707
+ if (this.SelectedContentIndex >= this.TemplateContents.length) {
708
+ this.SelectedContentIndex = Math.max(0, this.TemplateContents.length - 1);
545
709
  }
546
710
  // Reset adding new content state if we're deleting the new content
547
- if (this.isAddingNewContent && index === this.templateContents.length) {
548
- this.isAddingNewContent = false;
549
- this.newTemplateContent = null;
711
+ if (this.IsAddingNewContent && index === this.TemplateContents.length) {
712
+ this.IsAddingNewContent = false;
713
+ this.NewTemplateContent = null;
550
714
  }
551
715
  }
552
716
  }
@@ -554,43 +718,67 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
554
718
  console.error('Invalid index for deletion:', index);
555
719
  }
556
720
  }
557
- get currentTemplateContent() {
558
- if (this.isAddingNewContent) {
559
- return this.newTemplateContent;
721
+ /** @deprecated Use {@link DeleteTemplateContent}. */
722
+ async deleteTemplateContent(index) {
723
+ return this.DeleteTemplateContent(index);
724
+ }
725
+ get CurrentTemplateContent() {
726
+ if (this.IsAddingNewContent) {
727
+ return this.NewTemplateContent;
560
728
  }
561
- return this.templateContents[this.selectedContentIndex] || null;
729
+ return this.TemplateContents[this.SelectedContentIndex] || null;
730
+ }
731
+ /** @deprecated Use {@link CurrentTemplateContent}. */
732
+ get currentTemplateContent() {
733
+ return this.CurrentTemplateContent;
562
734
  }
735
+ get HasMultipleContents() {
736
+ return this.TemplateContents.length > 1 || this.IsAddingNewContent;
737
+ }
738
+ /** @deprecated Use {@link HasMultipleContents}. */
563
739
  get hasMultipleContents() {
564
- return this.templateContents.length > 1 || this.isAddingNewContent;
740
+ return this.HasMultipleContents;
565
741
  }
566
- onContentTypeChange() {
742
+ OnContentTypeChange() {
567
743
  // Content type changes just modify the current content, no new record creation
568
744
  this.updateUnsavedChangesFlag();
569
745
  }
570
- onContentChange() {
746
+ /** @deprecated Use {@link OnContentTypeChange}. */
747
+ onContentTypeChange() {
748
+ return this.OnContentTypeChange();
749
+ }
750
+ OnContentChange() {
571
751
  this.updateUnsavedChangesFlag();
572
752
  }
753
+ /** @deprecated Use {@link OnContentChange}. */
754
+ onContentChange() {
755
+ return this.OnContentChange();
756
+ }
573
757
  /**
574
758
  * Updates the hasUnsavedChanges flag based on entity dirty states
575
759
  */
576
760
  updateUnsavedChangesFlag() {
577
- this.hasUnsavedChanges = this.templateContents.some(content => content.Dirty) ||
578
- this.isAddingNewContent ||
761
+ this.HasUnsavedChanges = this.TemplateContents.some(content => content.Dirty) ||
762
+ this.IsAddingNewContent ||
579
763
  this.record?.Dirty || false;
580
764
  }
581
- onTemplateTextChange(event) {
765
+ OnTemplateTextChange(event) {
582
766
  if (this.isUpdatingEditorValue) {
583
767
  // Ignore change events when we're programmatically updating the editor
584
768
  return;
585
769
  }
586
- if (this.currentTemplateContent) {
770
+ if (this.CurrentTemplateContent) {
587
771
  // Extract value from event - might be event.target.value or just event depending on component
588
772
  const value = typeof event === 'string' ? event : (event.target?.value || event);
589
- this.currentTemplateContent.TemplateText = value;
773
+ this.CurrentTemplateContent.TemplateText = value;
590
774
  // hasUnsavedChanges is automatically handled by entity's IsDirty flag
591
775
  this.updateUnsavedChangesFlag();
592
776
  }
593
777
  }
778
+ /** @deprecated Use {@link OnTemplateTextChange}. */
779
+ onTemplateTextChange(event) {
780
+ return this.OnTemplateTextChange(event);
781
+ }
594
782
  /**
595
783
  * Helper method to track setTimeout calls for cleanup
596
784
  */
@@ -614,21 +802,21 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
614
802
  Promise.resolve().then(() => {
615
803
  // Then tracked setTimeout for the next macrotask to ensure DOM is updated
616
804
  this.setTrackedTimeout(() => {
617
- if (!this.codeEditor) {
805
+ if (!this.CodeEditor) {
618
806
  return;
619
807
  }
620
808
  this.isUpdatingEditorValue = true;
621
- const newValue = this.currentTemplateContent?.TemplateText || '';
809
+ const newValue = this.CurrentTemplateContent?.TemplateText || '';
622
810
  // Use the setValue method from mj-code-editor component
623
- this.codeEditor.setValue(newValue);
811
+ this.CodeEditor.setValue(newValue);
624
812
  this.isUpdatingEditorValue = false;
625
813
  }, 0);
626
814
  });
627
815
  }
628
- async saveTemplateContents() {
816
+ async SaveTemplateContents() {
629
817
  try {
630
818
  // Save all template contents that have changes
631
- for (const content of this.templateContents) {
819
+ for (const content of this.TemplateContents) {
632
820
  content.TemplateID = this.record.ID; // Ensure FK is set
633
821
  if (content.Dirty || !content.ID) {
634
822
  const contentResult = await content.Save();
@@ -638,8 +826,8 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
638
826
  }
639
827
  }
640
828
  }
641
- this.isAddingNewContent = false;
642
- this.newTemplateContent = null;
829
+ this.IsAddingNewContent = false;
830
+ this.NewTemplateContent = null;
643
831
  this.updateUnsavedChangesFlag(); // Update based on current entity states
644
832
  return true;
645
833
  }
@@ -648,12 +836,16 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
648
836
  return false;
649
837
  }
650
838
  }
839
+ /** @deprecated Use {@link SaveTemplateContents}. */
840
+ async saveTemplateContents() {
841
+ return this.SaveTemplateContents();
842
+ }
651
843
  async SaveRecord(StopEditModeAfterSave = true) {
652
844
  // Check if we need to create a new category first
653
- if (this.record.CategoryID && !this.categoryOptions.find(opt => opt.value === this.record.CategoryID)) {
845
+ if (this.record.CategoryID && !this.CategoryOptions.find(opt => opt.value === this.record.CategoryID)) {
654
846
  // Check for duplicate category names (case-insensitive, trimmed)
655
847
  if (this.isDuplicateCategory(this.record.CategoryID)) {
656
- const existingCategory = this.categoryOptions.find(option => option.text && option.text.trim().toLowerCase() === this.record.CategoryID?.trim().toLowerCase());
848
+ const existingCategory = this.CategoryOptions.find(option => option.text && option.text.trim().toLowerCase() === this.record.CategoryID?.trim().toLowerCase());
657
849
  if (existingCategory) {
658
850
  // Use the existing category instead
659
851
  this.record.CategoryID = existingCategory.value;
@@ -670,7 +862,7 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
670
862
  const saved = await newCategory.Save();
671
863
  if (saved) {
672
864
  // Add to options and set the ID
673
- this.categoryOptions.push({
865
+ this.CategoryOptions.push({
674
866
  text: newCategory.Name,
675
867
  value: newCategory.ID
676
868
  });
@@ -698,21 +890,25 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
698
890
  const templateSaved = await super.SaveRecord(StopEditModeAfterSave);
699
891
  if (templateSaved) {
700
892
  // Then save all template contents
701
- return await this.saveTemplateContents();
893
+ return await this.SaveTemplateContents();
702
894
  }
703
895
  return false;
704
896
  }
705
- getContentTypeDisplayText(typeId) {
897
+ GetContentTypeDisplayText(typeId) {
706
898
  if (!typeId)
707
899
  return '-';
708
- const option = this.contentTypeOptions.find(opt => opt.value === typeId);
900
+ const option = this.ContentTypeOptions.find(opt => opt.value === typeId);
709
901
  return option ? option.text : typeId;
710
902
  }
711
- getEditorLanguage() {
712
- if (!this.currentTemplateContent?.TypeID) {
903
+ /** @deprecated Use {@link GetContentTypeDisplayText}. */
904
+ getContentTypeDisplayText(typeId) {
905
+ return this.GetContentTypeDisplayText(typeId);
906
+ }
907
+ GetEditorLanguage() {
908
+ if (!this.CurrentTemplateContent?.TypeID) {
713
909
  return 'jinja2'; // default to jinja2 for template syntax (compatible with Nunjucks)
714
910
  }
715
- const contentType = this.currentTemplateContent.TypeID.toLowerCase();
911
+ const contentType = this.CurrentTemplateContent.TypeID.toLowerCase();
716
912
  // Map content types to CodeMirror language modes
717
913
  switch (contentType) {
718
914
  case 'html':
@@ -737,20 +933,24 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
737
933
  return 'jinja2'; // Default to jinja2 since templates often contain template syntax
738
934
  }
739
935
  }
936
+ /** @deprecated Use {@link GetEditorLanguage}. */
937
+ getEditorLanguage() {
938
+ return this.GetEditorLanguage();
939
+ }
740
940
  isDuplicateCategory(categoryName) {
741
941
  const normalizedName = categoryName.trim().toLowerCase();
742
- return this.categoryOptions.some(option => option.text && option.text.trim().toLowerCase() === normalizedName);
942
+ return this.CategoryOptions.some(option => option.text && option.text.trim().toLowerCase() === normalizedName);
743
943
  }
744
944
  /**
745
945
  * Test run the current template using the parameter dialog
746
946
  */
747
- async runTemplate() {
748
- if (!this.record?.IsSaved || !this.currentTemplateContent) {
947
+ async RunTemplate() {
948
+ if (!this.record?.IsSaved || !this.CurrentTemplateContent) {
749
949
  MJNotificationService.Instance.CreateSimpleNotification('Please save the template before running it.', 'warning');
750
950
  return;
751
951
  }
752
952
  // Save any unsaved changes first
753
- if (this.hasUnsavedChanges) {
953
+ if (this.HasUnsavedChanges) {
754
954
  const saveResult = await this.SaveRecord(false); // Don't exit edit mode
755
955
  if (!saveResult) {
756
956
  MJNotificationService.Instance.CreateSimpleNotification('Failed to save template changes.', 'error');
@@ -758,37 +958,57 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
758
958
  }
759
959
  }
760
960
  // Show the parameter dialog
761
- this.showParamDialog = true;
961
+ this.ShowParamDialog = true;
962
+ }
963
+ /** @deprecated Use {@link RunTemplate}. */
964
+ async runTemplate() {
965
+ return this.RunTemplate();
762
966
  }
763
967
  /**
764
968
  * Handle parameter dialog close
765
969
  */
970
+ OnParamDialogClose() {
971
+ this.ShowParamDialog = false;
972
+ }
973
+ /** @deprecated Use {@link OnParamDialogClose}. */
766
974
  onParamDialogClose() {
767
- this.showParamDialog = false;
975
+ return this.OnParamDialogClose();
768
976
  }
769
- getContentTypeOptionsForContent() {
977
+ GetContentTypeOptionsForContent() {
770
978
  // Always exclude "Select Type..." option for all content
771
- return this.contentTypeOptions.filter(option => option.value !== '');
979
+ return this.ContentTypeOptions.filter(option => option.value !== '');
980
+ }
981
+ /** @deprecated Use {@link GetContentTypeOptionsForContent}. */
982
+ getContentTypeOptionsForContent() {
983
+ return this.GetContentTypeOptionsForContent();
772
984
  }
773
985
  /**
774
986
  * Handles template content changes from the shared editor
775
987
  */
776
- onSharedTemplateContentChange(content) {
777
- this.templateContents = content;
988
+ OnSharedTemplateContentChange(content) {
989
+ this.TemplateContents = content;
778
990
  this.updateUnsavedChangesFlag();
779
991
  }
992
+ /** @deprecated Use {@link OnSharedTemplateContentChange}. */
993
+ onSharedTemplateContentChange(content) {
994
+ return this.OnSharedTemplateContentChange(content);
995
+ }
780
996
  /**
781
997
  * Handles template run requests from the shared editor
782
998
  */
999
+ OnSharedTemplateRun(template) {
1000
+ this.RunTemplate();
1001
+ }
1002
+ /** @deprecated Use {@link OnSharedTemplateRun}. */
783
1003
  onSharedTemplateRun(template) {
784
- this.runTemplate();
1004
+ return this.OnSharedTemplateRun(template);
785
1005
  }
786
1006
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJTemplateFormComponentExtended_BaseFactory; return function MJTemplateFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJTemplateFormComponentExtended_BaseFactory || (ɵMJTemplateFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJTemplateFormComponentExtended)))(__ngFactoryType__ || MJTemplateFormComponentExtended); }; })(); }
787
1007
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJTemplateFormComponentExtended, selectors: [["mj-templates-form"]], viewQuery: function MJTemplateFormComponentExtended_Query(rf, ctx) { if (rf & 1) {
788
1008
  i0.ɵɵviewQuery(_c0, 5);
789
1009
  } if (rf & 2) {
790
1010
  let _t;
791
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.codeEditor = _t.first);
1011
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.CodeEditor = _t.first);
792
1012
  } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["form", "ngForm"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "template-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "template-header-area"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-file-code", "template-icon"], ["type", "text", "name", "templateName", "placeholder", "Enter template name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap", "align-items", "center"], ["name", "description", "placeholder", "Enter template description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [1, "description-text"], [2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-file-lines", "meta-icon"], [1, "meta-label"], [1, "meta-value"], [2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], ["title", "Run Template", 1, "run-template-btn"], [1, "configuration-sections"], [2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [2, "padding", "8px", "min-height", "400px"], [2, "height", "100%", "display", "block", 3, "contentChange", "runTemplate", "template", "config"], [2, "padding", "16px"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "UserPrompt", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "UserID", "Type", "textbox", "LinkType", "Record", "LinkComponentType", "Search", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ActiveAt", "Type", "datepicker", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "DisabledAt", "Type", "datepicker", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "IsActive", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "__mj_CreatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "__mj_UpdatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "Category", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "User", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], [3, "isVisibleChange", "onClose", "template", "isVisible"], ["type", "text", "name", "templateName", "placeholder", "Enter template name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [1, "active-badge"], [1, "inactive-badge"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-pause-circle"], [1, "field-label"], ["name", "categoryId", "TextField", "text", "ValueField", "value", "Placeholder", "Select or enter new category...", 2, "width", "250px", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "AllowCustom"], ["name", "isActive", 3, "ngModelChange", "ngModel"], ["name", "description", "placeholder", "Enter template description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-folder", "meta-icon"], ["title", "Run Template", 1, "run-template-btn", 3, "click"], [1, "fa-solid", "fa-play"], [1, "panel-title"], [1, "fa-solid", "fa-code"], [1, "count-badge"], [1, "fa-solid", "fa-cogs"], [2, "padding", "16px 0"], [3, "template", "editMode"], [1, "fa-solid", "fa-sliders"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-file-text"]], template: function MJTemplateFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
793
1013
  i0.ɵɵconditionalCreate(0, MJTemplateFormComponentExtended_Conditional_0_Template, 48, 46);
794
1014
  } if (rf & 2) {
@@ -802,7 +1022,7 @@ export { MJTemplateFormComponentExtended };
802
1022
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJTemplateFormComponentExtended, [{
803
1023
  type: Component,
804
1024
  args: [{ standalone: false, selector: 'mj-templates-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Main Content Area -->\n <div class=\"template-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Header Section -->\n <div class=\"template-header-area\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n\n <!-- Left: Template Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-file-code template-icon\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"record.Name\"\n name=\"templateName\"\n placeholder=\"Enter template name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4>{{ record.Name || 'Unnamed Template' }}</h4>\n @if (record.IsActive) {\n <span class=\"active-badge\">\n <i class=\"fa-solid fa-check-circle\"></i> Active\n </span>\n } @else {\n <span class=\"inactive-badge\">\n <i class=\"fa-solid fa-pause-circle\"></i> Inactive\n </span>\n }\n }\n </div>\n\n <!-- Category and Active toggle when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap; align-items: center;\">\n <div>\n <label class=\"field-label\">Category</label>\n <mj-combobox [(ngModel)]=\"record.CategoryID\"\n name=\"categoryId\"\n [Data]=\"categoryOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [AllowCustom]=\"true\"\n (ValueChange)=\"onCategoryChange($any($event))\"\n Placeholder=\"Select or enter new category...\"\n style=\"width: 250px;\">\n </mj-combobox>\n </div>\n <div>\n <label class=\"field-label\">Active</label>\n <mj-switch [(ngModel)]=\"record.IsActive\" name=\"isActive\"></mj-switch>\n </div>\n </div>\n }\n\n @if (EditMode) {\n <textarea class=\"mj-textarea\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n [rows]=\"2\"\n placeholder=\"Enter template description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></textarea>\n } @else if (record.Description) {\n <p class=\"description-text\">{{ record.Description }}</p>\n }\n\n <!-- Quick Info Row -->\n <div style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.Category) {\n <div style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder meta-icon\"></i>\n <span class=\"meta-label\">Category:</span>\n <span class=\"meta-value\">{{ record.Category }}</span>\n </div>\n }\n\n <div style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-file-lines meta-icon\"></i>\n <span class=\"meta-label\">Contents:</span>\n <span class=\"meta-value\">{{ templateContents.length }}</span>\n </div>\n </div>\n </div>\n\n <!-- Right: Action Buttons -->\n <div style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n @if (record.IsSaved) {\n <button class=\"run-template-btn\"\n (click)=\"runTemplate()\"\n title=\"Run Template\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\">\n\n <!-- Template Editor Section -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Template Editor\n @if (templateContents.length > 0) {\n <span class=\"count-badge\">{{ templateContents.length }}</span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 8px; min-height: 400px;\">\n <mj-template-editor\n [template]=\"record\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onSharedTemplateContentChange($event)\"\n (runTemplate)=\"onSharedTemplateRun($event)\"\n style=\"height: 100%; display: block;\">\n </mj-template-editor>\n </div>\n </mj-accordion-panel>\n\n <!-- Details Section -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-cogs\"></i>\n Details\n </span>\n </ng-template>\n\n <div style=\"padding: 16px;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserPrompt\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n LinkType=\"Record\"\n LinkComponentType=\"Search\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ActiveAt\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"DisabledAt\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"IsActive\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Category\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"User\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Template Parameters Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-template-params-grid\n [template]=\"record\"\n [editMode]=\"EditMode\">\n </mj-template-params-grid>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- AI Prompts Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-robot\"></i>\n AI Prompts\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','TemplateID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Entity Documents Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-file-text\"></i>\n Entity Documents\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Entity Documents','TemplateID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Entity Documents')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Template Parameter Dialog -->\n<mj-template-param-dialog\n [template]=\"record\"\n [(isVisible)]=\"showParamDialog\"\n (onClose)=\"onParamDialogClose()\">\n</mj-template-param-dialog>\n}\n", styles: [".k-pane {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n", "/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n background: var(--mj-bg-surface);\n}\n\n/* Override the shared record-form min-height so flex layout works properly */\n.record-form {\n min-height: 0 !important;\n}\n\n.template-header {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n/* Header section */\n.template-header-area {\n flex-shrink: 0;\n padding: 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.template-header-area .template-icon {\n color: var(--mj-brand-primary);\n font-size: 1.4em;\n}\n\n.template-header-area h4 {\n margin: 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n flex: 1;\n}\n\n.template-header-area .active-badge {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 0.8em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.template-header-area .inactive-badge {\n background: color-mix(in srgb, var(--mj-text-muted) 15%, var(--mj-bg-surface));\n color: var(--mj-text-muted);\n border: 1px solid color-mix(in srgb, var(--mj-text-muted) 30%, transparent);\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 0.8em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.template-header-area .field-label {\n display: block;\n margin-bottom: 4px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.template-header-area .description-text {\n margin: 0 0 12px 0;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n.template-header-area .meta-icon {\n color: var(--mj-text-muted);\n}\n\n.template-header-area .meta-label {\n color: var(--mj-text-muted);\n}\n\n.template-header-area .meta-value {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n/* Run template button */\n.run-template-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n font-size: 0.95em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.run-template-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n/* Configuration sections */\n.configuration-sections {\n flex: 1;\n background: var(--mj-bg-surface);\n border-top: 2px solid var(--mj-border-default);\n padding: 16px;\n min-height: 0;\n}\n\n/* Expansion panel titles */\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-title i {\n color: var(--mj-text-muted);\n}\n\n.panel-title .count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.7em;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Accordion Panel Styling */\n::ng-deep .configuration-sections mj-accordion-panel {\n margin-bottom: 12px;\n}\n\n::ng-deep .configuration-sections .mj-accordion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n background: var(--mj-bg-surface-card);\n}\n\n::ng-deep .configuration-sections .mj-accordion-header {\n padding: 16px 20px;\n font-weight: 600;\n font-size: 16px;\n}\n\n::ng-deep .configuration-sections .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n::ng-deep .configuration-sections .mj-accordion-body {\n padding: 0;\n}\n\n/* Smooth transitions */\n.template-header,\n.badge {\n transition: all 0.2s ease;\n}\n"] }]
805
- }], null, { codeEditor: [{
1025
+ }], null, { CodeEditor: [{
806
1026
  type: ViewChild,
807
1027
  args: ['codeEditor']
808
1028
  }] }); })();