@memberjunction/ng-dashboards 6.2.0-edge.5 → 6.2.0-edge.7

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 (293) hide show
  1. package/README.md +35 -0
  2. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
  3. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  4. package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
  6. package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
  7. package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
  8. package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
  9. package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
  10. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
  11. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
  13. package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
  14. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
  15. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  16. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +21 -13
  17. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  18. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
  19. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
  20. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
  21. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
  22. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
  23. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  24. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
  25. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  27. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
  28. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  29. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
  30. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  31. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +210 -57
  32. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  33. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
  34. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
  35. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
  36. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
  37. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  38. package/dist/AI/components/execution-monitoring.component.js +28 -16
  39. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  40. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
  41. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  42. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +32 -8
  43. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  44. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
  45. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  46. package/dist/AI/components/tags/tags-resource.component.js +18 -9
  47. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  48. package/dist/AI/components/vectors/sensitive-fields.d.ts +9 -4
  49. package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -1
  50. package/dist/AI/components/vectors/sensitive-fields.js +39 -14
  51. package/dist/AI/components/vectors/sensitive-fields.js.map +1 -1
  52. package/dist/AI/components/vectors/vector-document-rules.d.ts +13 -0
  53. package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -1
  54. package/dist/AI/components/vectors/vector-document-rules.js +14 -0
  55. package/dist/AI/components/vectors/vector-document-rules.js.map +1 -1
  56. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +34 -14
  57. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  58. package/dist/AI/components/vectors/vector-management-resource.component.js +134 -51
  59. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  60. package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
  61. package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
  62. package/dist/AI/components/vectors/vector-store-selection.js +57 -0
  63. package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
  64. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  65. package/dist/AI/services/ai-instrumentation.service.js +4 -2
  66. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  67. package/dist/Actions/action-result-code.d.ts +80 -0
  68. package/dist/Actions/action-result-code.d.ts.map +1 -0
  69. package/dist/Actions/action-result-code.js +163 -0
  70. package/dist/Actions/action-result-code.js.map +1 -0
  71. package/dist/Actions/components/actions-overview.component.d.ts +8 -0
  72. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  73. package/dist/Actions/components/actions-overview.component.js +12 -9
  74. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  75. package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
  76. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  77. package/dist/Actions/components/execution-monitoring.component.js +65 -42
  78. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  79. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/action-card.component.js +5 -4
  81. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  82. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +198 -0
  83. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
  84. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +289 -0
  85. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
  86. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
  87. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
  88. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
  89. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
  90. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
  91. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
  92. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
  93. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
  94. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
  95. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
  96. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
  97. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
  98. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
  99. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
  100. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
  101. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
  102. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
  103. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
  104. package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
  105. package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
  106. package/dist/ChiefOfStaff/index.d.ts +6 -0
  107. package/dist/ChiefOfStaff/index.d.ts.map +1 -0
  108. package/dist/ChiefOfStaff/index.js +6 -0
  109. package/dist/ChiefOfStaff/index.js.map +1 -0
  110. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  111. package/dist/Communication/communication-logs-resource.component.js +2 -1
  112. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  113. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  114. package/dist/Communication/communication-monitor-resource.component.js +26 -21
  115. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  116. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  117. package/dist/Communication/communication-runs-resource.component.js +14 -13
  118. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  119. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  120. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  121. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  122. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  123. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
  124. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  125. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  126. package/dist/ComponentStudio/services/component-version.service.js +3 -0
  127. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  128. package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
  129. package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
  130. package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
  131. package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
  132. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +45 -2
  133. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  134. package/dist/DataExplorer/data-explorer-dashboard.component.js +178 -55
  135. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  136. package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
  137. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  138. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  139. package/dist/DevTools/graphql-console.component.js +2 -2
  140. package/dist/DevTools/lazy-module-status.component.js +2 -2
  141. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
  142. package/dist/FormBuilder/form-builder-resource.component.js +5 -0
  143. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
  144. package/dist/Integration/components/connections/connections.component.js +2 -2
  145. package/dist/Integration/services/integration-data.service.d.ts +1 -1
  146. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  147. package/dist/Integration/services/integration-data.service.js +4 -3
  148. package/dist/Integration/services/integration-data.service.js.map +1 -1
  149. package/dist/Lists/components/lists-browse-resource.component.js +1 -1
  150. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  151. package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
  152. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  153. package/dist/LoginStudio/login-studio-resource.component.d.ts +10 -2
  154. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
  155. package/dist/LoginStudio/login-studio-resource.component.js +111 -77
  156. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
  157. package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
  158. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  159. package/dist/MCP/mcp-dashboard.component.js +118 -65
  160. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  161. package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
  162. package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
  163. package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
  164. package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
  165. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
  166. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  167. package/dist/PredictiveStudio/components/ps-experiments.component.js +257 -521
  168. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  169. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
  170. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
  171. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +124 -251
  172. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
  173. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
  174. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  175. package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
  176. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  177. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
  178. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  179. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +338 -326
  180. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  181. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
  182. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
  183. package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
  184. package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
  185. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
  186. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  187. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +52 -2
  188. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  189. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
  190. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
  191. package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
  192. package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
  193. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
  194. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
  195. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
  196. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
  197. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
  198. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  199. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +186 -103
  200. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  201. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
  202. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  203. package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
  204. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  205. package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
  206. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  207. package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
  208. package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
  209. package/dist/UserRoutines/user-routines-resource.component.js +22 -4
  210. package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
  211. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  212. package/dist/VersionHistory/components/diff-resource.component.js +1 -0
  213. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  214. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
  215. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
  216. package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
  217. package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
  218. package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
  219. package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
  220. package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
  221. package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
  222. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
  223. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
  224. package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
  225. package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
  226. package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
  227. package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
  228. package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
  229. package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
  230. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
  231. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
  232. package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
  233. package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
  234. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
  235. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
  236. package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
  237. package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
  238. package/dist/VideoStudio/index.d.ts +12 -0
  239. package/dist/VideoStudio/index.d.ts.map +1 -0
  240. package/dist/VideoStudio/index.js +12 -0
  241. package/dist/VideoStudio/index.js.map +1 -0
  242. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
  243. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
  244. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
  245. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
  246. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
  247. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
  248. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
  249. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
  250. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
  251. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
  252. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
  253. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
  254. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
  255. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
  256. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
  257. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
  258. package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
  259. package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
  260. package/dist/VideoStudio/video-studio-agent-context.js +992 -0
  261. package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
  262. package/dist/ai-dashboards.module.d.ts +25 -21
  263. package/dist/ai-dashboards.module.d.ts.map +1 -1
  264. package/dist/ai-dashboards.module.js +25 -3
  265. package/dist/ai-dashboards.module.js.map +1 -1
  266. package/dist/module.d.ts +13 -12
  267. package/dist/module.d.ts.map +1 -1
  268. package/dist/module.js +7 -0
  269. package/dist/module.js.map +1 -1
  270. package/dist/public-api.d.ts +8 -0
  271. package/dist/public-api.d.ts.map +1 -1
  272. package/dist/public-api.js +10 -0
  273. package/dist/public-api.js.map +1 -1
  274. package/dist/shared/action-scheduled-job.d.ts.map +1 -1
  275. package/dist/shared/action-scheduled-job.js +2 -0
  276. package/dist/shared/action-scheduled-job.js.map +1 -1
  277. package/dist/video-studio-dashboards.module.d.ts +40 -0
  278. package/dist/video-studio-dashboards.module.d.ts.map +1 -0
  279. package/dist/video-studio-dashboards.module.js +159 -0
  280. package/dist/video-studio-dashboards.module.js.map +1 -0
  281. package/package.json +77 -71
  282. package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
  283. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
  284. package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
  285. package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
  286. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
  287. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
  288. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
  289. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
  290. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
  291. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
  292. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
  293. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
