@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
@@ -4,7 +4,9 @@ import { TabEvent } from '@memberjunction/ng-tabstrip';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class MJEntityActionFormComponentExtended extends MJEntityActionFormComponent {
6
6
  record: MJEntityActionEntity;
7
- readonly toolbarConfig: import("@memberjunction/ng-base-forms").FormToolbarConfig;
7
+ readonly ToolbarConfig: import("@memberjunction/ng-base-forms").FormToolbarConfig;
8
+ /** @deprecated Use {@link ToolbarConfig}. */
9
+ get toolbarConfig(): import("@memberjunction/ng-base-forms").FormToolbarConfig;
8
10
  /** Custom-layout Entity Action form looks best full-width on first open. */
9
11
  getDefaultFormWidthMode(): 'centered' | 'full-width';
10
12
  private sharedService;
@@ -16,6 +18,8 @@ export declare class MJEntityActionFormComponentExtended extends MJEntityActionF
16
18
  /**
17
19
  * Handle tab selection events
18
20
  */
21
+ OnTabSelect(e: TabEvent): void;
22
+ /** @deprecated Use {@link OnTabSelect}. */
19
23
  onTabSelect(e: TabEvent): void;
20
24
  /**
21
25
  * Check if a tab is currently active
@@ -1 +1 @@
1
- {"version":3,"file":"entityaction.form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/EntityActions/entityaction.form.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAIrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uEAAuE,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;;AAEvD,qBAOa,mCAAoC,SAAQ,2BAA2B;IACzE,MAAM,EAAG,oBAAoB,CAAC;IACrC,SAAgB,aAAa,4DAAgC;IAE7D,4EAA4E;IAC5D,uBAAuB,IAAI,UAAU,GAAG,YAAY;IACpE,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAAuB;IAEzC;;OAEG;IACI,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM;IAIxC;;OAEG;IACI,WAAW,CAAC,CAAC,EAAE,QAAQ;IAK9B;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;yCA3BpC,mCAAmC;2CAAnC,mCAAmC;CA8B/C"}
1
+ {"version":3,"file":"entityaction.form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/EntityActions/entityaction.form.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAIrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uEAAuE,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;;AAEvD,qBAOa,mCAAoC,SAAQ,2BAA2B;IACzE,MAAM,EAAG,oBAAoB,CAAC;IACrC,SAAgB,aAAa,4DAAgC;IAE7D,6CAA6C;IAC7C,IAAW,aAAa,8DAEvB;IAED,4EAA4E;IAC5D,uBAAuB,IAAI,UAAU,GAAG,YAAY;IACpE,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAAuB;IAEzC;;OAEG;IACI,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM;IAIxC;;OAEG;IACI,WAAW,CAAC,CAAC,EAAE,QAAQ;IAK9B,2CAA2C;IACpC,WAAW,CAAC,CAAC,EAAE,QAAQ;IAI9B;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;yCArCpC,mCAAmC;2CAAnC,mCAAmC;CAwC/C"}
@@ -72,10 +72,14 @@ function MJEntityActionFormComponentExtended_Conditional_0_Template(rf, ctx) { i
72
72
  let MJEntityActionFormComponentExtended = class MJEntityActionFormComponentExtended extends MJEntityActionFormComponent {
73
73
  constructor() {
74
74
  super(...arguments);
75
- this.toolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
75
+ this.ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
76
76
  this.sharedService = inject(SharedService);
77
77
  this.currentTab = null;
78
78
  }
79
+ /** @deprecated Use {@link ToolbarConfig}. */
80
+ get toolbarConfig() {
81
+ return this.ToolbarConfig;
82
+ }
79
83
  /** Custom-layout Entity Action form looks best full-width on first open. */
80
84
  getDefaultFormWidthMode() { return 'full-width'; }
81
85
  /**
@@ -87,10 +91,14 @@ let MJEntityActionFormComponentExtended = class MJEntityActionFormComponentExten
87
91
  /**
88
92
  * Handle tab selection events
89
93
  */
90
- onTabSelect(e) {
94
+ OnTabSelect(e) {
91
95
  this.currentTab = e.tab?.Name || null;
92
96
  this.sharedService.InvokeManualResize();
93
97
  }
98
+ /** @deprecated Use {@link OnTabSelect}. */
99
+ onTabSelect(e) {
100
+ return this.OnTabSelect(e);
101
+ }
94
102
  /**
95
103
  * Check if a tab is currently active
96
104
  */
@@ -1 +1 @@
1
- {"version":3,"file":"entityaction.form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/EntityActions/entityaction.form.component.ts","../../../../src/lib/custom/EntityActions/entityaction.form.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,uEAAuE,CAAC;;;;;;;;;;;;;ICJpH,mDAO4D;IAAxD,AADA,AADA,AADA,AADA,qOAAY,6BAAsB,KAAC,gOAChB,0BAAmB,KAAC,gOACpB,0BAAmB,KAAC,kOACnB,2BAAoB,KAAC,gPACd,kCAA2B,KAAC;IACvD,kCAAwH;IACtH,4BACM;IACN,sCAA2F;IAAzC,AAArC,8NAAe,0BAAmB,KAAC,mNAAqB,2BAAoB,KAAC;IACxF,iCAAuB;IACrB,yBACF;IAAA,iBAAS;IACT,mCAAa;IACX,qCAKkB;IACpB,iBAAc;IACd,kCAEwC;IACtC,yBACF;IAAA,iBAAS;IACT,oCAAa;IACX,oCAiBe;IACjB,iBAAc;IACd,mCAEwC;IACtC,8BACF;IAAA,iBAAS;IACT,oCAAa;IACX,oCAkBe;IACjB,iBAAc;IACd,mCAEwC;IACtC,0BACF;IAAA,iBAAS;IACT,oCAAa;IAKX,oDAM+B;IAIzC,AADI,AADE,AADE,iBAAc,EACF,EACT,EACgB;;;IA5FvB,AADA,AADwC,AAAlB,sCAAiB,yBAAuB,uCAC/B,2BACL;IAiBlB,eAAiB;IACjB,AADA,sCAAiB,6BACI;IAIvB,cAA0B;IAC1B,AADA,+CAA0B,sCACW;IAKnC,eAAwB;IAcxB,AADgB,AADA,AARA,AAFhB,AADA,AADA,sCAAwB,2BACE,mCACC,yDAEsC,+DAQM,yDACO,yEACxB;IAKxD,cAA0B;IAC1B,AADA,+CAA0B,sCACW;IAKnC,eAAwB;IAcxB,AAFgB,AADA,AAThB,AADA,AADA,sCAAwB,2BACE,mCACC,+DAS4C,yDAChB,yEAED;IAMxD,cAA0B;IAC1B,AADA,+CAA0B,sCACW;IASnC,eAA+E;IAI/E,AADA,AADA,AADA,AADA,oGAA+E,wEACf,+DACT,eACzC,sBACO;;AD3E1B,IAAM,mCAAmC,GAAzC,MAAM,mCAAoC,SAAQ,2BAA2B;IAA7E;;QAEa,kBAAa,GAAG,4BAA4B,CAAC;QAIrD,kBAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QACtC,eAAU,GAAkB,IAAI,CAAC;KAuB5C;IA1BG,4EAA4E;IAC5D,uBAAuB,KAAgC,OAAO,YAAY,CAAC,CAAC,CAAC;IAI7F;;OAEG;IACI,kBAAkB,CAAC,KAAc;QACpC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,CAAW;QAC1B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,OAAe;QAC/B,OAAO,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC;IACvC,CAAC;gUA7BQ,mCAAmC,yBAAnC,mCAAmC;oEAAnC,mCAAmC;YCfhD,4HAAc;;YAAd,qCAgGC;;;ADjFY,mCAAmC;IAP/C,aAAa,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;GAO1C,mCAAmC,CA8B/C;;iFA9BY,mCAAmC;cAN/C,SAAS;6BACI,KAAK,YACL,uCAAuC;;kFAIxC,mCAAmC","sourcesContent":["import { Component, inject } from '@angular/core';\nimport { MJEntityActionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { MJEntityActionFormComponent } from '../../generated/Entities/MJEntityAction/mjentityaction.form.component';\nimport { TabEvent } from '@memberjunction/ng-tabstrip';\n\n@RegisterClass(BaseFormComponent, 'MJ: Entity Actions')\n@Component({\n standalone: false,\n selector: 'mj-custom-entity-action-extended-form',\n templateUrl: './entityaction.form.component.html',\n styleUrls: ['../../../shared/form-styles.css', './entityaction.form.component.css']\n})\nexport class MJEntityActionFormComponentExtended extends MJEntityActionFormComponent {\n public record!: MJEntityActionEntity;\n public readonly toolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Custom-layout Entity Action form looks best full-width on first open. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n private sharedService = inject(SharedService);\n private currentTab: string | null = null;\n\n /**\n * Convenience method to resize application container when required\n */\n public InvokeManualResize(delay?: number) {\n this.sharedService.InvokeManualResize(delay);\n }\n\n /**\n * Handle tab selection events\n */\n public onTabSelect(e: TabEvent) {\n this.currentTab = e.tab?.Name || null;\n this.sharedService.InvokeManualResize();\n }\n\n /**\n * Check if a tab is currently active\n */\n public IsCurrentTab(tabName: string): boolean {\n return this.currentTab === tabName;\n }\n}\n","@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 <div #topArea class=\"record-form-group\">\n </div>\n <mj-tabstrip (TabSelected)=\"onTabSelect($event)\" (ResizeContainer)=\"InvokeManualResize()\">\n <mj-tab Name=\"Details\">\n Details\n </mj-tab>\n <mj-tab-body>\n <mj-form-section\n Entity=\"MJ: Entity Actions\"\n Section=\"details\"\n [record]=\"record\"\n [EditMode]=\"EditMode\">\n </mj-form-section>\n </mj-tab-body>\n <mj-tab Name=\"MJ: Entity Action Params\"\n [Visible]=\"record.IsSaved\"\n [Props]=\"{EntityRelationshipID: 247}\">\n Params\n </mj-tab>\n <mj-tab-body>\n <mj-join-grid\n [ShowSaveButton]=\"false\"\n [ShowCancelButton]=\"false\"\n [EditMode]=\"GridEditMode()\"\n RowsEntityName=\"MJ: Action Params\"\n [RowsExtraFilter]=\"'ActionID=' + record.ActionID\"\n RowsEntityDisplayField=\"Name\"\n RowsEntityDataSource=\"FullEntity\"\n RowsOrderBy=\"ID\"\n RowsEntityDisplayName=\"Action Param\"\n ColumnsMode=\"Fields\"\n JoinEntityName=\"MJ: Entity Action Params\"\n JoinEntityRowForeignKey=\"ActionParamID\"\n [JoinEntityExtraFilter]=\"'EntityActionID=' + record.ID\"\n [JoinEntityDisplayColumns]=\"['ValueType', 'Value','Comments']\"\n [NewRecordDefaultValues]=\"{EntityActionID: record.ID}\"\n >\n </mj-join-grid>\n </mj-tab-body>\n <mj-tab Name=\"MJ: Entity Action Invocations\"\n [Visible]=\"record.IsSaved\"\n [Props]=\"{EntityRelationshipID: 247}\">\n Invocations\n </mj-tab>\n <mj-tab-body>\n <mj-join-grid\n [ShowSaveButton]=\"false\"\n [ShowCancelButton]=\"false\"\n [EditMode]=\"GridEditMode()\"\n RowsEntityName=\"MJ: Entity Action Invocation Types\"\n RowsEntityDisplayField=\"Name\"\n RowsEntityDataSource=\"FullEntity\"\n RowsOrderBy=\"Name\"\n RowsEntityDisplayName=\"Type\"\n ColumnsMode=\"Fields\"\n JoinEntityName=\"MJ: Entity Action Invocations\"\n JoinEntityRowForeignKey=\"InvocationTypeID\"\n [JoinEntityExtraFilter]=\"'EntityActionID=' + record.ID\"\n [JoinEntityDisplayColumns]=\"['Status']\"\n CheckBoxValueMode=\"RecordExists\"\n [NewRecordDefaultValues]=\"{EntityActionID: record.ID}\"\n style=\"height: 500px; width: 800px;\"\n >\n </mj-join-grid>\n </mj-tab-body>\n <mj-tab Name=\"MJ: Entity Action Filters\"\n [Visible]=\"record.IsSaved\"\n [Props]=\"{EntityRelationshipID: 248}\">\n Filters\n </mj-tab>\n <mj-tab-body>\n <!-- Explicit Height: the default 'auto' resolves to height:100%, which needs a definite\n ancestor — the tab body used to hardcode viewport height and provide one, but it now\n sizes to content (the host owns region sizing), so 100% would resolve to nothing and\n the grid loses its internal scroll. 600px ≈ the region the old viewport math yielded. -->\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Entity Action Filters')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Entity Action Filters')\"\n [AllowLoad]=\"IsCurrentTab('MJ: Entity Action Filters')\"\n [Height]=\"600\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </mj-tab-body>\n </mj-tabstrip>\n </form>\n</mj-record-form-container>\n}\n"]}
1
+ {"version":3,"file":"entityaction.form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/EntityActions/entityaction.form.component.ts","../../../../src/lib/custom/EntityActions/entityaction.form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, inject } from '@angular/core';\nimport { MJEntityActionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { MJEntityActionFormComponent } from '../../generated/Entities/MJEntityAction/mjentityaction.form.component';\nimport { TabEvent } from '@memberjunction/ng-tabstrip';\n\n@RegisterClass(BaseFormComponent, 'MJ: Entity Actions')\n@Component({\n standalone: false,\n selector: 'mj-custom-entity-action-extended-form',\n templateUrl: './entityaction.form.component.html',\n styleUrls: ['../../../shared/form-styles.css', './entityaction.form.component.css']\n})\nexport class MJEntityActionFormComponentExtended extends MJEntityActionFormComponent {\n public record!: MJEntityActionEntity;\n public readonly ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** @deprecated Use {@link ToolbarConfig}. */\n public get toolbarConfig() {\n return this.ToolbarConfig;\n }\n\n /** Custom-layout Entity Action form looks best full-width on first open. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n private sharedService = inject(SharedService);\n private currentTab: string | null = null;\n\n /**\n * Convenience method to resize application container when required\n */\n public InvokeManualResize(delay?: number) {\n this.sharedService.InvokeManualResize(delay);\n }\n\n /**\n * Handle tab selection events\n */\n public OnTabSelect(e: TabEvent) {\n this.currentTab = e.tab?.Name || null;\n this.sharedService.InvokeManualResize();\n }\n\n /** @deprecated Use {@link OnTabSelect}. */\n public onTabSelect(e: TabEvent) {\n return this.OnTabSelect(e);\n }\n\n /**\n * Check if a tab is currently active\n */\n public IsCurrentTab(tabName: string): boolean {\n return this.currentTab === tabName;\n }\n}\n","@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 <div #topArea class=\"record-form-group\">\n </div>\n <mj-tabstrip (TabSelected)=\"onTabSelect($event)\" (ResizeContainer)=\"InvokeManualResize()\">\n <mj-tab Name=\"Details\">\n Details\n </mj-tab>\n <mj-tab-body>\n <mj-form-section\n Entity=\"MJ: Entity Actions\"\n Section=\"details\"\n [record]=\"record\"\n [EditMode]=\"EditMode\">\n </mj-form-section>\n </mj-tab-body>\n <mj-tab Name=\"MJ: Entity Action Params\"\n [Visible]=\"record.IsSaved\"\n [Props]=\"{EntityRelationshipID: 247}\">\n Params\n </mj-tab>\n <mj-tab-body>\n <mj-join-grid\n [ShowSaveButton]=\"false\"\n [ShowCancelButton]=\"false\"\n [EditMode]=\"GridEditMode()\"\n RowsEntityName=\"MJ: Action Params\"\n [RowsExtraFilter]=\"'ActionID=' + record.ActionID\"\n RowsEntityDisplayField=\"Name\"\n RowsEntityDataSource=\"FullEntity\"\n RowsOrderBy=\"ID\"\n RowsEntityDisplayName=\"Action Param\"\n ColumnsMode=\"Fields\"\n JoinEntityName=\"MJ: Entity Action Params\"\n JoinEntityRowForeignKey=\"ActionParamID\"\n [JoinEntityExtraFilter]=\"'EntityActionID=' + record.ID\"\n [JoinEntityDisplayColumns]=\"['ValueType', 'Value','Comments']\"\n [NewRecordDefaultValues]=\"{EntityActionID: record.ID}\"\n >\n </mj-join-grid>\n </mj-tab-body>\n <mj-tab Name=\"MJ: Entity Action Invocations\"\n [Visible]=\"record.IsSaved\"\n [Props]=\"{EntityRelationshipID: 247}\">\n Invocations\n </mj-tab>\n <mj-tab-body>\n <mj-join-grid\n [ShowSaveButton]=\"false\"\n [ShowCancelButton]=\"false\"\n [EditMode]=\"GridEditMode()\"\n RowsEntityName=\"MJ: Entity Action Invocation Types\"\n RowsEntityDisplayField=\"Name\"\n RowsEntityDataSource=\"FullEntity\"\n RowsOrderBy=\"Name\"\n RowsEntityDisplayName=\"Type\"\n ColumnsMode=\"Fields\"\n JoinEntityName=\"MJ: Entity Action Invocations\"\n JoinEntityRowForeignKey=\"InvocationTypeID\"\n [JoinEntityExtraFilter]=\"'EntityActionID=' + record.ID\"\n [JoinEntityDisplayColumns]=\"['Status']\"\n CheckBoxValueMode=\"RecordExists\"\n [NewRecordDefaultValues]=\"{EntityActionID: record.ID}\"\n style=\"height: 500px; width: 800px;\"\n >\n </mj-join-grid>\n </mj-tab-body>\n <mj-tab Name=\"MJ: Entity Action Filters\"\n [Visible]=\"record.IsSaved\"\n [Props]=\"{EntityRelationshipID: 248}\">\n Filters\n </mj-tab>\n <mj-tab-body>\n <!-- Explicit Height: the default 'auto' resolves to height:100%, which needs a definite\n ancestor — the tab body used to hardcode viewport height and provide one, but it now\n sizes to content (the host owns region sizing), so 100% would resolve to nothing and\n the grid loses its internal scroll. 600px ≈ the region the old viewport math yielded. -->\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Entity Action Filters')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Entity Action Filters')\"\n [AllowLoad]=\"IsCurrentTab('MJ: Entity Action Filters')\"\n [Height]=\"600\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </mj-tab-body>\n </mj-tabstrip>\n </form>\n</mj-record-form-container>\n}\n"]}
@@ -19,7 +19,7 @@ export declare class MJFileFormComponentExtended extends MJFileFormComponent imp
19
19
  ngOnInit(): Promise<void>;
20
20
  ngOnChanges(changes: SimpleChanges): Promise<void>;
21
21
  ngOnDestroy(): void;
22
- private RestoreUserPreferences;
22
+ private restoreUserPreferences;
23
23
  /**
24
24
  * Loads the media streaming URL for inline viewing.
25
25
  */
@@ -487,7 +487,7 @@ let MJFileFormComponentExtended = class MJFileFormComponentExtended extends MJFi
487
487
  static { this.PREF_SHOW_DETAILS = 'mj.fileViewer.showDetailsSidebar'; }
488
488
  async ngOnInit() {
489
489
  await super.ngOnInit();
490
- this.RestoreUserPreferences();
490
+ this.restoreUserPreferences();
491
491
  if (this.record?.ID) {
492
492
  void this.LoadMediaPreview();
493
493
  }
@@ -503,7 +503,7 @@ let MJFileFormComponentExtended = class MJFileFormComponentExtended extends MJFi
503
503
  }
504
504
  super.ngOnDestroy();
505
505
  }
