@memberjunction/ng-dashboards 5.37.0 → 5.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/README.md +46 -7
  2. package/dist/AI/components/agents/agent-configuration.component.js +199 -198
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
  8. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  9. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
  10. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  11. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
  13. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  14. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
  15. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  16. package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
  17. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  18. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
  19. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  20. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
  21. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  22. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
  23. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  24. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
  25. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +89 -842
  27. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  28. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1353 -7683
  29. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  30. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
  31. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
  32. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
  33. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
  34. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
  35. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
  36. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
  37. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
  38. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
  39. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
  40. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
  41. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
  42. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +235 -0
  43. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
  44. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1735 -0
  45. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
  46. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
  47. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
  48. package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
  49. package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
  50. package/dist/AI/components/autotagging/shared/classify.format.d.ts +43 -0
  51. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
  52. package/dist/AI/components/autotagging/shared/classify.format.js +209 -0
  53. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
  54. package/dist/AI/components/autotagging/shared/classify.types.d.ts +276 -0
  55. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
  56. package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
  57. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
  58. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
  59. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
  60. package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
  61. package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
  62. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +40 -0
  63. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
  64. package/dist/AI/components/autotagging/tabs/history-tab.component.js +402 -0
  65. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
  66. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
  67. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
  68. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
  69. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
  70. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +122 -0
  71. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
  72. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +752 -0
  73. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
  74. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +166 -0
  75. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
  76. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1384 -0
  77. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
  78. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +70 -0
  79. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
  80. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +448 -0
  81. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
  82. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
  83. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
  84. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
  85. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
  86. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +47 -0
  87. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
  88. package/dist/AI/components/autotagging/tabs/types-tab.component.js +220 -0
  89. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
  90. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +293 -289
  91. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  92. package/dist/AI/components/models/model-management.component.js +209 -208
  93. package/dist/AI/components/models/model-management.component.js.map +1 -1
  94. package/dist/AI/components/prompts/prompt-management.component.js +130 -128
  95. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  96. package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
  97. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  98. package/dist/AI/components/system/system-configuration.component.js +17 -17
  99. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  100. package/dist/AI/components/tags/tags-resource.component.js +550 -532
  101. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  102. package/dist/AI/components/vectors/vector-management-resource.component.js +1 -1
  103. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  104. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  105. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  106. package/dist/AI/services/ai-instrumentation.service.js +14 -2
  107. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  108. package/dist/AI/services/cache-metrics.d.ts +50 -0
  109. package/dist/AI/services/cache-metrics.d.ts.map +1 -0
  110. package/dist/AI/services/cache-metrics.js +43 -0
  111. package/dist/AI/services/cache-metrics.js.map +1 -0
  112. package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
  113. package/dist/APIKeys/api-keys-resource.component.js +132 -131
  114. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  115. package/dist/Actions/components/actions-overview.component.js +141 -141
  116. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  117. package/dist/Actions/components/execution-monitoring.component.js +15 -15
  118. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
  120. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  121. package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
  122. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  123. package/dist/Admin/admin-data-schema.component.js +2 -2
  124. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  125. package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
  126. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  127. package/dist/Admin/admin-identity-access.component.js +2 -2
  128. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  129. package/dist/Admin/admin-monitoring.component.js +2 -2
  130. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  131. package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
  132. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  133. package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
  134. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  135. package/dist/Communication/communication-logs-resource.component.js +72 -50
  136. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  137. package/dist/Communication/communication-monitor-resource.component.js +103 -102
  138. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  139. package/dist/Communication/communication-providers-resource.component.js +52 -51
  140. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  141. package/dist/Communication/communication-runs-resource.component.js +39 -38
  142. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  143. package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
  144. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  145. package/dist/Communication/communication-templates-resource.component.js +92 -89
  146. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  147. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +73 -1
  148. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  149. package/dist/ComponentStudio/component-studio-dashboard.component.js +512 -127
  150. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  151. package/dist/ComponentStudio/component-studio-resource.component.d.ts +22 -0
  152. package/dist/ComponentStudio/component-studio-resource.component.d.ts.map +1 -0
  153. package/dist/ComponentStudio/component-studio-resource.component.js +55 -0
  154. package/dist/ComponentStudio/component-studio-resource.component.js.map +1 -0
  155. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +104 -45
  156. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  157. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +234 -331
  158. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  159. package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.d.ts +54 -0
  160. package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.d.ts.map +1 -0
  161. package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.js +339 -0
  162. package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.js.map +1 -0
  163. package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.d.ts +65 -0
  164. package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.d.ts.map +1 -0
  165. package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.js +492 -0
  166. package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.js.map +1 -0
  167. package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.d.ts +88 -0
  168. package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.d.ts.map +1 -0
  169. package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.js +457 -0
  170. package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.js.map +1 -0
  171. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +106 -0
  172. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -0
  173. package/dist/ComponentStudio/components/form-override-dialog.component.js +478 -0
  174. package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -0
  175. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +54 -0
  176. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  177. package/dist/ComponentStudio/components/workspace/component-preview.component.js +361 -50
  178. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  179. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts +10 -0
  180. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
  181. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +114 -45
  182. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  183. package/dist/ComponentStudio/services/canvas-to-code.d.ts +32 -0
  184. package/dist/ComponentStudio/services/canvas-to-code.d.ts.map +1 -0
  185. package/dist/ComponentStudio/services/canvas-to-code.js +347 -0
  186. package/dist/ComponentStudio/services/canvas-to-code.js.map +1 -0
  187. package/dist/ComponentStudio/services/code-to-canvas.d.ts +32 -0
  188. package/dist/ComponentStudio/services/code-to-canvas.d.ts.map +1 -0
  189. package/dist/ComponentStudio/services/code-to-canvas.js +92 -0
  190. package/dist/ComponentStudio/services/code-to-canvas.js.map +1 -0
  191. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +29 -0
  192. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
  193. package/dist/ComponentStudio/services/component-studio-state.service.js +76 -0
  194. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
  195. package/dist/ComponentStudio/services/entity-form-override.service.d.ts +86 -0
  196. package/dist/ComponentStudio/services/entity-form-override.service.d.ts.map +1 -0
  197. package/dist/ComponentStudio/services/entity-form-override.service.js +246 -0
  198. package/dist/ComponentStudio/services/entity-form-override.service.js.map +1 -0
  199. package/dist/ComponentStudio/services/field-binding-scanner.d.ts +29 -0
  200. package/dist/ComponentStudio/services/field-binding-scanner.d.ts.map +1 -0
  201. package/dist/ComponentStudio/services/field-binding-scanner.js +110 -0
  202. package/dist/ComponentStudio/services/field-binding-scanner.js.map +1 -0
  203. package/dist/ComponentStudio/services/form-canvas-model.d.ts +56 -0
  204. package/dist/ComponentStudio/services/form-canvas-model.d.ts.map +1 -0
  205. package/dist/ComponentStudio/services/form-canvas-model.js +35 -0
  206. package/dist/ComponentStudio/services/form-canvas-model.js.map +1 -0
  207. package/dist/ComponentStudio/services/form-host-props-fixture.d.ts +10 -0
  208. package/dist/ComponentStudio/services/form-host-props-fixture.d.ts.map +1 -0
  209. package/dist/ComponentStudio/services/form-host-props-fixture.js +10 -0
  210. package/dist/ComponentStudio/services/form-host-props-fixture.js.map +1 -0
  211. package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
  212. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  213. package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
  214. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  215. package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
  216. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  217. package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
  218. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  219. package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
  220. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  221. package/dist/DataExplorer/data-explorer-dashboard.component.js +2 -2
  222. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  223. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
  224. package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
  225. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  226. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
  227. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  228. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
  229. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  230. package/dist/DevTools/app-state-inspector.component.js +18 -17
  231. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  232. package/dist/DevTools/class-registry.component.js +88 -85
  233. package/dist/DevTools/class-registry.component.js.map +1 -1
  234. package/dist/DevTools/event-monitor.component.js +155 -150
  235. package/dist/DevTools/event-monitor.component.js.map +1 -1
  236. package/dist/DevTools/graphql-console.component.js +245 -243
  237. package/dist/DevTools/graphql-console.component.js.map +1 -1
  238. package/dist/DevTools/layout-inspector.component.js +18 -17
  239. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  240. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
  241. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  242. package/dist/FormBuilder/form-builder-resource.component.d.ts +964 -0
  243. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -0
  244. package/dist/FormBuilder/form-builder-resource.component.js +4487 -0
  245. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -0
  246. package/dist/FormBuilder/form-builder-version-rail.helpers.d.ts +55 -0
  247. package/dist/FormBuilder/form-builder-version-rail.helpers.d.ts.map +1 -0
  248. package/dist/FormBuilder/form-builder-version-rail.helpers.js +73 -0
  249. package/dist/FormBuilder/form-builder-version-rail.helpers.js.map +1 -0
  250. package/dist/Home/home-application.d.ts +21 -1
  251. package/dist/Home/home-application.d.ts.map +1 -1
  252. package/dist/Home/home-application.js +60 -8
  253. package/dist/Home/home-application.js.map +1 -1
  254. package/dist/Home/home-dashboard.component.js +2 -2
  255. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  256. package/dist/Integration/components/activity/activity.component.js +236 -229
  257. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  258. package/dist/Integration/components/connections/connections.component.js +390 -389
  259. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  260. package/dist/Integration/components/overview/overview.component.js +2 -2
  261. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +2 -2
  262. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  263. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +45 -44
  264. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  265. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
  266. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  267. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
  268. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  269. package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
  270. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  271. package/dist/Lists/components/lists-browse-resource.component.js +525 -566
  272. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  273. package/dist/Lists/components/lists-categories-resource.component.js +135 -134
  274. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  275. package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
  276. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  277. package/dist/MCP/mcp-dashboard.component.js +443 -438
  278. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  279. package/dist/QueryBrowser/query-browser-resource.component.d.ts +14 -14
  280. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  281. package/dist/QueryBrowser/query-browser-resource.component.js +11 -10
  282. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  283. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  284. package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
  285. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  286. package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
  287. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  288. package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
  289. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  290. package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
  291. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  292. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
  293. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  294. package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
  295. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  296. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  297. package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
  298. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  299. package/dist/Testing/components/testing-explorer.component.js +436 -427
  300. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  301. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  302. package/dist/Testing/components/testing-runs.component.js +116 -115
  303. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  304. package/dist/Testing/testing-dashboard.component.js +6 -7
  305. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  306. package/dist/VersionHistory/components/labels-resource.component.js +173 -172
  307. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  308. package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
  309. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  310. package/dist/VersionHistory/components/restore-resource.component.js +116 -92
  311. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  312. package/dist/ai-dashboards.module.d.ts +47 -35
  313. package/dist/ai-dashboards.module.d.ts.map +1 -1
  314. package/dist/ai-dashboards.module.js +40 -1
  315. package/dist/ai-dashboards.module.js.map +1 -1
  316. package/dist/communication-dashboards.module.d.ts +1 -1
  317. package/dist/communication-dashboards.module.d.ts.map +1 -1
  318. package/dist/communication-dashboards.module.js +7 -1
  319. package/dist/communication-dashboards.module.js.map +1 -1
  320. package/dist/component-studio-dashboards.module.d.ts +34 -22
  321. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  322. package/dist/component-studio-dashboards.module.js +65 -9
  323. package/dist/component-studio-dashboards.module.js.map +1 -1
  324. package/dist/testing-dashboards.module.d.ts +4 -5
  325. package/dist/testing-dashboards.module.d.ts.map +1 -1
  326. package/dist/testing-dashboards.module.js +7 -5
  327. package/dist/testing-dashboards.module.js.map +1 -1
  328. package/package.json +55 -53
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run-preview.dialog.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.ts","../../../../../src/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Classify · Dry-run / disposition PREVIEW dialog.\n *\n * Honest, client-side, in-memory preview of how a source's EXISTING extracted\n * ContentItemTags would be dispositioned under its current taxonomy mode +\n * thresholds. This is NOT a fresh LLM run and NOTHING is persisted — it samples\n * up to N existing tags, resolves each against the cached taxonomy\n * (Tags / TagSynonyms) client-side, and replays the deterministic routing via the\n * pure `previewDispositions` helper.\n *\n * It is hosted by the Sources tab (which already hosts its own dialogs): data\n * DOWN via `[SourceCard]` / `[Show]`, intent UP via `(Closed)`. On open it loads\n * the sample itself (read-only RunView, `ResultType: 'simple'`).\n *\n * NOTE: the server also has a semantic/embedding match tier not reproducible\n * client-side, so borderline rows may resolve differently in a real run. The\n * template states this explicitly.\n */\nimport { Component, ChangeDetectorRef, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { RunView } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { TagEngineBase } from '@memberjunction/tag-engine-base';\nimport { KnowledgeHubMetadataEngine } from '@memberjunction/core-entities';\nimport { SourceCard, DryRunDispositionCount, DryRunEstimate } from '../shared/classify.types';\nimport {\n previewDispositions, DryRunInput, DryRunConfig, DryRunRow, ResolveResult, Disposition,\n} from '../shared/classify.dryrun';\n\n/** Default routing config when a source has no explicit Configuration blob. */\nconst DEFAULT_MODE: DryRunConfig['mode'] = 'auto-grow';\nconst DEFAULT_MATCH_THRESHOLD = 0.85;\n/** Illustrative per-item token estimate for the (non-binding) cost line. */\nconst EST_TOKENS_PER_ITEM = 840;\n/** Illustrative blended $/1K-token rate for the cost estimate. */\nconst EST_COST_PER_1K_TOKENS = 0.01;\n/** Max existing tags to sample for the preview. */\nconst SAMPLE_SIZE = 15;\n\n@Component({\n standalone: false,\n selector: 'classify-dry-run-preview',\n templateUrl: './dry-run-preview.dialog.component.html',\n styleUrls: ['./dry-run-preview.dialog.component.css'],\n})\nexport class ClassifyDryRunPreviewDialogComponent extends BaseAngularComponent {\n private cdr = inject(ChangeDetectorRef);\n\n /** Whether the dialog is visible. */\n private _show = false;\n @Input()\n set Show(value: boolean) {\n const opening = value && !this._show;\n this._show = value;\n if (opening && this._sourceCard) {\n void this.runPreview(this._sourceCard);\n }\n }\n get Show(): boolean {\n return this._show;\n }\n\n /** The source being previewed; supplied by the Sources tab when opening. */\n private _sourceCard: SourceCard | null = null;\n @Input()\n set SourceCard(value: SourceCard | null) {\n this._sourceCard = value;\n if (value && this._show) {\n void this.runPreview(value);\n }\n }\n get SourceCard(): SourceCard | null {\n return this._sourceCard;\n }\n\n /** Emitted when the user dismisses the dialog. */\n @Output() Closed = new EventEmitter<void>();\n\n // ── View state ──\n\n public Loading = false;\n public Rows: DryRunRow[] = [];\n public Counts: DryRunDispositionCount = { AutoApply: 0, RouteToInbox: 0, CreateNew: 0, Reject: 0 };\n public Estimate: DryRunEstimate = { ItemsSampled: 0, EstimatedTokens: 0, EstimatedCost: 0 };\n /** Effective config used for this preview (mirrored for the \"effective values\" line). */\n public EffectiveMode: DryRunConfig['mode'] = DEFAULT_MODE;\n public EffectiveMatchThreshold = DEFAULT_MATCH_THRESHOLD;\n public EffectiveSuggestThreshold = DEFAULT_MATCH_THRESHOLD - 0.05;\n /** True when the sampled source has no extracted tags yet. */\n public NoTagsSampled = false;\n\n public close(): void {\n this.Closed.emit();\n }\n\n /**\n * Load a sample of the source's existing extracted tags, resolve each against\n * the cached taxonomy, and produce the preview rows + summary. Read-only —\n * nothing is written.\n */\n private async runPreview(card: SourceCard): Promise<void> {\n this.Loading = true;\n this.Rows = [];\n this.NoTagsSampled = false;\n this.cdr.detectChanges();\n\n try {\n const p = this.ProviderToUse;\n await TagEngineBase.Instance.Config(false, p.CurrentUser, p);\n await KnowledgeHubMetadataEngine.Instance.Config(false, p.CurrentUser, p);\n\n const cfg = this.resolveSourceConfig(card.ID);\n this.EffectiveMode = cfg.mode;\n this.EffectiveMatchThreshold = cfg.matchThreshold;\n this.EffectiveSuggestThreshold = cfg.suggestThreshold;\n\n const inputs = await this.loadSampleTags(card.ID);\n if (inputs.length === 0) {\n this.NoTagsSampled = true;\n this.Estimate = { ItemsSampled: 0, EstimatedTokens: 0, EstimatedCost: 0 };\n return;\n }\n\n const resolve = this.buildResolver();\n this.Rows = previewDispositions(inputs, cfg, resolve);\n this.Counts = this.tally(this.Rows);\n this.Estimate = this.estimate(inputs.length);\n } catch (error) {\n console.error('[Classify] Dry-run preview error:', error);\n } finally {\n this.Loading = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Sample up to SAMPLE_SIZE existing ContentItemTags for the source. We first\n * pull a handful of the source's items, then their tags — the simplest path\n * that avoids depending on a direct source-level filter on ContentItemTags.\n */\n private async loadSampleTags(sourceID: string): Promise<DryRunInput[]> {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n const itemResult = await rv.RunView<{ ID: string }>({\n EntityName: 'MJ: Content Items',\n ExtraFilter: `ContentSourceID='${sourceID}'`,\n OrderBy: '__mj_UpdatedAt DESC',\n Fields: ['ID'],\n MaxRows: SAMPLE_SIZE,\n ResultType: 'simple',\n });\n if (!itemResult.Success || itemResult.Results.length === 0) return [];\n\n const itemIds = itemResult.Results.map(i => i.ID);\n const inClause = itemIds.map(id => `'${id}'`).join(',');\n\n const tagResult = await rv.RunView<{ Tag: string; TagID: string | null; Weight: number | null }>({\n EntityName: 'MJ: Content Item Tags',\n ExtraFilter: `ItemID IN (${inClause})`,\n Fields: ['Tag', 'TagID', 'Weight'],\n MaxRows: SAMPLE_SIZE,\n ResultType: 'simple',\n });\n if (!tagResult.Success) return [];\n\n return tagResult.Results\n .filter(t => !!t.Tag)\n .map(t => ({\n tag: t.Tag,\n resolvedTagId: t.TagID ?? null,\n weight: Number(t.Weight ?? 1),\n }));\n }\n\n /**\n * Read the source's effective taxonomy config from its ConfigurationObject,\n * falling back to documented runtime defaults. SuggestThreshold defaults to\n * matchThreshold − 0.05 (matches the server's runtime default).\n */\n private resolveSourceConfig(sourceID: string): DryRunConfig {\n const source = KnowledgeHubMetadataEngine.Instance.ContentSources.find(cs => UUIDsEqual(cs.ID, sourceID));\n const config = source?.ConfigurationObject ?? null;\n\n const mode = config?.TagTaxonomyMode ?? DEFAULT_MODE;\n const matchThreshold = config?.TagMatchThreshold ?? DEFAULT_MATCH_THRESHOLD;\n const suggestThreshold = config?.SuggestThreshold ?? matchThreshold - 0.05;\n\n return { mode, matchThreshold, suggestThreshold };\n }\n\n /**\n * Build the client-side resolver closure over the cached taxonomy.\n * tier 'synonym' if the tag matches a TagSynonym (case-insensitive),\n * 'exact' if it matches a Tag Name (case-insensitive), 'fuzzy' if a\n * normalized match (lowercase, strip plurals/hyphens) hits, else 'none'.\n */\n private buildResolver(): (tag: string) => ResolveResult {\n const engine = TagEngineBase.Instance;\n const activeTags = engine.Tags.filter(t => t.Status === 'Active');\n\n // synonym text (lower) → owning Tag\n const synonymMap = new Map<string, { id: string; name: string }>();\n const tagById = new Map<string, { id: string; name: string }>();\n for (const t of activeTags) {\n tagById.set(t.ID.toLowerCase(), { id: t.ID, name: t.Name });\n }\n for (const syn of engine.TagSynonyms) {\n // Only Active synonyms resolve — Pending (proposed, unapproved) and\n // Rejected ones are not live, matching the server-side resolver.\n if (syn.Status !== 'Active') continue;\n const owner = tagById.get((syn.TagID ?? '').toLowerCase());\n if (owner && syn.Synonym) {\n synonymMap.set(syn.Synonym.trim().toLowerCase(), owner);\n }\n }\n\n // exact name (lower) → Tag; normalized name (lower) → Tag (for fuzzy tier)\n const exactMap = new Map<string, { id: string; name: string }>();\n const normalizedMap = new Map<string, { id: string; name: string }>();\n for (const t of activeTags) {\n const entry = { id: t.ID, name: t.Name };\n exactMap.set(t.Name.trim().toLowerCase(), entry);\n normalizedMap.set(this.normalize(t.Name), entry);\n }\n\n return (tag: string): ResolveResult => {\n const lower = tag.trim().toLowerCase();\n\n const syn = synonymMap.get(lower);\n if (syn) return { tagId: syn.id, tagName: syn.name, score: 1.0, tier: 'synonym' };\n\n const exact = exactMap.get(lower);\n if (exact) return { tagId: exact.id, tagName: exact.name, score: 1.0, tier: 'exact' };\n\n const fuzzy = normalizedMap.get(this.normalize(tag));\n if (fuzzy) return { tagId: fuzzy.id, tagName: fuzzy.name, score: 0.8, tier: 'fuzzy' };\n\n return { tagId: null, tagName: null, score: null, tier: 'none' };\n };\n }\n\n /** Lowercase, strip hyphens/underscores/whitespace and a trailing plural 's'. */\n private normalize(value: string): string {\n let v = value.trim().toLowerCase().replace(/[-_\\s]+/g, '');\n if (v.endsWith('s') && v.length > 3) v = v.slice(0, -1);\n return v;\n }\n\n private tally(rows: DryRunRow[]): DryRunDispositionCount {\n const counts: DryRunDispositionCount = { AutoApply: 0, RouteToInbox: 0, CreateNew: 0, Reject: 0 };\n for (const r of rows) {\n switch (r.disposition) {\n case 'auto-apply': counts.AutoApply++; break;\n case 'route-to-inbox': counts.RouteToInbox++; break;\n case 'create-new': counts.CreateNew++; break;\n case 'reject': counts.Reject++; break;\n }\n }\n return counts;\n }\n\n private estimate(itemsSampled: number): DryRunEstimate {\n const tokens = itemsSampled * EST_TOKENS_PER_ITEM;\n const cost = (tokens / 1000) * EST_COST_PER_1K_TOKENS;\n return { ItemsSampled: itemsSampled, EstimatedTokens: tokens, EstimatedCost: cost };\n }\n\n // ── Template helpers ──\n\n /** Status-token-backed CSS class for a disposition pill. */\n public DispositionClass(d: Disposition): string {\n switch (d) {\n case 'auto-apply': return 'disp disp-apply';\n case 'route-to-inbox': return 'disp disp-inbox';\n case 'create-new': return 'disp disp-create';\n case 'reject': return 'disp disp-reject';\n }\n }\n\n /** Human label for a disposition pill. */\n public DispositionLabel(d: Disposition): string {\n switch (d) {\n case 'auto-apply': return 'AUTO-APPLY';\n case 'route-to-inbox': return '→ INBOX';\n case 'create-new': return this.EffectiveMode === 'free-flow' ? 'CREATE (free-flow)' : 'CREATE (auto-grow)';\n case 'reject': return 'REJECT';\n }\n }\n\n public FormatScore(score: number | null): string {\n return score == null ? '—' : score.toFixed(2);\n }\n\n public FormatTokens(tokens: number): string {\n return tokens.toLocaleString();\n }\n\n public FormatCost(cost: number): string {\n return `$${cost.toFixed(2)}`;\n }\n\n public ModeLabel(mode: DryRunConfig['mode']): string {\n switch (mode) {\n case 'constrained': return 'Constrained';\n case 'auto-grow': return 'Auto-grow';\n case 'free-flow': return 'Free-flow';\n }\n }\n}\n","<!-- ══════ DRY-RUN / DISPOSITION PREVIEW SLIDE-IN ══════ -->\n@if (Show) {\n <div class=\"at-slide-overlay\" (click)=\"close()\"></div>\n <div class=\"at-slide-panel dry-run-panel\">\n <div class=\"at-slide-header\">\n <h3><i class=\"fa-solid fa-flask\"></i> Dry-run preview</h3>\n <button class=\"at-slide-close\" aria-label=\"Close dry-run preview\" (click)=\"close()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n\n <div class=\"at-slide-body\">\n <!-- Source + intent line -->\n @if (SourceCard) {\n <div class=\"dry-source-line\">\n <i [class]=\"SourceCard.Icon\"></i>\n <span class=\"dry-source-name\">{{ SourceCard.Name }}</span>\n </div>\n }\n\n <!-- \"nothing persisted\" banner -->\n <div class=\"dry-banner\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>\n Preview of how this source's sampled tags resolve under the current\n <b>mode &amp; thresholds</b> — <b>no LLM call, nothing persisted</b>.\n </span>\n </div>\n\n <!-- Effective config -->\n <div class=\"dry-effective\">\n <span class=\"pill purple\"><i class=\"fa-solid fa-flask\"></i> PREVIEW</span>\n <span class=\"dry-eff-item\">Mode <b>{{ ModeLabel(EffectiveMode) }}</b></span>\n <span class=\"dry-eff-item\">Match <b>{{ FormatScore(EffectiveMatchThreshold) }}</b></span>\n <span class=\"dry-eff-item\">Suggest <b>{{ FormatScore(EffectiveSuggestThreshold) }}</b></span>\n </div>\n\n @if (Loading) {\n <mj-loading text=\"Sampling existing tags…\"></mj-loading>\n } @else if (NoTagsSampled) {\n <div class=\"dry-empty\">\n <i class=\"fa-solid fa-tags\"></i>\n <p>No extracted tags found for this source yet. Run the pipeline first, then preview how its tags would be dispositioned.</p>\n </div>\n } @else {\n <!-- Estimate line (illustrative) -->\n <div class=\"dry-estimate\">\n <i class=\"fa-solid fa-calculator\"></i>\n <span>\n {{ Estimate.ItemsSampled }} sampled tag{{ Estimate.ItemsSampled === 1 ? '' : 's' }} ·\n est. {{ FormatTokens(Estimate.EstimatedTokens) }} tokens ·\n ~{{ FormatCost(Estimate.EstimatedCost) }}\n <span class=\"dry-est-note\">(rough estimate)</span>\n </span>\n </div>\n\n <!-- Summary counts -->\n <div class=\"dry-summary\">\n <span class=\"disp disp-apply\">{{ Counts.AutoApply }} auto-apply</span>\n <span class=\"disp disp-inbox\">{{ Counts.RouteToInbox }} → inbox</span>\n <span class=\"disp disp-create\">{{ Counts.CreateNew }} create</span>\n @if (Counts.Reject > 0) {\n <span class=\"disp disp-reject\">{{ Counts.Reject }} reject</span>\n }\n </div>\n\n <!-- Disposition table -->\n <table class=\"dry-table\">\n <thead>\n <tr>\n <th>Tag</th>\n <th>Matched</th>\n <th class=\"dry-col-score\">Score</th>\n <th>What would happen</th>\n </tr>\n </thead>\n <tbody>\n @for (row of Rows; track $index) {\n <tr>\n <td class=\"dry-cell-tag\">{{ row.tag }}</td>\n <td class=\"dry-cell-matched\">{{ row.matchedTag ?? '—' }}</td>\n <td class=\"dry-col-score dry-mono\">{{ FormatScore(row.score) }}</td>\n <td>\n <span [class]=\"DispositionClass(row.disposition)\" [title]=\"row.reason\">\n {{ DispositionLabel(row.disposition) }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"dry-disclaimer\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n A real run also uses a semantic / embedding match tier not reproducible here,\n so borderline rows may resolve differently.\n </div>\n }\n\n <!-- Footer -->\n <div class=\"dry-footer\">\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"close()\">Close</button>\n </div>\n </div>\n </div>\n}\n"]}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @fileoverview Classify · Content Item Detail slide-in dialog.
3
+ *
4
+ * Presentational slide-in panel showing a content item's details, tags, text,
5
+ * metadata, and actions. Opened from multiple tabs, so it is rendered by the
6
+ * HOST (the data orchestrator), which builds the `ContentItemDetail` and toggles
7
+ * visibility. This component is purely presentational: data DOWN via `[Item]` /
8
+ * `[Show]`, intents UP via `(Closed)` / `(OpenRecordRequested)`.
9
+ */
10
+ import { EventEmitter } from '@angular/core';
11
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
12
+ import { ContentItemDetail } from '../shared/classify.types';
13
+ import { formatWeight, tagFontSize } from '../shared/classify.format';
14
+ import * as i0 from "@angular/core";
15
+ export declare class ClassifyItemDetailDialogComponent extends BaseAngularComponent {
16
+ /** The content item to display, built and supplied by the host orchestrator. */
17
+ Item: ContentItemDetail | null;
18
+ /** Whether the slide-in is visible. */
19
+ Show: boolean;
20
+ /** Emitted when the user dismisses the panel (overlay/close button). */
21
+ Closed: EventEmitter<void>;
22
+ /** Emitted when the user requests to open the underlying record. */
23
+ OpenRecordRequested: EventEmitter<ContentItemDetail>;
24
+ readonly FormatWeight: typeof formatWeight;
25
+ readonly TagFontSize: typeof tagFontSize;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<ClassifyItemDetailDialogComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<ClassifyItemDetailDialogComponent, "classify-item-detail-dialog", never, { "Item": { "alias": "Item"; "required": false; }; "Show": { "alias": "Show"; "required": false; }; }, { "Closed": "Closed"; "OpenRecordRequested": "OpenRecordRequested"; }, never, never, false, never>;
28
+ }
29
+ //# sourceMappingURL=item-detail.dialog.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-detail.dialog.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/autotagging/dialogs/item-detail.dialog.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;;AAEtE,qBAMa,iCAAkC,SAAQ,oBAAoB;IACvE,gFAAgF;IACvE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAC/C,uCAAuC;IAC9B,IAAI,UAAS;IAEtB,wEAAwE;IAC9D,MAAM,qBAA4B;IAC5C,oEAAoE;IAC1D,mBAAmB,kCAAyC;IAGtE,SAAgB,YAAY,sBAAgB;IAC5C,SAAgB,WAAW,qBAAe;yCAbjC,iCAAiC;2CAAjC,iCAAiC;CAc7C"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * @fileoverview Classify · Content Item Detail slide-in dialog.
3
+ *
4
+ * Presentational slide-in panel showing a content item's details, tags, text,
5
+ * metadata, and actions. Opened from multiple tabs, so it is rendered by the
6
+ * HOST (the data orchestrator), which builds the `ContentItemDetail` and toggles
7
+ * visibility. This component is purely presentational: data DOWN via `[Item]` /
8
+ * `[Show]`, intents UP via `(Closed)` / `(OpenRecordRequested)`.
9
+ */
10
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
11
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
12
+ import { formatWeight, tagFontSize } from '../shared/classify.format';
13
+ import * as i0 from "@angular/core";
14
+ const _forTrack0 = ($index, $item) => $item.Tag;
15
+ function ClassifyItemDetailDialogComponent_Conditional_0_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
16
+ i0.ɵɵelementStart(0, "span", 23);
17
+ i0.ɵɵelement(1, "i", 24);
18
+ i0.ɵɵtext(2);
19
+ i0.ɵɵelementEnd();
20
+ } if (rf & 2) {
21
+ const ctx_r1 = i0.ɵɵnextContext(3);
22
+ i0.ɵɵadvance(2);
23
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.Item.FileTypeName);
24
+ } }
25
+ function ClassifyItemDetailDialogComponent_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementStart(0, "span", 22);
27
+ i0.ɵɵtext(1);
28
+ i0.ɵɵelementEnd();
29
+ i0.ɵɵconditionalCreate(2, ClassifyItemDetailDialogComponent_Conditional_0_Conditional_15_Conditional_2_Template, 3, 1, "span", 23);
30
+ } if (rf & 2) {
31
+ const ctx_r1 = i0.ɵɵnextContext(2);
32
+ i0.ɵɵadvance();
33
+ i0.ɵɵtextInterpolate(ctx_r1.Item.ContentTypeName);
34
+ i0.ɵɵadvance();
35
+ i0.ɵɵconditional(ctx_r1.Item.FileTypeName ? 2 : -1);
36
+ } }
37
+ function ClassifyItemDetailDialogComponent_Conditional_0_Conditional_16_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵelementStart(0, "div", 11)(1, "div", 12);
39
+ i0.ɵɵtext(2, "URL");
40
+ i0.ɵɵelementEnd();
41
+ i0.ɵɵelementStart(3, "a", 25);
42
+ i0.ɵɵtext(4);
43
+ i0.ɵɵelement(5, "i", 26);
44
+ i0.ɵɵelementEnd()();
45
+ } if (rf & 2) {
46
+ const ctx_r1 = i0.ɵɵnextContext(2);
47
+ i0.ɵɵadvance(3);
48
+ i0.ɵɵproperty("href", ctx_r1.Item.URL, i0.ɵɵsanitizeUrl);
49
+ i0.ɵɵadvance();
50
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.Item.URL, " ");
51
+ } }
52
+ function ClassifyItemDetailDialogComponent_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
53
+ i0.ɵɵelementStart(0, "div", 11)(1, "div", 12);
54
+ i0.ɵɵtext(2, "Content Preview");
55
+ i0.ɵɵelementEnd();
56
+ i0.ɵɵelementStart(3, "div", 27);
57
+ i0.ɵɵtext(4);
58
+ i0.ɵɵelementEnd()();
59
+ } if (rf & 2) {
60
+ const ctx_r1 = i0.ɵɵnextContext(2);
61
+ i0.ɵɵadvance(4);
62
+ i0.ɵɵtextInterpolate(ctx_r1.Item.TextContent);
63
+ } }
64
+ function ClassifyItemDetailDialogComponent_Conditional_0_Conditional_18_For_5_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵelementStart(0, "span", 30);
66
+ i0.ɵɵtext(1);
67
+ i0.ɵɵelementStart(2, "span", 31);
68
+ i0.ɵɵtext(3);
69
+ i0.ɵɵelementEnd()();
70
+ } if (rf & 2) {
71
+ const wt_r3 = ctx.$implicit;
72
+ const ctx_r1 = i0.ɵɵnextContext(3);
73
+ i0.ɵɵstyleProp("font-size", ctx_r1.TagFontSize(wt_r3.Weight));
74
+ i0.ɵɵadvance();
75
+ i0.ɵɵtextInterpolate1(" ", wt_r3.Tag, " ");
76
+ i0.ɵɵadvance(2);
77
+ i0.ɵɵtextInterpolate(ctx_r1.FormatWeight(wt_r3.Weight));
78
+ } }
79
+ function ClassifyItemDetailDialogComponent_Conditional_0_Conditional_18_Template(rf, ctx) { if (rf & 1) {
80
+ i0.ɵɵelementStart(0, "div", 11)(1, "div", 12);
81
+ i0.ɵɵtext(2);
82
+ i0.ɵɵelementEnd();
83
+ i0.ɵɵelementStart(3, "div", 28);
84
+ i0.ɵɵrepeaterCreate(4, ClassifyItemDetailDialogComponent_Conditional_0_Conditional_18_For_5_Template, 4, 4, "span", 29, _forTrack0);
85
+ i0.ɵɵelementEnd()();
86
+ } if (rf & 2) {
87
+ const ctx_r1 = i0.ɵɵnextContext(2);
88
+ i0.ɵɵadvance(2);
89
+ i0.ɵɵtextInterpolate1("Tags (", ctx_r1.Item.Tags.length, ")");
90
+ i0.ɵɵadvance(2);
91
+ i0.ɵɵrepeater(ctx_r1.Item.Tags);
92
+ } }
93
+ function ClassifyItemDetailDialogComponent_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
94
+ i0.ɵɵelementStart(0, "div", 14)(1, "span", 15);
95
+ i0.ɵɵtext(2, "Checksum");
96
+ i0.ɵɵelementEnd();
97
+ i0.ɵɵelementStart(3, "span", 32);
98
+ i0.ɵɵtext(4);
99
+ i0.ɵɵelementEnd()();
100
+ } if (rf & 2) {
101
+ const ctx_r1 = i0.ɵɵnextContext(2);
102
+ i0.ɵɵadvance(4);
103
+ i0.ɵɵtextInterpolate(ctx_r1.Item.Checksum);
104
+ } }
105
+ function ClassifyItemDetailDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
106
+ const _r1 = i0.ɵɵgetCurrentView();
107
+ i0.ɵɵelementStart(0, "div", 0);
108
+ i0.ɵɵlistener("click", function ClassifyItemDetailDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Closed.emit()); });
109
+ i0.ɵɵelementEnd();
110
+ i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "h3");
111
+ i0.ɵɵelement(4, "i", 3);
112
+ i0.ɵɵtext(5, " Content Item");
113
+ i0.ɵɵelementEnd();
114
+ i0.ɵɵelementStart(6, "button", 4);
115
+ i0.ɵɵlistener("click", function ClassifyItemDetailDialogComponent_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Closed.emit()); });
116
+ i0.ɵɵelement(7, "i", 5);
117
+ i0.ɵɵelementEnd()();
118
+ i0.ɵɵelementStart(8, "div", 6)(9, "div", 7)(10, "h4", 8);
119
+ i0.ɵɵtext(11);
120
+ i0.ɵɵelementEnd();
121
+ i0.ɵɵelementStart(12, "div", 9)(13, "span", 10);
122
+ i0.ɵɵtext(14);
123
+ i0.ɵɵelementEnd();
124
+ i0.ɵɵconditionalCreate(15, ClassifyItemDetailDialogComponent_Conditional_0_Conditional_15_Template, 3, 2);
125
+ i0.ɵɵelementEnd()();
126
+ i0.ɵɵconditionalCreate(16, ClassifyItemDetailDialogComponent_Conditional_0_Conditional_16_Template, 6, 2, "div", 11);
127
+ i0.ɵɵconditionalCreate(17, ClassifyItemDetailDialogComponent_Conditional_0_Conditional_17_Template, 5, 1, "div", 11);
128
+ i0.ɵɵconditionalCreate(18, ClassifyItemDetailDialogComponent_Conditional_0_Conditional_18_Template, 6, 1, "div", 11);
129
+ i0.ɵɵelementStart(19, "div", 11)(20, "div", 12);
130
+ i0.ɵɵtext(21, "Metadata");
131
+ i0.ɵɵelementEnd();
132
+ i0.ɵɵelementStart(22, "div", 13);
133
+ i0.ɵɵconditionalCreate(23, ClassifyItemDetailDialogComponent_Conditional_0_Conditional_23_Template, 5, 1, "div", 14);
134
+ i0.ɵɵelementStart(24, "div", 14)(25, "span", 15);
135
+ i0.ɵɵtext(26, "Created");
136
+ i0.ɵɵelementEnd();
137
+ i0.ɵɵelementStart(27, "span", 16);
138
+ i0.ɵɵtext(28);
139
+ i0.ɵɵelementEnd()();
140
+ i0.ɵɵelementStart(29, "div", 14)(30, "span", 15);
141
+ i0.ɵɵtext(31, "Updated");
142
+ i0.ɵɵelementEnd();
143
+ i0.ɵɵelementStart(32, "span", 16);
144
+ i0.ɵɵtext(33);
145
+ i0.ɵɵelementEnd()()()();
146
+ i0.ɵɵelementStart(34, "div", 17)(35, "button", 18);
147
+ i0.ɵɵlistener("click", function ClassifyItemDetailDialogComponent_Conditional_0_Template_button_click_35_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenRecordRequested.emit(ctx_r1.Item)); });
148
+ i0.ɵɵelement(36, "i", 19);
149
+ i0.ɵɵtext(37, " Open Record ");
150
+ i0.ɵɵelementEnd();
151
+ i0.ɵɵelementStart(38, "button", 20);
152
+ i0.ɵɵelement(39, "i", 21);
153
+ i0.ɵɵtext(40, " See Similar Items ");
154
+ i0.ɵɵelementEnd()()()();
155
+ } if (rf & 2) {
156
+ const ctx_r1 = i0.ɵɵnextContext();
157
+ i0.ɵɵadvance(11);
158
+ i0.ɵɵtextInterpolate(ctx_r1.Item.Name);
159
+ i0.ɵɵadvance(3);
160
+ i0.ɵɵtextInterpolate(ctx_r1.Item.SourceName);
161
+ i0.ɵɵadvance();
162
+ i0.ɵɵconditional(ctx_r1.Item.RequiresContentType ? 15 : -1);
163
+ i0.ɵɵadvance();
164
+ i0.ɵɵconditional(ctx_r1.Item.URL ? 16 : -1);
165
+ i0.ɵɵadvance();
166
+ i0.ɵɵconditional(ctx_r1.Item.TextContent ? 17 : -1);
167
+ i0.ɵɵadvance();
168
+ i0.ɵɵconditional(ctx_r1.Item.Tags.length > 0 ? 18 : -1);
169
+ i0.ɵɵadvance(5);
170
+ i0.ɵɵconditional(ctx_r1.Item.Checksum ? 23 : -1);
171
+ i0.ɵɵadvance(5);
172
+ i0.ɵɵtextInterpolate(ctx_r1.Item.CreatedAt);
173
+ i0.ɵɵadvance(5);
174
+ i0.ɵɵtextInterpolate(ctx_r1.Item.UpdatedAt);
175
+ } }
176
+ export class ClassifyItemDetailDialogComponent extends BaseAngularComponent {
177
+ /** The content item to display, built and supplied by the host orchestrator. */
178
+ Item = null;
179
+ /** Whether the slide-in is visible. */
180
+ Show = false;
181
+ /** Emitted when the user dismisses the panel (overlay/close button). */
182
+ Closed = new EventEmitter();
183
+ /** Emitted when the user requests to open the underlying record. */
184
+ OpenRecordRequested = new EventEmitter();
185
+ // Template-facing formatters
186
+ FormatWeight = formatWeight;
187
+ TagFontSize = tagFontSize;
188
+ static ɵfac = /*@__PURE__*/ (() => { let ɵClassifyItemDetailDialogComponent_BaseFactory; return function ClassifyItemDetailDialogComponent_Factory(__ngFactoryType__) { return (ɵClassifyItemDetailDialogComponent_BaseFactory || (ɵClassifyItemDetailDialogComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ClassifyItemDetailDialogComponent)))(__ngFactoryType__ || ClassifyItemDetailDialogComponent); }; })();
189
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClassifyItemDetailDialogComponent, selectors: [["classify-item-detail-dialog"]], inputs: { Item: "Item", Show: "Show" }, outputs: { Closed: "Closed", OpenRecordRequested: "OpenRecordRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[1, "at-slide-overlay", 3, "click"], [1, "at-slide-panel", "at-detail-panel"], [1, "at-slide-header"], [1, "fa-solid", "fa-file-lines"], ["aria-label", "Close item detail", 1, "at-slide-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "at-slide-body"], [1, "at-detail-item-header"], [1, "at-detail-item-name"], [1, "at-detail-badges"], [1, "at-detail-badge", "at-detail-badge-source"], [1, "at-detail-section"], [1, "at-detail-section-label"], [1, "at-detail-meta-grid"], [1, "at-detail-meta-row"], [1, "at-detail-meta-key"], [1, "at-detail-meta-value"], [1, "at-detail-actions"], [1, "at-action-btn", "at-primary-btn", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], ["disabled", "", 1, "at-action-btn", "at-secondary-btn"], [1, "fa-solid", "fa-magnifying-glass"], [1, "at-detail-badge", "at-detail-badge-type"], [1, "at-detail-badge", "at-detail-badge-file"], [1, "fa-solid", "fa-file"], ["target", "_blank", 1, "at-detail-link", 3, "href"], [1, "fa-solid", "fa-external-link-alt", 2, "font-size", "0.65rem", "margin-left", "4px"], [1, "at-detail-text-preview"], [1, "at-detail-tags"], [1, "at-tag-pill", "at-tag-weighted", 3, "font-size"], [1, "at-tag-pill", "at-tag-weighted"], [1, "at-tag-weight"], [1, "at-detail-meta-value", "at-detail-meta-mono"]], template: function ClassifyItemDetailDialogComponent_Template(rf, ctx) { if (rf & 1) {
190
+ i0.ɵɵconditionalCreate(0, ClassifyItemDetailDialogComponent_Conditional_0_Template, 41, 9);
191
+ } if (rf & 2) {
192
+ i0.ɵɵconditional(ctx.Show && ctx.Item ? 0 : -1);
193
+ } }, encapsulation: 2 });
194
+ }
195
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClassifyItemDetailDialogComponent, [{
196
+ type: Component,
197
+ args: [{ standalone: false, selector: 'classify-item-detail-dialog', template: "<!-- \u2550\u2550\u2550\u2550\u2550\u2550 ITEM DETAIL SLIDE-IN \u2550\u2550\u2550\u2550\u2550\u2550 -->\n@if (Show && Item) {\n <div class=\"at-slide-overlay\" (click)=\"Closed.emit()\"></div>\n <div class=\"at-slide-panel at-detail-panel\">\n <div class=\"at-slide-header\">\n <h3><i class=\"fa-solid fa-file-lines\"></i> Content Item</h3>\n <button class=\"at-slide-close\" aria-label=\"Close item detail\" (click)=\"Closed.emit()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n <div class=\"at-slide-body\">\n <!-- Header -->\n <div class=\"at-detail-item-header\">\n <h4 class=\"at-detail-item-name\">{{ Item.Name }}</h4>\n <div class=\"at-detail-badges\">\n <span class=\"at-detail-badge at-detail-badge-source\">{{ Item.SourceName }}</span>\n @if (Item.RequiresContentType) {\n <span class=\"at-detail-badge at-detail-badge-type\">{{ Item.ContentTypeName }}</span>\n @if (Item.FileTypeName) {\n <span class=\"at-detail-badge at-detail-badge-file\"><i class=\"fa-solid fa-file\"></i> {{ Item.FileTypeName }}</span>\n }\n }\n </div>\n </div>\n\n <!-- URL -->\n @if (Item.URL) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">URL</div>\n <a [href]=\"Item.URL\" target=\"_blank\" class=\"at-detail-link\">\n {{ Item.URL }}\n <i class=\"fa-solid fa-external-link-alt\" style=\"font-size: 0.65rem; margin-left: 4px;\"></i>\n </a>\n </div>\n }\n\n <!-- Text Preview -->\n @if (Item.TextContent) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Content Preview</div>\n <div class=\"at-detail-text-preview\">{{ Item.TextContent }}</div>\n </div>\n }\n\n <!-- Tags (weighted) -->\n @if (Item.Tags.length > 0) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Tags ({{ Item.Tags.length }})</div>\n <div class=\"at-detail-tags\">\n @for (wt of Item.Tags; track wt.Tag) {\n <span class=\"at-tag-pill at-tag-weighted\" [style.font-size]=\"TagFontSize(wt.Weight)\">\n {{ wt.Tag }}\n <span class=\"at-tag-weight\">{{ FormatWeight(wt.Weight) }}</span>\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Metadata -->\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Metadata</div>\n <div class=\"at-detail-meta-grid\">\n @if (Item.Checksum) {\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Checksum</span>\n <span class=\"at-detail-meta-value at-detail-meta-mono\">{{ Item.Checksum }}</span>\n </div>\n }\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Created</span>\n <span class=\"at-detail-meta-value\">{{ Item.CreatedAt }}</span>\n </div>\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Updated</span>\n <span class=\"at-detail-meta-value\">{{ Item.UpdatedAt }}</span>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"at-detail-actions\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"OpenRecordRequested.emit(Item)\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open Record\n </button>\n <button class=\"at-action-btn at-secondary-btn\" disabled>\n <i class=\"fa-solid fa-magnifying-glass\"></i> See Similar Items\n </button>\n </div>\n </div>\n </div>\n}\n", styles: ["/*\n * Content Item Detail slide-in dialog styles.\n *\n * The host (AutotaggingPipelineResourceComponent) uses ViewEncapsulation.None,\n * so its `.at-*` rules are global and already style this dialog's markup while\n * it renders inside the host shell. No dialog-specific rules are needed today.\n */\n"] }]
198
+ }], null, { Item: [{
199
+ type: Input
200
+ }], Show: [{
201
+ type: Input
202
+ }], Closed: [{
203
+ type: Output
204
+ }], OpenRecordRequested: [{
205
+ type: Output
206
+ }] }); })();
207
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClassifyItemDetailDialogComponent, { className: "ClassifyItemDetailDialogComponent", filePath: "src/AI/components/autotagging/dialogs/item-detail.dialog.component.ts", lineNumber: 21 }); })();
208
+ //# sourceMappingURL=item-detail.dialog.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-detail.dialog.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/autotagging/dialogs/item-detail.dialog.component.ts","../../../../../src/AI/components/autotagging/dialogs/item-detail.dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Classify · Content Item Detail slide-in dialog.\n *\n * Presentational slide-in panel showing a content item's details, tags, text,\n * metadata, and actions. Opened from multiple tabs, so it is rendered by the\n * HOST (the data orchestrator), which builds the `ContentItemDetail` and toggles\n * visibility. This component is purely presentational: data DOWN via `[Item]` /\n * `[Show]`, intents UP via `(Closed)` / `(OpenRecordRequested)`.\n */\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ContentItemDetail } from '../shared/classify.types';\nimport { formatWeight, tagFontSize } from '../shared/classify.format';\n\n@Component({\n standalone: false,\n selector: 'classify-item-detail-dialog',\n templateUrl: './item-detail.dialog.component.html',\n styleUrls: ['./item-detail.dialog.component.css']\n})\nexport class ClassifyItemDetailDialogComponent extends BaseAngularComponent {\n /** The content item to display, built and supplied by the host orchestrator. */\n @Input() Item: ContentItemDetail | null = null;\n /** Whether the slide-in is visible. */\n @Input() Show = false;\n\n /** Emitted when the user dismisses the panel (overlay/close button). */\n @Output() Closed = new EventEmitter<void>();\n /** Emitted when the user requests to open the underlying record. */\n @Output() OpenRecordRequested = new EventEmitter<ContentItemDetail>();\n\n // Template-facing formatters\n public readonly FormatWeight = formatWeight;\n public readonly TagFontSize = tagFontSize;\n}\n","<!-- ══════ ITEM DETAIL SLIDE-IN ══════ -->\n@if (Show && Item) {\n <div class=\"at-slide-overlay\" (click)=\"Closed.emit()\"></div>\n <div class=\"at-slide-panel at-detail-panel\">\n <div class=\"at-slide-header\">\n <h3><i class=\"fa-solid fa-file-lines\"></i> Content Item</h3>\n <button class=\"at-slide-close\" aria-label=\"Close item detail\" (click)=\"Closed.emit()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n <div class=\"at-slide-body\">\n <!-- Header -->\n <div class=\"at-detail-item-header\">\n <h4 class=\"at-detail-item-name\">{{ Item.Name }}</h4>\n <div class=\"at-detail-badges\">\n <span class=\"at-detail-badge at-detail-badge-source\">{{ Item.SourceName }}</span>\n @if (Item.RequiresContentType) {\n <span class=\"at-detail-badge at-detail-badge-type\">{{ Item.ContentTypeName }}</span>\n @if (Item.FileTypeName) {\n <span class=\"at-detail-badge at-detail-badge-file\"><i class=\"fa-solid fa-file\"></i> {{ Item.FileTypeName }}</span>\n }\n }\n </div>\n </div>\n\n <!-- URL -->\n @if (Item.URL) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">URL</div>\n <a [href]=\"Item.URL\" target=\"_blank\" class=\"at-detail-link\">\n {{ Item.URL }}\n <i class=\"fa-solid fa-external-link-alt\" style=\"font-size: 0.65rem; margin-left: 4px;\"></i>\n </a>\n </div>\n }\n\n <!-- Text Preview -->\n @if (Item.TextContent) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Content Preview</div>\n <div class=\"at-detail-text-preview\">{{ Item.TextContent }}</div>\n </div>\n }\n\n <!-- Tags (weighted) -->\n @if (Item.Tags.length > 0) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Tags ({{ Item.Tags.length }})</div>\n <div class=\"at-detail-tags\">\n @for (wt of Item.Tags; track wt.Tag) {\n <span class=\"at-tag-pill at-tag-weighted\" [style.font-size]=\"TagFontSize(wt.Weight)\">\n {{ wt.Tag }}\n <span class=\"at-tag-weight\">{{ FormatWeight(wt.Weight) }}</span>\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Metadata -->\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Metadata</div>\n <div class=\"at-detail-meta-grid\">\n @if (Item.Checksum) {\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Checksum</span>\n <span class=\"at-detail-meta-value at-detail-meta-mono\">{{ Item.Checksum }}</span>\n </div>\n }\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Created</span>\n <span class=\"at-detail-meta-value\">{{ Item.CreatedAt }}</span>\n </div>\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Updated</span>\n <span class=\"at-detail-meta-value\">{{ Item.UpdatedAt }}</span>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"at-detail-actions\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"OpenRecordRequested.emit(Item)\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open Record\n </button>\n <button class=\"at-action-btn at-secondary-btn\" disabled>\n <i class=\"fa-solid fa-magnifying-glass\"></i> See Similar Items\n </button>\n </div>\n </div>\n </div>\n}\n"]}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @fileoverview Classify · No-Content-Types warning dialog.
3
+ *
4
+ * Presentational warning overlay shown when the user tries to create a content
5
+ * source before any content type exists. Rendered by the HOST, which owns the
6
+ * `Show` state and the cross-tab navigation logic. Intents bubble UP via
7
+ * `(GoToTypes)` (close form + switch to the Types tab) and `(Dismissed)`.
8
+ */
9
+ import { EventEmitter } from '@angular/core';
10
+ import * as i0 from "@angular/core";
11
+ export declare class ClassifyNoContentTypeWarningComponent {
12
+ /** Whether the warning overlay is visible. */
13
+ Show: boolean;
14
+ /** Emitted when the user chooses to go to the Content Types tab. */
15
+ GoToTypes: EventEmitter<void>;
16
+ /** Emitted when the user dismisses the warning. */
17
+ Dismissed: EventEmitter<void>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<ClassifyNoContentTypeWarningComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<ClassifyNoContentTypeWarningComponent, "classify-no-content-type-warning", never, { "Show": { "alias": "Show"; "required": false; }; }, { "GoToTypes": "GoToTypes"; "Dismissed": "Dismissed"; }, never, never, false, never>;
20
+ }
21
+ //# sourceMappingURL=no-content-type-warning.dialog.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-content-type-warning.dialog.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;;AAEvE,qBAMa,qCAAqC;IAC9C,8CAA8C;IACrC,IAAI,UAAS;IAEtB,oEAAoE;IAC1D,SAAS,qBAA4B;IAC/C,mDAAmD;IACzC,SAAS,qBAA4B;yCAPtC,qCAAqC;2CAArC,qCAAqC;CAQjD"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @fileoverview Classify · No-Content-Types warning dialog.
3
+ *
4
+ * Presentational warning overlay shown when the user tries to create a content
5
+ * source before any content type exists. Rendered by the HOST, which owns the
6
+ * `Show` state and the cross-tab navigation logic. Intents bubble UP via
7
+ * `(GoToTypes)` (close form + switch to the Types tab) and `(Dismissed)`.
8
+ */
9
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
10
+ import * as i0 from "@angular/core";
11
+ function ClassifyNoContentTypeWarningComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
12
+ const _r1 = i0.ɵɵgetCurrentView();
13
+ i0.ɵɵelementStart(0, "div", 1);
14
+ i0.ɵɵlistener("click", function ClassifyNoContentTypeWarningComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Dismissed.emit()); });
15
+ i0.ɵɵelementStart(1, "div", 2);
16
+ i0.ɵɵlistener("click", function ClassifyNoContentTypeWarningComponent_Conditional_0_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
17
+ i0.ɵɵelementStart(2, "div", 3)(3, "span");
18
+ i0.ɵɵelement(4, "i", 4);
19
+ i0.ɵɵtext(5, " Content Type Required");
20
+ i0.ɵɵelementEnd();
21
+ i0.ɵɵelementStart(6, "button", 5);
22
+ i0.ɵɵlistener("click", function ClassifyNoContentTypeWarningComponent_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Dismissed.emit()); });
23
+ i0.ɵɵelement(7, "i", 6);
24
+ i0.ɵɵelementEnd()();
25
+ i0.ɵɵelementStart(8, "div", 7)(9, "p", 8);
26
+ i0.ɵɵtext(10, " No content types have been configured yet. At least one content type is required before you can create a content source. ");
27
+ i0.ɵɵelementEnd();
28
+ i0.ɵɵelementStart(11, "p", 9);
29
+ i0.ɵɵtext(12, " Go to the ");
30
+ i0.ɵɵelementStart(13, "strong");
31
+ i0.ɵɵtext(14, "Content Types");
32
+ i0.ɵɵelementEnd();
33
+ i0.ɵɵtext(15, " tab to create one. ");
34
+ i0.ɵɵelementEnd()();
35
+ i0.ɵɵelementStart(16, "div", 10)(17, "button", 11);
36
+ i0.ɵɵlistener("mousedown", function ClassifyNoContentTypeWarningComponent_Conditional_0_Template_button_mousedown_17_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.GoToTypes.emit()); });
37
+ i0.ɵɵelement(18, "i", 12);
38
+ i0.ɵɵtext(19, " Go to Content Types ");
39
+ i0.ɵɵelementEnd();
40
+ i0.ɵɵelementStart(20, "button", 13);
41
+ i0.ɵɵlistener("click", function ClassifyNoContentTypeWarningComponent_Conditional_0_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Dismissed.emit()); });
42
+ i0.ɵɵtext(21, "Close");
43
+ i0.ɵɵelementEnd()()()();
44
+ } }
45
+ export class ClassifyNoContentTypeWarningComponent {
46
+ /** Whether the warning overlay is visible. */
47
+ Show = false;
48
+ /** Emitted when the user chooses to go to the Content Types tab. */
49
+ GoToTypes = new EventEmitter();
50
+ /** Emitted when the user dismisses the warning. */
51
+ Dismissed = new EventEmitter();
52
+ static ɵfac = function ClassifyNoContentTypeWarningComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ClassifyNoContentTypeWarningComponent)(); };
53
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClassifyNoContentTypeWarningComponent, selectors: [["classify-no-content-type-warning"]], inputs: { Show: "Show" }, outputs: { GoToTypes: "GoToTypes", Dismissed: "Dismissed" }, standalone: false, decls: 1, vars: 1, consts: [[1, "at-schedule-dialog-overlay", 2, "z-index", "10001"], [1, "at-schedule-dialog-overlay", 2, "z-index", "10001", 3, "click"], [1, "at-schedule-dialog", 2, "max-width", "440px", "z-index", "10002", 3, "click"], [1, "at-schedule-dialog-header"], [1, "fa-solid", "fa-triangle-exclamation", 2, "color", "var(--mj-status-warning)", "margin-right", "8px"], ["aria-label", "Close warning", 1, "at-close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "at-schedule-dialog-body", 2, "text-align", "center", "padding", "24px"], [2, "color", "var(--mj-text-secondary)", "margin-bottom", "16px"], [2, "color", "var(--mj-text-muted)", "font-size", "13px"], [1, "at-schedule-dialog-footer"], [1, "at-action-btn", "at-primary-btn", 3, "mousedown"], [1, "fa-solid", "fa-arrow-right"], [1, "at-action-btn", "at-secondary-btn", 3, "click"]], template: function ClassifyNoContentTypeWarningComponent_Template(rf, ctx) { if (rf & 1) {
54
+ i0.ɵɵconditionalCreate(0, ClassifyNoContentTypeWarningComponent_Conditional_0_Template, 22, 0, "div", 0);
55
+ } if (rf & 2) {
56
+ i0.ɵɵconditional(ctx.Show ? 0 : -1);
57
+ } }, encapsulation: 2 });
58
+ }
59
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClassifyNoContentTypeWarningComponent, [{
60
+ type: Component,
61
+ args: [{ standalone: false, selector: 'classify-no-content-type-warning', template: "<!-- No Content Types Warning Dialog (z-index above slide-in panel) -->\n@if (Show) {\n <div class=\"at-schedule-dialog-overlay\" style=\"z-index: 10001;\" (click)=\"Dismissed.emit()\">\n <div class=\"at-schedule-dialog\" style=\"max-width: 440px; z-index: 10002;\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <span><i class=\"fa-solid fa-triangle-exclamation\" style=\"color: var(--mj-status-warning); margin-right: 8px;\"></i> Content Type Required</span>\n <button class=\"at-close-btn\" aria-label=\"Close warning\" (click)=\"Dismissed.emit()\"><i class=\"fa-solid fa-xmark\"></i></button>\n </div>\n <div class=\"at-schedule-dialog-body\" style=\"text-align: center; padding: 24px;\">\n <p style=\"color: var(--mj-text-secondary); margin-bottom: 16px;\">\n No content types have been configured yet. At least one content type is required before you can create a content source.\n </p>\n <p style=\"color: var(--mj-text-muted); font-size: 13px;\">\n Go to the <strong>Content Types</strong> tab to create one.\n </p>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (mousedown)=\"GoToTypes.emit()\">\n <i class=\"fa-solid fa-arrow-right\"></i> Go to Content Types\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"Dismissed.emit()\">Close</button>\n </div>\n </div>\n </div>\n}\n", styles: ["/*\n * No-Content-Types warning dialog styles.\n *\n * The host (AutotaggingPipelineResourceComponent) uses ViewEncapsulation.None,\n * so its `.at-*` rules are global and already style this dialog's markup while\n * it renders inside the host shell. No dialog-specific rules are needed today.\n */\n"] }]
62
+ }], null, { Show: [{
63
+ type: Input
64
+ }], GoToTypes: [{
65
+ type: Output
66
+ }], Dismissed: [{
67
+ type: Output
68
+ }] }); })();
69
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClassifyNoContentTypeWarningComponent, { className: "ClassifyNoContentTypeWarningComponent", filePath: "src/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.ts", lineNumber: 17 }); })();
70
+ //# sourceMappingURL=no-content-type-warning.dialog.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-content-type-warning.dialog.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.ts","../../../../../src/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.html"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;;;ICNnE,8BAA2F;IAA3B,sMAAS,uBAAgB,KAAC;IACtF,8BAA6G;IAAnC,yKAAS,wBAAwB,KAAC;IAEpG,AADJ,8BAAuC,WAC7B;IAAA,uBAA4G;IAAC,sCAAqB;IAAA,iBAAO;IAC/I,iCAAmF;IAA3B,yMAAS,uBAAgB,KAAC;IAAC,uBAAiC;IACxH,AADwH,iBAAS,EAC3H;IAEF,AADJ,8BAAgF,WACX;IAC7D,2IACJ;IAAA,iBAAI;IACJ,6BAAyD;IACrD,4BAAU;IAAA,+BAAQ;IAAA,8BAAa;IAAA,iBAAS;IAAC,qCAC7C;IACJ,AADI,iBAAI,EACF;IAEF,AADJ,gCAAuC,kBACyC;IAA/B,kNAAa,uBAAgB,KAAC;IACvE,yBAAuC;IAAC,sCAC5C;IAAA,iBAAS;IACT,mCAA0E;IAA3B,0MAAS,uBAAgB,KAAC;IAAC,sBAAK;IAG3F,AADI,AADI,AADmF,iBAAS,EACtF,EACJ,EACJ;;ADPV,MAAM,OAAO,qCAAqC;IAC9C,8CAA8C;IACrC,IAAI,GAAG,KAAK,CAAC;IAEtB,oEAAoE;IAC1D,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;IAC/C,mDAAmD;IACzC,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;+HAPtC,qCAAqC;6DAArC,qCAAqC;YCflD,wGAAY;;YAAZ,mCAuBC;;;iFDRY,qCAAqC;cANjD,SAAS;6BACM,KAAK,YACP,kCAAkC;;kBAM3C,KAAK;;kBAGL,MAAM;;kBAEN,MAAM;;kFAPE,qCAAqC","sourcesContent":["/**\n * @fileoverview Classify · No-Content-Types warning dialog.\n *\n * Presentational warning overlay shown when the user tries to create a content\n * source before any content type exists. Rendered by the HOST, which owns the\n * `Show` state and the cross-tab navigation logic. Intents bubble UP via\n * `(GoToTypes)` (close form + switch to the Types tab) and `(Dismissed)`.\n */\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n standalone: false,\n selector: 'classify-no-content-type-warning',\n templateUrl: './no-content-type-warning.dialog.component.html',\n styleUrls: ['./no-content-type-warning.dialog.component.css']\n})\nexport class ClassifyNoContentTypeWarningComponent {\n /** Whether the warning overlay is visible. */\n @Input() Show = false;\n\n /** Emitted when the user chooses to go to the Content Types tab. */\n @Output() GoToTypes = new EventEmitter<void>();\n /** Emitted when the user dismisses the warning. */\n @Output() Dismissed = new EventEmitter<void>();\n}\n","<!-- No Content Types Warning Dialog (z-index above slide-in panel) -->\n@if (Show) {\n <div class=\"at-schedule-dialog-overlay\" style=\"z-index: 10001;\" (click)=\"Dismissed.emit()\">\n <div class=\"at-schedule-dialog\" style=\"max-width: 440px; z-index: 10002;\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <span><i class=\"fa-solid fa-triangle-exclamation\" style=\"color: var(--mj-status-warning); margin-right: 8px;\"></i> Content Type Required</span>\n <button class=\"at-close-btn\" aria-label=\"Close warning\" (click)=\"Dismissed.emit()\"><i class=\"fa-solid fa-xmark\"></i></button>\n </div>\n <div class=\"at-schedule-dialog-body\" style=\"text-align: center; padding: 24px;\">\n <p style=\"color: var(--mj-text-secondary); margin-bottom: 16px;\">\n No content types have been configured yet. At least one content type is required before you can create a content source.\n </p>\n <p style=\"color: var(--mj-text-muted); font-size: 13px;\">\n Go to the <strong>Content Types</strong> tab to create one.\n </p>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (mousedown)=\"GoToTypes.emit()\">\n <i class=\"fa-solid fa-arrow-right\"></i> Go to Content Types\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"Dismissed.emit()\">Close</button>\n </div>\n </div>\n </div>\n}\n"]}