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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +35 -0
  2. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
  3. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  4. package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
  6. package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
  7. package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
  8. package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
  9. package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
  10. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
  11. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
  13. package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
  14. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
  15. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  16. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +21 -13
  17. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  18. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
  19. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
  20. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
  21. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
  22. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
  23. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  24. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
  25. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  27. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
  28. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  29. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
  30. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  31. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +210 -57
  32. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  33. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
  34. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
  35. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
  36. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
  37. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  38. package/dist/AI/components/execution-monitoring.component.js +28 -16
  39. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  40. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
  41. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  42. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +32 -8
  43. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  44. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
  45. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  46. package/dist/AI/components/tags/tags-resource.component.js +18 -9
  47. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  48. package/dist/AI/components/vectors/sensitive-fields.d.ts +9 -4
  49. package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -1
  50. package/dist/AI/components/vectors/sensitive-fields.js +39 -14
  51. package/dist/AI/components/vectors/sensitive-fields.js.map +1 -1
  52. package/dist/AI/components/vectors/vector-document-rules.d.ts +13 -0
  53. package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -1
  54. package/dist/AI/components/vectors/vector-document-rules.js +14 -0
  55. package/dist/AI/components/vectors/vector-document-rules.js.map +1 -1
  56. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +34 -14
  57. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  58. package/dist/AI/components/vectors/vector-management-resource.component.js +134 -51
  59. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  60. package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
  61. package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
  62. package/dist/AI/components/vectors/vector-store-selection.js +57 -0
  63. package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
  64. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  65. package/dist/AI/services/ai-instrumentation.service.js +4 -2
  66. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  67. package/dist/Actions/action-result-code.d.ts +80 -0
  68. package/dist/Actions/action-result-code.d.ts.map +1 -0
  69. package/dist/Actions/action-result-code.js +163 -0
  70. package/dist/Actions/action-result-code.js.map +1 -0
  71. package/dist/Actions/components/actions-overview.component.d.ts +8 -0
  72. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  73. package/dist/Actions/components/actions-overview.component.js +12 -9
  74. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  75. package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
  76. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  77. package/dist/Actions/components/execution-monitoring.component.js +65 -42
  78. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  79. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/action-card.component.js +5 -4
  81. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  82. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +198 -0
  83. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
  84. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +289 -0
  85. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
  86. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
  87. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
  88. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
  89. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
  90. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
  91. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
  92. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
  93. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
  94. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
  95. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
  96. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
  97. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
  98. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
  99. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
  100. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
  101. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
  102. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
  103. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
  104. package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
  105. package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
  106. package/dist/ChiefOfStaff/index.d.ts +6 -0
  107. package/dist/ChiefOfStaff/index.d.ts.map +1 -0
  108. package/dist/ChiefOfStaff/index.js +6 -0
  109. package/dist/ChiefOfStaff/index.js.map +1 -0
  110. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  111. package/dist/Communication/communication-logs-resource.component.js +2 -1
  112. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  113. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  114. package/dist/Communication/communication-monitor-resource.component.js +26 -21
  115. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  116. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  117. package/dist/Communication/communication-runs-resource.component.js +14 -13
  118. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  119. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  120. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  121. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  122. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  123. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
  124. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  125. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  126. package/dist/ComponentStudio/services/component-version.service.js +3 -0
  127. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  128. package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
  129. package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
  130. package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
  131. package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
  132. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +45 -2
  133. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  134. package/dist/DataExplorer/data-explorer-dashboard.component.js +178 -55
  135. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  136. package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
  137. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  138. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  139. package/dist/DevTools/graphql-console.component.js +2 -2
  140. package/dist/DevTools/lazy-module-status.component.js +2 -2
  141. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
  142. package/dist/FormBuilder/form-builder-resource.component.js +5 -0
  143. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
  144. package/dist/Integration/components/connections/connections.component.js +2 -2
  145. package/dist/Integration/services/integration-data.service.d.ts +1 -1
  146. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  147. package/dist/Integration/services/integration-data.service.js +4 -3
  148. package/dist/Integration/services/integration-data.service.js.map +1 -1
  149. package/dist/Lists/components/lists-browse-resource.component.js +1 -1
  150. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  151. package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
  152. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  153. package/dist/LoginStudio/login-studio-resource.component.d.ts +10 -2
  154. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
  155. package/dist/LoginStudio/login-studio-resource.component.js +111 -77
  156. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
  157. package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
  158. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  159. package/dist/MCP/mcp-dashboard.component.js +118 -65
  160. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  161. package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
  162. package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
  163. package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
  164. package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
  165. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
  166. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  167. package/dist/PredictiveStudio/components/ps-experiments.component.js +257 -521
  168. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  169. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
  170. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
  171. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +124 -251
  172. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
  173. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
  174. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  175. package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
  176. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  177. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
  178. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  179. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +338 -326
  180. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  181. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
  182. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
  183. package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
  184. package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
  185. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
  186. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  187. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +52 -2
  188. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  189. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
  190. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
  191. package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
  192. package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
  193. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
  194. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
  195. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
  196. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
  197. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
  198. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  199. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +186 -103
  200. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  201. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
  202. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  203. package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
  204. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  205. package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
  206. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  207. package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
  208. package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
  209. package/dist/UserRoutines/user-routines-resource.component.js +22 -4
  210. package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
  211. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  212. package/dist/VersionHistory/components/diff-resource.component.js +1 -0
  213. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  214. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
  215. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
  216. package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
  217. package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
  218. package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
  219. package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
  220. package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
  221. package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
  222. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
  223. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
  224. package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
  225. package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
  226. package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
  227. package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
  228. package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
  229. package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
  230. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
  231. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
  232. package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
  233. package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
  234. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
  235. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
  236. package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
  237. package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
  238. package/dist/VideoStudio/index.d.ts +12 -0
  239. package/dist/VideoStudio/index.d.ts.map +1 -0
  240. package/dist/VideoStudio/index.js +12 -0
  241. package/dist/VideoStudio/index.js.map +1 -0
  242. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
  243. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
  244. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
  245. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
  246. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
  247. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
  248. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
  249. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
  250. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
  251. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
  252. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
  253. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
  254. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
  255. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
  256. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
  257. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
  258. package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
  259. package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
  260. package/dist/VideoStudio/video-studio-agent-context.js +992 -0
  261. package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
  262. package/dist/ai-dashboards.module.d.ts +25 -21
  263. package/dist/ai-dashboards.module.d.ts.map +1 -1
  264. package/dist/ai-dashboards.module.js +25 -3
  265. package/dist/ai-dashboards.module.js.map +1 -1
  266. package/dist/module.d.ts +13 -12
  267. package/dist/module.d.ts.map +1 -1
  268. package/dist/module.js +7 -0
  269. package/dist/module.js.map +1 -1
  270. package/dist/public-api.d.ts +8 -0
  271. package/dist/public-api.d.ts.map +1 -1
  272. package/dist/public-api.js +10 -0
  273. package/dist/public-api.js.map +1 -1
  274. package/dist/shared/action-scheduled-job.d.ts.map +1 -1
  275. package/dist/shared/action-scheduled-job.js +2 -0
  276. package/dist/shared/action-scheduled-job.js.map +1 -1
  277. package/dist/video-studio-dashboards.module.d.ts +40 -0
  278. package/dist/video-studio-dashboards.module.d.ts.map +1 -0
  279. package/dist/video-studio-dashboards.module.js +159 -0
  280. package/dist/video-studio-dashboards.module.js.map +1 -0
  281. package/package.json +77 -71
  282. package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
  283. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
  284. package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
  285. package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
  286. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
  287. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
  288. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
  289. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
  290. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
  291. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
  292. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
  293. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
@@ -21,22 +21,22 @@ const _c2 = [[["", "headerTools", ""]], [["", "viewActions", ""]]];
21
21
  const _c3 = ["[headerTools]", "[viewActions]"];
