@memberjunction/ng-dashboards 6.2.0-edge.4 → 6.2.0-edge.6

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 (205) hide show
  1. package/README.md +28 -0
  2. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
  3. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  4. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +15 -7
  5. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  6. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
  7. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  8. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +209 -57
  9. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  10. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
  11. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
  12. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
  13. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +28 -16
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
  18. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  19. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +30 -6
  20. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  21. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
  22. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  23. package/dist/AI/components/tags/tags-resource.component.js +15 -7
  24. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  25. package/dist/AI/components/vectors/sensitive-fields.d.ts +58 -0
  26. package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -0
  27. package/dist/AI/components/vectors/sensitive-fields.js +251 -0
  28. package/dist/AI/components/vectors/sensitive-fields.js.map +1 -0
  29. package/dist/AI/components/vectors/vector-document-rules.d.ts +139 -0
  30. package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -0
  31. package/dist/AI/components/vectors/vector-document-rules.js +182 -0
  32. package/dist/AI/components/vectors/vector-document-rules.js.map +1 -0
  33. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +83 -14
  34. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  35. package/dist/AI/components/vectors/vector-management-resource.component.js +546 -271
  36. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  37. package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
  38. package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
  39. package/dist/AI/components/vectors/vector-store-selection.js +57 -0
  40. package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
  41. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +236 -0
  42. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
  43. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +374 -0
  44. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
  45. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +195 -0
  46. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +1 -0
  47. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +2910 -0
  48. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +1 -0
  49. package/dist/ChiefOfStaff/index.d.ts +3 -0
  50. package/dist/ChiefOfStaff/index.d.ts.map +1 -0
  51. package/dist/ChiefOfStaff/index.js +3 -0
  52. package/dist/ChiefOfStaff/index.js.map +1 -0
  53. package/dist/Communication/communication-agent-context.d.ts +11 -1
  54. package/dist/Communication/communication-agent-context.d.ts.map +1 -1
  55. package/dist/Communication/communication-agent-context.js +15 -0
  56. package/dist/Communication/communication-agent-context.js.map +1 -1
  57. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  58. package/dist/Communication/communication-dashboard.component.js +5 -0
  59. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  60. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  61. package/dist/Communication/communication-logs-resource.component.js +2 -1
  62. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  63. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  64. package/dist/Communication/communication-monitor-resource.component.js +23 -18
  65. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  66. package/dist/Communication/communication-providers-resource.component.d.ts +27 -1
  67. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  68. package/dist/Communication/communication-providers-resource.component.js +722 -78
  69. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  70. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  71. package/dist/Communication/communication-runs-resource.component.js +11 -10
  72. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  73. package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
  74. package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
  75. package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
  76. package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
  77. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +49 -0
  78. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  79. package/dist/DataExplorer/data-explorer-dashboard.component.js +220 -55
  80. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  81. package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
  82. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  83. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  84. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  85. package/dist/DevTools/app-state-inspector.component.js +1 -0
  86. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  87. package/dist/DevTools/class-registry.component.d.ts.map +1 -1
  88. package/dist/DevTools/class-registry.component.js +1 -0
  89. package/dist/DevTools/class-registry.component.js.map +1 -1
  90. package/dist/DevTools/event-monitor.component.d.ts.map +1 -1
  91. package/dist/DevTools/event-monitor.component.js +2 -0
  92. package/dist/DevTools/event-monitor.component.js.map +1 -1
  93. package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
  94. package/dist/DevTools/graphql-console.component.js.map +1 -1
  95. package/dist/DevTools/grid-width-lab.component.d.ts.map +1 -1
  96. package/dist/DevTools/grid-width-lab.component.js +1 -0
  97. package/dist/DevTools/grid-width-lab.component.js.map +1 -1
  98. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  99. package/dist/DevTools/layout-inspector.component.js +1 -0
  100. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  101. package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -1
  102. package/dist/DevTools/lazy-module-status.component.js +1 -0
  103. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  104. package/dist/DevTools/settings-explorer.component.d.ts.map +1 -1
  105. package/dist/DevTools/settings-explorer.component.js +1 -0
  106. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  107. package/dist/DevTools/tab-strip-lab.component.d.ts.map +1 -1
  108. package/dist/DevTools/tab-strip-lab.component.js +1 -0
  109. package/dist/DevTools/tab-strip-lab.component.js.map +1 -1
  110. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +5 -0
  111. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  112. package/dist/EntityAdmin/entity-admin-dashboard.component.js +8 -5
  113. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  114. package/dist/Integration/components/overview/overview.component.js +2 -2
  115. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +2 -2
  116. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  117. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -1
  118. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
  119. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +24 -2
  120. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
  121. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +16 -2
  122. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
  123. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +87 -33
  124. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  125. package/dist/LoginStudio/login-studio-inspector.component.d.ts +130 -0
  126. package/dist/LoginStudio/login-studio-inspector.component.d.ts.map +1 -0
  127. package/dist/LoginStudio/login-studio-inspector.component.js +781 -0
  128. package/dist/LoginStudio/login-studio-inspector.component.js.map +1 -0
  129. package/dist/LoginStudio/login-studio-resource.component.d.ts +161 -0
  130. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -0
  131. package/dist/LoginStudio/login-studio-resource.component.js +890 -0
  132. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -0
  133. package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
  134. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  135. package/dist/MCP/mcp-dashboard.component.js +118 -65
  136. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  137. package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
  138. package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
  139. package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
  140. package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
  141. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
  142. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  143. package/dist/PredictiveStudio/components/ps-experiments.component.js +256 -521
  144. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  145. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
  146. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
  147. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +122 -249
  148. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
  149. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
  150. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  151. package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
  152. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  153. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
  154. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  155. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +335 -326
  156. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  157. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
  158. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
  159. package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
  160. package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
  161. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
  162. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  163. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +51 -2
  164. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  165. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
  166. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
  167. package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
  168. package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
  169. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
  170. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
  171. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
  172. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
  173. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
  174. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  175. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +185 -103
  176. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  177. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
  178. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  179. package/dist/Workflows/components/workflow-runs-resource.component.js +4 -4
  180. package/dist/Workflows/components/workflow-runs-resource.component.js.map +1 -1
  181. package/dist/ai-dashboards.module.d.ts +22 -21
  182. package/dist/ai-dashboards.module.d.ts.map +1 -1
  183. package/dist/ai-dashboards.module.js +8 -2
  184. package/dist/ai-dashboards.module.js.map +1 -1
  185. package/dist/core-dashboards.module.d.ts +2 -1
  186. package/dist/core-dashboards.module.d.ts.map +1 -1
  187. package/dist/core-dashboards.module.js +11 -3
  188. package/dist/core-dashboards.module.js.map +1 -1
  189. package/dist/public-api.d.ts +3 -0
  190. package/dist/public-api.d.ts.map +1 -1
  191. package/dist/public-api.js +4 -0
  192. package/dist/public-api.js.map +1 -1
  193. package/package.json +72 -69
  194. package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
  195. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
  196. package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
  197. package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
  198. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
  199. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
  200. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
  201. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
  202. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
  203. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
  204. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
  205. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-console.component.js","sourceRoot":"","sources":["../../src/DevTools/graphql-console.component.ts","../../src/DevTools/graphql-console.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ElementRef, ViewChild, HostListener, inject } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { EntityInfo, EntityFieldInfo, getGraphQLTypeNameBase } from '@memberjunction/core';\nimport { GraphQLDataProvider, FieldMapper } from '@memberjunction/graphql-dataprovider';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface HistoryEntry {\n id: string;\n query: string;\n variables: string;\n timestamp: Date;\n durationMs?: number;\n status: 'ok' | 'error' | 'pending';\n favorite: boolean;\n label?: string;\n}\n\n/** GraphQL introspection — minimal subset sufficient for the explorer. */\ninterface IntrospectedTypeRef {\n kind: 'NON_NULL' | 'LIST' | 'SCALAR' | 'OBJECT' | 'ENUM' | 'INPUT_OBJECT' | 'INTERFACE' | 'UNION' | string;\n name: string | null;\n ofType?: IntrospectedTypeRef | null;\n}\ninterface IntrospectedArg {\n name: string;\n description?: string | null;\n type: IntrospectedTypeRef;\n defaultValue?: string | null;\n}\ninterface IntrospectedField {\n name: string;\n description?: string | null;\n args: IntrospectedArg[];\n type: IntrospectedTypeRef;\n}\ninterface IntrospectedType {\n kind: string;\n name: string;\n description?: string | null;\n fields?: IntrospectedField[] | null;\n}\ninterface SchemaOperation {\n name: string;\n kind: 'query' | 'mutation';\n description: string;\n argSummary: string;\n returnSummary: string;\n field: IntrospectedField;\n}\n\ntype SidebarTab = 'history' | 'schema' | 'entities';\ntype EntityOpKind = 'view' | 'byId' | 'create' | 'update' | 'delete';\n\ninterface EntityListItem {\n info: EntityInfo;\n typeName: string;\n schema: string;\n /** True when this entity is currently expanded showing operation buttons. */\n expanded: boolean;\n}\n\nconst PREFS_KEY = 'graphqlConsole';\nconst HISTORY_LIMIT = 30;\n\nconst SAMPLE_QUERY = `# Welcome to the GraphQL Console\n# Press Cmd/Ctrl+Enter to run.\n# Authentication is handled by the active GraphQL provider.\n\nquery GetCurrentUser {\n CurrentUser {\n ID\n Name\n Email\n }\n}\n`;\n\n/**\n * GraphQL Console — write and run arbitrary GraphQL queries against the\n * connected MJ API. Re-uses the active GraphQLDataProvider client (auth +\n * session intact). Local history with copy / favorite / replay; copy-as-curl;\n * keyboard shortcut (Cmd/Ctrl+Enter) to run.\n *\n * 🔒 SAFETY BOUNDARY — CLASSIFICATION: INTENTIONALLY UNWIRED for the AI agent.\n * This surface executes arbitrary, user-authored GraphQL against the live API\n * with the session's full auth — an agent-controllable injection vector. It\n * therefore registers NO agent context and NO client tools (no SetAgentContext /\n * SetAgentClientTools calls anywhere in this component). The agent must never be\n * able to compose or run queries here; the human operator drives this console.\n */\n@RegisterClass(BaseResourceComponent, 'GraphQLConsoleInspector')\n@Component({\n standalone: false,\n selector: 'mj-graphql-console',\n templateUrl: './graphql-console.component.html',\n styleUrls: ['./inspector-shared.css', './graphql-console.component.css']\n})\nexport class GraphQLConsoleComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n @ViewChild('queryEditor') QueryEditor?: ElementRef<HTMLTextAreaElement>;\n\n /** @deprecated Use {@link QueryEditor}. */\n get queryEditor(): ElementRef<HTMLTextAreaElement> | undefined {\n return this.QueryEditor;\n }\n /** @deprecated Use {@link QueryEditor}. */\n set queryEditor(value: ElementRef<HTMLTextAreaElement> | undefined) {\n this.QueryEditor = value;\n }\n\n public Query = SAMPLE_QUERY;\n public Variables = '{}';\n public ShowVariables = false;\n\n public Running = false;\n public ResponseJson = '';\n public ResponseStatus: 'ok' | 'error' | 'idle' = 'idle';\n public ResponseDurationMs: number | null = null;\n public ResponseSizeBytes: number | null = null;\n public ErrorMessage: string | null = null;\n\n public History: HistoryEntry[] = [];\n public ShowHistory = true;\n public CopyConfirmed = false;\n\n public ApiUrl = '';\n\n // Schema explorer state\n public SidebarTab: SidebarTab = 'history';\n public SchemaLoading = false;\n public SchemaError: string | null = null;\n public SchemaIntrospectionDisabled = false;\n public SchemaSearch = '';\n public SchemaKindFilter: 'all' | 'query' | 'mutation' = 'all';\n public Operations: SchemaOperation[] = [];\n private schemaLoaded = false;\n\n // Entities tab state\n public EntitiesSearch = '';\n public Entities: EntityListItem[] = [];\n public EntitySchemaFilter = ''; // '' = all\n public KnownSchemas: string[] = [];\n\n // Pane sizing (resizable splitters)\n public SidebarWidthPx = 280;\n public EditorHeightPct = 50; // % of main pane height for editor (50/50 split default)\n private resizing: 'sidebar' | 'editor' | null = null;\n private elementRef = inject(ElementRef);\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.loadFromStorage();\n try {\n this.ApiUrl = GraphQLDataProvider.Instance.ConfigData?.URL ?? '';\n } catch { /* not configured */ }\n this.loadEntities();\n this.NotifyLoadComplete();\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this.saveToStorage();\n this.detachResizeListeners();\n }\n\n private loadEntities(): void {\n try {\n const md = this.ProviderToUse;\n if (!md) return;\n const items: EntityListItem[] = (md.Entities ?? []).map(e => ({\n info: e,\n typeName: getGraphQLTypeNameBase(e),\n schema: e.SchemaName ?? '(unknown)',\n expanded: false\n })).sort((a, b) => a.info.Name.localeCompare(b.info.Name));\n this.Entities = items;\n const schemas = new Set<string>();\n for (const i of items) schemas.add(i.schema);\n this.KnownSchemas = Array.from(schemas).sort();\n } catch { /* metadata not ready */ }\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'GraphQL Console'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-code'; }\n\n @HostListener('keydown', ['$event'])\n public OnHostKeydown(event: KeyboardEvent): void {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') {\n event.preventDefault();\n void this.OnRun();\n }\n }\n\n public async OnRun(): Promise<void> {\n const trimmedQuery = this.Query.trim();\n if (!trimmedQuery) {\n this.ErrorMessage = 'Query is empty.';\n return;\n }\n let parsedVars: Record<string, unknown> | null = null;\n if (this.Variables.trim()) {\n try {\n parsedVars = JSON.parse(this.Variables);\n } catch (err) {\n this.ResponseStatus = 'error';\n this.ErrorMessage = 'Variables must be valid JSON: ' + (err instanceof Error ? err.message : String(err));\n this.ResponseJson = '';\n this.cdr.markForCheck();\n return;\n }\n }\n\n this.Running = true;\n this.ErrorMessage = null;\n this.ResponseStatus = 'idle';\n this.ResponseJson = '';\n this.cdr.markForCheck();\n\n const start = performance.now();\n try {\n const data = await GraphQLDataProvider.ExecuteGQL(trimmedQuery, parsedVars);\n const elapsed = performance.now() - start;\n const text = JSON.stringify(data, null, 2);\n this.ResponseJson = text;\n this.ResponseStatus = 'ok';\n this.ResponseDurationMs = Math.round(elapsed);\n this.ResponseSizeBytes = new Blob([text]).size;\n this.recordHistory(trimmedQuery, this.Variables, 'ok', this.ResponseDurationMs);\n } catch (err: unknown) {\n const elapsed = performance.now() - start;\n this.ResponseStatus = 'error';\n this.ResponseDurationMs = Math.round(elapsed);\n const formatted = this.formatError(err);\n this.ResponseJson = formatted;\n this.ResponseSizeBytes = new Blob([formatted]).size;\n this.ErrorMessage = this.extractErrorSummary(err);\n this.recordHistory(trimmedQuery, this.Variables, 'error', this.ResponseDurationMs);\n } finally {\n this.Running = false;\n this.cdr.markForCheck();\n }\n }\n\n public OnRestoreHistory(entry: HistoryEntry): void {\n this.Query = entry.query;\n this.Variables = entry.variables;\n if (entry.variables.trim() && entry.variables.trim() !== '{}') {\n this.ShowVariables = true;\n }\n this.cdr.markForCheck();\n }\n\n public OnToggleFavorite(entry: HistoryEntry, event: Event): void {\n event.stopPropagation();\n entry.favorite = !entry.favorite;\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public OnDeleteHistory(entry: HistoryEntry, event: Event): void {\n event.stopPropagation();\n this.History = this.History.filter(h => h.id !== entry.id);\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public OnClearHistory(): void {\n // Keep favorites\n this.History = this.History.filter(h => h.favorite);\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public async OnCopyResponse(): Promise<void> {\n if (!this.ResponseJson) return;\n try {\n await navigator.clipboard.writeText(this.ResponseJson);\n this.CopyConfirmed = true;\n setTimeout(() => { this.CopyConfirmed = false; this.cdr.markForCheck(); }, 1800);\n this.cdr.markForCheck();\n } catch { /* unavailable */ }\n }\n\n public async OnCopyAsCurl(): Promise<void> {\n const url = this.ApiUrl || '<API_URL>';\n const body = JSON.stringify({\n query: this.Query.trim(),\n variables: this.Variables.trim() ? JSON.parse(this.Variables) : null\n });\n const escaped = body.replace(/'/g, `'\\\\''`);\n const curl = [\n `curl -X POST '${url}'`,\n ` -H 'Content-Type: application/json'`,\n ` -H 'Authorization: Bearer <YOUR_TOKEN>'`,\n ` -d '${escaped}'`\n ].join(' \\\\\\n');\n try { await navigator.clipboard.writeText(curl); } catch { /* unavailable */ }\n }\n\n public OnFormatQuery(): void {\n // Tiny pretty-printer: collapse multiple blank lines + trim trailing whitespace\n this.Query = this.Query\n .split('\\n')\n .map(line => line.replace(/\\s+$/, ''))\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim() + '\\n';\n }\n\n public ToggleHistoryPanel(): void {\n this.ShowHistory = !this.ShowHistory;\n }\n\n public ToggleVariables(): void {\n this.ShowVariables = !this.ShowVariables;\n }\n\n public OnSidebarTabChange(tab: SidebarTab): void {\n this.SidebarTab = tab;\n this.saveToStorage();\n if (tab === 'schema' && !this.schemaLoaded && !this.SchemaLoading) {\n void this.loadSchema();\n }\n }\n\n public async OnReloadSchema(): Promise<void> {\n this.schemaLoaded = false;\n await this.loadSchema();\n }\n\n public OnInsertOperation(op: SchemaOperation, event?: MouseEvent): void {\n const template = this.buildOperationTemplate(op);\n this.insertTemplate(template, !!event?.shiftKey);\n }\n\n public OnClearQuery(): void {\n this.Query = '';\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public get FilteredOperations(): SchemaOperation[] {\n const q = this.SchemaSearch.trim().toLowerCase();\n return this.Operations.filter(op => {\n if (this.SchemaKindFilter !== 'all' && op.kind !== this.SchemaKindFilter) return false;\n if (!q) return true;\n return op.name.toLowerCase().includes(q)\n || op.returnSummary.toLowerCase().includes(q)\n || op.description.toLowerCase().includes(q);\n });\n }\n\n public get OperationCounts(): { all: number; query: number; mutation: number } {\n const q = this.Operations.filter(o => o.kind === 'query').length;\n const m = this.Operations.filter(o => o.kind === 'mutation').length;\n return { all: this.Operations.length, query: q, mutation: m };\n }\n\n public TrackByOp = (_i: number, o: SchemaOperation) => o.kind + ':' + o.name;\n\n // ---------- Entities tab ----------\n\n public TrackByEntity = (_i: number, e: EntityListItem) => e.info.ID;\n\n public get FilteredEntities(): EntityListItem[] {\n const q = this.EntitiesSearch.trim().toLowerCase();\n return this.Entities.filter(e => {\n if (this.EntitySchemaFilter && e.schema !== this.EntitySchemaFilter) return false;\n if (!q) return true;\n return e.info.Name.toLowerCase().includes(q)\n || e.typeName.toLowerCase().includes(q)\n || e.schema.toLowerCase().includes(q)\n || (e.info.Description ?? '').toLowerCase().includes(q);\n });\n }\n\n public ToggleEntity(e: EntityListItem): void {\n e.expanded = !e.expanded;\n }\n\n public OnEntityOp(item: EntityListItem, op: EntityOpKind, event: MouseEvent): void {\n event.stopPropagation();\n const template = this.buildEntityOpTemplate(item, op);\n this.insertTemplate(template, !!event.shiftKey);\n }\n\n /**\n * Default: replace the editor contents with the new template.\n * Shift-click: append to the end (with a blank-line separator) so the\n * user can stage multiple operations in one document.\n */\n private insertTemplate(template: string, append: boolean): void {\n const trimmed = this.Query.trimEnd();\n const isFresh = trimmed.length === 0 || trimmed === SAMPLE_QUERY.trimEnd();\n if (append && !isFresh) {\n this.Query = trimmed + '\\n\\n' + template;\n } else {\n this.Query = template;\n }\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n private buildEntityOpTemplate(item: EntityListItem, op: EntityOpKind): string {\n const e = item.info;\n const typeName = item.typeName;\n const mapper = new FieldMapper();\n const fieldList = this.pickRepresentativeFields(e).map(name => {\n const mapped = mapper.MapFieldName(name);\n // Annotate any remapped fields so users see why the GraphQL field\n // name differs from the database column. (`__` is reserved by the\n // GraphQL spec, so MJ rewrites `__mj_*` columns to `_mj__*` over\n // the wire.)\n return mapped === name ? mapped : `${mapped} # from ${name}`;\n });\n const fieldSelection = fieldList.join('\\n ');\n const pkField = mapper.MapFieldName(e.PrimaryKeys?.[0]?.Name ?? 'ID');\n\n switch (op) {\n case 'view':\n return `# Run a dynamic view over ${e.Name}\nquery Run${typeName}DynamicView {\n Run${typeName}DynamicView(input: {\n EntityName: \"${e.Name}\"\n ExtraFilter: \"\"\n OrderBy: \"\"\n UserSearchString: \"\"\n Fields: null\n MaxRows: 100\n StartRow: 0\n IgnoreMaxRows: false\n ForceAuditLog: false\n ResultType: \"simple\"\n }) {\n Success\n RowCount\n TotalRowCount\n ExecutionTime\n ErrorMessage\n Results {\n ${fieldSelection}\n }\n }\n}\n`;\n case 'byId':\n return `# Fetch a single ${e.Name} record by primary key\nquery Run${typeName}ByID($id: String!) {\n Run${typeName}DynamicView(input: {\n EntityName: \"${e.Name}\"\n ExtraFilter: \"${pkField}='\" + $id + \"'\"\n Fields: null\n MaxRows: 1\n StartRow: 0\n IgnoreMaxRows: false\n ForceAuditLog: false\n ResultType: \"simple\"\n OrderBy: \"\"\n UserSearchString: \"\"\n }) {\n Success\n Results {\n ${fieldSelection}\n }\n }\n}\n\n# Variables (paste into the Variables panel):\n# { \"id\": \"<your-id-here>\" }\n`;\n case 'create':\n return `# Create a new ${e.Name}\nmutation Create${typeName}($input: Create${typeName}Input!) {\n Create${typeName}(input: $input) {\n ${fieldSelection}\n }\n}\n\n# Variables — populate the writable fields, then Run\n# {\n# \"input\": {\n# # required + writable fields go here\n# }\n# }\n`;\n case 'update':\n return `# Update an existing ${e.Name}\nmutation Update${typeName}($input: Update${typeName}Input!) {\n Update${typeName}(input: $input) {\n ${fieldSelection}\n }\n}\n\n# Variables — must include the primary key (${pkField})\n# {\n# \"input\": {\n# \"${pkField}\": \"<id-here>\"\n# # ...changed fields\n# }\n# }\n`;\n case 'delete':\n return `# Delete a ${e.Name}\nmutation Delete${typeName}($input: Delete${typeName}Input!) {\n Delete${typeName}(input: $input) {\n ${pkField}\n }\n}\n\n# Variables:\n# { \"input\": { \"${pkField}\": \"<id-here>\" } }\n`;\n }\n }\n\n /** Pick the first ~10 displayable fields, prioritizing primary key and common fields. */\n private pickRepresentativeFields(e: EntityInfo): string[] {\n const fields = e.Fields ?? [];\n if (fields.length === 0) return ['ID'];\n const out: string[] = [];\n const seen = new Set<string>();\n const push = (n: string) => { if (n && !seen.has(n)) { seen.add(n); out.push(n); } };\n\n for (const f of fields) {\n if (f.IsPrimaryKey) push(f.Name);\n }\n // Prefer common, lightweight fields\n for (const f of fields) {\n if (out.length >= 10) break;\n if (f.IsBinaryFieldType) continue;\n const lower = f.Name.toLowerCase();\n if (lower === 'name' || lower === 'description' || lower === 'status' || lower === 'type') {\n push(f.Name);\n }\n }\n // Fill with the rest, skipping huge / private fields\n for (const f of fields) {\n if (out.length >= 10) break;\n if (f.IsBinaryFieldType) continue;\n if (this.isExpensiveField(f)) continue;\n push(f.Name);\n }\n return out;\n }\n\n private isExpensiveField(f: EntityFieldInfo): boolean {\n const t = (f.Type ?? '').toLowerCase();\n if (t === 'nvarchar(max)' || t === 'varchar(max)' || t === 'text' || t === 'ntext') return true;\n if (t.includes('blob') || t.includes('binary') || t === 'image' || t === 'varbinary') return true;\n return false;\n }\n\n public ClearEntityFilters(): void {\n this.EntitiesSearch = '';\n this.EntitySchemaFilter = '';\n }\n\n // ---------- Resizable splitters ----------\n\n public OnSplitterDown(event: MouseEvent, kind: 'sidebar' | 'editor'): void {\n event.preventDefault();\n this.resizing = kind;\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n document.body.style.cursor = kind === 'sidebar' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onMouseMove = (e: MouseEvent): void => {\n if (!this.resizing) return;\n const host = this.elementRef.nativeElement as HTMLElement;\n if (this.resizing === 'sidebar') {\n const bodyRect = host.querySelector('.gc-body')?.getBoundingClientRect();\n if (!bodyRect) return;\n const x = e.clientX - bodyRect.left;\n this.SidebarWidthPx = Math.max(200, Math.min(560, x));\n } else if (this.resizing === 'editor') {\n const mainRect = host.querySelector('.gc-main')?.getBoundingClientRect();\n if (!mainRect) return;\n const yPct = ((e.clientY - mainRect.top) / mainRect.height) * 100;\n this.EditorHeightPct = Math.max(20, Math.min(80, yPct));\n }\n this.cdr.markForCheck();\n };\n\n private onMouseUp = (): void => {\n if (!this.resizing) return;\n this.resizing = null;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.detachResizeListeners();\n this.saveToStorage();\n };\n\n private detachResizeListeners(): void {\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n\n public get FormattedSize(): string {\n if (this.ResponseSizeBytes == null) return '';\n const b = this.ResponseSizeBytes;\n if (b < 1024) return `${b} B`;\n if (b < 1024 * 1024) return `${(b / 1024).toFixed(1)} KB`;\n return `${(b / 1024 / 1024).toFixed(2)} MB`;\n }\n\n public TrackByHistory = (_i: number, h: HistoryEntry) => h.id;\n\n // ---------- private ----------\n\n private recordHistory(query: string, variables: string, status: 'ok' | 'error', durationMs: number): void {\n const entry: HistoryEntry = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n query,\n variables,\n timestamp: new Date(),\n durationMs,\n status,\n favorite: false,\n label: this.deriveLabel(query)\n };\n // De-dupe: if last non-favorite entry has the same query+vars, replace it instead of stacking\n const last = this.History[0];\n if (last && !last.favorite && last.query === query && last.variables === variables) {\n this.History[0] = entry;\n } else {\n this.History = [entry, ...this.History];\n }\n // Trim history (preserve favorites)\n if (this.History.length > HISTORY_LIMIT) {\n const favorites = this.History.filter(h => h.favorite);\n const nonFavorites = this.History.filter(h => !h.favorite).slice(0, HISTORY_LIMIT - favorites.length);\n this.History = [...favorites, ...nonFavorites].sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\n }\n this.saveToStorage();\n }\n\n private deriveLabel(query: string): string {\n const m = query.match(/(query|mutation|subscription)\\s+(\\w+)/);\n if (m) return `${m[1]} ${m[2]}`;\n const firstField = query.match(/[\\{\\s](\\w+)\\s*[\\(\\{]/);\n if (firstField) return firstField[1];\n return 'unnamed';\n }\n\n private formatError(err: unknown): string {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: unknown[] }; message?: string };\n if (e.response?.errors) {\n return JSON.stringify({ errors: e.response.errors }, null, 2);\n }\n if (e.message) {\n return JSON.stringify({ error: e.message }, null, 2);\n }\n }\n return JSON.stringify({ error: String(err) }, null, 2);\n }\n\n private extractErrorSummary(err: unknown): string {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: Array<{ message?: string }> }; message?: string };\n if (e.response?.errors?.[0]?.message) return e.response.errors[0].message!;\n if (e.message) return e.message;\n }\n return String(err);\n }\n\n private loadFromStorage(): void {\n const parsed = DevToolsPrefs.Get<{\n history?: HistoryEntry[];\n query?: string;\n variables?: string;\n sidebarTab?: SidebarTab;\n schemaKindFilter?: 'all' | 'query' | 'mutation';\n entitiesSearch?: string;\n entitySchemaFilter?: string;\n sidebarWidthPx?: number;\n editorHeightPct?: number;\n }>(PREFS_KEY);\n if (!parsed) return;\n if (parsed.history) {\n this.History = parsed.history.map(h => ({ ...h, timestamp: new Date(h.timestamp) }));\n }\n if (parsed.query) this.Query = parsed.query;\n if (parsed.variables) this.Variables = parsed.variables;\n if (parsed.sidebarTab) this.SidebarTab = parsed.sidebarTab;\n if (parsed.schemaKindFilter) this.SchemaKindFilter = parsed.schemaKindFilter;\n if (parsed.entitiesSearch) this.EntitiesSearch = parsed.entitiesSearch;\n if (parsed.entitySchemaFilter) this.EntitySchemaFilter = parsed.entitySchemaFilter;\n if (typeof parsed.sidebarWidthPx === 'number') this.SidebarWidthPx = parsed.sidebarWidthPx;\n if (typeof parsed.editorHeightPct === 'number') this.EditorHeightPct = parsed.editorHeightPct;\n }\n\n private saveToStorage(): void {\n DevToolsPrefs.Save(PREFS_KEY, {\n history: this.History,\n query: this.Query,\n variables: this.Variables,\n sidebarTab: this.SidebarTab,\n schemaKindFilter: this.SchemaKindFilter,\n entitiesSearch: this.EntitiesSearch,\n entitySchemaFilter: this.EntitySchemaFilter,\n sidebarWidthPx: this.SidebarWidthPx,\n editorHeightPct: this.EditorHeightPct\n });\n }\n\n // ---------- schema introspection ----------\n\n private async loadSchema(): Promise<void> {\n this.SchemaLoading = true;\n this.SchemaError = null;\n this.SchemaIntrospectionDisabled = false;\n this.cdr.markForCheck();\n try {\n const data = await GraphQLDataProvider.ExecuteGQL(INTROSPECTION_QUERY, null);\n const schema = (data as { __schema?: { queryType?: { name: string }; mutationType?: { name: string } | null; types: IntrospectedType[] } }).__schema;\n if (!schema) throw new Error('No __schema in introspection response');\n\n const queryTypeName = schema.queryType?.name;\n const mutationTypeName = schema.mutationType?.name;\n const ops: SchemaOperation[] = [];\n\n for (const type of schema.types) {\n if (type.name === queryTypeName) {\n for (const f of type.fields ?? []) ops.push(this.toOperation(f, 'query'));\n } else if (type.name === mutationTypeName) {\n for (const f of type.fields ?? []) ops.push(this.toOperation(f, 'mutation'));\n }\n }\n\n ops.sort((a, b) => {\n if (a.kind !== b.kind) return a.kind === 'query' ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n this.Operations = ops;\n this.schemaLoaded = true;\n } catch (err: unknown) {\n // Detect introspection-disabled (Apollo + most servers in production)\n const errStr = this.extractErrorSummary(err);\n const code = this.extractErrorCode(err);\n const looksDisabled =\n code === 'INTROSPECTION_DISABLED' ||\n code === 'GRAPHQL_VALIDATION_FAILED' ||\n /__schema|__type|introspection/i.test(errStr);\n\n if (looksDisabled) {\n this.SchemaIntrospectionDisabled = true;\n this.SchemaError = null;\n } else {\n // Trim huge stack-laden messages — show first 240 chars\n this.SchemaError = errStr.length > 240 ? errStr.slice(0, 240) + '…' : errStr;\n }\n } finally {\n this.SchemaLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n private extractErrorCode(err: unknown): string | undefined {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: Array<{ extensions?: { code?: string } }> } };\n return e.response?.errors?.[0]?.extensions?.code;\n }\n return undefined;\n }\n\n private toOperation(field: IntrospectedField, kind: 'query' | 'mutation'): SchemaOperation {\n const argSummary = field.args.length === 0\n ? ''\n : field.args.map(a => `${a.name}: ${this.typeRefToString(a.type)}`).join(', ');\n return {\n name: field.name,\n kind,\n description: field.description ?? '',\n argSummary,\n returnSummary: this.typeRefToString(field.type),\n field\n };\n }\n\n private typeRefToString(t: IntrospectedTypeRef | null | undefined): string {\n if (!t) return '?';\n if (t.kind === 'NON_NULL') return this.typeRefToString(t.ofType) + '!';\n if (t.kind === 'LIST') return '[' + this.typeRefToString(t.ofType) + ']';\n return t.name ?? '?';\n }\n\n private isObjectReturn(t: IntrospectedTypeRef): boolean {\n let cur: IntrospectedTypeRef | null | undefined = t;\n while (cur && (cur.kind === 'NON_NULL' || cur.kind === 'LIST')) cur = cur.ofType;\n return !!cur && (cur.kind === 'OBJECT' || cur.kind === 'INTERFACE' || cur.kind === 'UNION');\n }\n\n private buildOperationTemplate(op: SchemaOperation): string {\n const opNameUpper = op.name.charAt(0).toUpperCase() + op.name.slice(1);\n const f = op.field;\n\n // Variable declarations + arg passing\n let varDecls = '';\n let argPass = '';\n if (f.args.length > 0) {\n varDecls = '(' + f.args.map(a => `$${a.name}: ${this.typeRefToString(a.type)}`).join(', ') + ')';\n argPass = '(' + f.args.map(a => `${a.name}: $${a.name}`).join(', ') + ')';\n }\n\n const isObject = this.isObjectReturn(f.type);\n const selection = isObject\n ? ' {\\n # TODO: select fields from ' + this.typeRefToString(f.type) + '\\n }'\n : '';\n\n return `${op.kind} ${opNameUpper}${varDecls} {\\n ${op.name}${argPass}${selection}\\n}\\n`;\n }\n}\n\nconst INTROSPECTION_QUERY = `\nquery MJDevToolsIntrospection {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n kind\n name\n description\n fields(includeDeprecated: false) {\n name\n description\n args {\n name\n description\n type { ...TypeRef }\n defaultValue\n }\n type { ...TypeRef }\n }\n }\n }\n}\nfragment TypeRef on __Type {\n kind\n name\n ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n}\n`;\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"GraphQL console\"\n Title=\"GraphQL Console\"\n Subtitle=\"Run queries against the connected MJ API\">\n <div meta>\n @if (ApiUrl) {\n <span class=\"gc-endpoint-meta\">\n <i class=\"fa-solid fa-plug\" aria-hidden=\"true\"></i>\n <code class=\"gc-endpoint\">{{ ApiUrl }}</code>\n </span>\n }\n </div>\n <div actions>\n <button mjButton\n variant=\"secondary\"\n size=\"sm\"\n [toggleable]=\"true\"\n [(selected)]=\"ShowHistory\"\n title=\"Toggle history sidebar\">\n <i class=\"fa-solid fa-clock-rotate-left\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">History</span>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnCopyAsCurl()\" title=\"Copy as cURL command\">\n <i class=\"fa-solid fa-terminal\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Copy cURL</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"gc-body\">\n @if (ShowHistory) {\n <aside class=\"gc-sidebar\" [style.width.px]=\"SidebarWidthPx\">\n <div class=\"gc-sidebar-tabs\">\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'history'\"\n (click)=\"OnSidebarTabChange('history')\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i> History\n </button>\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'entities'\"\n (click)=\"OnSidebarTabChange('entities')\">\n <i class=\"fa-solid fa-table-list\"></i> Entities\n </button>\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'schema'\"\n (click)=\"OnSidebarTabChange('schema')\">\n <i class=\"fa-solid fa-sitemap\"></i> Schema\n </button>\n </div>\n\n @if (SidebarTab === 'history') {\n <div class=\"gc-history-head\">\n <span>{{ History.length }} {{ History.length === 1 ? 'entry' : 'entries' }}</span>\n <button class=\"gc-history-clear\"\n type=\"button\"\n (click)=\"OnClearHistory()\"\n title=\"Clear non-favorite history\">\n <i class=\"fa-solid fa-broom\"></i>\n </button>\n </div>\n @if (History.length === 0) {\n <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>·</span>\n <span>{{ h.durationMs }}ms</span>\n }\n </div>\n </button>\n }\n </div>\n }\n } @else if (SidebarTab === 'entities') {\n <div class=\"gc-ent-toolbar\">\n <div class=\"gc-ent-search-wrap\">\n <i class=\"fa-solid fa-search gc-ent-search-icon\"></i>\n <input type=\"search\"\n class=\"gc-ent-search\"\n placeholder=\"Search entities…\"\n [(ngModel)]=\"EntitiesSearch\" />\n </div>\n @if (KnownSchemas.length > 1) {\n <select class=\"gc-ent-schema\" [(ngModel)]=\"EntitySchemaFilter\">\n <option value=\"\">All schemas ({{ KnownSchemas.length }})</option>\n @for (s of KnownSchemas; track s) {\n <option [value]=\"s\">{{ s }}</option>\n }\n </select>\n }\n </div>\n <div class=\"gc-ent-meta\">\n <span>{{ FilteredEntities.length }} of {{ Entities.length }}</span>\n <span class=\"gc-ent-hint\">Click an entity to see operations</span>\n </div>\n <div class=\"gc-ent-list\">\n @for (item of FilteredEntities; track TrackByEntity($index, item)) {\n <div class=\"gc-ent-card\" [class.gc-ent-card--expanded]=\"item.expanded\">\n <button type=\"button\"\n class=\"gc-ent-row\"\n (click)=\"ToggleEntity(item)\">\n <i class=\"fa-solid fa-chevron-right gc-ent-chev\"\n [class.gc-ent-chev--down]=\"item.expanded\"></i>\n <div class=\"gc-ent-info\">\n <div class=\"gc-ent-name\">{{ item.info.Name }}</div>\n <div class=\"gc-ent-meta-row\">\n <code class=\"gc-ent-typename\">{{ item.typeName }}</code>\n <span class=\"gc-ent-schema-badge\">{{ item.schema }}</span>\n </div>\n </div>\n </button>\n @if (item.expanded) {\n <div class=\"gc-ent-actions\">\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--read\"\n (click)=\"OnEntityOp(item, 'view', $event)\"\n title=\"Insert a Run View template (Shift-click to append)\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Run view\n </button>\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--read\"\n (click)=\"OnEntityOp(item, 'byId', $event)\"\n title=\"Fetch a single record by ID (Shift-click to append)\">\n <i class=\"fa-solid fa-fingerprint\"></i>\n Get by ID\n </button>\n @if (item.info.AllowCreateAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--write\"\n (click)=\"OnEntityOp(item, 'create', $event)\"\n title=\"Create a new record (Shift-click to append)\">\n <i class=\"fa-solid fa-plus\"></i>\n Create\n </button>\n }\n @if (item.info.AllowUpdateAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--write\"\n (click)=\"OnEntityOp(item, 'update', $event)\"\n title=\"Update an existing record (Shift-click to append)\">\n <i class=\"fa-solid fa-pen\"></i>\n Update\n </button>\n }\n @if (item.info.AllowDeleteAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--danger\"\n (click)=\"OnEntityOp(item, 'delete', $event)\"\n title=\"Delete a record (Shift-click to append)\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n @if (item.info.Description) {\n <div class=\"gc-ent-desc\">{{ item.info.Description }}</div>\n }\n }\n </div>\n }\n @if (FilteredEntities.length === 0) {\n <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…\"\n [(ngModel)]=\"SchemaSearch\" />\n </div>\n <button class=\"gc-schema-reload\"\n type=\"button\"\n (click)=\"OnReloadSchema()\"\n [disabled]=\"SchemaLoading\"\n title=\"Reload schema\">\n <i class=\"fa-solid\" [class.fa-rotate]=\"!SchemaLoading\" [class.fa-spinner]=\"SchemaLoading\" [class.fa-spin]=\"SchemaLoading\"></i>\n </button>\n </div>\n\n @if (Operations.length > 0) {\n <div class=\"gc-schema-kinds\">\n <button type=\"button\"\n class=\"gc-schema-kind\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'all'\"\n (click)=\"SchemaKindFilter = 'all'\">\n All <span>{{ OperationCounts.all }}</span>\n </button>\n <button type=\"button\"\n class=\"gc-schema-kind gc-schema-kind--query\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'query'\"\n (click)=\"SchemaKindFilter = 'query'\">\n <i class=\"fa-solid fa-magnifying-glass\"></i> Query <span>{{ OperationCounts.query }}</span>\n </button>\n <button type=\"button\"\n class=\"gc-schema-kind gc-schema-kind--mutation\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'mutation'\"\n (click)=\"SchemaKindFilter = 'mutation'\">\n <i class=\"fa-solid fa-pen\"></i> Mutation <span>{{ OperationCounts.mutation }}</span>\n </button>\n </div>\n }\n\n @if (SchemaLoading) {\n <div class=\"gc-schema-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Introspecting schema…</span>\n </div>\n } @else if (SchemaIntrospectionDisabled) {\n <div class=\"gc-schema-state gc-schema-disabled\">\n <i class=\"fa-solid fa-lock\"></i>\n <div class=\"gc-schema-disabled-title\">Introspection disabled</div>\n <div class=\"gc-schema-disabled-body\">\n This server has GraphQL introspection turned off (typical in production). Schema browsing isn't available — write queries directly in the editor, or use the History tab to revisit previous queries.\n </div>\n </div>\n } @else if (SchemaError) {\n <div class=\"gc-schema-state gc-schema-state--err\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div class=\"gc-schema-err-title\">Couldn't load schema</div>\n <div class=\"gc-schema-err-body\">{{ SchemaError }}</div>\n </div>\n } @else if (FilteredOperations.length === 0) {\n <div class=\"gc-schema-state\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No operations match.</span>\n </div>\n } @else {\n <div class=\"gc-schema-list\">\n @for (op of FilteredOperations; track TrackByOp($index, op)) {\n <button type=\"button\"\n class=\"gc-schema-op\"\n [class.gc-schema-op--mutation]=\"op.kind === 'mutation'\"\n (click)=\"OnInsertOperation(op, $event)\"\n [title]=\"(op.description || ('Insert ' + op.kind + ' template')) + ' · Shift-click to append'\">\n <div class=\"gc-schema-op-head\">\n <span class=\"gc-schema-op-kind\">{{ op.kind }}</span>\n <span class=\"gc-schema-op-name\">{{ op.name }}</span>\n </div>\n @if (op.argSummary) {\n <div class=\"gc-schema-op-args\">({{ op.argSummary }})</div>\n }\n <div class=\"gc-schema-op-return\">\n <i class=\"fa-solid fa-arrow-right\"></i> {{ op.returnSummary }}\n </div>\n @if (op.description) {\n <div class=\"gc-schema-op-desc\">{{ op.description }}</div>\n }\n </button>\n }\n </div>\n }\n }\n </aside>\n <div class=\"gc-splitter gc-splitter--vert\"\n (mousedown)=\"OnSplitterDown($event, 'sidebar')\"\n title=\"Drag to resize sidebar\"></div>\n }\n\n <div class=\"gc-main\">\n <div class=\"gc-editor-wrap\" [style.flex]=\"'0 0 ' + EditorHeightPct + '%'\">\n <div class=\"gc-editor-head\">\n <span class=\"gc-editor-label\">Query</span>\n <span class=\"gc-editor-hint\">⌘/Ctrl+Enter to run · Shift+click an entity/op to append</span>\n <button class=\"gc-mini-btn\" type=\"button\" (click)=\"OnFormatQuery()\" title=\"Tidy whitespace\">\n <i class=\"fa-solid fa-broom\"></i> Tidy\n </button>\n <button class=\"gc-mini-btn gc-mini-btn--danger\" type=\"button\" (click)=\"OnClearQuery()\" title=\"Clear editor\">\n <i class=\"fa-solid fa-eraser\"></i> Clear\n </button>\n </div>\n <mj-code-editor\n class=\"gc-editor\"\n [(ngModel)]=\"Query\"\n [language]=\"'graphql'\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter your GraphQL query…\">\n </mj-code-editor>\n </div>\n\n <div class=\"gc-splitter gc-splitter--horiz\"\n (mousedown)=\"OnSplitterDown($event, 'editor')\"\n title=\"Drag to resize editor / response\"></div>\n\n <div class=\"gc-vars-wrap\">\n <button class=\"gc-vars-toggle\" type=\"button\" (click)=\"ToggleVariables()\">\n <i class=\"fa-solid fa-chevron-right gc-vars-chev\" [class.gc-vars-chev--down]=\"ShowVariables\"></i>\n Variables\n @if (Variables && Variables.trim() !== '{}' && Variables.trim() !== '') {\n <span class=\"gc-vars-pill\">configured</span>\n }\n </button>\n @if (ShowVariables) {\n <mj-code-editor\n class=\"gc-editor gc-editor--vars\"\n [(ngModel)]=\"Variables\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n placeholder=\"{}\">\n </mj-code-editor>\n }\n </div>\n\n <div class=\"gc-run-bar\">\n <button class=\"gc-run-btn\"\n type=\"button\"\n [disabled]=\"Running\"\n (click)=\"OnRun()\">\n @if (Running) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running…\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run\n }\n </button>\n @if (ResponseStatus !== 'idle') {\n <div class=\"gc-run-meta\">\n @if (ResponseStatus === 'ok') {\n <span class=\"gc-status-badge gc-status-badge--ok\">\n <i class=\"fa-solid fa-circle-check\"></i> 200 OK\n </span>\n } @else {\n <span class=\"gc-status-badge gc-status-badge--err\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error\n </span>\n }\n @if (ResponseDurationMs != null) {\n <span class=\"gc-meta-pill\"><i class=\"fa-regular fa-clock\"></i> {{ ResponseDurationMs }}ms</span>\n }\n @if (ResponseSizeBytes != null) {\n <span class=\"gc-meta-pill\"><i class=\"fa-solid fa-database\"></i> {{ FormattedSize }}</span>\n }\n </div>\n }\n <span class=\"gc-spacer\"></span>\n @if (ResponseJson) {\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopyResponse()\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n }\n </div>\n\n <div class=\"gc-response-wrap\">\n <div class=\"gc-response-head\">\n <span class=\"gc-editor-label\">Response</span>\n </div>\n @if (ErrorMessage && !ResponseJson) {\n <div class=\"gc-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n } @else if (ResponseJson) {\n @if (ErrorMessage) {\n <div class=\"gc-error gc-error--inline\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n <pre class=\"gc-response\"><code>{{ ResponseJson }}</code></pre>\n } @else {\n <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"]}
