@memberjunction/ng-dashboards 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +24 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +198 -111
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/models/model-management.component.d.ts +23 -0
  6. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  7. package/dist/AI/components/models/model-management.component.js +189 -83
  8. package/dist/AI/components/models/model-management.component.js.map +1 -1
  9. package/dist/AI/components/prompts/prompt-management.component.d.ts +23 -0
  10. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  11. package/dist/AI/components/prompts/prompt-management.component.js +135 -30
  12. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  13. package/dist/APIKeys/api-applications-panel.component.d.ts +5 -3
  14. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  15. package/dist/APIKeys/api-applications-panel.component.js +50 -51
  16. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  17. package/dist/APIKeys/api-key-create-dialog.component.d.ts +4 -3
  18. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  19. package/dist/APIKeys/api-key-create-dialog.component.js +119 -94
  20. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  21. package/dist/APIKeys/api-key-edit-panel.component.d.ts +1 -1
  22. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  23. package/dist/APIKeys/api-key-edit-panel.component.js +100 -87
  24. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  25. package/dist/APIKeys/api-key-list.component.d.ts +2 -1
  26. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  27. package/dist/APIKeys/api-key-list.component.js +24 -20
  28. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  29. package/dist/APIKeys/api-keys-resource.component.d.ts +6 -4
  30. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  31. package/dist/APIKeys/api-keys-resource.component.js +42 -57
  32. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  33. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts +22 -0
  34. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -0
  35. package/dist/Actions/components/explorer/action-breadcrumb.component.js +139 -0
  36. package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -0
  37. package/dist/Actions/components/explorer/action-card.component.d.ts +39 -0
  38. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -0
  39. package/dist/Actions/components/explorer/action-card.component.js +410 -0
  40. package/dist/Actions/components/explorer/action-card.component.js.map +1 -0
  41. package/dist/Actions/components/explorer/action-explorer.component.d.ts +62 -0
  42. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -0
  43. package/dist/Actions/components/explorer/action-explorer.component.js +527 -0
  44. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -0
  45. package/dist/Actions/components/explorer/action-list-item.component.d.ts +24 -0
  46. package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -0
  47. package/dist/Actions/components/explorer/action-list-item.component.js +210 -0
  48. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -0
  49. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +63 -0
  50. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -0
  51. package/dist/Actions/components/explorer/action-toolbar.component.js +483 -0
  52. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -0
  53. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts +57 -0
  54. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -0
  55. package/dist/Actions/components/explorer/action-tree-panel.component.js +454 -0
  56. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -0
  57. package/dist/Actions/components/explorer/index.d.ts +10 -0
  58. package/dist/Actions/components/explorer/index.d.ts.map +1 -0
  59. package/dist/Actions/components/explorer/index.js +14 -0
  60. package/dist/Actions/components/explorer/index.js.map +1 -0
  61. package/dist/Actions/components/explorer/new-action-panel.component.d.ts +49 -0
  62. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -0
  63. package/dist/Actions/components/explorer/new-action-panel.component.js +359 -0
  64. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -0
  65. package/dist/Actions/components/explorer/new-category-panel.component.d.ts +37 -0
  66. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -0
  67. package/dist/Actions/components/explorer/new-category-panel.component.js +282 -0
  68. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -0
  69. package/dist/Actions/index.d.ts +3 -0
  70. package/dist/Actions/index.d.ts.map +1 -1
  71. package/dist/Actions/index.js +5 -0
  72. package/dist/Actions/index.js.map +1 -1
  73. package/dist/Actions/services/action-explorer-state.service.d.ts +104 -0
  74. package/dist/Actions/services/action-explorer-state.service.d.ts.map +1 -0
  75. package/dist/Actions/services/action-explorer-state.service.js +352 -0
  76. package/dist/Actions/services/action-explorer-state.service.js.map +1 -0
  77. package/dist/Communication/communication-dashboard.component.d.ts +2 -6
  78. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  79. package/dist/Communication/communication-dashboard.component.js +142 -93
  80. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  81. package/dist/Communication/communication-logs-resource.component.d.ts +10 -4
  82. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  83. package/dist/Communication/communication-logs-resource.component.js +253 -121
  84. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  85. package/dist/Communication/communication-monitor-resource.component.d.ts +38 -3
  86. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  87. package/dist/Communication/communication-monitor-resource.component.js +431 -157
  88. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  89. package/dist/Communication/communication-providers-resource.component.d.ts +16 -5
  90. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  91. package/dist/Communication/communication-providers-resource.component.js +229 -118
  92. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  93. package/dist/Communication/communication-runs-resource.component.d.ts +4 -2
  94. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  95. package/dist/Communication/communication-runs-resource.component.js +155 -149
  96. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  97. package/dist/Communication/communication-templates-resource.component.d.ts +43 -0
  98. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -0
  99. package/dist/Communication/communication-templates-resource.component.js +371 -0
  100. package/dist/Communication/communication-templates-resource.component.js.map +1 -0
  101. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +69 -267
  102. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  103. package/dist/ComponentStudio/component-studio-dashboard.component.js +698 -1802
  104. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  105. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +68 -0
  106. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -0
  107. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +401 -0
  108. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -0
  109. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts +44 -0
  110. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -0
  111. package/dist/ComponentStudio/components/browser/component-browser.component.js +636 -0
  112. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -0
  113. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts +35 -0
  114. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -0
  115. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +380 -0
  116. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -0
  117. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +24 -0
  118. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -0
  119. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +221 -0
  120. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -0
  121. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts +28 -0
  122. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -0
  123. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +263 -0
  124. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -0
  125. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts +34 -0
  126. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -0
  127. package/dist/ComponentStudio/components/editors/spec-editor.component.js +307 -0
  128. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -0
  129. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts +29 -0
  130. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -0
  131. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +159 -0
  132. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -0
  133. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts +20 -0
  134. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -0
  135. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +192 -0
  136. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -0
  137. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +57 -0
  138. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -0
  139. package/dist/ComponentStudio/components/workspace/component-preview.component.js +342 -0
  140. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -0
  141. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts +15 -0
  142. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -0
  143. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +144 -0
  144. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -0
  145. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +203 -0
  146. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -0
  147. package/dist/ComponentStudio/services/component-studio-state.service.js +651 -0
  148. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -0
  149. package/dist/ComponentStudio/services/component-version.service.d.ts +120 -0
  150. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -0
  151. package/dist/ComponentStudio/services/component-version.service.js +394 -0
  152. package/dist/ComponentStudio/services/component-version.service.js.map +1 -0
  153. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +1 -1
  154. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  155. package/dist/Credentials/components/credentials-categories-resource.component.js +1 -1
  156. package/dist/Credentials/components/credentials-list-resource.component.d.ts +1 -1
  157. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  158. package/dist/Credentials/components/credentials-list-resource.component.js +1 -1
  159. package/dist/Credentials/components/credentials-types-resource.component.d.ts +1 -1
  160. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  161. package/dist/Credentials/components/credentials-types-resource.component.js +1 -1
  162. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +2 -2
  163. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +72 -0
  164. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -0
  165. package/dist/MCP/components/mcp-connection-dialog.component.js +529 -0
  166. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -0
  167. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +77 -0
  168. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -0
  169. package/dist/MCP/components/mcp-log-detail-panel.component.js +535 -0
  170. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -0
  171. package/dist/MCP/components/mcp-server-dialog.component.d.ts +77 -0
  172. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -0
  173. package/dist/MCP/components/mcp-server-dialog.component.js +437 -0
  174. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -0
  175. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +271 -0
  176. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -0
  177. package/dist/MCP/components/mcp-test-tool-dialog.component.js +1300 -0
  178. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -0
  179. package/dist/MCP/index.d.ts +11 -0
  180. package/dist/MCP/index.d.ts.map +1 -0
  181. package/dist/MCP/index.js +15 -0
  182. package/dist/MCP/index.js.map +1 -0
  183. package/dist/MCP/mcp-dashboard.component.d.ts +409 -0
  184. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -0
  185. package/dist/MCP/mcp-dashboard.component.js +2486 -0
  186. package/dist/MCP/mcp-dashboard.component.js.map +1 -0
  187. package/dist/MCP/mcp-resource.component.d.ts +20 -0
  188. package/dist/MCP/mcp-resource.component.d.ts.map +1 -0
  189. package/dist/MCP/mcp-resource.component.js +55 -0
  190. package/dist/MCP/mcp-resource.component.js.map +1 -0
  191. package/dist/MCP/mcp.module.d.ts +27 -0
  192. package/dist/MCP/mcp.module.d.ts.map +1 -0
  193. package/dist/MCP/mcp.module.js +122 -0
  194. package/dist/MCP/mcp.module.js.map +1 -0
  195. package/dist/MCP/services/mcp-tools.service.d.ts +109 -0
  196. package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -0
  197. package/dist/MCP/services/mcp-tools.service.js +222 -0
  198. package/dist/MCP/services/mcp-tools.service.js.map +1 -0
  199. package/dist/Scheduling/components/index.d.ts +5 -8
  200. package/dist/Scheduling/components/index.d.ts.map +1 -1
  201. package/dist/Scheduling/components/index.js +6 -9
  202. package/dist/Scheduling/components/index.js.map +1 -1
  203. package/dist/Scheduling/components/job-slideout.component.d.ts +45 -0
  204. package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -0
  205. package/dist/Scheduling/components/job-slideout.component.js +458 -0
  206. package/dist/Scheduling/components/job-slideout.component.js.map +1 -0
  207. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +19 -0
  208. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -0
  209. package/dist/Scheduling/components/scheduling-activity-resource.component.js +51 -0
  210. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -0
  211. package/dist/Scheduling/components/scheduling-activity.component.d.ts +71 -0
  212. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -0
  213. package/dist/Scheduling/components/scheduling-activity.component.js +714 -0
  214. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -0
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +3 -4
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  217. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -7
  218. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  219. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +52 -34
  220. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  221. package/dist/Scheduling/components/scheduling-jobs.component.js +446 -261
  222. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  223. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +19 -0
  224. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -0
  225. package/dist/Scheduling/components/scheduling-overview-resource.component.js +51 -0
  226. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -0
  227. package/dist/Scheduling/components/scheduling-overview.component.d.ts +43 -0
  228. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -0
  229. package/dist/Scheduling/components/scheduling-overview.component.js +595 -0
  230. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -0
  231. package/dist/Scheduling/scheduling-dashboard.component.d.ts +22 -32
  232. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  233. package/dist/Scheduling/scheduling-dashboard.component.js +175 -169
  234. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  235. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +49 -6
  236. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  237. package/dist/Scheduling/services/scheduling-instrumentation.service.js +218 -149
  238. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  239. package/dist/Testing/components/index.d.ts +7 -8
  240. package/dist/Testing/components/index.d.ts.map +1 -1
  241. package/dist/Testing/components/index.js +8 -9
  242. package/dist/Testing/components/index.js.map +1 -1
  243. package/dist/Testing/components/testing-analytics-resource.component.d.ts +0 -4
  244. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  245. package/dist/Testing/components/testing-analytics-resource.component.js +1 -7
  246. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  247. package/dist/Testing/components/testing-analytics.component.d.ts +52 -37
  248. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  249. package/dist/Testing/components/testing-analytics.component.js +1023 -569
  250. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  251. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +16 -0
  252. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -0
  253. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +47 -0
  254. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -0
  255. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +57 -0
  256. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -0
  257. package/dist/Testing/components/testing-dashboard-tab.component.js +649 -0
  258. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -0
  259. package/dist/{Scheduling/components/scheduling-types-resource.component.d.ts → Testing/components/testing-explorer-resource.component.d.ts} +5 -9
  260. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -0
  261. package/dist/Testing/components/testing-explorer-resource.component.js +47 -0
  262. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -0
  263. package/dist/Testing/components/testing-explorer.component.d.ts +193 -0
  264. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -0
  265. package/dist/Testing/components/testing-explorer.component.js +2212 -0
  266. package/dist/Testing/components/testing-explorer.component.js.map +1 -0
  267. package/dist/Testing/components/testing-review-resource.component.d.ts +16 -0
  268. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -0
  269. package/dist/Testing/components/testing-review-resource.component.js +47 -0
  270. package/dist/Testing/components/testing-review-resource.component.js.map +1 -0
  271. package/dist/Testing/components/testing-review.component.d.ts +60 -0
  272. package/dist/Testing/components/testing-review.component.d.ts.map +1 -0
  273. package/dist/Testing/components/testing-review.component.js +985 -0
  274. package/dist/Testing/components/testing-review.component.js.map +1 -0
  275. package/dist/Testing/components/testing-runs-resource.component.d.ts +16 -0
  276. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -0
  277. package/dist/Testing/components/testing-runs-resource.component.js +47 -0
  278. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -0
  279. package/dist/Testing/components/testing-runs.component.d.ts +82 -0
  280. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -0
  281. package/dist/Testing/components/testing-runs.component.js +1067 -0
  282. package/dist/Testing/components/testing-runs.component.js.map +1 -0
  283. package/dist/Testing/testing-dashboard.component.d.ts +12 -15
  284. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  285. package/dist/Testing/testing-dashboard.component.js +46 -68
  286. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  287. package/dist/module.d.ts +121 -104
  288. package/dist/module.d.ts.map +1 -1
  289. package/dist/module.js +185 -93
  290. package/dist/module.js.map +1 -1
  291. package/dist/public-api.d.ts +5 -3
  292. package/dist/public-api.d.ts.map +1 -1
  293. package/dist/public-api.js +23 -16
  294. package/dist/public-api.js.map +1 -1
  295. package/dist/shared/pipes/highlight-search.pipe.d.ts +17 -0
  296. package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -0
  297. package/dist/shared/pipes/highlight-search.pipe.js +40 -0
  298. package/dist/shared/pipes/highlight-search.pipe.js.map +1 -0
  299. package/dist/shared/pipes/index.d.ts +2 -0
  300. package/dist/shared/pipes/index.d.ts.map +1 -0
  301. package/dist/shared/pipes/index.js +2 -0
  302. package/dist/shared/pipes/index.js.map +1 -0
  303. package/dist/shared/shared-pipes.module.d.ts +11 -0
  304. package/dist/shared/shared-pipes.module.d.ts.map +1 -0
  305. package/dist/shared/shared-pipes.module.js +24 -0
  306. package/dist/shared/shared-pipes.module.js.map +1 -0
  307. package/package.json +39 -32
  308. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts +0 -44
  309. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts.map +0 -1
  310. package/dist/Credentials/components/credential-category-edit-panel.component.js +0 -456
  311. package/dist/Credentials/components/credential-category-edit-panel.component.js.map +0 -1
  312. package/dist/Credentials/components/credential-edit-panel.component.d.ts +0 -70
  313. package/dist/Credentials/components/credential-edit-panel.component.d.ts.map +0 -1
  314. package/dist/Credentials/components/credential-edit-panel.component.js +0 -694
  315. package/dist/Credentials/components/credential-edit-panel.component.js.map +0 -1
  316. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts +0 -56
  317. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts.map +0 -1
  318. package/dist/Credentials/components/credential-type-edit-panel.component.js +0 -563
  319. package/dist/Credentials/components/credential-type-edit-panel.component.js.map +0 -1
  320. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +0 -20
  321. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +0 -1
  322. package/dist/Scheduling/components/scheduling-health-resource.component.js +0 -55
  323. package/dist/Scheduling/components/scheduling-health-resource.component.js.map +0 -1
  324. package/dist/Scheduling/components/scheduling-health.component.d.ts +0 -30
  325. package/dist/Scheduling/components/scheduling-health.component.d.ts.map +0 -1
  326. package/dist/Scheduling/components/scheduling-health.component.js +0 -315
  327. package/dist/Scheduling/components/scheduling-health.component.js.map +0 -1
  328. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +0 -20
  329. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +0 -1
  330. package/dist/Scheduling/components/scheduling-history-resource.component.js +0 -55
  331. package/dist/Scheduling/components/scheduling-history-resource.component.js.map +0 -1
  332. package/dist/Scheduling/components/scheduling-history.component.d.ts +0 -48
  333. package/dist/Scheduling/components/scheduling-history.component.d.ts.map +0 -1
  334. package/dist/Scheduling/components/scheduling-history.component.js +0 -377
  335. package/dist/Scheduling/components/scheduling-history.component.js.map +0 -1
  336. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +0 -20
  337. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +0 -1
  338. package/dist/Scheduling/components/scheduling-monitor-resource.component.js +0 -55
  339. package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +0 -1
  340. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +0 -37
  341. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +0 -1
  342. package/dist/Scheduling/components/scheduling-monitoring.component.js +0 -488
  343. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +0 -1
  344. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +0 -1
  345. package/dist/Scheduling/components/scheduling-types-resource.component.js +0 -55
  346. package/dist/Scheduling/components/scheduling-types-resource.component.js.map +0 -1
  347. package/dist/Scheduling/components/scheduling-types.component.d.ts +0 -22
  348. package/dist/Scheduling/components/scheduling-types.component.d.ts.map +0 -1
  349. package/dist/Scheduling/components/scheduling-types.component.js +0 -165
  350. package/dist/Scheduling/components/scheduling-types.component.js.map +0 -1
  351. package/dist/Testing/components/testing-execution-resource.component.d.ts +0 -20
  352. package/dist/Testing/components/testing-execution-resource.component.d.ts.map +0 -1
  353. package/dist/Testing/components/testing-execution-resource.component.js +0 -55
  354. package/dist/Testing/components/testing-execution-resource.component.js.map +0 -1
  355. package/dist/Testing/components/testing-execution.component.d.ts +0 -71
  356. package/dist/Testing/components/testing-execution.component.d.ts.map +0 -1
  357. package/dist/Testing/components/testing-execution.component.js +0 -845
  358. package/dist/Testing/components/testing-execution.component.js.map +0 -1
  359. package/dist/Testing/components/testing-feedback-resource.component.d.ts +0 -20
  360. package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +0 -1
  361. package/dist/Testing/components/testing-feedback-resource.component.js +0 -55
  362. package/dist/Testing/components/testing-feedback-resource.component.js.map +0 -1
  363. package/dist/Testing/components/testing-feedback.component.d.ts +0 -111
  364. package/dist/Testing/components/testing-feedback.component.d.ts.map +0 -1
  365. package/dist/Testing/components/testing-feedback.component.js +0 -1486
  366. package/dist/Testing/components/testing-feedback.component.js.map +0 -1
  367. package/dist/Testing/components/testing-overview-resource.component.d.ts +0 -20
  368. package/dist/Testing/components/testing-overview-resource.component.d.ts.map +0 -1
  369. package/dist/Testing/components/testing-overview-resource.component.js +0 -55
  370. package/dist/Testing/components/testing-overview-resource.component.js.map +0 -1
  371. package/dist/Testing/components/testing-overview.component.d.ts +0 -30
  372. package/dist/Testing/components/testing-overview.component.d.ts.map +0 -1
  373. package/dist/Testing/components/testing-overview.component.js +0 -361
  374. package/dist/Testing/components/testing-overview.component.js.map +0 -1
  375. package/dist/Testing/components/testing-version-comparison.component.d.ts +0 -62
  376. package/dist/Testing/components/testing-version-comparison.component.d.ts.map +0 -1
  377. package/dist/Testing/components/testing-version-comparison.component.js +0 -815
  378. package/dist/Testing/components/testing-version-comparison.component.js.map +0 -1
  379. package/dist/Testing/components/testing-version-resource.component.d.ts +0 -20
  380. package/dist/Testing/components/testing-version-resource.component.d.ts.map +0 -1
  381. package/dist/Testing/components/testing-version-resource.component.js +0 -55
  382. package/dist/Testing/components/testing-version-resource.component.js.map +0 -1