@@ -66,6 +66,8 @@ export interface DataExplorerDeepLink {
66
66
  viewMode?: DataExplorerViewMode;
67
67
  /** Saved view ID to load (uses view's filters/sort/grid state) */
68
68
  viewId?: string;
69
+ /** Optional semantic name of an alternate base view (`?abv=<Name>`) */
70
+ abv?: string;
69
71
  /** Map render mode (point/choropleth/heatmap) — only relevant when viewMode is 'map' */
70
72
  mapMode?: string;
71
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"explorer-state.interface.d.ts","sourceRoot":"","sources":["../../../src/DataExplorer/models/explorer-state.interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"explorer-state.interface.d.ts","sourceRoot":"","sources":["../../../src/DataExplorer/models/explorer-state.interface.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"explorer-state.interface.js","sourceRoot":"","sources":["../../../src/DataExplorer/models/explorer-state.interface.ts"],"names":[],"mappings":"AA0RA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,oBAAoB,EAAE,GAAG;IACzB,wBAAwB,EAAE,IAAI;IAC9B,kBAAkB,EAAE,IAAI;IACxB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,KAAK;IACnB,mBAAmB,EAAE,KAAK;IAC1B,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,MAAM;IAChB,mBAAmB,EAAE,UAAU;IAC/B,qBAAqB,EAAE,IAAI;IAC3B,iBAAiB,EAAE,MAAM;IACzB,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,KAAK;IACtB,gBAAgB,EAAE,GAAG;IACrB,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,IAAI;IACxB,wBAAwB,EAAE,IAAI;IAC9B,qBAAqB,EAAE,IAAI;IAC3B,uBAAuB,EAAE,IAAI;IAC7B,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,oBAAoB;IACpB,eAAe,EAAE,KAAK,EAAG,0CAA0C;IACnE,oBAAoB,EAAE,EAAE;IACxB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;IACnB,+CAA+C;IAC/C,iBAAiB,EAAE,EAAE;IACrB,oBAAoB,EAAE,KAAK;IAC3B,mBAAmB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;IACzF,YAAY,EAAE,KAAK;CACpB,CAAC","sourcesContent":["import { EntityInfo } from '@memberjunction/core';\nimport { MapRenderMode } from '@memberjunction/ng-map-view';\n\n/**\n * Filter configuration for the Data Explorer\n * Allows constraining which entities are shown in the explorer\n */\nexport interface DataExplorerFilter {\n /**\n * Application ID to filter entities by.\n * Only entities linked via ApplicationEntities will be shown.\n */\n applicationId?: string;\n\n /**\n * Application name for display purposes (breadcrumbs, titles)\n */\n applicationName?: string;\n\n /**\n * Schema names to filter by (e.g., ['dbo', 'sales'])\n * Only entities in these schemas will be shown.\n */\n schemaNames?: string[];\n\n /**\n * Explicit entity names to include (e.g., ['Accounts', 'Contacts'])\n * If provided, only these entities will be shown.\n */\n entityNames?: string[];\n\n /**\n * Whether to show system entities (entities starting with __ or system schemas)\n * Default: false\n */\n includeSystemEntities?: boolean;\n}\n\n/**\n * Breadcrumb item for navigation display\n */\nexport interface BreadcrumbItem {\n label: string;\n type: 'application' | 'entity' | 'record';\n /** For entity type - the entity name */\n entityName?: string;\n /** For record type - the composite key string */\n compositeKeyString?: string;\n /** Icon class for the breadcrumb */\n icon?: string;\n}\n\n/**\n * View mode options for the Data Explorer\n */\nexport type DataExplorerViewMode = 'grid' | 'cards' | 'timeline' | 'map';\n\n/**\n * Timeline orientation options\n */\nexport type TimelineOrientationType = 'vertical' | 'horizontal';\n\n/**\n * Initial navigation state from URL query parameters.\n * Used for deep linking into the Data Explorer.\n */\nexport interface DataExplorerDeepLink {\n /** Entity name to navigate to */\n entity?: string;\n /** Record ID or composite key string to select */\n record?: string;\n /** Filter text to apply (omitted when viewId is present — view carries its own filter) */\n filter?: string;\n /** View mode to use (grid/cards/timeline/map) */\n viewMode?: DataExplorerViewMode;\n /** Saved view ID to load (uses view's filters/sort/grid state) */\n viewId?: string;\n /** Map render mode (point/choropleth/heatmap) — only relevant when viewMode is 'map' */\n mapMode?: string;\n}\n\n/**\n * Per-entity cached state (filters, scroll position, etc.)\n */\nexport interface EntityCacheEntry {\n filterText: string;\n scrollPosition?: number;\n lastAccessed: number; // timestamp for LRU eviction\n}\n\n/**\n * Recent entity access tracking for home screen\n */\nexport interface RecentEntityAccess {\n entityName: string;\n entityId: string;\n lastAccessed: Date;\n accessCount: number;\n}\n\n/**\n * Favorite entity for home screen (using User Favorites entity)\n */\nexport interface FavoriteEntity {\n userFavoriteId: string; // ID from User Favorites entity\n entityName: string;\n entityId: string;\n}\n\n/**\n * Recent record access for home screen (from User Record Logs)\n */\nexport interface RecentRecordAccess {\n entityName: string;\n entityId: string;\n recordId: string;\n recordName?: string;\n latestAt: Date;\n totalCount: number;\n /**\n * Pre-computed \"N ago\" relative-time label for display. Populated by the dashboard when the\n * record set loads and refreshed on a timer, so the template binds a STABLE field instead of\n * calling a `Date.now()`-based method during change detection (which triggers NG0100). See the\n * DataExplorerDashboardComponent relative-time handling.\n */\n relativeTime?: string;\n}\n\n/**\n * Favorite record for home screen (from User Favorites, excluding entity favorites)\n */\nexport interface FavoriteRecord {\n userFavoriteId: string; // ID from User Favorites entity\n entityName: string;\n entityId: string;\n recordId: string;\n recordName?: string;\n}\n\n/**\n * Represents an application group with its entities for the home view.\n * Used by Concept D to organize entities by their first Application membership.\n */\nexport interface AppEntityGroup {\n applicationId: string;\n applicationName: string;\n applicationIcon: string;\n applicationColor: string | null;\n entities: EntityInfo[];\n isExpanded: boolean;\n}\n\n/**\n * Home view mode for the All/Favorites toggle\n */\nexport type HomeViewMode = 'all' | 'favorites';\n\n/**\n * State interface for the Data Explorer dashboard\n */\nexport interface DataExplorerState {\n // Navigation panel\n navigationPanelWidth: number;\n navigationPanelCollapsed: boolean;\n\n // Current context\n selectedEntityName: string | null;\n selectedViewId: string | null;\n\n // View modification tracking\n /** Whether the current view configuration has unsaved changes */\n viewModified: boolean;\n\n // View configuration panel\n /** Whether the view configuration panel is open */\n viewConfigPanelOpen: boolean;\n\n // Smart filter (current entity's filter - also cached in entityCache)\n smartFilterPrompt: string;\n smartFilterEnabled: boolean;\n\n // Per-entity cache for filters and state\n entityCache: Record<string, EntityCacheEntry>;\n\n // View mode\n viewMode: DataExplorerViewMode;\n\n // Timeline configuration (per-entity, but stored here for simplicity)\n timelineOrientation: TimelineOrientationType;\n timelineDateFieldName: string | null;\n timelineSortOrder: 'asc' | 'desc';\n\n // Map configuration (persisted across page reloads)\n mapRenderMode: MapRenderMode;\n mapZoom: number | null;\n mapCenterLat: number | null;\n mapCenterLng: number | null;\n\n // Detail panel\n detailPanelOpen: boolean;\n detailPanelWidth: number;\n selectedRecordId: string | null;\n /** Display name of the currently selected record (for breadcrumbs) */\n selectedRecordName: string | null;\n\n // Section states\n favoritesSectionExpanded: boolean;\n recentSectionExpanded: boolean;\n entitiesSectionExpanded: boolean;\n viewsSectionExpanded: boolean;\n\n // Recent items (legacy - records within current explorer context)\n recentItems: RecentItem[];\n\n // Favorites (legacy - records within current explorer context)\n favorites: FavoriteItem[];\n\n // Home screen state\n /** Whether to show all entities or just DefaultForNewUser entities */\n showAllEntities: boolean;\n /** Recent entity access tracking for home screen */\n recentEntityAccesses: RecentEntityAccess[];\n /** Favorite entities for home screen */\n favoriteEntities: FavoriteEntity[];\n /** Favorite records for home screen (non-entity favorites) */\n favoriteRecords: FavoriteRecord[];\n\n // Concept D: Application Groups + Search-First\n /** Which application group IDs are currently expanded */\n expandedAppGroups: string[];\n /** Whether the right-side quick access panel is open */\n quickAccessPanelOpen: boolean;\n /** Collapse state per section in the quick access panel (key = section id, value = expanded) */\n quickAccessSections: Record<string, boolean>;\n /** Home view mode toggle: show all entities or favorites only */\n homeViewMode: HomeViewMode;\n}\n\nexport interface RecentItem {\n entityName: string;\n /** Serialized CompositeKey using ToConcatenatedString format (Field1|Value1||Field2|Value2) */\n compositeKeyString: string;\n displayName: string;\n timestamp: Date;\n}\n\nexport interface FavoriteItem {\n type: 'record' | 'view' | 'entity';\n entityName?: string;\n /** Serialized CompositeKey using ToConcatenatedString format (Field1|Value1||Field2|Value2) */\n compositeKeyString?: string;\n viewId?: string;\n displayName: string;\n}\n\n/**\n * Field display type for smart rendering in cards\n */\nexport type CardFieldType = 'number' | 'boolean' | 'text' | 'date';\n\n/**\n * Metadata for a field to display in a card\n */\nexport interface CardDisplayField {\n name: string;\n type: CardFieldType;\n label: string;\n}\n\n/**\n * Auto-generated card template based on entity metadata\n */\nexport interface AutoCardTemplate {\n titleField: string;\n subtitleField: string | null;\n descriptionField: string | null;\n /** Display fields with type information for smart rendering */\n displayFields: CardDisplayField[];\n thumbnailField: string | null;\n badgeField: string | null;\n}\n\n/**\n * Default state for the Data Explorer\n */\nexport const DEFAULT_EXPLORER_STATE: DataExplorerState = {\n navigationPanelWidth: 280,\n navigationPanelCollapsed: true,\n selectedEntityName: null,\n selectedViewId: null,\n viewModified: false,\n viewConfigPanelOpen: false,\n smartFilterPrompt: '',\n smartFilterEnabled: true,\n entityCache: {},\n viewMode: 'grid',\n timelineOrientation: 'vertical',\n timelineDateFieldName: null,\n timelineSortOrder: 'desc',\n mapRenderMode: 'point',\n mapZoom: null,\n mapCenterLat: null,\n mapCenterLng: null,\n detailPanelOpen: false,\n detailPanelWidth: 400,\n selectedRecordId: null,\n selectedRecordName: null,\n favoritesSectionExpanded: true,\n recentSectionExpanded: true,\n entitiesSectionExpanded: true,\n viewsSectionExpanded: true,\n recentItems: [],\n favorites: [],\n // Home screen state\n showAllEntities: false, // Default to showing only common entities\n recentEntityAccesses: [],\n favoriteEntities: [],\n favoriteRecords: [],\n // Concept D: Application Groups + Search-First\n expandedAppGroups: [],\n quickAccessPanelOpen: false,\n quickAccessSections: { recentRecords: true, recentEntities: true, favoriteRecords: true },\n homeViewMode: 'all',\n};\n"]}
1
+ {"version":3,"file":"explorer-state.interface.js","sourceRoot":"","sources":["../../../src/DataExplorer/models/explorer-state.interface.ts"],"names":[],"mappings":"AA4RA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,oBAAoB,EAAE,GAAG;IACzB,wBAAwB,EAAE,IAAI;IAC9B,kBAAkB,EAAE,IAAI;IACxB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,KAAK;IACnB,mBAAmB,EAAE,KAAK;IAC1B,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,MAAM;IAChB,mBAAmB,EAAE,UAAU;IAC/B,qBAAqB,EAAE,IAAI;IAC3B,iBAAiB,EAAE,MAAM;IACzB,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,KAAK;IACtB,gBAAgB,EAAE,GAAG;IACrB,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,IAAI;IACxB,wBAAwB,EAAE,IAAI;IAC9B,qBAAqB,EAAE,IAAI;IAC3B,uBAAuB,EAAE,IAAI;IAC7B,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,oBAAoB;IACpB,eAAe,EAAE,KAAK,EAAG,0CAA0C;IACnE,oBAAoB,EAAE,EAAE;IACxB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;IACnB,+CAA+C;IAC/C,iBAAiB,EAAE,EAAE;IACrB,oBAAoB,EAAE,KAAK;IAC3B,mBAAmB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;IACzF,YAAY,EAAE,KAAK;CACpB,CAAC","sourcesContent":["import { EntityInfo } from '@memberjunction/core';\nimport { MapRenderMode } from '@memberjunction/ng-map-view';\n\n/**\n * Filter configuration for the Data Explorer\n * Allows constraining which entities are shown in the explorer\n */\nexport interface DataExplorerFilter {\n /**\n * Application ID to filter entities by.\n * Only entities linked via ApplicationEntities will be shown.\n */\n applicationId?: string;\n\n /**\n * Application name for display purposes (breadcrumbs, titles)\n */\n applicationName?: string;\n\n /**\n * Schema names to filter by (e.g., ['dbo', 'sales'])\n * Only entities in these schemas will be shown.\n */\n schemaNames?: string[];\n\n /**\n * Explicit entity names to include (e.g., ['Accounts', 'Contacts'])\n * If provided, only these entities will be shown.\n */\n entityNames?: string[];\n\n /**\n * Whether to show system entities (entities starting with __ or system schemas)\n * Default: false\n */\n includeSystemEntities?: boolean;\n}\n\n/**\n * Breadcrumb item for navigation display\n */\nexport interface BreadcrumbItem {\n label: string;\n type: 'application' | 'entity' | 'record';\n /** For entity type - the entity name */\n entityName?: string;\n /** For record type - the composite key string */\n compositeKeyString?: string;\n /** Icon class for the breadcrumb */\n icon?: string;\n}\n\n/**\n * View mode options for the Data Explorer\n */\nexport type DataExplorerViewMode = 'grid' | 'cards' | 'timeline' | 'map';\n\n/**\n * Timeline orientation options\n */\nexport type TimelineOrientationType = 'vertical' | 'horizontal';\n\n/**\n * Initial navigation state from URL query parameters.\n * Used for deep linking into the Data Explorer.\n */\nexport interface DataExplorerDeepLink {\n /** Entity name to navigate to */\n entity?: string;\n /** Record ID or composite key string to select */\n record?: string;\n /** Filter text to apply (omitted when viewId is present — view carries its own filter) */\n filter?: string;\n /** View mode to use (grid/cards/timeline/map) */\n viewMode?: DataExplorerViewMode;\n /** Saved view ID to load (uses view's filters/sort/grid state) */\n viewId?: string;\n /** Optional semantic name of an alternate base view (`?abv=<Name>`) */\n abv?: string;\n /** Map render mode (point/choropleth/heatmap) — only relevant when viewMode is 'map' */\n mapMode?: string;\n}\n\n/**\n * Per-entity cached state (filters, scroll position, etc.)\n */\nexport interface EntityCacheEntry {\n filterText: string;\n scrollPosition?: number;\n lastAccessed: number; // timestamp for LRU eviction\n}\n\n/**\n * Recent entity access tracking for home screen\n */\nexport interface RecentEntityAccess {\n entityName: string;\n entityId: string;\n lastAccessed: Date;\n accessCount: number;\n}\n\n/**\n * Favorite entity for home screen (using User Favorites entity)\n */\nexport interface FavoriteEntity {\n userFavoriteId: string; // ID from User Favorites entity\n entityName: string;\n entityId: string;\n}\n\n/**\n * Recent record access for home screen (from User Record Logs)\n */\nexport interface RecentRecordAccess {\n entityName: string;\n entityId: string;\n recordId: string;\n recordName?: string;\n latestAt: Date;\n totalCount: number;\n /**\n * Pre-computed \"N ago\" relative-time label for display. Populated by the dashboard when the\n * record set loads and refreshed on a timer, so the template binds a STABLE field instead of\n * calling a `Date.now()`-based method during change detection (which triggers NG0100). See the\n * DataExplorerDashboardComponent relative-time handling.\n */\n relativeTime?: string;\n}\n\n/**\n * Favorite record for home screen (from User Favorites, excluding entity favorites)\n */\nexport interface FavoriteRecord {\n userFavoriteId: string; // ID from User Favorites entity\n entityName: string;\n entityId: string;\n recordId: string;\n recordName?: string;\n}\n\n/**\n * Represents an application group with its entities for the home view.\n * Used by Concept D to organize entities by their first Application membership.\n */\nexport interface AppEntityGroup {\n applicationId: string;\n applicationName: string;\n applicationIcon: string;\n applicationColor: string | null;\n entities: EntityInfo[];\n isExpanded: boolean;\n}\n\n/**\n * Home view mode for the All/Favorites toggle\n */\nexport type HomeViewMode = 'all' | 'favorites';\n\n/**\n * State interface for the Data Explorer dashboard\n */\nexport interface DataExplorerState {\n // Navigation panel\n navigationPanelWidth: number;\n navigationPanelCollapsed: boolean;\n\n // Current context\n selectedEntityName: string | null;\n selectedViewId: string | null;\n\n // View modification tracking\n /** Whether the current view configuration has unsaved changes */\n viewModified: boolean;\n\n // View configuration panel\n /** Whether the view configuration panel is open */\n viewConfigPanelOpen: boolean;\n\n // Smart filter (current entity's filter - also cached in entityCache)\n smartFilterPrompt: string;\n smartFilterEnabled: boolean;\n\n // Per-entity cache for filters and state\n entityCache: Record<string, EntityCacheEntry>;\n\n // View mode\n viewMode: DataExplorerViewMode;\n\n // Timeline configuration (per-entity, but stored here for simplicity)\n timelineOrientation: TimelineOrientationType;\n timelineDateFieldName: string | null;\n timelineSortOrder: 'asc' | 'desc';\n\n // Map configuration (persisted across page reloads)\n mapRenderMode: MapRenderMode;\n mapZoom: number | null;\n mapCenterLat: number | null;\n mapCenterLng: number | null;\n\n // Detail panel\n detailPanelOpen: boolean;\n detailPanelWidth: number;\n selectedRecordId: string | null;\n /** Display name of the currently selected record (for breadcrumbs) */\n selectedRecordName: string | null;\n\n // Section states\n favoritesSectionExpanded: boolean;\n recentSectionExpanded: boolean;\n entitiesSectionExpanded: boolean;\n viewsSectionExpanded: boolean;\n\n // Recent items (legacy - records within current explorer context)\n recentItems: RecentItem[];\n\n // Favorites (legacy - records within current explorer context)\n favorites: FavoriteItem[];\n\n // Home screen state\n /** Whether to show all entities or just DefaultForNewUser entities */\n showAllEntities: boolean;\n /** Recent entity access tracking for home screen */\n recentEntityAccesses: RecentEntityAccess[];\n /** Favorite entities for home screen */\n favoriteEntities: FavoriteEntity[];\n /** Favorite records for home screen (non-entity favorites) */\n favoriteRecords: FavoriteRecord[];\n\n // Concept D: Application Groups + Search-First\n /** Which application group IDs are currently expanded */\n expandedAppGroups: string[];\n /** Whether the right-side quick access panel is open */\n quickAccessPanelOpen: boolean;\n /** Collapse state per section in the quick access panel (key = section id, value = expanded) */\n quickAccessSections: Record<string, boolean>;\n /** Home view mode toggle: show all entities or favorites only */\n homeViewMode: HomeViewMode;\n}\n\nexport interface RecentItem {\n entityName: string;\n /** Serialized CompositeKey using ToConcatenatedString format (Field1|Value1||Field2|Value2) */\n compositeKeyString: string;\n displayName: string;\n timestamp: Date;\n}\n\nexport interface FavoriteItem {\n type: 'record' | 'view' | 'entity';\n entityName?: string;\n /** Serialized CompositeKey using ToConcatenatedString format (Field1|Value1||Field2|Value2) */\n compositeKeyString?: string;\n viewId?: string;\n displayName: string;\n}\n\n/**\n * Field display type for smart rendering in cards\n */\nexport type CardFieldType = 'number' | 'boolean' | 'text' | 'date';\n\n/**\n * Metadata for a field to display in a card\n */\nexport interface CardDisplayField {\n name: string;\n type: CardFieldType;\n label: string;\n}\n\n/**\n * Auto-generated card template based on entity metadata\n */\nexport interface AutoCardTemplate {\n titleField: string;\n subtitleField: string | null;\n descriptionField: string | null;\n /** Display fields with type information for smart rendering */\n displayFields: CardDisplayField[];\n thumbnailField: string | null;\n badgeField: string | null;\n}\n\n/**\n * Default state for the Data Explorer\n */\nexport const DEFAULT_EXPLORER_STATE: DataExplorerState = {\n navigationPanelWidth: 280,\n navigationPanelCollapsed: true,\n selectedEntityName: null,\n selectedViewId: null,\n viewModified: false,\n viewConfigPanelOpen: false,\n smartFilterPrompt: '',\n smartFilterEnabled: true,\n entityCache: {},\n viewMode: 'grid',\n timelineOrientation: 'vertical',\n timelineDateFieldName: null,\n timelineSortOrder: 'desc',\n mapRenderMode: 'point',\n mapZoom: null,\n mapCenterLat: null,\n mapCenterLng: null,\n detailPanelOpen: false,\n detailPanelWidth: 400,\n selectedRecordId: null,\n selectedRecordName: null,\n favoritesSectionExpanded: true,\n recentSectionExpanded: true,\n entitiesSectionExpanded: true,\n viewsSectionExpanded: true,\n recentItems: [],\n favorites: [],\n // Home screen state\n showAllEntities: false, // Default to showing only common entities\n recentEntityAccesses: [],\n favoriteEntities: [],\n favoriteRecords: [],\n // Concept D: Application Groups + Search-First\n expandedAppGroups: [],\n quickAccessPanelOpen: false,\n quickAccessSections: { recentRecords: true, recentEntities: true, favoriteRecords: true },\n homeViewMode: 'all',\n};\n"]}
@@ -1406,7 +1406,7 @@ mutation Delete${typeName}($input: Delete${typeName}Input!) {
1406
1406
  i0.ɵɵconditional(ctx.ResponseJson ? 42 : -1);
1407
1407
  i0.ɵɵadvance(5);
1408
1408
  i0.ɵɵconditional(ctx.ErrorMessage && !ctx.ResponseJson ? 47 : ctx.ResponseJson ? 48 : 49);
1409
- } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i2.MJPageHeaderInteriorComponent, i2.MJEmptyStateComponent, i3.CodeEditorComponent, i4.DatePipe], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n.mj-inspector[_ngcontent-%COMP%] {\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\n.mj-inspector__content[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n.mj-inspector__empty[_ngcontent-%COMP%] {\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}", ".mj-inspector--solo[_ngcontent-%COMP%] { background: var(--mj-bg-page); }\n.gc-endpoint[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11px;\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n color: var(--mj-text-secondary);\n}\n.gc-endpoint-meta[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.gc-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n\n.gc-sidebar[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n min-width: 200px;\n max-width: 560px;\n}\n\n\n.gc-splitter[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-border-subtle);\n transition: background 0.15s;\n position: relative;\n}\n.gc-splitter[_ngcontent-%COMP%]:hover { background: var(--mj-brand-primary); }\n.gc-splitter[_ngcontent-%COMP%]:active { background: color-mix(in srgb, var(--mj-brand-primary) 80%, black); }\n.gc-splitter--vert[_ngcontent-%COMP%] {\n width: 4px;\n cursor: col-resize;\n}\n.gc-splitter--horiz[_ngcontent-%COMP%] {\n height: 4px;\n cursor: row-resize;\n}\n\n.gc-splitter[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n inset: -3px;\n}\n.gc-sidebar-tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-sidebar-tab[_ngcontent-%COMP%] {\n flex: 1;\n padding: 10px 8px;\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n border-bottom: 2px solid transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.gc-sidebar-tab[_ngcontent-%COMP%]:hover { color: var(--mj-text-primary); }\n.gc-sidebar-tab--active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n\n.gc-history[_ngcontent-%COMP%] {\n width: 280px;\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n}\n.gc-history-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-card);\n}\n.gc-history-clear[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.gc-history-clear[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.gc-history-empty[_ngcontent-%COMP%] {\n width: 100%;\n padding: 20px 16px;\n color: var(--mj-text-muted);\n font-size: 12px;\n text-align: center;\n line-height: 1.5;\n}\n.gc-history-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { display: block; font-size: 22px; margin-bottom: 8px; opacity: 0.5; }\n\n.gc-history-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 4px;\n}\n.gc-history-item[_ngcontent-%COMP%] {\n width: 100%;\n text-align: left;\n background: transparent;\n border: 1px solid transparent;\n padding: 8px 10px;\n border-radius: 7px;\n cursor: pointer;\n margin-bottom: 2px;\n font-family: inherit;\n transition: background 0.12s, border-color 0.12s;\n}\n.gc-history-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-subtle);\n}\n.gc-history-item--fav[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.gc-history-item-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.gc-history-status[_ngcontent-%COMP%] {\n font-size: 11px;\n flex-shrink: 0;\n}\n.gc-status--ok[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n.gc-status--err[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n\n.gc-history-label[_ngcontent-%COMP%] {\n flex: 1;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-history-fav[_ngcontent-%COMP%], \n.gc-history-del[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n flex-shrink: 0;\n opacity: 0;\n transition: all 0.12s;\n}\n.gc-history-item[_ngcontent-%COMP%]:hover .gc-history-fav[_ngcontent-%COMP%], \n.gc-history-item[_ngcontent-%COMP%]:hover .gc-history-del[_ngcontent-%COMP%] { opacity: 1; }\n.gc-history-item--fav[_ngcontent-%COMP%] .gc-history-fav[_ngcontent-%COMP%] { opacity: 1; color: var(--mj-status-warning); }\n.gc-history-fav[_ngcontent-%COMP%]:hover { color: var(--mj-status-warning); background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); }\n.gc-history-del[_ngcontent-%COMP%]:hover { color: var(--mj-status-error); background: color-mix(in srgb, var(--mj-status-error) 10%, transparent); }\n\n.gc-history-meta[_ngcontent-%COMP%] {\n margin-top: 3px;\n margin-left: 18px;\n display: flex;\n gap: 4px;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n}\n\n\n.gc-ent-toolbar[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-ent-search-wrap[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n.gc-ent-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 11px;\n pointer-events: none;\n}\n.gc-ent-search[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 10px 6px 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12px;\n font-family: inherit;\n}\n.gc-ent-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.gc-ent-schema[_ngcontent-%COMP%] {\n padding: 5px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 11.5px;\n font-family: inherit;\n cursor: pointer;\n max-width: 130px;\n}\n\n.gc-ent-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.gc-ent-hint[_ngcontent-%COMP%] { font-style: italic; }\n\n.gc-ent-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.gc-ent-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n margin-bottom: 4px;\n overflow: hidden;\n transition: border-color 0.12s, box-shadow 0.15s;\n}\n.gc-ent-card[_ngcontent-%COMP%]:hover { border-color: var(--mj-border-default); }\n.gc-ent-card--expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n.gc-ent-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 10px;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n font-family: inherit;\n}\n.gc-ent-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.gc-ent-card--expanded[_ngcontent-%COMP%] .gc-ent-row[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent); }\n.gc-ent-chev[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 10px;\n width: 12px;\n flex-shrink: 0;\n transition: transform 0.15s;\n}\n.gc-ent-chev--down[_ngcontent-%COMP%] { transform: rotate(90deg); }\n.gc-ent-info[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.gc-ent-name[_ngcontent-%COMP%] {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-ent-meta-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n align-items: center;\n}\n.gc-ent-typename[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-ent-schema-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.4px;\n}\n\n.gc-ent-actions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n padding: 6px 10px 8px 30px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n.gc-ent-op[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 5px 9px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.12s;\n}\n.gc-ent-op[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n.gc-ent-op--read[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.gc-ent-op--write[_ngcontent-%COMP%]:hover {\n border-color: color-mix(in srgb, var(--mj-status-warning) 50%, var(--mj-border-strong));\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n.gc-ent-op--danger[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 6%, transparent);\n}\n.gc-ent-desc[_ngcontent-%COMP%] {\n padding: 4px 10px 8px 30px;\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.45;\n}\n\n.gc-ent-empty[_ngcontent-%COMP%] {\n width: 100%;\n padding: 30px 18px;\n color: var(--mj-text-muted);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n}\n.gc-ent-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 18px; opacity: 0.5; }\n.gc-ent-clear[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 11.5px;\n cursor: pointer;\n font-family: inherit;\n margin-top: 4px;\n}\n.gc-ent-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-brand-primary);\n}\n\n\n.gc-schema-toolbar[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-schema-search-wrap[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n}\n.gc-schema-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 11px;\n pointer-events: none;\n}\n.gc-schema-search[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 10px 6px 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12px;\n font-family: inherit;\n}\n.gc-schema-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.gc-schema-reload[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 30px;\n height: 30px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n flex-shrink: 0;\n}\n.gc-schema-reload[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n.gc-schema-kinds[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 6px 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.gc-schema-kind[_ngcontent-%COMP%] {\n flex: 1;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n padding: 5px 6px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n transition: all 0.12s;\n}\n.gc-schema-kind[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.gc-schema-kind[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n padding: 0 6px;\n border-radius: 100px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n.gc-schema-kind--active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: white;\n}\n.gc-schema-kind--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n background: rgba(255, 255, 255, 0.25);\n border-color: transparent;\n color: white;\n}\n\n.gc-schema-state[_ngcontent-%COMP%] {\n padding: 28px 18px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n line-height: 1.5;\n}\n.gc-schema-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 22px; opacity: 0.5; }\n\n.gc-schema-disabled[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n.gc-schema-disabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n opacity: 0.85;\n font-size: 24px;\n margin-bottom: 4px;\n}\n.gc-schema-disabled-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.gc-schema-disabled-body[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n max-width: 240px;\n}\n\n.gc-schema-state--err[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n align-items: stretch;\n text-align: left;\n}\n.gc-schema-state--err[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-status-error); opacity: 0.9; align-self: center; }\n.gc-schema-err-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n text-align: center;\n color: var(--mj-status-error);\n}\n.gc-schema-err-body[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 8px 10px;\n border-radius: 6px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n word-break: break-word;\n max-height: 160px;\n overflow-y: auto;\n}\n\n.gc-schema-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.gc-schema-op[_ngcontent-%COMP%] {\n width: 100%;\n text-align: left;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n padding: 8px 10px;\n margin-bottom: 4px;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.12s;\n}\n.gc-schema-op[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n transform: translateX(2px);\n}\n.gc-schema-op-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 8px;\n margin-bottom: 3px;\n}\n.gc-schema-op-kind[_ngcontent-%COMP%] {\n font-size: 9.5px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: 1px 6px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n.gc-schema-op--mutation[_ngcontent-%COMP%] .gc-schema-op-kind[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n.gc-schema-op-name[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-all;\n}\n.gc-schema-op-args[_ngcontent-%COMP%], \n.gc-schema-op-return[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n word-break: break-word;\n}\n.gc-schema-op-return[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n.gc-schema-op-return[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; margin-right: 3px; opacity: 0.6; }\n.gc-schema-op-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 5px;\n line-height: 1.4;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n\n.gc-main[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gc-editor-wrap[_ngcontent-%COMP%], \n.gc-vars-wrap[_ngcontent-%COMP%], \n.gc-response-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n}\n.gc-editor-wrap[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n flex: 1;\n min-height: 200px;\n}\n.gc-response-wrap[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 200px;\n background: var(--mj-bg-page);\n}\n\n.gc-editor-head[_ngcontent-%COMP%], \n.gc-response-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.gc-editor-label[_ngcontent-%COMP%] { flex: 0 0 auto; }\n.gc-editor-hint[_ngcontent-%COMP%] {\n font-weight: 500;\n text-transform: none;\n letter-spacing: normal;\n color: var(--mj-text-muted);\n font-size: 11px;\n}\n.gc-mini-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n background: transparent;\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n padding: 4px 10px;\n border-radius: 5px;\n font-size: 11px;\n cursor: pointer;\n font-family: inherit;\n text-transform: none;\n letter-spacing: normal;\n font-weight: 500;\n}\n.gc-mini-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n.gc-mini-btn--danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 40%, var(--mj-border-default));\n}\n\n\n\nmj-code-editor.gc-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n width: 100%;\n display: block;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\nmj-code-editor.gc-editor[_ngcontent-%COMP%] .cm-editor {\n height: 100%;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n}\nmj-code-editor.gc-editor[_ngcontent-%COMP%] .cm-scroller {\n line-height: 1.55;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n}\nmj-code-editor.gc-editor--vars[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n flex: 0 0 auto;\n min-height: 80px;\n max-height: 160px;\n}\nmj-code-editor.gc-editor--vars[_ngcontent-%COMP%] .cm-editor {\n background: var(--mj-bg-surface-sunken);\n}\n\n\n.gc-vars-wrap[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n.gc-vars-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n background: var(--mj-bg-surface-card);\n border: none;\n padding: 7px 16px;\n cursor: pointer;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-family: inherit;\n text-align: left;\n transition: background 0.12s;\n}\n.gc-vars-toggle[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.gc-vars-chev[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 10px;\n transition: transform 0.15s;\n}\n.gc-vars-chev--down[_ngcontent-%COMP%] { transform: rotate(90deg); }\n.gc-vars-pill[_ngcontent-%COMP%] {\n margin-left: auto;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n font-size: 10px;\n padding: 1px 8px;\n border-radius: 100px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n\n\n.gc-run-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n.gc-run-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n border: 1px solid var(--mj-brand-primary);\n padding: 8px 18px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n transition: background 0.15s, transform 0.1s;\n}\n.gc-run-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.gc-run-btn[_ngcontent-%COMP%]:active:not(:disabled) { transform: scale(0.98); }\n.gc-run-btn[_ngcontent-%COMP%]:disabled {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n color: var(--mj-text-muted);\n box-shadow: none;\n cursor: wait;\n}\n\n.gc-run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.gc-status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 100px;\n font-size: 11px;\n font-weight: 600;\n}\n.gc-status-badge--ok[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary));\n}\n.gc-status-badge--err[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-error) 70%, var(--mj-text-primary));\n}\n.gc-meta-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 3px 9px;\n border-radius: 100px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n}\n.gc-spacer[_ngcontent-%COMP%] { flex: 1; }\n\n\n.gc-response[_ngcontent-%COMP%] {\n margin: 0;\n flex: 1;\n overflow: auto;\n padding: 14px 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n line-height: 1.55;\n}\n.gc-response[_ngcontent-%COMP%] code[_ngcontent-%COMP%] { white-space: pre-wrap; word-break: break-word; }\n\n.gc-error[_ngcontent-%COMP%] {\n margin: 12px 16px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-subtle));\n border-radius: 8px;\n color: color-mix(in srgb, var(--mj-status-error) 70%, var(--mj-text-primary));\n font-size: 12.5px;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n.gc-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-top: 2px; flex-shrink: 0; }\n.gc-error--inline[_ngcontent-%COMP%] { margin-bottom: 0; }\n\n.gc-empty[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n.gc-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 24px; opacity: 0.4; }\n\n@media (max-width: 900px) {\n .gc-sidebar[_ngcontent-%COMP%], .gc-history[_ngcontent-%COMP%] { display: none; }\n}"] });
1409
+ } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i2.MJPageHeaderInteriorComponent, i2.MJEmptyStateComponent, i3.CodeEditorComponent, i4.DatePipe], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n.mj-inspector[_ngcontent-%COMP%] {\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\n.mj-inspector__content[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n.mj-inspector__empty[_ngcontent-%COMP%] {\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}", ".mj-inspector--solo[_ngcontent-%COMP%] { background: var(--mj-bg-page); }\n.gc-endpoint[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11px;\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n color: var(--mj-text-secondary);\n}\n.gc-endpoint-meta[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.gc-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n\n.gc-sidebar[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n min-width: 200px;\n max-width: 560px;\n}\n\n\n.gc-splitter[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-border-subtle);\n transition: background 0.15s;\n position: relative;\n}\n.gc-splitter[_ngcontent-%COMP%]:hover { background: var(--mj-brand-primary); }\n.gc-splitter[_ngcontent-%COMP%]:active { background: color-mix(in srgb, var(--mj-brand-primary) 80%, black); }\n.gc-splitter--vert[_ngcontent-%COMP%] {\n width: 4px;\n cursor: col-resize;\n}\n.gc-splitter--horiz[_ngcontent-%COMP%] {\n height: 4px;\n cursor: row-resize;\n}\n\n.gc-splitter[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n inset: -3px;\n}\n.gc-sidebar-tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-sidebar-tab[_ngcontent-%COMP%] {\n flex: 1;\n padding: 10px 8px;\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n border-bottom: 2px solid transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.gc-sidebar-tab[_ngcontent-%COMP%]:hover { color: var(--mj-text-primary); }\n.gc-sidebar-tab--active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n\n.gc-history[_ngcontent-%COMP%] {\n width: 280px;\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n}\n.gc-history-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-card);\n}\n.gc-history-clear[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.gc-history-clear[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.gc-history-empty[_ngcontent-%COMP%] {\n width: 100%;\n padding: 20px 16px;\n color: var(--mj-text-muted);\n font-size: 12px;\n text-align: center;\n line-height: 1.5;\n}\n.gc-history-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { display: block; font-size: 22px; margin-bottom: 8px; opacity: 0.5; }\n\n.gc-history-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 4px;\n}\n.gc-history-item[_ngcontent-%COMP%] {\n width: 100%;\n text-align: left;\n background: transparent;\n border: 1px solid transparent;\n padding: 8px 10px;\n border-radius: 7px;\n cursor: pointer;\n margin-bottom: 2px;\n font-family: inherit;\n transition: background 0.12s, border-color 0.12s;\n}\n.gc-history-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-subtle);\n}\n.gc-history-item--fav[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.gc-history-item-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.gc-history-status[_ngcontent-%COMP%] {\n font-size: 11px;\n flex-shrink: 0;\n}\n.gc-status--ok[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n.gc-status--err[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n\n.gc-history-label[_ngcontent-%COMP%] {\n flex: 1;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-history-fav[_ngcontent-%COMP%], \n.gc-history-del[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n flex-shrink: 0;\n opacity: 0;\n transition: all 0.12s;\n}\n.gc-history-item[_ngcontent-%COMP%]:hover .gc-history-fav[_ngcontent-%COMP%], \n.gc-history-item[_ngcontent-%COMP%]:hover .gc-history-del[_ngcontent-%COMP%] { opacity: 1; }\n.gc-history-item--fav[_ngcontent-%COMP%] .gc-history-fav[_ngcontent-%COMP%] { opacity: 1; color: var(--mj-status-warning); }\n.gc-history-fav[_ngcontent-%COMP%]:hover { color: var(--mj-status-warning); background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); }\n.gc-history-del[_ngcontent-%COMP%]:hover { color: var(--mj-status-error); background: color-mix(in srgb, var(--mj-status-error) 10%, transparent); }\n\n.gc-history-meta[_ngcontent-%COMP%] {\n margin-top: 3px;\n margin-left: 18px;\n display: flex;\n gap: 4px;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n}\n\n\n.gc-ent-toolbar[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-ent-search-wrap[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n.gc-ent-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 11px;\n pointer-events: none;\n}\n.gc-ent-search[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 10px 6px 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12px;\n font-family: inherit;\n}\n.gc-ent-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.gc-ent-schema[_ngcontent-%COMP%] {\n padding: 5px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 11.5px;\n font-family: inherit;\n cursor: pointer;\n max-width: 130px;\n}\n\n.gc-ent-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.gc-ent-hint[_ngcontent-%COMP%] { font-style: italic; }\n\n.gc-ent-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.gc-ent-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n margin-bottom: 4px;\n overflow: hidden;\n transition: border-color 0.12s, box-shadow 0.15s;\n}\n.gc-ent-card[_ngcontent-%COMP%]:hover { border-color: var(--mj-border-default); }\n.gc-ent-card--expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n.gc-ent-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 10px;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n font-family: inherit;\n}\n.gc-ent-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.gc-ent-card--expanded[_ngcontent-%COMP%] .gc-ent-row[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent); }\n.gc-ent-chev[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 10px;\n width: 12px;\n flex-shrink: 0;\n transition: transform 0.15s;\n}\n.gc-ent-chev--down[_ngcontent-%COMP%] { transform: rotate(90deg); }\n.gc-ent-info[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.gc-ent-name[_ngcontent-%COMP%] {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-ent-meta-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n align-items: center;\n}\n.gc-ent-typename[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-ent-schema-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.4px;\n}\n\n.gc-ent-actions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n padding: 6px 10px 8px 30px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n.gc-ent-op[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 5px 9px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.12s;\n}\n.gc-ent-op[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n.gc-ent-op--read[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.gc-ent-op--write[_ngcontent-%COMP%]:hover {\n border-color: color-mix(in srgb, var(--mj-status-warning) 50%, var(--mj-border-strong));\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n.gc-ent-op--danger[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 6%, transparent);\n}\n.gc-ent-desc[_ngcontent-%COMP%] {\n padding: 4px 10px 8px 30px;\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.45;\n}\n\n.gc-ent-empty[_ngcontent-%COMP%] {\n width: 100%;\n padding: 30px 18px;\n color: var(--mj-text-muted);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n}\n.gc-ent-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 18px; opacity: 0.5; }\n.gc-ent-clear[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 11.5px;\n cursor: pointer;\n font-family: inherit;\n margin-top: 4px;\n}\n.gc-ent-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-brand-primary);\n}\n\n\n.gc-schema-toolbar[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-schema-search-wrap[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n}\n.gc-schema-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 11px;\n pointer-events: none;\n}\n.gc-schema-search[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 10px 6px 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12px;\n font-family: inherit;\n}\n.gc-schema-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.gc-schema-reload[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 30px;\n height: 30px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n flex-shrink: 0;\n}\n.gc-schema-reload[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n.gc-schema-kinds[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 6px 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.gc-schema-kind[_ngcontent-%COMP%] {\n flex: 1;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n padding: 5px 6px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n transition: all 0.12s;\n}\n.gc-schema-kind[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.gc-schema-kind[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n padding: 0 6px;\n border-radius: 100px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n.gc-schema-kind--active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n.gc-schema-kind--active[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n background: rgba(255, 255, 255, 0.25);\n border-color: transparent;\n color: var(--mj-brand-on-primary);\n}\n\n.gc-schema-state[_ngcontent-%COMP%] {\n padding: 28px 18px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n line-height: 1.5;\n}\n.gc-schema-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 22px; opacity: 0.5; }\n\n.gc-schema-disabled[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n.gc-schema-disabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n opacity: 0.85;\n font-size: 24px;\n margin-bottom: 4px;\n}\n.gc-schema-disabled-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.gc-schema-disabled-body[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n max-width: 240px;\n}\n\n.gc-schema-state--err[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n align-items: stretch;\n text-align: left;\n}\n.gc-schema-state--err[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-status-error); opacity: 0.9; align-self: center; }\n.gc-schema-err-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n text-align: center;\n color: var(--mj-status-error);\n}\n.gc-schema-err-body[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 8px 10px;\n border-radius: 6px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n word-break: break-word;\n max-height: 160px;\n overflow-y: auto;\n}\n\n.gc-schema-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.gc-schema-op[_ngcontent-%COMP%] {\n width: 100%;\n text-align: left;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n padding: 8px 10px;\n margin-bottom: 4px;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.12s;\n}\n.gc-schema-op[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n transform: translateX(2px);\n}\n.gc-schema-op-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 8px;\n margin-bottom: 3px;\n}\n.gc-schema-op-kind[_ngcontent-%COMP%] {\n font-size: 9.5px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: 1px 6px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n.gc-schema-op--mutation[_ngcontent-%COMP%] .gc-schema-op-kind[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n.gc-schema-op-name[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-all;\n}\n.gc-schema-op-args[_ngcontent-%COMP%], \n.gc-schema-op-return[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n word-break: break-word;\n}\n.gc-schema-op-return[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n.gc-schema-op-return[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; margin-right: 3px; opacity: 0.6; }\n.gc-schema-op-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 5px;\n line-height: 1.4;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n\n.gc-main[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gc-editor-wrap[_ngcontent-%COMP%], \n.gc-vars-wrap[_ngcontent-%COMP%], \n.gc-response-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n}\n.gc-editor-wrap[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n flex: 1;\n min-height: 200px;\n}\n.gc-response-wrap[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 200px;\n background: var(--mj-bg-page);\n}\n\n.gc-editor-head[_ngcontent-%COMP%], \n.gc-response-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.gc-editor-label[_ngcontent-%COMP%] { flex: 0 0 auto; }\n.gc-editor-hint[_ngcontent-%COMP%] {\n font-weight: 500;\n text-transform: none;\n letter-spacing: normal;\n color: var(--mj-text-muted);\n font-size: 11px;\n}\n.gc-mini-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n background: transparent;\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n padding: 4px 10px;\n border-radius: 5px;\n font-size: 11px;\n cursor: pointer;\n font-family: inherit;\n text-transform: none;\n letter-spacing: normal;\n font-weight: 500;\n}\n.gc-mini-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n.gc-mini-btn--danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 40%, var(--mj-border-default));\n}\n\n\n\nmj-code-editor.gc-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n width: 100%;\n display: block;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\nmj-code-editor.gc-editor[_ngcontent-%COMP%] .cm-editor {\n height: 100%;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n}\nmj-code-editor.gc-editor[_ngcontent-%COMP%] .cm-scroller {\n line-height: 1.55;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n}\nmj-code-editor.gc-editor--vars[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n flex: 0 0 auto;\n min-height: 80px;\n max-height: 160px;\n}\nmj-code-editor.gc-editor--vars[_ngcontent-%COMP%] .cm-editor {\n background: var(--mj-bg-surface-sunken);\n}\n\n\n.gc-vars-wrap[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n.gc-vars-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n background: var(--mj-bg-surface-card);\n border: none;\n padding: 7px 16px;\n cursor: pointer;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-family: inherit;\n text-align: left;\n transition: background 0.12s;\n}\n.gc-vars-toggle[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.gc-vars-chev[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 10px;\n transition: transform 0.15s;\n}\n.gc-vars-chev--down[_ngcontent-%COMP%] { transform: rotate(90deg); }\n.gc-vars-pill[_ngcontent-%COMP%] {\n margin-left: auto;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n font-size: 10px;\n padding: 1px 8px;\n border-radius: 100px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n\n\n.gc-run-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n.gc-run-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: 1px solid var(--mj-brand-primary);\n padding: 8px 18px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n transition: background 0.15s, transform 0.1s;\n}\n.gc-run-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.gc-run-btn[_ngcontent-%COMP%]:active:not(:disabled) { transform: scale(0.98); }\n.gc-run-btn[_ngcontent-%COMP%]:disabled {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n color: var(--mj-text-muted);\n box-shadow: none;\n cursor: wait;\n}\n\n.gc-run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.gc-status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 100px;\n font-size: 11px;\n font-weight: 600;\n}\n.gc-status-badge--ok[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary));\n}\n.gc-status-badge--err[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-error) 70%, var(--mj-text-primary));\n}\n.gc-meta-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 3px 9px;\n border-radius: 100px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n}\n.gc-spacer[_ngcontent-%COMP%] { flex: 1; }\n\n\n.gc-response[_ngcontent-%COMP%] {\n margin: 0;\n flex: 1;\n overflow: auto;\n padding: 14px 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n line-height: 1.55;\n}\n.gc-response[_ngcontent-%COMP%] code[_ngcontent-%COMP%] { white-space: pre-wrap; word-break: break-word; }\n\n.gc-error[_ngcontent-%COMP%] {\n margin: 12px 16px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-subtle));\n border-radius: 8px;\n color: color-mix(in srgb, var(--mj-status-error) 70%, var(--mj-text-primary));\n font-size: 12.5px;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n.gc-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-top: 2px; flex-shrink: 0; }\n.gc-error--inline[_ngcontent-%COMP%] { margin-bottom: 0; }\n\n.gc-empty[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n.gc-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 24px; opacity: 0.4; }\n\n@media (max-width: 900px) {\n .gc-sidebar[_ngcontent-%COMP%], .gc-history[_ngcontent-%COMP%] { display: none; }\n}"] });
1410
1410
  };
