@memberjunction/ng-core-entity-forms 6.2.0-edge.2 → 6.2.0-edge.4

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 (279) hide show
  1. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +9 -5
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +4 -0
  5. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts.map +1 -1
  6. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +67 -36
  7. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
  8. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +5 -0
  9. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  10. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +13 -9
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  12. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +1 -0
  14. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  15. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
  16. package/dist/lib/custom/Companies/company-header.panel.js +9 -5
  17. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
  18. package/dist/lib/custom/Companies/company-overview.panel.d.ts +4 -0
  19. package/dist/lib/custom/Companies/company-overview.panel.d.ts.map +1 -1
  20. package/dist/lib/custom/Companies/company-overview.panel.js +68 -37
  21. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
  22. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
  23. package/dist/lib/custom/Conversations/conversation-header.panel.js +9 -5
  24. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
  25. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +25 -4
  26. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts.map +1 -1
  27. package/dist/lib/custom/Conversations/conversation-overview.panel.js +212 -90
  28. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  29. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
  30. package/dist/lib/custom/Employees/employee-header.panel.js +9 -5
  31. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
  32. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +4 -0
  33. package/dist/lib/custom/Employees/employee-overview.panel.d.ts.map +1 -1
  34. package/dist/lib/custom/Employees/employee-overview.panel.js +68 -37
  35. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
  36. package/dist/lib/custom/Entities/entity-form.component.d.ts +8 -0
  37. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  38. package/dist/lib/custom/Entities/entity-form.component.js +19 -4
  39. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  40. package/dist/lib/custom/Files/file-form.component.d.ts +5 -5
  41. package/dist/lib/custom/Files/file-form.component.d.ts.map +1 -1
  42. package/dist/lib/custom/Files/file-form.component.js +227 -157
  43. package/dist/lib/custom/Files/file-form.component.js.map +1 -1
  44. package/dist/lib/custom/Files/file-form.logic.d.ts +24 -0
  45. package/dist/lib/custom/Files/file-form.logic.d.ts.map +1 -0
  46. package/dist/lib/custom/Files/file-form.logic.js +57 -0
  47. package/dist/lib/custom/Files/file-form.logic.js.map +1 -0
  48. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.d.ts.map +1 -1
  49. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js +60 -45
  50. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js.map +1 -1
  51. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  52. package/dist/lib/custom/Lists/list-form.component.js +4 -2
  53. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  54. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  55. package/dist/lib/custom/Queries/query-form.component.js +3 -2
  56. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  57. package/dist/lib/custom/Rubrics/rubric-form.component.js +1 -1
  58. package/dist/lib/custom/Rubrics/rubric-form.component.js.map +1 -1
  59. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts.map +1 -1
  60. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +1 -0
  61. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  62. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  63. package/dist/lib/custom/Templates/templates-form.component.js +3 -2
  64. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  65. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  66. package/dist/lib/custom/Tests/test-form.component.js +1 -0
  67. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  68. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Tests/test-run-form.component.js +1 -0
  70. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  71. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  72. package/dist/lib/custom/Tests/test-suite-form.component.js +1 -0
  73. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  74. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Tests/test-suite-run-form.component.js +1 -0
  76. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  77. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
  78. package/dist/lib/custom/Users/user-header.panel.js +9 -5
  79. package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
  80. package/dist/lib/custom/Users/user-overview.panel.d.ts +4 -0
  81. package/dist/lib/custom/Users/user-overview.panel.d.ts.map +1 -1
  82. package/dist/lib/custom/Users/user-overview.panel.js +64 -33
  83. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  84. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +34 -0
  85. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -0
  86. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +33 -0
  87. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -0
  88. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +3 -0
  89. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  90. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +261 -242
  91. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  92. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  93. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +1 -0
  94. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  95. package/dist/lib/custom/custom-forms.module.d.ts +35 -34
  96. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  97. package/dist/lib/custom/custom-forms.module.js +6 -2
  98. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  99. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  100. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +98 -44
  101. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.d.ts.map +1 -1
  103. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.js +5 -9
  104. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.d.ts.map +1 -1
  106. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js +15 -18
  107. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.js +5 -9
  110. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +27 -9
  113. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js +17 -15
  115. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js.map +1 -1
  116. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.d.ts.map +1 -1
  117. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js +25 -7
  118. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js.map +1 -1
  119. package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js +12 -14
  120. package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.d.ts.map +1 -1
  122. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.js +5 -9
  123. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.d.ts.map +1 -1
  125. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.js +5 -9
  126. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.js.map +1 -1
  127. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.d.ts.map +1 -1
  128. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +26 -8
  129. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  130. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.d.ts.map +1 -1
  131. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.js +4 -7
  132. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.d.ts.map +1 -1
  134. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.js +4 -7
  135. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  137. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +49 -13
  138. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  139. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.d.ts.map +1 -1
  140. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.js +5 -9
  141. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts +10 -0
  143. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts.map +1 -0
  144. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js +111 -0
  145. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js.map +1 -0
  146. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  147. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +73 -75
  148. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  149. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  150. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +34 -16
  151. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  152. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.js +5 -9
  154. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +169 -97
  157. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.d.ts.map +1 -1
  159. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.js +8 -11
  160. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.d.ts.map +1 -1
  162. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js +15 -18
  163. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.d.ts +10 -0
  165. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.d.ts.map +1 -0
  166. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.js +148 -0
  167. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.js.map +1 -0
  168. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.d.ts.map +1 -1
  169. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +53 -56
  170. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  171. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.d.ts +10 -0
  172. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.d.ts.map +1 -0
  173. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.js +161 -0
  174. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.js.map +1 -0
  175. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.d.ts +10 -0
  176. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.d.ts.map +1 -0
  177. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.js +78 -0
  178. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.js.map +1 -0
  179. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.d.ts +10 -0
  180. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.d.ts.map +1 -0
  181. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.js +68 -0
  182. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.js.map +1 -0
  183. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.d.ts +10 -0
  184. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.d.ts.map +1 -0
  185. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.js +100 -0
  186. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.js.map +1 -0
  187. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.d.ts +10 -0
  188. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.d.ts.map +1 -0
  189. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.js +119 -0
  190. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.js.map +1 -0
  191. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.d.ts +10 -0
  192. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.d.ts.map +1 -0
  193. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.js +92 -0
  194. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.js.map +1 -0
  195. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.d.ts +10 -0
  196. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.d.ts.map +1 -0
  197. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.js +87 -0
  198. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.js.map +1 -0
  199. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.d.ts +10 -0
  200. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.d.ts.map +1 -0
  201. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.js +129 -0
  202. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.js.map +1 -0
  203. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.d.ts.map +1 -1
  204. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.js +5 -9
  205. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.js.map +1 -1
  206. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.d.ts.map +1 -1
  207. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.js +8 -11
  208. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.js.map +1 -1
  209. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.d.ts.map +1 -1
  210. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +36 -40
  211. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  212. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  213. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +39 -21
  214. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  215. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.d.ts.map +1 -1
  216. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +45 -48
  217. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  218. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts +10 -0
  219. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts.map +1 -0
  220. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js +106 -0
  221. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js.map +1 -0
  222. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.d.ts.map +1 -1
  223. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js +15 -18
  224. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js.map +1 -1
  225. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  226. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +822 -676
  227. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  228. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.d.ts.map +1 -1
  229. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +24 -6
  230. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
  231. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.d.ts.map +1 -1
  232. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.js +5 -9
  233. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.js.map +1 -1
  234. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.d.ts +10 -0
  235. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.d.ts.map +1 -0
  236. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.js +64 -0
  237. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.js.map +1 -0
  238. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.d.ts +10 -0
  239. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.d.ts.map +1 -0
  240. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.js +94 -0
  241. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.js.map +1 -0
  242. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.d.ts +10 -0
  243. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.d.ts.map +1 -0
  244. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.js +91 -0
  245. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.js.map +1 -0
  246. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.d.ts +10 -0
  247. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.d.ts.map +1 -0
  248. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.js +105 -0
  249. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.js.map +1 -0
  250. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.d.ts +10 -0
  251. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.d.ts.map +1 -0
  252. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.js +129 -0
  253. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.js.map +1 -0
  254. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.d.ts +10 -0
  255. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.d.ts.map +1 -0
  256. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.js +85 -0
  257. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.js.map +1 -0
  258. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.d.ts.map +1 -1
  259. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js +17 -20
  260. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js.map +1 -1
  261. package/dist/lib/generated/generated-forms.module.d.ts +448 -431
  262. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  263. package/dist/lib/generated/generated-forms.module.js +63 -12
  264. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  265. package/dist/lib/panels/ai-agents/agent-realtime.panel.d.ts +7 -1
  266. package/dist/lib/panels/ai-agents/agent-realtime.panel.d.ts.map +1 -1
  267. package/dist/lib/panels/ai-agents/agent-realtime.panel.js +89 -43
  268. package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -1
  269. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +3 -3
  270. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
  271. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +5 -5
  272. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
  273. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +4 -4
  274. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
  275. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js +3 -3
  276. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js.map +1 -1
  277. package/dist/lib/panels/model-predictions/model-prediction.panel.js +4 -4
  278. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  279. package/package.json +48 -47