22
22
  const _c4 = (a0, a1) => ({ $implicit: a0, Dashboard: a1 });
23
23
  function DashboardEditorComponent_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
24
- i0.ɵɵelement(0, "mj-stat-badge", 7);
24
+ i0.ɵɵelement(0, "mj-stat-badge", 8);
25
25
  } }
26
26
  function DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelementContainer(0, 10);
27
+ i0.ɵɵelementContainer(0, 11);
28
28
  } if (rf & 2) {
29
29
  const dashboard_r1 = i0.ɵɵnextContext(2);
30
30
  const ctx_r1 = i0.ɵɵnextContext();
31
31
  i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.TitleTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c4, dashboard_r1, dashboard_r1));
32
32
  } }
33
33
  function DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelement(0, "i", 14);
34
+ i0.ɵɵelement(0, "i", 15);
35
35
  } }
36
36
  function DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementStart(0, "h1", 11);
37
+ i0.ɵɵelementStart(0, "h1", 12);
38
38
  i0.ɵɵtext(1);
39
- i0.ɵɵconditionalCreate(2, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_1_Conditional_2_Template, 1, 0, "i", 14);
39
+ i0.ɵɵconditionalCreate(2, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_1_Conditional_2_Template, 1, 0, "i", 15);
40
40
  i0.ɵɵelementEnd();
41
41
  } if (rf & 2) {
42
42
  const dashboard_r1 = i0.ɵɵnextContext(2);
@@ -47,7 +47,7 @@ function DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_1_Temp
47
47
  i0.ɵɵconditional(ctx_r1.IsSharedWithUser ? 2 : -1);
48
48
  } }
49
49
  function DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
50
- i0.ɵɵelementStart(0, "p", 12);
50
+ i0.ɵɵelementStart(0, "p", 13);
51
51
  i0.ɵɵtext(1);
52
52
  i0.ɵɵelementEnd();
53
53
  } if (rf & 2) {
@@ -56,13 +56,13 @@ function DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_2_Temp
56
56
  i0.ɵɵtextInterpolate(dashboard_r1.Description);
57
57
  } }
58
58
  function DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
59
- i0.ɵɵelementStart(0, "p", 13);
59
+ i0.ɵɵelementStart(0, "p", 14);
60
60
  i0.ɵɵtext(1, "Add a description");
61
61
  i0.ɵɵelementEnd();
62
62
  } }
63
63
  function DashboardEditorComponent_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
64
- i0.ɵɵconditionalCreate(0, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_0_Template, 1, 5, "ng-container", 10)(1, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_1_Template, 3, 2, "h1", 11);
65
- i0.ɵɵconditionalCreate(2, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_2_Template, 2, 1, "p", 12)(3, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_3_Template, 2, 0, "p", 13);
64
+ i0.ɵɵconditionalCreate(0, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_0_Template, 1, 5, "ng-container", 11)(1, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_1_Template, 3, 2, "h1", 12);
65
+ i0.ɵɵconditionalCreate(2, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_2_Template, 2, 1, "p", 13)(3, DashboardEditorComponent_Conditional_0_Conditional_3_Conditional_3_Template, 2, 0, "p", 14);
66
66
  } if (rf & 2) {
67
67
  const dashboard_r1 = i0.ɵɵnextContext();
68
68
  const ctx_r1 = i0.ɵɵnextContext();
@@ -72,11 +72,11 @@ function DashboardEditorComponent_Conditional_0_Conditional_3_Template(rf, ctx)
72
72
  } }
73
73
  function DashboardEditorComponent_Conditional_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
74
74
  const _r3 = i0.ɵɵgetCurrentView();
75
- i0.ɵɵelementStart(0, "input", 15);
75
+ i0.ɵɵelementStart(0, "input", 16);
76
76
  i0.ɵɵtwoWayListener("ngModelChange", function DashboardEditorComponent_Conditional_0_Conditional_4_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditingName, $event) || (ctx_r1.EditingName = $event); return i0.ɵɵresetView($event); });
77
77
  i0.ɵɵlistener("blur", function DashboardEditorComponent_Conditional_0_Conditional_4_Template_input_blur_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnNameBlur()); });
78
78
  i0.ɵɵelementEnd();
79
- i0.ɵɵelementStart(1, "input", 16);
79
+ i0.ɵɵelementStart(1, "input", 17);
80
80
  i0.ɵɵtwoWayListener("ngModelChange", function DashboardEditorComponent_Conditional_0_Conditional_4_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditingDescription, $event) || (ctx_r1.EditingDescription = $event); return i0.ɵɵresetView($event); });
81
81
  i0.ɵɵelementEnd();
82
82
  } if (rf & 2) {
@@ -87,9 +87,9 @@ function DashboardEditorComponent_Conditional_0_Conditional_4_Template(rf, ctx)
87
87
  } }
88
88
  function DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
89
89
  const _r4 = i0.ɵɵgetCurrentView();
90
- i0.ɵɵelementStart(0, "button", 19);
90
+ i0.ɵɵelementStart(0, "button", 20);
91
91
  i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_0_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleFavorite()); });
92
- i0.ɵɵelement(1, "i", 20);
92
+ i0.ɵɵelement(1, "i", 21);
93
93
  i0.ɵɵelementEnd();
94
94
  } if (rf & 2) {
95
95
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -101,18 +101,18 @@ function DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_0_Temp
101
101
  } }
102
102
  function DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
103
103
  const _r5 = i0.ɵɵgetCurrentView();
104
- i0.ɵɵelementStart(0, "button", 21);
104
+ i0.ɵɵelementStart(0, "button", 22);
105
105
  i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const dashboard_r1 = i0.ɵɵnextContext(2); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenInDashboardsRequested.emit(dashboard_r1)); });
106
- i0.ɵɵelement(1, "i", 22);
106
+ i0.ɵɵelement(1, "i", 23);
107
107
  i0.ɵɵtext(2, " Open in Dashboards ");
108
108
  i0.ɵɵelementEnd();
109
109
  } }
110
110
  function DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_3_Template(rf, ctx) { if (rf & 1) {
111
111
  const _r6 = i0.ɵɵgetCurrentView();
112
- i0.ɵɵelement(0, "span", 23);
113
- i0.ɵɵelementStart(1, "button", 24);
112
+ i0.ɵɵelement(0, "span", 24);
113
+ i0.ɵɵelementStart(1, "button", 25);
114
114
  i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.EnterEditMode()); });
115
- i0.ɵɵelement(2, "i", 25);
115
+ i0.ɵɵelement(2, "i", 26);
116
116
  i0.ɵɵtext(3, " Edit ");
117
117
  i0.ɵɵelementEnd();
118
118
  } if (rf & 2) {
@@ -121,9 +121,9 @@ function DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_3_Temp
121
121
  i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
122
122
  } }
123
123
  function DashboardEditorComponent_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
124
- i0.ɵɵconditionalCreate(0, DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_0_Template, 2, 6, "button", 17);
124
+ i0.ɵɵconditionalCreate(0, DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_0_Template, 2, 6, "button", 18);
125
125
  i0.ɵɵprojection(1, 1);
126
- i0.ɵɵconditionalCreate(2, DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_2_Template, 3, 0, "button", 18);
126
+ i0.ɵɵconditionalCreate(2, DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_2_Template, 3, 0, "button", 19);
127
127
  i0.ɵɵconditionalCreate(3, DashboardEditorComponent_Conditional_0_Conditional_7_Conditional_3_Template, 4, 1);
128
128
  } if (rf & 2) {
129
129
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -135,24 +135,31 @@ function DashboardEditorComponent_Conditional_0_Conditional_7_Template(rf, ctx)
135
135
  } }
136
136
  function DashboardEditorComponent_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