1
+ {"version":3,"file":"graphql-console.component.js","sourceRoot":"","sources":["../../src/DevTools/graphql-console.component.ts","../../src/DevTools/graphql-console.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ElementRef, ViewChild, HostListener, inject } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { EntityInfo, EntityFieldInfo, getGraphQLTypeNameBase } from '@memberjunction/core';\nimport { GraphQLDataProvider, FieldMapper } from '@memberjunction/graphql-dataprovider';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface HistoryEntry {\n id: string;\n query: string;\n variables: string;\n timestamp: Date;\n durationMs?: number;\n status: 'ok' | 'error' | 'pending';\n favorite: boolean;\n label?: string;\n}\n\n/** GraphQL introspection — minimal subset sufficient for the explorer. */\ninterface IntrospectedTypeRef {\n kind: 'NON_NULL' | 'LIST' | 'SCALAR' | 'OBJECT' | 'ENUM' | 'INPUT_OBJECT' | 'INTERFACE' | 'UNION' | string;\n name: string | null;\n ofType?: IntrospectedTypeRef | null;\n}\ninterface IntrospectedArg {\n name: string;\n description?: string | null;\n type: IntrospectedTypeRef;\n defaultValue?: string | null;\n}\ninterface IntrospectedField {\n name: string;\n description?: string | null;\n args: IntrospectedArg[];\n type: IntrospectedTypeRef;\n}\ninterface IntrospectedType {\n kind: string;\n name: string;\n description?: string | null;\n fields?: IntrospectedField[] | null;\n}\ninterface SchemaOperation {\n name: string;\n kind: 'query' | 'mutation';\n description: string;\n argSummary: string;\n returnSummary: string;\n field: IntrospectedField;\n}\n\ntype SidebarTab = 'history' | 'schema' | 'entities';\ntype EntityOpKind = 'view' | 'byId' | 'create' | 'update' | 'delete';\n\ninterface EntityListItem {\n info: EntityInfo;\n typeName: string;\n schema: string;\n /** True when this entity is currently expanded showing operation buttons. */\n expanded: boolean;\n}\n\nconst PREFS_KEY = 'graphqlConsole';\nconst HISTORY_LIMIT = 30;\n\nconst SAMPLE_QUERY = `# Welcome to the GraphQL Console\n# Press Cmd/Ctrl+Enter to run.\n# Authentication is handled by the active GraphQL provider.\n\nquery GetCurrentUser {\n CurrentUser {\n ID\n Name\n Email\n }\n}\n`;\n\n/**\n * GraphQL Console — write and run arbitrary GraphQL queries against the\n * connected MJ API. Re-uses the active GraphQLDataProvider client (auth +\n * session intact). Local history with copy / favorite / replay; copy-as-curl;\n * keyboard shortcut (Cmd/Ctrl+Enter) to run.\n *\n * 🔒 SAFETY BOUNDARY — CLASSIFICATION: INTENTIONALLY UNWIRED for the AI agent.\n * This surface executes arbitrary, user-authored GraphQL against the live API\n * with the session's full auth — an agent-controllable injection vector. It\n * therefore registers NO agent context and NO client tools (no SetAgentContext /\n * SetAgentClientTools calls anywhere in this component). The agent must never be\n * able to compose or run queries here; the human operator drives this console.\n */\n@RegisterClass(BaseResourceComponent, 'GraphQLConsoleInspector')\n@Component({\n standalone: false,\n selector: 'mj-graphql-console',\n templateUrl: './graphql-console.component.html',\n styleUrls: ['./inspector-shared.css', './graphql-console.component.css']\n})\nexport class GraphQLConsoleComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n @ViewChild('queryEditor') QueryEditor?: ElementRef<HTMLTextAreaElement>;\n\n /** @deprecated Use {@link QueryEditor}. */\n get queryEditor(): ElementRef<HTMLTextAreaElement> | undefined {\n return this.QueryEditor;\n }\n /** @deprecated Use {@link QueryEditor}. */\n set queryEditor(value: ElementRef<HTMLTextAreaElement> | undefined) {\n this.QueryEditor = value;\n }\n\n public Query = SAMPLE_QUERY;\n public Variables = '{}';\n public ShowVariables = false;\n\n public Running = false;\n public ResponseJson = '';\n public ResponseStatus: 'ok' | 'error' | 'idle' = 'idle';\n public ResponseDurationMs: number | null = null;\n public ResponseSizeBytes: number | null = null;\n public ErrorMessage: string | null = null;\n\n public History: HistoryEntry[] = [];\n public ShowHistory = true;\n public CopyConfirmed = false;\n\n public ApiUrl = '';\n\n // Schema explorer state\n public SidebarTab: SidebarTab = 'history';\n public SchemaLoading = false;\n public SchemaError: string | null = null;\n public SchemaIntrospectionDisabled = false;\n public SchemaSearch = '';\n public SchemaKindFilter: 'all' | 'query' | 'mutation' = 'all';\n public Operations: SchemaOperation[] = [];\n private schemaLoaded = false;\n\n // Entities tab state\n public EntitiesSearch = '';\n public Entities: EntityListItem[] = [];\n public EntitySchemaFilter = ''; // '' = all\n public KnownSchemas: string[] = [];\n\n // Pane sizing (resizable splitters)\n public SidebarWidthPx = 280;\n public EditorHeightPct = 50; // % of main pane height for editor (50/50 split default)\n private resizing: 'sidebar' | 'editor' | null = null;\n private elementRef = inject(ElementRef);\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.loadFromStorage();\n try {\n this.ApiUrl = GraphQLDataProvider.Instance.ConfigData?.URL ?? '';\n } catch { /* not configured */ }\n this.loadEntities();\n this.NotifyLoadComplete();\n }\n\n public override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.saveToStorage();\n this.detachResizeListeners();\n }\n\n private loadEntities(): void {\n try {\n const md = this.ProviderToUse;\n if (!md) return;\n const items: EntityListItem[] = (md.Entities ?? []).map(e => ({\n info: e,\n typeName: getGraphQLTypeNameBase(e),\n schema: e.SchemaName ?? '(unknown)',\n expanded: false\n })).sort((a, b) => a.info.Name.localeCompare(b.info.Name));\n this.Entities = items;\n const schemas = new Set<string>();\n for (const i of items) schemas.add(i.schema);\n this.KnownSchemas = Array.from(schemas).sort();\n } catch { /* metadata not ready */ }\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'GraphQL Console'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-code'; }\n\n @HostListener('keydown', ['$event'])\n public OnHostKeydown(event: KeyboardEvent): void {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') {\n event.preventDefault();\n void this.OnRun();\n }\n }\n\n public async OnRun(): Promise<void> {\n const trimmedQuery = this.Query.trim();\n if (!trimmedQuery) {\n this.ErrorMessage = 'Query is empty.';\n return;\n }\n let parsedVars: Record<string, unknown> | null = null;\n if (this.Variables.trim()) {\n try {\n parsedVars = JSON.parse(this.Variables);\n } catch (err) {\n this.ResponseStatus = 'error';\n this.ErrorMessage = 'Variables must be valid JSON: ' + (err instanceof Error ? err.message : String(err));\n this.ResponseJson = '';\n this.cdr.markForCheck();\n return;\n }\n }\n\n this.Running = true;\n this.ErrorMessage = null;\n this.ResponseStatus = 'idle';\n this.ResponseJson = '';\n this.cdr.markForCheck();\n\n const start = performance.now();\n try {\n const data = await GraphQLDataProvider.ExecuteGQL(trimmedQuery, parsedVars);\n const elapsed = performance.now() - start;\n const text = JSON.stringify(data, null, 2);\n this.ResponseJson = text;\n this.ResponseStatus = 'ok';\n this.ResponseDurationMs = Math.round(elapsed);\n this.ResponseSizeBytes = new Blob([text]).size;\n this.recordHistory(trimmedQuery, this.Variables, 'ok', this.ResponseDurationMs);\n } catch (err: unknown) {\n const elapsed = performance.now() - start;\n this.ResponseStatus = 'error';\n this.ResponseDurationMs = Math.round(elapsed);\n const formatted = this.formatError(err);\n this.ResponseJson = formatted;\n this.ResponseSizeBytes = new Blob([formatted]).size;\n this.ErrorMessage = this.extractErrorSummary(err);\n this.recordHistory(trimmedQuery, this.Variables, 'error', this.ResponseDurationMs);\n } finally {\n this.Running = false;\n this.cdr.markForCheck();\n }\n }\n\n public OnRestoreHistory(entry: HistoryEntry): void {\n this.Query = entry.query;\n this.Variables = entry.variables;\n if (entry.variables.trim() && entry.variables.trim() !== '{}') {\n this.ShowVariables = true;\n }\n this.cdr.markForCheck();\n }\n\n public OnToggleFavorite(entry: HistoryEntry, event: Event): void {\n event.stopPropagation();\n entry.favorite = !entry.favorite;\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public OnDeleteHistory(entry: HistoryEntry, event: Event): void {\n event.stopPropagation();\n this.History = this.History.filter(h => h.id !== entry.id);\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public OnClearHistory(): void {\n // Keep favorites\n this.History = this.History.filter(h => h.favorite);\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public async OnCopyResponse(): Promise<void> {\n if (!this.ResponseJson) return;\n try {\n await navigator.clipboard.writeText(this.ResponseJson);\n this.CopyConfirmed = true;\n setTimeout(() => { this.CopyConfirmed = false; this.cdr.markForCheck(); }, 1800);\n this.cdr.markForCheck();\n } catch { /* unavailable */ }\n }\n\n public async OnCopyAsCurl(): Promise<void> {\n const url = this.ApiUrl || '<API_URL>';\n const body = JSON.stringify({\n query: this.Query.trim(),\n variables: this.Variables.trim() ? JSON.parse(this.Variables) : null\n });\n const escaped = body.replace(/'/g, `'\\\\''`);\n const curl = [\n `curl -X POST '${url}'`,\n ` -H 'Content-Type: application/json'`,\n ` -H 'Authorization: Bearer <YOUR_TOKEN>'`,\n ` -d '${escaped}'`\n ].join(' \\\\\\n');\n try { await navigator.clipboard.writeText(curl); } catch { /* unavailable */ }\n }\n\n public OnFormatQuery(): void {\n // Tiny pretty-printer: collapse multiple blank lines + trim trailing whitespace\n this.Query = this.Query\n .split('\\n')\n .map(line => line.replace(/\\s+$/, ''))\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim() + '\\n';\n }\n\n public ToggleHistoryPanel(): void {\n this.ShowHistory = !this.ShowHistory;\n }\n\n public ToggleVariables(): void {\n this.ShowVariables = !this.ShowVariables;\n }\n\n public OnSidebarTabChange(tab: SidebarTab): void {\n this.SidebarTab = tab;\n this.saveToStorage();\n if (tab === 'schema' && !this.schemaLoaded && !this.SchemaLoading) {\n void this.loadSchema();\n }\n }\n\n public async OnReloadSchema(): Promise<void> {\n this.schemaLoaded = false;\n await this.loadSchema();\n }\n\n public OnInsertOperation(op: SchemaOperation, event?: MouseEvent): void {\n const template = this.buildOperationTemplate(op);\n this.insertTemplate(template, !!event?.shiftKey);\n }\n\n public OnClearQuery(): void {\n this.Query = '';\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n public get FilteredOperations(): SchemaOperation[] {\n const q = this.SchemaSearch.trim().toLowerCase();\n return this.Operations.filter(op => {\n if (this.SchemaKindFilter !== 'all' && op.kind !== this.SchemaKindFilter) return false;\n if (!q) return true;\n return op.name.toLowerCase().includes(q)\n || op.returnSummary.toLowerCase().includes(q)\n || op.description.toLowerCase().includes(q);\n });\n }\n\n public get OperationCounts(): { all: number; query: number; mutation: number } {\n const q = this.Operations.filter(o => o.kind === 'query').length;\n const m = this.Operations.filter(o => o.kind === 'mutation').length;\n return { all: this.Operations.length, query: q, mutation: m };\n }\n\n public TrackByOp = (_i: number, o: SchemaOperation) => o.kind + ':' + o.name;\n\n // ---------- Entities tab ----------\n\n public TrackByEntity = (_i: number, e: EntityListItem) => e.info.ID;\n\n public get FilteredEntities(): EntityListItem[] {\n const q = this.EntitiesSearch.trim().toLowerCase();\n return this.Entities.filter(e => {\n if (this.EntitySchemaFilter && e.schema !== this.EntitySchemaFilter) return false;\n if (!q) return true;\n return e.info.Name.toLowerCase().includes(q)\n || e.typeName.toLowerCase().includes(q)\n || e.schema.toLowerCase().includes(q)\n || (e.info.Description ?? '').toLowerCase().includes(q);\n });\n }\n\n public ToggleEntity(e: EntityListItem): void {\n e.expanded = !e.expanded;\n }\n\n public OnEntityOp(item: EntityListItem, op: EntityOpKind, event: MouseEvent): void {\n event.stopPropagation();\n const template = this.buildEntityOpTemplate(item, op);\n this.insertTemplate(template, !!event.shiftKey);\n }\n\n /**\n * Default: replace the editor contents with the new template.\n * Shift-click: append to the end (with a blank-line separator) so the\n * user can stage multiple operations in one document.\n */\n private insertTemplate(template: string, append: boolean): void {\n const trimmed = this.Query.trimEnd();\n const isFresh = trimmed.length === 0 || trimmed === SAMPLE_QUERY.trimEnd();\n if (append && !isFresh) {\n this.Query = trimmed + '\\n\\n' + template;\n } else {\n this.Query = template;\n }\n this.saveToStorage();\n this.cdr.markForCheck();\n }\n\n private buildEntityOpTemplate(item: EntityListItem, op: EntityOpKind): string {\n const e = item.info;\n const typeName = item.typeName;\n const mapper = new FieldMapper();\n const fieldList = this.pickRepresentativeFields(e).map(name => {\n const mapped = mapper.MapFieldName(name);\n // Annotate any remapped fields so users see why the GraphQL field\n // name differs from the database column. (`__` is reserved by the\n // GraphQL spec, so MJ rewrites `__mj_*` columns to `_mj__*` over\n // the wire.)\n return mapped === name ? mapped : `${mapped} # from ${name}`;\n });\n const fieldSelection = fieldList.join('\\n ');\n const pkField = mapper.MapFieldName(e.PrimaryKeys?.[0]?.Name ?? 'ID');\n\n switch (op) {\n case 'view':\n return `# Run a dynamic view over ${e.Name}\nquery Run${typeName}DynamicView {\n Run${typeName}DynamicView(input: {\n EntityName: \"${e.Name}\"\n ExtraFilter: \"\"\n OrderBy: \"\"\n UserSearchString: \"\"\n Fields: null\n MaxRows: 100\n StartRow: 0\n IgnoreMaxRows: false\n ForceAuditLog: false\n ResultType: \"simple\"\n }) {\n Success\n RowCount\n TotalRowCount\n ExecutionTime\n ErrorMessage\n Results {\n ${fieldSelection}\n }\n }\n}\n`;\n case 'byId':\n return `# Fetch a single ${e.Name} record by primary key\nquery Run${typeName}ByID($id: String!) {\n Run${typeName}DynamicView(input: {\n EntityName: \"${e.Name}\"\n ExtraFilter: \"${pkField}='\" + $id + \"'\"\n Fields: null\n MaxRows: 1\n StartRow: 0\n IgnoreMaxRows: false\n ForceAuditLog: false\n ResultType: \"simple\"\n OrderBy: \"\"\n UserSearchString: \"\"\n }) {\n Success\n Results {\n ${fieldSelection}\n }\n }\n}\n\n# Variables (paste into the Variables panel):\n# { \"id\": \"<your-id-here>\" }\n`;\n case 'create':\n return `# Create a new ${e.Name}\nmutation Create${typeName}($input: Create${typeName}Input!) {\n Create${typeName}(input: $input) {\n ${fieldSelection}\n }\n}\n\n# Variables — populate the writable fields, then Run\n# {\n# \"input\": {\n# # required + writable fields go here\n# }\n# }\n`;\n case 'update':\n return `# Update an existing ${e.Name}\nmutation Update${typeName}($input: Update${typeName}Input!) {\n Update${typeName}(input: $input) {\n ${fieldSelection}\n }\n}\n\n# Variables — must include the primary key (${pkField})\n# {\n# \"input\": {\n# \"${pkField}\": \"<id-here>\"\n# # ...changed fields\n# }\n# }\n`;\n case 'delete':\n return `# Delete a ${e.Name}\nmutation Delete${typeName}($input: Delete${typeName}Input!) {\n Delete${typeName}(input: $input) {\n ${pkField}\n }\n}\n\n# Variables:\n# { \"input\": { \"${pkField}\": \"<id-here>\" } }\n`;\n }\n }\n\n /** Pick the first ~10 displayable fields, prioritizing primary key and common fields. */\n private pickRepresentativeFields(e: EntityInfo): string[] {\n const fields = e.Fields ?? [];\n if (fields.length === 0) return ['ID'];\n const out: string[] = [];\n const seen = new Set<string>();\n const push = (n: string) => { if (n && !seen.has(n)) { seen.add(n); out.push(n); } };\n\n for (const f of fields) {\n if (f.IsPrimaryKey) push(f.Name);\n }\n // Prefer common, lightweight fields\n for (const f of fields) {\n if (out.length >= 10) break;\n if (f.IsBinaryFieldType) continue;\n const lower = f.Name.toLowerCase();\n if (lower === 'name' || lower === 'description' || lower === 'status' || lower === 'type') {\n push(f.Name);\n }\n }\n // Fill with the rest, skipping huge / private fields\n for (const f of fields) {\n if (out.length >= 10) break;\n if (f.IsBinaryFieldType) continue;\n if (this.isExpensiveField(f)) continue;\n push(f.Name);\n }\n return out;\n }\n\n private isExpensiveField(f: EntityFieldInfo): boolean {\n const t = (f.Type ?? '').toLowerCase();\n if (t === 'nvarchar(max)' || t === 'varchar(max)' || t === 'text' || t === 'ntext') return true;\n if (t.includes('blob') || t.includes('binary') || t === 'image' || t === 'varbinary') return true;\n return false;\n }\n\n public ClearEntityFilters(): void {\n this.EntitiesSearch = '';\n this.EntitySchemaFilter = '';\n }\n\n // ---------- Resizable splitters ----------\n\n public OnSplitterDown(event: MouseEvent, kind: 'sidebar' | 'editor'): void {\n event.preventDefault();\n this.resizing = kind;\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n document.body.style.cursor = kind === 'sidebar' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onMouseMove = (e: MouseEvent): void => {\n if (!this.resizing) return;\n const host = this.elementRef.nativeElement as HTMLElement;\n if (this.resizing === 'sidebar') {\n const bodyRect = host.querySelector('.gc-body')?.getBoundingClientRect();\n if (!bodyRect) return;\n const x = e.clientX - bodyRect.left;\n this.SidebarWidthPx = Math.max(200, Math.min(560, x));\n } else if (this.resizing === 'editor') {\n const mainRect = host.querySelector('.gc-main')?.getBoundingClientRect();\n if (!mainRect) return;\n const yPct = ((e.clientY - mainRect.top) / mainRect.height) * 100;\n this.EditorHeightPct = Math.max(20, Math.min(80, yPct));\n }\n this.cdr.markForCheck();\n };\n\n private onMouseUp = (): void => {\n if (!this.resizing) return;\n this.resizing = null;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.detachResizeListeners();\n this.saveToStorage();\n };\n\n private detachResizeListeners(): void {\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n\n public get FormattedSize(): string {\n if (this.ResponseSizeBytes == null) return '';\n const b = this.ResponseSizeBytes;\n if (b < 1024) return `${b} B`;\n if (b < 1024 * 1024) return `${(b / 1024).toFixed(1)} KB`;\n return `${(b / 1024 / 1024).toFixed(2)} MB`;\n }\n\n public TrackByHistory = (_i: number, h: HistoryEntry) => h.id;\n\n // ---------- private ----------\n\n private recordHistory(query: string, variables: string, status: 'ok' | 'error', durationMs: number): void {\n const entry: HistoryEntry = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n query,\n variables,\n timestamp: new Date(),\n durationMs,\n status,\n favorite: false,\n label: this.deriveLabel(query)\n };\n // De-dupe: if last non-favorite entry has the same query+vars, replace it instead of stacking\n const last = this.History[0];\n if (last && !last.favorite && last.query === query && last.variables === variables) {\n this.History[0] = entry;\n } else {\n this.History = [entry, ...this.History];\n }\n // Trim history (preserve favorites)\n if (this.History.length > HISTORY_LIMIT) {\n const favorites = this.History.filter(h => h.favorite);\n const nonFavorites = this.History.filter(h => !h.favorite).slice(0, HISTORY_LIMIT - favorites.length);\n this.History = [...favorites, ...nonFavorites].sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\n }\n this.saveToStorage();\n }\n\n private deriveLabel(query: string): string {\n const m = query.match(/(query|mutation|subscription)\\s+(\\w+)/);\n if (m) return `${m[1]} ${m[2]}`;\n const firstField = query.match(/[\\{\\s](\\w+)\\s*[\\(\\{]/);\n if (firstField) return firstField[1];\n return 'unnamed';\n }\n\n private formatError(err: unknown): string {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: unknown[] }; message?: string };\n if (e.response?.errors) {\n return JSON.stringify({ errors: e.response.errors }, null, 2);\n }\n if (e.message) {\n return JSON.stringify({ error: e.message }, null, 2);\n }\n }\n return JSON.stringify({ error: String(err) }, null, 2);\n }\n\n private extractErrorSummary(err: unknown): string {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: Array<{ message?: string }> }; message?: string };\n if (e.response?.errors?.[0]?.message) return e.response.errors[0].message!;\n if (e.message) return e.message;\n }\n return String(err);\n }\n\n private loadFromStorage(): void {\n const parsed = DevToolsPrefs.Get<{\n history?: HistoryEntry[];\n query?: string;\n variables?: string;\n sidebarTab?: SidebarTab;\n schemaKindFilter?: 'all' | 'query' | 'mutation';\n entitiesSearch?: string;\n entitySchemaFilter?: string;\n sidebarWidthPx?: number;\n editorHeightPct?: number;\n }>(PREFS_KEY);\n if (!parsed) return;\n if (parsed.history) {\n this.History = parsed.history.map(h => ({ ...h, timestamp: new Date(h.timestamp) }));\n }\n if (parsed.query) this.Query = parsed.query;\n if (parsed.variables) this.Variables = parsed.variables;\n if (parsed.sidebarTab) this.SidebarTab = parsed.sidebarTab;\n if (parsed.schemaKindFilter) this.SchemaKindFilter = parsed.schemaKindFilter;\n if (parsed.entitiesSearch) this.EntitiesSearch = parsed.entitiesSearch;\n if (parsed.entitySchemaFilter) this.EntitySchemaFilter = parsed.entitySchemaFilter;\n if (typeof parsed.sidebarWidthPx === 'number') this.SidebarWidthPx = parsed.sidebarWidthPx;\n if (typeof parsed.editorHeightPct === 'number') this.EditorHeightPct = parsed.editorHeightPct;\n }\n\n private saveToStorage(): void {\n DevToolsPrefs.Save(PREFS_KEY, {\n history: this.History,\n query: this.Query,\n variables: this.Variables,\n sidebarTab: this.SidebarTab,\n schemaKindFilter: this.SchemaKindFilter,\n entitiesSearch: this.EntitiesSearch,\n entitySchemaFilter: this.EntitySchemaFilter,\n sidebarWidthPx: this.SidebarWidthPx,\n editorHeightPct: this.EditorHeightPct\n });\n }\n\n // ---------- schema introspection ----------\n\n private async loadSchema(): Promise<void> {\n this.SchemaLoading = true;\n this.SchemaError = null;\n this.SchemaIntrospectionDisabled = false;\n this.cdr.markForCheck();\n try {\n const data = await GraphQLDataProvider.ExecuteGQL(INTROSPECTION_QUERY, null);\n const schema = (data as { __schema?: { queryType?: { name: string }; mutationType?: { name: string } | null; types: IntrospectedType[] } }).__schema;\n if (!schema) throw new Error('No __schema in introspection response');\n\n const queryTypeName = schema.queryType?.name;\n const mutationTypeName = schema.mutationType?.name;\n const ops: SchemaOperation[] = [];\n\n for (const type of schema.types) {\n if (type.name === queryTypeName) {\n for (const f of type.fields ?? []) ops.push(this.toOperation(f, 'query'));\n } else if (type.name === mutationTypeName) {\n for (const f of type.fields ?? []) ops.push(this.toOperation(f, 'mutation'));\n }\n }\n\n ops.sort((a, b) => {\n if (a.kind !== b.kind) return a.kind === 'query' ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n this.Operations = ops;\n this.schemaLoaded = true;\n } catch (err: unknown) {\n // Detect introspection-disabled (Apollo + most servers in production)\n const errStr = this.extractErrorSummary(err);\n const code = this.extractErrorCode(err);\n const looksDisabled =\n code === 'INTROSPECTION_DISABLED' ||\n code === 'GRAPHQL_VALIDATION_FAILED' ||\n /__schema|__type|introspection/i.test(errStr);\n\n if (looksDisabled) {\n this.SchemaIntrospectionDisabled = true;\n this.SchemaError = null;\n } else {\n // Trim huge stack-laden messages — show first 240 chars\n this.SchemaError = errStr.length > 240 ? errStr.slice(0, 240) + '…' : errStr;\n }\n } finally {\n this.SchemaLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n private extractErrorCode(err: unknown): string | undefined {\n if (err && typeof err === 'object') {\n const e = err as { response?: { errors?: Array<{ extensions?: { code?: string } }> } };\n return e.response?.errors?.[0]?.extensions?.code;\n }\n return undefined;\n }\n\n private toOperation(field: IntrospectedField, kind: 'query' | 'mutation'): SchemaOperation {\n const argSummary = field.args.length === 0\n ? ''\n : field.args.map(a => `${a.name}: ${this.typeRefToString(a.type)}`).join(', ');\n return {\n name: field.name,\n kind,\n description: field.description ?? '',\n argSummary,\n returnSummary: this.typeRefToString(field.type),\n field\n };\n }\n\n private typeRefToString(t: IntrospectedTypeRef | null | undefined): string {\n if (!t) return '?';\n if (t.kind === 'NON_NULL') return this.typeRefToString(t.ofType) + '!';\n if (t.kind === 'LIST') return '[' + this.typeRefToString(t.ofType) + ']';\n return t.name ?? '?';\n }\n\n private isObjectReturn(t: IntrospectedTypeRef): boolean {\n let cur: IntrospectedTypeRef | null | undefined = t;\n while (cur && (cur.kind === 'NON_NULL' || cur.kind === 'LIST')) cur = cur.ofType;\n return !!cur && (cur.kind === 'OBJECT' || cur.kind === 'INTERFACE' || cur.kind === 'UNION');\n }\n\n private buildOperationTemplate(op: SchemaOperation): string {\n const opNameUpper = op.name.charAt(0).toUpperCase() + op.name.slice(1);\n const f = op.field;\n\n // Variable declarations + arg passing\n let varDecls = '';\n let argPass = '';\n if (f.args.length > 0) {\n varDecls = '(' + f.args.map(a => `$${a.name}: ${this.typeRefToString(a.type)}`).join(', ') + ')';\n argPass = '(' + f.args.map(a => `${a.name}: $${a.name}`).join(', ') + ')';\n }\n\n const isObject = this.isObjectReturn(f.type);\n const selection = isObject\n ? ' {\\n # TODO: select fields from ' + this.typeRefToString(f.type) + '\\n }'\n : '';\n\n return `${op.kind} ${opNameUpper}${varDecls} {\\n ${op.name}${argPass}${selection}\\n}\\n`;\n }\n}\n\nconst INTROSPECTION_QUERY = `\nquery MJDevToolsIntrospection {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n kind\n name\n description\n fields(includeDeprecated: false) {\n name\n description\n args {\n name\n description\n type { ...TypeRef }\n defaultValue\n }\n type { ...TypeRef }\n }\n }\n }\n}\nfragment TypeRef on __Type {\n kind\n name\n ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } }\n}\n`;\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"GraphQL console\"\n Title=\"GraphQL Console\"\n Subtitle=\"Run queries against the connected MJ API\">\n <div meta>\n @if (ApiUrl) {\n <span class=\"gc-endpoint-meta\">\n <i class=\"fa-solid fa-plug\" aria-hidden=\"true\"></i>\n <code class=\"gc-endpoint\">{{ ApiUrl }}</code>\n </span>\n }\n </div>\n <div actions>\n <button mjButton\n variant=\"secondary\"\n size=\"sm\"\n [toggleable]=\"true\"\n [(selected)]=\"ShowHistory\"\n title=\"Toggle history sidebar\">\n <i class=\"fa-solid fa-clock-rotate-left\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">History</span>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnCopyAsCurl()\" title=\"Copy as cURL command\">\n <i class=\"fa-solid fa-terminal\" aria-hidden=\"true\"></i> <span class=\"mj-action-label\">Copy cURL</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"gc-body\">\n @if (ShowHistory) {\n <aside class=\"gc-sidebar\" [style.width.px]=\"SidebarWidthPx\">\n <div class=\"gc-sidebar-tabs\">\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'history'\"\n (click)=\"OnSidebarTabChange('history')\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i> History\n </button>\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'entities'\"\n (click)=\"OnSidebarTabChange('entities')\">\n <i class=\"fa-solid fa-table-list\"></i> Entities\n </button>\n <button type=\"button\"\n class=\"gc-sidebar-tab\"\n [class.gc-sidebar-tab--active]=\"SidebarTab === 'schema'\"\n (click)=\"OnSidebarTabChange('schema')\">\n <i class=\"fa-solid fa-sitemap\"></i> Schema\n </button>\n </div>\n\n @if (SidebarTab === 'history') {\n <div class=\"gc-history-head\">\n <span>{{ History.length }} {{ History.length === 1 ? 'entry' : 'entries' }}</span>\n <button class=\"gc-history-clear\"\n type=\"button\"\n (click)=\"OnClearHistory()\"\n title=\"Clear non-favorite history\">\n <i class=\"fa-solid fa-broom\"></i>\n </button>\n </div>\n @if (History.length === 0) {\n <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>·</span>\n <span>{{ h.durationMs }}ms</span>\n }\n </div>\n </button>\n }\n </div>\n }\n } @else if (SidebarTab === 'entities') {\n <div class=\"gc-ent-toolbar\">\n <div class=\"gc-ent-search-wrap\">\n <i class=\"fa-solid fa-search gc-ent-search-icon\"></i>\n <input type=\"search\"\n class=\"gc-ent-search\"\n placeholder=\"Search entities…\"\n [(ngModel)]=\"EntitiesSearch\" />\n </div>\n @if (KnownSchemas.length > 1) {\n <select class=\"gc-ent-schema\" [(ngModel)]=\"EntitySchemaFilter\">\n <option value=\"\">All schemas ({{ KnownSchemas.length }})</option>\n @for (s of KnownSchemas; track s) {\n <option [value]=\"s\">{{ s }}</option>\n }\n </select>\n }\n </div>\n <div class=\"gc-ent-meta\">\n <span>{{ FilteredEntities.length }} of {{ Entities.length }}</span>\n <span class=\"gc-ent-hint\">Click an entity to see operations</span>\n </div>\n <div class=\"gc-ent-list\">\n @for (item of FilteredEntities; track TrackByEntity($index, item)) {\n <div class=\"gc-ent-card\" [class.gc-ent-card--expanded]=\"item.expanded\">\n <button type=\"button\"\n class=\"gc-ent-row\"\n (click)=\"ToggleEntity(item)\">\n <i class=\"fa-solid fa-chevron-right gc-ent-chev\"\n [class.gc-ent-chev--down]=\"item.expanded\"></i>\n <div class=\"gc-ent-info\">\n <div class=\"gc-ent-name\">{{ item.info.Name }}</div>\n <div class=\"gc-ent-meta-row\">\n <code class=\"gc-ent-typename\">{{ item.typeName }}</code>\n <span class=\"gc-ent-schema-badge\">{{ item.schema }}</span>\n </div>\n </div>\n </button>\n @if (item.expanded) {\n <div class=\"gc-ent-actions\">\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--read\"\n (click)=\"OnEntityOp(item, 'view', $event)\"\n title=\"Insert a Run View template (Shift-click to append)\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Run view\n </button>\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--read\"\n (click)=\"OnEntityOp(item, 'byId', $event)\"\n title=\"Fetch a single record by ID (Shift-click to append)\">\n <i class=\"fa-solid fa-fingerprint\"></i>\n Get by ID\n </button>\n @if (item.info.AllowCreateAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--write\"\n (click)=\"OnEntityOp(item, 'create', $event)\"\n title=\"Create a new record (Shift-click to append)\">\n <i class=\"fa-solid fa-plus\"></i>\n Create\n </button>\n }\n @if (item.info.AllowUpdateAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--write\"\n (click)=\"OnEntityOp(item, 'update', $event)\"\n title=\"Update an existing record (Shift-click to append)\">\n <i class=\"fa-solid fa-pen\"></i>\n Update\n </button>\n }\n @if (item.info.AllowDeleteAPI) {\n <button type=\"button\" class=\"gc-ent-op gc-ent-op--danger\"\n (click)=\"OnEntityOp(item, 'delete', $event)\"\n title=\"Delete a record (Shift-click to append)\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n @if (item.info.Description) {\n <div class=\"gc-ent-desc\">{{ item.info.Description }}</div>\n }\n }\n </div>\n }\n @if (FilteredEntities.length === 0) {\n <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…\"\n [(ngModel)]=\"SchemaSearch\" />\n </div>\n <button class=\"gc-schema-reload\"\n type=\"button\"\n (click)=\"OnReloadSchema()\"\n [disabled]=\"SchemaLoading\"\n title=\"Reload schema\">\n <i class=\"fa-solid\" [class.fa-rotate]=\"!SchemaLoading\" [class.fa-spinner]=\"SchemaLoading\" [class.fa-spin]=\"SchemaLoading\"></i>\n </button>\n </div>\n\n @if (Operations.length > 0) {\n <div class=\"gc-schema-kinds\">\n <button type=\"button\"\n class=\"gc-schema-kind\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'all'\"\n (click)=\"SchemaKindFilter = 'all'\">\n All <span>{{ OperationCounts.all }}</span>\n </button>\n <button type=\"button\"\n class=\"gc-schema-kind gc-schema-kind--query\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'query'\"\n (click)=\"SchemaKindFilter = 'query'\">\n <i class=\"fa-solid fa-magnifying-glass\"></i> Query <span>{{ OperationCounts.query }}</span>\n </button>\n <button type=\"button\"\n class=\"gc-schema-kind gc-schema-kind--mutation\"\n [class.gc-schema-kind--active]=\"SchemaKindFilter === 'mutation'\"\n (click)=\"SchemaKindFilter = 'mutation'\">\n <i class=\"fa-solid fa-pen\"></i> Mutation <span>{{ OperationCounts.mutation }}</span>\n </button>\n </div>\n }\n\n @if (SchemaLoading) {\n <div class=\"gc-schema-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Introspecting schema…</span>\n </div>\n } @else if (SchemaIntrospectionDisabled) {\n <div class=\"gc-schema-state gc-schema-disabled\">\n <i class=\"fa-solid fa-lock\"></i>\n <div class=\"gc-schema-disabled-title\">Introspection disabled</div>\n <div class=\"gc-schema-disabled-body\">\n This server has GraphQL introspection turned off (typical in production). Schema browsing isn't available — write queries directly in the editor, or use the History tab to revisit previous queries.\n </div>\n </div>\n } @else if (SchemaError) {\n <div class=\"gc-schema-state gc-schema-state--err\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div class=\"gc-schema-err-title\">Couldn't load schema</div>\n <div class=\"gc-schema-err-body\">{{ SchemaError }}</div>\n </div>\n } @else if (FilteredOperations.length === 0) {\n <div class=\"gc-schema-state\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No operations match.</span>\n </div>\n } @else {\n <div class=\"gc-schema-list\">\n @for (op of FilteredOperations; track TrackByOp($index, op)) {\n <button type=\"button\"\n class=\"gc-schema-op\"\n [class.gc-schema-op--mutation]=\"op.kind === 'mutation'\"\n (click)=\"OnInsertOperation(op, $event)\"\n [title]=\"(op.description || ('Insert ' + op.kind + ' template')) + ' · Shift-click to append'\">\n <div class=\"gc-schema-op-head\">\n <span class=\"gc-schema-op-kind\">{{ op.kind }}</span>\n <span class=\"gc-schema-op-name\">{{ op.name }}</span>\n </div>\n @if (op.argSummary) {\n <div class=\"gc-schema-op-args\">({{ op.argSummary }})</div>\n }\n <div class=\"gc-schema-op-return\">\n <i class=\"fa-solid fa-arrow-right\"></i> {{ op.returnSummary }}\n </div>\n @if (op.description) {\n <div class=\"gc-schema-op-desc\">{{ op.description }}</div>\n }\n </button>\n }\n </div>\n }\n }\n </aside>\n <div class=\"gc-splitter gc-splitter--vert\"\n (mousedown)=\"OnSplitterDown($event, 'sidebar')\"\n title=\"Drag to resize sidebar\"></div>\n }\n\n <div class=\"gc-main\">\n <div class=\"gc-editor-wrap\" [style.flex]=\"'0 0 ' + EditorHeightPct + '%'\">\n <div class=\"gc-editor-head\">\n <span class=\"gc-editor-label\">Query</span>\n <span class=\"gc-editor-hint\">⌘/Ctrl+Enter to run · Shift+click an entity/op to append</span>\n <button class=\"gc-mini-btn\" type=\"button\" (click)=\"OnFormatQuery()\" title=\"Tidy whitespace\">\n <i class=\"fa-solid fa-broom\"></i> Tidy\n </button>\n <button class=\"gc-mini-btn gc-mini-btn--danger\" type=\"button\" (click)=\"OnClearQuery()\" title=\"Clear editor\">\n <i class=\"fa-solid fa-eraser\"></i> Clear\n </button>\n </div>\n <mj-code-editor\n class=\"gc-editor\"\n [(ngModel)]=\"Query\"\n [language]=\"'graphql'\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter your GraphQL query…\">\n </mj-code-editor>\n </div>\n\n <div class=\"gc-splitter gc-splitter--horiz\"\n (mousedown)=\"OnSplitterDown($event, 'editor')\"\n title=\"Drag to resize editor / response\"></div>\n\n <div class=\"gc-vars-wrap\">\n <button class=\"gc-vars-toggle\" type=\"button\" (click)=\"ToggleVariables()\">\n <i class=\"fa-solid fa-chevron-right gc-vars-chev\" [class.gc-vars-chev--down]=\"ShowVariables\"></i>\n Variables\n @if (Variables && Variables.trim() !== '{}' && Variables.trim() !== '') {\n <span class=\"gc-vars-pill\">configured</span>\n }\n </button>\n @if (ShowVariables) {\n <mj-code-editor\n class=\"gc-editor gc-editor--vars\"\n [(ngModel)]=\"Variables\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n placeholder=\"{}\">\n </mj-code-editor>\n }\n </div>\n\n <div class=\"gc-run-bar\">\n <button class=\"gc-run-btn\"\n type=\"button\"\n [disabled]=\"Running\"\n (click)=\"OnRun()\">\n @if (Running) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running…\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run\n }\n </button>\n @if (ResponseStatus !== 'idle') {\n <div class=\"gc-run-meta\">\n @if (ResponseStatus === 'ok') {\n <span class=\"gc-status-badge gc-status-badge--ok\">\n <i class=\"fa-solid fa-circle-check\"></i> 200 OK\n </span>\n } @else {\n <span class=\"gc-status-badge gc-status-badge--err\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error\n </span>\n }\n @if (ResponseDurationMs != null) {\n <span class=\"gc-meta-pill\"><i class=\"fa-regular fa-clock\"></i> {{ ResponseDurationMs }}ms</span>\n }\n @if (ResponseSizeBytes != null) {\n <span class=\"gc-meta-pill\"><i class=\"fa-solid fa-database\"></i> {{ FormattedSize }}</span>\n }\n </div>\n }\n <span class=\"gc-spacer\"></span>\n @if (ResponseJson) {\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopyResponse()\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n }\n </div>\n\n <div class=\"gc-response-wrap\">\n <div class=\"gc-response-head\">\n <span class=\"gc-editor-label\">Response</span>\n </div>\n @if (ErrorMessage && !ResponseJson) {\n <div class=\"gc-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n } @else if (ResponseJson) {\n @if (ErrorMessage) {\n <div class=\"gc-error gc-error--inline\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n <pre class=\"gc-response\"><code>{{ ResponseJson }}</code></pre>\n } @else {\n <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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"grid-width-lab.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/grid-width-lab.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,kCAAkC,CAAC;;AAEvF;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAOa,qBAAsB,SAAQ,qBAAsB,YAAW,MAAM;IAiBlE,OAAO,CAAC,GAAG;IAhBvB;;;;OAIG;IACH,SAAgB,UAAU,cAAc;IAEjC,SAAS,UAAQ;IACjB,gBAAgB,UAAS;IACzB,QAAQ,UAAS;IAEjB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,OAAO,EAAE,gBAAgB,EAAE,CAAM;IACjC,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAErB,GAAG,EAAE,iBAAiB;IAIpB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAEtD,QAAQ,IAAI,IAAI;IAKvB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,YAAY;IASpB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAUf;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgB5B,gGAAgG;IAChG,IAAW,gBAAgB,IAAI,OAAO,CAGrC;IAEM,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAK5B,cAAc,IAAI,IAAI;yCAvGpB,qBAAqB;2CAArB,qBAAqB;CA2GjC"}
1
+ {"version":3,"file":"grid-width-lab.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/grid-width-lab.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,kCAAkC,CAAC;;AAEvF;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAOa,qBAAsB,SAAQ,qBAAsB,YAAW,MAAM;IAiBlE,OAAO,CAAC,GAAG;IAhBvB;;;;OAIG;IACH,SAAgB,UAAU,cAAc;IAEjC,SAAS,UAAQ;IACjB,gBAAgB,UAAS;IACzB,QAAQ,UAAS;IAEjB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,OAAO,EAAE,gBAAgB,EAAE,CAAM;IACjC,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAErB,GAAG,EAAE,iBAAiB;IAIpB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE7C,QAAQ,IAAI,IAAI;IAMhC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,YAAY;IASpB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAUf;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgB5B,gGAAgG;IAChG,IAAW,gBAAgB,IAAI,OAAO,CAGrC;IAEM,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAK5B,cAAc,IAAI,IAAI;yCAxGpB,qBAAqB;2CAArB,qBAAqB;CA4GjC"}
@@ -88,6 +88,7 @@ let GridWidthLabComponent = class GridWidthLabComponent extends BaseResourceComp
88
88
  async GetResourceDisplayName() { return 'Grid Width Lab'; }
89
89
  async GetResourceIconClass() { return 'fa-solid fa-arrows-left-right-to-line'; }
90
90
  ngOnInit() {
91
+ super.ngOnInit();
91
92
  this.rebuild();
92
93
  this.NotifyLoadComplete();
93
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grid-width-lab.component.js","sourceRoot":"","sources":["../../src/DevTools/grid-width-lab.component.ts","../../src/DevTools/grid-width-lab.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { RunViewParams } from '@memberjunction/core';\nimport { GridColumnConfig, computeFieldsList } from '@memberjunction/ng-entity-viewer';\n\n/**\n * Grid Width Lab — a live fixture for `<mj-entity-data-grid>`'s width + column contract.\n *\n * This exists because that contract is public API with **no in-tree consumer**: `[FillWidth]`,\n * `width: 'auto'` + `maxWidth`, and the host-`[Columns]` precedence rules are all exercised only by\n * a downstream app, so a regression in any of them would ship silently. Every control below maps to\n * a specific failure that has actually occurred, and each one is *silent* in production — a column\n * that renders but never fetched, a declared width that stops applying after a filter click, a table\n * that stops short of its card edge. Making them visible in one place is the whole point.\n *\n * The Fields readout is the important half. Most of what this contract gets wrong is invisible in\n * the rendered grid — the query is where the damage shows — so the panel prints the exact array\n * `computeFieldsList` hands to RunView for the current column set.\n *\n * 🚨 SAFETY BOUNDARY: deliberately UNWIRED from agent context and client tools, on the same\n * reasoning as the GraphQL Console — this is a developer fixture, not a data surface, and its state\n * (a hardcoded entity and some layout toggles) is meaningless to an agent. It reads one always-\n * present metadata entity and mutates nothing.\n */\n@RegisterClass(BaseResourceComponent, 'GridWidthLabInspector')\n@Component({\n standalone: false,\n selector: 'mj-grid-width-lab',\n templateUrl: './grid-width-lab.component.html',\n styleUrls: ['./inspector-shared.css', './grid-width-lab.component.css']\n})\nexport class GridWidthLabComponent extends BaseResourceComponent implements OnInit {\n /**\n * `Entities` — the one entity guaranteed to be populated in every MJ instance, and it happens to\n * carry exactly the field shapes this fixture needs: short codes, and a Description long enough\n * that an uncapped auto-width column visibly misbehaves.\n */\n public readonly EntityName = 'Entities';\n\n public FillWidth = true;\n public ShowHiddenColumn = false;\n public FilterOn = false;\n\n public Params: RunViewParams | null = null;\n public Columns: GridColumnConfig[] = [];\n public FieldsPreview: string[] = [];\n public FieldsError: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Grid Width Lab'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-arrows-left-right-to-line'; }\n\n public ngOnInit(): void {\n this.rebuild();\n this.NotifyLoadComplete();\n }\n\n /**\n * The fixture's column set. Each entry is a probe:\n *\n * - **`name`, deliberately lower-case** where the entity says `Name`. The grid resolves host\n * field names case-insensitively, so the column renders either way — but the fetch used to\n * add the host's spelling to a case-sensitive set already holding the canonical one, putting\n * the same field in the query twice. Watch the Fields readout, not the grid.\n * - **`Description` at `width: 'auto'` with a `maxWidth`.** 'auto' maps to AG Grid flex; the cap\n * is what stops \"fill the row\" becoming one enormous mostly-empty column. Both used to be\n * dropped on the floor despite being public `GridColumnConfig` API.\n * - **`BaseTable`, declared hidden.** Hidden is a display decision — the column stays in the\n * grid's model and can be switched back on, so its data has to be fetched. It used to be\n * excluded from the query, so re-showing it produced a column of empty cells.\n */\n private buildColumns(): GridColumnConfig[] {\n return [\n { field: 'name', title: 'Name (declared lower-case)', width: 220 },\n { field: 'SchemaName', title: 'Schema', width: 150 },\n { field: 'Description', title: 'Description (auto + maxWidth)', width: 'auto', maxWidth: 520 },\n { field: 'BaseTable', title: 'Base Table (starts hidden)', width: 200, visible: this.ShowHiddenColumn },\n ];\n }\n\n /**\n * Rebuild both inputs together. `Params` is re-assigned on every filter change in a real page,\n * which is exactly what used to destroy a host's declared columns — so the filter toggle here\n * deliberately hands the grid a NEW params object each time.\n */\n private rebuild(): void {\n this.Columns = this.buildColumns();\n this.Params = {\n EntityName: this.EntityName,\n ExtraFilter: this.FilterOn ? \"SchemaName = '__mj'\" : '',\n };\n this.refreshFieldsPreview();\n this.cdr.detectChanges();\n }\n\n /**\n * Print what the grid will actually SELECT. Mirrors the grid's own call: every declared column\n * regardless of visibility, resolved against entity metadata.\n */\n private refreshFieldsPreview(): void {\n this.FieldsError = null;\n try {\n const entity = this.ProviderToUse.EntityByName(this.EntityName);\n if (!entity) {\n this.FieldsError = `Entity \"${this.EntityName}\" not found in metadata.`;\n this.FieldsPreview = [];\n return;\n }\n this.FieldsPreview = computeFieldsList(entity, null, this.Columns.map(c => c.field));\n } catch (error) {\n this.FieldsError = error instanceof Error ? error.message : String(error);\n this.FieldsPreview = [];\n }\n }\n\n /** True when any two entries differ only by case — the duplicate-column bug, made checkable. */\n public get HasCaseDuplicate(): boolean {\n const lowered = this.FieldsPreview.map(f => f.toLowerCase());\n return new Set(lowered).size !== lowered.length;\n }\n\n public OnToggleFillWidth(): void {\n this.FillWidth = !this.FillWidth;\n this.cdr.detectChanges();\n }\n\n public OnToggleHiddenColumn(): void {\n this.ShowHiddenColumn = !this.ShowHiddenColumn;\n this.rebuild();\n }\n\n public OnToggleFilter(): void {\n this.FilterOn = !this.FilterOn;\n this.rebuild();\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Grid width lab\"\n Title=\"Grid Width Lab\"\n Subtitle=\"Live fixture for the entity-data-grid width + column contract\">\n <div actions>\n <button mjButton\n [variant]=\"FillWidth ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnToggleFillWidth()\"\n [attr.aria-pressed]=\"FillWidth\"\n title=\"Append the inert trailing filler column\">\n <i class=\"fa-solid fa-arrows-left-right-to-line\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">FillWidth {{ FillWidth ? 'on' : 'off' }}</span>\n </button>\n <button mjButton\n [variant]=\"ShowHiddenColumn ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnToggleHiddenColumn()\"\n [attr.aria-pressed]=\"ShowHiddenColumn\"\n title=\"Re-show the column declared visible:false\">\n <i class=\"fa-solid fa-eye\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">{{ ShowHiddenColumn ? 'Hide' : 'Show' }} hidden column</span>\n </button>\n <button mjButton\n [variant]=\"FilterOn ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnToggleFilter()\"\n [attr.aria-pressed]=\"FilterOn\"\n title=\"Re-assign Params — the churn that used to wipe declared columns\">\n <i class=\"fa-solid fa-filter\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">Filter {{ FilterOn ? 'on' : 'off' }}</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"mj-inspector__content\">\n <!-- What the grid will SELECT. Most of this contract's failures are invisible in the\n rendered table and only show up in the query. -->\n <div class=\"gwl-fields\">\n <div class=\"gwl-fields__head\">\n <h4 class=\"gwl-fields__title\">Fields sent to RunView</h4>\n @if (HasCaseDuplicate) {\n <span class=\"gwl-flag gwl-flag--bad\">\n <i class=\"fa-solid fa-triangle-exclamation\" aria-hidden=\"true\"></i>\n Same field requested twice under different casing\n </span>\n } @else {\n <span class=\"gwl-flag gwl-flag--ok\">\n <i class=\"fa-solid fa-check\" aria-hidden=\"true\"></i>\n No case-duplicate fields\n </span>\n }\n </div>\n @if (FieldsError) {\n <mj-alert Variant=\"error\" [Message]=\"FieldsError\"></mj-alert>\n } @else {\n <div class=\"gwl-fields__list\">\n @for (f of FieldsPreview; track f) {\n <code class=\"gwl-field\">{{ f }}</code>\n }\n </div>\n }\n <p class=\"gwl-note\">\n The Name column is declared as <code>name</code> while the entity spells it\n <code>Name</code>. Both should resolve to one <code>Name</code> entry above.\n <code>BaseTable</code> should be present whether or not its column is currently shown —\n that is what lets it re-appear with data rather than empty cells.\n </p>\n </div>\n\n <div class=\"gwl-grid\">\n <mj-entity-data-grid\n [Params]=\"Params\"\n [Columns]=\"Columns\"\n [FillWidth]=\"FillWidth\">\n </mj-entity-data-grid>\n </div>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"grid-width-lab.component.js","sourceRoot":"","sources":["../../src/DevTools/grid-width-lab.component.ts","../../src/DevTools/grid-width-lab.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { RunViewParams } from '@memberjunction/core';\nimport { GridColumnConfig, computeFieldsList } from '@memberjunction/ng-entity-viewer';\n\n/**\n * Grid Width Lab — a live fixture for `<mj-entity-data-grid>`'s width + column contract.\n *\n * This exists because that contract is public API with **no in-tree consumer**: `[FillWidth]`,\n * `width: 'auto'` + `maxWidth`, and the host-`[Columns]` precedence rules are all exercised only by\n * a downstream app, so a regression in any of them would ship silently. Every control below maps to\n * a specific failure that has actually occurred, and each one is *silent* in production — a column\n * that renders but never fetched, a declared width that stops applying after a filter click, a table\n * that stops short of its card edge. Making them visible in one place is the whole point.\n *\n * The Fields readout is the important half. Most of what this contract gets wrong is invisible in\n * the rendered grid — the query is where the damage shows — so the panel prints the exact array\n * `computeFieldsList` hands to RunView for the current column set.\n *\n * 🚨 SAFETY BOUNDARY: deliberately UNWIRED from agent context and client tools, on the same\n * reasoning as the GraphQL Console — this is a developer fixture, not a data surface, and its state\n * (a hardcoded entity and some layout toggles) is meaningless to an agent. It reads one always-\n * present metadata entity and mutates nothing.\n */\n@RegisterClass(BaseResourceComponent, 'GridWidthLabInspector')\n@Component({\n standalone: false,\n selector: 'mj-grid-width-lab',\n templateUrl: './grid-width-lab.component.html',\n styleUrls: ['./inspector-shared.css', './grid-width-lab.component.css']\n})\nexport class GridWidthLabComponent extends BaseResourceComponent implements OnInit {\n /**\n * `Entities` — the one entity guaranteed to be populated in every MJ instance, and it happens to\n * carry exactly the field shapes this fixture needs: short codes, and a Description long enough\n * that an uncapped auto-width column visibly misbehaves.\n */\n public readonly EntityName = 'Entities';\n\n public FillWidth = true;\n public ShowHiddenColumn = false;\n public FilterOn = false;\n\n public Params: RunViewParams | null = null;\n public Columns: GridColumnConfig[] = [];\n public FieldsPreview: string[] = [];\n public FieldsError: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Grid Width Lab'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-arrows-left-right-to-line'; }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.rebuild();\n this.NotifyLoadComplete();\n }\n\n /**\n * The fixture's column set. Each entry is a probe:\n *\n * - **`name`, deliberately lower-case** where the entity says `Name`. The grid resolves host\n * field names case-insensitively, so the column renders either way — but the fetch used to\n * add the host's spelling to a case-sensitive set already holding the canonical one, putting\n * the same field in the query twice. Watch the Fields readout, not the grid.\n * - **`Description` at `width: 'auto'` with a `maxWidth`.** 'auto' maps to AG Grid flex; the cap\n * is what stops \"fill the row\" becoming one enormous mostly-empty column. Both used to be\n * dropped on the floor despite being public `GridColumnConfig` API.\n * - **`BaseTable`, declared hidden.** Hidden is a display decision — the column stays in the\n * grid's model and can be switched back on, so its data has to be fetched. It used to be\n * excluded from the query, so re-showing it produced a column of empty cells.\n */\n private buildColumns(): GridColumnConfig[] {\n return [\n { field: 'name', title: 'Name (declared lower-case)', width: 220 },\n { field: 'SchemaName', title: 'Schema', width: 150 },\n { field: 'Description', title: 'Description (auto + maxWidth)', width: 'auto', maxWidth: 520 },\n { field: 'BaseTable', title: 'Base Table (starts hidden)', width: 200, visible: this.ShowHiddenColumn },\n ];\n }\n\n /**\n * Rebuild both inputs together. `Params` is re-assigned on every filter change in a real page,\n * which is exactly what used to destroy a host's declared columns — so the filter toggle here\n * deliberately hands the grid a NEW params object each time.\n */\n private rebuild(): void {\n this.Columns = this.buildColumns();\n this.Params = {\n EntityName: this.EntityName,\n ExtraFilter: this.FilterOn ? \"SchemaName = '__mj'\" : '',\n };\n this.refreshFieldsPreview();\n this.cdr.detectChanges();\n }\n\n /**\n * Print what the grid will actually SELECT. Mirrors the grid's own call: every declared column\n * regardless of visibility, resolved against entity metadata.\n */\n private refreshFieldsPreview(): void {\n this.FieldsError = null;\n try {\n const entity = this.ProviderToUse.EntityByName(this.EntityName);\n if (!entity) {\n this.FieldsError = `Entity \"${this.EntityName}\" not found in metadata.`;\n this.FieldsPreview = [];\n return;\n }\n this.FieldsPreview = computeFieldsList(entity, null, this.Columns.map(c => c.field));\n } catch (error) {\n this.FieldsError = error instanceof Error ? error.message : String(error);\n this.FieldsPreview = [];\n }\n }\n\n /** True when any two entries differ only by case — the duplicate-column bug, made checkable. */\n public get HasCaseDuplicate(): boolean {\n const lowered = this.FieldsPreview.map(f => f.toLowerCase());\n return new Set(lowered).size !== lowered.length;\n }\n\n public OnToggleFillWidth(): void {\n this.FillWidth = !this.FillWidth;\n this.cdr.detectChanges();\n }\n\n public OnToggleHiddenColumn(): void {\n this.ShowHiddenColumn = !this.ShowHiddenColumn;\n this.rebuild();\n }\n\n public OnToggleFilter(): void {\n this.FilterOn = !this.FilterOn;\n this.rebuild();\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Grid width lab\"\n Title=\"Grid Width Lab\"\n Subtitle=\"Live fixture for the entity-data-grid width + column contract\">\n <div actions>\n <button mjButton\n [variant]=\"FillWidth ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnToggleFillWidth()\"\n [attr.aria-pressed]=\"FillWidth\"\n title=\"Append the inert trailing filler column\">\n <i class=\"fa-solid fa-arrows-left-right-to-line\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">FillWidth {{ FillWidth ? 'on' : 'off' }}</span>\n </button>\n <button mjButton\n [variant]=\"ShowHiddenColumn ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnToggleHiddenColumn()\"\n [attr.aria-pressed]=\"ShowHiddenColumn\"\n title=\"Re-show the column declared visible:false\">\n <i class=\"fa-solid fa-eye\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">{{ ShowHiddenColumn ? 'Hide' : 'Show' }} hidden column</span>\n </button>\n <button mjButton\n [variant]=\"FilterOn ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnToggleFilter()\"\n [attr.aria-pressed]=\"FilterOn\"\n title=\"Re-assign Params — the churn that used to wipe declared columns\">\n <i class=\"fa-solid fa-filter\" aria-hidden=\"true\"></i>\n <span class=\"mj-action-label\">Filter {{ FilterOn ? 'on' : 'off' }}</span>\n </button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"mj-inspector__content\">\n <!-- What the grid will SELECT. Most of this contract's failures are invisible in the\n rendered table and only show up in the query. -->\n <div class=\"gwl-fields\">\n <div class=\"gwl-fields__head\">\n <h4 class=\"gwl-fields__title\">Fields sent to RunView</h4>\n @if (HasCaseDuplicate) {\n <span class=\"gwl-flag gwl-flag--bad\">\n <i class=\"fa-solid fa-triangle-exclamation\" aria-hidden=\"true\"></i>\n Same field requested twice under different casing\n </span>\n } @else {\n <span class=\"gwl-flag gwl-flag--ok\">\n <i class=\"fa-solid fa-check\" aria-hidden=\"true\"></i>\n No case-duplicate fields\n </span>\n }\n </div>\n @if (FieldsError) {\n <mj-alert Variant=\"error\" [Message]=\"FieldsError\"></mj-alert>\n } @else {\n <div class=\"gwl-fields__list\">\n @for (f of FieldsPreview; track f) {\n <code class=\"gwl-field\">{{ f }}</code>\n }\n </div>\n }\n <p class=\"gwl-note\">\n The Name column is declared as <code>name</code> while the entity spells it\n <code>Name</code>. Both should resolve to one <code>Name</code> entry above.\n <code>BaseTable</code> should be present whether or not its column is currently shown —\n that is what lets it re-appear with data rather than empty cells.\n </p>\n </div>\n\n <div class=\"gwl-grid\">\n <mj-entity-data-grid\n [Params]=\"Params\"\n [Columns]=\"Columns\"\n [FillWidth]=\"FillWidth\">\n </mj-entity-data-grid>\n </div>\n </div>\n</div>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"layout-inspector.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/layout-inspector.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;;AAKjG,UAAU,aAAa;IACnB,EAAE,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAOa,wBAAyB,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAavG,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IAbX,QAAQ,EAAE,aAAa,EAAE,CAG9B;IAEK,aAAa,EAAE,WAAW,GAAG,QAAQ,CAAe;IACpD,UAAU,SAAQ;IAClB,aAAa,UAAS;IACtB,aAAa,OAAc;gBAGtB,GAAG,EAAE,iBAAiB,EACtB,SAAS,EAAE,qBAAqB,EAChC,MAAM,EAAE,mBAAmB;IAKhC,QAAQ,IAAI,IAAI;IAOhB,eAAe,IAAI,IAAI;IAOd,WAAW,IAAI,IAAI;IAKb,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE7D,2EAA2E;IAC3E,IAAW,UAAU,IAAI,SAAS,EAAE,CAMnC;IAED,0CAA0C;IAC1C,IAAW,UAAU,IAAI,SAAS,EAAE,CAEnC;IAED,sEAAsE;IAC/D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOrC,2CAA2C;IACpC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAO5C,OAAO,IAAI,IAAI;IAOtB,uCAAuC;IAChC,OAAO,IAAI,IAAI;IAIT,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,UAAU,IAAI,IAAI;IAWzB,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAID,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;IAkBpB,sEAAsE;IACtE,OAAO,CAAC,mBAAmB;IAW3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAyBhC,uEAAuE;IACvE,OAAO,CAAC,kBAAkB;yCAtMjB,wBAAwB;2CAAxB,wBAAwB;CAsNpC"}
1
+ {"version":3,"file":"layout-inspector.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/layout-inspector.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;;AAKjG,UAAU,aAAa;IACnB,EAAE,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAOa,wBAAyB,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAavG,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IAbX,QAAQ,EAAE,aAAa,EAAE,CAG9B;IAEK,aAAa,EAAE,WAAW,GAAG,QAAQ,CAAe;IACpD,UAAU,SAAQ;IAClB,aAAa,UAAS;IACtB,aAAa,OAAc;gBAGtB,GAAG,EAAE,iBAAiB,EACtB,SAAS,EAAE,qBAAqB,EAChC,MAAM,EAAE,mBAAmB;IAKvB,QAAQ,IAAI,IAAI;IAQzB,eAAe,IAAI,IAAI;IAOd,WAAW,IAAI,IAAI;IAKb,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE7D,2EAA2E;IAC3E,IAAW,UAAU,IAAI,SAAS,EAAE,CAMnC;IAED,0CAA0C;IAC1C,IAAW,UAAU,IAAI,SAAS,EAAE,CAEnC;IAED,sEAAsE;IAC/D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOrC,2CAA2C;IACpC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAO5C,OAAO,IAAI,IAAI;IAOtB,uCAAuC;IAChC,OAAO,IAAI,IAAI;IAIT,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,UAAU,IAAI,IAAI;IAWzB,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAID,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;IAkBpB,sEAAsE;IACtE,OAAO,CAAC,mBAAmB;IAW3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAyBhC,uEAAuE;IACvE,OAAO,CAAC,kBAAkB;yCAvMjB,wBAAwB;2CAAxB,wBAAwB;CAuNpC"}
@@ -39,6 +39,7 @@ let LayoutInspectorComponent = class LayoutInspectorComponent extends BaseResour
39
39
  this.layout = layout;
40
40
  }
41
41
  ngOnInit() {
42
+ super.ngOnInit();
42
43
  const p = DevToolsPrefs.Get('layoutInspector');
43
44
  if (p?.activeSection)
44
45
  this.ActiveSection = p.activeSection;