@@ -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 { ClassifyFileMediaType, DescribeFileSize, MediaLoadsByElement, type FileMediaType } from './file-form.logic';\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 } else if (!MediaLoadsByElement(mediaType)) {\n // No element will fire `load` for this type: the fallback card is the view, so it is loaded now.\n // Without this the overlay stayed on \"Loading…\" for every .zip and the like (MJ#4947).\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 /** The viewer's category for the file, from its MIME type or its name (`ClassifyFileMediaType`). */\n public get MediaType(): FileMediaType {\n return ClassifyFileMediaType(this.record?.ContentType, this.record?.Name);\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 case 'docx': return 'fa-solid fa-file-word mj-file-color-word';\n case 'xlsx': return 'fa-solid fa-file-excel mj-file-color-excel';\n default: return 'fa-solid fa-file mj-file-color-generic';\n }\n }\n\n /** The size badge's text, or null when no size is recorded: `MJ: Files` has no length column today. */\n public get FileSizeLabel(): string | null {\n const length = (this.record as unknown as { ContentLength?: number | null }).ContentLength;\n return DescribeFileSize(length);\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 @if (FileSizeLabel; as size) {\n <span class=\"mj-file-badge mj-file-badge--size\">{{ size }}</span>\n }\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 @case ('docx') {\n @if (MediaUrl) {\n <div class=\"mj-file-media-office-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <mj-docx-preview [Url]=\"MediaUrl\" (Loaded)=\"OnMediaElementLoaded()\" (Failed)=\"OnMediaElementLoaded()\"></mj-docx-preview>\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-word mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>Document preview could not be loaded.</p>\n </div>\n }\n }\n @case ('xlsx') {\n @if (MediaUrl) {\n <div class=\"mj-file-media-office-box\" [class.mj-file-media--hidden]=\"!IsMediaLoaded\">\n <mj-xlsx-preview [Url]=\"MediaUrl\" (Loaded)=\"OnMediaElementLoaded()\" (Failed)=\"OnMediaElementLoaded()\"></mj-xlsx-preview>\n </div>\n } @else {\n <div class=\"mj-file-viewer-fallback\">\n <i class=\"fa-solid fa-file-excel mj-file-fallback-icon\"></i>\n <h3>{{ record.Name }}</h3>\n <p>Workbook preview could not be loaded.</p>\n </div>\n }\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' }}@if (FileSizeLabel; as size) { &bull; {{ size }}}</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 @if (FileSizeLabel; as size) {\n <div class=\"mj-file-meta-row\">\n <span class=\"mj-file-meta-label\">Size:</span>\n <span class=\"mj-file-meta-val\">{{ size }}</span>\n </div>\n }\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.__mj_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-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"]}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Pure decisions for the Files form's viewer, kept out of the component so they can be tested on the node preset.
3
+ */
4
+ /** The viewer's media categories, from the file's MIME type or extension. */
5
+ export type FileMediaType = 'image' | 'pdf' | 'video' | 'audio' | 'text' | 'docx' | 'xlsx' | 'other';
6
+ /**
7
+ * Whether the viewer learns that a file has loaded from the element that shows it. Images, PDFs (in an iframe), video
8
+ * and audio fire `load`; the Word and Excel previews report `loaded` or `failed` themselves. Text is read by fetch, and
9
+ * any other type has no element at all: the viewer shows a fallback card for it, so the form has to mark it loaded
10
+ * itself once the URL is known, or the loading overlay never clears.
11
+ */
12
+ export declare function MediaLoadsByElement(mediaType: FileMediaType): boolean;
13
+ /**
14
+ * The viewer's category for a file, from its MIME type or its name. The name matters: the server stores anything it
15
+ * cannot stream inline as `application/octet-stream`, so a Word or Excel file is only recognisable by its extension.
16
+ * Legacy `.doc` is not `docx`: mammoth reads OOXML only, so it keeps the fallback card.
17
+ */
18
+ export declare function ClassifyFileMediaType(contentType: string | null | undefined, fileName: string | null | undefined): FileMediaType;
19
+ /**
20
+ * The size badge's text, or null when the size is not known. `MJ: Files` records no length today, so the badge is left
21
+ * out rather than reading "0 B" for every file.
22
+ */
23
+ export declare function DescribeFileSize(bytes: number | null | undefined): string | null;
24
+ //# sourceMappingURL=file-form.logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-form.logic.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Files/file-form.logic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAErG;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAErE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,CA0BhI;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAMhF"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Pure decisions for the Files form's viewer, kept out of the component so they can be tested on the node preset.
3
+ */
4
+ /**
5
+ * Whether the viewer learns that a file has loaded from the element that shows it. Images, PDFs (in an iframe), video
6
+ * and audio fire `load`; the Word and Excel previews report `loaded` or `failed` themselves. Text is read by fetch, and
7
+ * any other type has no element at all: the viewer shows a fallback card for it, so the form has to mark it loaded
8
+ * itself once the URL is known, or the loading overlay never clears.
9
+ */
10
+ export function MediaLoadsByElement(mediaType) {
11
+ return mediaType === 'image' || mediaType === 'pdf' || mediaType === 'video' || mediaType === 'audio' || mediaType === 'docx' || mediaType === 'xlsx';
12
+ }
13
+ /**
14
+ * The viewer's category for a file, from its MIME type or its name. The name matters: the server stores anything it
15
+ * cannot stream inline as `application/octet-stream`, so a Word or Excel file is only recognisable by its extension.
16
+ * Legacy `.doc` is not `docx`: mammoth reads OOXML only, so it keeps the fallback card.
17
+ */
18
+ export function ClassifyFileMediaType(contentType, fileName) {
19
+ const mime = (contentType || '').toLowerCase().split(';')[0].trim();
20
+ const name = (fileName || '').toLowerCase();
21
+ if (mime.startsWith('image/') || /\.(png|jpe?g|gif|webp|svg|ico|bmp|avif)$/.test(name))
22
+ return 'image';
23
+ if (mime === 'application/pdf' || name.endsWith('.pdf'))
24
+ return 'pdf';
25
+ if (mime.startsWith('video/') || /\.(mp4|webm|ogg|mov|mkv|avi)$/.test(name))
26
+ return 'video';
27
+ if (mime.startsWith('audio/') || /\.(mp3|wav|aac|m4a|flac)$/.test(name))
28
+ return 'audio';
29
+ if (mime === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || name.endsWith('.docx'))
30
+ return 'docx';
31
+ if (mime === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||
32
+ mime === 'application/vnd.ms-excel' ||
33
+ /\.(xlsx|xlsm|xls)$/.test(name)) {
34
+ return 'xlsx';
35
+ }
36
+ if (mime.startsWith('text/') ||
37
+ mime.includes('json') ||
38
+ mime.includes('xml') ||
39
+ mime.includes('javascript') ||
40
+ /\.(txt|md|csv|json|xml|yaml|yml|js|ts|html|css|sql|sh|log)$/.test(name)) {
41
+ return 'text';
42
+ }
43
+ return 'other';
44
+ }
45
+ /**
46
+ * The size badge's text, or null when the size is not known. `MJ: Files` records no length today, so the badge is left
47
+ * out rather than reading "0 B" for every file.
48
+ */
49
+ export function DescribeFileSize(bytes) {
50
+ if (bytes == null || typeof bytes !== 'number' || !Number.isFinite(bytes) || bytes < 0)
51
+ return null;
52
+ const units = ['B', 'KB', 'MB', 'GB', 'TB'];
53
+ const idx = bytes === 0 ? 0 : Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
54
+ const val = bytes / Math.pow(1024, idx);
55
+ return `${val.toFixed(idx === 0 ? 0 : 1)} ${units[idx]}`;
56
+ }
57
+ //# sourceMappingURL=file-form.logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-form.logic.js","sourceRoot":"","sources":["../../../../src/lib/custom/Files/file-form.logic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAwB;IAC1D,OAAO,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,CAAC;AACxJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAsC,EAAE,QAAmC;IAC/G,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACvG,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5F,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACxF,IAAI,IAAI,KAAK,yEAAyE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IAChI,IACE,IAAI,KAAK,mEAAmE;QAC5E,IAAI,KAAK,0BAA0B;QACnC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IACE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3B,6DAA6D,CAAC,IAAI,CAAC,IAAI,CAAC,EACxE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpG,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvG,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3D,CAAC","sourcesContent":["/**\n * Pure decisions for the Files form's viewer, kept out of the component so they can be tested on the node preset.\n */\n\n/** The viewer's media categories, from the file's MIME type or extension. */\nexport type FileMediaType = 'image' | 'pdf' | 'video' | 'audio' | 'text' | 'docx' | 'xlsx' | 'other';\n\n/**\n * Whether the viewer learns that a file has loaded from the element that shows it. Images, PDFs (in an iframe), video\n * and audio fire `load`; the Word and Excel previews report `loaded` or `failed` themselves. Text is read by fetch, and\n * any other type has no element at all: the viewer shows a fallback card for it, so the form has to mark it loaded\n * itself once the URL is known, or the loading overlay never clears.\n */\nexport function MediaLoadsByElement(mediaType: FileMediaType): boolean {\n return mediaType === 'image' || mediaType === 'pdf' || mediaType === 'video' || mediaType === 'audio' || mediaType === 'docx' || mediaType === 'xlsx';\n}\n\n/**\n * The viewer's category for a file, from its MIME type or its name. The name matters: the server stores anything it\n * cannot stream inline as `application/octet-stream`, so a Word or Excel file is only recognisable by its extension.\n * Legacy `.doc` is not `docx`: mammoth reads OOXML only, so it keeps the fallback card.\n */\nexport function ClassifyFileMediaType(contentType: string | null | undefined, fileName: string | null | undefined): FileMediaType {\n const mime = (contentType || '').toLowerCase().split(';')[0].trim();\n const name = (fileName || '').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|aac|m4a|flac)$/.test(name)) return 'audio';\n if (mime === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || name.endsWith('.docx')) return 'docx';\n if (\n mime === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\n mime === 'application/vnd.ms-excel' ||\n /\\.(xlsx|xlsm|xls)$/.test(name)\n ) {\n return 'xlsx';\n }\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/**\n * The size badge's text, or null when the size is not known. `MJ: Files` records no length today, so the badge is left\n * out rather than reading \"0 B\" for every file.\n */\nexport function DescribeFileSize(bytes: number | null | undefined): string | null {\n if (bytes == null || typeof bytes !== 'number' || !Number.isFinite(bytes) || bytes < 0) return null;\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const idx = bytes === 0 ? 0 : 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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy-form-panels.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/HierarchyPanels/hierarchy-form-panels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hierarchy-form-panels.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/HierarchyPanels/hierarchy-form-panels.ts"],"names":[],"mappings":"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"}