137
137
  const _r7 = i0.ɵɵgetCurrentView();
138
- i0.ɵɵelementStart(0, "button", 26);
138
+ i0.ɵɵelementStart(0, "button", 27);
139
139
  i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenAddPartDialog()); });
140
- i0.ɵɵelement(1, "i", 27);
140
+ i0.ɵɵelement(1, "i", 28);
141
141
  i0.ɵɵtext(2, " Add part ");
142
142
  i0.ɵɵelementEnd();
143
- i0.ɵɵelement(3, "span", 23);
144
- i0.ɵɵelementStart(4, "button", 28);
145
- i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_8_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SaveDashboard()); });
146
- i0.ɵɵelement(5, "i", 20);
147
- i0.ɵɵtext(6);
143
+ i0.ɵɵelementStart(3, "button", 29);
144
+ i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_8_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenPropertiesDialog()); });
145
+ i0.ɵɵelement(4, "i", 30);
146
+ i0.ɵɵtext(5, " Properties ");
148
147
  i0.ɵɵelementEnd();
149
- i0.ɵɵelementStart(7, "button", 29);
150
- i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_8_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CancelEdit()); });
151
- i0.ɵɵtext(8, "Cancel");
148
+ i0.ɵɵelement(6, "span", 24);
149
+ i0.ɵɵelementStart(7, "button", 31);
150
+ i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_8_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SaveDashboard()); });
151
+ i0.ɵɵelement(8, "i", 21);
152
+ i0.ɵɵtext(9);
153
+ i0.ɵɵelementEnd();
154
+ i0.ɵɵelementStart(10, "button", 32);
155
+ i0.ɵɵlistener("click", function DashboardEditorComponent_Conditional_0_Conditional_8_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CancelEdit()); });
156
+ i0.ɵɵtext(11, "Cancel");
152
157
  i0.ɵɵelementEnd();
153
158
  } if (rf & 2) {
154
159
  const ctx_r1 = i0.ɵɵnextContext(2);
155
160
  i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
161
+ i0.ɵɵadvance(3);
162
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
156
163
  i0.ɵɵadvance(4);
157
164
  i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
158
165
  i0.ɵɵadvance();
@@ -163,14 +170,14 @@ function DashboardEditorComponent_Conditional_0_Conditional_8_Template(rf, ctx)
163
170
  i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
164
171
  } }
165
172
  function DashboardEditorComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
166
- i0.ɵɵelementStart(0, "header", 6);
167
- i0.ɵɵconditionalCreate(1, DashboardEditorComponent_Conditional_0_Conditional_1_Template, 1, 0, "mj-stat-badge", 7);
168
- i0.ɵɵelementStart(2, "div", 8);
173
+ i0.ɵɵelementStart(0, "header", 7);
174
+ i0.ɵɵconditionalCreate(1, DashboardEditorComponent_Conditional_0_Conditional_1_Template, 1, 0, "mj-stat-badge", 8);
175
+ i0.ɵɵelementStart(2, "div", 9);
169
176
  i0.ɵɵconditionalCreate(3, DashboardEditorComponent_Conditional_0_Conditional_3_Template, 4, 2)(4, DashboardEditorComponent_Conditional_0_Conditional_4_Template, 2, 2);
170
177
  i0.ɵɵelementEnd();
171
- i0.ɵɵelementStart(5, "div", 9);
178
+ i0.ɵɵelementStart(5, "div", 10);
172
179
  i0.ɵɵprojection(6);
173
- i0.ɵɵconditionalCreate(7, DashboardEditorComponent_Conditional_0_Conditional_7_Template, 4, 3)(8, DashboardEditorComponent_Conditional_0_Conditional_8_Template, 9, 6);
180
+ i0.ɵɵconditionalCreate(7, DashboardEditorComponent_Conditional_0_Conditional_7_Template, 4, 3)(8, DashboardEditorComponent_Conditional_0_Conditional_8_Template, 12, 7);
174
181
  i0.ɵɵelementEnd()();
175
182
  } if (rf & 2) {
176
183
  const ctx_r1 = i0.ɵɵnextContext();
@@ -184,12 +191,21 @@ function DashboardEditorComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
184
191
  } }
185
192
  function DashboardEditorComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
186
193
  const _r8 = i0.ɵɵgetCurrentView();
187
- i0.ɵɵelementStart(0, "mj-dashboard-part-dialog", 30);
194
+ i0.ɵɵelementStart(0, "mj-dashboard-part-dialog", 33);
188
195
  i0.ɵɵlistener("Saved", function DashboardEditorComponent_Conditional_6_Template_mj_dashboard_part_dialog_Saved_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPartDialogSaved($event)); })("Cancelled", function DashboardEditorComponent_Conditional_6_Template_mj_dashboard_part_dialog_Cancelled_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ClosePartDialog()); });
189
196
  i0.ɵɵelementEnd();
190
197
  } if (rf & 2) {
191
198
  const ctx_r1 = i0.ɵɵnextContext();
192
- i0.ɵɵproperty("Visible", true)("Mode", ctx_r1.PartDialogMode)("PartTypes", ctx_r1.PartTypes)("Panel", ctx_r1.EditPartPanel)("Provider", ctx_r1.Provider);
199
+ i0.ɵɵproperty("Visible", true)("Mode", ctx_r1.PartDialogMode)("PartTypes", ctx_r1.PartTypes)("Panel", ctx_r1.EditPartPanel)("Provider", ctx_r1.Provider)("DashboardProperties", ctx_r1.DashboardProperties);
200
+ } }
201
+ function DashboardEditorComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
202
+ const _r9 = i0.ɵɵgetCurrentView();
203
+ i0.ɵɵelementStart(0, "mj-dashboard-properties-dialog", 34);
204
+ i0.ɵɵlistener("Saved", function DashboardEditorComponent_Conditional_7_Template_mj_dashboard_properties_dialog_Saved_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPropertiesDialogSaved($event)); })("Cancelled", function DashboardEditorComponent_Conditional_7_Template_mj_dashboard_properties_dialog_Cancelled_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ClosePartDialog()); });
205
+ i0.ɵɵelementEnd();
206
+ } if (rf & 2) {
207
+ const ctx_r1 = i0.ɵɵnextContext();
208
+ i0.ɵɵproperty("Visible", true)("Properties", ctx_r1.DashboardProperties)("Wires", ctx_r1.DashboardWires)("Panels", ctx_r1.PropertiesDialogPanels)("Provider", ctx_r1.Provider);
193
209
  } }
194
210
  /** The entity of the dashboard records DashboardEngine caches. */
195
211
  const DASHBOARDS_ENTITY_NAME = 'MJ: Dashboards';
@@ -201,6 +217,9 @@ const KEPT_EDITING = 'The user kept editing: the dashboard was saved elsewhere.'
201
217
  const DASHBOARD_CHANGED_BEFORE_SAVE = 'The editor shows another dashboard now. The dashboard was not saved.';
202
218
  /** The part types offered while no viewer is open: one empty list, so change detection sees a stable value. */
203
219
  const NO_PART_TYPES = [];
220
+ /** The properties and wires of a dashboard without any: stable empty lists for change detection. */
221
+ const NO_PROPERTIES = [];
222
+ const NO_WIRES = [];
204
223
  /** Permissions before a dashboard loads: nothing is allowed, so no Edit button flashes. */
