@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
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-console.component.js","sourceRoot":"","sources":["../../src/DevTools/graphql-console.component.ts","../../src/DevTools/graphql-console.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ElementRef, ViewChild, HostListener, inject } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { EntityInfo, EntityFieldInfo, getGraphQLTypeNameBase } from '@memberjunction/core';\nimport { GraphQLDataProvider, FieldMapper } from '@memberjunction/graphql-dataprovider';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface HistoryEntry {\n id: string;\n query: string;\n variables: string;\n timestamp: Date;\n durationMs?: number;\n status: 'ok' | 'error' | 'pending';\n favorite: boolean;\n label?: string;\n}\n\n/** GraphQL introspection — minimal subset sufficient for the explorer. */\ninterface IntrospectedTypeRef {\n kind: 'NON_NULL' | 'LIST' | 'SCALAR' | 'OBJECT' | 'ENUM' | 'INPUT_OBJECT' | 'INTERFACE' | 'UNION' | string;\n name: string | null;\n ofType?: IntrospectedTypeRef | null;\n}\ninterface IntrospectedArg {\n name: string;\n description?: string | null;\n type: IntrospectedTypeRef;\n defaultValue?: string | null;\n}\ninterface IntrospectedField {\n name: string;\n description?: string | null;\n args: IntrospectedArg[];\n type: IntrospectedTypeRef;\n}\ninterface IntrospectedType {\n kind: string;\n name: string;\n description?: string | null;\n fields?: IntrospectedField[] | null;\n}\ninterface SchemaOperation {\n name: string;\n kind: 'query' | 'mutation';\n description: string;\n argSummary: string;\n returnSummary: string;\n field: IntrospectedField;\n}\n\ntype SidebarTab = 'history' | 'schema' | 'entities';\ntype EntityOpKind = 'view' | 'byId' | 'create' | 'update' | 'delete';\n\ninterface EntityListItem {\n info: EntityInfo;\n typeName: string;\n schema: string;\n /** True when this entity is currently expanded showing operation buttons. */\n expanded: boolean;\n}\n\nconst PREFS_KEY = 'graphqlConsole';\nconst HISTORY_LIMIT = 30;\n\nconst SAMPLE_QUERY = `# Welcome to the GraphQL Console\n# Press Cmd/Ctrl+Enter to run.\n# Authentication is handled by the active GraphQL provider.\n\nquery GetCurrentUser {\n CurrentUser {\n ID\n Name\n Email\n }\n}\n`;\n\n/**\n * GraphQL Console — write and run arbitrary GraphQL queries against the\n * connected MJ API. Re-uses the active GraphQLDataProvider client (auth +\n * session intact). Local history with copy / favorite / replay; copy-as-curl;\n * keyboard shortcut (Cmd/Ctrl+Enter) to run.\n */\n@RegisterClass(BaseResourceComponent, 'GraphQLConsoleInspector')\n@Component({\n standalone: false,\n selector: 'mj-graphql-console',\n templateUrl: './graphql-console.component.html',\n styleUrls: ['./inspector-shared.css', './graphql-console.component.css']\n})\nexport class GraphQLConsoleComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n @ViewChild('queryEditor') queryEditor?: ElementRef<HTMLTextAreaElement>;\n\n public Query = SAMPLE_QUERY;\n public Variables = '{}';\n public ShowVariables = false;\n\n public Running = false;\n public ResponseJson = '';\n public ResponseStatus: 'ok' | 'error' | 'idle' = 'idle';\n public ResponseDurationMs: number | null = null;\n public ResponseSizeBytes: number | null = null;\n public ErrorMessage: string | null = null;\n\n public History: HistoryEntry[] = [];\n public ShowHistory = true;\n public CopyConfirmed = false;\n\n public ApiUrl = '';\n\n // Schema explorer state\n public SidebarTab: SidebarTab = 'history';\n public SchemaLoading = false;\n public SchemaError: string | null = null;\n public SchemaIntrospectionDisabled = false;\n public SchemaSearch = '';\n public SchemaKindFilter: 'all' | 'query' | 'mutation' = 'all';\n public Operations: SchemaOperation[] = [];\n private schemaLoaded = false;\n\n // Entities tab state\n public EntitiesSearch = '';\n public Entities: EntityListItem[] = [];\n public EntitySchemaFilter = ''; // '' = all\n public KnownSchemas: string[] = [];\n\n // Pane sizing (resizable splitters)\n public SidebarWidthPx = 280;\n public EditorHeightPct = 50; // % of main pane height for editor (50/50 split default)\n private resizing: 'sidebar' | 'editor' | null = null;\n private elementRef = inject(ElementRef);\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.loadFromStorage();\n try {\n this.ApiUrl = GraphQLDataProvider.Instance.ConfigData?.URL ?? '';\n } catch { /* not configured */ }\n this.loadEntities();\n this.NotifyLoadComplete();\n }\n\n public ngOnDestroy(): void {\n this.saveToStorage();\n this.detachResizeListeners();\n }\n\n private loadEntities(): void {\n try {\n const md = this.ProviderToUse;\n if (!md) return;\n const items: EntityListItem[] = (md.Entities ?? []).map(e => ({\n info: e,\n typeName: getGraphQLTypeNameBase(e),\n schema: e.SchemaName ?? '(unknown)',\n expanded: false\n })).sort((a, b) => a.info.Name.localeCompare(b.info.Name));\n this.Entities = items;\n const schemas = new Set<string>();\n for (const i of items) schemas.add(i.schema);\n this.KnownSchemas = Array.from(schemas).sort();\n } catch { /* metadata not ready */ }\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'GraphQL Console'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-code'; }\n\n @HostListener('keydown', ['$event'])\n public OnHostKeydown(event: KeyboardEvent): void {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') {\n event.preventDefault();\n void this.OnRun();\n }\n }\n\n public async OnRun(): Promise<void> {\n const trimmedQuery = this.Query.trim();\n if (!trimmedQuery) {\n this.ErrorMessage = 'Query is empty.';\n return;\n }\n let parsedVars: Record<string, unknown> | null = null;\n if (this.Variables.trim()) {\n try {\n parsedVars = JSON.parse(this.Variables);\n } catch (err) {\n this.ResponseStatus = 'error';\n this.ErrorMessage = 'Variables must be valid JSON: ' + (err instanceof Error ? err.message : String(err));\n this.ResponseJson = '';\n this.cdr.markForCheck();\n return;\n }\n }\n\n this.Running = true;\n this.ErrorMessage = null;\n this.ResponseStatus = 'idle';\n this.ResponseJson = '';\n this.cdr.markForCheck();\n\n const start = performance.now();\n try {\n const data = await GraphQLDataProvider.ExecuteGQL(trimmedQuery, parsedVars);\n const elapsed = performance.now() - start;\n const text = JSON.stringify(data, null, 2);\n this.ResponseJson = text;\n this.ResponseStatus = 'ok';\n this.ResponseDurationMs = Math.round(elapsed);\n this.ResponseSizeBytes = new Blob([text]).size;\n this.recordHistory(trimmedQuery, this.Variables, 'ok', this.ResponseDurationMs);\n } catch (err: unknown) {\n const elapsed = performance.now() - start;\n this.ResponseStatus = 'error';\n this.ResponseDurationMs = Math.round(elapsed);\n const formatted = this.formatError(err);\n this.ResponseJson = formatted;\n this.ResponseSizeBytes = new Blob([formatted]).size;\n this.ErrorMessage = this.extractErrorSummary(err);\n this.recordHistory(trimmedQuery, this.Variables, 'error', this.ResponseDurationMs);\n } finally {\n this.Running = false;\n this.cdr.markForCheck();\n }\n }\n\n public OnRestoreHistory(entry: HistoryEntry): void {\n this.Query = entry.query;\n this.Variables = entry.variables;\n if (entry.variables.trim() && entry.variables.trim() !== '{}') {\n this.ShowVariables = true;\n }\n this.cdr.markForCheck();\n }\n\n public OnToggleFavorite(entry: HistoryEntry, event: Event): void {\n event.stopPropagation();\n entry.favorite = !entry.favorite;\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public OnDeleteHistory(entry: HistoryEntry, event: Event): void {\n event.stopPropagation();\n this.History = this.History.filter(h => h.id !== entry.id);\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public OnClearHistory(): void {\n // Keep favorites\n this.History = this.History.filter(h => h.favorite);\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public async OnCopyResponse(): Promise<void> {\n if (!this.ResponseJson) return;\n try {\n await navigator.clipboard.writeText(this.ResponseJson);\n this.CopyConfirmed = true;\n setTimeout(() => { this.CopyConfirmed = false; this.cdr.markForCheck(); }, 1800);\n this.cdr.markForCheck();\n } catch { /* unavailable */ }\n }\n\n public async OnCopyAsCurl(): Promise<void> {\n const url = this.ApiUrl || '<API_URL>';\n const body = JSON.stringify({\n query: this.Query.trim(),\n variables: this.Variables.trim() ? JSON.parse(this.Variables) : null\n });\n const escaped = body.replace(/'/g, `'\\\\''`);\n const curl = [\n `curl -X POST '${url}'`,\n ` -H 'Content-Type: application/json'`,\n ` -H 'Authorization: Bearer <YOUR_TOKEN>'`,\n ` -d '${escaped}'`\n ].join(' \\\\\\n');\n try { await navigator.clipboard.writeText(curl); } catch { /* unavailable */ }\n }\n\n public OnFormatQuery(): void {\n // Tiny pretty-printer: collapse multiple blank lines + trim trailing whitespace\n this.Query = this.Query\n .split('\\n')\n .map(line => line.replace(/\\s+$/, ''))\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim() + '\\n';\n }\n\n public ToggleHistoryPanel(): void {\n this.ShowHistory = !this.ShowHistory;\n }\n\n public ToggleVariables(): void {\n this.ShowVariables = !this.ShowVariables;\n }\n\n public OnSidebarTabChange(tab: SidebarTab): void {\n this.SidebarTab = tab;\n this.saveToStorage();\n if (tab === 'schema' && !this.schemaLoaded && !this.SchemaLoading) {\n void this.loadSchema();\n }\n }\n\n public async OnReloadSchema(): Promise<void> {\n this.schemaLoaded = false;\n await this.loadSchema();\n }\n\n public OnInsertOperation(op: SchemaOperation, event?: MouseEvent): void {\n const template = this.buildOperationTemplate(op);\n this.insertTemplate(template, !!event?.shiftKey);\n }\n\n public OnClearQuery(): void {\n this.Query = '';\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public get FilteredOperations(): SchemaOperation[] {\n const q = this.SchemaSearch.trim().toLowerCase();\n return this.Operations.filter(op => {\n if (this.SchemaKindFilter !== 'all' && op.kind !== this.SchemaKindFilter) return false;\n if (!q) return true;\n return op.name.toLowerCase().includes(q)\n || op.returnSummary.toLowerCase().includes(q)\n || op.description.toLowerCase().includes(q);\n });\n }\n\n public get OperationCounts(): { all: number; query: number; mutation: number } {\n const q = this.Operations.filter(o => o.kind === 'query').length;\n const m = this.Operations.filter(o => o.kind === 'mutation').length;\n return { all: this.Operations.length, query: q, mutation: m };\n }\n\n public TrackByOp = (_i: number, o: SchemaOperation) => o.kind + ':' + o.name;\n\n // ---------- Entities tab ----------\n\n public TrackByEntity = (_i: number, e: EntityListItem) => e.info.ID;\n\n public get FilteredEntities(): EntityListItem[] {\n const q = this.EntitiesSearch.trim().toLowerCase();\n return this.Entities.filter(e => {\n if (this.EntitySchemaFilter && e.schema !== this.EntitySchemaFilter) return false;\n if (!q) return true;\n return e.info.Name.toLowerCase().includes(q)\n || e.typeName.toLowerCase().includes(q)\n || e.schema.toLowerCase().includes(q)\n || (e.info.Description ?? '').toLowerCase().includes(q);\n });\n }\n\n public ToggleEntity(e: EntityListItem): void {\n e.expanded = !e.expanded;\n }\n\n public OnEntityOp(item: EntityListItem, op: EntityOpKind, event: MouseEvent): void {\n event.stopPropagation();\n const template = this.buildEntityOpTemplate(item, op);\n this.insertTemplate(template, !!event.shiftKey);\n }\n\n /**\n * Default: replace the editor contents with the new template.\n * Shift-click: append to the end (with a blank-line separator) so the\n * user can stage multiple operations in one document.\n */\n private insertTemplate(template: string, append: boolean): void {\n const trimmed = this.Query.trimEnd();\n const isFresh = trimmed.length === 0 || trimmed === SAMPLE_QUERY.trimEnd();\n if (append && !isFresh) {\n this.Query = trimmed + '\\n\\n' + template;\n } else {\n this.Query = template;\n }\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n private buildEntityOpTemplate(item: EntityListItem, op: EntityOpKind): string {\n const e = item.info;\n const typeName = item.typeName;\n const mapper = new FieldMapper();\n const fieldList = this.pickRepresentativeFields(e).map(name => {\n const mapped = mapper.MapFieldName(name);\n // Annotate any remapped fields so users see why the GraphQL field\n // name differs from the database column. (`__` is reserved by the\n // GraphQL spec, so MJ rewrites `__mj_*` columns to `_mj__*` over\n // the wire.)\n return mapped === name ? mapped : `${mapped} # from ${name}`;\n });\n const fieldSelection = fieldList.join('\\n ');\n const pkField = mapper.MapFieldName(e.PrimaryKeys?.[0]?.Name ?? 'ID');\n\n switch (op) {\n case 'view':\n return `# Run a dynamic view over ${e.Name}\nquery Run${typeName}DynamicView {\n Run${typeName}DynamicView(input: {\n EntityName: \"${e.Name}\"\n ExtraFilter: \"\"\n OrderBy: \"\"\n UserSearchString: \"\"\n Fields: null\n MaxRows: 100\n StartRow: 0\n IgnoreMaxRows: false\n ForceAuditLog: false\n ResultType: \"simple\"\n }) {\n Success\n RowCount\n TotalRowCount\n ExecutionTime\n ErrorMessage\n Results {\n ${fieldSelection}\n }\n }\n}\n`;\n case 'byId':\n return `# Fetch a single ${e.Name} record by primary key\nquery Run${typeName}ByID($id: String!) {\n Run${typeName}DynamicView(input: {\n EntityName: \"${e.Name}\"\n ExtraFilter: \"${pkField}='\" + $id + \"'\"\n Fields: null\n MaxRows: 1\n StartRow: 0\n IgnoreMaxRows: false\n ForceAuditLog: false\n ResultType: \"simple\"\n OrderBy: \"\"\n UserSearchString: \"\"\n }) {\n Success\n Results {\n ${fieldSelection}\n }\n }\n}\n\n# Variables (paste into the Variables panel):\n# { \"id\": \"<your-id-here>\" }\n`;\n case 'create':\n return `# Create a new ${e.Name}\nmutation Create${typeName}($input: Create${typeName}Input!) {\n Create${typeName}(input: $input) {\n ${fieldSelection}\n }\n}\n\n# Variables — populate the writable fields, then Run\n# {\n# \"input\": {\n# # required + writable fields go here\n# }\n# }\n`;\n case 'update':\n return `# Update an existing ${e.Name}\nmutation Update${typeName}($input: Update${typeName}Input!) {\n Update${typeName}(input: $input) {\n ${fieldSelection}\n }\n}\n\n# Variables — must include the primary key (${pkField})\n# {\n# \"input\": {\n# \"${pkField}\": \"<id-here>\"\n# # ...changed fields\n# }\n# }\n`;\n case 'delete':\n return `# Delete a ${e.Name}\nmutation Delete${typeName}($input: Delete${typeName}Input!) {\n Delete${typeName}(input: $input) {\n ${pkField}\n }\n}\n\n# Variables:\n# { \"input\": { \"${pkField}\": \"<id-here>\" } }\n`;\n }\n }\n\n /** Pick the first ~10 displayable fields, prioritizing primary key and common fields. */\n private pickRepresentativeFields(e: EntityInfo): string[] {\n const fields = e.Fields ?? [];\n if (fields.length === 0) return ['ID'];\n const out: string[] = [];\n const seen = new Set<string>();\n const push = (n: string) => { if (n && !seen.has(n)) { seen.add(n); out.push(n); } };\n\n for (const f of fields) {\n if (f.IsPrimaryKey) push(f.Name);\n }\n // Prefer common, lightweight fields\n for (const f of fields) {\n if (out.length >= 10) break;\n if (f.IsBinaryFieldType) continue;\n const lower = f.Name.toLowerCase();\n if (lower === 'name' || lower === 'description' || lower === 'status' || lower === 'type') {\n push(f.Name);\n }\n }\n // Fill with the rest, skipping huge / private fields\n for (const f of fields) {\n if (out.length >= 10) break;\n if (f.IsBinaryFieldType) continue;\n if (this.isExpensiveField(f)) continue;\n push(f.Name);\n }\n return out;\n }\n\n private isExpensiveField(f: EntityFieldInfo): boolean {\n const t = (f.Type ?? '').toLowerCase();\n if (t === 'nvarchar(max)' || t === 'varchar(max)' || t === 'text' || t === 'ntext') return true;\n if (t.includes('blob') || t.includes('binary') || t === 'image' || t === 'varbinary') return true;\n return false;\n }\n\n public ClearEntityFilters(): void {\n this.EntitiesSearch = '';\n this.EntitySchemaFilter = '';\n }\n\n // ---------- Resizable splitters ----------\n\n public OnSplitterDown(event: MouseEvent, kind: 'sidebar' | 'editor'): void {\n event.preventDefault();\n this.resizing = kind;\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n document.body.style.cursor = kind === 'sidebar' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onMouseMove = (e: MouseEvent): void => {\n if (!this.resizing) return;\n const host = this.elementRef.nativeElement as HTMLElement;\n if (this.resizing === 'sidebar') {\n const bodyRect = host.querySelector('.gc-body')?.getBoundingClientRect();\n if (!bodyRect) return;\n const x = e.clientX - bodyRect.left;\n this.SidebarWidthPx = Math.max(200, Math.min(560, x));\n } else if (this.resizing === 'editor') {\n const mainRect = host.querySelector('.gc-main')?.getBoundingClientRect();\n if (!mainRect) return;\n const yPct = ((e.clientY - mainRect.top) / mainRect.height) * 100;\n this.EditorHeightPct = Math.max(20, Math.min(80, yPct));\n }\n this.cdr.markForCheck();\n };\n\n private onMouseUp = (): void => {\n if (!this.resizing) return;\n this.resizing = null;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.detachResizeListeners();\n this.saveToStorage();\n };\n\n private detachResizeListeners(): void {\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n\n public get FormattedSize(): string {\n if (this.ResponseSizeBytes == null) return '';\n const b = this.ResponseSizeBytes;\n if (b < 1024) return `${b} B`;\n if (b < 1024 * 1024) return `${(b / 1024).toFixed(1)} KB`;\n return `${(b / 1024 / 1024).toFixed(2)} MB`;\n }\n\n public TrackByHistory = (_i: number, h: HistoryEntry) => h.id;\n\n // ---------- private ----------\n\n private recordHistory(query: string, variables: string, status: 'ok' | 'error', durationMs: number): void {\n const entry: HistoryEntry = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n query,\n variables,\n timestamp: new Date(),\n durationMs,\n status,\n favorite: false,\n label: this.deriveLabel(query)\n };\n // De-dupe: if last non-favorite entry has the same query+vars, replace it instead of stacking\n const last = this.History[0];\n if (last && !last.favorite && last.query === query && last.variables === variables) {\n this.History[0] = entry;\n } else {\n this.History = [entry, ...this.History];\n }\n // Trim history (preserve favorites)\n if (this.History.length > HISTORY_LIMIT) {\n const favorites = this.History.filter(h => h.favorite);\n const nonFavorites = this.History.filter(h => !h.favorite).slice(0, HISTORY_LIMIT - favorites.length);\n this.History = [...favorites, ...nonFavorites].sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\n }\n this.saveToStorage();\n }\n\n private deriveLabel(query: string): string {\n const m = query.match(/(query|mutation|subscription)\\s+(\\w+)/);\n if (m) return `${m[1]} ${m[2]}`;\n const firstField = query.match(/[\\{\\s](\\w+)\\s*[\\(\\{]/);\n if (firstField) return firstField[1];\n return 'unnamed';\n }\n\n private formatError(err: unknown): string {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: unknown[] }; message?: string };\n if (e.response?.errors) {\n return JSON.stringify({ errors: e.response.errors }, null, 2);\n }\n if (e.message) {\n return JSON.stringify({ error: e.message }, null, 2);\n }\n }\n return JSON.stringify({ error: String(err) }, null, 2);\n }\n\n private extractErrorSummary(err: unknown): string {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: Array<{ message?: string }> }; message?: string };\n if (e.response?.errors?.[0]?.message) return e.response.errors[0].message!;\n if (e.message) return e.message;\n }\n return String(err);\n }\n\n private loadFromStorage(): void {\n const parsed = DevToolsPrefs.Get<{\n history?: HistoryEntry[];\n query?: string;\n variables?: string;\n sidebarTab?: SidebarTab;\n schemaKindFilter?: 'all' | 'query' | 'mutation';\n entitiesSearch?: string;\n entitySchemaFilter?: string;\n sidebarWidthPx?: number;\n editorHeightPct?: number;\n }>(PREFS_KEY);\n if (!parsed) return;\n if (parsed.history) {\n this.History = parsed.history.map(h => ({ ...h, timestamp: new Date(h.timestamp) }));\n }\n if (parsed.query) this.Query = parsed.query;\n if (parsed.variables) this.Variables = parsed.variables;\n if (parsed.sidebarTab) this.SidebarTab = parsed.sidebarTab;\n if (parsed.schemaKindFilter) this.SchemaKindFilter = parsed.schemaKindFilter;\n if (parsed.entitiesSearch) this.EntitiesSearch = parsed.entitiesSearch;\n if (parsed.entitySchemaFilter) this.EntitySchemaFilter = parsed.entitySchemaFilter;\n if (typeof parsed.sidebarWidthPx === 'number') this.SidebarWidthPx = parsed.sidebarWidthPx;\n if (typeof parsed.editorHeightPct === 'number') this.EditorHeightPct = parsed.editorHeightPct;\n }\n\n private saveToStorage(): void {\n DevToolsPrefs.Save(PREFS_KEY, {\n history: this.History,\n query: this.Query,\n variables: this.Variables,\n sidebarTab: this.SidebarTab,\n schemaKindFilter: this.SchemaKindFilter,\n entitiesSearch: this.EntitiesSearch,\n entitySchemaFilter: this.EntitySchemaFilter,\n sidebarWidthPx: this.SidebarWidthPx,\n editorHeightPct: this.EditorHeightPct\n });\n }\n\n // ---------- schema introspection ----------\n\n private async loadSchema(): Promise<void> {\n this.SchemaLoading = true;\n this.SchemaError = null;\n this.SchemaIntrospectionDisabled = false;\n this.cdr.markForCheck();\n try {\n const data = await GraphQLDataProvider.ExecuteGQL(INTROSPECTION_QUERY, null);\n const schema = (data as { __schema?: { queryType?: { name: string }; mutationType?: { name: string } | null; types: IntrospectedType[] } }).__schema;\n if (!schema) throw new Error('No __schema in introspection response');\n\n const queryTypeName = schema.queryType?.name;\n const mutationTypeName = schema.mutationType?.name;\n const ops: SchemaOperation[] = [];\n\n for (const type of schema.types) {\n if (type.name === queryTypeName) {\n for (const f of type.fields ?? []) ops.push(this.toOperation(f, 'query'));\n } else if (type.name === mutationTypeName) {\n for (const f of type.fields ?? []) ops.push(this.toOperation(f, 'mutation'));\n }\n }\n\n ops.sort((a, b) => {\n if (a.kind !== b.kind) return a.kind === 'query' ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n this.Operations = ops;\n this.schemaLoaded = true;\n } catch (err: unknown) {\n // Detect introspection-disabled (Apollo + most servers in production)\n const errStr = this.extractErrorSummary(err);\n const code = this.extractErrorCode(err);\n const looksDisabled =\n code === 'INTROSPECTION_DISABLED' ||\n code === 'GRAPHQL_VALIDATION_FAILED' ||\n /__schema|__type|introspection/i.test(errStr);\n\n if (looksDisabled) {\n this.SchemaIntrospectionDisabled = true;\n this.SchemaError = null;\n } else {\n // Trim huge stack-laden messages — show first 240 chars\n this.SchemaError = errStr.length > 240 ? errStr.slice(0, 240) + '…' : errStr;\n }\n } finally {\n this.SchemaLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n private extractErrorCode(err: unknown): string | undefined {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: Array<{ extensions?: { code?: string } }> } };\n return e.response?.errors?.[0]?.extensions?.code;\n }\n return undefined;\n }\n\n private toOperation(field: IntrospectedField, kind: 'query' | 'mutation'): SchemaOperation {\n const argSummary = field.args.length === 0\n ? ''\n : field.args.map(a => `${a.name}: ${this.typeRefToString(a.type)}`).join(', ');\n return {\n name: field.name,\n kind,\n description: field.description ?? '',\n argSummary,\n returnSummary: this.typeRefToString(field.type),\n field\n };\n }\n\n private typeRefToString(t: IntrospectedTypeRef | null | undefined): string {\n if (!t) return '?';\n if (t.kind === 'NON_NULL') return this.typeRefToString(t.ofType) + '!';\n if (t.kind === 'LIST') return '[' + this.typeRefToString(t.ofType) + ']';\n return t.name ?? '?';\n }\n\n private isObjectReturn(t: IntrospectedTypeRef): boolean {\n let cur: IntrospectedTypeRef | null | undefined = t;\n while (cur && (cur.kind === 'NON_NULL' || cur.kind === 'LIST')) cur = cur.ofType;\n return !!cur && (cur.kind === 'OBJECT' || cur.kind === 'INTERFACE' || cur.kind === 'UNION');\n }\n\n private buildOperationTemplate(op: SchemaOperation): string {\n const opNameUpper = op.name.charAt(0).toUpperCase() + op.name.slice(1);\n const f = op.field;\n\n // Variable declarations + arg passing\n let varDecls = '';\n let argPass = '';\n if (f.args.length > 0) {\n varDecls = '(' + f.args.map(a => `$${a.name}: ${this.typeRefToString(a.type)}`).join(', ') + ')';\n argPass = '(' + f.args.map(a => `${a.name}: $${a.name}`).join(', ') + ')';\n }\n\n const isObject = this.isObjectReturn(f.type);\n const selection = isObject\n ? ' {\\n # TODO: select fields from ' + this.typeRefToString(f.type) + '\\n }'\n : '';\n\n return `${op.kind} ${opNameUpper}${varDecls} {\\n ${op.name}${argPass}${selection}\\n}\\n`;\n }\n}\n\nconst INTROSPECTION_QUERY = `\nquery MJDevToolsIntrospection {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n kind\n name\n description\n fields(includeDeprecated: false) {\n name\n description\n args {\n name\n description\n type { ...TypeRef }\n defaultValue\n }\n type { ...TypeRef }\n }\n }\n }\n}\nfragment TypeRef on __Type {\n kind\n name\n ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n}\n`;\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"GraphQL console\"\n Title=\"GraphQL Console\"\n Subtitle=\"Run queries against the connected MJ API\">\n <div meta>\n @if (ApiUrl) {\n <span class=\"gc-endpoint-meta\">\n <i class=\"fa-solid fa-plug\" aria-hidden=\"true\"></i>\n <code class=\"gc-endpoint\">{{ ApiUrl }}</code>\n </span>\n }\n </div>\n <div actions>\n <button mjButton\n variant=\"secondary\"\n size=\"sm\"\n [toggleable]=\"true\"\n [(selected)]=\"ShowHistory\"\n title=\"Toggle history sidebar\">\n <i class=\"fa-solid fa-clock-rotate-left\" aria-hidden=\"true\"></i> History\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnCopyAsCurl()\" title=\"Copy as cURL command\">\n <i class=\"fa-solid fa-terminal\" aria-hidden=\"true\"></i> Copy cURL\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"gc-body\">\n @if (ShowHistory) {\n <aside class=\"gc-sidebar\" [style.width.px]=\"SidebarWidthPx\">\n <div class=\"gc-sidebar-tabs\">\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'history'\"\n (click)=\"OnSidebarTabChange('history')\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i> History\n </button>\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'entities'\"\n (click)=\"OnSidebarTabChange('entities')\">\n <i class=\"fa-solid fa-table-list\"></i> Entities\n </button>\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'schema'\"\n (click)=\"OnSidebarTabChange('schema')\">\n <i class=\"fa-solid fa-sitemap\"></i> Schema\n </button>\n </div>\n\n @if (SidebarTab === 'history') {\n <div class=\"gc-history-head\">\n <span>{{ History.length }} {{ History.length === 1 ? 'entry' : 'entries' }}</span>\n <button class=\"gc-history-clear\"\n type=\"button\"\n (click)=\"OnClearHistory()\"\n title=\"Clear non-favorite history\">\n <i class=\"fa-solid fa-broom\"></i>\n </button>\n </div>\n @if (History.length === 0) {\n <div class=\"gc-history-empty\">\n <i class=\"fa-regular fa-circle-question\"></i>\n Run a query to see it here. Star <i class=\"fa-solid fa-star\"></i> to keep it.\n </div>\n } @else {\n <div class=\"gc-history-list\">\n @for (h of History; track TrackByHistory($index, h)) {\n <button type=\"button\"\n class=\"gc-history-item\"\n [class.gc-history-item--error]=\"h.status === 'error'\"\n [class.gc-history-item--fav]=\"h.favorite\"\n (click)=\"OnRestoreHistory(h)\">\n <div class=\"gc-history-item-head\">\n <i class=\"gc-history-status\"\n [class.fa-solid]=\"true\"\n [class.fa-circle-check]=\"h.status === 'ok'\"\n [class.fa-circle-xmark]=\"h.status === 'error'\"\n [class.gc-status--ok]=\"h.status === 'ok'\"\n [class.gc-status--err]=\"h.status === 'error'\"></i>\n <span class=\"gc-history-label\">{{ h.label || 'unnamed' }}</span>\n <button class=\"gc-history-fav\"\n type=\"button\"\n (click)=\"OnToggleFavorite(h, $event)\"\n [title]=\"h.favorite ? 'Unfavorite' : 'Favorite'\">\n <i [class]=\"h.favorite ? 'fa-solid fa-star' : 'fa-regular fa-star'\"></i>\n </button>\n <button class=\"gc-history-del\"\n type=\"button\"\n (click)=\"OnDeleteHistory(h, $event)\"\n title=\"Remove from history\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"gc-history-meta\">\n <span>{{ h.timestamp | date:'HH:mm:ss' }}</span>\n @if (h.durationMs != null) {\n <span>·</span>\n <span>{{ h.durationMs }}ms</span>\n }\n </div>\n </button>\n }\n </div>\n }\n } @else if (SidebarTab === 'entities') {\n <div class=\"gc-ent-toolbar\">\n <div class=\"gc-ent-search-wrap\">\n <i class=\"fa-solid fa-search gc-ent-search-icon\"></i>\n <input type=\"search\"\n class=\"gc-ent-search\"\n placeholder=\"Search entities…\"\n [(ngModel)]=\"EntitiesSearch\" />\n </div>\n @if (KnownSchemas.length > 1) {\n <select class=\"gc-ent-schema\" [(ngModel)]=\"EntitySchemaFilter\">\n <option value=\"\">All schemas ({{ KnownSchemas.length }})</option>\n @for (s of KnownSchemas; track s) {\n <option [value]=\"s\">{{ s }}</option>\n }\n </select>\n }\n </div>\n <div class=\"gc-ent-meta\">\n <span>{{ FilteredEntities.length }} of {{ Entities.length }}</span>\n <span class=\"gc-ent-hint\">Click an entity to see operations</span>\n </div>\n <div class=\"gc-ent-list\">\n @for (item of FilteredEntities; track TrackByEntity($index, item)) {\n <div class=\"gc-ent-card\" [class.gc-ent-card--expanded]=\"item.expanded\">\n <button type=\"button\"\n class=\"gc-ent-row\"\n (click)=\"ToggleEntity(item)\">\n <i class=\"fa-solid fa-chevron-right gc-ent-chev\"\n [class.gc-ent-chev--down]=\"item.expanded\"></i>\n <div class=\"gc-ent-info\">\n <div class=\"gc-ent-name\">{{ item.info.Name }}</div>\n <div class=\"gc-ent-meta-row\">\n <code class=\"gc-ent-typename\">{{ item.typeName }}</code>\n <span class=\"gc-ent-schema-badge\">{{ item.schema }}</span>\n </div>\n </div>\n </button>\n @if (item.expanded) {\n <div class=\"gc-ent-actions\">\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--read\"\n (click)=\"OnEntityOp(item, 'view', $event)\"\n title=\"Insert a Run View template (Shift-click to append)\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Run view\n </button>\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--read\"\n (click)=\"OnEntityOp(item, 'byId', $event)\"\n title=\"Fetch a single record by ID (Shift-click to append)\">\n <i class=\"fa-solid fa-fingerprint\"></i>\n Get by ID\n </button>\n @if (item.info.AllowCreateAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--write\"\n (click)=\"OnEntityOp(item, 'create', $event)\"\n title=\"Create a new record (Shift-click to append)\">\n <i class=\"fa-solid fa-plus\"></i>\n Create\n </button>\n }\n @if (item.info.AllowUpdateAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--write\"\n (click)=\"OnEntityOp(item, 'update', $event)\"\n title=\"Update an existing record (Shift-click to append)\">\n <i class=\"fa-solid fa-pen\"></i>\n Update\n </button>\n }\n @if (item.info.AllowDeleteAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--danger\"\n (click)=\"OnEntityOp(item, 'delete', $event)\"\n title=\"Delete a record (Shift-click to append)\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n @if (item.info.Description) {\n <div class=\"gc-ent-desc\">{{ item.info.Description }}</div>\n }\n }\n </div>\n }\n @if (FilteredEntities.length === 0) {\n <div class=\"gc-ent-empty\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No entities match.</span>\n @if (EntitiesSearch || EntitySchemaFilter) {\n <button class=\"gc-ent-clear\" type=\"button\" (click)=\"ClearEntityFilters()\">\n Clear filters\n </button>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"gc-schema-toolbar\">\n <div class=\"gc-schema-search-wrap\">\n <i class=\"fa-solid fa-search gc-schema-search-icon\"></i>\n <input type=\"search\"\n class=\"gc-schema-search\"\n placeholder=\"Search operations…\"\n [(ngModel)]=\"SchemaSearch\" />\n </div>\n <button class=\"gc-schema-reload\"\n type=\"button\"\n (click)=\"OnReloadSchema()\"\n [disabled]=\"SchemaLoading\"\n title=\"Reload schema\">\n <i class=\"fa-solid\" [class.fa-rotate]=\"!SchemaLoading\" [class.fa-spinner]=\"SchemaLoading\" [class.fa-spin]=\"SchemaLoading\"></i>\n </button>\n </div>\n\n @if (Operations.length > 0) {\n <div class=\"gc-schema-kinds\">\n <button type=\"button\"\n class=\"gc-schema-kind\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'all'\"\n (click)=\"SchemaKindFilter = 'all'\">\n All <span>{{ OperationCounts.all }}</span>\n </button>\n <button type=\"button\"\n class=\"gc-schema-kind gc-schema-kind--query\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'query'\"\n (click)=\"SchemaKindFilter = 'query'\">\n <i class=\"fa-solid fa-magnifying-glass\"></i> Query <span>{{ OperationCounts.query }}</span>\n </button>\n <button type=\"button\"\n class=\"gc-schema-kind gc-schema-kind--mutation\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'mutation'\"\n (click)=\"SchemaKindFilter = 'mutation'\">\n <i class=\"fa-solid fa-pen\"></i> Mutation <span>{{ OperationCounts.mutation }}</span>\n </button>\n </div>\n }\n\n @if (SchemaLoading) {\n <div class=\"gc-schema-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Introspecting schema…</span>\n </div>\n } @else if (SchemaIntrospectionDisabled) {\n <div class=\"gc-schema-state gc-schema-disabled\">\n <i class=\"fa-solid fa-lock\"></i>\n <div class=\"gc-schema-disabled-title\">Introspection disabled</div>\n <div class=\"gc-schema-disabled-body\">\n This server has GraphQL introspection turned off (typical in production). Schema browsing isn't available — write queries directly in the editor, or use the History tab to revisit previous queries.\n </div>\n </div>\n } @else if (SchemaError) {\n <div class=\"gc-schema-state gc-schema-state--err\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div class=\"gc-schema-err-title\">Couldn't load schema</div>\n <div class=\"gc-schema-err-body\">{{ SchemaError }}</div>\n </div>\n } @else if (FilteredOperations.length === 0) {\n <div class=\"gc-schema-state\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No operations match.</span>\n </div>\n } @else {\n <div class=\"gc-schema-list\">\n @for (op of FilteredOperations; track TrackByOp($index, op)) {\n <button type=\"button\"\n class=\"gc-schema-op\"\n [class.gc-schema-op--mutation]=\"op.kind === 'mutation'\"\n (click)=\"OnInsertOperation(op, $event)\"\n [title]=\"(op.description || ('Insert ' + op.kind + ' template')) + ' · Shift-click to append'\">\n <div class=\"gc-schema-op-head\">\n <span class=\"gc-schema-op-kind\">{{ op.kind }}</span>\n <span class=\"gc-schema-op-name\">{{ op.name }}</span>\n </div>\n @if (op.argSummary) {\n <div class=\"gc-schema-op-args\">({{ op.argSummary }})</div>\n }\n <div class=\"gc-schema-op-return\">\n <i class=\"fa-solid fa-arrow-right\"></i> {{ op.returnSummary }}\n </div>\n @if (op.description) {\n <div class=\"gc-schema-op-desc\">{{ op.description }}</div>\n }\n </button>\n }\n </div>\n }\n }\n </aside>\n <div class=\"gc-splitter gc-splitter--vert\"\n (mousedown)=\"OnSplitterDown($event, 'sidebar')\"\n title=\"Drag to resize sidebar\"></div>\n }\n\n <div class=\"gc-main\">\n <div class=\"gc-editor-wrap\" [style.flex]=\"'0 0 ' + EditorHeightPct + '%'\">\n <div class=\"gc-editor-head\">\n <span class=\"gc-editor-label\">Query</span>\n <span class=\"gc-editor-hint\">⌘/Ctrl+Enter to run · Shift+click an entity/op to append</span>\n <button class=\"gc-mini-btn\" type=\"button\" (click)=\"OnFormatQuery()\" title=\"Tidy whitespace\">\n <i class=\"fa-solid fa-broom\"></i> Tidy\n </button>\n <button class=\"gc-mini-btn gc-mini-btn--danger\" type=\"button\" (click)=\"OnClearQuery()\" title=\"Clear editor\">\n <i class=\"fa-solid fa-eraser\"></i> Clear\n </button>\n </div>\n <mj-code-editor\n class=\"gc-editor\"\n [(ngModel)]=\"Query\"\n [language]=\"'graphql'\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter your GraphQL query…\">\n </mj-code-editor>\n </div>\n\n <div class=\"gc-splitter gc-splitter--horiz\"\n (mousedown)=\"OnSplitterDown($event, 'editor')\"\n title=\"Drag to resize editor / response\"></div>\n\n <div class=\"gc-vars-wrap\">\n <button class=\"gc-vars-toggle\" type=\"button\" (click)=\"ToggleVariables()\">\n <i class=\"fa-solid fa-chevron-right gc-vars-chev\" [class.gc-vars-chev--down]=\"ShowVariables\"></i>\n Variables\n @if (Variables && Variables.trim() !== '{}' && Variables.trim() !== '') {\n <span class=\"gc-vars-pill\">configured</span>\n }\n </button>\n @if (ShowVariables) {\n <mj-code-editor\n class=\"gc-editor gc-editor--vars\"\n [(ngModel)]=\"Variables\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n placeholder=\"{}\">\n </mj-code-editor>\n }\n </div>\n\n <div class=\"gc-run-bar\">\n <button class=\"gc-run-btn\"\n type=\"button\"\n [disabled]=\"Running\"\n (click)=\"OnRun()\">\n @if (Running) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running…\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run\n }\n </button>\n @if (ResponseStatus !== 'idle') {\n <div class=\"gc-run-meta\">\n @if (ResponseStatus === 'ok') {\n <span class=\"gc-status-badge gc-status-badge--ok\">\n <i class=\"fa-solid fa-circle-check\"></i> 200 OK\n </span>\n } @else {\n <span class=\"gc-status-badge gc-status-badge--err\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error\n </span>\n }\n @if (ResponseDurationMs != null) {\n <span class=\"gc-meta-pill\"><i class=\"fa-regular fa-clock\"></i> {{ ResponseDurationMs }}ms</span>\n }\n @if (ResponseSizeBytes != null) {\n <span class=\"gc-meta-pill\"><i class=\"fa-solid fa-database\"></i> {{ FormattedSize }}</span>\n }\n </div>\n }\n <span class=\"gc-spacer\"></span>\n @if (ResponseJson) {\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopyResponse()\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n }\n </div>\n\n <div class=\"gc-response-wrap\">\n <div class=\"gc-response-head\">\n <span class=\"gc-editor-label\">Response</span>\n </div>\n @if (ErrorMessage && !ResponseJson) {\n <div class=\"gc-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n } @else if (ResponseJson) {\n @if (ErrorMessage) {\n <div class=\"gc-error gc-error--inline\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n <pre class=\"gc-response\"><code>{{ ResponseJson }}</code></pre>\n } @else {\n <div class=\"gc-empty\">\n <i class=\"fa-solid fa-arrow-up-from-bracket\"></i>\n <span>Run a query to see results here.</span>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"graphql-console.component.js","sourceRoot":"","sources":["../../src/DevTools/graphql-console.component.ts","../../src/DevTools/graphql-console.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ElementRef, ViewChild, HostListener, inject } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { EntityInfo, EntityFieldInfo, getGraphQLTypeNameBase } from '@memberjunction/core';\nimport { GraphQLDataProvider, FieldMapper } from '@memberjunction/graphql-dataprovider';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface HistoryEntry {\n id: string;\n query: string;\n variables: string;\n timestamp: Date;\n durationMs?: number;\n status: 'ok' | 'error' | 'pending';\n favorite: boolean;\n label?: string;\n}\n\n/** GraphQL introspection — minimal subset sufficient for the explorer. */\ninterface IntrospectedTypeRef {\n kind: 'NON_NULL' | 'LIST' | 'SCALAR' | 'OBJECT' | 'ENUM' | 'INPUT_OBJECT' | 'INTERFACE' | 'UNION' | string;\n name: string | null;\n ofType?: IntrospectedTypeRef | null;\n}\ninterface IntrospectedArg {\n name: string;\n description?: string | null;\n type: IntrospectedTypeRef;\n defaultValue?: string | null;\n}\ninterface IntrospectedField {\n name: string;\n description?: string | null;\n args: IntrospectedArg[];\n type: IntrospectedTypeRef;\n}\ninterface IntrospectedType {\n kind: string;\n name: string;\n description?: string | null;\n fields?: IntrospectedField[] | null;\n}\ninterface SchemaOperation {\n name: string;\n kind: 'query' | 'mutation';\n description: string;\n argSummary: string;\n returnSummary: string;\n field: IntrospectedField;\n}\n\ntype SidebarTab = 'history' | 'schema' | 'entities';\ntype EntityOpKind = 'view' | 'byId' | 'create' | 'update' | 'delete';\n\ninterface EntityListItem {\n info: EntityInfo;\n typeName: string;\n schema: string;\n /** True when this entity is currently expanded showing operation buttons. */\n expanded: boolean;\n}\n\nconst PREFS_KEY = 'graphqlConsole';\nconst HISTORY_LIMIT = 30;\n\nconst SAMPLE_QUERY = `# Welcome to the GraphQL Console\n# Press Cmd/Ctrl+Enter to run.\n# Authentication is handled by the active GraphQL provider.\n\nquery GetCurrentUser {\n CurrentUser {\n ID\n Name\n Email\n }\n}\n`;\n\n/**\n * GraphQL Console — write and run arbitrary GraphQL queries against the\n * connected MJ API. Re-uses the active GraphQLDataProvider client (auth +\n * session intact). Local history with copy / favorite / replay; copy-as-curl;\n * keyboard shortcut (Cmd/Ctrl+Enter) to run.\n */\n@RegisterClass(BaseResourceComponent, 'GraphQLConsoleInspector')\n@Component({\n standalone: false,\n selector: 'mj-graphql-console',\n templateUrl: './graphql-console.component.html',\n styleUrls: ['./inspector-shared.css', './graphql-console.component.css']\n})\nexport class GraphQLConsoleComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n @ViewChild('queryEditor') queryEditor?: ElementRef<HTMLTextAreaElement>;\n\n public Query = SAMPLE_QUERY;\n public Variables = '{}';\n public ShowVariables = false;\n\n public Running = false;\n public ResponseJson = '';\n public ResponseStatus: 'ok' | 'error' | 'idle' = 'idle';\n public ResponseDurationMs: number | null = null;\n public ResponseSizeBytes: number | null = null;\n public ErrorMessage: string | null = null;\n\n public History: HistoryEntry[] = [];\n public ShowHistory = true;\n public CopyConfirmed = false;\n\n public ApiUrl = '';\n\n // Schema explorer state\n public SidebarTab: SidebarTab = 'history';\n public SchemaLoading = false;\n public SchemaError: string | null = null;\n public SchemaIntrospectionDisabled = false;\n public SchemaSearch = '';\n public SchemaKindFilter: 'all' | 'query' | 'mutation' = 'all';\n public Operations: SchemaOperation[] = [];\n private schemaLoaded = false;\n\n // Entities tab state\n public EntitiesSearch = '';\n public Entities: EntityListItem[] = [];\n public EntitySchemaFilter = ''; // '' = all\n public KnownSchemas: string[] = [];\n\n // Pane sizing (resizable splitters)\n public SidebarWidthPx = 280;\n public EditorHeightPct = 50; // % of main pane height for editor (50/50 split default)\n private resizing: 'sidebar' | 'editor' | null = null;\n private elementRef = inject(ElementRef);\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.loadFromStorage();\n try {\n this.ApiUrl = GraphQLDataProvider.Instance.ConfigData?.URL ?? '';\n } catch { /* not configured */ }\n this.loadEntities();\n this.NotifyLoadComplete();\n }\n\n public ngOnDestroy(): void {\n this.saveToStorage();\n this.detachResizeListeners();\n }\n\n private loadEntities(): void {\n try {\n const md = this.ProviderToUse;\n if (!md) return;\n const items: EntityListItem[] = (md.Entities ?? []).map(e => ({\n info: e,\n typeName: getGraphQLTypeNameBase(e),\n schema: e.SchemaName ?? '(unknown)',\n expanded: false\n })).sort((a, b) => a.info.Name.localeCompare(b.info.Name));\n this.Entities = items;\n const schemas = new Set<string>();\n for (const i of items) schemas.add(i.schema);\n this.KnownSchemas = Array.from(schemas).sort();\n } catch { /* metadata not ready */ }\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'GraphQL Console'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-code'; }\n\n @HostListener('keydown', ['$event'])\n public OnHostKeydown(event: KeyboardEvent): void {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') {\n event.preventDefault();\n void this.OnRun();\n }\n }\n\n public async OnRun(): Promise<void> {\n const trimmedQuery = this.Query.trim();\n if (!trimmedQuery) {\n this.ErrorMessage = 'Query is empty.';\n return;\n }\n let parsedVars: Record<string, unknown> | null = null;\n if (this.Variables.trim()) {\n try {\n parsedVars = JSON.parse(this.Variables);\n } catch (err) {\n this.ResponseStatus = 'error';\n this.ErrorMessage = 'Variables must be valid JSON: ' + (err instanceof Error ? err.message : String(err));\n this.ResponseJson = '';\n this.cdr.markForCheck();\n return;\n }\n }\n\n this.Running = true;\n this.ErrorMessage = null;\n this.ResponseStatus = 'idle';\n this.ResponseJson = '';\n this.cdr.markForCheck();\n\n const start = performance.now();\n try {\n const data = await GraphQLDataProvider.ExecuteGQL(trimmedQuery, parsedVars);\n const elapsed = performance.now() - start;\n const text = JSON.stringify(data, null, 2);\n this.ResponseJson = text;\n this.ResponseStatus = 'ok';\n this.ResponseDurationMs = Math.round(elapsed);\n this.ResponseSizeBytes = new Blob([text]).size;\n this.recordHistory(trimmedQuery, this.Variables, 'ok', this.ResponseDurationMs);\n } catch (err: unknown) {\n const elapsed = performance.now() - start;\n this.ResponseStatus = 'error';\n this.ResponseDurationMs = Math.round(elapsed);\n const formatted = this.formatError(err);\n this.ResponseJson = formatted;\n this.ResponseSizeBytes = new Blob([formatted]).size;\n this.ErrorMessage = this.extractErrorSummary(err);\n this.recordHistory(trimmedQuery, this.Variables, 'error', this.ResponseDurationMs);\n } finally {\n this.Running = false;\n this.cdr.markForCheck();\n }\n }\n\n public OnRestoreHistory(entry: HistoryEntry): void {\n this.Query = entry.query;\n this.Variables = entry.variables;\n if (entry.variables.trim() && entry.variables.trim() !== '{}') {\n this.ShowVariables = true;\n }\n this.cdr.markForCheck();\n }\n\n public OnToggleFavorite(entry: HistoryEntry, event: Event): void {\n event.stopPropagation();\n entry.favorite = !entry.favorite;\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public OnDeleteHistory(entry: HistoryEntry, event: Event): void {\n event.stopPropagation();\n this.History = this.History.filter(h => h.id !== entry.id);\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public OnClearHistory(): void {\n // Keep favorites\n this.History = this.History.filter(h => h.favorite);\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public async OnCopyResponse(): Promise<void> {\n if (!this.ResponseJson) return;\n try {\n await navigator.clipboard.writeText(this.ResponseJson);\n this.CopyConfirmed = true;\n setTimeout(() => { this.CopyConfirmed = false; this.cdr.markForCheck(); }, 1800);\n this.cdr.markForCheck();\n } catch { /* unavailable */ }\n }\n\n public async OnCopyAsCurl(): Promise<void> {\n const url = this.ApiUrl || '<API_URL>';\n const body = JSON.stringify({\n query: this.Query.trim(),\n variables: this.Variables.trim() ? JSON.parse(this.Variables) : null\n });\n const escaped = body.replace(/'/g, `'\\\\''`);\n const curl = [\n `curl -X POST '${url}'`,\n ` -H 'Content-Type: application/json'`,\n ` -H 'Authorization: Bearer <YOUR_TOKEN>'`,\n ` -d '${escaped}'`\n ].join(' \\\\\\n');\n try { await navigator.clipboard.writeText(curl); } catch { /* unavailable */ }\n }\n\n public OnFormatQuery(): void {\n // Tiny pretty-printer: collapse multiple blank lines + trim trailing whitespace\n this.Query = this.Query\n .split('\\n')\n .map(line => line.replace(/\\s+$/, ''))\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim() + '\\n';\n }\n\n public ToggleHistoryPanel(): void {\n this.ShowHistory = !this.ShowHistory;\n }\n\n public ToggleVariables(): void {\n this.ShowVariables = !this.ShowVariables;\n }\n\n public OnSidebarTabChange(tab: SidebarTab): void {\n this.SidebarTab = tab;\n this.saveToStorage();\n if (tab === 'schema' && !this.schemaLoaded && !this.SchemaLoading) {\n void this.loadSchema();\n }\n }\n\n public async OnReloadSchema(): Promise<void> {\n this.schemaLoaded = false;\n await this.loadSchema();\n }\n\n public OnInsertOperation(op: SchemaOperation, event?: MouseEvent): void {\n const template = this.buildOperationTemplate(op);\n this.insertTemplate(template, !!event?.shiftKey);\n }\n\n public OnClearQuery(): void {\n this.Query = '';\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public get FilteredOperations(): SchemaOperation[] {\n const q = this.SchemaSearch.trim().toLowerCase();\n return this.Operations.filter(op => {\n if (this.SchemaKindFilter !== 'all' && op.kind !== this.SchemaKindFilter) return false;\n if (!q) return true;\n return op.name.toLowerCase().includes(q)\n || op.returnSummary.toLowerCase().includes(q)\n || op.description.toLowerCase().includes(q);\n });\n }\n\n public get OperationCounts(): { all: number; query: number; mutation: number } {\n const q = this.Operations.filter(o => o.kind === 'query').length;\n const m = this.Operations.filter(o => o.kind === 'mutation').length;\n return { all: this.Operations.length, query: q, mutation: m };\n }\n\n public TrackByOp = (_i: number, o: SchemaOperation) => o.kind + ':' + o.name;\n\n // ---------- Entities tab ----------\n\n public TrackByEntity = (_i: number, e: EntityListItem) => e.info.ID;\n\n public get FilteredEntities(): EntityListItem[] {\n const q = this.EntitiesSearch.trim().toLowerCase();\n return this.Entities.filter(e => {\n if (this.EntitySchemaFilter && e.schema !== this.EntitySchemaFilter) return false;\n if (!q) return true;\n return e.info.Name.toLowerCase().includes(q)\n || e.typeName.toLowerCase().includes(q)\n || e.schema.toLowerCase().includes(q)\n || (e.info.Description ?? '').toLowerCase().includes(q);\n });\n }\n\n public ToggleEntity(e: EntityListItem): void {\n e.expanded = !e.expanded;\n }\n\n public OnEntityOp(item: EntityListItem, op: EntityOpKind, event: MouseEvent): void {\n event.stopPropagation();\n const template = this.buildEntityOpTemplate(item, op);\n this.insertTemplate(template, !!event.shiftKey);\n }\n\n /**\n * Default: replace the editor contents with the new template.\n * Shift-click: append to the end (with a blank-line separator) so the\n * user can stage multiple operations in one document.\n */\n private insertTemplate(template: string, append: boolean): void {\n const trimmed = this.Query.trimEnd();\n const isFresh = trimmed.length === 0 || trimmed === SAMPLE_QUERY.trimEnd();\n if (append && !isFresh) {\n this.Query = trimmed + '\\n\\n' + template;\n } else {\n this.Query = template;\n }\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n private buildEntityOpTemplate(item: EntityListItem, op: EntityOpKind): string {\n const e = item.info;\n const typeName = item.typeName;\n const mapper = new FieldMapper();\n const fieldList = this.pickRepresentativeFields(e).map(name => {\n const mapped = mapper.MapFieldName(name);\n // Annotate any remapped fields so users see why the GraphQL field\n // name differs from the database column. (`__` is reserved by the\n // GraphQL spec, so MJ rewrites `__mj_*` columns to `_mj__*` over\n // the wire.)\n return mapped === name ? mapped : `${mapped} # from ${name}`;\n });\n const fieldSelection = fieldList.join('\\n ');\n const pkField = mapper.MapFieldName(e.PrimaryKeys?.[0]?.Name ?? 'ID');\n\n switch (op) {\n case 'view':\n return `# Run a dynamic view over ${e.Name}\nquery Run${typeName}DynamicView {\n Run${typeName}DynamicView(input: {\n EntityName: \"${e.Name}\"\n ExtraFilter: \"\"\n OrderBy: \"\"\n UserSearchString: \"\"\n Fields: null\n MaxRows: 100\n StartRow: 0\n IgnoreMaxRows: false\n ForceAuditLog: false\n ResultType: \"simple\"\n }) {\n Success\n RowCount\n TotalRowCount\n ExecutionTime\n ErrorMessage\n Results {\n ${fieldSelection}\n }\n }\n}\n`;\n case 'byId':\n return `# Fetch a single ${e.Name} record by primary key\nquery Run${typeName}ByID($id: String!) {\n Run${typeName}DynamicView(input: {\n EntityName: \"${e.Name}\"\n ExtraFilter: \"${pkField}='\" + $id + \"'\"\n Fields: null\n MaxRows: 1\n StartRow: 0\n IgnoreMaxRows: false\n ForceAuditLog: false\n ResultType: \"simple\"\n OrderBy: \"\"\n UserSearchString: \"\"\n }) {\n Success\n Results {\n ${fieldSelection}\n }\n }\n}\n\n# Variables (paste into the Variables panel):\n# { \"id\": \"<your-id-here>\" }\n`;\n case 'create':\n return `# Create a new ${e.Name}\nmutation Create${typeName}($input: Create${typeName}Input!) {\n Create${typeName}(input: $input) {\n ${fieldSelection}\n }\n}\n\n# Variables — populate the writable fields, then Run\n# {\n# \"input\": {\n# # required + writable fields go here\n# }\n# }\n`;\n case 'update':\n return `# Update an existing ${e.Name}\nmutation Update${typeName}($input: Update${typeName}Input!) {\n Update${typeName}(input: $input) {\n ${fieldSelection}\n }\n}\n\n# Variables — must include the primary key (${pkField})\n# {\n# \"input\": {\n# \"${pkField}\": \"<id-here>\"\n# # ...changed fields\n# }\n# }\n`;\n case 'delete':\n return `# Delete a ${e.Name}\nmutation Delete${typeName}($input: Delete${typeName}Input!) {\n Delete${typeName}(input: $input) {\n ${pkField}\n }\n}\n\n# Variables:\n# { \"input\": { \"${pkField}\": \"<id-here>\" } }\n`;\n }\n }\n\n /** Pick the first ~10 displayable fields, prioritizing primary key and common fields. */\n private pickRepresentativeFields(e: EntityInfo): string[] {\n const fields = e.Fields ?? [];\n if (fields.length === 0) return ['ID'];\n const out: string[] = [];\n const seen = new Set<string>();\n const push = (n: string) => { if (n && !seen.has(n)) { seen.add(n); out.push(n); } };\n\n for (const f of fields) {\n if (f.IsPrimaryKey) push(f.Name);\n }\n // Prefer common, lightweight fields\n for (const f of fields) {\n if (out.length >= 10) break;\n if (f.IsBinaryFieldType) continue;\n const lower = f.Name.toLowerCase();\n if (lower === 'name' || lower === 'description' || lower === 'status' || lower === 'type') {\n push(f.Name);\n }\n }\n // Fill with the rest, skipping huge / private fields\n for (const f of fields) {\n if (out.length >= 10) break;\n if (f.IsBinaryFieldType) continue;\n if (this.isExpensiveField(f)) continue;\n push(f.Name);\n }\n return out;\n }\n\n private isExpensiveField(f: EntityFieldInfo): boolean {\n const t = (f.Type ?? '').toLowerCase();\n if (t === 'nvarchar(max)' || t === 'varchar(max)' || t === 'text' || t === 'ntext') return true;\n if (t.includes('blob') || t.includes('binary') || t === 'image' || t === 'varbinary') return true;\n return false;\n }\n\n public ClearEntityFilters(): void {\n this.EntitiesSearch = '';\n this.EntitySchemaFilter = '';\n }\n\n // ---------- Resizable splitters ----------\n\n public OnSplitterDown(event: MouseEvent, kind: 'sidebar' | 'editor'): void {\n event.preventDefault();\n this.resizing = kind;\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n document.body.style.cursor = kind === 'sidebar' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onMouseMove = (e: MouseEvent): void => {\n if (!this.resizing) return;\n const host = this.elementRef.nativeElement as HTMLElement;\n if (this.resizing === 'sidebar') {\n const bodyRect = host.querySelector('.gc-body')?.getBoundingClientRect();\n if (!bodyRect) return;\n const x = e.clientX - bodyRect.left;\n this.SidebarWidthPx = Math.max(200, Math.min(560, x));\n } else if (this.resizing === 'editor') {\n const mainRect = host.querySelector('.gc-main')?.getBoundingClientRect();\n if (!mainRect) return;\n const yPct = ((e.clientY - mainRect.top) / mainRect.height) * 100;\n this.EditorHeightPct = Math.max(20, Math.min(80, yPct));\n }\n this.cdr.markForCheck();\n };\n\n private onMouseUp = (): void => {\n if (!this.resizing) return;\n this.resizing = null;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.detachResizeListeners();\n this.saveToStorage();\n };\n\n private detachResizeListeners(): void {\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n\n public get FormattedSize(): string {\n if (this.ResponseSizeBytes == null) return '';\n const b = this.ResponseSizeBytes;\n if (b < 1024) return `${b} B`;\n if (b < 1024 * 1024) return `${(b / 1024).toFixed(1)} KB`;\n return `${(b / 1024 / 1024).toFixed(2)} MB`;\n }\n\n public TrackByHistory = (_i: number, h: HistoryEntry) => h.id;\n\n // ---------- private ----------\n\n private recordHistory(query: string, variables: string, status: 'ok' | 'error', durationMs: number): void {\n const entry: HistoryEntry = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n query,\n variables,\n timestamp: new Date(),\n durationMs,\n status,\n favorite: false,\n label: this.deriveLabel(query)\n };\n // De-dupe: if last non-favorite entry has the same query+vars, replace it instead of stacking\n const last = this.History[0];\n if (last && !last.favorite && last.query === query && last.variables === variables) {\n this.History[0] = entry;\n } else {\n this.History = [entry, ...this.History];\n }\n // Trim history (preserve favorites)\n if (this.History.length > HISTORY_LIMIT) {\n const favorites = this.History.filter(h => h.favorite);\n const nonFavorites = this.History.filter(h => !h.favorite).slice(0, HISTORY_LIMIT - favorites.length);\n this.History = [...favorites, ...nonFavorites].sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\n }\n this.saveToStorage();\n }\n\n private deriveLabel(query: string): string {\n const m = query.match(/(query|mutation|subscription)\\s+(\\w+)/);\n if (m) return `${m[1]} ${m[2]}`;\n const firstField = query.match(/[\\{\\s](\\w+)\\s*[\\(\\{]/);\n if (firstField) return firstField[1];\n return 'unnamed';\n }\n\n private formatError(err: unknown): string {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: unknown[] }; message?: string };\n if (e.response?.errors) {\n return JSON.stringify({ errors: e.response.errors }, null, 2);\n }\n if (e.message) {\n return JSON.stringify({ error: e.message }, null, 2);\n }\n }\n return JSON.stringify({ error: String(err) }, null, 2);\n }\n\n private extractErrorSummary(err: unknown): string {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: Array<{ message?: string }> }; message?: string };\n if (e.response?.errors?.[0]?.message) return e.response.errors[0].message!;\n if (e.message) return e.message;\n }\n return String(err);\n }\n\n private loadFromStorage(): void {\n const parsed = DevToolsPrefs.Get<{\n history?: HistoryEntry[];\n query?: string;\n variables?: string;\n sidebarTab?: SidebarTab;\n schemaKindFilter?: 'all' | 'query' | 'mutation';\n entitiesSearch?: string;\n entitySchemaFilter?: string;\n sidebarWidthPx?: number;\n editorHeightPct?: number;\n }>(PREFS_KEY);\n if (!parsed) return;\n if (parsed.history) {\n this.History = parsed.history.map(h => ({ ...h, timestamp: new Date(h.timestamp) }));\n }\n if (parsed.query) this.Query = parsed.query;\n if (parsed.variables) this.Variables = parsed.variables;\n if (parsed.sidebarTab) this.SidebarTab = parsed.sidebarTab;\n if (parsed.schemaKindFilter) this.SchemaKindFilter = parsed.schemaKindFilter;\n if (parsed.entitiesSearch) this.EntitiesSearch = parsed.entitiesSearch;\n if (parsed.entitySchemaFilter) this.EntitySchemaFilter = parsed.entitySchemaFilter;\n if (typeof parsed.sidebarWidthPx === 'number') this.SidebarWidthPx = parsed.sidebarWidthPx;\n if (typeof parsed.editorHeightPct === 'number') this.EditorHeightPct = parsed.editorHeightPct;\n }\n\n private saveToStorage(): void {\n DevToolsPrefs.Save(PREFS_KEY, {\n history: this.History,\n query: this.Query,\n variables: this.Variables,\n sidebarTab: this.SidebarTab,\n schemaKindFilter: this.SchemaKindFilter,\n entitiesSearch: this.EntitiesSearch,\n entitySchemaFilter: this.EntitySchemaFilter,\n sidebarWidthPx: this.SidebarWidthPx,\n editorHeightPct: this.EditorHeightPct\n });\n }\n\n // ---------- schema introspection ----------\n\n private async loadSchema(): Promise<void> {\n this.SchemaLoading = true;\n this.SchemaError = null;\n this.SchemaIntrospectionDisabled = false;\n this.cdr.markForCheck();\n try {\n const data = await GraphQLDataProvider.ExecuteGQL(INTROSPECTION_QUERY, null);\n const schema = (data as { __schema?: { queryType?: { name: string }; mutationType?: { name: string } | null; types: IntrospectedType[] } }).__schema;\n if (!schema) throw new Error('No __schema in introspection response');\n\n const queryTypeName = schema.queryType?.name;\n const mutationTypeName = schema.mutationType?.name;\n const ops: SchemaOperation[] = [];\n\n for (const type of schema.types) {\n if (type.name === queryTypeName) {\n for (const f of type.fields ?? []) ops.push(this.toOperation(f, 'query'));\n } else if (type.name === mutationTypeName) {\n for (const f of type.fields ?? []) ops.push(this.toOperation(f, 'mutation'));\n }\n }\n\n ops.sort((a, b) => {\n if (a.kind !== b.kind) return a.kind === 'query' ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n this.Operations = ops;\n this.schemaLoaded = true;\n } catch (err: unknown) {\n // Detect introspection-disabled (Apollo + most servers in production)\n const errStr = this.extractErrorSummary(err);\n const code = this.extractErrorCode(err);\n const looksDisabled =\n code === 'INTROSPECTION_DISABLED' ||\n code === 'GRAPHQL_VALIDATION_FAILED' ||\n /__schema|__type|introspection/i.test(errStr);\n\n if (looksDisabled) {\n this.SchemaIntrospectionDisabled = true;\n this.SchemaError = null;\n } else {\n // Trim huge stack-laden messages — show first 240 chars\n this.SchemaError = errStr.length > 240 ? errStr.slice(0, 240) + '…' : errStr;\n }\n } finally {\n this.SchemaLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n private extractErrorCode(err: unknown): string | undefined {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: Array<{ extensions?: { code?: string } }> } };\n return e.response?.errors?.[0]?.extensions?.code;\n }\n return undefined;\n }\n\n private toOperation(field: IntrospectedField, kind: 'query' | 'mutation'): SchemaOperation {\n const argSummary = field.args.length === 0\n ? ''\n : field.args.map(a => `${a.name}: ${this.typeRefToString(a.type)}`).join(', ');\n return {\n name: field.name,\n kind,\n description: field.description ?? '',\n argSummary,\n returnSummary: this.typeRefToString(field.type),\n field\n };\n }\n\n private typeRefToString(t: IntrospectedTypeRef | null | undefined): string {\n if (!t) return '?';\n if (t.kind === 'NON_NULL') return this.typeRefToString(t.ofType) + '!';\n if (t.kind === 'LIST') return '[' + this.typeRefToString(t.ofType) + ']';\n return t.name ?? '?';\n }\n\n private isObjectReturn(t: IntrospectedTypeRef): boolean {\n let cur: IntrospectedTypeRef | null | undefined = t;\n while (cur && (cur.kind === 'NON_NULL' || cur.kind === 'LIST')) cur = cur.ofType;\n return !!cur && (cur.kind === 'OBJECT' || cur.kind === 'INTERFACE' || cur.kind === 'UNION');\n }\n\n private buildOperationTemplate(op: SchemaOperation): string {\n const opNameUpper = op.name.charAt(0).toUpperCase() + op.name.slice(1);\n const f = op.field;\n\n // Variable declarations + arg passing\n let varDecls = '';\n let argPass = '';\n if (f.args.length > 0) {\n varDecls = '(' + f.args.map(a => `$${a.name}: ${this.typeRefToString(a.type)}`).join(', ') + ')';\n argPass = '(' + f.args.map(a => `${a.name}: $${a.name}`).join(', ') + ')';\n }\n\n const isObject = this.isObjectReturn(f.type);\n const selection = isObject\n ? ' {\\n # TODO: select fields from ' + this.typeRefToString(f.type) + '\\n }'\n : '';\n\n return `${op.kind} ${opNameUpper}${varDecls} {\\n ${op.name}${argPass}${selection}\\n}\\n`;\n }\n}\n\nconst INTROSPECTION_QUERY = `\nquery MJDevToolsIntrospection {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n kind\n name\n description\n fields(includeDeprecated: false) {\n name\n description\n args {\n name\n description\n type { ...TypeRef }\n defaultValue\n }\n type { ...TypeRef }\n }\n }\n }\n}\nfragment TypeRef on __Type {\n kind\n name\n ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n}\n`;\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"GraphQL console\"\n Title=\"GraphQL Console\"\n Subtitle=\"Run queries against the connected MJ API\">\n <div meta>\n @if (ApiUrl) {\n <span class=\"gc-endpoint-meta\">\n <i class=\"fa-solid fa-plug\" aria-hidden=\"true\"></i>\n <code class=\"gc-endpoint\">{{ ApiUrl }}</code>\n </span>\n }\n </div>\n <div actions>\n <button mjButton\n variant=\"secondary\"\n size=\"sm\"\n [toggleable]=\"true\"\n [(selected)]=\"ShowHistory\"\n title=\"Toggle history sidebar\">\n <i class=\"fa-solid fa-clock-rotate-left\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">History</span>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnCopyAsCurl()\" title=\"Copy as cURL command\">\n <i class=\"fa-solid fa-terminal\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Copy cURL</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"gc-body\">\n @if (ShowHistory) {\n <aside class=\"gc-sidebar\" [style.width.px]=\"SidebarWidthPx\">\n <div class=\"gc-sidebar-tabs\">\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'history'\"\n (click)=\"OnSidebarTabChange('history')\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i> History\n </button>\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'entities'\"\n (click)=\"OnSidebarTabChange('entities')\">\n <i class=\"fa-solid fa-table-list\"></i> Entities\n </button>\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'schema'\"\n (click)=\"OnSidebarTabChange('schema')\">\n <i class=\"fa-solid fa-sitemap\"></i> Schema\n </button>\n </div>\n\n @if (SidebarTab === 'history') {\n <div class=\"gc-history-head\">\n <span>{{ History.length }} {{ History.length === 1 ? 'entry' : 'entries' }}</span>\n <button class=\"gc-history-clear\"\n type=\"button\"\n (click)=\"OnClearHistory()\"\n title=\"Clear non-favorite history\">\n <i class=\"fa-solid fa-broom\"></i>\n </button>\n </div>\n @if (History.length === 0) {\n <div class=\"gc-history-empty\">\n <i class=\"fa-regular fa-circle-question\"></i>\n Run a query to see it here. Star <i class=\"fa-solid fa-star\"></i> to keep it.\n </div>\n } @else {\n <div class=\"gc-history-list\">\n @for (h of History; track TrackByHistory($index, h)) {\n <button type=\"button\"\n class=\"gc-history-item\"\n [class.gc-history-item--error]=\"h.status === 'error'\"\n [class.gc-history-item--fav]=\"h.favorite\"\n (click)=\"OnRestoreHistory(h)\">\n <div class=\"gc-history-item-head\">\n <i class=\"gc-history-status\"\n [class.fa-solid]=\"true\"\n [class.fa-circle-check]=\"h.status === 'ok'\"\n [class.fa-circle-xmark]=\"h.status === 'error'\"\n [class.gc-status--ok]=\"h.status === 'ok'\"\n [class.gc-status--err]=\"h.status === 'error'\"></i>\n <span class=\"gc-history-label\">{{ h.label || 'unnamed' }}</span>\n <button class=\"gc-history-fav\"\n type=\"button\"\n (click)=\"OnToggleFavorite(h, $event)\"\n [title]=\"h.favorite ? 'Unfavorite' : 'Favorite'\">\n <i [class]=\"h.favorite ? 'fa-solid fa-star' : 'fa-regular fa-star'\"></i>\n </button>\n <button class=\"gc-history-del\"\n type=\"button\"\n (click)=\"OnDeleteHistory(h, $event)\"\n title=\"Remove from history\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"gc-history-meta\">\n <span>{{ h.timestamp | date:'HH:mm:ss' }}</span>\n @if (h.durationMs != null) {\n <span>·</span>\n <span>{{ h.durationMs }}ms</span>\n }\n </div>\n </button>\n }\n </div>\n }\n } @else if (SidebarTab === 'entities') {\n <div class=\"gc-ent-toolbar\">\n <div class=\"gc-ent-search-wrap\">\n <i class=\"fa-solid fa-search gc-ent-search-icon\"></i>\n <input type=\"search\"\n class=\"gc-ent-search\"\n placeholder=\"Search entities…\"\n [(ngModel)]=\"EntitiesSearch\" />\n </div>\n @if (KnownSchemas.length > 1) {\n <select class=\"gc-ent-schema\" [(ngModel)]=\"EntitySchemaFilter\">\n <option value=\"\">All schemas ({{ KnownSchemas.length }})</option>\n @for (s of KnownSchemas; track s) {\n <option [value]=\"s\">{{ s }}</option>\n }\n </select>\n }\n </div>\n <div class=\"gc-ent-meta\">\n <span>{{ FilteredEntities.length }} of {{ Entities.length }}</span>\n <span class=\"gc-ent-hint\">Click an entity to see operations</span>\n </div>\n <div class=\"gc-ent-list\">\n @for (item of FilteredEntities; track TrackByEntity($index, item)) {\n <div class=\"gc-ent-card\" [class.gc-ent-card--expanded]=\"item.expanded\">\n <button type=\"button\"\n class=\"gc-ent-row\"\n (click)=\"ToggleEntity(item)\">\n <i class=\"fa-solid fa-chevron-right gc-ent-chev\"\n [class.gc-ent-chev--down]=\"item.expanded\"></i>\n <div class=\"gc-ent-info\">\n <div class=\"gc-ent-name\">{{ item.info.Name }}</div>\n <div class=\"gc-ent-meta-row\">\n <code class=\"gc-ent-typename\">{{ item.typeName }}</code>\n <span class=\"gc-ent-schema-badge\">{{ item.schema }}</span>\n </div>\n </div>\n </button>\n @if (item.expanded) {\n <div class=\"gc-ent-actions\">\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--read\"\n (click)=\"OnEntityOp(item, 'view', $event)\"\n title=\"Insert a Run View template (Shift-click to append)\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Run view\n </button>\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--read\"\n (click)=\"OnEntityOp(item, 'byId', $event)\"\n title=\"Fetch a single record by ID (Shift-click to append)\">\n <i class=\"fa-solid fa-fingerprint\"></i>\n Get by ID\n </button>\n @if (item.info.AllowCreateAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--write\"\n (click)=\"OnEntityOp(item, 'create', $event)\"\n title=\"Create a new record (Shift-click to append)\">\n <i class=\"fa-solid fa-plus\"></i>\n Create\n </button>\n }\n @if (item.info.AllowUpdateAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--write\"\n (click)=\"OnEntityOp(item, 'update', $event)\"\n title=\"Update an existing record (Shift-click to append)\">\n <i class=\"fa-solid fa-pen\"></i>\n Update\n </button>\n }\n @if (item.info.AllowDeleteAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--danger\"\n (click)=\"OnEntityOp(item, 'delete', $event)\"\n title=\"Delete a record (Shift-click to append)\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n @if (item.info.Description) {\n <div class=\"gc-ent-desc\">{{ item.info.Description }}</div>\n }\n }\n </div>\n }\n @if (FilteredEntities.length === 0) {\n <div class=\"gc-ent-empty\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No entities match.</span>\n @if (EntitiesSearch || EntitySchemaFilter) {\n <button class=\"gc-ent-clear\" type=\"button\" (click)=\"ClearEntityFilters()\">\n Clear filters\n </button>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"gc-schema-toolbar\">\n <div class=\"gc-schema-search-wrap\">\n <i class=\"fa-solid fa-search gc-schema-search-icon\"></i>\n <input type=\"search\"\n class=\"gc-schema-search\"\n placeholder=\"Search operations…\"\n [(ngModel)]=\"SchemaSearch\" />\n </div>\n <button class=\"gc-schema-reload\"\n type=\"button\"\n (click)=\"OnReloadSchema()\"\n [disabled]=\"SchemaLoading\"\n title=\"Reload schema\">\n <i class=\"fa-solid\" [class.fa-rotate]=\"!SchemaLoading\" [class.fa-spinner]=\"SchemaLoading\" [class.fa-spin]=\"SchemaLoading\"></i>\n </button>\n </div>\n\n @if (Operations.length > 0) {\n <div class=\"gc-schema-kinds\">\n <button type=\"button\"\n class=\"gc-schema-kind\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'all'\"\n (click)=\"SchemaKindFilter = 'all'\">\n All <span>{{ OperationCounts.all }}</span>\n </button>\n <button type=\"button\"\n class=\"gc-schema-kind gc-schema-kind--query\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'query'\"\n (click)=\"SchemaKindFilter = 'query'\">\n <i class=\"fa-solid fa-magnifying-glass\"></i> Query <span>{{ OperationCounts.query }}</span>\n </button>\n <button type=\"button\"\n class=\"gc-schema-kind gc-schema-kind--mutation\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'mutation'\"\n (click)=\"SchemaKindFilter = 'mutation'\">\n <i class=\"fa-solid fa-pen\"></i> Mutation <span>{{ OperationCounts.mutation }}</span>\n </button>\n </div>\n }\n\n @if (SchemaLoading) {\n <div class=\"gc-schema-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Introspecting schema…</span>\n </div>\n } @else if (SchemaIntrospectionDisabled) {\n <div class=\"gc-schema-state gc-schema-disabled\">\n <i class=\"fa-solid fa-lock\"></i>\n <div class=\"gc-schema-disabled-title\">Introspection disabled</div>\n <div class=\"gc-schema-disabled-body\">\n This server has GraphQL introspection turned off (typical in production). Schema browsing isn't available — write queries directly in the editor, or use the History tab to revisit previous queries.\n </div>\n </div>\n } @else if (SchemaError) {\n <div class=\"gc-schema-state gc-schema-state--err\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div class=\"gc-schema-err-title\">Couldn't load schema</div>\n <div class=\"gc-schema-err-body\">{{ SchemaError }}</div>\n </div>\n } @else if (FilteredOperations.length === 0) {\n <div class=\"gc-schema-state\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No operations match.</span>\n </div>\n } @else {\n <div class=\"gc-schema-list\">\n @for (op of FilteredOperations; track TrackByOp($index, op)) {\n <button type=\"button\"\n class=\"gc-schema-op\"\n [class.gc-schema-op--mutation]=\"op.kind === 'mutation'\"\n (click)=\"OnInsertOperation(op, $event)\"\n [title]=\"(op.description || ('Insert ' + op.kind + ' template')) + ' · Shift-click to append'\">\n <div class=\"gc-schema-op-head\">\n <span class=\"gc-schema-op-kind\">{{ op.kind }}</span>\n <span class=\"gc-schema-op-name\">{{ op.name }}</span>\n </div>\n @if (op.argSummary) {\n <div class=\"gc-schema-op-args\">({{ op.argSummary }})</div>\n }\n <div class=\"gc-schema-op-return\">\n <i class=\"fa-solid fa-arrow-right\"></i> {{ op.returnSummary }}\n </div>\n @if (op.description) {\n <div class=\"gc-schema-op-desc\">{{ op.description }}</div>\n }\n </button>\n }\n </div>\n }\n }\n </aside>\n <div class=\"gc-splitter gc-splitter--vert\"\n (mousedown)=\"OnSplitterDown($event, 'sidebar')\"\n title=\"Drag to resize sidebar\"></div>\n }\n\n <div class=\"gc-main\">\n <div class=\"gc-editor-wrap\" [style.flex]=\"'0 0 ' + EditorHeightPct + '%'\">\n <div class=\"gc-editor-head\">\n <span class=\"gc-editor-label\">Query</span>\n <span class=\"gc-editor-hint\">⌘/Ctrl+Enter to run · Shift+click an entity/op to append</span>\n <button class=\"gc-mini-btn\" type=\"button\" (click)=\"OnFormatQuery()\" title=\"Tidy whitespace\">\n <i class=\"fa-solid fa-broom\"></i> Tidy\n </button>\n <button class=\"gc-mini-btn gc-mini-btn--danger\" type=\"button\" (click)=\"OnClearQuery()\" title=\"Clear editor\">\n <i class=\"fa-solid fa-eraser\"></i> Clear\n </button>\n </div>\n <mj-code-editor\n class=\"gc-editor\"\n [(ngModel)]=\"Query\"\n [language]=\"'graphql'\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter your GraphQL query…\">\n </mj-code-editor>\n </div>\n\n <div class=\"gc-splitter gc-splitter--horiz\"\n (mousedown)=\"OnSplitterDown($event, 'editor')\"\n title=\"Drag to resize editor / response\"></div>\n\n <div class=\"gc-vars-wrap\">\n <button class=\"gc-vars-toggle\" type=\"button\" (click)=\"ToggleVariables()\">\n <i class=\"fa-solid fa-chevron-right gc-vars-chev\" [class.gc-vars-chev--down]=\"ShowVariables\"></i>\n Variables\n @if (Variables && Variables.trim() !== '{}' && Variables.trim() !== '') {\n <span class=\"gc-vars-pill\">configured</span>\n }\n </button>\n @if (ShowVariables) {\n <mj-code-editor\n class=\"gc-editor gc-editor--vars\"\n [(ngModel)]=\"Variables\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n placeholder=\"{}\">\n </mj-code-editor>\n }\n </div>\n\n <div class=\"gc-run-bar\">\n <button class=\"gc-run-btn\"\n type=\"button\"\n [disabled]=\"Running\"\n (click)=\"OnRun()\">\n @if (Running) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running…\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run\n }\n </button>\n @if (ResponseStatus !== 'idle') {\n <div class=\"gc-run-meta\">\n @if (ResponseStatus === 'ok') {\n <span class=\"gc-status-badge gc-status-badge--ok\">\n <i class=\"fa-solid fa-circle-check\"></i> 200 OK\n </span>\n } @else {\n <span class=\"gc-status-badge gc-status-badge--err\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error\n </span>\n }\n @if (ResponseDurationMs != null) {\n <span class=\"gc-meta-pill\"><i class=\"fa-regular fa-clock\"></i> {{ ResponseDurationMs }}ms</span>\n }\n @if (ResponseSizeBytes != null) {\n <span class=\"gc-meta-pill\"><i class=\"fa-solid fa-database\"></i> {{ FormattedSize }}</span>\n }\n </div>\n }\n <span class=\"gc-spacer\"></span>\n @if (ResponseJson) {\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopyResponse()\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n }\n </div>\n\n <div class=\"gc-response-wrap\">\n <div class=\"gc-response-head\">\n <span class=\"gc-editor-label\">Response</span>\n </div>\n @if (ErrorMessage && !ResponseJson) {\n <div class=\"gc-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n } @else if (ResponseJson) {\n @if (ErrorMessage) {\n <div class=\"gc-error gc-error--inline\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n <pre class=\"gc-response\"><code>{{ ResponseJson }}</code></pre>\n } @else {\n <div class=\"gc-empty\">\n <i class=\"fa-solid fa-arrow-up-from-bracket\"></i>\n <span>Run a query to see results here.</span>\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n"]}
@@ -133,30 +133,31 @@ let LayoutInspectorComponent = class LayoutInspectorComponent extends BaseResour
133
133
  return value;