@@ -0,0 +1,342 @@
1
+ import { Component, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { Subject, takeUntil } from 'rxjs';
3
+ import { MJReactComponent } from '@memberjunction/ng-react';
4
+ import { SharedService } from '@memberjunction/ng-shared';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../services/component-studio-state.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@memberjunction/ng-react";
9
+ const _c0 = ["reactComponent"];
10
+ const _forTrack0 = ($index, $item) => $item.Size;
11
+ function ComponentPreviewComponent_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
12
+ const _r1 = i0.ɵɵgetCurrentView();
13
+ i0.ɵɵelementStart(0, "button", 13);
14
+ i0.ɵɵlistener("click", function ComponentPreviewComponent_Conditional_3_Conditional_0_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.StopComponent()); });
15
+ i0.ɵɵelement(1, "i", 14);
16
+ i0.ɵɵelementStart(2, "span");
17
+ i0.ɵɵtext(3, "Stop");
18
+ i0.ɵɵelementEnd()();
19
+ i0.ɵɵelementStart(4, "button", 15);
20
+ i0.ɵɵlistener("click", function ComponentPreviewComponent_Conditional_3_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.RefreshComponent()); });
21
+ i0.ɵɵelement(5, "i", 16);
22
+ i0.ɵɵelementStart(6, "span");
23
+ i0.ɵɵtext(7, "Refresh");
24
+ i0.ɵɵelementEnd()();
25
+ } }
26
+ function ComponentPreviewComponent_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
27
+ const _r3 = i0.ɵɵgetCurrentView();
28
+ i0.ɵɵelementStart(0, "button", 17);
29
+ i0.ɵɵlistener("click", function ComponentPreviewComponent_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.RunSelectedComponent()); });
30
+ i0.ɵɵelement(1, "i", 18);
31
+ i0.ɵɵelementStart(2, "span");
32
+ i0.ɵɵtext(3, "Run");
33
+ i0.ɵɵelementEnd()();
34
+ } }
35
+ function ComponentPreviewComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
36
+ i0.ɵɵtemplate(0, ComponentPreviewComponent_Conditional_3_Conditional_0_Template, 8, 0)(1, ComponentPreviewComponent_Conditional_3_Conditional_1_Template, 4, 0, "button", 12);
37
+ } if (rf & 2) {
38
+ const ctx_r1 = i0.ɵɵnextContext();
39
+ i0.ɵɵconditional(ctx_r1.State.IsRunning ? 0 : 1);
40
+ } }
41
+ function ComponentPreviewComponent_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
42
+ const _r4 = i0.ɵɵgetCurrentView();
43
+ i0.ɵɵelementStart(0, "button", 20);
44
+ i0.ɵɵlistener("click", function ComponentPreviewComponent_Conditional_5_For_2_Template_button_click_0_listener() { const preset_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetViewport(preset_r5.Size)); });
45
+ i0.ɵɵelement(1, "i", 21);
46
+ i0.ɵɵelementEnd();
47
+ } if (rf & 2) {
48
+ const preset_r5 = ctx.$implicit;
49
+ const ctx_r1 = i0.ɵɵnextContext(2);
50
+ i0.ɵɵclassProp("active", ctx_r1.ActiveViewport === preset_r5.Size);
51
+ i0.ɵɵproperty("title", preset_r5.Label);
52
+ i0.ɵɵadvance();
53
+ i0.ɵɵproperty("ngClass", preset_r5.Icon);
54
+ } }
55
+ function ComponentPreviewComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
56
+ i0.ɵɵelementStart(0, "div", 5);
57
+ i0.ɵɵrepeaterCreate(1, ComponentPreviewComponent_Conditional_5_For_2_Template, 2, 4, "button", 19, _forTrack0);
58
+ i0.ɵɵelementEnd();
59
+ } if (rf & 2) {
60
+ const ctx_r1 = i0.ɵɵnextContext();
61
+ i0.ɵɵadvance();
62
+ i0.ɵɵrepeater(ctx_r1.ViewportPresets);
63
+ } }
64
+ function ComponentPreviewComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
65
+ const _r6 = i0.ɵɵgetCurrentView();
66
+ i0.ɵɵelementStart(0, "button", 22);
67
+ i0.ɵɵlistener("click", function ComponentPreviewComponent_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SendErrorToAI()); });
68
+ i0.ɵɵelement(1, "i", 23);
69
+ i0.ɵɵelementStart(2, "span");
70
+ i0.ɵɵtext(3, "Ask AI to Fix");
71
+ i0.ɵɵelementEnd()();
72
+ } }
73
+ function ComponentPreviewComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
74
+ i0.ɵɵelementStart(0, "span", 8);
75
+ i0.ɵɵelement(1, "i", 24);
76
+ i0.ɵɵtext(2);
77
+ i0.ɵɵelementEnd();
78
+ } if (rf & 2) {
79
+ const ctx_r1 = i0.ɵɵnextContext();
80
+ i0.ɵɵadvance(2);
81
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.GetComponentName(), " ");
82
+ } }
83
+ function ComponentPreviewComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
84
+ i0.ɵɵelementStart(0, "div", 10);
85
+ i0.ɵɵelement(1, "i", 25);
86
+ i0.ɵɵelementStart(2, "h3");
87
+ i0.ɵɵtext(3, "Select a component to preview");
88
+ i0.ɵɵelementEnd();
89
+ i0.ɵɵelementStart(4, "p");
90
+ i0.ɵɵtext(5, "Choose a component from the sidebar to see its live preview here.");
91
+ i0.ɵɵelementEnd()();
92
+ } }
93
+ function ComponentPreviewComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
94
+ const _r7 = i0.ɵɵgetCurrentView();
95
+ i0.ɵɵelementStart(0, "div", 11);
96
+ i0.ɵɵelement(1, "i", 26);
97
+ i0.ɵɵelementStart(2, "h3");
98
+ i0.ɵɵtext(3);
99
+ i0.ɵɵelementEnd();
100
+ i0.ɵɵelementStart(4, "p");
101
+ i0.ɵɵtext(5);
102
+ i0.ɵɵelementEnd();
103
+ i0.ɵɵelementStart(6, "button", 27);
104
+ i0.ɵɵlistener("click", function ComponentPreviewComponent_Conditional_11_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.RunSelectedComponent()); });
105
+ i0.ɵɵelement(7, "i", 18);
106
+ i0.ɵɵtext(8, " Run Component ");
107
+ i0.ɵɵelementEnd()();
108
+ } if (rf & 2) {
109
+ const ctx_r1 = i0.ɵɵnextContext();
110
+ i0.ɵɵadvance(3);
111
+ i0.ɵɵtextInterpolate(ctx_r1.GetComponentName());
112
+ i0.ɵɵadvance(2);
113
+ i0.ɵɵtextInterpolate(ctx_r1.GetComponentDescription() || "No description available");
114
+ } }
115
+ function ComponentPreviewComponent_Conditional_12_Conditional_3_Template(rf, ctx) { if (rf & 1) {
116
+ const _r9 = i0.ɵɵgetCurrentView();
117
+ i0.ɵɵelementStart(0, "div", 30)(1, "div", 31)(2, "div", 32);
118
+ i0.ɵɵelement(3, "i", 33);
119
+ i0.ɵɵelementStart(4, "span", 34);
120
+ i0.ɵɵtext(5);
121
+ i0.ɵɵelementEnd()();
122
+ i0.ɵɵelementStart(6, "p", 35);
123
+ i0.ɵɵtext(7);
124
+ i0.ɵɵelementEnd();
125
+ i0.ɵɵelementStart(8, "div", 36)(9, "button", 37);
126
+ i0.ɵɵlistener("click", function ComponentPreviewComponent_Conditional_12_Conditional_3_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.RefreshComponent()); });
127
+ i0.ɵɵelement(10, "i", 16);
128
+ i0.ɵɵtext(11, " Retry ");
129
+ i0.ɵɵelementEnd();
130
+ i0.ɵɵelementStart(12, "button", 38);
131
+ i0.ɵɵlistener("click", function ComponentPreviewComponent_Conditional_12_Conditional_3_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SendErrorToAI()); });
132
+ i0.ɵɵelement(13, "i", 23);
133
+ i0.ɵɵtext(14, " Ask AI to Fix ");
134
+ i0.ɵɵelementEnd()()()();
135
+ } if (rf & 2) {
136
+ const ctx_r1 = i0.ɵɵnextContext(2);
137
+ i0.ɵɵadvance(5);
138
+ i0.ɵɵtextInterpolate(ctx_r1.State.CurrentError.type);
139
+ i0.ɵɵadvance(2);
140
+ i0.ɵɵtextInterpolate(ctx_r1.State.CurrentError.message);
141
+ } }
142
+ function ComponentPreviewComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
143
+ const _r8 = i0.ɵɵgetCurrentView();
144
+ i0.ɵɵelementStart(0, "div", 28)(1, "mj-react-component", 29, 0);
145
+ i0.ɵɵlistener("componentEvent", function ComponentPreviewComponent_Conditional_12_Template_mj_react_component_componentEvent_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnComponentEvent($event)); })("openEntityRecord", function ComponentPreviewComponent_Conditional_12_Template_mj_react_component_openEntityRecord_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnOpenEntityRecord($event)); });
146
+ i0.ɵɵelementEnd()();
147
+ i0.ɵɵtemplate(3, ComponentPreviewComponent_Conditional_12_Conditional_3_Template, 15, 2, "div", 30);
148
+ } if (rf & 2) {
149
+ const ctx_r1 = i0.ɵɵnextContext();
150
+ i0.ɵɵstyleProp("max-width", ctx_r1.GetPreviewContainerMaxWidth());
151
+ i0.ɵɵclassProp("mobile", ctx_r1.ActiveViewport === "mobile")("tablet", ctx_r1.ActiveViewport === "tablet")("desktop", ctx_r1.ActiveViewport === "desktop");
152
+ i0.ɵɵadvance();
153
+ i0.ɵɵproperty("component", ctx_r1.LocalComponentSpec);
154
+ i0.ɵɵadvance(2);
155
+ i0.ɵɵconditional(ctx_r1.State.CurrentError ? 3 : -1);
156
+ } }
157
+ /**
158
+ * Component Preview - TOP section of CENTER panel.
159
+ * Renders the live React component preview with toolbar controls.
160
+ */
161
+ export class ComponentPreviewComponent {
162
+ State;
163
+ cdr;
164
+ ReactComponentRef;
165
+ AskAIToFix = new EventEmitter();
166
+ // --- Viewport ---
167
+ ActiveViewport = 'desktop';
168
+ ViewportPresets = [
169
+ { Size: 'mobile', Label: 'Mobile (375px)', Icon: 'fa-mobile-screen', MaxWidth: '375px' },
170
+ { Size: 'tablet', Label: 'Tablet (768px)', Icon: 'fa-tablet-screen-button', MaxWidth: '768px' },
171
+ { Size: 'desktop', Label: 'Desktop (100%)', Icon: 'fa-desktop', MaxWidth: '100%' }
172
+ ];
173
+ // --- Local spec for refresh cycle ---
174
+ LocalComponentSpec = null;
175
+ destroy$ = new Subject();
176
+ constructor(State, cdr) {
177
+ this.State = State;
178
+ this.cdr = cdr;
179
+ }
180
+ ngOnInit() {
181
+ this.syncSpecFromState();
182
+ this.State.StateChanged
183
+ .pipe(takeUntil(this.destroy$))
184
+ .subscribe(() => {
185
+ this.syncSpecFromState();
186
+ this.cdr.detectChanges();
187
+ });
188
+ this.State.RefreshComponent
189
+ .pipe(takeUntil(this.destroy$))
190
+ .subscribe(() => {
191
+ this.refreshPreview();
192
+ });
193
+ }
194
+ ngOnDestroy() {
195
+ this.destroy$.next();
196
+ this.destroy$.complete();
197
+ }
198
+ // ============================================================
199
+ // TOOLBAR ACTIONS
200
+ // ============================================================
201
+ RunSelectedComponent() {
202
+ if (this.State.SelectedComponent) {
203
+ this.State.RunComponent(this.State.SelectedComponent);
204
+ }
205
+ }
206
+ StopComponent() {
207
+ MJReactComponent.forceClearRegistries();
208
+ this.State.StopComponent();
209
+ }
210
+ RefreshComponent() {
211
+ if (this.State.SelectedComponent && this.State.IsRunning) {
212
+ MJReactComponent.forceClearRegistries();
213
+ this.refreshPreview();
214
+ }
215
+ }
216
+ SetViewport(size) {
217
+ this.ActiveViewport = size;
218
+ this.cdr.detectChanges();
219
+ }
220
+ SendErrorToAI() {
221
+ if (this.State.CurrentError) {
222
+ this.AskAIToFix.emit(this.State.CurrentError);
223
+ this.State.SendErrorToAI.emit(this.State.CurrentError);
224
+ }
225
+ }
226
+ // ============================================================
227
+ // VIEWPORT HELPERS
228
+ // ============================================================
229
+ GetActivePreset() {
230
+ return this.ViewportPresets.find(p => p.Size === this.ActiveViewport) || this.ViewportPresets[2];
231
+ }
232
+ GetPreviewContainerMaxWidth() {
233
+ return this.GetActivePreset().MaxWidth;
234
+ }
235
+ // ============================================================
236
+ // REACT COMPONENT EVENTS
237
+ // ============================================================
238
+ OnComponentEvent(event) {
239
+ if (event.type === 'error') {
240
+ this.State.CurrentError = {
241
+ type: event.payload?.source || 'Component Error',
242
+ message: event.payload?.error || 'An error occurred while rendering the component',
243
+ technicalDetails: event.payload?.errorInfo || event.payload
244
+ };
245
+ this.cdr.detectChanges();
246
+ }
247
+ else if (event.type === 'loaded') {
248
+ const resolvedSpec = event.payload?.resolvedSpec;
249
+ if (resolvedSpec) {
250
+ this.State.UpdateWithResolvedSpec(resolvedSpec);
251
+ }
252
+ }
253
+ }
254
+ OnOpenEntityRecord(event) {
255
+ SharedService.Instance.OpenEntityRecord(event.entityName, event.key);
256
+ }
257
+ // ============================================================
258
+ // STATE HELPERS
259
+ // ============================================================
260
+ GetComponentName() {
261
+ if (!this.State.SelectedComponent)
262
+ return '';
263
+ return this.State.GetComponentName(this.State.SelectedComponent);
264
+ }
265
+ GetComponentDescription() {
266
+ if (!this.State.SelectedComponent)
267
+ return undefined;
268
+ return this.State.GetComponentDescription(this.State.SelectedComponent);
269
+ }
270
+ // ============================================================
271
+ // PRIVATE
272
+ // ============================================================
273
+ syncSpecFromState() {
274
+ this.LocalComponentSpec = this.State.ComponentSpec;
275
+ }
276
+ /**
277
+ * Refresh the preview by nulling the spec, detecting changes,
278
+ * then restoring the spec after a short delay.
279
+ */
280
+ refreshPreview() {
281
+ if (!this.State.SelectedComponent)
282
+ return;
283
+ const spec = this.State.GetComponentSpec(this.State.SelectedComponent);
284
+ // Null out to force React to unmount
285
+ this.LocalComponentSpec = null;
286
+ this.cdr.detectChanges();
287
+ // Re-set after a brief pause to force fresh mount
288
+ setTimeout(() => {
289
+ this.LocalComponentSpec = spec;
290
+ this.State.ComponentSpec = spec;
291
+ this.State.CurrentError = null;
292
+ try {
293
+ this.cdr.detectChanges();
294
+ }
295
+ catch (error) {
296
+ console.error('Error during refresh detectChanges:', error);
297
+ }
298
+ }, 10);
299
+ }
300
+ static ɵfac = function ComponentPreviewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ComponentPreviewComponent)(i0.ɵɵdirectiveInject(i1.ComponentStudioStateService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
301
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ComponentPreviewComponent, selectors: [["mj-component-preview"]], viewQuery: function ComponentPreviewComponent_Query(rf, ctx) { if (rf & 1) {
302
+ i0.ɵɵviewQuery(_c0, 5);
303
+ } if (rf & 2) {
304
+ let _t;
305
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ReactComponentRef = _t.first);
306
+ } }, outputs: { AskAIToFix: "AskAIToFix" }, decls: 13, vars: 5, consts: [["reactComponent", ""], [1, "component-preview"], [1, "preview-toolbar"], [1, "toolbar-left"], [1, "toolbar-center"], [1, "viewport-selector"], [1, "toolbar-right"], ["title", "Ask AI to fix this error", 1, "toolbar-btn", "ai-fix-btn"], [1, "running-indicator"], [1, "preview-area"], [1, "empty-state"], [1, "empty-state", "run-state"], ["title", "Run component", 1, "toolbar-btn", "run-btn"], ["title", "Stop component", 1, "toolbar-btn", "stop-btn", 3, "click"], [1, "fa-solid", "fa-stop"], ["title", "Refresh component", 1, "toolbar-btn", 3, "click"], [1, "fa-solid", "fa-rotate-right"], ["title", "Run component", 1, "toolbar-btn", "run-btn", 3, "click"], [1, "fa-solid", "fa-play"], [1, "viewport-btn", 3, "active", "title"], [1, "viewport-btn", 3, "click", "title"], [1, "fa-solid", 3, "ngClass"], ["title", "Ask AI to fix this error", 1, "toolbar-btn", "ai-fix-btn", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-circle", "running-dot"], [1, "fa-solid", "fa-eye", "fa-3x"], [1, "fa-solid", "fa-play-circle", "fa-3x"], [1, "run-component-btn", 3, "click"], [1, "preview-container"], [3, "componentEvent", "openEntityRecord", "component"], [1, "error-overlay"], [1, "error-overlay-content"], [1, "error-overlay-header"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-overlay-title"], [1, "error-overlay-message"], [1, "error-overlay-actions"], [1, "toolbar-btn", 3, "click"], [1, "toolbar-btn", "ai-fix-btn", 3, "click"]], template: function ComponentPreviewComponent_Template(rf, ctx) { if (rf & 1) {
307
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3);
308
+ i0.ɵɵtemplate(3, ComponentPreviewComponent_Conditional_3_Template, 2, 1);
309
+ i0.ɵɵelementEnd();
310
+ i0.ɵɵelementStart(4, "div", 4);
311
+ i0.ɵɵtemplate(5, ComponentPreviewComponent_Conditional_5_Template, 3, 0, "div", 5);
312
+ i0.ɵɵelementEnd();
313
+ i0.ɵɵelementStart(6, "div", 6);
314
+ i0.ɵɵtemplate(7, ComponentPreviewComponent_Conditional_7_Template, 4, 0, "button", 7)(8, ComponentPreviewComponent_Conditional_8_Template, 3, 1, "span", 8);
315
+ i0.ɵɵelementEnd()();
316
+ i0.ɵɵelementStart(9, "div", 9);
317
+ i0.ɵɵtemplate(10, ComponentPreviewComponent_Conditional_10_Template, 6, 0, "div", 10)(11, ComponentPreviewComponent_Conditional_11_Template, 9, 2, "div", 11)(12, ComponentPreviewComponent_Conditional_12_Template, 4, 10);
318
+ i0.ɵɵelementEnd()();
319
+ } if (rf & 2) {
320
+ i0.ɵɵadvance(3);
321
+ i0.ɵɵconditional(ctx.State.SelectedComponent ? 3 : -1);
322
+ i0.ɵɵadvance(2);
323
+ i0.ɵɵconditional(ctx.State.IsRunning ? 5 : -1);
324
+ i0.ɵɵadvance(2);
325
+ i0.ɵɵconditional(ctx.State.CurrentError ? 7 : -1);
326
+ i0.ɵɵadvance();
327
+ i0.ɵɵconditional(ctx.State.IsRunning && ctx.State.SelectedComponent ? 8 : -1);
328
+ i0.ɵɵadvance(2);
329
+ i0.ɵɵconditional(!ctx.State.SelectedComponent ? 10 : !ctx.State.IsRunning ? 11 : ctx.LocalComponentSpec ? 12 : -1);
330
+ } }, dependencies: [i2.NgClass, i3.MJReactComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-preview[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mat-sys-surface-container-low);\n overflow: hidden;\n}\n\n\n\n\n\n\n.preview-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n background: var(--mat-sys-surface);\n border-bottom: 1px solid var(--mat-sys-outline);\n min-height: 42px;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.preview-toolbar[_ngcontent-%COMP%] .toolbar-left[_ngcontent-%COMP%], \n.preview-toolbar[_ngcontent-%COMP%] .toolbar-center[_ngcontent-%COMP%], \n.preview-toolbar[_ngcontent-%COMP%] .toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.preview-toolbar[_ngcontent-%COMP%] .toolbar-left[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n}\n\n.preview-toolbar[_ngcontent-%COMP%] .toolbar-center[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n justify-content: center;\n}\n\n.preview-toolbar[_ngcontent-%COMP%] .toolbar-right[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n}\n\n.toolbar-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border: 1px solid var(--mat-sys-outline);\n border-radius: 5px;\n background: var(--mat-sys-surface);\n color: var(--mat-sys-on-surface);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.toolbar-btn[_ngcontent-%COMP%]:hover {\n background: var(--mat-sys-surface-variant);\n border-color: #9ca3af;\n}\n\n.toolbar-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.run-btn[_ngcontent-%COMP%] {\n color: #059669;\n border-color: #a7f3d0;\n background: #ecfdf5;\n}\n\n.run-btn[_ngcontent-%COMP%]:hover {\n background: #d1fae5;\n border-color: #6ee7b7;\n}\n\n.stop-btn[_ngcontent-%COMP%] {\n color: #dc2626;\n border-color: #fca5a5;\n background: #fef2f2;\n}\n\n.stop-btn[_ngcontent-%COMP%]:hover {\n background: #fee2e2;\n border-color: #f87171;\n}\n\n.ai-fix-btn[_ngcontent-%COMP%] {\n color: #7c3aed;\n border-color: #c4b5fd;\n background: #f5f3ff;\n}\n\n.ai-fix-btn[_ngcontent-%COMP%]:hover {\n background: #ede9fe;\n border-color: #a78bfa;\n}\n\n.running-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mat-sys-on-surface-variant);\n font-weight: 500;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.running-indicator[_ngcontent-%COMP%] .running-dot[_ngcontent-%COMP%] {\n font-size: 7px;\n color: #22c55e;\n animation: _ngcontent-%COMP%_pulse-dot 1.5s ease-in-out infinite;\n}\n\n@keyframes _ngcontent-%COMP%_pulse-dot {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n}\n\n\n\n\n\n\n.viewport-selector[_ngcontent-%COMP%] {\n display: inline-flex;\n border: 1px solid var(--mat-sys-outline);\n border-radius: var(--mat-sys-corner-extra-small);\n overflow: hidden;\n background: var(--mat-sys-surface-container-lowest);\n}\n\n.viewport-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 28px;\n border: none;\n background: transparent;\n color: var(--mat-sys-on-surface-variant);\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.viewport-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--mat-sys-outline);\n}\n\n.viewport-btn[_ngcontent-%COMP%]:hover {\n background: var(--mat-sys-surface-container-high);\n color: var(--mat-sys-on-surface);\n}\n\n.viewport-btn.active[_ngcontent-%COMP%] {\n background: var(--mat-sys-primary);\n color: #ffffff;\n}\n\n.viewport-btn.active[_ngcontent-%COMP%]:hover {\n background: var(--mat-sys-primary);\n}\n\n\n\n\n\n\n.preview-area[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n justify-content: center;\n}\n\n.preview-container[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n margin: 0 auto;\n transition: max-width 0.3s ease;\n overflow: auto;\n background: var(--mat-sys-surface);\n}\n\n.preview-container.mobile[_ngcontent-%COMP%], \n.preview-container.tablet[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mat-sys-outline);\n border-right: 1px solid var(--mat-sys-outline);\n box-shadow: var(--mat-sys-elevation-1);\n}\n\n.preview-container.desktop[_ngcontent-%COMP%] {\n max-width: 100% !important;\n}\n\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n text-align: center;\n padding: 40px 24px;\n color: var(--mat-sys-on-surface-variant);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n color: var(--mat-sys-outline);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mat-sys-on-surface-variant);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: var(--mat-sys-on-surface-variant);\n max-width: 320px;\n line-height: 1.5;\n}\n\n.run-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mat-sys-on-surface);\n}\n\n.run-component-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 10px 24px;\n border: none;\n border-radius: var(--mat-sys-corner-small);\n background: var(--mat-sys-primary);\n color: #ffffff;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.run-component-btn[_ngcontent-%COMP%]:hover {\n background: var(--mat-sys-primary);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.run-component-btn[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.run-component-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n\n\n\n.error-overlay[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10;\n background: rgba(254, 242, 242, 0.95);\n border-top: 2px solid #f87171;\n backdrop-filter: blur(4px);\n padding: 16px 20px;\n animation: _ngcontent-%COMP%_slide-up 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slide-up {\n from {\n transform: translateY(100%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n.error-overlay-content[_ngcontent-%COMP%] {\n max-width: 600px;\n}\n\n.error-overlay-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.error-overlay-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #dc2626;\n font-size: 16px;\n}\n\n.error-overlay-header[_ngcontent-%COMP%] .error-overlay-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #991b1b;\n}\n\n.error-overlay-message[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 13px;\n color: #7f1d1d;\n line-height: 1.4;\n}\n\n.error-overlay-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}"] });
331
+ }
332
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ComponentPreviewComponent, [{
333
+ type: Component,
334
+ args: [{ selector: 'mj-component-preview', template: "<div class=\"component-preview\">\n <!-- Toolbar -->\n <div class=\"preview-toolbar\">\n <div class=\"toolbar-left\">\n @if (State.SelectedComponent) {\n @if (State.IsRunning) {\n <button class=\"toolbar-btn stop-btn\" (click)=\"StopComponent()\" title=\"Stop component\">\n <i class=\"fa-solid fa-stop\"></i>\n <span>Stop</span>\n </button>\n <button class=\"toolbar-btn\" (click)=\"RefreshComponent()\" title=\"Refresh component\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n <span>Refresh</span>\n </button>\n } @else {\n <button class=\"toolbar-btn run-btn\" (click)=\"RunSelectedComponent()\" title=\"Run component\">\n <i class=\"fa-solid fa-play\"></i>\n <span>Run</span>\n </button>\n }\n }\n </div>\n\n <div class=\"toolbar-center\">\n <!-- Viewport Size Selector (segmented control) -->\n @if (State.IsRunning) {\n <div class=\"viewport-selector\">\n @for (preset of ViewportPresets; track preset.Size) {\n <button\n class=\"viewport-btn\"\n [class.active]=\"ActiveViewport === preset.Size\"\n (click)=\"SetViewport(preset.Size)\"\n [title]=\"preset.Label\">\n <i class=\"fa-solid\" [ngClass]=\"preset.Icon\"></i>\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"toolbar-right\">\n @if (State.CurrentError) {\n <button class=\"toolbar-btn ai-fix-btn\" (click)=\"SendErrorToAI()\" title=\"Ask AI to fix this error\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Ask AI to Fix</span>\n </button>\n }\n @if (State.IsRunning && State.SelectedComponent) {\n <span class=\"running-indicator\">\n <i class=\"fa-solid fa-circle running-dot\"></i>\n {{ GetComponentName() }}\n </span>\n }\n </div>\n </div>\n\n <!-- Preview Area -->\n <div class=\"preview-area\">\n @if (!State.SelectedComponent) {\n <!-- Empty State: No component selected -->\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-eye fa-3x\"></i>\n <h3>Select a component to preview</h3>\n <p>Choose a component from the sidebar to see its live preview here.</p>\n </div>\n } @else if (!State.IsRunning) {\n <!-- Component selected but not running -->\n <div class=\"empty-state run-state\">\n <i class=\"fa-solid fa-play-circle fa-3x\"></i>\n <h3>{{ GetComponentName() }}</h3>\n <p>{{ GetComponentDescription() || 'No description available' }}</p>\n <button class=\"run-component-btn\" (click)=\"RunSelectedComponent()\">\n <i class=\"fa-solid fa-play\"></i> Run Component\n </button>\n </div>\n } @else if (LocalComponentSpec) {\n <!-- Live Preview Container -->\n <div class=\"preview-container\"\n [style.max-width]=\"GetPreviewContainerMaxWidth()\"\n [class.mobile]=\"ActiveViewport === 'mobile'\"\n [class.tablet]=\"ActiveViewport === 'tablet'\"\n [class.desktop]=\"ActiveViewport === 'desktop'\">\n <mj-react-component\n #reactComponent\n [component]=\"LocalComponentSpec\"\n (componentEvent)=\"OnComponentEvent($event)\"\n (openEntityRecord)=\"OnOpenEntityRecord($event)\">\n </mj-react-component>\n </div>\n\n <!-- Error Overlay (inline, does not replace the component) -->\n @if (State.CurrentError) {\n <div class=\"error-overlay\">\n <div class=\"error-overlay-content\">\n <div class=\"error-overlay-header\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <span class=\"error-overlay-title\">{{ State.CurrentError.type }}</span>\n </div>\n <p class=\"error-overlay-message\">{{ State.CurrentError.message }}</p>\n <div class=\"error-overlay-actions\">\n <button class=\"toolbar-btn\" (click)=\"RefreshComponent()\">\n <i class=\"fa-solid fa-rotate-right\"></i> Retry\n </button>\n <button class=\"toolbar-btn ai-fix-btn\" (click)=\"SendErrorToAI()\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Ask AI to Fix\n </button>\n </div>\n </div>\n </div>\n }\n }\n </div>\n</div>\n", styles: [":host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-preview {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mat-sys-surface-container-low);\n overflow: hidden;\n}\n\n/* ============================================================\n TOOLBAR\n ============================================================ */\n\n.preview-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n background: var(--mat-sys-surface);\n border-bottom: 1px solid var(--mat-sys-outline);\n min-height: 42px;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.preview-toolbar .toolbar-left,\n.preview-toolbar .toolbar-center,\n.preview-toolbar .toolbar-right {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.preview-toolbar .toolbar-left {\n flex: 0 0 auto;\n}\n\n.preview-toolbar .toolbar-center {\n flex: 1 1 auto;\n justify-content: center;\n}\n\n.preview-toolbar .toolbar-right {\n flex: 0 0 auto;\n}\n\n.toolbar-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border: 1px solid var(--mat-sys-outline);\n border-radius: 5px;\n background: var(--mat-sys-surface);\n color: var(--mat-sys-on-surface);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.toolbar-btn:hover {\n background: var(--mat-sys-surface-variant);\n border-color: #9ca3af;\n}\n\n.toolbar-btn i {\n font-size: 11px;\n}\n\n.run-btn {\n color: #059669;\n border-color: #a7f3d0;\n background: #ecfdf5;\n}\n\n.run-btn:hover {\n background: #d1fae5;\n border-color: #6ee7b7;\n}\n\n.stop-btn {\n color: #dc2626;\n border-color: #fca5a5;\n background: #fef2f2;\n}\n\n.stop-btn:hover {\n background: #fee2e2;\n border-color: #f87171;\n}\n\n.ai-fix-btn {\n color: #7c3aed;\n border-color: #c4b5fd;\n background: #f5f3ff;\n}\n\n.ai-fix-btn:hover {\n background: #ede9fe;\n border-color: #a78bfa;\n}\n\n.running-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mat-sys-on-surface-variant);\n font-weight: 500;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.running-indicator .running-dot {\n font-size: 7px;\n color: #22c55e;\n animation: pulse-dot 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-dot {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n}\n\n/* ============================================================\n VIEWPORT SELECTOR (segmented control)\n ============================================================ */\n\n.viewport-selector {\n display: inline-flex;\n border: 1px solid var(--mat-sys-outline);\n border-radius: var(--mat-sys-corner-extra-small);\n overflow: hidden;\n background: var(--mat-sys-surface-container-lowest);\n}\n\n.viewport-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 28px;\n border: none;\n background: transparent;\n color: var(--mat-sys-on-surface-variant);\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.viewport-btn:not(:last-child) {\n border-right: 1px solid var(--mat-sys-outline);\n}\n\n.viewport-btn:hover {\n background: var(--mat-sys-surface-container-high);\n color: var(--mat-sys-on-surface);\n}\n\n.viewport-btn.active {\n background: var(--mat-sys-primary);\n color: #ffffff;\n}\n\n.viewport-btn.active:hover {\n background: var(--mat-sys-primary);\n}\n\n/* ============================================================\n PREVIEW AREA\n ============================================================ */\n\n.preview-area {\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n justify-content: center;\n}\n\n.preview-container {\n width: 100%;\n height: 100%;\n margin: 0 auto;\n transition: max-width 0.3s ease;\n overflow: auto;\n background: var(--mat-sys-surface);\n}\n\n.preview-container.mobile,\n.preview-container.tablet {\n border-left: 1px solid var(--mat-sys-outline);\n border-right: 1px solid var(--mat-sys-outline);\n box-shadow: var(--mat-sys-elevation-1);\n}\n\n.preview-container.desktop {\n max-width: 100% !important;\n}\n\n/* ============================================================\n EMPTY STATES\n ============================================================ */\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n text-align: center;\n padding: 40px 24px;\n color: var(--mat-sys-on-surface-variant);\n}\n\n.empty-state i {\n margin-bottom: 16px;\n color: var(--mat-sys-outline);\n}\n\n.empty-state h3 {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mat-sys-on-surface-variant);\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n color: var(--mat-sys-on-surface-variant);\n max-width: 320px;\n line-height: 1.5;\n}\n\n.run-state h3 {\n color: var(--mat-sys-on-surface);\n}\n\n.run-component-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 10px 24px;\n border: none;\n border-radius: var(--mat-sys-corner-small);\n background: var(--mat-sys-primary);\n color: #ffffff;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.run-component-btn:hover {\n background: var(--mat-sys-primary);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.run-component-btn:active {\n transform: translateY(0);\n}\n\n.run-component-btn i {\n font-size: 13px;\n}\n\n/* ============================================================\n ERROR OVERLAY\n ============================================================ */\n\n.error-overlay {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10;\n background: rgba(254, 242, 242, 0.95);\n border-top: 2px solid #f87171;\n backdrop-filter: blur(4px);\n padding: 16px 20px;\n animation: slide-up 0.2s ease-out;\n}\n\n@keyframes slide-up {\n from {\n transform: translateY(100%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n.error-overlay-content {\n max-width: 600px;\n}\n\n.error-overlay-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.error-overlay-header i {\n color: #dc2626;\n font-size: 16px;\n}\n\n.error-overlay-header .error-overlay-title {\n font-size: 14px;\n font-weight: 600;\n color: #991b1b;\n}\n\n.error-overlay-message {\n margin: 0 0 12px 0;\n font-size: 13px;\n color: #7f1d1d;\n line-height: 1.4;\n}\n\n.error-overlay-actions {\n display: flex;\n gap: 8px;\n}\n"] }]
335
+ }], () => [{ type: i1.ComponentStudioStateService }, { type: i0.ChangeDetectorRef }], { ReactComponentRef: [{
336
+ type: ViewChild,
337
+ args: ['reactComponent']
338
+ }], AskAIToFix: [{
339
+ type: Output
340
+ }] }); })();
341
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ComponentPreviewComponent, { className: "ComponentPreviewComponent", filePath: "src/ComponentStudio/components/workspace/component-preview.component.ts", lineNumber: 41 }); })();
342
+ //# sourceMappingURL=component-preview.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-preview.component.js","sourceRoot":"","sources":["../../../../src/ComponentStudio/components/workspace/component-preview.component.ts","../../../../src/ComponentStudio/components/workspace/component-preview.component.html"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
2
+ import { ComponentStudioStateService } from '../../services/component-studio-state.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class EditorTabsComponent implements OnInit, OnDestroy {
5
+ state: ComponentStudioStateService;
6
+ private cdr;
7
+ private stateChangedSub;
8
+ constructor(state: ComponentStudioStateService, cdr: ChangeDetectorRef);
9
+ ngOnInit(): void;
10
+ ngOnDestroy(): void;
11
+ SelectTab(index: number): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditorTabsComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<EditorTabsComponent, "mj-editor-tabs", never, {}, {}, never, never, false, never>;
14
+ }
15
+ //# sourceMappingURL=editor-tabs.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-tabs.component.d.ts","sourceRoot":"","sources":["../../../../src/ComponentStudio/components/workspace/editor-tabs.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEhF,OAAO,EAAE,2BAA2B,EAAE,MAAM,+CAA+C,CAAC;;AAE5F,qBAuHa,mBAAoB,YAAW,MAAM,EAAE,SAAS;IAKlD,KAAK,EAAE,2BAA2B;IACzC,OAAO,CAAC,GAAG;IAJb,OAAO,CAAC,eAAe,CAA6B;gBAG3C,KAAK,EAAE,2BAA2B,EACjC,GAAG,EAAE,iBAAiB;IAGhC,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,IAAI;IAOnB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;yCAtBnB,mBAAmB;2CAAnB,mBAAmB;CA2B/B"}
@@ -0,0 +1,144 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/component-studio-state.service";
4
+ import * as i2 from "../editors/spec-editor.component";
5
+ import * as i3 from "../editors/code-editor-panel.component";
6
+ import * as i4 from "../editors/requirements-editor.component";
7
+ import * as i5 from "../editors/data-requirements-editor.component";
8
+ function EditorTabsComponent_Case_19_Template(rf, ctx) { if (rf & 1) {
9
+ i0.ɵɵelement(0, "mj-spec-editor");
10
+ } }
11
+ function EditorTabsComponent_Case_20_Template(rf, ctx) { if (rf & 1) {
12
+ i0.ɵɵelement(0, "mj-code-editor-panel");
13
+ } }
14
+ function EditorTabsComponent_Case_21_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelement(0, "mj-requirements-editor", 10);
16
+ } if (rf & 2) {
17
+ i0.ɵɵproperty("Field", "functionalRequirements")("Title", "Functional Requirements");
18
+ } }
19
+ function EditorTabsComponent_Case_22_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵelement(0, "mj-requirements-editor", 10);
21
+ } if (rf & 2) {
22
+ i0.ɵɵproperty("Field", "technicalDesign")("Title", "Technical Design");
23
+ } }
24
+ function EditorTabsComponent_Case_23_Template(rf, ctx) { if (rf & 1) {
25
+ i0.ɵɵelement(0, "mj-data-requirements-editor");
26
+ } }
27
+ export class EditorTabsComponent {
28
+ state;
29
+ cdr;
30
+ stateChangedSub = null;
31
+ constructor(state, cdr) {
32
+ this.state = state;
33
+ this.cdr = cdr;
34
+ }
35
+ ngOnInit() {
36
+ this.stateChangedSub = this.state.StateChanged.subscribe(() => {
37
+ this.cdr.detectChanges();
38
+ });
39
+ }
40
+ ngOnDestroy() {
41
+ if (this.stateChangedSub) {
42
+ this.stateChangedSub.unsubscribe();
43
+ this.stateChangedSub = null;
44
+ }
45
+ }
46
+ SelectTab(index) {
47
+ this.state.ActiveTab = index;
48
+ this.cdr.detectChanges();
49
+ }
50
+ static ɵfac = function EditorTabsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EditorTabsComponent)(i0.ɵɵdirectiveInject(i1.ComponentStudioStateService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
51
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EditorTabsComponent, selectors: [["mj-editor-tabs"]], decls: 24, vars: 11, consts: [[1, "editor-tabs-container"], [1, "tab-bar"], [1, "tab-pill", 3, "click"], [1, "fa-solid", "fa-file-code"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-clipboard-list"], [1, "fa-solid", "fa-drafting-compass"], [1, "fa-solid", "fa-database"], [1, "tab-spacer"], [1, "tab-content"], [3, "Field", "Title"]], template: function EditorTabsComponent_Template(rf, ctx) { if (rf & 1) {
52
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "button", 2);
53
+ i0.ɵɵlistener("click", function EditorTabsComponent_Template_button_click_2_listener() { return ctx.SelectTab(0); });
54
+ i0.ɵɵelement(3, "i", 3);
55
+ i0.ɵɵtext(4, " Spec ");
56
+ i0.ɵɵelementEnd();
57
+ i0.ɵɵelementStart(5, "button", 2);
58
+ i0.ɵɵlistener("click", function EditorTabsComponent_Template_button_click_5_listener() { return ctx.SelectTab(1); });
59
+ i0.ɵɵelement(6, "i", 4);
60
+ i0.ɵɵtext(7, " Code ");
61
+ i0.ɵɵelementEnd();
62
+ i0.ɵɵelementStart(8, "button", 2);
63
+ i0.ɵɵlistener("click", function EditorTabsComponent_Template_button_click_8_listener() { return ctx.SelectTab(2); });
64
+ i0.ɵɵelement(9, "i", 5);
65
+ i0.ɵɵtext(10, " Requirements ");
66
+ i0.ɵɵelementEnd();
67
+ i0.ɵɵelementStart(11, "button", 2);
68
+ i0.ɵɵlistener("click", function EditorTabsComponent_Template_button_click_11_listener() { return ctx.SelectTab(3); });
69
+ i0.ɵɵelement(12, "i", 6);
70
+ i0.ɵɵtext(13, " Design ");
71
+ i0.ɵɵelementEnd();
72
+ i0.ɵɵelementStart(14, "button", 2);
73
+ i0.ɵɵlistener("click", function EditorTabsComponent_Template_button_click_14_listener() { return ctx.SelectTab(4); });
74
+ i0.ɵɵelement(15, "i", 7);
75
+ i0.ɵɵtext(16, " Data ");
76
+ i0.ɵɵelementEnd();
77
+ i0.ɵɵelement(17, "span", 8);
78
+ i0.ɵɵelementEnd();
79
+ i0.ɵɵelementStart(18, "div", 9);
80
+ i0.ɵɵtemplate(19, EditorTabsComponent_Case_19_Template, 1, 0, "mj-spec-editor")(20, EditorTabsComponent_Case_20_Template, 1, 0, "mj-code-editor-panel")(21, EditorTabsComponent_Case_21_Template, 1, 2, "mj-requirements-editor", 10)(22, EditorTabsComponent_Case_22_Template, 1, 2, "mj-requirements-editor", 10)(23, EditorTabsComponent_Case_23_Template, 1, 0, "mj-data-requirements-editor");
81
+ i0.ɵɵelementEnd()();
82
+ } if (rf & 2) {
83
+ let tmp_5_0;
84
+ i0.ɵɵadvance(2);
85
+ i0.ɵɵclassProp("active", ctx.state.ActiveTab === 0);
86
+ i0.ɵɵadvance(3);
87
+ i0.ɵɵclassProp("active", ctx.state.ActiveTab === 1);
88
+ i0.ɵɵadvance(3);
89
+ i0.ɵɵclassProp("active", ctx.state.ActiveTab === 2);
90
+ i0.ɵɵadvance(3);
91
+ i0.ɵɵclassProp("active", ctx.state.ActiveTab === 3);
92
+ i0.ɵɵadvance(3);
93
+ i0.ɵɵclassProp("active", ctx.state.ActiveTab === 4);
94
+ i0.ɵɵadvance(5);
95
+ i0.ɵɵconditional((tmp_5_0 = ctx.state.ActiveTab) === 0 ? 19 : tmp_5_0 === 1 ? 20 : tmp_5_0 === 2 ? 21 : tmp_5_0 === 3 ? 22 : tmp_5_0 === 4 ? 23 : -1);
96
+ } }, dependencies: [i2.SpecEditorComponent, i3.CodeEditorPanelComponent, i4.RequirementsEditorComponent, i5.DataRequirementsEditorComponent], styles: ["[_nghost-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n }\n\n .editor-tabs-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n }\n\n .tab-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0 8px;\n height: 38px;\n background: var(--mat-sys-surface-container-low);\n border-bottom: 1px solid var(--mat-sys-outline-variant);\n flex-shrink: 0;\n gap: 2px;\n }\n\n .tab-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: var(--mat-sys-on-surface-variant);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n font-family: inherit;\n }\n\n .tab-pill[_ngcontent-%COMP%]:hover {\n background: var(--mat-sys-surface-container);\n color: var(--mat-sys-on-surface);\n }\n\n .tab-pill.active[_ngcontent-%COMP%] {\n background: var(--mat-sys-surface);\n color: var(--mat-sys-primary);\n font-weight: 600;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n }\n\n .tab-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .tab-spacer[_ngcontent-%COMP%] {\n flex: 1;\n }\n\n .tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .tab-content[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n }"] });
97
+ }
98
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditorTabsComponent, [{
99
+ type: Component,
100
+ args: [{ selector: 'mj-editor-tabs', template: `
101
+ <div class="editor-tabs-container">
102
+ <div class="tab-bar">
103
+ <button class="tab-pill" [class.active]="state.ActiveTab === 0" (click)="SelectTab(0)">
104
+ <i class="fa-solid fa-file-code"></i> Spec
105
+ </button>
106
+ <button class="tab-pill" [class.active]="state.ActiveTab === 1" (click)="SelectTab(1)">
107
+ <i class="fa-solid fa-code"></i> Code
108
+ </button>
109
+ <button class="tab-pill" [class.active]="state.ActiveTab === 2" (click)="SelectTab(2)">
110
+ <i class="fa-solid fa-clipboard-list"></i> Requirements
111
+ </button>
112
+ <button class="tab-pill" [class.active]="state.ActiveTab === 3" (click)="SelectTab(3)">
113
+ <i class="fa-solid fa-drafting-compass"></i> Design
114
+ </button>
115
+ <button class="tab-pill" [class.active]="state.ActiveTab === 4" (click)="SelectTab(4)">
116
+ <i class="fa-solid fa-database"></i> Data
117
+ </button>
118
+ <span class="tab-spacer"></span>
119
+ </div>
120
+
121
+ <div class="tab-content">
122
+ @switch (state.ActiveTab) {
123
+ @case (0) {
124
+ <mj-spec-editor></mj-spec-editor>
125
+ }
126
+ @case (1) {
127
+ <mj-code-editor-panel></mj-code-editor-panel>
128
+ }
129
+ @case (2) {
130
+ <mj-requirements-editor [Field]="'functionalRequirements'" [Title]="'Functional Requirements'"></mj-requirements-editor>
131
+ }
132
+ @case (3) {
133
+ <mj-requirements-editor [Field]="'technicalDesign'" [Title]="'Technical Design'"></mj-requirements-editor>
134
+ }
135
+ @case (4) {
136
+ <mj-data-requirements-editor></mj-data-requirements-editor>
137
+ }
138
+ }
139
+ </div>
140
+ </div>
141
+ `, styles: ["\n :host {\n display: flex;\n flex: 1;\n overflow: hidden;\n }\n\n .editor-tabs-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n }\n\n .tab-bar {\n display: flex;\n align-items: center;\n padding: 0 8px;\n height: 38px;\n background: var(--mat-sys-surface-container-low);\n border-bottom: 1px solid var(--mat-sys-outline-variant);\n flex-shrink: 0;\n gap: 2px;\n }\n\n .tab-pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: var(--mat-sys-on-surface-variant);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n font-family: inherit;\n }\n\n .tab-pill:hover {\n background: var(--mat-sys-surface-container);\n color: var(--mat-sys-on-surface);\n }\n\n .tab-pill.active {\n background: var(--mat-sys-surface);\n color: var(--mat-sys-primary);\n font-weight: 600;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n }\n\n .tab-pill i {\n font-size: 11px;\n }\n\n .tab-spacer {\n flex: 1;\n }\n\n .tab-content {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .tab-content > * {\n flex: 1;\n overflow: hidden;\n }\n "] }]
142
+ }], () => [{ type: i1.ComponentStudioStateService }, { type: i0.ChangeDetectorRef }], null); })();
143
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EditorTabsComponent, { className: "EditorTabsComponent", filePath: "src/ComponentStudio/components/workspace/editor-tabs.component.ts", lineNumber: 124 }); })();
144
+ //# sourceMappingURL=editor-tabs.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-tabs.component.js","sourceRoot":"","sources":["../../../../src/ComponentStudio/components/workspace/editor-tabs.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwC,MAAM,eAAe,CAAC;;;;;;;;IA8BpE,iCAAiC;;;IAGjC,uCAA6C;;;IAG7C,6CAAwH;;IAA7D,AAAnC,gDAAkC,oCAAoC;;;IAG9F,6CAA0G;;IAAtD,AAA5B,yCAA2B,6BAA6B;;;IAGhF,8CAA2D;;AAiFvE,MAAM,OAAO,mBAAmB;IAKrB;IACC;IAJF,eAAe,GAAwB,IAAI,CAAC;IAEpD,YACS,KAAkC,EACjC,GAAsB;QADvB,UAAK,GAAL,KAAK,CAA6B;QACjC,QAAG,GAAH,GAAG,CAAmB;IAC7B,CAAC;IAEJ,QAAQ;QACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE;YAC5D,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;6GAzBU,mBAAmB;6DAAnB,mBAAmB;YAlHxB,AADF,AADF,8BAAmC,aACZ,gBACoE;YAAvB,gGAAS,cAAU,CAAC,CAAC,IAAC;YACpF,uBAAqC;YAAC,sBACxC;YAAA,iBAAS;YACT,iCAAuF;YAAvB,gGAAS,cAAU,CAAC,CAAC,IAAC;YACpF,uBAAgC;YAAC,sBACnC;YAAA,iBAAS;YACT,iCAAuF;YAAvB,gGAAS,cAAU,CAAC,CAAC,IAAC;YACpF,uBAA0C;YAAC,+BAC7C;YAAA,iBAAS;YACT,kCAAuF;YAAvB,iGAAS,cAAU,CAAC,CAAC,IAAC;YACpF,wBAA4C;YAAC,yBAC/C;YAAA,iBAAS;YACT,kCAAuF;YAAvB,iGAAS,cAAU,CAAC,CAAC,IAAC;YACpF,wBAAoC;YAAC,uBACvC;YAAA,iBAAS;YACT,2BAAgC;YAClC,iBAAM;YAEN,+BAAyB;YAcrB,AAHA,AAHA,AAHA,AAHA,+EAAW,wEAGA,8EAGA,8EAGA,+EAGA;YAKjB,AADE,iBAAM,EACF;;;YArCuB,eAAsC;YAAtC,mDAAsC;YAGtC,eAAsC;YAAtC,mDAAsC;YAGtC,eAAsC;YAAtC,mDAAsC;YAGtC,eAAsC;YAAtC,mDAAsC;YAGtC,eAAsC;YAAtC,mDAAsC;YAO/D,eAgBC;YAhBD,qDAAA,CAAC,oBAAD,CAAC,oBAAD,CAAC,oBAAD,CAAC,oBAAD,CAAC,WAgBA;;;iFA+EI,mBAAmB;cAvH/B,SAAS;2BACE,gBAAgB,YAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCT;;kFA4EU,mBAAmB"}