1411
1411
  GraphQLConsoleComponent = __decorate([
1412
1412
  RegisterClass(BaseResourceComponent, 'GraphQLConsoleInspector')
@@ -1414,7 +1414,7 @@ GraphQLConsoleComponent = __decorate([
1414
1414
  export { GraphQLConsoleComponent };
1415
1415
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GraphQLConsoleComponent, [{
1416
1416
  type: Component,
1417
- args: [{ standalone: false, selector: 'mj-graphql-console', template: "<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 <mj-empty-state class=\"gc-history-empty\" Size=\"compact\" Icon=\"fa-regular fa-circle-question\"\n Title=\"Run a query to see it here\" Message=\"Star a query to keep it.\" />\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>\u00B7</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\u2026\"\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 <mj-empty-state class=\"gc-ent-empty\" Variant=\"no-results\" Size=\"compact\"\n Icon=\"fa-solid fa-magnifying-glass\" Title=\"No entities match.\"\n [ActionText]=\"(EntitiesSearch || EntitySchemaFilter) ? 'Clear filters' : ''\"\n (Action)=\"ClearEntityFilters()\" />\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\u2026\"\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\u2026</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 \u2014 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')) + ' \u00B7 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\">\u2318/Ctrl+Enter to run \u00B7 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\u2026\">\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\u2026\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 <mj-empty-state class=\"gc-empty\" Icon=\"fa-solid fa-arrow-up-from-bracket\"\n Title=\"Run a query to see results here.\" />\n }\n </div>\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", ".mj-inspector--solo { background: var(--mj-bg-page); }\n.gc-endpoint {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11px;\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n color: var(--mj-text-secondary);\n}\n.gc-endpoint-meta {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.gc-body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n/* Sidebar (history + entities + schema) \u2014 width is bound from component */\n.gc-sidebar {\n flex-shrink: 0;\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n min-width: 200px;\n max-width: 560px;\n}\n\n/* Resizable splitters */\n.gc-splitter {\n flex-shrink: 0;\n background: var(--mj-border-subtle);\n transition: background 0.15s;\n position: relative;\n}\n.gc-splitter:hover { background: var(--mj-brand-primary); }\n.gc-splitter:active { background: color-mix(in srgb, var(--mj-brand-primary) 80%, black); }\n.gc-splitter--vert {\n width: 4px;\n cursor: col-resize;\n}\n.gc-splitter--horiz {\n height: 4px;\n cursor: row-resize;\n}\n/* Bigger invisible hit area so the splitter is easier to grab */\n.gc-splitter::before {\n content: '';\n position: absolute;\n inset: -3px;\n}\n.gc-sidebar-tabs {\n display: flex;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-sidebar-tab {\n flex: 1;\n padding: 10px 8px;\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n border-bottom: 2px solid transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.gc-sidebar-tab:hover { color: var(--mj-text-primary); }\n.gc-sidebar-tab--active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n/* History sidebar (legacy classname kept for the inner head row) */\n.gc-history {\n width: 280px;\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n}\n.gc-history-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-card);\n}\n.gc-history-clear {\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.gc-history-clear:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.gc-history-empty {\n width: 100%;\n padding: 20px 16px;\n color: var(--mj-text-muted);\n font-size: 12px;\n text-align: center;\n line-height: 1.5;\n}\n.gc-history-empty i { display: block; font-size: 22px; margin-bottom: 8px; opacity: 0.5; }\n\n.gc-history-list {\n flex: 1;\n overflow-y: auto;\n padding: 4px;\n}\n.gc-history-item {\n width: 100%;\n text-align: left;\n background: transparent;\n border: 1px solid transparent;\n padding: 8px 10px;\n border-radius: 7px;\n cursor: pointer;\n margin-bottom: 2px;\n font-family: inherit;\n transition: background 0.12s, border-color 0.12s;\n}\n.gc-history-item:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-subtle);\n}\n.gc-history-item--fav {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.gc-history-item-head {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.gc-history-status {\n font-size: 11px;\n flex-shrink: 0;\n}\n.gc-status--ok { color: var(--mj-status-success); }\n.gc-status--err { color: var(--mj-status-error); }\n\n.gc-history-label {\n flex: 1;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-history-fav,\n.gc-history-del {\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n flex-shrink: 0;\n opacity: 0;\n transition: all 0.12s;\n}\n.gc-history-item:hover .gc-history-fav,\n.gc-history-item:hover .gc-history-del { opacity: 1; }\n.gc-history-item--fav .gc-history-fav { opacity: 1; color: var(--mj-status-warning); }\n.gc-history-fav:hover { color: var(--mj-status-warning); background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); }\n.gc-history-del:hover { color: var(--mj-status-error); background: color-mix(in srgb, var(--mj-status-error) 10%, transparent); }\n\n.gc-history-meta {\n margin-top: 3px;\n margin-left: 18px;\n display: flex;\n gap: 4px;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n}\n\n/* ---------- Entities tab ---------- */\n.gc-ent-toolbar {\n display: flex;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-ent-search-wrap {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n.gc-ent-search-icon {\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 11px;\n pointer-events: none;\n}\n.gc-ent-search {\n width: 100%;\n padding: 6px 10px 6px 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12px;\n font-family: inherit;\n}\n.gc-ent-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.gc-ent-schema {\n padding: 5px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 11.5px;\n font-family: inherit;\n cursor: pointer;\n max-width: 130px;\n}\n\n.gc-ent-meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.gc-ent-hint { font-style: italic; }\n\n.gc-ent-list {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.gc-ent-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n margin-bottom: 4px;\n overflow: hidden;\n transition: border-color 0.12s, box-shadow 0.15s;\n}\n.gc-ent-card:hover { border-color: var(--mj-border-default); }\n.gc-ent-card--expanded {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n.gc-ent-row {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 10px;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n font-family: inherit;\n}\n.gc-ent-row:hover { background: var(--mj-bg-surface-hover); }\n.gc-ent-card--expanded .gc-ent-row { background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent); }\n.gc-ent-chev {\n color: var(--mj-text-muted);\n font-size: 10px;\n width: 12px;\n flex-shrink: 0;\n transition: transform 0.15s;\n}\n.gc-ent-chev--down { transform: rotate(90deg); }\n.gc-ent-info { flex: 1; min-width: 0; }\n.gc-ent-name {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-ent-meta-row {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n align-items: center;\n}\n.gc-ent-typename {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-ent-schema-badge {\n font-size: 10px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.4px;\n}\n\n.gc-ent-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n padding: 6px 10px 8px 30px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n.gc-ent-op {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 5px 9px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.12s;\n}\n.gc-ent-op:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n.gc-ent-op--read:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.gc-ent-op--write:hover {\n border-color: color-mix(in srgb, var(--mj-status-warning) 50%, var(--mj-border-strong));\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n.gc-ent-op--danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 6%, transparent);\n}\n.gc-ent-desc {\n padding: 4px 10px 8px 30px;\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.45;\n}\n\n.gc-ent-empty {\n width: 100%;\n padding: 30px 18px;\n color: var(--mj-text-muted);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n}\n.gc-ent-empty i { font-size: 18px; opacity: 0.5; }\n.gc-ent-clear {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 11.5px;\n cursor: pointer;\n font-family: inherit;\n margin-top: 4px;\n}\n.gc-ent-clear:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-brand-primary);\n}\n\n/* ---------- Schema explorer ---------- */\n.gc-schema-toolbar {\n display: flex;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-schema-search-wrap {\n position: relative;\n flex: 1;\n}\n.gc-schema-search-icon {\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 11px;\n pointer-events: none;\n}\n.gc-schema-search {\n width: 100%;\n padding: 6px 10px 6px 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12px;\n font-family: inherit;\n}\n.gc-schema-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.gc-schema-reload {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 30px;\n height: 30px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n flex-shrink: 0;\n}\n.gc-schema-reload:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n.gc-schema-kinds {\n display: flex;\n gap: 4px;\n padding: 6px 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.gc-schema-kind {\n flex: 1;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n padding: 5px 6px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n transition: all 0.12s;\n}\n.gc-schema-kind:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.gc-schema-kind span {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n padding: 0 6px;\n border-radius: 100px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n.gc-schema-kind--active {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: white;\n}\n.gc-schema-kind--active span {\n background: rgba(255, 255, 255, 0.25);\n border-color: transparent;\n color: white;\n}\n\n.gc-schema-state {\n padding: 28px 18px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n line-height: 1.5;\n}\n.gc-schema-state i { font-size: 22px; opacity: 0.5; }\n\n.gc-schema-disabled {\n color: var(--mj-text-secondary);\n}\n.gc-schema-disabled i {\n color: var(--mj-status-warning);\n opacity: 0.85;\n font-size: 24px;\n margin-bottom: 4px;\n}\n.gc-schema-disabled-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.gc-schema-disabled-body {\n font-size: 12px;\n color: var(--mj-text-muted);\n max-width: 240px;\n}\n\n.gc-schema-state--err {\n color: var(--mj-status-error);\n align-items: stretch;\n text-align: left;\n}\n.gc-schema-state--err i { color: var(--mj-status-error); opacity: 0.9; align-self: center; }\n.gc-schema-err-title {\n font-size: 13px;\n font-weight: 600;\n text-align: center;\n color: var(--mj-status-error);\n}\n.gc-schema-err-body {\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 8px 10px;\n border-radius: 6px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n word-break: break-word;\n max-height: 160px;\n overflow-y: auto;\n}\n\n.gc-schema-list {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.gc-schema-op {\n width: 100%;\n text-align: left;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n padding: 8px 10px;\n margin-bottom: 4px;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.12s;\n}\n.gc-schema-op:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n transform: translateX(2px);\n}\n.gc-schema-op-head {\n display: flex;\n align-items: baseline;\n gap: 8px;\n margin-bottom: 3px;\n}\n.gc-schema-op-kind {\n font-size: 9.5px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: 1px 6px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n.gc-schema-op--mutation .gc-schema-op-kind {\n background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n.gc-schema-op-name {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-all;\n}\n.gc-schema-op-args,\n.gc-schema-op-return {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n word-break: break-word;\n}\n.gc-schema-op-return {\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n.gc-schema-op-return i { font-size: 9px; margin-right: 3px; opacity: 0.6; }\n.gc-schema-op-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 5px;\n line-height: 1.4;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* Main panel */\n.gc-main {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gc-editor-wrap,\n.gc-vars-wrap,\n.gc-response-wrap {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n}\n.gc-editor-wrap {\n border-bottom: 1px solid var(--mj-border-subtle);\n flex: 1;\n min-height: 200px;\n}\n.gc-response-wrap {\n flex: 1;\n min-height: 200px;\n background: var(--mj-bg-page);\n}\n\n.gc-editor-head,\n.gc-response-head {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.gc-editor-label { flex: 0 0 auto; }\n.gc-editor-hint {\n font-weight: 500;\n text-transform: none;\n letter-spacing: normal;\n color: var(--mj-text-muted);\n font-size: 11px;\n}\n.gc-mini-btn {\n margin-left: auto;\n background: transparent;\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n padding: 4px 10px;\n border-radius: 5px;\n font-size: 11px;\n cursor: pointer;\n font-family: inherit;\n text-transform: none;\n letter-spacing: normal;\n font-weight: 500;\n}\n.gc-mini-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n.gc-mini-btn--danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 40%, var(--mj-border-default));\n}\n\n/* mj-code-editor host fill \u2014 the component renders CodeMirror internally\n and we want it to use the full available area of its flex parent. */\nmj-code-editor.gc-editor {\n flex: 1;\n min-height: 0;\n width: 100%;\n display: block;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\nmj-code-editor.gc-editor ::ng-deep .cm-editor {\n height: 100%;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n}\nmj-code-editor.gc-editor ::ng-deep .cm-scroller {\n line-height: 1.55;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n}\nmj-code-editor.gc-editor--vars {\n background: var(--mj-bg-surface-sunken);\n flex: 0 0 auto;\n min-height: 80px;\n max-height: 160px;\n}\nmj-code-editor.gc-editor--vars ::ng-deep .cm-editor {\n background: var(--mj-bg-surface-sunken);\n}\n\n/* Variables collapsible */\n.gc-vars-wrap {\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n.gc-vars-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n background: var(--mj-bg-surface-card);\n border: none;\n padding: 7px 16px;\n cursor: pointer;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-family: inherit;\n text-align: left;\n transition: background 0.12s;\n}\n.gc-vars-toggle:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.gc-vars-chev {\n color: var(--mj-text-muted);\n font-size: 10px;\n transition: transform 0.15s;\n}\n.gc-vars-chev--down { transform: rotate(90deg); }\n.gc-vars-pill {\n margin-left: auto;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n font-size: 10px;\n padding: 1px 8px;\n border-radius: 100px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n\n/* Run bar */\n.gc-run-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n.gc-run-btn {\n background: var(--mj-brand-primary);\n color: white;\n border: 1px solid var(--mj-brand-primary);\n padding: 8px 18px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n transition: background 0.15s, transform 0.1s;\n}\n.gc-run-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.gc-run-btn:active:not(:disabled) { transform: scale(0.98); }\n.gc-run-btn:disabled {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n color: var(--mj-text-muted);\n box-shadow: none;\n cursor: wait;\n}\n\n.gc-run-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.gc-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 100px;\n font-size: 11px;\n font-weight: 600;\n}\n.gc-status-badge--ok {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary));\n}\n.gc-status-badge--err {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-error) 70%, var(--mj-text-primary));\n}\n.gc-meta-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 3px 9px;\n border-radius: 100px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n}\n.gc-spacer { flex: 1; }\n\n/* Response */\n.gc-response {\n margin: 0;\n flex: 1;\n overflow: auto;\n padding: 14px 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n line-height: 1.55;\n}\n.gc-response code { white-space: pre-wrap; word-break: break-word; }\n\n.gc-error {\n margin: 12px 16px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-subtle));\n border-radius: 8px;\n color: color-mix(in srgb, var(--mj-status-error) 70%, var(--mj-text-primary));\n font-size: 12.5px;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n.gc-error i { margin-top: 2px; flex-shrink: 0; }\n.gc-error--inline { margin-bottom: 0; }\n\n.gc-empty {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n.gc-empty i { font-size: 24px; opacity: 0.4; }\n\n@media (max-width: 900px) {\n .gc-sidebar, .gc-history { display: none; }\n}\n"] }]
1417
+ args: [{ standalone: false, selector: 'mj-graphql-console', template: "<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 <mj-empty-state class=\"gc-history-empty\" Size=\"compact\" Icon=\"fa-regular fa-circle-question\"\n Title=\"Run a query to see it here\" Message=\"Star a query to keep it.\" />\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>\u00B7</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\u2026\"\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 <mj-empty-state class=\"gc-ent-empty\" Variant=\"no-results\" Size=\"compact\"\n Icon=\"fa-solid fa-magnifying-glass\" Title=\"No entities match.\"\n [ActionText]=\"(EntitiesSearch || EntitySchemaFilter) ? 'Clear filters' : ''\"\n (Action)=\"ClearEntityFilters()\" />\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\u2026\"\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\u2026</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 \u2014 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')) + ' \u00B7 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\">\u2318/Ctrl+Enter to run \u00B7 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\u2026\">\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\u2026\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 <mj-empty-state class=\"gc-empty\" Icon=\"fa-solid fa-arrow-up-from-bracket\"\n Title=\"Run a query to see results here.\" />\n }\n </div>\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", ".mj-inspector--solo { background: var(--mj-bg-page); }\n.gc-endpoint {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11px;\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n color: var(--mj-text-secondary);\n}\n.gc-endpoint-meta {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.gc-body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n/* Sidebar (history + entities + schema) \u2014 width is bound from component */\n.gc-sidebar {\n flex-shrink: 0;\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n min-width: 200px;\n max-width: 560px;\n}\n\n/* Resizable splitters */\n.gc-splitter {\n flex-shrink: 0;\n background: var(--mj-border-subtle);\n transition: background 0.15s;\n position: relative;\n}\n.gc-splitter:hover { background: var(--mj-brand-primary); }\n.gc-splitter:active { background: color-mix(in srgb, var(--mj-brand-primary) 80%, black); }\n.gc-splitter--vert {\n width: 4px;\n cursor: col-resize;\n}\n.gc-splitter--horiz {\n height: 4px;\n cursor: row-resize;\n}\n/* Bigger invisible hit area so the splitter is easier to grab */\n.gc-splitter::before {\n content: '';\n position: absolute;\n inset: -3px;\n}\n.gc-sidebar-tabs {\n display: flex;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-sidebar-tab {\n flex: 1;\n padding: 10px 8px;\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n border-bottom: 2px solid transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.gc-sidebar-tab:hover { color: var(--mj-text-primary); }\n.gc-sidebar-tab--active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n/* History sidebar (legacy classname kept for the inner head row) */\n.gc-history {\n width: 280px;\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n}\n.gc-history-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-card);\n}\n.gc-history-clear {\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.gc-history-clear:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.gc-history-empty {\n width: 100%;\n padding: 20px 16px;\n color: var(--mj-text-muted);\n font-size: 12px;\n text-align: center;\n line-height: 1.5;\n}\n.gc-history-empty i { display: block; font-size: 22px; margin-bottom: 8px; opacity: 0.5; }\n\n.gc-history-list {\n flex: 1;\n overflow-y: auto;\n padding: 4px;\n}\n.gc-history-item {\n width: 100%;\n text-align: left;\n background: transparent;\n border: 1px solid transparent;\n padding: 8px 10px;\n border-radius: 7px;\n cursor: pointer;\n margin-bottom: 2px;\n font-family: inherit;\n transition: background 0.12s, border-color 0.12s;\n}\n.gc-history-item:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-subtle);\n}\n.gc-history-item--fav {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.gc-history-item-head {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.gc-history-status {\n font-size: 11px;\n flex-shrink: 0;\n}\n.gc-status--ok { color: var(--mj-status-success); }\n.gc-status--err { color: var(--mj-status-error); }\n\n.gc-history-label {\n flex: 1;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-history-fav,\n.gc-history-del {\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n flex-shrink: 0;\n opacity: 0;\n transition: all 0.12s;\n}\n.gc-history-item:hover .gc-history-fav,\n.gc-history-item:hover .gc-history-del { opacity: 1; }\n.gc-history-item--fav .gc-history-fav { opacity: 1; color: var(--mj-status-warning); }\n.gc-history-fav:hover { color: var(--mj-status-warning); background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); }\n.gc-history-del:hover { color: var(--mj-status-error); background: color-mix(in srgb, var(--mj-status-error) 10%, transparent); }\n\n.gc-history-meta {\n margin-top: 3px;\n margin-left: 18px;\n display: flex;\n gap: 4px;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n}\n\n/* ---------- Entities tab ---------- */\n.gc-ent-toolbar {\n display: flex;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-ent-search-wrap {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n.gc-ent-search-icon {\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 11px;\n pointer-events: none;\n}\n.gc-ent-search {\n width: 100%;\n padding: 6px 10px 6px 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12px;\n font-family: inherit;\n}\n.gc-ent-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.gc-ent-schema {\n padding: 5px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 11.5px;\n font-family: inherit;\n cursor: pointer;\n max-width: 130px;\n}\n\n.gc-ent-meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.gc-ent-hint { font-style: italic; }\n\n.gc-ent-list {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.gc-ent-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n margin-bottom: 4px;\n overflow: hidden;\n transition: border-color 0.12s, box-shadow 0.15s;\n}\n.gc-ent-card:hover { border-color: var(--mj-border-default); }\n.gc-ent-card--expanded {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n.gc-ent-row {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 10px;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n font-family: inherit;\n}\n.gc-ent-row:hover { background: var(--mj-bg-surface-hover); }\n.gc-ent-card--expanded .gc-ent-row { background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent); }\n.gc-ent-chev {\n color: var(--mj-text-muted);\n font-size: 10px;\n width: 12px;\n flex-shrink: 0;\n transition: transform 0.15s;\n}\n.gc-ent-chev--down { transform: rotate(90deg); }\n.gc-ent-info { flex: 1; min-width: 0; }\n.gc-ent-name {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-ent-meta-row {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n align-items: center;\n}\n.gc-ent-typename {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.gc-ent-schema-badge {\n font-size: 10px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.4px;\n}\n\n.gc-ent-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n padding: 6px 10px 8px 30px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n.gc-ent-op {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 5px 9px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.12s;\n}\n.gc-ent-op:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n.gc-ent-op--read:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.gc-ent-op--write:hover {\n border-color: color-mix(in srgb, var(--mj-status-warning) 50%, var(--mj-border-strong));\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n.gc-ent-op--danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 6%, transparent);\n}\n.gc-ent-desc {\n padding: 4px 10px 8px 30px;\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.45;\n}\n\n.gc-ent-empty {\n width: 100%;\n padding: 30px 18px;\n color: var(--mj-text-muted);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n}\n.gc-ent-empty i { font-size: 18px; opacity: 0.5; }\n.gc-ent-clear {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 11.5px;\n cursor: pointer;\n font-family: inherit;\n margin-top: 4px;\n}\n.gc-ent-clear:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-brand-primary);\n}\n\n/* ---------- Schema explorer ---------- */\n.gc-schema-toolbar {\n display: flex;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.gc-schema-search-wrap {\n position: relative;\n flex: 1;\n}\n.gc-schema-search-icon {\n position: absolute;\n left: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 11px;\n pointer-events: none;\n}\n.gc-schema-search {\n width: 100%;\n padding: 6px 10px 6px 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12px;\n font-family: inherit;\n}\n.gc-schema-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.gc-schema-reload {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 30px;\n height: 30px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n flex-shrink: 0;\n}\n.gc-schema-reload:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n.gc-schema-kinds {\n display: flex;\n gap: 4px;\n padding: 6px 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.gc-schema-kind {\n flex: 1;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n padding: 5px 6px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n transition: all 0.12s;\n}\n.gc-schema-kind:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.gc-schema-kind span {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n padding: 0 6px;\n border-radius: 100px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n.gc-schema-kind--active {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n.gc-schema-kind--active span {\n background: rgba(255, 255, 255, 0.25);\n border-color: transparent;\n color: var(--mj-brand-on-primary);\n}\n\n.gc-schema-state {\n padding: 28px 18px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n line-height: 1.5;\n}\n.gc-schema-state i { font-size: 22px; opacity: 0.5; }\n\n.gc-schema-disabled {\n color: var(--mj-text-secondary);\n}\n.gc-schema-disabled i {\n color: var(--mj-status-warning);\n opacity: 0.85;\n font-size: 24px;\n margin-bottom: 4px;\n}\n.gc-schema-disabled-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.gc-schema-disabled-body {\n font-size: 12px;\n color: var(--mj-text-muted);\n max-width: 240px;\n}\n\n.gc-schema-state--err {\n color: var(--mj-status-error);\n align-items: stretch;\n text-align: left;\n}\n.gc-schema-state--err i { color: var(--mj-status-error); opacity: 0.9; align-self: center; }\n.gc-schema-err-title {\n font-size: 13px;\n font-weight: 600;\n text-align: center;\n color: var(--mj-status-error);\n}\n.gc-schema-err-body {\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 8px 10px;\n border-radius: 6px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n word-break: break-word;\n max-height: 160px;\n overflow-y: auto;\n}\n\n.gc-schema-list {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.gc-schema-op {\n width: 100%;\n text-align: left;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 7px;\n padding: 8px 10px;\n margin-bottom: 4px;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.12s;\n}\n.gc-schema-op:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n transform: translateX(2px);\n}\n.gc-schema-op-head {\n display: flex;\n align-items: baseline;\n gap: 8px;\n margin-bottom: 3px;\n}\n.gc-schema-op-kind {\n font-size: 9.5px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: 1px 6px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n.gc-schema-op--mutation .gc-schema-op-kind {\n background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n.gc-schema-op-name {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-all;\n}\n.gc-schema-op-args,\n.gc-schema-op-return {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n word-break: break-word;\n}\n.gc-schema-op-return {\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n.gc-schema-op-return i { font-size: 9px; margin-right: 3px; opacity: 0.6; }\n.gc-schema-op-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 5px;\n line-height: 1.4;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* Main panel */\n.gc-main {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gc-editor-wrap,\n.gc-vars-wrap,\n.gc-response-wrap {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n}\n.gc-editor-wrap {\n border-bottom: 1px solid var(--mj-border-subtle);\n flex: 1;\n min-height: 200px;\n}\n.gc-response-wrap {\n flex: 1;\n min-height: 200px;\n background: var(--mj-bg-page);\n}\n\n.gc-editor-head,\n.gc-response-head {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.gc-editor-label { flex: 0 0 auto; }\n.gc-editor-hint {\n font-weight: 500;\n text-transform: none;\n letter-spacing: normal;\n color: var(--mj-text-muted);\n font-size: 11px;\n}\n.gc-mini-btn {\n margin-left: auto;\n background: transparent;\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n padding: 4px 10px;\n border-radius: 5px;\n font-size: 11px;\n cursor: pointer;\n font-family: inherit;\n text-transform: none;\n letter-spacing: normal;\n font-weight: 500;\n}\n.gc-mini-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n.gc-mini-btn--danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 40%, var(--mj-border-default));\n}\n\n/* mj-code-editor host fill \u2014 the component renders CodeMirror internally\n and we want it to use the full available area of its flex parent. */\nmj-code-editor.gc-editor {\n flex: 1;\n min-height: 0;\n width: 100%;\n display: block;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\nmj-code-editor.gc-editor ::ng-deep .cm-editor {\n height: 100%;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n}\nmj-code-editor.gc-editor ::ng-deep .cm-scroller {\n line-height: 1.55;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n}\nmj-code-editor.gc-editor--vars {\n background: var(--mj-bg-surface-sunken);\n flex: 0 0 auto;\n min-height: 80px;\n max-height: 160px;\n}\nmj-code-editor.gc-editor--vars ::ng-deep .cm-editor {\n background: var(--mj-bg-surface-sunken);\n}\n\n/* Variables collapsible */\n.gc-vars-wrap {\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n.gc-vars-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n background: var(--mj-bg-surface-card);\n border: none;\n padding: 7px 16px;\n cursor: pointer;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-family: inherit;\n text-align: left;\n transition: background 0.12s;\n}\n.gc-vars-toggle:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n.gc-vars-chev {\n color: var(--mj-text-muted);\n font-size: 10px;\n transition: transform 0.15s;\n}\n.gc-vars-chev--down { transform: rotate(90deg); }\n.gc-vars-pill {\n margin-left: auto;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n font-size: 10px;\n padding: 1px 8px;\n border-radius: 100px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n\n/* Run bar */\n.gc-run-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n.gc-run-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: 1px solid var(--mj-brand-primary);\n padding: 8px 18px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n transition: background 0.15s, transform 0.1s;\n}\n.gc-run-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.gc-run-btn:active:not(:disabled) { transform: scale(0.98); }\n.gc-run-btn:disabled {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n color: var(--mj-text-muted);\n box-shadow: none;\n cursor: wait;\n}\n\n.gc-run-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.gc-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 100px;\n font-size: 11px;\n font-weight: 600;\n}\n.gc-status-badge--ok {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary));\n}\n.gc-status-badge--err {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-error) 70%, var(--mj-text-primary));\n}\n.gc-meta-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 3px 9px;\n border-radius: 100px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n}\n.gc-spacer { flex: 1; }\n\n/* Response */\n.gc-response {\n margin: 0;\n flex: 1;\n overflow: auto;\n padding: 14px 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n line-height: 1.55;\n}\n.gc-response code { white-space: pre-wrap; word-break: break-word; }\n\n.gc-error {\n margin: 12px 16px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-subtle));\n border-radius: 8px;\n color: color-mix(in srgb, var(--mj-status-error) 70%, var(--mj-text-primary));\n font-size: 12.5px;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n.gc-error i { margin-top: 2px; flex-shrink: 0; }\n.gc-error--inline { margin-bottom: 0; }\n\n.gc-empty {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n.gc-empty i { font-size: 24px; opacity: 0.4; }\n\n@media (max-width: 900px) {\n .gc-sidebar, .gc-history { display: none; }\n}\n"] }]
1418
1418
  }], () => [{ type: i0.ChangeDetectorRef }], { QueryEditor: [{
1419
1419
  type: ViewChild,
1420
1420
  args: ['queryEditor']