134
134
  }
135
135
  static ɵfac = function LayoutInspectorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LayoutInspectorComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.WorkspaceStateManager), i0.ɵɵdirectiveInject(i1.GoldenLayoutManager)); };
136
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LayoutInspectorComponent, selectors: [["mj-layout-inspector"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 16, consts: [[1, "mj-inspector", "mj-inspector--solo"], ["Role", "region", "AriaLabel", "Layout inspector", "Title", "Layout Inspector", "Subtitle", "Workspace + Golden Layout configuration"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "size", "sm", 3, "click", "variant", "title"], ["aria-hidden", "true", 1, "fa-solid"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Download as JSON", "aria-label", "Download as JSON", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-download"], ["toolbar", ""], [3, "TabChange", "Tabs", "ActiveKey"], [1, "mj-inspector__content"], [1, "mj-inspector__content-head"], [1, "mj-inspector__content-title"], [1, "mj-inspector__content-meta"], [1, "mj-inspector__editor"], [3, "ngModelChange", "ngModel", "language", "readonly", "lineWrapping"]], template: function LayoutInspectorComponent_Template(rf, ctx) { if (rf & 1) {
136
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LayoutInspectorComponent, selectors: [["mj-layout-inspector"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 20, vars: 16, consts: [[1, "mj-inspector", "mj-inspector--solo"], ["Role", "region", "AriaLabel", "Layout inspector", "Title", "Layout Inspector", "Subtitle", "Workspace + Golden Layout configuration"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "size", "sm", 3, "click", "variant", "title"], ["aria-hidden", "true", 1, "fa-solid"], [1, "mj-action-label"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Download as JSON", "aria-label", "Download as JSON", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-download"], ["toolbar", ""], [3, "TabChange", "Tabs", "ActiveKey"], [1, "mj-inspector__content"], [1, "mj-inspector__content-head"], [1, "mj-inspector__content-title"], [1, "mj-inspector__content-meta"], [1, "mj-inspector__editor"], [3, "ngModelChange", "ngModel", "language", "readonly", "lineWrapping"]], template: function LayoutInspectorComponent_Template(rf, ctx) { if (rf & 1) {
137
137
  i0.ɵɵelementStart(0, "div", 0)(1, "mj-page-header-interior", 1)(2, "div", 2)(3, "mj-refresh-button", 3);
138
138
  i0.ɵɵlistener("Clicked", function LayoutInspectorComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.refresh(); });
139
139
  i0.ɵɵelementEnd();
140
140
  i0.ɵɵelementStart(4, "button", 4);
141
141
  i0.ɵɵlistener("click", function LayoutInspectorComponent_Template_button_click_4_listener() { return ctx.OnCopy(); });
142
142
  i0.ɵɵelement(5, "i", 5);
143
- i0.ɵɵtext(6);
144
- i0.ɵɵelementEnd();
145
- i0.ɵɵelementStart(7, "button", 6);
146
- i0.ɵɵlistener("click", function LayoutInspectorComponent_Template_button_click_7_listener() { return ctx.OnDownload(); });
147
- i0.ɵɵelement(8, "i", 7);
143
+ i0.ɵɵelementStart(6, "span", 6);
144
+ i0.ɵɵtext(7);
145
+ i0.ɵɵelementEnd()();
146
+ i0.ɵɵelementStart(8, "button", 7);
147
+ i0.ɵɵlistener("click", function LayoutInspectorComponent_Template_button_click_8_listener() { return ctx.OnDownload(); });
148
+ i0.ɵɵelement(9, "i", 8);
148
149
  i0.ɵɵelementEnd()();
149
- i0.ɵɵelementStart(9, "div", 8)(10, "mj-tab-nav", 9);
150
- i0.ɵɵlistener("TabChange", function LayoutInspectorComponent_Template_mj_tab_nav_TabChange_10_listener($event) { return ctx.onTabChange($event); });
150
+ i0.ɵɵelementStart(10, "div", 9)(11, "mj-tab-nav", 10);
151
+ i0.ɵɵlistener("TabChange", function LayoutInspectorComponent_Template_mj_tab_nav_TabChange_11_listener($event) { return ctx.onTabChange($event); });
151
152
  i0.ɵɵelementEnd()()();
152
- i0.ɵɵelementStart(11, "div", 10)(12, "div", 11)(13, "h4", 12);
153
- i0.ɵɵtext(14);
153
+ i0.ɵɵelementStart(12, "div", 11)(13, "div", 12)(14, "h4", 13);
154
+ i0.ɵɵtext(15);
154
155
  i0.ɵɵelementEnd();
155
- i0.ɵɵelementStart(15, "span", 13);
156
- i0.ɵɵtext(16);
156
+ i0.ɵɵelementStart(16, "span", 14);
157
+ i0.ɵɵtext(17);
157
158
  i0.ɵɵelementEnd()();
158
- i0.ɵɵelementStart(17, "div", 14)(18, "mj-code-editor", 15);
159
- i0.ɵɵtwoWayListener("ngModelChange", function LayoutInspectorComponent_Template_mj_code_editor_ngModelChange_18_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.LayoutJson, $event) || (ctx.LayoutJson = $event); return $event; });
159
+ i0.ɵɵelementStart(18, "div", 15)(19, "mj-code-editor", 16);
160
+ i0.ɵɵtwoWayListener("ngModelChange", function LayoutInspectorComponent_Template_mj_code_editor_ngModelChange_19_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.LayoutJson, $event) || (ctx.LayoutJson = $event); return $event; });
160
161
  i0.ɵɵelementEnd()()()();
161
162
  } if (rf & 2) {
162
163
  i0.ɵɵadvance(3);
@@ -165,8 +166,8 @@ let LayoutInspectorComponent = class LayoutInspectorComponent extends BaseResour
165
166
  i0.ɵɵproperty("variant", ctx.CopyConfirmed ? "success" : "secondary")("title", ctx.CopyConfirmed ? "Copied" : "Copy JSON");
166
167
  i0.ɵɵadvance();
167
168
  i0.ɵɵclassProp("fa-clipboard", !ctx.CopyConfirmed)("fa-check", ctx.CopyConfirmed);
168
- i0.ɵɵadvance();
169
- i0.ɵɵtextInterpolate1(" ", ctx.CopyConfirmed ? "Copied" : "Copy", " ");
169
+ i0.ɵɵadvance(2);
170
+ i0.ɵɵtextInterpolate(ctx.CopyConfirmed ? "Copied" : "Copy");
170
171
  i0.ɵɵadvance(4);
171
172
  i0.ɵɵproperty("Tabs", ctx.tabsConfig)("ActiveKey", ctx.ActiveSection);
172
173
  i0.ɵɵadvance(4);
@@ -184,7 +185,7 @@ LayoutInspectorComponent = __decorate([
184
185
  export { LayoutInspectorComponent };
185
186
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LayoutInspectorComponent, [{
186
187
  type: Component,
187
- args: [{ standalone: false, selector: 'mj-layout-inspector', template: "<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Layout inspector\"\n Title=\"Layout Inspector\"\n Subtitle=\"Workspace + Golden Layout configuration\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopy()\"\n [title]=\"CopyConfirmed ? 'Copied' : 'Copy JSON'\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnDownload()\" title=\"Download as JSON\" aria-label=\"Download as JSON\">\n <i class=\"fa-solid fa-download\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div toolbar>\n <mj-tab-nav\n [Tabs]=\"tabsConfig\"\n [ActiveKey]=\"ActiveSection\"\n (TabChange)=\"onTabChange($event)\">\n </mj-tab-nav>\n </div>\n </mj-page-header-interior>\n\n <div class=\"mj-inspector__content\">\n <div class=\"mj-inspector__content-head\">\n <h4 class=\"mj-inspector__content-title\">{{ SectionLabel }}</h4>\n <span class=\"mj-inspector__content-meta\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n <div class=\"mj-inspector__editor\">\n <mj-code-editor\n [(ngModel)]=\"LayoutJson\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n/*\n Inspector shell \u2014 each Dev Tools sub-page wraps its body in .mj-inspector. The\n chrome (title icon, title, subtitle, action buttons) was previously rendered\n via .mj-inspector__header*, but that's been replaced by <mj-page-header-interior>\n in every inspector template. Action buttons now use the mjButton directive\n (variant=\"secondary\" / \"success\") so they inherit global button styling. App\n State + Layout inspectors used to carry an inner left rail (.mj-inspector__body\n + __sidebar + __nav-item) for L2 sections; that rail was retired 2026-05-19 in\n favor of <mj-tab-nav> projected into the chrome's [toolbar] slot, matching\n SystemDiagnostics and the API Keys tab strip. All inspectors are now \"solo\"\n mode (no sidebar).\n*/\n.mj-inspector {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Content area */\n.mj-inspector__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor mj-code-editor {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty state */\n.mj-inspector__empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n"] }]
188
+ args: [{ standalone: false, selector: 'mj-layout-inspector', template: "<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Layout inspector\"\n Title=\"Layout Inspector\"\n Subtitle=\"Workspace + Golden Layout configuration\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopy()\"\n [title]=\"CopyConfirmed ? 'Copied' : 'Copy JSON'\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">{{ CopyConfirmed ? 'Copied' : 'Copy' }}</span>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnDownload()\" title=\"Download as JSON\" aria-label=\"Download as JSON\">\n <i class=\"fa-solid fa-download\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div toolbar>\n <mj-tab-nav\n [Tabs]=\"tabsConfig\"\n [ActiveKey]=\"ActiveSection\"\n (TabChange)=\"onTabChange($event)\">\n </mj-tab-nav>\n </div>\n </mj-page-header-interior>\n\n <div class=\"mj-inspector__content\">\n <div class=\"mj-inspector__content-head\">\n <h4 class=\"mj-inspector__content-title\">{{ SectionLabel }}</h4>\n <span class=\"mj-inspector__content-meta\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n <div class=\"mj-inspector__editor\">\n <mj-code-editor\n [(ngModel)]=\"LayoutJson\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n/*\n Inspector shell \u2014 each Dev Tools sub-page wraps its body in .mj-inspector. The\n chrome (title icon, title, subtitle, action buttons) was previously rendered\n via .mj-inspector__header*, but that's been replaced by <mj-page-header-interior>\n in every inspector template. Action buttons now use the mjButton directive\n (variant=\"secondary\" / \"success\") so they inherit global button styling. App\n State + Layout inspectors used to carry an inner left rail (.mj-inspector__body\n + __sidebar + __nav-item) for L2 sections; that rail was retired 2026-05-19 in\n favor of <mj-tab-nav> projected into the chrome's [toolbar] slot, matching\n SystemDiagnostics and the API Keys tab strip. All inspectors are now \"solo\"\n mode (no sidebar).\n*/\n.mj-inspector {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Content area */\n.mj-inspector__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor mj-code-editor {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty state */\n.mj-inspector__empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n"] }]
188
189
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.WorkspaceStateManager }, { type: i1.GoldenLayoutManager }], null); })();
189
190
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LayoutInspectorComponent, { className: "LayoutInspectorComponent", filePath: "src/DevTools/layout-inspector.component.ts", lineNumber: 27 }); })();
190
191
  //# sourceMappingURL=layout-inspector.component.js.map