@memberjunction/ng-dashboards 5.22.0 → 5.24.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 (245) hide show
  1. package/README.md +51 -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 +364 -362
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +947 -64
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +7645 -430
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +285 -6
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2454 -277
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.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 +191 -197
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/models/model-management.component.js +9 -8
  18. package/dist/AI/components/models/model-management.component.js.map +1 -1
  19. package/dist/AI/components/prompts/prompt-management.component.js +305 -299
  20. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  21. package/dist/AI/components/system/system-configuration.component.js +319 -313
  22. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  23. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +20 -2
  24. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  25. package/dist/AI/components/vectors/vector-management-resource.component.js +419 -232
  26. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  27. package/dist/APIKeys/api-applications-panel.component.js +10 -12
  28. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  29. package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
  30. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  31. package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
  32. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  33. package/dist/APIKeys/api-scopes-panel.component.js +61 -68
  34. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  35. package/dist/APIKeys/api-usage-panel.component.js +10 -11
  36. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  37. package/dist/Actions/components/actions-list-view.component.js +82 -96
  38. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  39. package/dist/Actions/components/actions-overview.component.js +130 -134
  40. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  41. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  42. package/dist/Actions/components/categories-list-view.component.js +40 -46
  43. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  44. package/dist/Actions/components/code-management.component.js +2 -2
  45. package/dist/Actions/components/code-management.component.js.map +1 -1
  46. package/dist/Actions/components/entity-integration.component.js +2 -2
  47. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  48. package/dist/Actions/components/execution-monitoring.component.js +127 -132
  49. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  50. package/dist/Actions/components/executions-list-view.component.js +2 -2
  51. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  52. package/dist/Actions/components/explorer/action-card.component.js +11 -17
  53. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  54. package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
  55. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  56. package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
  57. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  58. package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
  59. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
  61. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  62. package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
  63. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  64. package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
  65. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  66. package/dist/Actions/components/scheduled-actions.component.js +2 -2
  67. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  68. package/dist/Actions/components/security-permissions.component.js +2 -2
  69. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  70. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
  71. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  72. package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
  73. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  74. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
  75. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  76. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
  77. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  78. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
  79. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  80. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
  81. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  82. package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
  83. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  84. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  86. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  88. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  90. package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  92. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
  96. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
  98. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  99. package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
  100. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
  102. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
  104. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  105. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
  106. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  107. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  108. package/dist/DataExplorer/data-explorer-dashboard.component.js +17 -17
  109. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  110. package/dist/Home/home-dashboard.component.js +4 -4
  111. package/dist/Home/home-dashboard.component.js.map +1 -1
  112. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  113. package/dist/Integration/components/activity/activity.component.js +1 -0
  114. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  115. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  116. package/dist/Integration/components/connections/connections.component.js +5 -4
  117. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  118. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  119. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +247 -259
  120. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  121. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  122. package/dist/Integration/components/overview/overview.component.js +1 -0
  123. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  124. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  125. package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
  126. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  127. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  128. package/dist/Integration/components/schedules/schedules.component.js +1 -0
  129. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  130. package/dist/Integration/components/widgets/integration-card.component.js +7 -9
  131. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  132. package/dist/Integration/integration.module.d.ts +6 -10
  133. package/dist/Integration/integration.module.d.ts.map +1 -1
  134. package/dist/Integration/integration.module.js +12 -20
  135. package/dist/Integration/integration.module.js.map +1 -1
  136. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +411 -0
  137. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -0
  138. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +4266 -0
  139. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -0
  140. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +140 -0
  141. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
  142. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +780 -0
  143. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
  144. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +8 -2
  145. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  146. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +246 -195
  147. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  148. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +75 -0
  149. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -0
  150. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +601 -0
  151. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -0
  152. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +93 -12
  153. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -1
  154. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +637 -107
  155. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -1
  156. package/dist/KnowledgeHub/index.d.ts +3 -0
  157. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  158. package/dist/KnowledgeHub/index.js +3 -0
  159. package/dist/KnowledgeHub/index.js.map +1 -1
  160. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  161. package/dist/Lists/components/lists-browse-resource.component.js +9 -7
  162. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  163. package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
  164. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  165. package/dist/Lists/components/lists-operations-resource.component.js +10 -9
  166. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  167. package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
  168. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  169. package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
  170. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  171. package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
  172. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  173. package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
  174. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  175. package/dist/MCP/mcp-dashboard.component.js +2 -2
  176. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  177. package/dist/MCP/mcp.module.d.ts +6 -9
  178. package/dist/MCP/mcp.module.d.ts.map +1 -1
  179. package/dist/MCP/mcp.module.js +20 -22
  180. package/dist/MCP/mcp.module.js.map +1 -1
  181. package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
  182. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  183. package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
  184. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  185. package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
  186. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  187. package/dist/Testing/testing-dashboard.component.js +9 -10
  188. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  189. package/dist/__tests__/analytics-resource.test.d.ts +2 -0
  190. package/dist/__tests__/analytics-resource.test.d.ts.map +1 -0
  191. package/dist/__tests__/analytics-resource.test.js +181 -0
  192. package/dist/__tests__/analytics-resource.test.js.map +1 -0
  193. package/dist/__tests__/scheduling.test.d.ts +2 -0
  194. package/dist/__tests__/scheduling.test.d.ts.map +1 -0
  195. package/dist/__tests__/scheduling.test.js +205 -0
  196. package/dist/__tests__/scheduling.test.js.map +1 -0
  197. package/dist/actions-dashboards.module.d.ts +8 -13
  198. package/dist/actions-dashboards.module.d.ts.map +1 -1
  199. package/dist/actions-dashboards.module.js +6 -27
  200. package/dist/actions-dashboards.module.js.map +1 -1
  201. package/dist/ai-dashboards.module.d.ts +20 -20
  202. package/dist/ai-dashboards.module.d.ts.map +1 -1
  203. package/dist/ai-dashboards.module.js +43 -44
  204. package/dist/ai-dashboards.module.js.map +1 -1
  205. package/dist/communication-dashboards.module.d.ts +4 -8
  206. package/dist/communication-dashboards.module.d.ts.map +1 -1
  207. package/dist/communication-dashboards.module.js +0 -19
  208. package/dist/communication-dashboards.module.js.map +1 -1
  209. package/dist/component-studio-dashboards.module.d.ts +7 -11
  210. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  211. package/dist/component-studio-dashboards.module.js +22 -34
  212. package/dist/component-studio-dashboards.module.js.map +1 -1
  213. package/dist/core-dashboards.module.d.ts +12 -18
  214. package/dist/core-dashboards.module.d.ts.map +1 -1
  215. package/dist/core-dashboards.module.js +15 -31
  216. package/dist/core-dashboards.module.js.map +1 -1
  217. package/dist/credentials-dashboards.module.d.ts +5 -8
  218. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  219. package/dist/credentials-dashboards.module.js +3 -19
  220. package/dist/credentials-dashboards.module.js.map +1 -1
  221. package/dist/data-explorer-dashboards.module.d.ts +7 -13
  222. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  223. package/dist/data-explorer-dashboards.module.js +0 -27
  224. package/dist/data-explorer-dashboards.module.js.map +1 -1
  225. package/dist/lists-dashboards.module.d.ts +5 -8
  226. package/dist/lists-dashboards.module.d.ts.map +1 -1
  227. package/dist/lists-dashboards.module.js +3 -19
  228. package/dist/lists-dashboards.module.js.map +1 -1
  229. package/dist/public-api.d.ts +2 -0
  230. package/dist/public-api.d.ts.map +1 -1
  231. package/dist/public-api.js +2 -0
  232. package/dist/public-api.js.map +1 -1
  233. package/dist/scheduling-dashboards.module.d.ts +6 -10
  234. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  235. package/dist/scheduling-dashboards.module.js +3 -23
  236. package/dist/scheduling-dashboards.module.js.map +1 -1
  237. package/dist/shared/entity-field-display.d.ts +44 -0
  238. package/dist/shared/entity-field-display.d.ts.map +1 -0
  239. package/dist/shared/entity-field-display.js +118 -0
  240. package/dist/shared/entity-field-display.js.map +1 -0
  241. package/dist/testing-dashboards.module.d.ts +7 -13
  242. package/dist/testing-dashboards.module.d.ts.map +1 -1
  243. package/dist/testing-dashboards.module.js +0 -27
  244. package/dist/testing-dashboards.module.js.map +1 -1
  245. package/package.json +48 -55