205
224
  const NO_PERMISSIONS = {
206
225
  DashboardID: '', CanRead: false, CanEdit: false, CanDelete: false, CanShare: false, IsOwner: false, PermissionSource: 'none',
@@ -299,6 +318,10 @@ export class DashboardEditorComponent extends BaseAngularComponent {
299
318
  PartDialogMode = null;
300
319
  /** The part the part dialog edits in edit mode. */
301
320
  EditPartPanel = null;
321
+ /** True while the dashboard's Properties and wires dialog is open. */
322
+ PropertiesDialogOpen = false;
323
+ /** The dashboard's parts when the Properties and wires dialog opened. */
324
+ PropertiesDialogPanels = [];
302
325
  _dashboard = null;
303
326
  viewer = null;
304
327
  viewerRef = null;
@@ -324,6 +347,10 @@ export class DashboardEditorComponent extends BaseAngularComponent {
324
347
  get CanEdit() { return this.Permissions.CanEdit; }
325
348
  /** The part types the part dialog offers: the viewer's part types. */
326
349
  get PartTypes() { return this.viewer?.GetPartTypes() ?? NO_PART_TYPES; }
350
+ /** The dashboard's properties, which the part dialog maps onto a part's inputs. */
351
+ get DashboardProperties() { return this.viewer?.GetDashboardProperties() ?? NO_PROPERTIES; }
352
+ /** The dashboard's wires. */
353
+ get DashboardWires() { return this.viewer?.GetWires() ?? NO_WIRES; }
327
354
  /** True when someone else owns the dashboard and shared it with the user. */
328
355
  get IsSharedWithUser() { return !this.Permissions.IsOwner && this.Permissions.PermissionSource !== 'none'; }
329
356
  /** True when the shown dashboard is one of the user's favorites. False when the favorites cannot be read. */
@@ -714,10 +741,15 @@ export class DashboardEditorComponent extends BaseAngularComponent {
714
741
  SafeDetectChanges(this.cdr);
715
742
  return message;
716
743
  }
717
- /** Why a save failed: the thrown error, else the dashboard's failed save result. Empty when neither says. */
744
+ /**
745
+ * Why a save failed: the thrown error, else the viewer's refusal (a broken mapping or wire), else the
746
+ * dashboard's failed save result. Empty when none says.
747
+ */
718
748
  saveFailureReason(dashboard, error) {
719
749
  if (error !== undefined)
720
750
  return errorMessage(error);
751
+ if (this.viewer?.LastSaveError)
752
+ return this.viewer.LastSaveError;
721
753
  const latest = dashboard.LatestResult;
722
754
  return latest && !latest.Success ? latest.CompleteMessage : '';
723
755
  }
@@ -887,6 +919,22 @@ export class DashboardEditorComponent extends BaseAngularComponent {
887
919
  closePartDialogs() {
888
920
  this.PartDialogMode = null;
889
921
  this.EditPartPanel = null;
922
+ this.PropertiesDialogOpen = false;
923
+ this.PropertiesDialogPanels = [];
924
+ }
925
+ // ── Properties and wires ──────────────────────────────────
926
+ /** Opens the dashboard's Properties and wires dialog. Only while editing and not saving. */
927
+ OpenPropertiesDialog() {
928
+ if (!this.IsEditing || this.IsSaving || !this.viewer)
929
+ return;
930
+ this.PropertiesDialogPanels = ExtractPanelsFromLayout(this.viewer.getConfig()?.layout ?? null);
931
+ this.PropertiesDialogOpen = true;
932
+ SafeDetectChanges(this.cdr);
933
+ }
934
+ /** Applies the dialog's properties and wires to the viewer. They are saved with the dashboard's Save. */
935
+ async OnPropertiesDialogSaved(result) {
936
+ this.closePartDialogs();
937
+ await this.applyPartChange('Could not update the properties', v => v.SetPropertiesAndWires(result.Properties, result.Wires));
890
938
  }
891
939
  /**
892
940
  * Asks the user to confirm removing a part, then removes it. Changes nothing when the user cancels, or when the
@@ -952,13 +1000,14 @@ export class DashboardEditorComponent extends BaseAngularComponent {
952
1000
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.viewerHost = _t.first);
953
1001
  } }, hostVars: 2, hostBindings: function DashboardEditorComponent_HostBindings(rf, ctx) { if (rf & 2) {
954
1002
  i0.ɵɵclassProp("dashboard-editor--fill", ctx.IsFill);
955
- } }, inputs: { DashboardId: "DashboardId", StartInEditMode: "StartInEditMode", TitleTemplate: "TitleTemplate", ShowOpenInDashboards: "ShowOpenInDashboards", ShowFavorite: "ShowFavorite", BodyStyle: "BodyStyle" }, outputs: { StartInEditModeChange: "StartInEditModeChange", Loaded: "Loaded", LoadFailed: "LoadFailed", EditingChange: "EditingChange", Saved: "Saved", NameChanged: "NameChanged", ConfigChanged: "ConfigChanged", ReloadedFromSaved: "ReloadedFromSaved", FavoriteChange: "FavoriteChange", NavigationRequested: "NavigationRequested", OpenInDashboardsRequested: "OpenInDashboardsRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c3, decls: 7, vars: 4, consts: [["body", ""], ["viewerHost", ""], [1, "dashboard-editor-header", 3, "is-editing"], [1, "dashboard-editor-main"], [1, "dashboard-editor-body"], [3, "Visible", "Mode", "PartTypes", "Panel", "Provider"], [1, "dashboard-editor-header"], ["Variant", "info", "Icon", "fa-solid fa-pen", "Label", "Editing", 1, "dashboard-editor-badge"], [1, "dashboard-editor-namewrap"], [1, "dashboard-editor-actions"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "dashboard-editor-title"], [1, "dashboard-editor-desc"], [1, "dashboard-editor-desc", "is-placeholder"], ["role", "img", "title", "Shared with you", "aria-label", "Shared with you", 1, "fa-solid", "fa-share-nodes", "dashboard-editor-shared"], ["type", "text", "aria-label", "Dashboard name", "placeholder", "Name this dashboard", 1, "mj-input", "dashboard-editor-name", 3, "ngModelChange", "blur", "ngModel"], ["type", "text", "aria-label", "Dashboard description", "placeholder", "Add a description", 1, "dashboard-editor-desc", "is-editable", 3, "ngModelChange", "ngModel"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", 1, "dashboard-editor-favorite", 3, "is-favorite", "title"], ["type", "button", "mjButton", "", "Variant", "secondary", "Size", "sm", 1, "dashboard-editor-open-in"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", 1, "dashboard-editor-favorite", 3, "click", "title"], ["aria-hidden", "true"], ["type", "button", "mjButton", "", "Variant", "secondary", "Size", "sm", 1, "dashboard-editor-open-in", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-up-right-from-square"], ["aria-hidden", "true", 1, "dashboard-editor-divider"], ["type", "button", "mjButton", "", "Variant", "primary", "Size", "sm", 1, "dashboard-editor-edit", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-pen"], ["type", "button", "mjButton", "", "Variant", "secondary", "Size", "sm", 1, "dashboard-editor-add-part", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], ["type", "button", "mjButton", "", "Variant", "primary", "Size", "sm", 1, "dashboard-editor-save", 3, "click", "disabled"], ["type", "button", "mjButton", "", "Variant", "flat", "Size", "sm", 1, "dashboard-editor-cancel", 3, "click", "disabled"], [3, "Saved", "Cancelled", "Visible", "Mode", "PartTypes", "Panel", "Provider"]], template: function DashboardEditorComponent_Template(rf, ctx) { if (rf & 1) {
1003
+ } }, inputs: { DashboardId: "DashboardId", StartInEditMode: "StartInEditMode", TitleTemplate: "TitleTemplate", ShowOpenInDashboards: "ShowOpenInDashboards", ShowFavorite: "ShowFavorite", BodyStyle: "BodyStyle" }, outputs: { StartInEditModeChange: "StartInEditModeChange", Loaded: "Loaded", LoadFailed: "LoadFailed", EditingChange: "EditingChange", Saved: "Saved", NameChanged: "NameChanged", ConfigChanged: "ConfigChanged", ReloadedFromSaved: "ReloadedFromSaved", FavoriteChange: "FavoriteChange", NavigationRequested: "NavigationRequested", OpenInDashboardsRequested: "OpenInDashboardsRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c3, decls: 8, vars: 5, consts: [["body", ""], ["viewerHost", ""], [1, "dashboard-editor-header", 3, "is-editing"], [1, "dashboard-editor-main"], [1, "dashboard-editor-body"], [3, "Visible", "Mode", "PartTypes", "Panel", "Provider", "DashboardProperties"], [3, "Visible", "Properties", "Wires", "Panels", "Provider"], [1, "dashboard-editor-header"], ["Variant", "info", "Icon", "fa-solid fa-pen", "Label", "Editing", 1, "dashboard-editor-badge"], [1, "dashboard-editor-namewrap"], [1, "dashboard-editor-actions"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "dashboard-editor-title"], [1, "dashboard-editor-desc"], [1, "dashboard-editor-desc", "is-placeholder"], ["role", "img", "title", "Shared with you", "aria-label", "Shared with you", 1, "fa-solid", "fa-share-nodes", "dashboard-editor-shared"], ["type", "text", "aria-label", "Dashboard name", "placeholder", "Name this dashboard", 1, "mj-input", "dashboard-editor-name", 3, "ngModelChange", "blur", "ngModel"], ["type", "text", "aria-label", "Dashboard description", "placeholder", "Add a description", 1, "dashboard-editor-desc", "is-editable", 3, "ngModelChange", "ngModel"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", 1, "dashboard-editor-favorite", 3, "is-favorite", "title"], ["type", "button", "mjButton", "", "Variant", "secondary", "Size", "sm", 1, "dashboard-editor-open-in"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", 1, "dashboard-editor-favorite", 3, "click", "title"], ["aria-hidden", "true"], ["type", "button", "mjButton", "", "Variant", "secondary", "Size", "sm", 1, "dashboard-editor-open-in", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-up-right-from-square"], ["aria-hidden", "true", 1, "dashboard-editor-divider"], ["type", "button", "mjButton", "", "Variant", "primary", "Size", "sm", 1, "dashboard-editor-edit", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-pen"], ["type", "button", "mjButton", "", "Variant", "secondary", "Size", "sm", 1, "dashboard-editor-add-part", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], ["type", "button", "mjButton", "", "Variant", "secondary", "Size", "sm", 1, "dashboard-editor-properties", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-sliders"], ["type", "button", "mjButton", "", "Variant", "primary", "Size", "sm", 1, "dashboard-editor-save", 3, "click", "disabled"], ["type", "button", "mjButton", "", "Variant", "flat", "Size", "sm", 1, "dashboard-editor-cancel", 3, "click", "disabled"], [3, "Saved", "Cancelled", "Visible", "Mode", "PartTypes", "Panel", "Provider", "DashboardProperties"], [3, "Saved", "Cancelled", "Visible", "Properties", "Wires", "Panels", "Provider"]], template: function DashboardEditorComponent_Template(rf, ctx) { if (rf & 1) {
956
1004
  i0.ɵɵprojectionDef(_c2);
957
1005
  i0.ɵɵconditionalCreate(0, DashboardEditorComponent_Conditional_0_Template, 9, 5, "header", 2);
958
1006
  i0.ɵɵelementStart(1, "div", 3)(2, "div", 4, 0);
959
1007
  i0.ɵɵelementContainer(4, null, 1);
960
1008
  i0.ɵɵelementEnd()();
961
- i0.ɵɵconditionalCreate(6, DashboardEditorComponent_Conditional_6_Template, 1, 5, "mj-dashboard-part-dialog", 5);
1009
+ i0.ɵɵconditionalCreate(6, DashboardEditorComponent_Conditional_6_Template, 1, 6, "mj-dashboard-part-dialog", 5);
1010
+ i0.ɵɵconditionalCreate(7, DashboardEditorComponent_Conditional_7_Template, 1, 5, "mj-dashboard-properties-dialog", 6);
962
1011
  } if (rf & 2) {
963
1012
  let tmp_2_0;
964
1013
  i0.ɵɵconditional((tmp_2_0 = ctx.Dashboard) ? 0 : -1, tmp_2_0);
@@ -966,11 +1015,13 @@ export class DashboardEditorComponent extends BaseAngularComponent {
966
1015
  i0.ɵɵclassProp("is-card", ctx.BodyStyle === "card");
967
1016
  i0.ɵɵadvance(5);
968
1017
  i0.ɵɵconditional(ctx.Dashboard && ctx.IsEditing && ctx.PartDialogMode ? 6 : -1);
969
- } }, dependencies: [i1.NgTemplateOutlet, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJButtonDirective, i3.MJStatBadgeComponent, i4.DashboardPartDialogComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; min-width: 0; min-height: 0; }\n.dashboard-editor--fill[_nghost-%COMP%] { height: 100%; }\n\n.dashboard-editor-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: var(--mj-space-4); flex-shrink: 0;\n min-height: 72px; padding: var(--mj-space-3) var(--mj-space-8);\n background: var(--mj-bg-surface); border-bottom: 1px solid var(--mj-border-default);\n}\n.dashboard-editor-namewrap[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n.dashboard-editor-title[_ngcontent-%COMP%] {\n margin: 0; font-size: var(--mj-text-lg); font-weight: var(--mj-font-bold); letter-spacing: var(--mj-tracking-tight);\n color: var(--mj-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.dashboard-editor-shared[_ngcontent-%COMP%] { margin-left: var(--mj-space-2); font-size: var(--mj-text-xs); color: var(--mj-brand-primary); }\n\n\n.dashboard-editor-name[_ngcontent-%COMP%] { max-width: 520px; font-size: var(--mj-text-lg); font-weight: var(--mj-font-bold); letter-spacing: var(--mj-tracking-tight); }\n\n.dashboard-editor-desc[_ngcontent-%COMP%] {\n width: min(100%, 520px); margin: 0 0 0 -8px; padding: 3px 8px;\n font: inherit; font-size: var(--mj-text-xs); color: var(--mj-text-secondary);\n background: transparent; border: 1px solid transparent; border-radius: var(--mj-radius-md);\n}\n.dashboard-editor-desc.is-placeholder[_ngcontent-%COMP%], .dashboard-editor-desc[_ngcontent-%COMP%]::placeholder { color: var(--mj-text-muted); }\n.dashboard-editor-desc.is-editable[_ngcontent-%COMP%]:hover { border-color: var(--mj-border-default); background: var(--mj-bg-surface-card); }\n.dashboard-editor-desc.is-editable[_ngcontent-%COMP%]:focus {\n outline: none; border-color: var(--mj-border-focus); background: var(--mj-bg-surface); box-shadow: var(--mj-focus-ring);\n}\n\n.dashboard-editor-actions[_ngcontent-%COMP%] { display: flex; align-items: center; gap: var(--mj-space-2); flex-shrink: 0; }\n.dashboard-editor-divider[_ngcontent-%COMP%] { width: 1px; height: 22px; margin: 0 var(--mj-space-1); background: var(--mj-border-default); }\n\n.dashboard-editor-favorite.is-favorite[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n\n.dashboard-editor-main[_ngcontent-%COMP%] { display: flex; flex-direction: column; flex: 1; min-height: 0; }\n.dashboard-editor-body[_ngcontent-%COMP%] { position: relative; flex: 1; min-height: 0; overflow: hidden; }\n\n\n.dashboard-editor-main.is-card[_ngcontent-%COMP%] { padding: var(--mj-space-4) var(--mj-space-8) var(--mj-space-8); }\n.dashboard-editor-main.is-card[_ngcontent-%COMP%] .dashboard-editor-body[_ngcontent-%COMP%] {\n flex: none; height: max(480px, calc(100vh - 230px));\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg); box-shadow: var(--mj-shadow-sm);\n}\n\n@media (max-width: 900px) {\n .dashboard-editor-header[_ngcontent-%COMP%] { flex-wrap: wrap; padding-left: var(--mj-space-4); padding-right: var(--mj-space-4); }\n .dashboard-editor-main.is-card[_ngcontent-%COMP%] { padding-left: var(--mj-space-4); padding-right: var(--mj-space-4); }\n}"] });
1018
+ i0.ɵɵadvance();
1019
+ i0.ɵɵconditional(ctx.Dashboard && ctx.IsEditing && ctx.PropertiesDialogOpen ? 7 : -1);
1020
+ } }, dependencies: [i1.NgTemplateOutlet, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJButtonDirective, i3.MJStatBadgeComponent, i4.DashboardPartDialogComponent, i4.DashboardPropertiesDialogComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; min-width: 0; min-height: 0; }\n.dashboard-editor--fill[_nghost-%COMP%] { height: 100%; }\n\n.dashboard-editor-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: var(--mj-space-4); flex-shrink: 0;\n min-height: 72px; padding: var(--mj-space-3) var(--mj-space-8);\n background: var(--mj-bg-surface); border-bottom: 1px solid var(--mj-border-default);\n}\n.dashboard-editor-namewrap[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n.dashboard-editor-title[_ngcontent-%COMP%] {\n margin: 0; font-size: var(--mj-text-lg); font-weight: var(--mj-font-bold); letter-spacing: var(--mj-tracking-tight);\n color: var(--mj-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.dashboard-editor-shared[_ngcontent-%COMP%] { margin-left: var(--mj-space-2); font-size: var(--mj-text-xs); color: var(--mj-brand-primary); }\n\n\n.dashboard-editor-name[_ngcontent-%COMP%] { max-width: 520px; font-size: var(--mj-text-lg); font-weight: var(--mj-font-bold); letter-spacing: var(--mj-tracking-tight); }\n\n.dashboard-editor-desc[_ngcontent-%COMP%] {\n width: min(100%, 520px); margin: 0 0 0 -8px; padding: 3px 8px;\n font: inherit; font-size: var(--mj-text-xs); color: var(--mj-text-secondary);\n background: transparent; border: 1px solid transparent; border-radius: var(--mj-radius-md);\n}\n.dashboard-editor-desc.is-placeholder[_ngcontent-%COMP%], .dashboard-editor-desc[_ngcontent-%COMP%]::placeholder { color: var(--mj-text-muted); }\n.dashboard-editor-desc.is-editable[_ngcontent-%COMP%]:hover { border-color: var(--mj-border-default); background: var(--mj-bg-surface-card); }\n.dashboard-editor-desc.is-editable[_ngcontent-%COMP%]:focus {\n outline: none; border-color: var(--mj-border-focus); background: var(--mj-bg-surface); box-shadow: var(--mj-focus-ring);\n}\n\n.dashboard-editor-actions[_ngcontent-%COMP%] { display: flex; align-items: center; gap: var(--mj-space-2); flex-shrink: 0; }\n.dashboard-editor-divider[_ngcontent-%COMP%] { width: 1px; height: 22px; margin: 0 var(--mj-space-1); background: var(--mj-border-default); }\n\n.dashboard-editor-favorite.is-favorite[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n\n.dashboard-editor-main[_ngcontent-%COMP%] { display: flex; flex-direction: column; flex: 1; min-height: 0; }\n.dashboard-editor-body[_ngcontent-%COMP%] { position: relative; flex: 1; min-height: 0; overflow: hidden; }\n\n\n.dashboard-editor-main.is-card[_ngcontent-%COMP%] { padding: var(--mj-space-4) var(--mj-space-8) var(--mj-space-8); }\n.dashboard-editor-main.is-card[_ngcontent-%COMP%] .dashboard-editor-body[_ngcontent-%COMP%] {\n flex: none; height: max(480px, calc(100vh - 230px));\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg); box-shadow: var(--mj-shadow-sm);\n}\n\n@media (max-width: 900px) {\n .dashboard-editor-header[_ngcontent-%COMP%] { flex-wrap: wrap; padding-left: var(--mj-space-4); padding-right: var(--mj-space-4); }\n .dashboard-editor-main.is-card[_ngcontent-%COMP%] { padding-left: var(--mj-space-4); padding-right: var(--mj-space-4); }\n}"] });
970
1021
  }
971
1022
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DashboardEditorComponent, [{
972
1023
  type: Component,
973
- args: [{ standalone: false, selector: 'mj-dashboard-editor', template: "@if (Dashboard; as dashboard) {\n <header class=\"dashboard-editor-header\" [class.is-editing]=\"IsEditing\">\n @if (IsEditing) {\n <mj-stat-badge class=\"dashboard-editor-badge\" Variant=\"info\" Icon=\"fa-solid fa-pen\" Label=\"Editing\"></mj-stat-badge>\n }\n\n <div class=\"dashboard-editor-namewrap\">\n @if (!IsEditing) {\n @if (TitleTemplate) {\n <ng-container [ngTemplateOutlet]=\"TitleTemplate\" [ngTemplateOutletContext]=\"{ $implicit: dashboard, Dashboard: dashboard }\"></ng-container>\n } @else {\n <h1 class=\"dashboard-editor-title\">\n {{ dashboard.Name }}\n @if (IsSharedWithUser) {\n <i class=\"fa-solid fa-share-nodes dashboard-editor-shared\" role=\"img\" title=\"Shared with you\" aria-label=\"Shared with you\"></i>\n }\n </h1>\n }\n @if (dashboard.Description) {\n <p class=\"dashboard-editor-desc\">{{ dashboard.Description }}</p>\n } @else if (CanEdit) {\n <p class=\"dashboard-editor-desc is-placeholder\">Add a description</p>\n }\n } @else {\n <input type=\"text\" class=\"mj-input dashboard-editor-name\" aria-label=\"Dashboard name\" placeholder=\"Name this dashboard\"\n [(ngModel)]=\"EditingName\" (blur)=\"OnNameBlur()\">\n <input type=\"text\" class=\"dashboard-editor-desc is-editable\" aria-label=\"Dashboard description\" placeholder=\"Add a description\"\n [(ngModel)]=\"EditingDescription\">\n }\n </div>\n\n <div class=\"dashboard-editor-actions\">\n <ng-content select=\"[headerTools]\"></ng-content>\n @if (!IsEditing) {\n @if (ShowFavorite) {\n <button type=\"button\" mjButton Variant=\"icon\" Size=\"sm\" class=\"dashboard-editor-favorite\" [class.is-favorite]=\"IsFavorite\"\n [title]=\"IsFavorite ? 'Remove from favorites' : 'Add to favorites'\"\n [attr.aria-label]=\"IsFavorite ? 'Remove from favorites' : 'Add to favorites'\" (click)=\"ToggleFavorite()\">\n <i [class]=\"IsFavorite ? 'fa-solid fa-star' : 'fa-regular fa-star'\" aria-hidden=\"true\"></i>\n </button>\n }\n <ng-content select=\"[viewActions]\"></ng-content>\n @if (ShowOpenInDashboards) {\n <button type=\"button\" mjButton Variant=\"secondary\" Size=\"sm\" class=\"dashboard-editor-open-in\" (click)=\"OpenInDashboardsRequested.emit(dashboard)\">\n <i class=\"fa-solid fa-up-right-from-square\" aria-hidden=\"true\"></i> Open in Dashboards\n </button>\n }\n @if (CanEdit) {\n <span class=\"dashboard-editor-divider\" aria-hidden=\"true\"></span>\n <button type=\"button\" mjButton Variant=\"primary\" Size=\"sm\" class=\"dashboard-editor-edit\" [disabled]=\"IsSaving\" (click)=\"EnterEditMode()\">\n <i class=\"fa-solid fa-pen\" aria-hidden=\"true\"></i> Edit\n </button>\n }\n } @else {\n <button type=\"button\" mjButton Variant=\"secondary\" Size=\"sm\" class=\"dashboard-editor-add-part\" [disabled]=\"IsSaving\" (click)=\"OpenAddPartDialog()\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i> Add part\n </button>\n <span class=\"dashboard-editor-divider\" aria-hidden=\"true\"></span>\n <button type=\"button\" mjButton Variant=\"primary\" Size=\"sm\" class=\"dashboard-editor-save\" [disabled]=\"IsSaving\" (click)=\"SaveDashboard()\">\n <i [class]=\"IsSaving ? 'fa-solid fa-spinner fa-spin' : 'fa-solid fa-check'\" aria-hidden=\"true\"></i>\n {{ IsSaving ? 'Saving...' : 'Save' }}\n </button>\n <button type=\"button\" mjButton Variant=\"flat\" Size=\"sm\" class=\"dashboard-editor-cancel\" [disabled]=\"IsSaving\" (click)=\"CancelEdit()\">Cancel</button>\n }\n </div>\n </header>\n}\n\n<div class=\"dashboard-editor-main\" [class.is-card]=\"BodyStyle === 'card'\">\n <div #body class=\"dashboard-editor-body\">\n <ng-container #viewerHost></ng-container>\n </div>\n</div>\n\n<!-- The part dialog belongs to one edit session -->\n@if (Dashboard && IsEditing && PartDialogMode) {\n <mj-dashboard-part-dialog [Visible]=\"true\" [Mode]=\"PartDialogMode\" [PartTypes]=\"PartTypes\"\n [Panel]=\"EditPartPanel\" [Provider]=\"Provider\"\n (Saved)=\"OnPartDialogSaved($event)\" (Cancelled)=\"ClosePartDialog()\"></mj-dashboard-part-dialog>\n}\n", styles: [":host { display: flex; flex-direction: column; min-width: 0; min-height: 0; }\n:host(.dashboard-editor--fill) { height: 100%; }\n\n.dashboard-editor-header {\n display: flex; align-items: center; gap: var(--mj-space-4); flex-shrink: 0;\n min-height: 72px; padding: var(--mj-space-3) var(--mj-space-8);\n background: var(--mj-bg-surface); border-bottom: 1px solid var(--mj-border-default);\n}\n.dashboard-editor-namewrap { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n.dashboard-editor-title {\n margin: 0; font-size: var(--mj-text-lg); font-weight: var(--mj-font-bold); letter-spacing: var(--mj-tracking-tight);\n color: var(--mj-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.dashboard-editor-shared { margin-left: var(--mj-space-2); font-size: var(--mj-text-xs); color: var(--mj-brand-primary); }\n\n/* .mj-input (global, ui-components input.scss) gives the border, radius, padding, hover and focus ring */\n.dashboard-editor-name { max-width: 520px; font-size: var(--mj-text-lg); font-weight: var(--mj-font-bold); letter-spacing: var(--mj-tracking-tight); }\n\n.dashboard-editor-desc {\n width: min(100%, 520px); margin: 0 0 0 -8px; padding: 3px 8px;\n font: inherit; font-size: var(--mj-text-xs); color: var(--mj-text-secondary);\n background: transparent; border: 1px solid transparent; border-radius: var(--mj-radius-md);\n}\n.dashboard-editor-desc.is-placeholder, .dashboard-editor-desc::placeholder { color: var(--mj-text-muted); }\n.dashboard-editor-desc.is-editable:hover { border-color: var(--mj-border-default); background: var(--mj-bg-surface-card); }\n.dashboard-editor-desc.is-editable:focus {\n outline: none; border-color: var(--mj-border-focus); background: var(--mj-bg-surface); box-shadow: var(--mj-focus-ring);\n}\n\n.dashboard-editor-actions { display: flex; align-items: center; gap: var(--mj-space-2); flex-shrink: 0; }\n.dashboard-editor-divider { width: 1px; height: 22px; margin: 0 var(--mj-space-1); background: var(--mj-border-default); }\n/* The colour goes on the icon, never on the button: button.scss owns the button */\n.dashboard-editor-favorite.is-favorite i { color: var(--mj-status-warning); }\n\n.dashboard-editor-main { display: flex; flex-direction: column; flex: 1; min-height: 0; }\n.dashboard-editor-body { position: relative; flex: 1; min-height: 0; overflow: hidden; }\n\n/* Card style: a padded body with the dashboard in a card. Golden Layout sizes itself from the body, so it needs a definite height. */\n.dashboard-editor-main.is-card { padding: var(--mj-space-4) var(--mj-space-8) var(--mj-space-8); }\n.dashboard-editor-main.is-card .dashboard-editor-body {\n flex: none; height: max(480px, calc(100vh - 230px));\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg); box-shadow: var(--mj-shadow-sm);\n}\n\n@media (max-width: 900px) {\n .dashboard-editor-header { flex-wrap: wrap; padding-left: var(--mj-space-4); padding-right: var(--mj-space-4); }\n .dashboard-editor-main.is-card { padding-left: var(--mj-space-4); padding-right: var(--mj-space-4); }\n}\n"] }]
1024
+ args: [{ standalone: false, selector: 'mj-dashboard-editor', template: "@if (Dashboard; as dashboard) {\n <header class=\"dashboard-editor-header\" [class.is-editing]=\"IsEditing\">\n @if (IsEditing) {\n <mj-stat-badge class=\"dashboard-editor-badge\" Variant=\"info\" Icon=\"fa-solid fa-pen\" Label=\"Editing\"></mj-stat-badge>\n }\n\n <div class=\"dashboard-editor-namewrap\">\n @if (!IsEditing) {\n @if (TitleTemplate) {\n <ng-container [ngTemplateOutlet]=\"TitleTemplate\" [ngTemplateOutletContext]=\"{ $implicit: dashboard, Dashboard: dashboard }\"></ng-container>\n } @else {\n <h1 class=\"dashboard-editor-title\">\n {{ dashboard.Name }}\n @if (IsSharedWithUser) {\n <i class=\"fa-solid fa-share-nodes dashboard-editor-shared\" role=\"img\" title=\"Shared with you\" aria-label=\"Shared with you\"></i>\n }\n </h1>\n }\n @if (dashboard.Description) {\n <p class=\"dashboard-editor-desc\">{{ dashboard.Description }}</p>\n } @else if (CanEdit) {\n <p class=\"dashboard-editor-desc is-placeholder\">Add a description</p>\n }\n } @else {\n <input type=\"text\" class=\"mj-input dashboard-editor-name\" aria-label=\"Dashboard name\" placeholder=\"Name this dashboard\"\n [(ngModel)]=\"EditingName\" (blur)=\"OnNameBlur()\">\n <input type=\"text\" class=\"dashboard-editor-desc is-editable\" aria-label=\"Dashboard description\" placeholder=\"Add a description\"\n [(ngModel)]=\"EditingDescription\">\n }\n </div>\n\n <div class=\"dashboard-editor-actions\">\n <ng-content select=\"[headerTools]\"></ng-content>\n @if (!IsEditing) {\n @if (ShowFavorite) {\n <button type=\"button\" mjButton Variant=\"icon\" Size=\"sm\" class=\"dashboard-editor-favorite\" [class.is-favorite]=\"IsFavorite\"\n [title]=\"IsFavorite ? 'Remove from favorites' : 'Add to favorites'\"\n [attr.aria-label]=\"IsFavorite ? 'Remove from favorites' : 'Add to favorites'\" (click)=\"ToggleFavorite()\">\n <i [class]=\"IsFavorite ? 'fa-solid fa-star' : 'fa-regular fa-star'\" aria-hidden=\"true\"></i>\n </button>\n }\n <ng-content select=\"[viewActions]\"></ng-content>\n @if (ShowOpenInDashboards) {\n <button type=\"button\" mjButton Variant=\"secondary\" Size=\"sm\" class=\"dashboard-editor-open-in\" (click)=\"OpenInDashboardsRequested.emit(dashboard)\">\n <i class=\"fa-solid fa-up-right-from-square\" aria-hidden=\"true\"></i> Open in Dashboards\n </button>\n }\n @if (CanEdit) {\n <span class=\"dashboard-editor-divider\" aria-hidden=\"true\"></span>\n <button type=\"button\" mjButton Variant=\"primary\" Size=\"sm\" class=\"dashboard-editor-edit\" [disabled]=\"IsSaving\" (click)=\"EnterEditMode()\">\n <i class=\"fa-solid fa-pen\" aria-hidden=\"true\"></i> Edit\n </button>\n }\n } @else {\n <button type=\"button\" mjButton Variant=\"secondary\" Size=\"sm\" class=\"dashboard-editor-add-part\" [disabled]=\"IsSaving\" (click)=\"OpenAddPartDialog()\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i> Add part\n </button>\n <button type=\"button\" mjButton Variant=\"secondary\" Size=\"sm\" class=\"dashboard-editor-properties\" [disabled]=\"IsSaving\" (click)=\"OpenPropertiesDialog()\">\n <i class=\"fa-solid fa-sliders\" aria-hidden=\"true\"></i> Properties\n </button>\n <span class=\"dashboard-editor-divider\" aria-hidden=\"true\"></span>\n <button type=\"button\" mjButton Variant=\"primary\" Size=\"sm\" class=\"dashboard-editor-save\" [disabled]=\"IsSaving\" (click)=\"SaveDashboard()\">\n <i [class]=\"IsSaving ? 'fa-solid fa-spinner fa-spin' : 'fa-solid fa-check'\" aria-hidden=\"true\"></i>\n {{ IsSaving ? 'Saving...' : 'Save' }}\n </button>\n <button type=\"button\" mjButton Variant=\"flat\" Size=\"sm\" class=\"dashboard-editor-cancel\" [disabled]=\"IsSaving\" (click)=\"CancelEdit()\">Cancel</button>\n }\n </div>\n </header>\n}\n\n<div class=\"dashboard-editor-main\" [class.is-card]=\"BodyStyle === 'card'\">\n <div #body class=\"dashboard-editor-body\">\n <ng-container #viewerHost></ng-container>\n </div>\n</div>\n\n<!-- The part dialog belongs to one edit session -->\n@if (Dashboard && IsEditing && PartDialogMode) {\n <mj-dashboard-part-dialog [Visible]=\"true\" [Mode]=\"PartDialogMode\" [PartTypes]=\"PartTypes\"\n [Panel]=\"EditPartPanel\" [Provider]=\"Provider\" [DashboardProperties]=\"DashboardProperties\"\n (Saved)=\"OnPartDialogSaved($event)\" (Cancelled)=\"ClosePartDialog()\"></mj-dashboard-part-dialog>\n}\n\n<!-- The Properties and wires dialog belongs to one edit session -->\n@if (Dashboard && IsEditing && PropertiesDialogOpen) {\n <mj-dashboard-properties-dialog [Visible]=\"true\" [Properties]=\"DashboardProperties\" [Wires]=\"DashboardWires\"\n [Panels]=\"PropertiesDialogPanels\" [Provider]=\"Provider\"\n (Saved)=\"OnPropertiesDialogSaved($event)\" (Cancelled)=\"ClosePartDialog()\"></mj-dashboard-properties-dialog>\n}\n", styles: [":host { display: flex; flex-direction: column; min-width: 0; min-height: 0; }\n:host(.dashboard-editor--fill) { height: 100%; }\n\n.dashboard-editor-header {\n display: flex; align-items: center; gap: var(--mj-space-4); flex-shrink: 0;\n min-height: 72px; padding: var(--mj-space-3) var(--mj-space-8);\n background: var(--mj-bg-surface); border-bottom: 1px solid var(--mj-border-default);\n}\n.dashboard-editor-namewrap { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n.dashboard-editor-title {\n margin: 0; font-size: var(--mj-text-lg); font-weight: var(--mj-font-bold); letter-spacing: var(--mj-tracking-tight);\n color: var(--mj-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.dashboard-editor-shared { margin-left: var(--mj-space-2); font-size: var(--mj-text-xs); color: var(--mj-brand-primary); }\n\n/* .mj-input (global, ui-components input.scss) gives the border, radius, padding, hover and focus ring */\n.dashboard-editor-name { max-width: 520px; font-size: var(--mj-text-lg); font-weight: var(--mj-font-bold); letter-spacing: var(--mj-tracking-tight); }\n\n.dashboard-editor-desc {\n width: min(100%, 520px); margin: 0 0 0 -8px; padding: 3px 8px;\n font: inherit; font-size: var(--mj-text-xs); color: var(--mj-text-secondary);\n background: transparent; border: 1px solid transparent; border-radius: var(--mj-radius-md);\n}\n.dashboard-editor-desc.is-placeholder, .dashboard-editor-desc::placeholder { color: var(--mj-text-muted); }\n.dashboard-editor-desc.is-editable:hover { border-color: var(--mj-border-default); background: var(--mj-bg-surface-card); }\n.dashboard-editor-desc.is-editable:focus {\n outline: none; border-color: var(--mj-border-focus); background: var(--mj-bg-surface); box-shadow: var(--mj-focus-ring);\n}\n\n.dashboard-editor-actions { display: flex; align-items: center; gap: var(--mj-space-2); flex-shrink: 0; }\n.dashboard-editor-divider { width: 1px; height: 22px; margin: 0 var(--mj-space-1); background: var(--mj-border-default); }\n/* The colour goes on the icon, never on the button: button.scss owns the button */\n.dashboard-editor-favorite.is-favorite i { color: var(--mj-status-warning); }\n\n.dashboard-editor-main { display: flex; flex-direction: column; flex: 1; min-height: 0; }\n.dashboard-editor-body { position: relative; flex: 1; min-height: 0; overflow: hidden; }\n\n/* Card style: a padded body with the dashboard in a card. Golden Layout sizes itself from the body, so it needs a definite height. */\n.dashboard-editor-main.is-card { padding: var(--mj-space-4) var(--mj-space-8) var(--mj-space-8); }\n.dashboard-editor-main.is-card .dashboard-editor-body {\n flex: none; height: max(480px, calc(100vh - 230px));\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg); box-shadow: var(--mj-shadow-sm);\n}\n\n@media (max-width: 900px) {\n .dashboard-editor-header { flex-wrap: wrap; padding-left: var(--mj-space-4); padding-right: var(--mj-space-4); }\n .dashboard-editor-main.is-card { padding-left: var(--mj-space-4); padding-right: var(--mj-space-4); }\n}\n"] }]
974
1025
  }], null, { DashboardId: [{
975
1026
  type: Input
976
1027
  }], StartInEditMode: [{
@@ -1015,7 +1066,7 @@ export class DashboardEditorComponent extends BaseAngularComponent {
1015
1066
  type: ViewChild,
1016
1067
  args: ['viewerHost', { read: ViewContainerRef, static: true }]
1017
1068
  }] }); })();
1018
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DashboardEditorComponent, { className: "DashboardEditorComponent", filePath: "src/DashboardEditor/dashboard-editor.component.ts", lineNumber: 62 }); })();
1069
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DashboardEditorComponent, { className: "DashboardEditorComponent", filePath: "src/DashboardEditor/dashboard-editor.component.ts", lineNumber: 67 }); })();
1019
1070
  function errorMessage(error) {
1020
1071
  return error instanceof Error ? error.message : String(error);
1021
1072
  }