506
- RestoreUserPreferences() {
506
+ restoreUserPreferences() {
507
507
  const saved = UserInfoEngine.Instance.GetSetting(MJFileFormComponentExtended_1.PREF_SHOW_DETAILS);
508
508
  if (saved !== undefined && saved !== null) {
509
509
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"file-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Files/file-form.component.ts","../../../../src/lib/custom/Files/file-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, OnChanges, SimpleChanges, inject, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { MJFileEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { GraphQLDataProvider, gql } from '@memberjunction/graphql-dataprovider';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJFileFormComponent } from '../../generated/Entities/MJFile/mjfile.form.component';\nimport { z } from 'zod';\n\nconst CreateMediaAccessTokenMutation = gql`\n mutation CreateMediaAccessToken($fileId: String!) {\n CreateMediaAccessToken(fileId: $fileId) {\n Success\n Token\n Url\n MimeType\n ErrorMessage\n }\n }\n`;\n\nconst CreateMediaAccessTokenMutationSchema = z.object({\n CreateMediaAccessToken: z.object({\n Success: z.boolean(),\n Token: z.string().optional().nullable(),\n Url: z.string().optional().nullable(),\n MimeType: z.string().optional().nullable(),\n ErrorMessage: z.string().optional().nullable(),\n }),\n});\n\nconst DownloadUrlMutation = gql`\n mutation DownloadUrl($fileId: String!) {\n DownloadUrl(fileId: $fileId) {\n Success\n ErrorMessage\n Url\n }\n }\n`;\n\nconst DownloadUrlMutationSchema = z.object({\n DownloadUrl: z.object({\n Success: z.boolean(),\n ErrorMessage: z.string().optional().nullable(),\n Url: z.string().optional().nullable(),\n }),\n});\n\n@RegisterClass(BaseFormComponent, 'MJ: Files', 100)\n@Component({\n standalone: false,\n selector: 'mj-file-form-extended',\n templateUrl: './file-form.component.html',\n styleUrls: ['../../../shared/form-styles.css', './file-form.component.css'],\n})\nexport class MJFileFormComponentExtended extends MJFileFormComponent implements OnInit, OnDestroy, OnChanges {\n public override record!: MJFileEntity;\n\n public static readonly PREF_SHOW_DETAILS = 'mj.fileViewer.showDetailsSidebar';\n\n public IsLoadingMedia: boolean = true;\n public IsMediaLoaded: boolean = false;\n public MediaUrl: string | null = null;\n public SafeMediaUrl: SafeResourceUrl | null = null;\n public TextContent: string | null = null;\n public ShowDetailsSidebar: boolean = true;\n public ViewStandardForm: boolean = false;\n\n private sanitizer = inject(DomSanitizer);\n private notifications = inject(MJNotificationService);\n private mediaTimer?: ReturnType<typeof setTimeout>;\n\n public override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n this.RestoreUserPreferences();\n if (this.record?.ID) {\n void this.LoadMediaPreview();\n }\n }\n\n public async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes['record'] && this.record?.ID) {\n void this.LoadMediaPreview();\n }\n }\n\n public override ngOnDestroy(): void {\n if (this.mediaTimer) {\n clearTimeout(this.mediaTimer);\n }\n super.ngOnDestroy();\n }\n\n private RestoreUserPreferences(): void {\n const saved = UserInfoEngine.Instance.GetSetting(MJFileFormComponentExtended.PREF_SHOW_DETAILS);\n if (saved !== undefined && saved !== null) {\n try {\n this.ShowDetailsSidebar = JSON.parse(saved) === true;\n } catch {\n this.ShowDetailsSidebar = saved === 'true';\n }\n }\n }\n\n /**\n * Loads the media streaming URL for inline viewing.\n */\n public async LoadMediaPreview(): Promise<void> {\n if (!this.record?.ID) return;\n\n this.IsLoadingMedia = true;\n this.IsMediaLoaded = false;\n this.MediaUrl = null;\n this.SafeMediaUrl = null;\n this.TextContent = null;\n this.cdr.markForCheck();\n\n try {\n // 1. Try CreateMediaAccessToken (supports Range headers and browser tab titles)\n const mediaResult = await GraphQLDataProvider.ExecuteGQL(\n CreateMediaAccessTokenMutation,\n { fileId: this.record.ID }\n );\n const parsedMedia = CreateMediaAccessTokenMutationSchema.safeParse(mediaResult);\n if (parsedMedia.success && parsedMedia.data.CreateMediaAccessToken.Success && parsedMedia.data.CreateMediaAccessToken.Url) {\n this.MediaUrl = parsedMedia.data.CreateMediaAccessToken.Url;\n this.SafeMediaUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.MediaUrl);\n } else {\n // 2. Fallback to DownloadUrl\n const downloadResult = await GraphQLDataProvider.ExecuteGQL(\n DownloadUrlMutation,\n { fileId: this.record.ID }\n );\n const parsedDownload = DownloadUrlMutationSchema.safeParse(downloadResult);\n if (parsedDownload.success && parsedDownload.data.DownloadUrl.Success && parsedDownload.data.DownloadUrl.Url) {\n this.MediaUrl = parsedDownload.data.DownloadUrl.Url;\n this.SafeMediaUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.MediaUrl);\n }\n }\n\n if (this.MediaUrl) {\n const mediaType = this.MediaType;\n if (mediaType === 'text') {\n try {\n const resp = await window.fetch(this.MediaUrl);\n if (resp.ok) {\n this.TextContent = await resp.text();\n }\n } catch {\n // fallback\n }\n this.IsMediaLoaded = true;\n }\n } else {\n this.IsMediaLoaded = true;\n }\n } catch (err) {\n console.error('[MJFileFormComponentExtended] Error loading media preview:', err);\n this.IsMediaLoaded = true;\n } finally {\n this.IsLoadingMedia = false;\n this.cdr.markForCheck();\n }\n }\n\n public OnMediaElementLoaded(): void {\n if (this.mediaTimer) clearTimeout(this.mediaTimer);\n this.mediaTimer = setTimeout(() => {\n this.IsMediaLoaded = true;\n this.cdr.markForCheck();\n }, 350);\n }\n\n /**\n * Determines media type category based on MIME type or file extension.\n */\n public get MediaType(): 'image' | 'pdf' | 'video' | 'audio' | 'text' | 'other' {\n const mime = (this.record?.ContentType || '').toLowerCase();\n const name = (this.record?.Name || '').toLowerCase();\n\n if (mime.startsWith('image/') || /\\.(png|jpe?g|gif|webp|svg|ico|bmp|avif)$/.test(name)) return 'image';\n if (mime === 'application/pdf' || name.endsWith('.pdf')) return 'pdf';\n if (mime.startsWith('video/') || /\\.(mp4|webm|ogg|mov|mkv|avi)$/.test(name)) return 'video';\n if (mime.startsWith('audio/') || /\\.(mp3|wav|ogg|aac|m4a|flac)$/.test(name)) return 'audio';\n if (\n mime.startsWith('text/') ||\n mime.includes('json') ||\n mime.includes('xml') ||\n mime.includes('javascript') ||\n /\\.(txt|md|csv|json|xml|yaml|yml|js|ts|html|css|sql|sh|log)$/.test(name)\n ) {\n return 'text';\n }\n return 'other';\n }\n\n public get FileIconClass(): string {\n switch (this.MediaType) {\n case 'image': return 'fa-solid fa-file-image mj-file-color-image';\n case 'pdf': return 'fa-solid fa-file-pdf mj-file-color-pdf';\n case 'video': return 'fa-solid fa-file-video mj-file-color-video';\n case 'audio': return 'fa-solid fa-file-audio mj-file-color-audio';\n case 'text': return 'fa-solid fa-file-lines mj-file-color-text';\n default: return 'fa-solid fa-file mj-file-color-generic';\n }\n }\n\n public FormatFileSize(bytes: number | null | undefined): string {\n if (bytes == null || isNaN(bytes) || bytes <= 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const idx = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);\n const val = bytes / Math.pow(1024, idx);\n return `${val.toFixed(idx === 0 ? 0 : 1)} ${units[idx]}`;\n }\n\n public OpenInExternalTab(): void {\n if (this.MediaUrl) {\n window.open(this.MediaUrl, '_blank', 'noopener,noreferrer');\n } else {\n this.notifications.CreateSimpleNotification('File URL not ready', 'warning');\n }\n }\n\n public ToggleDetailsSidebar(): void {\n this.ShowDetailsSidebar = !this.ShowDetailsSidebar;\n UserInfoEngine.Instance.SetSettingDebounced(\n MJFileFormComponentExtended.PREF_SHOW_DETAILS,\n JSON.stringify(this.ShowDetailsSidebar)\n );\n }\n\n public ToggleViewMode(): void {\n this.ViewStandardForm = !this.ViewStandardForm;\n }\n}\n","@if (!ViewStandardForm) {\n <div class=\"mj-file-viewer-container\">\n <!-- Top Action & Info Header -->\n <header class=\"mj-file-viewer-header\">\n <div class=\"mj-file-viewer-header-left\">\n <div class=\"mj-file-viewer-icon-box\">\n <i [class]=\"FileIconClass\"></i>\n </div>\n <div class=\"mj-file-viewer-title-group\">\n <h1 class=\"mj-file-viewer-title\" [title]=\"record.Name\">{{ record.Name }}</h1>\n <div class=\"mj-file-viewer-badges\">\n <span class=\"mj-file-badge mj-file-badge--type\">{{ record.ContentType || 'Document' }}</span>\n <span class=\"mj-file-badge mj-file-badge--size\">{{ FormatFileSize(record.ContentLength) }}</span>\n @if (record.Status) {\n <span class=\"mj-file-badge mj-file-badge--status\">{{ record.Status }}</span>\n }\n </div>\n </div>\n </div>\n\n <div class=\"mj-file-viewer-header-right\">\n @if (MediaUrl) {\n <button type=\"button\" mjButton variant=\"secondary\" size=\"sm\" (click)=\"OpenInExternalTab()\" title=\"Open file in new browser tab\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n <span>Open in New Tab</span>\n </button>\n }\n <button type=\"button\" mjButton variant=\"secondary\" size=\"sm\" (click)=\"ToggleDetailsSidebar()\" [title]=\"ShowDetailsSidebar ? 'Hide Details' : 'Show Details'\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>{{ ShowDetailsSidebar ? 'Hide Details' : 'Details' }}</span>\n </button>\n @if (UserCanEdit) {\n <button type=\"button\" mjButton variant=\"tertiary\" size=\"sm\" (click)=\"ToggleViewMode()\" title=\"Switch to full record editor\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n <span>Edit Record</span>\n </button>\n }\n </div>\n </header>\n\n <!-- Body / Split Content Area -->\n <div class=\"mj-file-viewer-body\">\n <!-- Media Stage -->\n <main class=\"mj-file-viewer-stage\">\n @if (IsLoadingMedia || !IsMediaLoaded) {\n <div class=\"mj-file-viewer-loading-overlay\">\n <mj-loading [text]=\"'Loading ' + (record.Name || 'file') + '...'\"></mj-loading>\n </div>\n }\n\n @switch (MediaType) {\n @case ('image') {\n @if (MediaUrl) {\n <div class=\"mj-file-media-image-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <img [src]=\"MediaUrl\" [alt]=\"record.Name\" (load)=\"OnMediaElementLoaded()\" (error)=\"OnMediaElementLoaded()\" />\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-image mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>Image preview could not be loaded.</p>\n </div>\n }\n }\n @case ('pdf') {\n @if (SafeMediaUrl) {\n <div class=\"mj-file-media-frame-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <iframe [src]=\"SafeMediaUrl\" title=\"Document Preview\" (load)=\"OnMediaElementLoaded()\"></iframe>\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-pdf mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>PDF preview could not be loaded.</p>\n </div>\n }\n }\n @case ('video') {\n @if (MediaUrl) {\n <div class=\"mj-file-media-video-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <video controls autoplay [src]=\"MediaUrl\" (loadeddata)=\"OnMediaElementLoaded()\" (error)=\"OnMediaElementLoaded()\"></video>\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-video mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>Video preview could not be loaded.</p>\n </div>\n }\n }\n @case ('audio') {\n @if (MediaUrl) {\n <div class=\"mj-file-media-audio-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <div class=\"mj-file-audio-visual-icon\"><i class=\"fa-solid fa-headphones\"></i></div>\n <audio controls [src]=\"MediaUrl\" (loadeddata)=\"OnMediaElementLoaded()\" (error)=\"OnMediaElementLoaded()\"></audio>\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-audio mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>Audio preview could not be loaded.</p>\n </div>\n }\n }\n @case ('text') {\n <div class=\"mj-file-media-text-box\">\n <pre><code>{{ TextContent || 'Loading text content...' }}</code></pre>\n </div>\n }\n @default {\n <div class=\"mj-file-viewer-fallback\">\n <i [class]=\"FileIconClass\" class=\"mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p class=\"mj-file-fallback-meta\">{{ record.ContentType || 'Document' }} &bull; {{ FormatFileSize(record.ContentLength) }}</p>\n <p class=\"mj-file-fallback-desc\">{{ record.Description || 'Preview is not available for this file type.' }}</p>\n @if (MediaUrl) {\n <button type=\"button\" mjButton variant=\"primary\" (click)=\"OpenInExternalTab()\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n <span>Open in Browser</span>\n </button>\n }\n </div>\n }\n }\n </main>\n\n <!-- Details & Linked Records Sidebar -->\n @if (ShowDetailsSidebar) {\n <aside class=\"mj-file-viewer-sidebar\">\n <div class=\"mj-file-sidebar-header\">\n <h3>File Details & Links</h3>\n <button type=\"button\" class=\"mj-file-sidebar-close\" (click)=\"ToggleDetailsSidebar()\" title=\"Collapse Sidebar\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"mj-file-sidebar-content\">\n <!-- Metadata Cards -->\n <div class=\"mj-file-sidebar-card\">\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">File Name:</span>\n <span class=\"mj-file-meta-val font-semibold\">{{ record.Name }}</span>\n </div>\n @if (record.Description) {\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Description:</span>\n <span class=\"mj-file-meta-val\">{{ record.Description }}</span>\n </div>\n }\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">MIME Type:</span>\n <span class=\"mj-file-meta-val font-mono\">{{ record.ContentType || 'Unknown' }}</span>\n </div>\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Size:</span>\n <span class=\"mj-file-meta-val\">{{ FormatFileSize(record.ContentLength) }}</span>\n </div>\n @if (record.Status) {\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Status:</span>\n <span class=\"mj-file-meta-val\">{{ record.Status }}</span>\n </div>\n }\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Created:</span>\n <span class=\"mj-file-meta-val\">{{ record.CreatedAt | date:'short' }}</span>\n </div>\n </div>\n\n <!-- Linked Records -->\n <div class=\"mj-file-sidebar-section\">\n <h4 class=\"mj-file-sidebar-section-title\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Linked Records</span>\n </h4>\n <div class=\"mj-file-relationship-wrapper\">\n <mj-relationship-view \n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: File Entity Record Links', 'FileID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: File Entity Record Links', 'FileID')\">\n </mj-relationship-view>\n </div>\n </div>\n </div>\n </aside>\n }\n </div>\n </div>\n} @else {\n <div class=\"mj-file-standard-form-wrapper\">\n <div class=\"mj-file-mode-switch-bar\">\n <button type=\"button\" mjButton variant=\"secondary\" size=\"sm\" (click)=\"ToggleViewMode()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n <span>Return to File Preview</span>\n </button>\n </div>\n\n <mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- File Basics Section -->\n <mj-collapsible-panel\n SectionKey=\"fileBasics\"\n SectionName=\"File Basics\"\n Icon=\"fa fa-file\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Description\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Classification & Status Section -->\n <mj-collapsible-panel\n SectionKey=\"classificationStatus\"\n SectionName=\"Classification & Status\"\n Icon=\"fa fa-tags\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CategoryID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Status\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Storage Details Section -->\n <mj-collapsible-panel\n SectionKey=\"storageDetails\"\n SectionName=\"Storage Details\"\n Icon=\"fa fa-database\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ProviderID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ProviderKey\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentType\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentLength\"\n Type=\"numeric\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Linked Records Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFileEntityRecordLinks\"\n SectionName=\"File Entity Record Links\"\n Icon=\"fa fa-link\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-relationship-view \n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: File Entity Record Links','FileID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: File Entity Record Links','FileID')\">\n </mj-relationship-view>\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n </mj-record-form-container>\n </div>\n}\n"]}
1
+ {"version":3,"file":"file-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Files/file-form.component.ts","../../../../src/lib/custom/Files/file-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, OnChanges, SimpleChanges, inject, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { MJFileEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { GraphQLDataProvider, gql } from '@memberjunction/graphql-dataprovider';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJFileFormComponent } from '../../generated/Entities/MJFile/mjfile.form.component';\nimport { z } from 'zod';\n\nconst CreateMediaAccessTokenMutation = gql`\n mutation CreateMediaAccessToken($fileId: String!) {\n CreateMediaAccessToken(fileId: $fileId) {\n Success\n Token\n Url\n MimeType\n ErrorMessage\n }\n }\n`;\n\nconst CreateMediaAccessTokenMutationSchema = z.object({\n CreateMediaAccessToken: z.object({\n Success: z.boolean(),\n Token: z.string().optional().nullable(),\n Url: z.string().optional().nullable(),\n MimeType: z.string().optional().nullable(),\n ErrorMessage: z.string().optional().nullable(),\n }),\n});\n\nconst DownloadUrlMutation = gql`\n mutation DownloadUrl($fileId: String!) {\n DownloadUrl(fileId: $fileId) {\n Success\n ErrorMessage\n Url\n }\n }\n`;\n\nconst DownloadUrlMutationSchema = z.object({\n DownloadUrl: z.object({\n Success: z.boolean(),\n ErrorMessage: z.string().optional().nullable(),\n Url: z.string().optional().nullable(),\n }),\n});\n\n@RegisterClass(BaseFormComponent, 'MJ: Files', 100)\n@Component({\n standalone: false,\n selector: 'mj-file-form-extended',\n templateUrl: './file-form.component.html',\n styleUrls: ['../../../shared/form-styles.css', './file-form.component.css'],\n})\nexport class MJFileFormComponentExtended extends MJFileFormComponent implements OnInit, OnDestroy, OnChanges {\n public override record!: MJFileEntity;\n\n public static readonly PREF_SHOW_DETAILS = 'mj.fileViewer.showDetailsSidebar';\n\n public IsLoadingMedia: boolean = true;\n public IsMediaLoaded: boolean = false;\n public MediaUrl: string | null = null;\n public SafeMediaUrl: SafeResourceUrl | null = null;\n public TextContent: string | null = null;\n public ShowDetailsSidebar: boolean = true;\n public ViewStandardForm: boolean = false;\n\n private sanitizer = inject(DomSanitizer);\n private notifications = inject(MJNotificationService);\n private mediaTimer?: ReturnType<typeof setTimeout>;\n\n public override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n this.restoreUserPreferences();\n if (this.record?.ID) {\n void this.LoadMediaPreview();\n }\n }\n\n public async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes['record'] && this.record?.ID) {\n void this.LoadMediaPreview();\n }\n }\n\n public override ngOnDestroy(): void {\n if (this.mediaTimer) {\n clearTimeout(this.mediaTimer);\n }\n super.ngOnDestroy();\n }\n\n private restoreUserPreferences(): void {\n const saved = UserInfoEngine.Instance.GetSetting(MJFileFormComponentExtended.PREF_SHOW_DETAILS);\n if (saved !== undefined && saved !== null) {\n try {\n this.ShowDetailsSidebar = JSON.parse(saved) === true;\n } catch {\n this.ShowDetailsSidebar = saved === 'true';\n }\n }\n }\n\n /**\n * Loads the media streaming URL for inline viewing.\n */\n public async LoadMediaPreview(): Promise<void> {\n if (!this.record?.ID) return;\n\n this.IsLoadingMedia = true;\n this.IsMediaLoaded = false;\n this.MediaUrl = null;\n this.SafeMediaUrl = null;\n this.TextContent = null;\n this.cdr.markForCheck();\n\n try {\n // 1. Try CreateMediaAccessToken (supports Range headers and browser tab titles)\n const mediaResult = await GraphQLDataProvider.ExecuteGQL(\n CreateMediaAccessTokenMutation,\n { fileId: this.record.ID }\n );\n const parsedMedia = CreateMediaAccessTokenMutationSchema.safeParse(mediaResult);\n if (parsedMedia.success && parsedMedia.data.CreateMediaAccessToken.Success && parsedMedia.data.CreateMediaAccessToken.Url) {\n this.MediaUrl = parsedMedia.data.CreateMediaAccessToken.Url;\n this.SafeMediaUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.MediaUrl);\n } else {\n // 2. Fallback to DownloadUrl\n const downloadResult = await GraphQLDataProvider.ExecuteGQL(\n DownloadUrlMutation,\n { fileId: this.record.ID }\n );\n const parsedDownload = DownloadUrlMutationSchema.safeParse(downloadResult);\n if (parsedDownload.success && parsedDownload.data.DownloadUrl.Success && parsedDownload.data.DownloadUrl.Url) {\n this.MediaUrl = parsedDownload.data.DownloadUrl.Url;\n this.SafeMediaUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.MediaUrl);\n }\n }\n\n if (this.MediaUrl) {\n const mediaType = this.MediaType;\n if (mediaType === 'text') {\n try {\n const resp = await window.fetch(this.MediaUrl);\n if (resp.ok) {\n this.TextContent = await resp.text();\n }\n } catch {\n // fallback\n }\n this.IsMediaLoaded = true;\n }\n } else {\n this.IsMediaLoaded = true;\n }\n } catch (err) {\n console.error('[MJFileFormComponentExtended] Error loading media preview:', err);\n this.IsMediaLoaded = true;\n } finally {\n this.IsLoadingMedia = false;\n this.cdr.markForCheck();\n }\n }\n\n public OnMediaElementLoaded(): void {\n if (this.mediaTimer) clearTimeout(this.mediaTimer);\n this.mediaTimer = setTimeout(() => {\n this.IsMediaLoaded = true;\n this.cdr.markForCheck();\n }, 350);\n }\n\n /**\n * Determines media type category based on MIME type or file extension.\n */\n public get MediaType(): 'image' | 'pdf' | 'video' | 'audio' | 'text' | 'other' {\n const mime = (this.record?.ContentType || '').toLowerCase();\n const name = (this.record?.Name || '').toLowerCase();\n\n if (mime.startsWith('image/') || /\\.(png|jpe?g|gif|webp|svg|ico|bmp|avif)$/.test(name)) return 'image';\n if (mime === 'application/pdf' || name.endsWith('.pdf')) return 'pdf';\n if (mime.startsWith('video/') || /\\.(mp4|webm|ogg|mov|mkv|avi)$/.test(name)) return 'video';\n if (mime.startsWith('audio/') || /\\.(mp3|wav|ogg|aac|m4a|flac)$/.test(name)) return 'audio';\n if (\n mime.startsWith('text/') ||\n mime.includes('json') ||\n mime.includes('xml') ||\n mime.includes('javascript') ||\n /\\.(txt|md|csv|json|xml|yaml|yml|js|ts|html|css|sql|sh|log)$/.test(name)\n ) {\n return 'text';\n }\n return 'other';\n }\n\n public get FileIconClass(): string {\n switch (this.MediaType) {\n case 'image': return 'fa-solid fa-file-image mj-file-color-image';\n case 'pdf': return 'fa-solid fa-file-pdf mj-file-color-pdf';\n case 'video': return 'fa-solid fa-file-video mj-file-color-video';\n case 'audio': return 'fa-solid fa-file-audio mj-file-color-audio';\n case 'text': return 'fa-solid fa-file-lines mj-file-color-text';\n default: return 'fa-solid fa-file mj-file-color-generic';\n }\n }\n\n public FormatFileSize(bytes: number | null | undefined): string {\n if (bytes == null || isNaN(bytes) || bytes <= 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const idx = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);\n const val = bytes / Math.pow(1024, idx);\n return `${val.toFixed(idx === 0 ? 0 : 1)} ${units[idx]}`;\n }\n\n public OpenInExternalTab(): void {\n if (this.MediaUrl) {\n window.open(this.MediaUrl, '_blank', 'noopener,noreferrer');\n } else {\n this.notifications.CreateSimpleNotification('File URL not ready', 'warning');\n }\n }\n\n public ToggleDetailsSidebar(): void {\n this.ShowDetailsSidebar = !this.ShowDetailsSidebar;\n UserInfoEngine.Instance.SetSettingDebounced(\n MJFileFormComponentExtended.PREF_SHOW_DETAILS,\n JSON.stringify(this.ShowDetailsSidebar)\n );\n }\n\n public ToggleViewMode(): void {\n this.ViewStandardForm = !this.ViewStandardForm;\n }\n}\n","@if (!ViewStandardForm) {\n <div class=\"mj-file-viewer-container\">\n <!-- Top Action & Info Header -->\n <header class=\"mj-file-viewer-header\">\n <div class=\"mj-file-viewer-header-left\">\n <div class=\"mj-file-viewer-icon-box\">\n <i [class]=\"FileIconClass\"></i>\n </div>\n <div class=\"mj-file-viewer-title-group\">\n <h1 class=\"mj-file-viewer-title\" [title]=\"record.Name\">{{ record.Name }}</h1>\n <div class=\"mj-file-viewer-badges\">\n <span class=\"mj-file-badge mj-file-badge--type\">{{ record.ContentType || 'Document' }}</span>\n <span class=\"mj-file-badge mj-file-badge--size\">{{ FormatFileSize(record.ContentLength) }}</span>\n @if (record.Status) {\n <span class=\"mj-file-badge mj-file-badge--status\">{{ record.Status }}</span>\n }\n </div>\n </div>\n </div>\n\n <div class=\"mj-file-viewer-header-right\">\n @if (MediaUrl) {\n <button type=\"button\" mjButton variant=\"secondary\" size=\"sm\" (click)=\"OpenInExternalTab()\" title=\"Open file in new browser tab\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n <span>Open in New Tab</span>\n </button>\n }\n <button type=\"button\" mjButton variant=\"secondary\" size=\"sm\" (click)=\"ToggleDetailsSidebar()\" [title]=\"ShowDetailsSidebar ? 'Hide Details' : 'Show Details'\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>{{ ShowDetailsSidebar ? 'Hide Details' : 'Details' }}</span>\n </button>\n @if (UserCanEdit) {\n <button type=\"button\" mjButton variant=\"tertiary\" size=\"sm\" (click)=\"ToggleViewMode()\" title=\"Switch to full record editor\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n <span>Edit Record</span>\n </button>\n }\n </div>\n </header>\n\n <!-- Body / Split Content Area -->\n <div class=\"mj-file-viewer-body\">\n <!-- Media Stage -->\n <main class=\"mj-file-viewer-stage\">\n @if (IsLoadingMedia || !IsMediaLoaded) {\n <div class=\"mj-file-viewer-loading-overlay\">\n <mj-loading [text]=\"'Loading ' + (record.Name || 'file') + '...'\"></mj-loading>\n </div>\n }\n\n @switch (MediaType) {\n @case ('image') {\n @if (MediaUrl) {\n <div class=\"mj-file-media-image-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <img [src]=\"MediaUrl\" [alt]=\"record.Name\" (load)=\"OnMediaElementLoaded()\" (error)=\"OnMediaElementLoaded()\" />\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-image mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>Image preview could not be loaded.</p>\n </div>\n }\n }\n @case ('pdf') {\n @if (SafeMediaUrl) {\n <div class=\"mj-file-media-frame-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <iframe [src]=\"SafeMediaUrl\" title=\"Document Preview\" (load)=\"OnMediaElementLoaded()\"></iframe>\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-pdf mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>PDF preview could not be loaded.</p>\n </div>\n }\n }\n @case ('video') {\n @if (MediaUrl) {\n <div class=\"mj-file-media-video-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <video controls autoplay [src]=\"MediaUrl\" (loadeddata)=\"OnMediaElementLoaded()\" (error)=\"OnMediaElementLoaded()\"></video>\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-video mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>Video preview could not be loaded.</p>\n </div>\n }\n }\n @case ('audio') {\n @if (MediaUrl) {\n <div class=\"mj-file-media-audio-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <div class=\"mj-file-audio-visual-icon\"><i class=\"fa-solid fa-headphones\"></i></div>\n <audio controls [src]=\"MediaUrl\" (loadeddata)=\"OnMediaElementLoaded()\" (error)=\"OnMediaElementLoaded()\"></audio>\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-audio mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>Audio preview could not be loaded.</p>\n </div>\n }\n }\n @case ('text') {\n <div class=\"mj-file-media-text-box\">\n <pre><code>{{ TextContent || 'Loading text content...' }}</code></pre>\n </div>\n }\n @default {\n <div class=\"mj-file-viewer-fallback\">\n <i [class]=\"FileIconClass\" class=\"mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p class=\"mj-file-fallback-meta\">{{ record.ContentType || 'Document' }} &bull; {{ FormatFileSize(record.ContentLength) }}</p>\n <p class=\"mj-file-fallback-desc\">{{ record.Description || 'Preview is not available for this file type.' }}</p>\n @if (MediaUrl) {\n <button type=\"button\" mjButton variant=\"primary\" (click)=\"OpenInExternalTab()\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n <span>Open in Browser</span>\n </button>\n }\n </div>\n }\n }\n </main>\n\n <!-- Details & Linked Records Sidebar -->\n @if (ShowDetailsSidebar) {\n <aside class=\"mj-file-viewer-sidebar\">\n <div class=\"mj-file-sidebar-header\">\n <h3>File Details & Links</h3>\n <button type=\"button\" class=\"mj-file-sidebar-close\" (click)=\"ToggleDetailsSidebar()\" title=\"Collapse Sidebar\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"mj-file-sidebar-content\">\n <!-- Metadata Cards -->\n <div class=\"mj-file-sidebar-card\">\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">File Name:</span>\n <span class=\"mj-file-meta-val font-semibold\">{{ record.Name }}</span>\n </div>\n @if (record.Description) {\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Description:</span>\n <span class=\"mj-file-meta-val\">{{ record.Description }}</span>\n </div>\n }\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">MIME Type:</span>\n <span class=\"mj-file-meta-val font-mono\">{{ record.ContentType || 'Unknown' }}</span>\n </div>\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Size:</span>\n <span class=\"mj-file-meta-val\">{{ FormatFileSize(record.ContentLength) }}</span>\n </div>\n @if (record.Status) {\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Status:</span>\n <span class=\"mj-file-meta-val\">{{ record.Status }}</span>\n </div>\n }\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Created:</span>\n <span class=\"mj-file-meta-val\">{{ record.CreatedAt | date:'short' }}</span>\n </div>\n </div>\n\n <!-- Linked Records -->\n <div class=\"mj-file-sidebar-section\">\n <h4 class=\"mj-file-sidebar-section-title\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Linked Records</span>\n </h4>\n <div class=\"mj-file-relationship-wrapper\">\n <mj-relationship-view \n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: File Entity Record Links', 'FileID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: File Entity Record Links', 'FileID')\">\n </mj-relationship-view>\n </div>\n </div>\n </div>\n </aside>\n }\n </div>\n </div>\n} @else {\n <div class=\"mj-file-standard-form-wrapper\">\n <div class=\"mj-file-mode-switch-bar\">\n <button type=\"button\" mjButton variant=\"secondary\" size=\"sm\" (click)=\"ToggleViewMode()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n <span>Return to File Preview</span>\n </button>\n </div>\n\n <mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- File Basics Section -->\n <mj-collapsible-panel\n SectionKey=\"fileBasics\"\n SectionName=\"File Basics\"\n Icon=\"fa fa-file\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Description\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Classification & Status Section -->\n <mj-collapsible-panel\n SectionKey=\"classificationStatus\"\n SectionName=\"Classification & Status\"\n Icon=\"fa fa-tags\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CategoryID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Status\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Storage Details Section -->\n <mj-collapsible-panel\n SectionKey=\"storageDetails\"\n SectionName=\"Storage Details\"\n Icon=\"fa fa-database\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ProviderID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ProviderKey\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentType\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field \n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentLength\"\n Type=\"numeric\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Linked Records Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFileEntityRecordLinks\"\n SectionName=\"File Entity Record Links\"\n Icon=\"fa fa-link\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-relationship-view \n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: File Entity Record Links','FileID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: File Entity Record Links','FileID')\">\n </mj-relationship-view>\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n </mj-record-form-container>\n </div>\n}\n"]}