@@ -1 +1 @@
1
- {"version":3,"file":"component-studio-dashboard.component.js","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts","../../src/ComponentStudio/component-studio-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ViewChild, ElementRef, ChangeDetectorRef, HostListener } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Metadata } from '@memberjunction/core';\nimport {\n MJComponentEntityExtended,\n MJArtifactVersionEntity,\n ResourceData,\n UserInfoEngine\n} from '@memberjunction/core-entities';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { DialogService, DialogRef } from '@progress/kendo-angular-dialog';\nimport { TextImportDialogComponent } from './components/text-import-dialog.component';\nimport { ArtifactSelectionDialogComponent, ArtifactSelectionResult } from './components/artifact-selection-dialog.component';\nimport { ArtifactLoadDialogComponent, ArtifactLoadResult } from './components/artifact-load-dialog.component';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ComponentStudioStateService, FileLoadedComponent, ComponentError } from './services/component-studio-state.service';\nimport { ComponentVersionService } from './services/component-version.service';\nimport { SaveVersionResult } from './components/save-version-dialog/save-version-dialog.component';\nimport { RunView } from '@memberjunction/core';\n\n/**\n * User preferences persisted via UserInfoEngine.\n */\ninterface ComponentStudioPreferences {\n leftPanelWidth: number;\n rightPanelWidth: number;\n previewFlexPercent: number;\n isAIPanelCollapsed: boolean;\n isLeftPanelCollapsed: boolean;\n isEditorPanelCollapsed: boolean;\n}\n\n/**\n * Result from the New Component dialog.\n */\nexport interface NewComponentResult {\n name: string;\n title: string;\n description: string;\n type: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-component-studio-dashboard',\n templateUrl: './component-studio-dashboard.component.html',\n styleUrls: ['./component-studio-dashboard.component.css'],\n providers: [ComponentStudioStateService, ComponentVersionService]\n})\n@RegisterClass(BaseDashboard, 'ComponentStudioDashboard')\nexport class ComponentStudioDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n\n private static readonly USER_PREFS_KEY = 'ComponentStudio.UserPreferences';\n\n // --- Panel widths ---\n public leftPanelWidth = 340;\n public rightPanelWidth = 380;\n public previewFlex = '1 1 50%';\n public editorFlex = '1 1 50%';\n private previewFlexPercent = 50;\n\n // --- Dropdown states ---\n public exportDropdownOpen = false;\n\n // --- Resize state ---\n public IsResizing = false;\n private resizeType: 'left' | 'right' | 'center' | null = null;\n private resizeStartX = 0;\n private resizeStartValue = 0;\n\n // --- Collapsible panels ---\n public IsLeftPanelCollapsed = false;\n public IsEditorPanelCollapsed = false;\n\n // --- Dialog states ---\n public ShowNewComponentDialog = false;\n public ShowKeyboardShortcuts = false;\n public ShowSaveVersionDialog = false;\n\n // --- Status bar ---\n public LastSavedTime: Date | null = null;\n\n // --- Preferences ---\n private prefsLoaded = false;\n\n @ViewChild('fileInput', { static: false }) fileInput?: ElementRef<HTMLInputElement>;\n\n private destroy$ = new Subject<void>();\n private metadata: Metadata = new Metadata();\n\n constructor(\n public state: ComponentStudioStateService,\n public versionService: ComponentVersionService,\n private cdr: ChangeDetectorRef,\n private dialogService: DialogService,\n private notificationService: MJNotificationService\n ) {\n super();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Component Studio';\n }\n\n async ngAfterViewInit() {\n this.initDashboard();\n\n // Subscribe to state changes for change detection\n this.state.StateChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.cdr.detectChanges();\n });\n\n this.loadUserPreferences();\n await this.state.LoadComponents();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard\n }\n\n protected loadData(): void {\n this.state.LoadComponents();\n }\n\n // ============================================================\n // USER PREFERENCES\n // ============================================================\n\n private loadUserPreferences(): void {\n try {\n const saved = UserInfoEngine.Instance.GetSetting(ComponentStudioDashboardComponent.USER_PREFS_KEY);\n if (saved) {\n const prefs = JSON.parse(saved) as ComponentStudioPreferences;\n this.applyPreferences(prefs);\n }\n } catch (error) {\n console.warn('[ComponentStudio] Failed to load user preferences:', error);\n } finally {\n this.prefsLoaded = true;\n }\n }\n\n private applyPreferences(prefs: ComponentStudioPreferences): void {\n if (prefs.leftPanelWidth) this.leftPanelWidth = prefs.leftPanelWidth;\n if (prefs.rightPanelWidth) this.rightPanelWidth = prefs.rightPanelWidth;\n if (prefs.previewFlexPercent) {\n this.previewFlexPercent = prefs.previewFlexPercent;\n this.previewFlex = `1 1 ${prefs.previewFlexPercent}%`;\n this.editorFlex = `1 1 ${100 - prefs.previewFlexPercent}%`;\n }\n if (prefs.isAIPanelCollapsed != null) {\n this.state.IsAIPanelCollapsed = prefs.isAIPanelCollapsed;\n }\n if (prefs.isLeftPanelCollapsed != null) {\n this.IsLeftPanelCollapsed = prefs.isLeftPanelCollapsed;\n }\n if (prefs.isEditorPanelCollapsed != null) {\n this.IsEditorPanelCollapsed = prefs.isEditorPanelCollapsed;\n }\n }\n\n private getCurrentPreferences(): ComponentStudioPreferences {\n return {\n leftPanelWidth: this.leftPanelWidth,\n rightPanelWidth: this.rightPanelWidth,\n previewFlexPercent: this.previewFlexPercent,\n isAIPanelCollapsed: this.state.IsAIPanelCollapsed,\n isLeftPanelCollapsed: this.IsLeftPanelCollapsed,\n isEditorPanelCollapsed: this.IsEditorPanelCollapsed\n };\n }\n\n private saveUserPreferences(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSetting(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n private saveUserPreferencesDebounced(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSettingDebounced(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n // ============================================================\n // KEYBOARD SHORTCUTS\n // ============================================================\n\n @HostListener('document:keydown', ['$event'])\n OnKeyDown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n const isInputFocused = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n\n // Ctrl+S / Cmd+S = Save Version\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n event.preventDefault();\n if (this.state.SelectedComponent) {\n this.SaveVersion();\n }\n }\n\n // Ctrl+N / Cmd+N = New Component\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n event.preventDefault();\n this.OnNewComponent();\n }\n\n // Ctrl+/ or ? = Toggle keyboard shortcuts\n if ((event.ctrlKey || event.metaKey) && event.key === '/') {\n event.preventDefault();\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n } else if (event.key === '?' && !isInputFocused) {\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n }\n\n // Escape = Close overlays\n if (event.key === 'Escape') {\n if (this.ShowKeyboardShortcuts) {\n this.ShowKeyboardShortcuts = false;\n this.cdr.detectChanges();\n }\n }\n }\n\n // ============================================================\n // SAVE VERSION\n // ============================================================\n\n SaveVersion(): void {\n if (!this.state.SelectedComponent) return;\n this.ShowSaveVersionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnSaveVersionConfirm(result: SaveVersionResult): Promise<void> {\n this.ShowSaveVersionDialog = false;\n\n let success: boolean;\n if (result.Mode === 'update') {\n success = await this.versionService.UpdateCurrentVersion(result.Comment || undefined);\n } else {\n success = await this.versionService.SaveVersion(result.Comment || undefined);\n }\n\n if (success) {\n this.LastSavedTime = new Date();\n this.notificationService.CreateSimpleNotification(\n `Saved as v${this.versionService.CurrentVersionNumber}`,\n 'success',\n 3000\n );\n this.state.HasUnsavedChanges = false;\n } else {\n this.notificationService.CreateSimpleNotification(\n 'Failed to save version',\n 'error'\n );\n }\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // REFRESH COMPONENT\n // ============================================================\n\n RefreshComponent(): void {\n this.state.RefreshComponent.emit();\n }\n\n // ============================================================\n // AI PANEL\n // ============================================================\n\n ToggleAIPanel(): void {\n this.state.IsAIPanelCollapsed = !this.state.IsAIPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleLeftPanel(): void {\n this.IsLeftPanelCollapsed = !this.IsLeftPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleEditorPanel(): void {\n this.IsEditorPanelCollapsed = !this.IsEditorPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n OnAskAIToFix(error: ComponentError): void {\n // Open AI panel if collapsed\n if (this.state.IsAIPanelCollapsed) {\n this.state.IsAIPanelCollapsed = false;\n }\n // Send error to AI panel\n this.state.SendErrorToAI.emit(error);\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // NEW COMPONENT\n // ============================================================\n\n OnNewComponent(): void {\n this.ShowNewComponentDialog = true;\n this.cdr.detectChanges();\n }\n\n OnNewComponentDialogClose(result: NewComponentResult | null): void {\n this.ShowNewComponentDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n this.createComponentFromResult(result);\n this.cdr.detectChanges();\n }\n\n OnQuickStart(type: string): void {\n const typeNames: Record<string, string> = {\n dashboard: 'Dashboard',\n report: 'Report',\n chart: 'Chart',\n form: 'Form'\n };\n const typeName = typeNames[type] || 'Component';\n this.createComponentFromResult({\n name: `New ${typeName}`,\n title: `New ${typeName}`,\n description: '',\n type\n });\n }\n\n private createComponentFromResult(result: NewComponentResult): void {\n const newSpec: ComponentSpec = {\n name: result.name,\n title: result.title,\n description: result.description,\n type: result.type,\n location: 'embedded',\n exampleUsage: '',\n code: this.getTemplateCode(result.name, result.type),\n functionalRequirements: '',\n dataRequirements: { mode: 'views', entities: [], queries: [], description: '' },\n technicalDesign: ''\n } as ComponentSpec;\n\n const fileComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.name,\n description: result.description,\n specification: newSpec,\n filename: 'new-component.json',\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.type || 'Dashboard',\n status: 'New'\n };\n\n this.state.AddFileLoadedComponent(fileComponent);\n this.state.ExpandedComponent = fileComponent;\n this.state.RunComponent(fileComponent);\n }\n\n private getTemplateCode(name: string, type: string): string {\n return `function Component({ utilities, settings }) {\n const React = utilities.React;\n const { useState } = React;\n\n return React.createElement('div', {\n style: { padding: '24px', fontFamily: 'system-ui' }\n },\n React.createElement('h2', null, '${name}'),\n React.createElement('p', null, 'Start building your ${type || 'component'} here.')\n );\n}`;\n }\n\n // ============================================================\n // IMPORT / EXPORT\n // ============================================================\n\n ToggleExportDropdown(): void {\n this.exportDropdownOpen = !this.exportDropdownOpen;\n }\n\n @HostListener('document:click', ['$event'])\n OnDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.header-dropdown')) {\n this.exportDropdownOpen = false;\n }\n }\n\n ImportFromFile(): void {\n this.fileInput?.nativeElement.click();\n }\n\n ImportFromText(): void {\n const dialogRef = this.dialogService.open({\n content: TextImportDialogComponent,\n width: 700,\n height: 600,\n minWidth: 500,\n title: '',\n actions: []\n });\n\n const instance = dialogRef.content.instance as TextImportDialogComponent;\n instance.importSpec.subscribe((spec: ComponentSpec) => {\n this.handleSpecImport(spec, 'text-import.json', 'Text');\n dialogRef.close();\n });\n instance.cancelDialog.subscribe(() => dialogRef.close());\n }\n\n async ImportFromArtifact(): Promise<void> {\n await new Promise(resolve => setTimeout(resolve, 100));\n\n try {\n const dialogRef = this.dialogService.open({\n content: ArtifactLoadDialogComponent,\n width: 1200,\n height: 700\n });\n\n const result = await dialogRef.result.toPromise() as ArtifactLoadResult | undefined;\n if (!result) return;\n\n const artifactComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.spec.name,\n description: result.spec.description,\n specification: result.spec,\n filename: `${result.artifactName} (v${result.versionNumber})`,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.spec.type || 'Component',\n status: 'Artifact',\n sourceArtifactID: result.artifactID,\n sourceVersionID: result.versionID\n };\n\n this.state.AddFileLoadedComponent(artifactComponent);\n this.state.ExpandedComponent = artifactComponent;\n this.state.RunComponent(artifactComponent);\n\n this.notificationService.CreateSimpleNotification(\n `Loaded \"${result.spec.name}\" from artifact`,\n 'success',\n 3000\n );\n } catch (error) {\n if (error && error !== 'cancel') {\n console.error('Error loading from artifact:', error);\n this.notificationService.CreateSimpleNotification(\n 'Failed to load from artifact',\n 'error'\n );\n }\n }\n }\n\n async HandleFileSelect(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file || !file.name.endsWith('.json')) return;\n\n try {\n const content = await this.readFile(file);\n const spec = JSON.parse(content) as ComponentSpec;\n if (!spec.name || !spec.code) {\n console.error('Invalid spec: missing name or code');\n return;\n }\n this.handleSpecImport(spec, file.name, 'File');\n input.value = '';\n } catch (error) {\n console.error('Error loading file:', error);\n }\n }\n\n private handleSpecImport(spec: ComponentSpec, filename: string, status: string): void {\n const component: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: spec.name,\n description: spec.description,\n specification: spec,\n filename,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: spec.type || 'Component',\n status\n };\n\n this.state.AddFileLoadedComponent(component);\n this.state.ExpandedComponent = component;\n this.state.RunComponent(component);\n }\n\n async ExportToArtifact(): Promise<void> {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n await new Promise(resolve => setTimeout(resolve, 100));\n\n try {\n const dialogRef = this.dialogService.open({\n content: ArtifactSelectionDialogComponent,\n width: 1200,\n height: 900\n });\n\n const result = await dialogRef.result.toPromise() as ArtifactSelectionResult | undefined;\n if (!result?.action) return;\n\n const artifact = result.artifact;\n let version: MJArtifactVersionEntity;\n\n if (result.action === 'update-version' && result.versionToUpdate) {\n version = result.versionToUpdate;\n } else {\n version = await this.metadata.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions');\n version.ArtifactID = artifact.ID;\n version.UserID = this.metadata.CurrentUser.ID;\n\n const rv = new RunView();\n const versionsResult = await rv.RunView<MJArtifactVersionEntity>({\n EntityName: 'MJ: Artifact Versions',\n ExtraFilter: `ArtifactID = '${artifact.ID}'`,\n OrderBy: 'VersionNumber DESC',\n MaxRows: 1,\n ResultType: 'entity_object'\n });\n\n version.VersionNumber = (versionsResult.Success && versionsResult.Results?.length > 0)\n ? versionsResult.Results[0].VersionNumber + 1\n : 1;\n }\n\n version.Content = JSON.stringify(currentSpec, null, 2);\n version.ContentHash = await this.generateSHA256Hash(version.Content);\n version.Name = currentSpec.name;\n version.Description = currentSpec.description || null;\n const timestamp = new Date().toISOString();\n const actionText = result.action === 'update-version' ? 'Updated' : 'Created';\n version.Comments = `${actionText} from Component Studio at ${timestamp}`;\n\n const saved = await version.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n `Saved as artifact version ${version.VersionNumber}`,\n 'success',\n 3000\n );\n } else {\n this.notificationService.CreateSimpleNotification('Failed to save artifact version', 'error');\n }\n } catch (error) {\n console.error('Error saving to artifact:', error);\n this.notificationService.CreateSimpleNotification('Error saving to artifact', 'error');\n }\n }\n\n ExportToFile(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n const componentName = this.state.GetComponentName(this.state.SelectedComponent);\n const filename = componentName.replace(/\\s+/g, '-').replace(/[^a-z0-9\\-]/gi, '-').toLowerCase() + '.json';\n const blob = new Blob([JSON.stringify(currentSpec, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n async ExportToClipboard(): Promise<void> {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n await navigator.clipboard.writeText(JSON.stringify(currentSpec, null, 2));\n this.notificationService.CreateSimpleNotification('Copied to clipboard', 'success', 2000);\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to copy to clipboard', 'error');\n }\n }\n\n async RefreshData(): Promise<void> {\n await this.state.LoadComponents();\n }\n\n // ============================================================\n // RESIZE HANDLERS\n // ============================================================\n\n OnLeftResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'left';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.leftPanelWidth;\n this.addResizeListeners();\n }\n\n OnRightResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'right';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.rightPanelWidth;\n this.addResizeListeners();\n }\n\n OnCenterResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'center';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.previewFlexPercent;\n this.addResizeListeners();\n }\n\n private addResizeListeners(): void {\n this.IsResizing = true;\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (this.resizeType === 'left') {\n const delta = event.clientX - this.resizeStartX;\n this.leftPanelWidth = Math.max(280, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'right') {\n const delta = this.resizeStartX - event.clientX;\n this.rightPanelWidth = Math.max(300, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'center') {\n const centerPanel = document.querySelector('.panel-center') as HTMLElement;\n if (centerPanel) {\n const rect = centerPanel.getBoundingClientRect();\n const relativeX = event.clientX - rect.left;\n const percent = Math.max(20, Math.min(80, (relativeX / rect.width) * 100));\n this.previewFlexPercent = percent;\n this.previewFlex = `1 1 ${percent}%`;\n this.editorFlex = `1 1 ${100 - percent}%`;\n }\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n this.IsResizing = false;\n this.resizeType = null;\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveUserPreferencesDebounced();\n };\n\n // ============================================================\n // HELPERS\n // ============================================================\n\n private readFile(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string);\n reader.onerror = reject;\n reader.readAsText(file);\n });\n }\n\n private async generateSHA256Hash(content: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","<div class=\"component-studio\" [class.resizing]=\"IsResizing\" kendoDialogContainer>\n\n <!-- ============================================================\n TOOLBAR — Unified bar with integrated breadcrumb\n Left: hamburger + breadcrumb context\n Right: Save | Export | divider | AI | Keyboard | Refresh\n ============================================================ -->\n <div class=\"studio-toolbar\">\n <div class=\"toolbar-context\">\n <!-- Toggle left panel -->\n <button class=\"tb-btn icon-only\" title=\"Toggle browser panel\" (click)=\"ToggleLeftPanel()\">\n <i class=\"fa-solid fa-bars\"></i>\n </button>\n\n @if (state.SelectedComponent) {\n <span class=\"breadcrumb-type\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.GetComponentType(state.SelectedComponent) || 'Component' }}\n </span>\n <span class=\"breadcrumb-sep\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <span class=\"component-label\">{{ state.GetComponentName(state.SelectedComponent) }}</span>\n\n @if (state.IsRunning) {\n <span class=\"running-badge\">\n <span class=\"running-dot-small\"></span>\n Running\n </span>\n }\n @if (state.HasUnsavedChanges) {\n <span class=\"unsaved-dot\" title=\"Unsaved changes\"></span>\n }\n }\n </div>\n\n <div class=\"toolbar-spacer\"></div>\n\n <div class=\"toolbar-actions\">\n <!-- Save Version -->\n @if (state.SelectedComponent) {\n <button class=\"tb-btn primary\" (click)=\"SaveVersion()\" title=\"Save version (Ctrl+S)\">\n <i class=\"fa-solid fa-save\"></i> Save\n </button>\n }\n\n <!-- Refresh Component -->\n @if (state.SelectedComponent && state.IsRunning) {\n <button class=\"tb-btn\" (click)=\"RefreshComponent()\" title=\"Refresh component\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n }\n\n <!-- Export -->\n @if (state.SelectedComponent && state.IsRunning) {\n <div class=\"header-dropdown\" [class.open]=\"exportDropdownOpen\">\n <button class=\"tb-btn\" (click)=\"ToggleExportDropdown()\">\n <i class=\"fa-solid fa-file-export\"></i> Export\n <i class=\"fa-solid fa-chevron-down dropdown-icon\"></i>\n </button>\n @if (exportDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"ExportToArtifact()\">\n <i class=\"fa-solid fa-save\"></i> To Artifact\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToFile()\">\n <i class=\"fa-solid fa-file\"></i> To File\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToClipboard()\">\n <i class=\"fa-solid fa-clipboard\"></i> To Clipboard\n </button>\n </div>\n }\n </div>\n }\n\n <span class=\"toolbar-divider\"></span>\n\n <!-- AI Panel Toggle -->\n <button class=\"tb-btn icon-only\" [class.active-toggle]=\"!state.IsAIPanelCollapsed\"\n (click)=\"ToggleAIPanel()\"\n [title]=\"state.IsAIPanelCollapsed ? 'Show AI Assistant' : 'Hide AI Assistant'\">\n <i class=\"fa-solid fa-robot\"></i>\n </button>\n\n <!-- Keyboard Shortcuts -->\n <button class=\"tb-btn icon-only\" (click)=\"ShowKeyboardShortcuts = !ShowKeyboardShortcuts\"\n title=\"Keyboard shortcuts (?)\">\n <i class=\"fa-solid fa-keyboard\"></i>\n </button>\n\n <!-- Refresh -->\n <button class=\"tb-btn icon-only\" (click)=\"RefreshData()\" [disabled]=\"state.IsLoading\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n\n <!-- Hidden file input -->\n <input #fileInput type=\"file\" accept=\".json\" (change)=\"HandleFileSelect($event)\" style=\"display: none;\" />\n </div>\n\n <!-- ============================================================\n THREE-PANEL BODY\n ============================================================ -->\n <div class=\"studio-body\">\n\n <!-- Left Panel: Component Browser (collapsible) -->\n @if (!IsLeftPanelCollapsed) {\n <div class=\"panel panel-left\" [style.width.px]=\"leftPanelWidth\">\n <mj-component-browser\n (NewComponent)=\"OnNewComponent()\"\n (ImportFromFile)=\"ImportFromFile()\"\n (ImportFromText)=\"ImportFromText()\"\n (ImportFromArtifact)=\"ImportFromArtifact()\">\n </mj-component-browser>\n </div>\n\n <!-- Resize Handle: Left <-> Center -->\n <div class=\"resize-handle\" (mousedown)=\"OnLeftResizeStart($event)\"></div>\n }\n\n <!-- Center Panel: Workspace (side-by-side: Preview LEFT, Editor RIGHT) -->\n <div class=\"panel panel-center\">\n @if (state.SelectedComponent) {\n <!-- Preview (left side) -->\n <div class=\"workspace-preview\" [class.full-width]=\"IsEditorPanelCollapsed\" [style.flex]=\"IsEditorPanelCollapsed ? '1 1 100%' : previewFlex\">\n <div class=\"preview-sub-header\">\n <div class=\"preview-sub-left\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Preview</span>\n </div>\n <div class=\"preview-sub-right\">\n <!-- Toggle editor panel -->\n <button class=\"toggle-editors-btn\" [class.active]=\"!IsEditorPanelCollapsed\"\n (click)=\"ToggleEditorPanel()\" title=\"Toggle editor panel\">\n <i class=\"fa-solid fa-columns\"></i>\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <mj-component-preview\n (AskAIToFix)=\"OnAskAIToFix($event)\">\n </mj-component-preview>\n </div>\n </div>\n\n <!-- Resize Handle: Preview <-> Editor (obvious center divider) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"resize-handle center-divider\" (mousedown)=\"OnCenterResizeStart($event)\">\n <div class=\"divider-grip\"></div>\n </div>\n }\n\n <!-- Editor Tabs (right side, collapsible) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"workspace-editors\" [style.flex]=\"editorFlex\">\n <mj-editor-tabs></mj-editor-tabs>\n </div>\n }\n } @else {\n <!-- Enhanced Empty State -->\n <div class=\"empty-state\">\n <div class=\"empty-state-content\">\n <div class=\"empty-state-icon\">\n <i class=\"fa-solid fa-rocket\"></i>\n </div>\n <h2>Ready to Build</h2>\n <p>Select a component from the browser or create a new one to get started</p>\n <div class=\"empty-state-actions\">\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"OnNewComponent()\">\n <span class=\"fa-solid fa-plus\"></span> New Component\n </button>\n <button kendoButton [themeColor]=\"'base'\" (click)=\"ImportFromFile()\">\n <span class=\"fa-solid fa-file-import\"></span> Import\n </button>\n </div>\n <div class=\"quick-start-templates\">\n <span class=\"quick-start-label\">Quick start:</span>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('dashboard')\">\n <i class=\"fa-solid fa-chart-line\"></i> Dashboard\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('report')\">\n <i class=\"fa-solid fa-file-alt\"></i> Report\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('chart')\">\n <i class=\"fa-solid fa-chart-pie\"></i> Chart\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('form')\">\n <i class=\"fa-solid fa-edit\"></i> Form\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Resize Handle: Center <-> Right -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"resize-handle\" (mousedown)=\"OnRightResizeStart($event)\"></div>\n }\n\n <!-- Right Panel: AI Assistant -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"panel panel-right\" [style.width.px]=\"rightPanelWidth\">\n <mj-ai-assistant-panel></mj-ai-assistant-panel>\n </div>\n }\n </div>\n\n <!-- ============================================================\n STATUS BAR\n ============================================================ -->\n <div class=\"status-bar\">\n <div class=\"status-left\">\n <span class=\"status-item\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.FilteredComponents.length }} component{{ state.FilteredComponents.length !== 1 ? 's' : '' }}\n </span>\n </div>\n <div class=\"status-right\">\n @if (LastSavedTime) {\n <span class=\"status-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n Saved {{ LastSavedTime | date:'shortTime' }}\n </span>\n }\n <span class=\"status-item shortcut-hint\">\n <kbd>?</kbd> Shortcuts\n </span>\n </div>\n </div>\n\n <!-- ============================================================\n KEYBOARD SHORTCUTS OVERLAY\n ============================================================ -->\n @if (ShowKeyboardShortcuts) {\n <div class=\"shortcuts-overlay\" (click)=\"ShowKeyboardShortcuts = false\">\n <div class=\"shortcuts-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"shortcuts-header\">\n <h3>Keyboard Shortcuts</h3>\n <button class=\"shortcuts-close\" (click)=\"ShowKeyboardShortcuts = false\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcuts-body\">\n <div class=\"shortcut-group\">\n <h4>General</h4>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>S</kbd></span>\n <span class=\"shortcut-desc\">Save version</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>N</kbd></span>\n <span class=\"shortcut-desc\">New component</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>?</kbd></span>\n <span class=\"shortcut-desc\">Toggle shortcuts</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Esc</kbd></span>\n <span class=\"shortcut-desc\">Close overlay</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ============================================================\n NEW COMPONENT DIALOG\n ============================================================ -->\n @if (ShowNewComponentDialog) {\n <mj-new-component-dialog\n [Visible]=\"ShowNewComponentDialog\"\n (Close)=\"OnNewComponentDialogClose($event)\">\n </mj-new-component-dialog>\n }\n\n @if (ShowSaveVersionDialog) {\n <mj-save-version-dialog\n [Visible]=\"ShowSaveVersionDialog\"\n [CurrentVersion]=\"versionService.CurrentVersionNumber\"\n (Save)=\"OnSaveVersionConfirm($event)\"\n (Cancel)=\"ShowSaveVersionDialog = false\">\n </mj-save-version-dialog>\n }\n</div>\n"]}
1
+ {"version":3,"file":"component-studio-dashboard.component.js","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts","../../src/ComponentStudio/component-studio-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ViewChild, ElementRef, ChangeDetectorRef, HostListener } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Metadata } from '@memberjunction/core';\nimport {\n MJComponentEntityExtended,\n MJArtifactVersionEntity,\n ResourceData,\n UserInfoEngine\n} from '@memberjunction/core-entities';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ArtifactSelectionResult } from './components/artifact-selection-dialog.component';\nimport { ArtifactLoadResult } from './components/artifact-load-dialog.component';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ComponentStudioStateService, FileLoadedComponent, ComponentError } from './services/component-studio-state.service';\nimport { ComponentVersionService } from './services/component-version.service';\nimport { SaveVersionResult } from './components/save-version-dialog/save-version-dialog.component';\nimport { RunView } from '@memberjunction/core';\n\n/**\n * User preferences persisted via UserInfoEngine.\n */\ninterface ComponentStudioPreferences {\n leftPanelWidth: number;\n rightPanelWidth: number;\n previewFlexPercent: number;\n isAIPanelCollapsed: boolean;\n isLeftPanelCollapsed: boolean;\n isEditorPanelCollapsed: boolean;\n}\n\n/**\n * Result from the New Component dialog.\n */\nexport interface NewComponentResult {\n name: string;\n title: string;\n description: string;\n type: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-component-studio-dashboard',\n templateUrl: './component-studio-dashboard.component.html',\n styleUrls: ['./component-studio-dashboard.component.css'],\n providers: [ComponentStudioStateService, ComponentVersionService]\n})\n@RegisterClass(BaseDashboard, 'ComponentStudioDashboard')\nexport class ComponentStudioDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n\n private static readonly USER_PREFS_KEY = 'ComponentStudio.UserPreferences';\n\n // --- Panel widths ---\n public leftPanelWidth = 340;\n public rightPanelWidth = 380;\n public previewFlex = '1 1 50%';\n public editorFlex = '1 1 50%';\n private previewFlexPercent = 50;\n\n // --- Dropdown states ---\n public exportDropdownOpen = false;\n\n // --- Resize state ---\n public IsResizing = false;\n private resizeType: 'left' | 'right' | 'center' | null = null;\n private resizeStartX = 0;\n private resizeStartValue = 0;\n\n // --- Collapsible panels ---\n public IsLeftPanelCollapsed = false;\n public IsEditorPanelCollapsed = false;\n\n // --- Dialog states ---\n public ShowNewComponentDialog = false;\n public ShowKeyboardShortcuts = false;\n public ShowSaveVersionDialog = false;\n public ShowTextImportDialog = false;\n public ShowArtifactLoadDialog = false;\n public ShowArtifactSelectionDialog = false;\n\n // --- Status bar ---\n public LastSavedTime: Date | null = null;\n\n // --- Preferences ---\n private prefsLoaded = false;\n\n @ViewChild('fileInput', { static: false }) fileInput?: ElementRef<HTMLInputElement>;\n\n private destroy$ = new Subject<void>();\n private metadata: Metadata = new Metadata();\n\n constructor(\n public state: ComponentStudioStateService,\n public versionService: ComponentVersionService,\n private cdr: ChangeDetectorRef,\n private notificationService: MJNotificationService\n ) {\n super();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Component Studio';\n }\n\n async ngAfterViewInit() {\n this.initDashboard();\n\n // Subscribe to state changes for change detection\n this.state.StateChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.cdr.detectChanges();\n });\n\n this.loadUserPreferences();\n await this.state.LoadComponents();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard\n }\n\n protected loadData(): void {\n this.state.LoadComponents();\n }\n\n // ============================================================\n // USER PREFERENCES\n // ============================================================\n\n private loadUserPreferences(): void {\n try {\n const saved = UserInfoEngine.Instance.GetSetting(ComponentStudioDashboardComponent.USER_PREFS_KEY);\n if (saved) {\n const prefs = JSON.parse(saved) as ComponentStudioPreferences;\n this.applyPreferences(prefs);\n }\n } catch (error) {\n console.warn('[ComponentStudio] Failed to load user preferences:', error);\n } finally {\n this.prefsLoaded = true;\n }\n }\n\n private applyPreferences(prefs: ComponentStudioPreferences): void {\n if (prefs.leftPanelWidth) this.leftPanelWidth = prefs.leftPanelWidth;\n if (prefs.rightPanelWidth) this.rightPanelWidth = prefs.rightPanelWidth;\n if (prefs.previewFlexPercent) {\n this.previewFlexPercent = prefs.previewFlexPercent;\n this.previewFlex = `1 1 ${prefs.previewFlexPercent}%`;\n this.editorFlex = `1 1 ${100 - prefs.previewFlexPercent}%`;\n }\n if (prefs.isAIPanelCollapsed != null) {\n this.state.IsAIPanelCollapsed = prefs.isAIPanelCollapsed;\n }\n if (prefs.isLeftPanelCollapsed != null) {\n this.IsLeftPanelCollapsed = prefs.isLeftPanelCollapsed;\n }\n if (prefs.isEditorPanelCollapsed != null) {\n this.IsEditorPanelCollapsed = prefs.isEditorPanelCollapsed;\n }\n }\n\n private getCurrentPreferences(): ComponentStudioPreferences {\n return {\n leftPanelWidth: this.leftPanelWidth,\n rightPanelWidth: this.rightPanelWidth,\n previewFlexPercent: this.previewFlexPercent,\n isAIPanelCollapsed: this.state.IsAIPanelCollapsed,\n isLeftPanelCollapsed: this.IsLeftPanelCollapsed,\n isEditorPanelCollapsed: this.IsEditorPanelCollapsed\n };\n }\n\n private saveUserPreferences(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSetting(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n private saveUserPreferencesDebounced(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSettingDebounced(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n // ============================================================\n // KEYBOARD SHORTCUTS\n // ============================================================\n\n @HostListener('document:keydown', ['$event'])\n OnKeyDown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n const isInputFocused = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n\n // Ctrl+S / Cmd+S = Save Version\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n event.preventDefault();\n if (this.state.SelectedComponent) {\n this.SaveVersion();\n }\n }\n\n // Ctrl+N / Cmd+N = New Component\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n event.preventDefault();\n this.OnNewComponent();\n }\n\n // Ctrl+/ or ? = Toggle keyboard shortcuts\n if ((event.ctrlKey || event.metaKey) && event.key === '/') {\n event.preventDefault();\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n } else if (event.key === '?' && !isInputFocused) {\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n }\n\n // Escape = Close overlays\n if (event.key === 'Escape') {\n if (this.ShowKeyboardShortcuts) {\n this.ShowKeyboardShortcuts = false;\n this.cdr.detectChanges();\n }\n }\n }\n\n // ============================================================\n // SAVE VERSION\n // ============================================================\n\n SaveVersion(): void {\n if (!this.state.SelectedComponent) return;\n this.ShowSaveVersionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnSaveVersionConfirm(result: SaveVersionResult): Promise<void> {\n this.ShowSaveVersionDialog = false;\n\n let success: boolean;\n if (result.Mode === 'update') {\n success = await this.versionService.UpdateCurrentVersion(result.Comment || undefined);\n } else {\n success = await this.versionService.SaveVersion(result.Comment || undefined);\n }\n\n if (success) {\n this.LastSavedTime = new Date();\n this.notificationService.CreateSimpleNotification(\n `Saved as v${this.versionService.CurrentVersionNumber}`,\n 'success',\n 3000\n );\n this.state.HasUnsavedChanges = false;\n } else {\n this.notificationService.CreateSimpleNotification(\n 'Failed to save version',\n 'error'\n );\n }\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // REFRESH COMPONENT\n // ============================================================\n\n RefreshComponent(): void {\n this.state.RefreshComponent.emit();\n }\n\n // ============================================================\n // AI PANEL\n // ============================================================\n\n ToggleAIPanel(): void {\n this.state.IsAIPanelCollapsed = !this.state.IsAIPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleLeftPanel(): void {\n this.IsLeftPanelCollapsed = !this.IsLeftPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleEditorPanel(): void {\n this.IsEditorPanelCollapsed = !this.IsEditorPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n OnAskAIToFix(error: ComponentError): void {\n // Open AI panel if collapsed\n if (this.state.IsAIPanelCollapsed) {\n this.state.IsAIPanelCollapsed = false;\n }\n // Send error to AI panel\n this.state.SendErrorToAI.emit(error);\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // NEW COMPONENT\n // ============================================================\n\n OnNewComponent(): void {\n this.ShowNewComponentDialog = true;\n this.cdr.detectChanges();\n }\n\n OnNewComponentDialogClose(result: NewComponentResult | null): void {\n this.ShowNewComponentDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n this.createComponentFromResult(result);\n this.cdr.detectChanges();\n }\n\n OnQuickStart(type: string): void {\n const typeNames: Record<string, string> = {\n dashboard: 'Dashboard',\n report: 'Report',\n chart: 'Chart',\n form: 'Form'\n };\n const typeName = typeNames[type] || 'Component';\n this.createComponentFromResult({\n name: `New ${typeName}`,\n title: `New ${typeName}`,\n description: '',\n type\n });\n }\n\n private createComponentFromResult(result: NewComponentResult): void {\n const newSpec: ComponentSpec = {\n name: result.name,\n title: result.title,\n description: result.description,\n type: result.type,\n location: 'embedded',\n exampleUsage: '',\n code: this.getTemplateCode(result.name, result.type),\n functionalRequirements: '',\n dataRequirements: { mode: 'views', entities: [], queries: [], description: '' },\n technicalDesign: ''\n } as ComponentSpec;\n\n const fileComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.name,\n description: result.description,\n specification: newSpec,\n filename: 'new-component.json',\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.type || 'Dashboard',\n status: 'New'\n };\n\n this.state.AddFileLoadedComponent(fileComponent);\n this.state.ExpandedComponent = fileComponent;\n this.state.RunComponent(fileComponent);\n }\n\n private getTemplateCode(name: string, type: string): string {\n return `function Component({ utilities, settings }) {\n const React = utilities.React;\n const { useState } = React;\n\n return React.createElement('div', {\n style: { padding: '24px', fontFamily: 'system-ui' }\n },\n React.createElement('h2', null, '${name}'),\n React.createElement('p', null, 'Start building your ${type || 'component'} here.')\n );\n}`;\n }\n\n // ============================================================\n // IMPORT / EXPORT\n // ============================================================\n\n ToggleExportDropdown(): void {\n this.exportDropdownOpen = !this.exportDropdownOpen;\n }\n\n @HostListener('document:click', ['$event'])\n OnDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.header-dropdown')) {\n this.exportDropdownOpen = false;\n }\n }\n\n ImportFromFile(): void {\n this.fileInput?.nativeElement.click();\n }\n\n ImportFromText(): void {\n this.ShowTextImportDialog = true;\n this.cdr.detectChanges();\n }\n\n OnTextImportSpec(spec: ComponentSpec): void {\n this.ShowTextImportDialog = false;\n this.handleSpecImport(spec, 'text-import.json', 'Text');\n this.cdr.detectChanges();\n }\n\n OnTextImportCancel(): void {\n this.ShowTextImportDialog = false;\n this.cdr.detectChanges();\n }\n\n ImportFromArtifact(): void {\n this.ShowArtifactLoadDialog = true;\n this.cdr.detectChanges();\n }\n\n OnArtifactLoadClose(result: ArtifactLoadResult | undefined): void {\n this.ShowArtifactLoadDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n\n const artifactComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.spec.name,\n description: result.spec.description,\n specification: result.spec,\n filename: `${result.artifactName} (v${result.versionNumber})`,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.spec.type || 'Component',\n status: 'Artifact',\n sourceArtifactID: result.artifactID,\n sourceVersionID: result.versionID\n };\n\n this.state.AddFileLoadedComponent(artifactComponent);\n this.state.ExpandedComponent = artifactComponent;\n this.state.RunComponent(artifactComponent);\n\n this.notificationService.CreateSimpleNotification(\n `Loaded \"${result.spec.name}\" from artifact`,\n 'success',\n 3000\n );\n this.cdr.detectChanges();\n }\n\n async HandleFileSelect(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file || !file.name.endsWith('.json')) return;\n\n try {\n const content = await this.readFile(file);\n const spec = JSON.parse(content) as ComponentSpec;\n if (!spec.name || !spec.code) {\n console.error('Invalid spec: missing name or code');\n return;\n }\n this.handleSpecImport(spec, file.name, 'File');\n input.value = '';\n } catch (error) {\n console.error('Error loading file:', error);\n }\n }\n\n private handleSpecImport(spec: ComponentSpec, filename: string, status: string): void {\n const component: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: spec.name,\n description: spec.description,\n specification: spec,\n filename,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: spec.type || 'Component',\n status\n };\n\n this.state.AddFileLoadedComponent(component);\n this.state.ExpandedComponent = component;\n this.state.RunComponent(component);\n }\n\n ExportToArtifact(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n this.ShowArtifactSelectionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnArtifactSelectionClose(result: ArtifactSelectionResult | undefined): Promise<void> {\n this.ShowArtifactSelectionDialog = false;\n if (!result?.action) {\n this.cdr.detectChanges();\n return;\n }\n\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n const artifact = result.artifact;\n let version: MJArtifactVersionEntity;\n\n if (result.action === 'update-version' && result.versionToUpdate) {\n version = result.versionToUpdate;\n } else {\n version = await this.metadata.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions');\n version.ArtifactID = artifact.ID;\n version.UserID = this.metadata.CurrentUser.ID;\n\n const rv = new RunView();\n const versionsResult = await rv.RunView<MJArtifactVersionEntity>({\n EntityName: 'MJ: Artifact Versions',\n ExtraFilter: `ArtifactID = '${artifact.ID}'`,\n OrderBy: 'VersionNumber DESC',\n MaxRows: 1,\n ResultType: 'entity_object'\n });\n\n version.VersionNumber = (versionsResult.Success && versionsResult.Results?.length > 0)\n ? versionsResult.Results[0].VersionNumber + 1\n : 1;\n }\n\n version.Content = JSON.stringify(currentSpec, null, 2);\n version.ContentHash = await this.generateSHA256Hash(version.Content);\n version.Name = currentSpec.name;\n version.Description = currentSpec.description || null;\n const timestamp = new Date().toISOString();\n const actionText = result.action === 'update-version' ? 'Updated' : 'Created';\n version.Comments = `${actionText} from Component Studio at ${timestamp}`;\n\n const saved = await version.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n `Saved as artifact version ${version.VersionNumber}`,\n 'success',\n 3000\n );\n } else {\n this.notificationService.CreateSimpleNotification('Failed to save artifact version', 'error');\n }\n } catch (error) {\n console.error('Error saving to artifact:', error);\n this.notificationService.CreateSimpleNotification('Error saving to artifact', 'error');\n }\n this.cdr.detectChanges();\n }\n\n ExportToFile(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n const componentName = this.state.GetComponentName(this.state.SelectedComponent);\n const filename = componentName.replace(/\\s+/g, '-').replace(/[^a-z0-9\\-]/gi, '-').toLowerCase() + '.json';\n const blob = new Blob([JSON.stringify(currentSpec, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n async ExportToClipboard(): Promise<void> {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n await navigator.clipboard.writeText(JSON.stringify(currentSpec, null, 2));\n this.notificationService.CreateSimpleNotification('Copied to clipboard', 'success', 2000);\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to copy to clipboard', 'error');\n }\n }\n\n async RefreshData(): Promise<void> {\n await this.state.LoadComponents();\n }\n\n // ============================================================\n // RESIZE HANDLERS\n // ============================================================\n\n OnLeftResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'left';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.leftPanelWidth;\n this.addResizeListeners();\n }\n\n OnRightResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'right';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.rightPanelWidth;\n this.addResizeListeners();\n }\n\n OnCenterResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'center';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.previewFlexPercent;\n this.addResizeListeners();\n }\n\n private addResizeListeners(): void {\n this.IsResizing = true;\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (this.resizeType === 'left') {\n const delta = event.clientX - this.resizeStartX;\n this.leftPanelWidth = Math.max(280, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'right') {\n const delta = this.resizeStartX - event.clientX;\n this.rightPanelWidth = Math.max(300, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'center') {\n const centerPanel = document.querySelector('.panel-center') as HTMLElement;\n if (centerPanel) {\n const rect = centerPanel.getBoundingClientRect();\n const relativeX = event.clientX - rect.left;\n const percent = Math.max(20, Math.min(80, (relativeX / rect.width) * 100));\n this.previewFlexPercent = percent;\n this.previewFlex = `1 1 ${percent}%`;\n this.editorFlex = `1 1 ${100 - percent}%`;\n }\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n this.IsResizing = false;\n this.resizeType = null;\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveUserPreferencesDebounced();\n };\n\n // ============================================================\n // HELPERS\n // ============================================================\n\n private readFile(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string);\n reader.onerror = reject;\n reader.readAsText(file);\n });\n }\n\n private async generateSHA256Hash(content: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","<div class=\"component-studio\" [class.resizing]=\"IsResizing\">\n\n <!-- ============================================================\n TOOLBAR — Unified bar with integrated breadcrumb\n Left: hamburger + breadcrumb context\n Right: Save | Export | divider | AI | Keyboard | Refresh\n ============================================================ -->\n <div class=\"studio-toolbar\">\n <div class=\"toolbar-context\">\n <!-- Toggle left panel -->\n <button class=\"tb-btn icon-only\" title=\"Toggle browser panel\" (click)=\"ToggleLeftPanel()\">\n <i class=\"fa-solid fa-bars\"></i>\n </button>\n\n @if (state.SelectedComponent) {\n <span class=\"breadcrumb-type\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.GetComponentType(state.SelectedComponent) || 'Component' }}\n </span>\n <span class=\"breadcrumb-sep\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <span class=\"component-label\">{{ state.GetComponentName(state.SelectedComponent) }}</span>\n\n @if (state.IsRunning) {\n <span class=\"running-badge\">\n <span class=\"running-dot-small\"></span>\n Running\n </span>\n }\n @if (state.HasUnsavedChanges) {\n <span class=\"unsaved-dot\" title=\"Unsaved changes\"></span>\n }\n }\n </div>\n\n <div class=\"toolbar-spacer\"></div>\n\n <div class=\"toolbar-actions\">\n <!-- Save Version -->\n @if (state.SelectedComponent) {\n <button class=\"tb-btn primary\" (click)=\"SaveVersion()\" title=\"Save version (Ctrl+S)\">\n <i class=\"fa-solid fa-save\"></i> Save\n </button>\n }\n\n <!-- Refresh Component -->\n @if (state.SelectedComponent && state.IsRunning) {\n <button class=\"tb-btn\" (click)=\"RefreshComponent()\" title=\"Refresh component\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n }\n\n <!-- Export -->\n @if (state.SelectedComponent && state.IsRunning) {\n <div class=\"header-dropdown\" [class.open]=\"exportDropdownOpen\">\n <button class=\"tb-btn\" (click)=\"ToggleExportDropdown()\">\n <i class=\"fa-solid fa-file-export\"></i> Export\n <i class=\"fa-solid fa-chevron-down dropdown-icon\"></i>\n </button>\n @if (exportDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"ExportToArtifact()\">\n <i class=\"fa-solid fa-save\"></i> To Artifact\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToFile()\">\n <i class=\"fa-solid fa-file\"></i> To File\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToClipboard()\">\n <i class=\"fa-solid fa-clipboard\"></i> To Clipboard\n </button>\n </div>\n }\n </div>\n }\n\n <span class=\"toolbar-divider\"></span>\n\n <!-- AI Panel Toggle -->\n <button class=\"tb-btn icon-only\" [class.active-toggle]=\"!state.IsAIPanelCollapsed\"\n (click)=\"ToggleAIPanel()\"\n [title]=\"state.IsAIPanelCollapsed ? 'Show AI Assistant' : 'Hide AI Assistant'\">\n <i class=\"fa-solid fa-robot\"></i>\n </button>\n\n <!-- Keyboard Shortcuts -->\n <button class=\"tb-btn icon-only\" (click)=\"ShowKeyboardShortcuts = !ShowKeyboardShortcuts\"\n title=\"Keyboard shortcuts (?)\">\n <i class=\"fa-solid fa-keyboard\"></i>\n </button>\n\n <!-- Refresh -->\n <button class=\"tb-btn icon-only\" (click)=\"RefreshData()\" [disabled]=\"state.IsLoading\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n\n <!-- Hidden file input -->\n <input #fileInput type=\"file\" accept=\".json\" (change)=\"HandleFileSelect($event)\" style=\"display: none;\" />\n </div>\n\n <!-- ============================================================\n THREE-PANEL BODY\n ============================================================ -->\n <div class=\"studio-body\">\n\n <!-- Left Panel: Component Browser (collapsible) -->\n @if (!IsLeftPanelCollapsed) {\n <div class=\"panel panel-left\" [style.width.px]=\"leftPanelWidth\">\n <mj-component-browser\n (NewComponent)=\"OnNewComponent()\"\n (ImportFromFile)=\"ImportFromFile()\"\n (ImportFromText)=\"ImportFromText()\"\n (ImportFromArtifact)=\"ImportFromArtifact()\">\n </mj-component-browser>\n </div>\n\n <!-- Resize Handle: Left <-> Center -->\n <div class=\"resize-handle\" (mousedown)=\"OnLeftResizeStart($event)\"></div>\n }\n\n <!-- Center Panel: Workspace (side-by-side: Preview LEFT, Editor RIGHT) -->\n <div class=\"panel panel-center\">\n @if (state.SelectedComponent) {\n <!-- Preview (left side) -->\n <div class=\"workspace-preview\" [class.full-width]=\"IsEditorPanelCollapsed\" [style.flex]=\"IsEditorPanelCollapsed ? '1 1 100%' : previewFlex\">\n <div class=\"preview-sub-header\">\n <div class=\"preview-sub-left\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Preview</span>\n </div>\n <div class=\"preview-sub-right\">\n <!-- Toggle editor panel -->\n <button class=\"toggle-editors-btn\" [class.active]=\"!IsEditorPanelCollapsed\"\n (click)=\"ToggleEditorPanel()\" title=\"Toggle editor panel\">\n <i class=\"fa-solid fa-columns\"></i>\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <mj-component-preview\n (AskAIToFix)=\"OnAskAIToFix($event)\">\n </mj-component-preview>\n </div>\n </div>\n\n <!-- Resize Handle: Preview <-> Editor (obvious center divider) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"resize-handle center-divider\" (mousedown)=\"OnCenterResizeStart($event)\">\n <div class=\"divider-grip\"></div>\n </div>\n }\n\n <!-- Editor Tabs (right side, collapsible) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"workspace-editors\" [style.flex]=\"editorFlex\">\n <mj-editor-tabs></mj-editor-tabs>\n </div>\n }\n } @else {\n <!-- Enhanced Empty State -->\n <div class=\"empty-state\">\n <div class=\"empty-state-content\">\n <div class=\"empty-state-icon\">\n <i class=\"fa-solid fa-rocket\"></i>\n </div>\n <h2>Ready to Build</h2>\n <p>Select a component from the browser or create a new one to get started</p>\n <div class=\"empty-state-actions\">\n <button mjButton variant=\"primary\" (click)=\"OnNewComponent()\">\n <span class=\"fa-solid fa-plus\"></span> New Component\n </button>\n <button mjButton (click)=\"ImportFromFile()\">\n <span class=\"fa-solid fa-file-import\"></span> Import\n </button>\n </div>\n <div class=\"quick-start-templates\">\n <span class=\"quick-start-label\">Quick start:</span>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('dashboard')\">\n <i class=\"fa-solid fa-chart-line\"></i> Dashboard\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('report')\">\n <i class=\"fa-solid fa-file-alt\"></i> Report\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('chart')\">\n <i class=\"fa-solid fa-chart-pie\"></i> Chart\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('form')\">\n <i class=\"fa-solid fa-edit\"></i> Form\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Resize Handle: Center <-> Right -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"resize-handle\" (mousedown)=\"OnRightResizeStart($event)\"></div>\n }\n\n <!-- Right Panel: AI Assistant -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"panel panel-right\" [style.width.px]=\"rightPanelWidth\">\n <mj-ai-assistant-panel></mj-ai-assistant-panel>\n </div>\n }\n </div>\n\n <!-- ============================================================\n STATUS BAR\n ============================================================ -->\n <div class=\"status-bar\">\n <div class=\"status-left\">\n <span class=\"status-item\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.FilteredComponents.length }} component{{ state.FilteredComponents.length !== 1 ? 's' : '' }}\n </span>\n </div>\n <div class=\"status-right\">\n @if (LastSavedTime) {\n <span class=\"status-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n Saved {{ LastSavedTime | date:'shortTime' }}\n </span>\n }\n <span class=\"status-item shortcut-hint\">\n <kbd>?</kbd> Shortcuts\n </span>\n </div>\n </div>\n\n <!-- ============================================================\n KEYBOARD SHORTCUTS OVERLAY\n ============================================================ -->\n @if (ShowKeyboardShortcuts) {\n <div class=\"shortcuts-overlay\" (click)=\"ShowKeyboardShortcuts = false\">\n <div class=\"shortcuts-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"shortcuts-header\">\n <h3>Keyboard Shortcuts</h3>\n <button class=\"shortcuts-close\" (click)=\"ShowKeyboardShortcuts = false\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcuts-body\">\n <div class=\"shortcut-group\">\n <h4>General</h4>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>S</kbd></span>\n <span class=\"shortcut-desc\">Save version</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>N</kbd></span>\n <span class=\"shortcut-desc\">New component</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>?</kbd></span>\n <span class=\"shortcut-desc\">Toggle shortcuts</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Esc</kbd></span>\n <span class=\"shortcut-desc\">Close overlay</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ============================================================\n NEW COMPONENT DIALOG\n ============================================================ -->\n @if (ShowNewComponentDialog) {\n <mj-new-component-dialog\n [Visible]=\"ShowNewComponentDialog\"\n (Close)=\"OnNewComponentDialogClose($event)\">\n </mj-new-component-dialog>\n }\n\n @if (ShowSaveVersionDialog) {\n <mj-save-version-dialog\n [Visible]=\"ShowSaveVersionDialog\"\n [CurrentVersion]=\"versionService.CurrentVersionNumber\"\n (Save)=\"OnSaveVersionConfirm($event)\"\n (Cancel)=\"ShowSaveVersionDialog = false\">\n </mj-save-version-dialog>\n }\n\n <!-- Text Import Dialog -->\n @if (ShowTextImportDialog) {\n <mj-dialog [Visible]=\"true\" Title=\"Import Component from Text\" (Close)=\"OnTextImportCancel()\" [Width]=\"700\" [MinWidth]=\"500\">\n <app-text-import-dialog\n (importSpec)=\"OnTextImportSpec($event)\"\n (cancelDialog)=\"OnTextImportCancel()\">\n </app-text-import-dialog>\n </mj-dialog>\n }\n\n <!-- Artifact Load Dialog -->\n @if (ShowArtifactLoadDialog) {\n <app-artifact-load-dialog\n [Visible]=\"ShowArtifactLoadDialog\"\n (Close)=\"OnArtifactLoadClose($event)\">\n </app-artifact-load-dialog>\n }\n\n <!-- Artifact Selection Dialog -->\n @if (ShowArtifactSelectionDialog) {\n <app-artifact-selection-dialog\n [Visible]=\"ShowArtifactSelectionDialog\"\n (Close)=\"OnArtifactSelectionClose($event)\">\n </app-artifact-selection-dialog>\n }\n</div>\n"]}
@@ -1,5 +1,4 @@
1
- import { OnInit, OnDestroy } from '@angular/core';
2
- import { DialogRef } from '@progress/kendo-angular-dialog';
1
+ import { OnInit, OnDestroy, EventEmitter } from '@angular/core';
3
2
  import { MJArtifactEntity, MJArtifactVersionEntity, MJCollectionEntity } from '@memberjunction/core-entities';
4
3
  import { ComponentSpec } from '@memberjunction/interactive-component-types';
5
4
  import * as i0 from "@angular/core";
@@ -11,7 +10,8 @@ export interface ArtifactLoadResult {
11
10
  artifactName: string;
12
11
  }
13
12
  export declare class ArtifactLoadDialogComponent implements OnInit, OnDestroy {
14
- dialog: DialogRef;
13
+ Visible: boolean;
14
+ Close: EventEmitter<ArtifactLoadResult | undefined>;
15
15
  activeTab: number;
16
16
  artifacts: MJArtifactEntity[];
17
17
  artifactVersions: MJArtifactVersionEntity[];
@@ -37,7 +37,6 @@ export declare class ArtifactLoadDialogComponent implements OnInit, OnDestroy {
37
37
  private metadata;
38
38
  private destroy$;
39
39
  private searchSubject;
40
- constructor(dialog: DialogRef);
41
40
  ngOnInit(): Promise<void>;
42
41
  ngOnDestroy(): void;
43
42
  loadArtifacts(): Promise<void>;
@@ -72,6 +71,6 @@ export declare class ArtifactLoadDialogComponent implements OnInit, OnDestroy {
72
71
  /** Case-insensitive UUID check whether a version is the currently selected version. */
73
72
  IsVersionSelected(version: MJArtifactVersionEntity): boolean;
74
73
  static ɵfac: i0.ɵɵFactoryDeclaration<ArtifactLoadDialogComponent, never>;
75
- static ɵcmp: i0.ɵɵComponentDeclaration<ArtifactLoadDialogComponent, "app-artifact-load-dialog", never, {}, {}, never, never, false, never>;
74
+ static ɵcmp: i0.ɵɵComponentDeclaration<ArtifactLoadDialogComponent, "app-artifact-load-dialog", never, { "Visible": { "alias": "Visible"; "required": false; }; }, { "Close": "Close"; }, never, never, false, never>;
76
75
  }
77
76
  //# sourceMappingURL=artifact-load-dialog.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-load-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/ComponentStudio/components/artifact-load-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;;AAM5E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAMa,2BAA4B,YAAW,MAAM,EAAE,SAAS;IAyChD,MAAM,EAAE,SAAS;IAvCpC,SAAS,SAAK;IAGd,SAAS,EAAE,gBAAgB,EAAE,CAAM;IACnC,gBAAgB,EAAE,uBAAuB,EAAE,CAAM;IACjD,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IACjD,eAAe,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IAGvD,WAAW,EAAE,kBAAkB,EAAE,CAAM;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IACrD,mBAAmB,EAAE,gBAAgB,EAAE,CAAM;IAG7C,UAAU,SAAM;IAChB,oBAAoB,SAAM;IAC1B,SAAS,SAAM;IAGf,WAAW,SAAK;IAChB,QAAQ,SAAM;IACd,cAAc,SAAK;IACnB,YAAY,UAAS;IAGrB,SAAS,UAAQ;IACjB,iBAAiB,UAAS;IAC1B,oBAAoB,UAAS;IAC7B,sBAAsB,UAAS;IAG/B,WAAW,EAAE,aAAa,GAAG,IAAI,CAAQ;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,eAAe,UAAS;IAExB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAyB;gBAE3B,MAAM,EAAE,SAAS;IAE9B,QAAQ;IAgBd,WAAW;IAKL,aAAa;IA4Bb,eAAe;IA+Bf,gBAAgB,CAAC,UAAU,EAAE,kBAAkB;IA8BrD,OAAO,CAAC,mBAAmB;IA0BrB,cAAc,CAAC,QAAQ,EAAE,gBAAgB;IASzC,YAAY,CAAC,UAAU,EAAE,MAAM;IA2B/B,aAAa,CAAC,OAAO,EAAE,uBAAuB;IAK9C,WAAW,CAAC,OAAO,EAAE,uBAAuB;IA4B5C,eAAe;IAKrB,aAAa;IAIb,oBAAoB;IAOd,QAAQ;IAOR,YAAY;IAOlB,SAAS,IAAI,OAAO;IAIpB,aAAa,IAAI,OAAO;IAIxB,aAAa,IAAI,MAAM;IAIvB,iBAAiB;IAIjB,oBAAoB,IAAI,MAAM;IAQ9B,OAAO,IAAI,OAAO;IAMlB,MAAM;IAIN,IAAI;IAcJ,WAAW,CAAC,KAAK,EAAE,MAAM;IAIzB,iBAAiB,IAAI,gBAAgB,EAAE;IAIvC,iBAAiB,IAAI,IAAI;IAIzB,cAAc,IAAI,MAAM;IAIxB,0FAA0F;IAC1F,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO;IAIvD,6FAA6F;IAC7F,oBAAoB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO;IAI7D,uFAAuF;IACvF,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO;yCAjWjD,2BAA2B;2CAA3B,2BAA2B;CAoWvC"}
1
+ {"version":3,"file":"artifact-load-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/ComponentStudio/components/artifact-load-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAiB,YAAY,EAAE,MAAM,eAAe,CAAC;AAE1F,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;;AAM5E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAMa,2BAA4B,YAAW,MAAM,EAAE,SAAS;IAC1D,OAAO,UAAS;IACf,KAAK,+CAAsD;IAGrE,SAAS,SAAK;IAGd,SAAS,EAAE,gBAAgB,EAAE,CAAM;IACnC,gBAAgB,EAAE,uBAAuB,EAAE,CAAM;IACjD,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IACjD,eAAe,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IAGvD,WAAW,EAAE,kBAAkB,EAAE,CAAM;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IACrD,mBAAmB,EAAE,gBAAgB,EAAE,CAAM;IAG7C,UAAU,SAAM;IAChB,oBAAoB,SAAM;IAC1B,SAAS,SAAM;IAGf,WAAW,SAAK;IAChB,QAAQ,SAAM;IACd,cAAc,SAAK;IACnB,YAAY,UAAS;IAGrB,SAAS,UAAQ;IACjB,iBAAiB,UAAS;IAC1B,oBAAoB,UAAS;IAC7B,sBAAsB,UAAS;IAG/B,WAAW,EAAE,aAAa,GAAG,IAAI,CAAQ;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,eAAe,UAAS;IAExB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAyB;IAExC,QAAQ;IAgBd,WAAW;IAKL,aAAa;IA4Bb,eAAe;IA+Bf,gBAAgB,CAAC,UAAU,EAAE,kBAAkB;IA8BrD,OAAO,CAAC,mBAAmB;IA0BrB,cAAc,CAAC,QAAQ,EAAE,gBAAgB;IASzC,YAAY,CAAC,UAAU,EAAE,MAAM;IA2B/B,aAAa,CAAC,OAAO,EAAE,uBAAuB;IAK9C,WAAW,CAAC,OAAO,EAAE,uBAAuB;IA4B5C,eAAe;IAKrB,aAAa;IAIb,oBAAoB;IAOd,QAAQ;IAOR,YAAY;IAOlB,SAAS,IAAI,OAAO;IAIpB,aAAa,IAAI,OAAO;IAIxB,aAAa,IAAI,MAAM;IAIvB,iBAAiB;IAIjB,oBAAoB,IAAI,MAAM;IAQ9B,OAAO,IAAI,OAAO;IAMlB,MAAM;IAIN,IAAI;IAcJ,WAAW,CAAC,KAAK,EAAE,MAAM;IAIzB,iBAAiB,IAAI,gBAAgB,EAAE;IAIvC,iBAAiB,IAAI,IAAI;IAIzB,cAAc,IAAI,MAAM;IAIxB,0FAA0F;IAC1F,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO;IAIvD,6FAA6F;IAC7F,oBAAoB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO;IAI7D,uFAAuF;IACvF,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO;yCAlWjD,2BAA2B;2CAA3B,2BAA2B;CAqWvC"}