@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
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  * @fileoverview Login Studio: design the Explorer sign-in page as data, on the default theme.
9
9
  * @module LoginStudio
10
10
  */
11
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, inject } from '@angular/core';
11
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, ViewChild, inject, } from '@angular/core';
12
12
  import { DOCUMENT } from '@angular/common';
13
13
  import { CdkDrag, CdkDropList, CdkDropListGroup, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
14
14
  import { takeUntil } from 'rxjs';
@@ -22,35 +22,36 @@ import { CloneLoginBlock, DefaultLoginDesign, IsLoginHexColor, IsSafeLoginImageU
22
22
  import { LoginStudioInspectorComponent } from './login-studio-inspector.component';
23
23
  import * as i0 from "@angular/core";
24
24
  import * as i1 from "@memberjunction/ng-shared-generic";
25
+ const _c0 = ["frame"];
25
26
  const _forTrack0 = ($index, $item) => $item.Type;
26
27
  function LoginStudioResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelement(0, "mj-stat-badge", 1);
28
+ i0.ɵɵelement(0, "mj-stat-badge", 2);
28
29
  } if (rf & 2) {
29
30
  const ctx_r0 = i0.ɵɵnextContext();
30
31
  i0.ɵɵproperty("Label", ctx_r0.StatusLabel)("Variant", ctx_r0.StatusVariant);
31
32
  } }
32
33
  function LoginStudioResourceComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
33
34
  const _r2 = i0.ɵɵgetCurrentView();
34
- i0.ɵɵelementStart(0, "div", 2)(1, "button", 8);
35
+ i0.ɵɵelementStart(0, "div", 3)(1, "button", 9);
35
36
  i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Undo()); });
36
- i0.ɵɵelement(2, "i", 9);
37
+ i0.ɵɵelement(2, "i", 10);
37
38
  i0.ɵɵelementEnd();
38
- i0.ɵɵelementStart(3, "button", 10);
39
+ i0.ɵɵelementStart(3, "button", 11);
39
40
  i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_3_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Redo()); });
40
- i0.ɵɵelement(4, "i", 11);
41
+ i0.ɵɵelement(4, "i", 12);
41
42
  i0.ɵɵelementEnd();
42
- i0.ɵɵelementStart(5, "button", 12);
43
+ i0.ɵɵelementStart(5, "button", 13);
43
44
  i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Discard()); });
44
45
  i0.ɵɵtext(6, "Discard changes");
45
46
  i0.ɵɵelementEnd();
46
- i0.ɵɵelementStart(7, "button", 12);
47
+ i0.ɵɵelementStart(7, "button", 13);
47
48
  i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_3_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SaveDraft()); });
48
- i0.ɵɵelement(8, "i", 13);
49
+ i0.ɵɵelement(8, "i", 14);
49
50
  i0.ɵɵtext(9, " Save draft ");
50
51
  i0.ɵɵelementEnd();
51
- i0.ɵɵelementStart(10, "button", 14);
52
+ i0.ɵɵelementStart(10, "button", 15);
52
53
  i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Publish()); });
53
- i0.ɵɵelement(11, "i", 15);
54
+ i0.ɵɵelement(11, "i", 16);
54
55
  i0.ɵɵtext(12, " Publish ");
55
56
  i0.ɵɵelementEnd()();
56
57
  } if (rf & 2) {
@@ -68,7 +69,7 @@ function LoginStudioResourceComponent_Conditional_3_Template(rf, ctx) { if (rf &
68
69
  } }
69
70
  function LoginStudioResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
70
71
  const _r3 = i0.ɵɵgetCurrentView();
71
- i0.ɵɵelementStart(0, "mj-alert", 16);
72
+ i0.ɵɵelementStart(0, "mj-alert", 17);
72
73
  i0.ɵɵlistener("Dismissed", function LoginStudioResourceComponent_Conditional_5_Template_mj_alert_Dismissed_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.DismissError()); });
73
74
  i0.ɵɵelementEnd();
74
75
  } if (rf & 2) {
@@ -77,7 +78,7 @@ function LoginStudioResourceComponent_Conditional_5_Template(rf, ctx) { if (rf &
77
78
  } }
78
79
  function LoginStudioResourceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
79
80
  const _r4 = i0.ɵɵgetCurrentView();
80
- i0.ɵɵelementStart(0, "mj-alert", 17);
81
+ i0.ɵɵelementStart(0, "mj-alert", 18);
81
82
  i0.ɵɵlistener("Dismissed", function LoginStudioResourceComponent_Conditional_6_Template_mj_alert_Dismissed_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.DismissNotice()); });
82
83
  i0.ɵɵelementEnd();
83
84
  } if (rf & 2) {
@@ -85,16 +86,16 @@ function LoginStudioResourceComponent_Conditional_6_Template(rf, ctx) { if (rf &
85
86
  i0.ɵɵproperty("Message", ctx_r0.NoticeMessage);
86
87
  } }
87
88
  function LoginStudioResourceComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
88
- i0.ɵɵelement(0, "mj-loading", 5);
89
+ i0.ɵɵelement(0, "mj-loading", 6);
89
90
  } }
90
91
  function LoginStudioResourceComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
91
- i0.ɵɵelement(0, "mj-empty-state", 6);
92
+ i0.ɵɵelement(0, "mj-empty-state", 7);
92
93
  } }
93
94
  function LoginStudioResourceComponent_Conditional_9_For_8_Template(rf, ctx) { if (rf & 1) {
94
95
  const _r6 = i0.ɵɵgetCurrentView();
95
- i0.ɵɵelementStart(0, "button", 46);
96
+ i0.ɵɵelementStart(0, "button", 47);
96
97
  i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_For_8_Template_button_click_0_listener() { const t_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.AddBlock(t_r7.Type)); });
97
- i0.ɵɵelement(1, "i", 42);
98
+ i0.ɵɵelement(1, "i", 43);
98
99
  i0.ɵɵelementStart(2, "span");
99
100
  i0.ɵɵtext(3);
100
101
  i0.ɵɵelementEnd()();
@@ -106,13 +107,13 @@ function LoginStudioResourceComponent_Conditional_9_For_8_Template(rf, ctx) { if
106
107
  i0.ɵɵadvance(2);
107
108
  i0.ɵɵtextInterpolate(t_r7.Label);
108
109
  } }
109
- function LoginStudioResourceComponent_Conditional_9_Conditional_21_Template(rf, ctx) { if (rf & 1) {
110
- i0.ɵɵelementStart(0, "p", 32);
110
+ function LoginStudioResourceComponent_Conditional_9_Conditional_22_Template(rf, ctx) { if (rf & 1) {
111
+ i0.ɵɵelementStart(0, "p", 33);
111
112
  i0.ɵɵtext(1, "Empty: visitors see the stock logo and \"Welcome back\" here.");
112
113
  i0.ɵɵelementEnd();
113
114
  } }
114
- function LoginStudioResourceComponent_Conditional_9_Conditional_28_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelementStart(0, "span", 37);
115
+ function LoginStudioResourceComponent_Conditional_9_Conditional_29_Template(rf, ctx) { if (rf & 1) {
116
+ i0.ɵɵelementStart(0, "span", 38);
116
117
  i0.ɵɵtext(1);
117
118
  i0.ɵɵelementEnd();
118
119
  } if (rf & 2) {
@@ -120,72 +121,72 @@ function LoginStudioResourceComponent_Conditional_9_Conditional_28_Template(rf,
120
121
  i0.ɵɵadvance();
121
122
  i0.ɵɵtextInterpolate(ctx_r0.Design.Heading);
122
123
  } }
123
- function LoginStudioResourceComponent_Conditional_9_Conditional_39_Template(rf, ctx) { if (rf & 1) {
124
+ function LoginStudioResourceComponent_Conditional_9_Conditional_40_Template(rf, ctx) { if (rf & 1) {
124
125
  const _r8 = i0.ɵɵgetCurrentView();
125
- i0.ɵɵelementStart(0, "button", 47);
126
- i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_Conditional_39_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.Select(null)); });
127
- i0.ɵɵelement(1, "i", 48);
126
+ i0.ɵɵelementStart(0, "button", 48);
127
+ i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_Conditional_40_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.Select(null)); });
128
+ i0.ɵɵelement(1, "i", 49);
128
129
  i0.ɵɵelementEnd();
129
130
  } }
130
131
  function LoginStudioResourceComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
131
132
  const _r5 = i0.ɵɵgetCurrentView();
132
- i0.ɵɵelementStart(0, "div", 7)(1, "aside", 18)(2, "h2", 19);
133
+ i0.ɵɵelementStart(0, "div", 8)(1, "aside", 19)(2, "h2", 20);
133
134
  i0.ɵɵtext(3, "Blocks");
134
135
  i0.ɵɵelementEnd();
135
- i0.ɵɵelementStart(4, "p", 20);
136
+ i0.ɵɵelementStart(4, "p", 21);
136
137
  i0.ɵɵtext(5, "Drag a block onto the page, or click one to add it after the selected block.");
137
138
  i0.ɵɵelementEnd();
138
- i0.ɵɵelementStart(6, "div", 21);
139
- i0.ɵɵrepeaterCreate(7, LoginStudioResourceComponent_Conditional_9_For_8_Template, 4, 5, "button", 22, _forTrack0);
139
+ i0.ɵɵelementStart(6, "div", 22);
140
+ i0.ɵɵrepeaterCreate(7, LoginStudioResourceComponent_Conditional_9_For_8_Template, 4, 5, "button", 23, _forTrack0);
140
141
  i0.ɵɵelementEnd()();
141
- i0.ɵɵelementStart(9, "section", 23);
142
+ i0.ɵɵelementStart(9, "section", 24);
142
143
  i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_Template_section_click_9_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnStageClick()); });
143
- i0.ɵɵelementStart(10, "div", 24);
144
+ i0.ɵɵelementStart(10, "div", 25);
144
145
  i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_Template_div_click_10_listener($event) { return $event.stopPropagation(); });
145
- i0.ɵɵelementStart(11, "mj-view-toggle", 25);
146
+ i0.ɵɵelementStart(11, "mj-view-toggle", 26);
146
147
  i0.ɵɵlistener("KeyChange", function LoginStudioResourceComponent_Conditional_9_Template_mj_view_toggle_KeyChange_11_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetDevice($event)); });
147
148
  i0.ɵɵelementEnd();
148
- i0.ɵɵelementStart(12, "span", 20);
149
+ i0.ɵɵelementStart(12, "span", 21);
149
150
  i0.ɵɵtext(13, "The sign-in button is a stand-in. The real one opens your sign-in provider.");
150
151
  i0.ɵɵelementEnd()();
151
- i0.ɵɵelementStart(14, "div", 26)(15, "div", 27);
152
- i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_Template_div_click_15_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SelectSurface("Banner", $event)); });
153
- i0.ɵɵelementStart(16, "div", 28)(17, "div", 29)(18, "span", 30);
154
- i0.ɵɵtext(19);
152
+ i0.ɵɵelementStart(14, "div", 27, 0)(16, "div", 28);
153
+ i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_Template_div_click_16_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SelectSurface("Banner", $event)); });
154
+ i0.ɵɵelementStart(17, "div", 29)(18, "div", 30)(19, "span", 31);
155
+ i0.ɵɵtext(20);
155
156
  i0.ɵɵelementEnd();
156
- i0.ɵɵelementStart(20, "mj-login-region", 31);
157
- i0.ɵɵlistener("Dropped", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_Dropped_20_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDrop($event)); })("SelectRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_SelectRequested_20_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Select($event)); })("CommandRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_CommandRequested_20_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCommand($event)); });
157
+ i0.ɵɵelementStart(21, "mj-login-region", 32);
158
+ i0.ɵɵlistener("Dropped", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_Dropped_21_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDrop($event)); })("SelectRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_SelectRequested_21_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Select($event)); })("CommandRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_CommandRequested_21_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCommand($event)); });
158
159
  i0.ɵɵelementEnd();
159
- i0.ɵɵconditionalCreate(21, LoginStudioResourceComponent_Conditional_9_Conditional_21_Template, 2, 0, "p", 32);
160
+ i0.ɵɵconditionalCreate(22, LoginStudioResourceComponent_Conditional_9_Conditional_22_Template, 2, 0, "p", 33);
160
161
  i0.ɵɵelementEnd()();
161
- i0.ɵɵelementStart(22, "div", 33);
162
- i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_Template_div_click_22_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SelectSurface("Panel", $event)); });
163
- i0.ɵɵelementStart(23, "div", 34)(24, "span", 30);
164
- i0.ɵɵtext(25);
162
+ i0.ɵɵelementStart(23, "div", 34);
163
+ i0.ɵɵlistener("click", function LoginStudioResourceComponent_Conditional_9_Template_div_click_23_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SelectSurface("Panel", $event)); });
164
+ i0.ɵɵelementStart(24, "div", 35)(25, "span", 31);
165
+ i0.ɵɵtext(26);
165
166
  i0.ɵɵelementEnd();
166
- i0.ɵɵelementStart(26, "mj-login-region", 35);
167
- i0.ɵɵlistener("Dropped", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_Dropped_26_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDrop($event)); })("SelectRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_SelectRequested_26_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Select($event)); })("CommandRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_CommandRequested_26_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCommand($event)); });
167
+ i0.ɵɵelementStart(27, "mj-login-region", 36);
168
+ i0.ɵɵlistener("Dropped", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_Dropped_27_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDrop($event)); })("SelectRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_SelectRequested_27_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Select($event)); })("CommandRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_CommandRequested_27_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCommand($event)); });
168
169
  i0.ɵɵelementEnd();
169
- i0.ɵɵelementStart(27, "div", 36);
170
- i0.ɵɵconditionalCreate(28, LoginStudioResourceComponent_Conditional_9_Conditional_28_Template, 2, 1, "span", 37);
171
- i0.ɵɵelementStart(29, "span", 38);
172
- i0.ɵɵtext(30, "Log in");
170
+ i0.ɵɵelementStart(28, "div", 37);
171
+ i0.ɵɵconditionalCreate(29, LoginStudioResourceComponent_Conditional_9_Conditional_29_Template, 2, 1, "span", 38);
172
+ i0.ɵɵelementStart(30, "span", 39);
173
+ i0.ɵɵtext(31, "Log in");
173
174
  i0.ɵɵelementEnd()();
174
- i0.ɵɵelementStart(31, "span", 30);
175
- i0.ɵɵtext(32);
175
+ i0.ɵɵelementStart(32, "span", 31);
176
+ i0.ɵɵtext(33);
176
177
  i0.ɵɵelementEnd();
177
- i0.ɵɵelementStart(33, "mj-login-region", 39);
178
- i0.ɵɵlistener("Dropped", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_Dropped_33_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDrop($event)); })("SelectRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_SelectRequested_33_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Select($event)); })("CommandRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_CommandRequested_33_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCommand($event)); });
178
+ i0.ɵɵelementStart(34, "mj-login-region", 40);
179
+ i0.ɵɵlistener("Dropped", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_Dropped_34_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDrop($event)); })("SelectRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_SelectRequested_34_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Select($event)); })("CommandRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_region_CommandRequested_34_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCommand($event)); });
179
180
  i0.ɵɵelementEnd()()()()()();
180
- i0.ɵɵelementStart(34, "aside", 40)(35, "div", 41);
181
- i0.ɵɵelement(36, "i", 42);
182
- i0.ɵɵelementStart(37, "h2", 43);
183
- i0.ɵɵtext(38);
181
+ i0.ɵɵelementStart(35, "aside", 41)(36, "div", 42);
182
+ i0.ɵɵelement(37, "i", 43);
183
+ i0.ɵɵelementStart(38, "h2", 44);
184
+ i0.ɵɵtext(39);
184
185
  i0.ɵɵelementEnd();
185
- i0.ɵɵconditionalCreate(39, LoginStudioResourceComponent_Conditional_9_Conditional_39_Template, 2, 0, "button", 44);
186
+ i0.ɵɵconditionalCreate(40, LoginStudioResourceComponent_Conditional_9_Conditional_40_Template, 2, 0, "button", 45);
186
187
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementStart(40, "mj-login-studio-inspector", 45);
188
- i0.ɵɵlistener("EditRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_studio_inspector_EditRequested_40_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ApplyEdit($event)); })("CommandRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_studio_inspector_CommandRequested_40_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCommand($event)); })("StockPageRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_studio_inspector_StockPageRequested_40_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.UseStockPage()); })("SurfaceSelectRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_studio_inspector_SurfaceSelectRequested_40_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SelectSurface($event)); });
188
+ i0.ɵɵelementStart(41, "mj-login-studio-inspector", 46);
189
+ i0.ɵɵlistener("EditRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_studio_inspector_EditRequested_41_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ApplyEdit($event)); })("CommandRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_studio_inspector_CommandRequested_41_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnCommand($event)); })("StockPageRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_studio_inspector_StockPageRequested_41_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.UseStockPage()); })("SurfaceSelectRequested", function LoginStudioResourceComponent_Conditional_9_Template_mj_login_studio_inspector_SurfaceSelectRequested_41_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SelectSurface($event)); });
189
190
  i0.ɵɵelementEnd()()();
190
191
  } if (rf & 2) {
191
192
  const ctx_r0 = i0.ɵɵnextContext();
@@ -198,7 +199,8 @@ function LoginStudioResourceComponent_Conditional_9_Template(rf, ctx) { if (rf &
198
199
  i0.ɵɵadvance(3);
199
200
  i0.ɵɵstyleMap(ctx_r0.FrameStyle);
200
201
  i0.ɵɵclassProp("ls__frame--phone", ctx_r0.Stacked);
201
- i0.ɵɵadvance();
202
+ i0.ɵɵadvance(2);
203
+ i0.ɵɵstyleProp("transform", ctx_r0.Stacked ? null : "scale(" + ctx_r0.DesktopScale + ")");
202
204
  i0.ɵɵclassProp("lp--reverse", ctx_r0.Design.Layout === "split-reverse")("lp--centered", ctx_r0.Design.Layout === "centered")("lp--stacked", ctx_r0.Stacked)("lp--surface-on", ctx_r0.Surface === "Banner" && ctx_r0.Design.Layout === "centered");
203
205
  i0.ɵɵadvance();
204
206
  i0.ɵɵclassProp("lp__banner--center", ctx_r0.Design.Alignment === "center" || ctx_r0.Stacked)("lp__surface-on", ctx_r0.Surface === "Banner" && ctx_r0.Design.Layout !== "centered");
@@ -207,7 +209,7 @@ function LoginStudioResourceComponent_Conditional_9_Template(rf, ctx) { if (rf &
207
209
  i0.ɵɵadvance();
208
210
  i0.ɵɵproperty("Blocks", ctx_r0.Design.Regions.Banner)("Logos", ctx_r0.Logos)("BrandName", ctx_r0.Theme.Name)("Stacked", ctx_r0.Stacked)("Center", ctx_r0.Design.Alignment === "center" || ctx_r0.Stacked)("Editable", true)("SelectedID", ctx_r0.SelectedID);
209
211
  i0.ɵɵadvance();
210
- i0.ɵɵconditional(!ctx_r0.Design.Regions.Banner.length ? 21 : -1);
212
+ i0.ɵɵconditional(!ctx_r0.Design.Regions.Banner.length ? 22 : -1);
211
213
  i0.ɵɵadvance();
212
214
  i0.ɵɵclassProp("lp__surface-on", ctx_r0.Surface === "Panel");
213
215
  i0.ɵɵadvance(3);
@@ -215,7 +217,7 @@ function LoginStudioResourceComponent_Conditional_9_Template(rf, ctx) { if (rf &
215
217
  i0.ɵɵadvance();
216
218
  i0.ɵɵproperty("Blocks", ctx_r0.Design.Regions.PanelTop)("Logos", ctx_r0.Logos)("BrandName", ctx_r0.Theme.Name)("Stacked", ctx_r0.Stacked)("Editable", true)("SelectedID", ctx_r0.SelectedID);
217
219
  i0.ɵɵadvance(2);
218
- i0.ɵɵconditional(ctx_r0.Design.Heading ? 28 : -1);
220
+ i0.ɵɵconditional(ctx_r0.Design.Heading ? 29 : -1);
219
221
  i0.ɵɵadvance(4);
220
222
  i0.ɵɵtextInterpolate(ctx_r0.RegionLabel.PanelBottom);
221
223
  i0.ɵɵadvance();
@@ -225,7 +227,7 @@ function LoginStudioResourceComponent_Conditional_9_Template(rf, ctx) { if (rf &
225
227
  i0.ɵɵadvance(2);
226
228
  i0.ɵɵtextInterpolate(ctx_r0.SideTitle);
227
229
  i0.ɵɵadvance();
228
- i0.ɵɵconditional(ctx_r0.Selected || ctx_r0.Surface ? 39 : -1);
230
+ i0.ɵɵconditional(ctx_r0.Selected || ctx_r0.Surface ? 40 : -1);
229
231
  i0.ɵɵadvance();
230
232
  i0.ɵɵproperty("Design", ctx_r0.Design)("Selected", ctx_r0.Selected)("SelectedRegion", ctx_r0.SelectedRegion)("Surface", ctx_r0.Surface)("CanReset", ctx_r0.IsLive || ctx_r0.Unpublished)("Saving", ctx_r0.Saving);
231
233
  } }
@@ -236,6 +238,8 @@ const COALESCE_MS = 800;
236
238
  const HISTORY_CAP = 60;
237
239
  /** The click a browser fires as a drag ends; ignored so a drop keeps its selection. */
238
240
  const DROP_CLICK_MS = 400;
241
+ /** The desktop preview lays the page out this wide, as on a 1440 x 900 screen (the CSS on .lp), and scales it to the frame. */
242
+ const DESKTOP_WIDTH = 1440;
239
243
  const SURFACE_LABEL = { Banner: 'Story panel', Panel: 'Sign-in column' };
240
244
  const SURFACE_ICON = { Banner: 'fa-solid fa-image', Panel: 'fa-solid fa-right-to-bracket' };
241
245
  /**
@@ -276,6 +280,8 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
276
280
  Logos = {};
277
281
  /** The default theme's look, as custom properties on the preview frame. */
278
282
  FrameStyle = {};
283
+ /** The desktop preview's scale: the frame's width over DESKTOP_WIDTH. */
284
+ DesktopScale = 1;
279
285
  /** The problems that stopped the last save; re-checked as you edit, so the alert goes once they are fixed. */
280
286
  problems = [];
281
287
  /** What is stored, as JSON, so "unsaved" and "unpublished" are comparisons rather than flags. */
@@ -289,6 +295,13 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
289
295
  lastEdit = null;
290
296
  droppedAt = 0;
291
297
  reportedEditing = false;
298
+ frameObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver((entries) => this.fitDesktop(entries[0].contentRect.width));
299
+ /** The preview frame, there once the theme has loaded: its width sets the desktop preview's scale. */
300
+ set frameRef(el) {
301
+ this.frameObserver?.disconnect();
302
+ if (el)
303
+ this.frameObserver?.observe(el.nativeElement);
304
+ }
292
305
  ngOnInit() {
293
306
  super.ngOnInit();
294
307
  // The preview restates the stock gradient per color mode, so it follows a light/dark switch.
@@ -298,6 +311,10 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
298
311
  ngAfterViewInit() {
299
312
  this.registerAgentTools();
300
313
  }
314
+ ngOnDestroy() {
315
+ this.frameObserver?.disconnect();
316
+ super.ngOnDestroy();
317
+ }
301
318
  async GetResourceDisplayName(_data) {
302
319
  return 'Sign-in Page';
303
320
  }
@@ -321,6 +338,7 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
321
338
  ExtraFilter: `IsDefault = 1 AND Status = 'Active'`,
322
339
  OrderBy: '__mj_UpdatedAt DESC',
323
340
  MaxRows: 1,
341
+ SkipTotalRowCount: true,
324
342
  ResultType: 'entity_object',
325
343
  });
326
344
  if (rv.Success) {
@@ -764,6 +782,14 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
764
782
  this.cdr.markForCheck();
765
783
  }
766
784
  // ── Preview, agent, shell ───────────────────────────────────────────────────────────────────
785
+ /** Fit the desktop page to the frame. A hidden tab's frame measures 0, so it keeps its last fit. */
786
+ fitDesktop(width) {
787
+ if (!width)
788
+ return;
789
+ this.DesktopScale = width / DESKTOP_WIDTH;
790
+ // The observer runs outside Angular's zone, so check the view now rather than mark it.
791
+ this.cdr.detectChanges();
792
+ }
767
793
  /** After any change: the problems alert, the preview, the agent's view, the shell's edit state, and the view. */
768
794
  changed() {
769
795
  // A save refused for problems re-checks as you edit (or undo), and its alert goes once they are fixed.
@@ -806,17 +832,22 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
806
832
  ]);
807
833
  }
808
834
  static ɵfac = /*@__PURE__*/ (() => { let ɵLoginStudioResourceComponent_BaseFactory; return function LoginStudioResourceComponent_Factory(__ngFactoryType__) { return (ɵLoginStudioResourceComponent_BaseFactory || (ɵLoginStudioResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(LoginStudioResourceComponent)))(__ngFactoryType__ || LoginStudioResourceComponent); }; })();
809
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LoginStudioResourceComponent, selectors: [["mj-login-studio-resource"]], hostBindings: function LoginStudioResourceComponent_HostBindings(rf, ctx) { if (rf & 1) {
835
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LoginStudioResourceComponent, selectors: [["mj-login-studio-resource"]], viewQuery: function LoginStudioResourceComponent_Query(rf, ctx) { if (rf & 1) {
836
+ i0.ɵɵviewQuery(_c0, 5);
837
+ } if (rf & 2) {
838
+ let _t;
839
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.frameRef = _t.first);
840
+ } }, hostBindings: function LoginStudioResourceComponent_HostBindings(rf, ctx) { if (rf & 1) {
810
841
  i0.ɵɵlistener("beforeunload", function LoginStudioResourceComponent_beforeunload_HostBindingHandler($event) { return ctx.OnBeforeUnload($event); }, i0.ɵɵresolveWindow)("keydown", function LoginStudioResourceComponent_keydown_HostBindingHandler($event) { return ctx.OnKeydown($event); });
811
- } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 6, consts: [["Title", "Sign-in Page", "Icon", "fa-solid fa-right-to-bracket", 3, "Subtitle"], ["meta", "", 3, "Label", "Variant"], ["actions", "", 1, "ls__actions"], ["Variant", "error", "Dismissible", "", 1, "ls__alert", 3, "Message"], ["Variant", "success", "Dismissible", "", 1, "ls__alert", 3, "Message"], ["Text", "Reading the sign-in page...", "Size", "medium"], ["Icon", "fa-solid fa-palette", "Title", "No default theme", "Message", "The sign-in page is designed on the default theme. Set one in Theme Studio, under Manage Themes."], ["cdkDropListGroup", "", 1, "ls"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", "title", "Undo (Ctrl/Cmd Z)", "AriaLabel", "Undo", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-left"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", "title", "Redo (Shift Ctrl/Cmd Z)", "AriaLabel", "Redo", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-right"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", 3, "click", "disabled"], [1, "fa-regular", "fa-floppy-disk"], ["type", "button", "mjButton", "", "Variant", "primary", "Size", "sm", "title", "Save and show this page to everyone signing in", 3, "click", "disabled"], [1, "fa-solid", "fa-upload"], ["Variant", "error", "Dismissible", "", 1, "ls__alert", 3, "Dismissed", "Message"], ["Variant", "success", "Dismissible", "", 1, "ls__alert", 3, "Dismissed", "Message"], ["aria-label", "Blocks", 1, "ls__palette"], [1, "ls__heading"], [1, "ls__hint"], ["cdkDropList", "", "cdkDropListSortingDisabled", "", 1, "ls__palette-list", 3, "cdkDropListData", "cdkDropListEnterPredicate"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", "cdkDrag", "", 1, "ls__tile", 3, "cdkDragData", "title"], ["aria-label", "Preview", 1, "ls__stage", 3, "click"], [1, "ls__stage-bar", 3, "click"], ["role", "group", "aria-label", "Preview size", 3, "KeyChange", "Options", "ActiveKey"], [1, "ls__frame"], [1, "lp", 3, "click"], [1, "lp__banner"], [1, "lp__brand"], [1, "lp__region-label"], ["Region", "Banner", 3, "Dropped", "SelectRequested", "CommandRequested", "Blocks", "Logos", "BrandName", "Stacked", "Center", "Editable", "SelectedID"], [1, "lp__default-note"], [1, "lp__panel", 3, "click"], [1, "lp__stack"], ["Region", "PanelTop", 3, "Dropped", "SelectRequested", "CommandRequested", "Blocks", "Logos", "BrandName", "Stacked", "Editable", "SelectedID"], ["aria-hidden", "true", 1, "lp__picker"], [1, "lp__heading"], [1, "lp__signin"], ["Region", "PanelBottom", 3, "Dropped", "SelectRequested", "CommandRequested", "Blocks", "Logos", "BrandName", "Stacked", "Editable", "SelectedID"], ["aria-label", "Settings", 1, "ls__side"], [1, "ls__side-head"], ["aria-hidden", "true"], [1, "ls__side-title"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", "title", "Page settings", "AriaLabel", "Back to page settings"], [3, "EditRequested", "CommandRequested", "StockPageRequested", "SurfaceSelectRequested", "Design", "Selected", "SelectedRegion", "Surface", "CanReset", "Saving"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", "cdkDrag", "", 1, "ls__tile", 3, "click", "cdkDragData", "title"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", "title", "Page settings", "AriaLabel", "Back to page settings", 3, "click"], [1, "fa-solid", "fa-table-columns"]], template: function LoginStudioResourceComponent_Template(rf, ctx) { if (rf & 1) {
812
- i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0);
813
- i0.ɵɵconditionalCreate(2, LoginStudioResourceComponent_Conditional_2_Template, 1, 2, "mj-stat-badge", 1);
814
- i0.ɵɵconditionalCreate(3, LoginStudioResourceComponent_Conditional_3_Template, 13, 5, "div", 2);
842
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 6, consts: [["frame", ""], ["Title", "Sign-in Page", "Icon", "fa-solid fa-right-to-bracket", 3, "Subtitle"], ["meta", "", 3, "Label", "Variant"], ["actions", "", 1, "ls__actions"], ["Variant", "error", "Dismissible", "", 1, "ls__alert", 3, "Message"], ["Variant", "success", "Dismissible", "", 1, "ls__alert", 3, "Message"], ["Text", "Reading the sign-in page...", "Size", "medium"], ["Icon", "fa-solid fa-palette", "Title", "No default theme", "Message", "The sign-in page is designed on the default theme. Set one in Theme Studio, under Manage Themes."], ["cdkDropListGroup", "", 1, "ls"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", "title", "Undo (Ctrl/Cmd Z)", "AriaLabel", "Undo", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-left"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", "title", "Redo (Shift Ctrl/Cmd Z)", "AriaLabel", "Redo", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-right"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", 3, "click", "disabled"], [1, "fa-regular", "fa-floppy-disk"], ["type", "button", "mjButton", "", "Variant", "primary", "Size", "sm", "title", "Save and show this page to everyone signing in", 3, "click", "disabled"], [1, "fa-solid", "fa-upload"], ["Variant", "error", "Dismissible", "", 1, "ls__alert", 3, "Dismissed", "Message"], ["Variant", "success", "Dismissible", "", 1, "ls__alert", 3, "Dismissed", "Message"], ["aria-label", "Blocks", 1, "ls__palette"], [1, "ls__heading"], [1, "ls__hint"], ["cdkDropList", "", "cdkDropListSortingDisabled", "", 1, "ls__palette-list", 3, "cdkDropListData", "cdkDropListEnterPredicate"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", "cdkDrag", "", 1, "ls__tile", 3, "cdkDragData", "title"], ["aria-label", "Preview", 1, "ls__stage", 3, "click"], [1, "ls__stage-bar", 3, "click"], ["role", "group", "aria-label", "Preview size", 3, "KeyChange", "Options", "ActiveKey"], [1, "ls__frame"], [1, "lp", 3, "click"], [1, "lp__banner"], [1, "lp__brand"], [1, "lp__region-label"], ["Region", "Banner", 3, "Dropped", "SelectRequested", "CommandRequested", "Blocks", "Logos", "BrandName", "Stacked", "Center", "Editable", "SelectedID"], [1, "lp__default-note"], [1, "lp__panel", 3, "click"], [1, "lp__stack"], ["Region", "PanelTop", 3, "Dropped", "SelectRequested", "CommandRequested", "Blocks", "Logos", "BrandName", "Stacked", "Editable", "SelectedID"], ["aria-hidden", "true", 1, "lp__picker"], [1, "lp__heading"], [1, "lp__signin"], ["Region", "PanelBottom", 3, "Dropped", "SelectRequested", "CommandRequested", "Blocks", "Logos", "BrandName", "Stacked", "Editable", "SelectedID"], ["aria-label", "Settings", 1, "ls__side"], [1, "ls__side-head"], ["aria-hidden", "true"], [1, "ls__side-title"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", "title", "Page settings", "AriaLabel", "Back to page settings"], [3, "EditRequested", "CommandRequested", "StockPageRequested", "SurfaceSelectRequested", "Design", "Selected", "SelectedRegion", "Surface", "CanReset", "Saving"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", "cdkDrag", "", 1, "ls__tile", 3, "click", "cdkDragData", "title"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", "title", "Page settings", "AriaLabel", "Back to page settings", 3, "click"], [1, "fa-solid", "fa-table-columns"]], template: function LoginStudioResourceComponent_Template(rf, ctx) { if (rf & 1) {
843
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1);
844
+ i0.ɵɵconditionalCreate(2, LoginStudioResourceComponent_Conditional_2_Template, 1, 2, "mj-stat-badge", 2);
845
+ i0.ɵɵconditionalCreate(3, LoginStudioResourceComponent_Conditional_3_Template, 13, 5, "div", 3);
815
846
  i0.ɵɵelementEnd();
816
847
  i0.ɵɵelementStart(4, "mj-page-body");
817
- i0.ɵɵconditionalCreate(5, LoginStudioResourceComponent_Conditional_5_Template, 1, 1, "mj-alert", 3);
818
- i0.ɵɵconditionalCreate(6, LoginStudioResourceComponent_Conditional_6_Template, 1, 1, "mj-alert", 4);
819
- i0.ɵɵconditionalCreate(7, LoginStudioResourceComponent_Conditional_7_Template, 1, 0, "mj-loading", 5)(8, LoginStudioResourceComponent_Conditional_8_Template, 1, 0, "mj-empty-state", 6)(9, LoginStudioResourceComponent_Conditional_9_Template, 41, 56, "div", 7);
848
+ i0.ɵɵconditionalCreate(5, LoginStudioResourceComponent_Conditional_5_Template, 1, 1, "mj-alert", 4);
849
+ i0.ɵɵconditionalCreate(6, LoginStudioResourceComponent_Conditional_6_Template, 1, 1, "mj-alert", 5);
850
+ i0.ɵɵconditionalCreate(7, LoginStudioResourceComponent_Conditional_7_Template, 1, 0, "mj-loading", 6)(8, LoginStudioResourceComponent_Conditional_8_Template, 1, 0, "mj-empty-state", 7)(9, LoginStudioResourceComponent_Conditional_9_Template, 42, 58, "div", 8);
820
851
  i0.ɵɵelementEnd()();
821
852
  } if (rf & 2) {
822
853
  i0.ɵɵadvance();
@@ -833,7 +864,7 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
833
864
  i0.ɵɵconditional(ctx.Loading ? 7 : !ctx.Theme ? 8 : 9);
834
865
  } }, dependencies: [CdkDropListGroup, CdkDropList, CdkDrag, SharedGenericModule, i1.LoadingComponent, MJAlertComponent, MJButtonDirective, MJEmptyStateComponent,
835
866
  MJPageLayoutComponent, MJPageHeaderComponent, MJPageBodyComponent, MJStatBadgeComponent, MJViewToggleComponent,
836
- MJLoginRegionComponent, LoginStudioInspectorComponent], styles: ["\n\n\n[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.ls__alert[_ngcontent-%COMP%] { margin-bottom: var(--mj-space-4); }\n\n.ls__actions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.ls__hint[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n\n\n.ls[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 11rem minmax(0, 1fr) 20rem;\n grid-template-areas: 'palette stage side';\n gap: var(--mj-space-4);\n align-items: start;\n}\n\n.ls__heading[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--mj-text-secondary);\n}\n\n\n.ls__palette[_ngcontent-%COMP%] {\n grid-area: palette;\n position: sticky;\n top: 0;\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n.ls__palette-list[_ngcontent-%COMP%] {\n display: grid;\n gap: var(--mj-space-2);\n}\n\n.ls__tile[_ngcontent-%COMP%] {\n justify-content: flex-start;\n width: 100%;\n cursor: grab;\n}\n.ls__tile[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 1.25rem;\n text-align: center;\n}\n\n.ls__tile.cdk-drag-placeholder[_ngcontent-%COMP%] { opacity: 0.4; }\n.ls__tile.cdk-drag-preview[_ngcontent-%COMP%] {\n width: 10rem;\n box-shadow: var(--mj-shadow-lg);\n}\n\n\n.ls__stage[_ngcontent-%COMP%] {\n grid-area: stage;\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-3);\n min-width: 0;\n}\n.ls__stage-bar[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-3);\n}\n\n\n.ls__frame[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n width: 100%;\n height: clamp(30rem, 62vh, 44rem);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n background: var(--mj-login-panel-bg);\n}\n.ls__frame--phone[_ngcontent-%COMP%] {\n width: 24rem;\n max-width: 100%;\n height: 46rem;\n margin-inline: auto;\n border-radius: var(--mj-radius-xl);\n}\n\n\n.ls__side[_ngcontent-%COMP%] {\n grid-area: side;\n position: sticky;\n top: 0;\n max-height: calc(100vh - 10rem);\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n background: var(--mj-bg-surface);\n}\n.ls__side-head[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-3) var(--mj-space-4);\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.ls__side-head[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] { color: var(--mj-text-secondary); }\n.ls__side-title[_ngcontent-%COMP%] {\n flex: 1;\n margin: 0;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n\n\n.lp[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n}\n.lp--reverse[_ngcontent-%COMP%] { flex-direction: row-reverse; }\n\n.lp__banner[_ngcontent-%COMP%] {\n box-sizing: border-box;\n display: flex;\n flex: var(--mj-login-banner-flex) 1 0;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n padding: var(--mj-space-10) var(--mj-space-8);\n background: var(--mj-login-banner-bg);\n color: var(--mj-login-banner-text);\n}\n.lp__banner--center[_ngcontent-%COMP%] { align-items: center; }\n.lp__brand[_ngcontent-%COMP%] {\n width: 100%;\n margin-block: auto;\n}\n\n.lp__panel[_ngcontent-%COMP%] {\n box-sizing: border-box;\n display: flex;\n flex: var(--mj-login-panel-flex) 1 0;\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n padding: var(--mj-space-8) var(--mj-space-6);\n background: var(--mj-login-panel-bg);\n color: var(--mj-login-panel-text);\n}\n.lp__stack[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-3);\n width: 100%;\n max-width: var(--mj-login-picker-max-width);\n margin-block: auto;\n}\n\n.lp__picker[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--mj-space-3);\n padding-block: var(--mj-space-2);\n}\n\n.lp__heading[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n font-weight: var(--mj-font-bold);\n color: var(--mj-login-panel-text);\n}\n.lp__signin[_ngcontent-%COMP%] {\n display: block;\n padding: var(--mj-space-3);\n border-radius: var(--mj-radius-md);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-weight: var(--mj-font-semibold);\n text-align: center;\n}\n\n.lp__region-label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: calc(-1 * var(--mj-space-2));\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n opacity: 0.55;\n}\n.lp__banner[_ngcontent-%COMP%] .lp__region-label[_ngcontent-%COMP%] { margin-bottom: var(--mj-space-1); }\n.lp__default-note[_ngcontent-%COMP%] {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-xs);\n opacity: 0.75;\n}\n\n\n.lp--centered[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n padding: var(--mj-space-8) var(--mj-space-4);\n background: var(--mj-login-banner-bg);\n}\n.lp--centered[_ngcontent-%COMP%] .lp__banner[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n width: 100%;\n overflow: visible;\n padding: 0 0 var(--mj-space-6);\n background: none;\n align-items: center;\n}\n.lp--centered[_ngcontent-%COMP%] .lp__panel[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n width: 100%;\n max-width: var(--mj-login-centered-card-width);\n overflow: visible;\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-lg);\n}\n\n\n.lp--stacked[_ngcontent-%COMP%] { flex-direction: column; }\n.lp--stacked[_ngcontent-%COMP%]:not(.lp--centered) .lp__banner[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n height: 35%;\n padding: var(--mj-space-5);\n align-items: center;\n}\n.lp--stacked[_ngcontent-%COMP%]:not(.lp--centered) .lp__brand[_ngcontent-%COMP%] { margin-block: auto 0; }\n.lp--stacked[_ngcontent-%COMP%]:not(.lp--centered) .lp__panel[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n padding: var(--mj-space-6) var(--mj-space-4);\n}\n\n\n\n.lp__banner[_ngcontent-%COMP%], \n.lp__panel[_ngcontent-%COMP%], \n.lp--centered[_ngcontent-%COMP%] { cursor: pointer; }\n.lp__surface-on[_ngcontent-%COMP%], \n.lp--surface-on[_ngcontent-%COMP%] { box-shadow: inset 0 0 0 2px var(--mj-brand-primary); }\n.lp--centered[_ngcontent-%COMP%] .lp__panel.lp__surface-on[_ngcontent-%COMP%] { box-shadow: var(--mj-shadow-lg), 0 0 0 2px var(--mj-brand-primary); }\n\n\n\n@media (max-width: 1280px) {\n .ls[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr) 19rem;\n grid-template-areas:\n 'palette palette'\n 'stage side';\n }\n .ls__palette[_ngcontent-%COMP%] { position: static; }\n .ls__palette-list[_ngcontent-%COMP%] { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); }\n}\n\n@media (max-width: 900px) {\n .ls[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr);\n grid-template-areas: 'palette' 'stage' 'side';\n }\n .ls__side[_ngcontent-%COMP%] {\n position: static;\n max-height: none;\n }\n}"], changeDetection: 0 });
867
+ MJLoginRegionComponent, LoginStudioInspectorComponent], styles: ["\n\n\n[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.ls__alert[_ngcontent-%COMP%] { margin-bottom: var(--mj-space-4); }\n\n.ls__actions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.ls__hint[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n\n\n.ls[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 11rem minmax(0, 1fr) 20rem;\n grid-template-areas: 'palette stage side';\n gap: var(--mj-space-4);\n align-items: start;\n}\n\n.ls__heading[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--mj-text-secondary);\n}\n\n\n.ls__palette[_ngcontent-%COMP%] {\n grid-area: palette;\n position: sticky;\n top: 0;\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n.ls__palette-list[_ngcontent-%COMP%] {\n display: grid;\n gap: var(--mj-space-2);\n}\n\n.ls__tile[_ngcontent-%COMP%] {\n justify-content: flex-start;\n width: 100%;\n cursor: grab;\n}\n.ls__tile[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 1.25rem;\n text-align: center;\n}\n\n.ls__tile.cdk-drag-placeholder[_ngcontent-%COMP%] { opacity: 0.4; }\n.ls__tile.cdk-drag-preview[_ngcontent-%COMP%] {\n width: 10rem;\n box-shadow: var(--mj-shadow-lg);\n}\n\n\n.ls__stage[_ngcontent-%COMP%] {\n grid-area: stage;\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-3);\n min-width: 0;\n}\n.ls__stage-bar[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-3);\n}\n\n\n.ls__frame[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n width: 100%;\n max-width: calc(min(62vh, 44rem) * 1.6);\n aspect-ratio: 16 / 10;\n margin-inline: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n background: var(--mj-login-panel-bg);\n}\n.ls__frame--phone[_ngcontent-%COMP%] {\n width: 24rem;\n max-width: 100%;\n height: 46rem;\n margin-inline: auto;\n border-radius: var(--mj-radius-xl);\n}\n\n\n.ls__side[_ngcontent-%COMP%] {\n grid-area: side;\n position: sticky;\n top: 0;\n max-height: calc(100vh - 10rem);\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n background: var(--mj-bg-surface);\n}\n.ls__side-head[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-3) var(--mj-space-4);\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.ls__side-head[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] { color: var(--mj-text-secondary); }\n.ls__side-title[_ngcontent-%COMP%] {\n flex: 1;\n margin: 0;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n\n\n.lp[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n}\n\n\n\n.lp[_ngcontent-%COMP%]:not(.lp--stacked) {\n box-sizing: border-box;\n width: 1440px;\n height: 900px;\n transform-origin: top left;\n}\n.lp--reverse[_ngcontent-%COMP%] { flex-direction: row-reverse; }\n\n.lp__banner[_ngcontent-%COMP%] {\n box-sizing: border-box;\n display: flex;\n flex: var(--mj-login-banner-flex) 1 0;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n padding: var(--mj-space-10) var(--mj-space-8);\n background: var(--mj-login-banner-bg);\n color: var(--mj-login-banner-text);\n}\n.lp__banner--center[_ngcontent-%COMP%] { align-items: center; }\n.lp__brand[_ngcontent-%COMP%] {\n width: 100%;\n margin-block: auto;\n}\n\n.lp__panel[_ngcontent-%COMP%] {\n box-sizing: border-box;\n display: flex;\n flex: var(--mj-login-panel-flex) 1 0;\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n padding: var(--mj-space-8) var(--mj-space-6);\n background: var(--mj-login-panel-bg);\n color: var(--mj-login-panel-text);\n}\n.lp__stack[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-3);\n width: 100%;\n max-width: var(--mj-login-picker-max-width);\n margin-block: auto;\n}\n\n.lp__picker[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--mj-space-3);\n padding-block: var(--mj-space-2);\n}\n\n.lp__heading[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n font-weight: var(--mj-font-bold);\n color: var(--mj-login-panel-text);\n}\n.lp__signin[_ngcontent-%COMP%] {\n display: block;\n padding: var(--mj-space-3);\n border-radius: var(--mj-radius-md);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-weight: var(--mj-font-semibold);\n text-align: center;\n}\n\n.lp__region-label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: calc(-1 * var(--mj-space-2));\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n opacity: 0.55;\n}\n.lp__banner[_ngcontent-%COMP%] .lp__region-label[_ngcontent-%COMP%] { margin-bottom: var(--mj-space-1); }\n.lp__default-note[_ngcontent-%COMP%] {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-xs);\n opacity: 0.75;\n}\n\n\n.lp--centered[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n padding: var(--mj-space-8) var(--mj-space-4);\n background: var(--mj-login-banner-bg);\n}\n.lp--centered[_ngcontent-%COMP%] .lp__banner[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n width: 100%;\n overflow: visible;\n padding: 0 0 var(--mj-space-6);\n background: none;\n align-items: center;\n}\n.lp--centered[_ngcontent-%COMP%] .lp__panel[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n width: 100%;\n max-width: var(--mj-login-centered-card-width);\n overflow: visible;\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-lg);\n}\n\n\n\n.lp--stacked[_ngcontent-%COMP%] { flex-direction: column; }\n.lp--stacked[_ngcontent-%COMP%]:not(.lp--centered) .lp__banner[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n height: 50%;\n padding: var(--mj-space-4);\n align-items: center;\n}\n.lp--stacked[_ngcontent-%COMP%]:not(.lp--centered) .lp__brand[_ngcontent-%COMP%] { margin-block: auto 0; }\n.lp--stacked[_ngcontent-%COMP%]:not(.lp--centered) .lp__panel[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n padding: var(--mj-space-6) var(--mj-space-4);\n}\n\n\n\n.lp__banner[_ngcontent-%COMP%], \n.lp__panel[_ngcontent-%COMP%], \n.lp--centered[_ngcontent-%COMP%] { cursor: pointer; }\n.lp__surface-on[_ngcontent-%COMP%], \n.lp--surface-on[_ngcontent-%COMP%] { box-shadow: inset 0 0 0 2px var(--mj-brand-primary); }\n.lp--centered[_ngcontent-%COMP%] .lp__panel.lp__surface-on[_ngcontent-%COMP%] { box-shadow: var(--mj-shadow-lg), 0 0 0 2px var(--mj-brand-primary); }\n\n\n\n@media (max-width: 1280px) {\n .ls[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr) 19rem;\n grid-template-areas:\n 'palette palette'\n 'stage side';\n }\n .ls__palette[_ngcontent-%COMP%] { position: static; }\n .ls__palette-list[_ngcontent-%COMP%] { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); }\n}\n\n@media (max-width: 900px) {\n .ls[_ngcontent-%COMP%] {\n grid-template-columns: minmax(0, 1fr);\n grid-template-areas: 'palette' 'stage' 'side';\n }\n .ls__side[_ngcontent-%COMP%] {\n position: static;\n max-height: none;\n }\n}"], changeDetection: 0 });
837
868
  };
838
869
  LoginStudioResourceComponent = __decorate([
839
870
  RegisterClass(BaseResourceComponent, 'LoginStudioResource')
@@ -845,13 +876,16 @@ export { LoginStudioResourceComponent };
845
876
  CdkDropListGroup, CdkDropList, CdkDrag, SharedGenericModule, MJAlertComponent, MJButtonDirective, MJEmptyStateComponent,
846
877
  MJPageLayoutComponent, MJPageHeaderComponent, MJPageBodyComponent, MJStatBadgeComponent, MJViewToggleComponent,
847
878
  MJLoginRegionComponent, LoginStudioInspectorComponent,
848
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header Title=\"Sign-in Page\" Icon=\"fa-solid fa-right-to-bracket\"\n [Subtitle]=\"Theme ? 'What visitors see before they sign in. Designed on the default theme, ' + Theme.Name + '.' : 'What visitors see before they sign in.'\">\n <!-- One root element per block: a control-flow block is projected by its single root's selector. -->\n @if (Theme && !Loading && StatusVariant) {\n <mj-stat-badge meta [Label]=\"StatusLabel\" [Variant]=\"StatusVariant\"></mj-stat-badge>\n }\n @if (Theme && !Loading) {\n <div actions class=\"ls__actions\">\n <button type=\"button\" mjButton Variant=\"icon\" Size=\"sm\" (click)=\"Undo()\" [disabled]=\"!CanUndo\" title=\"Undo (Ctrl/Cmd Z)\" AriaLabel=\"Undo\"><i class=\"fa-solid fa-rotate-left\"></i></button>\n <button type=\"button\" mjButton Variant=\"icon\" Size=\"sm\" (click)=\"Redo()\" [disabled]=\"!CanRedo\" title=\"Redo (Shift Ctrl/Cmd Z)\" AriaLabel=\"Redo\"><i class=\"fa-solid fa-rotate-right\"></i></button>\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" (click)=\"Discard()\" [disabled]=\"!Unsaved || Saving\">Discard changes</button>\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" (click)=\"SaveDraft()\" [disabled]=\"Saving || !Unsaved\">\n <i class=\"fa-regular fa-floppy-disk\"></i> Save draft\n </button>\n <button type=\"button\" mjButton Variant=\"primary\" Size=\"sm\" (click)=\"Publish()\"\n [disabled]=\"Saving || (!Unsaved && !Unpublished && IsLive)\" title=\"Save and show this page to everyone signing in\">\n <i class=\"fa-solid fa-upload\"></i> Publish\n </button>\n </div>\n }\n </mj-page-header>\n\n <mj-page-body>\n @if (ErrorMessage) {\n <mj-alert class=\"ls__alert\" Variant=\"error\" [Message]=\"ErrorMessage\" Dismissible (Dismissed)=\"DismissError()\"></mj-alert>\n }\n @if (NoticeMessage) {\n <mj-alert class=\"ls__alert\" Variant=\"success\" [Message]=\"NoticeMessage\" Dismissible (Dismissed)=\"DismissNotice()\"></mj-alert>\n }\n\n @if (Loading) {\n <mj-loading Text=\"Reading the sign-in page...\" Size=\"medium\"></mj-loading>\n } @else if (!Theme) {\n <mj-empty-state Icon=\"fa-solid fa-palette\" Title=\"No default theme\"\n Message=\"The sign-in page is designed on the default theme. Set one in Theme Studio, under Manage Themes.\"></mj-empty-state>\n } @else {\n <div class=\"ls\" cdkDropListGroup>\n <!-- PALETTE -->\n <aside class=\"ls__palette\" aria-label=\"Blocks\">\n <h2 class=\"ls__heading\">Blocks</h2>\n <p class=\"ls__hint\">Drag a block onto the page, or click one to add it after the selected block.</p>\n <div class=\"ls__palette-list\" cdkDropList [cdkDropListData]=\"PaletteListID\" cdkDropListSortingDisabled\n [cdkDropListEnterPredicate]=\"NoEnter\">\n @for (t of Palette; track t.Type) {\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" class=\"ls__tile\" cdkDrag [cdkDragData]=\"t.Type\" (click)=\"AddBlock(t.Type)\" [title]=\"t.Hint\">\n <i [class]=\"t.Icon\" aria-hidden=\"true\"></i>\n <span>{{ t.Label }}</span>\n </button>\n }\n </div>\n </aside>\n\n <!-- PREVIEW -->\n <section class=\"ls__stage\" (click)=\"OnStageClick()\" aria-label=\"Preview\">\n <div class=\"ls__stage-bar\" (click)=\"$event.stopPropagation()\">\n <mj-view-toggle role=\"group\" aria-label=\"Preview size\" [Options]=\"DeviceOptions\" [ActiveKey]=\"Device\" (KeyChange)=\"SetDevice($event)\"></mj-view-toggle>\n <span class=\"ls__hint\">The sign-in button is a stand-in. The real one opens your sign-in provider.</span>\n </div>\n\n <div class=\"ls__frame\" [class.ls__frame--phone]=\"Stacked\" [style]=\"FrameStyle\">\n <!-- Clicking the page selects what was clicked: a block (it stops the click), the sign-in column,\n or else the story panel, which in the centered layout is the whole background. -->\n <div class=\"lp\" [class.lp--reverse]=\"Design.Layout === 'split-reverse'\" [class.lp--centered]=\"Design.Layout === 'centered'\"\n [class.lp--stacked]=\"Stacked\" [class.lp--surface-on]=\"Surface === 'Banner' && Design.Layout === 'centered'\"\n (click)=\"SelectSurface('Banner', $event)\">\n <div class=\"lp__banner\" [class.lp__banner--center]=\"Design.Alignment === 'center' || Stacked\"\n [class.lp__surface-on]=\"Surface === 'Banner' && Design.Layout !== 'centered'\">\n <div class=\"lp__brand\">\n <span class=\"lp__region-label\">{{ RegionLabel.Banner }}</span>\n <mj-login-region Region=\"Banner\" [Blocks]=\"Design.Regions.Banner\" [Logos]=\"Logos\" [BrandName]=\"Theme.Name\"\n [Stacked]=\"Stacked\" [Center]=\"Design.Alignment === 'center' || Stacked\" [Editable]=\"true\"\n [SelectedID]=\"SelectedID\"\n (Dropped)=\"OnDrop($event)\" (SelectRequested)=\"Select($event)\" (CommandRequested)=\"OnCommand($event)\"></mj-login-region>\n @if (!Design.Regions.Banner.length) {\n <p class=\"lp__default-note\">Empty: visitors see the stock logo and \"Welcome back\" here.</p>\n }\n </div>\n </div>\n <div class=\"lp__panel\" [class.lp__surface-on]=\"Surface === 'Panel'\" (click)=\"SelectSurface('Panel', $event)\">\n <div class=\"lp__stack\">\n <span class=\"lp__region-label\">{{ RegionLabel.PanelTop }}</span>\n <mj-login-region Region=\"PanelTop\" [Blocks]=\"Design.Regions.PanelTop\" [Logos]=\"Logos\" [BrandName]=\"Theme.Name\"\n [Stacked]=\"Stacked\" [Editable]=\"true\" [SelectedID]=\"SelectedID\"\n (Dropped)=\"OnDrop($event)\" (SelectRequested)=\"Select($event)\" (CommandRequested)=\"OnCommand($event)\"></mj-login-region>\n <div class=\"lp__picker\" aria-hidden=\"true\">\n @if (Design.Heading) {\n <span class=\"lp__heading\">{{ Design.Heading }}</span>\n }\n <span class=\"lp__signin\">Log in</span>\n </div>\n <span class=\"lp__region-label\">{{ RegionLabel.PanelBottom }}</span>\n <mj-login-region Region=\"PanelBottom\" [Blocks]=\"Design.Regions.PanelBottom\" [Logos]=\"Logos\" [BrandName]=\"Theme.Name\"\n [Stacked]=\"Stacked\" [Editable]=\"true\" [SelectedID]=\"SelectedID\"\n (Dropped)=\"OnDrop($event)\" (SelectRequested)=\"Select($event)\" (CommandRequested)=\"OnCommand($event)\"></mj-login-region>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <!-- INSPECTOR -->\n <aside class=\"ls__side\" aria-label=\"Settings\">\n <div class=\"ls__side-head\">\n <i [class]=\"SideIcon\" aria-hidden=\"true\"></i>\n <h2 class=\"ls__side-title\">{{ SideTitle }}</h2>\n @if (Selected || Surface) {\n <button type=\"button\" mjButton Variant=\"icon\" Size=\"sm\" (click)=\"Select(null)\" title=\"Page settings\" AriaLabel=\"Back to page settings\">\n <i class=\"fa-solid fa-table-columns\"></i>\n </button>\n }\n </div>\n <mj-login-studio-inspector [Design]=\"Design\" [Selected]=\"Selected\" [SelectedRegion]=\"SelectedRegion\" [Surface]=\"Surface\"\n [CanReset]=\"IsLive || Unpublished\" [Saving]=\"Saving\"\n (EditRequested)=\"ApplyEdit($event)\" (CommandRequested)=\"OnCommand($event)\"\n (StockPageRequested)=\"UseStockPage()\" (SurfaceSelectRequested)=\"SelectSurface($event)\"></mj-login-studio-inspector>\n </aside>\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Login Studio: the editor's three columns (blocks | preview | settings), then a picture of the Explorer\n login screen inside the preview frame, drawn with this screen's own classes and the --mj-login-* tokens. */\n\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.ls__alert { margin-bottom: var(--mj-space-4); }\n\n.ls__actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.ls__hint {\n margin: 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n/* ============================== THE EDITOR ============================== */\n\n.ls {\n display: grid;\n grid-template-columns: 11rem minmax(0, 1fr) 20rem;\n grid-template-areas: 'palette stage side';\n gap: var(--mj-space-4);\n align-items: start;\n}\n\n.ls__heading {\n margin: 0;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--mj-text-secondary);\n}\n\n/* \u2500\u2500 blocks \u2500\u2500 */\n.ls__palette {\n grid-area: palette;\n position: sticky;\n top: 0;\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n.ls__palette-list {\n display: grid;\n gap: var(--mj-space-2);\n}\n/* Layout only: the tile's look is mjButton's. */\n.ls__tile {\n justify-content: flex-start;\n width: 100%;\n cursor: grab;\n}\n.ls__tile i {\n width: 1.25rem;\n text-align: center;\n}\n/* Dragged out, the tile keeps its place in the palette (a drop creates a block; it moves nothing). */\n.ls__tile.cdk-drag-placeholder { opacity: 0.4; }\n.ls__tile.cdk-drag-preview {\n width: 10rem;\n box-shadow: var(--mj-shadow-lg);\n}\n\n/* \u2500\u2500 preview \u2500\u2500 */\n.ls__stage {\n grid-area: stage;\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-3);\n min-width: 0;\n}\n.ls__stage-bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-3);\n}\n\n/* A desktop-proportioned page, or a phone. */\n.ls__frame {\n position: relative;\n overflow: hidden;\n width: 100%;\n height: clamp(30rem, 62vh, 44rem);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n background: var(--mj-login-panel-bg);\n}\n.ls__frame--phone {\n width: 24rem;\n max-width: 100%;\n height: 46rem;\n margin-inline: auto;\n border-radius: var(--mj-radius-xl);\n}\n\n/* \u2500\u2500 settings \u2500\u2500 */\n.ls__side {\n grid-area: side;\n position: sticky;\n top: 0;\n max-height: calc(100vh - 10rem);\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n background: var(--mj-bg-surface);\n}\n.ls__side-head {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-3) var(--mj-space-4);\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.ls__side-head > i { color: var(--mj-text-secondary); }\n.ls__side-title {\n flex: 1;\n margin: 0;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n/* ============================== THE PICTURE OF THE LOGIN SCREEN ============================== */\n\n.lp {\n display: flex;\n height: 100%;\n}\n.lp--reverse { flex-direction: row-reverse; }\n\n.lp__banner {\n box-sizing: border-box;\n display: flex;\n flex: var(--mj-login-banner-flex) 1 0;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n padding: var(--mj-space-10) var(--mj-space-8);\n background: var(--mj-login-banner-bg);\n color: var(--mj-login-banner-text);\n}\n.lp__banner--center { align-items: center; }\n.lp__brand {\n width: 100%;\n margin-block: auto;\n}\n\n.lp__panel {\n box-sizing: border-box;\n display: flex;\n flex: var(--mj-login-panel-flex) 1 0;\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n padding: var(--mj-space-8) var(--mj-space-6);\n background: var(--mj-login-panel-bg);\n color: var(--mj-login-panel-text);\n}\n.lp__stack {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-3);\n width: 100%;\n max-width: var(--mj-login-picker-max-width);\n margin-block: auto;\n}\n\n.lp__picker {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--mj-space-3);\n padding-block: var(--mj-space-2);\n}\n/* As <mj-login-picker> draws its heading. */\n.lp__heading {\n font-size: var(--mj-text-2xl);\n font-weight: var(--mj-font-bold);\n color: var(--mj-login-panel-text);\n}\n.lp__signin {\n display: block;\n padding: var(--mj-space-3);\n border-radius: var(--mj-radius-md);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-weight: var(--mj-font-semibold);\n text-align: center;\n}\n\n.lp__region-label {\n display: block;\n margin-bottom: calc(-1 * var(--mj-space-2));\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n opacity: 0.55;\n}\n.lp__banner .lp__region-label { margin-bottom: var(--mj-space-1); }\n.lp__default-note {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-xs);\n opacity: 0.75;\n}\n\n/* Centered: one column on the banner background, the sign-in options a card on top of it. */\n.lp--centered {\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n padding: var(--mj-space-8) var(--mj-space-4);\n background: var(--mj-login-banner-bg);\n}\n.lp--centered .lp__banner {\n flex: 0 0 auto;\n width: 100%;\n overflow: visible;\n padding: 0 0 var(--mj-space-6);\n background: none;\n align-items: center;\n}\n.lp--centered .lp__panel {\n flex: 0 0 auto;\n width: 100%;\n max-width: var(--mj-login-centered-card-width);\n overflow: visible;\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-lg);\n}\n\n/* Stacked (the login screen's 900px layout, where the banner is 35dvh): the banner shortens above the sign-in column. */\n.lp--stacked { flex-direction: column; }\n.lp--stacked:not(.lp--centered) .lp__banner {\n flex: 0 0 auto;\n height: 35%;\n padding: var(--mj-space-5);\n align-items: center;\n}\n.lp--stacked:not(.lp--centered) .lp__brand { margin-block: auto 0; }\n.lp--stacked:not(.lp--centered) .lp__panel {\n flex: 1 1 auto;\n padding: var(--mj-space-6) var(--mj-space-4);\n}\n\n/* The story panel and the sign-in column are selectable (their settings and colors open in the\n inspector): a pointer says so, and the selected one is outlined. Inset, because both scroll. */\n.lp__banner,\n.lp__panel,\n.lp--centered { cursor: pointer; }\n.lp__surface-on,\n.lp--surface-on { box-shadow: inset 0 0 0 2px var(--mj-brand-primary); }\n.lp--centered .lp__panel.lp__surface-on { box-shadow: var(--mj-shadow-lg), 0 0 0 2px var(--mj-brand-primary); }\n\n/* ============================== NARROWER ============================== */\n\n@media (max-width: 1280px) {\n .ls {\n grid-template-columns: minmax(0, 1fr) 19rem;\n grid-template-areas:\n 'palette palette'\n 'stage side';\n }\n .ls__palette { position: static; }\n .ls__palette-list { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); }\n}\n\n@media (max-width: 900px) {\n .ls {\n grid-template-columns: minmax(0, 1fr);\n grid-template-areas: 'palette' 'stage' 'side';\n }\n .ls__side {\n position: static;\n max-height: none;\n }\n}\n"] }]
849
- }], null, { OnBeforeUnload: [{
879
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header Title=\"Sign-in Page\" Icon=\"fa-solid fa-right-to-bracket\"\n [Subtitle]=\"Theme ? 'What visitors see before they sign in. Designed on the default theme, ' + Theme.Name + '.' : 'What visitors see before they sign in.'\">\n <!-- One root element per block: a control-flow block is projected by its single root's selector. -->\n @if (Theme && !Loading && StatusVariant) {\n <mj-stat-badge meta [Label]=\"StatusLabel\" [Variant]=\"StatusVariant\"></mj-stat-badge>\n }\n @if (Theme && !Loading) {\n <div actions class=\"ls__actions\">\n <button type=\"button\" mjButton Variant=\"icon\" Size=\"sm\" (click)=\"Undo()\" [disabled]=\"!CanUndo\" title=\"Undo (Ctrl/Cmd Z)\" AriaLabel=\"Undo\"><i class=\"fa-solid fa-rotate-left\"></i></button>\n <button type=\"button\" mjButton Variant=\"icon\" Size=\"sm\" (click)=\"Redo()\" [disabled]=\"!CanRedo\" title=\"Redo (Shift Ctrl/Cmd Z)\" AriaLabel=\"Redo\"><i class=\"fa-solid fa-rotate-right\"></i></button>\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" (click)=\"Discard()\" [disabled]=\"!Unsaved || Saving\">Discard changes</button>\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" (click)=\"SaveDraft()\" [disabled]=\"Saving || !Unsaved\">\n <i class=\"fa-regular fa-floppy-disk\"></i> Save draft\n </button>\n <button type=\"button\" mjButton Variant=\"primary\" Size=\"sm\" (click)=\"Publish()\"\n [disabled]=\"Saving || (!Unsaved && !Unpublished && IsLive)\" title=\"Save and show this page to everyone signing in\">\n <i class=\"fa-solid fa-upload\"></i> Publish\n </button>\n </div>\n }\n </mj-page-header>\n\n <mj-page-body>\n @if (ErrorMessage) {\n <mj-alert class=\"ls__alert\" Variant=\"error\" [Message]=\"ErrorMessage\" Dismissible (Dismissed)=\"DismissError()\"></mj-alert>\n }\n @if (NoticeMessage) {\n <mj-alert class=\"ls__alert\" Variant=\"success\" [Message]=\"NoticeMessage\" Dismissible (Dismissed)=\"DismissNotice()\"></mj-alert>\n }\n\n @if (Loading) {\n <mj-loading Text=\"Reading the sign-in page...\" Size=\"medium\"></mj-loading>\n } @else if (!Theme) {\n <mj-empty-state Icon=\"fa-solid fa-palette\" Title=\"No default theme\"\n Message=\"The sign-in page is designed on the default theme. Set one in Theme Studio, under Manage Themes.\"></mj-empty-state>\n } @else {\n <div class=\"ls\" cdkDropListGroup>\n <!-- PALETTE -->\n <aside class=\"ls__palette\" aria-label=\"Blocks\">\n <h2 class=\"ls__heading\">Blocks</h2>\n <p class=\"ls__hint\">Drag a block onto the page, or click one to add it after the selected block.</p>\n <div class=\"ls__palette-list\" cdkDropList [cdkDropListData]=\"PaletteListID\" cdkDropListSortingDisabled\n [cdkDropListEnterPredicate]=\"NoEnter\">\n @for (t of Palette; track t.Type) {\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" class=\"ls__tile\" cdkDrag [cdkDragData]=\"t.Type\" (click)=\"AddBlock(t.Type)\" [title]=\"t.Hint\">\n <i [class]=\"t.Icon\" aria-hidden=\"true\"></i>\n <span>{{ t.Label }}</span>\n </button>\n }\n </div>\n </aside>\n\n <!-- PREVIEW -->\n <section class=\"ls__stage\" (click)=\"OnStageClick()\" aria-label=\"Preview\">\n <div class=\"ls__stage-bar\" (click)=\"$event.stopPropagation()\">\n <mj-view-toggle role=\"group\" aria-label=\"Preview size\" [Options]=\"DeviceOptions\" [ActiveKey]=\"Device\" (KeyChange)=\"SetDevice($event)\"></mj-view-toggle>\n <span class=\"ls__hint\">The sign-in button is a stand-in. The real one opens your sign-in provider.</span>\n </div>\n\n <div class=\"ls__frame\" #frame [class.ls__frame--phone]=\"Stacked\" [style]=\"FrameStyle\">\n <!-- Clicking the page selects what was clicked: a block (it stops the click), the sign-in column,\n or else the story panel, which in the centered layout is the whole background. -->\n <div class=\"lp\" [class.lp--reverse]=\"Design.Layout === 'split-reverse'\" [class.lp--centered]=\"Design.Layout === 'centered'\"\n [class.lp--stacked]=\"Stacked\" [class.lp--surface-on]=\"Surface === 'Banner' && Design.Layout === 'centered'\"\n [style.transform]=\"Stacked ? null : 'scale(' + DesktopScale + ')'\"\n (click)=\"SelectSurface('Banner', $event)\">\n <div class=\"lp__banner\" [class.lp__banner--center]=\"Design.Alignment === 'center' || Stacked\"\n [class.lp__surface-on]=\"Surface === 'Banner' && Design.Layout !== 'centered'\">\n <div class=\"lp__brand\">\n <span class=\"lp__region-label\">{{ RegionLabel.Banner }}</span>\n <mj-login-region Region=\"Banner\" [Blocks]=\"Design.Regions.Banner\" [Logos]=\"Logos\" [BrandName]=\"Theme.Name\"\n [Stacked]=\"Stacked\" [Center]=\"Design.Alignment === 'center' || Stacked\" [Editable]=\"true\"\n [SelectedID]=\"SelectedID\"\n (Dropped)=\"OnDrop($event)\" (SelectRequested)=\"Select($event)\" (CommandRequested)=\"OnCommand($event)\"></mj-login-region>\n @if (!Design.Regions.Banner.length) {\n <p class=\"lp__default-note\">Empty: visitors see the stock logo and \"Welcome back\" here.</p>\n }\n </div>\n </div>\n <div class=\"lp__panel\" [class.lp__surface-on]=\"Surface === 'Panel'\" (click)=\"SelectSurface('Panel', $event)\">\n <div class=\"lp__stack\">\n <span class=\"lp__region-label\">{{ RegionLabel.PanelTop }}</span>\n <mj-login-region Region=\"PanelTop\" [Blocks]=\"Design.Regions.PanelTop\" [Logos]=\"Logos\" [BrandName]=\"Theme.Name\"\n [Stacked]=\"Stacked\" [Editable]=\"true\" [SelectedID]=\"SelectedID\"\n (Dropped)=\"OnDrop($event)\" (SelectRequested)=\"Select($event)\" (CommandRequested)=\"OnCommand($event)\"></mj-login-region>\n <div class=\"lp__picker\" aria-hidden=\"true\">\n @if (Design.Heading) {\n <span class=\"lp__heading\">{{ Design.Heading }}</span>\n }\n <span class=\"lp__signin\">Log in</span>\n </div>\n <span class=\"lp__region-label\">{{ RegionLabel.PanelBottom }}</span>\n <mj-login-region Region=\"PanelBottom\" [Blocks]=\"Design.Regions.PanelBottom\" [Logos]=\"Logos\" [BrandName]=\"Theme.Name\"\n [Stacked]=\"Stacked\" [Editable]=\"true\" [SelectedID]=\"SelectedID\"\n (Dropped)=\"OnDrop($event)\" (SelectRequested)=\"Select($event)\" (CommandRequested)=\"OnCommand($event)\"></mj-login-region>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <!-- INSPECTOR -->\n <aside class=\"ls__side\" aria-label=\"Settings\">\n <div class=\"ls__side-head\">\n <i [class]=\"SideIcon\" aria-hidden=\"true\"></i>\n <h2 class=\"ls__side-title\">{{ SideTitle }}</h2>\n @if (Selected || Surface) {\n <button type=\"button\" mjButton Variant=\"icon\" Size=\"sm\" (click)=\"Select(null)\" title=\"Page settings\" AriaLabel=\"Back to page settings\">\n <i class=\"fa-solid fa-table-columns\"></i>\n </button>\n }\n </div>\n <mj-login-studio-inspector [Design]=\"Design\" [Selected]=\"Selected\" [SelectedRegion]=\"SelectedRegion\" [Surface]=\"Surface\"\n [CanReset]=\"IsLive || Unpublished\" [Saving]=\"Saving\"\n (EditRequested)=\"ApplyEdit($event)\" (CommandRequested)=\"OnCommand($event)\"\n (StockPageRequested)=\"UseStockPage()\" (SurfaceSelectRequested)=\"SelectSurface($event)\"></mj-login-studio-inspector>\n </aside>\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Login Studio: the editor's three columns (blocks | preview | settings), then a picture of the Explorer\n login screen inside the preview frame, drawn with this screen's own classes and the --mj-login-* tokens. */\n\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.ls__alert { margin-bottom: var(--mj-space-4); }\n\n.ls__actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.ls__hint {\n margin: 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n/* ============================== THE EDITOR ============================== */\n\n.ls {\n display: grid;\n grid-template-columns: 11rem minmax(0, 1fr) 20rem;\n grid-template-areas: 'palette stage side';\n gap: var(--mj-space-4);\n align-items: start;\n}\n\n.ls__heading {\n margin: 0;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--mj-text-secondary);\n}\n\n/* \u2500\u2500 blocks \u2500\u2500 */\n.ls__palette {\n grid-area: palette;\n position: sticky;\n top: 0;\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n.ls__palette-list {\n display: grid;\n gap: var(--mj-space-2);\n}\n/* Layout only: the tile's look is mjButton's. */\n.ls__tile {\n justify-content: flex-start;\n width: 100%;\n cursor: grab;\n}\n.ls__tile i {\n width: 1.25rem;\n text-align: center;\n}\n/* Dragged out, the tile keeps its place in the palette (a drop creates a block; it moves nothing). */\n.ls__tile.cdk-drag-placeholder { opacity: 0.4; }\n.ls__tile.cdk-drag-preview {\n width: 10rem;\n box-shadow: var(--mj-shadow-lg);\n}\n\n/* \u2500\u2500 preview \u2500\u2500 */\n.ls__stage {\n grid-area: stage;\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-3);\n min-width: 0;\n}\n.ls__stage-bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--mj-space-3);\n}\n\n/* A 16:10 desktop screen, no taller than the window has room for, or a phone. */\n.ls__frame {\n position: relative;\n overflow: hidden;\n width: 100%;\n max-width: calc(min(62vh, 44rem) * 1.6);\n aspect-ratio: 16 / 10;\n margin-inline: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n background: var(--mj-login-panel-bg);\n}\n.ls__frame--phone {\n width: 24rem;\n max-width: 100%;\n height: 46rem;\n margin-inline: auto;\n border-radius: var(--mj-radius-xl);\n}\n\n/* \u2500\u2500 settings \u2500\u2500 */\n.ls__side {\n grid-area: side;\n position: sticky;\n top: 0;\n max-height: calc(100vh - 10rem);\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n background: var(--mj-bg-surface);\n}\n.ls__side-head {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-3) var(--mj-space-4);\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.ls__side-head > i { color: var(--mj-text-secondary); }\n.ls__side-title {\n flex: 1;\n margin: 0;\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n/* ============================== THE PICTURE OF THE LOGIN SCREEN ============================== */\n\n.lp {\n display: flex;\n height: 100%;\n}\n/* Desktop: the page laid out at a real screen's size (DESKTOP_WIDTH in the component), then scaled to the\n frame, so type and spacing shrink in proportion. At 1:1 a frame this narrow would draw a layout no\n visitor gets at that width. */\n.lp:not(.lp--stacked) {\n box-sizing: border-box;\n width: 1440px;\n height: 900px;\n transform-origin: top left;\n}\n.lp--reverse { flex-direction: row-reverse; }\n\n.lp__banner {\n box-sizing: border-box;\n display: flex;\n flex: var(--mj-login-banner-flex) 1 0;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n padding: var(--mj-space-10) var(--mj-space-8);\n background: var(--mj-login-banner-bg);\n color: var(--mj-login-banner-text);\n}\n.lp__banner--center { align-items: center; }\n.lp__brand {\n width: 100%;\n margin-block: auto;\n}\n\n.lp__panel {\n box-sizing: border-box;\n display: flex;\n flex: var(--mj-login-panel-flex) 1 0;\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n padding: var(--mj-space-8) var(--mj-space-6);\n background: var(--mj-login-panel-bg);\n color: var(--mj-login-panel-text);\n}\n.lp__stack {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-3);\n width: 100%;\n max-width: var(--mj-login-picker-max-width);\n margin-block: auto;\n}\n\n.lp__picker {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--mj-space-3);\n padding-block: var(--mj-space-2);\n}\n/* As <mj-login-picker> draws its heading. */\n.lp__heading {\n font-size: var(--mj-text-2xl);\n font-weight: var(--mj-font-bold);\n color: var(--mj-login-panel-text);\n}\n.lp__signin {\n display: block;\n padding: var(--mj-space-3);\n border-radius: var(--mj-radius-md);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-weight: var(--mj-font-semibold);\n text-align: center;\n}\n\n.lp__region-label {\n display: block;\n margin-bottom: calc(-1 * var(--mj-space-2));\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n opacity: 0.55;\n}\n.lp__banner .lp__region-label { margin-bottom: var(--mj-space-1); }\n.lp__default-note {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-xs);\n opacity: 0.75;\n}\n\n/* Centered: one column on the banner background, the sign-in options a card on top of it. */\n.lp--centered {\n flex-direction: column;\n align-items: center;\n overflow-y: auto;\n padding: var(--mj-space-8) var(--mj-space-4);\n background: var(--mj-login-banner-bg);\n}\n.lp--centered .lp__banner {\n flex: 0 0 auto;\n width: 100%;\n overflow: visible;\n padding: 0 0 var(--mj-space-6);\n background: none;\n align-items: center;\n}\n.lp--centered .lp__panel {\n flex: 0 0 auto;\n width: 100%;\n max-width: var(--mj-login-centered-card-width);\n overflow: visible;\n border-radius: var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-lg);\n}\n\n/* Stacked (the phone preview: the login screen at 480px and below, where the banner is 50dvh): the banner\n shortens above the sign-in column. */\n.lp--stacked { flex-direction: column; }\n.lp--stacked:not(.lp--centered) .lp__banner {\n flex: 0 0 auto;\n height: 50%;\n padding: var(--mj-space-4);\n align-items: center;\n}\n.lp--stacked:not(.lp--centered) .lp__brand { margin-block: auto 0; }\n.lp--stacked:not(.lp--centered) .lp__panel {\n flex: 1 1 auto;\n padding: var(--mj-space-6) var(--mj-space-4);\n}\n\n/* The story panel and the sign-in column are selectable (their settings and colors open in the\n inspector): a pointer says so, and the selected one is outlined. Inset, because both scroll. */\n.lp__banner,\n.lp__panel,\n.lp--centered { cursor: pointer; }\n.lp__surface-on,\n.lp--surface-on { box-shadow: inset 0 0 0 2px var(--mj-brand-primary); }\n.lp--centered .lp__panel.lp__surface-on { box-shadow: var(--mj-shadow-lg), 0 0 0 2px var(--mj-brand-primary); }\n\n/* ============================== NARROWER ============================== */\n\n@media (max-width: 1280px) {\n .ls {\n grid-template-columns: minmax(0, 1fr) 19rem;\n grid-template-areas:\n 'palette palette'\n 'stage side';\n }\n .ls__palette { position: static; }\n .ls__palette-list { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); }\n}\n\n@media (max-width: 900px) {\n .ls {\n grid-template-columns: minmax(0, 1fr);\n grid-template-areas: 'palette' 'stage' 'side';\n }\n .ls__side {\n position: static;\n max-height: none;\n }\n}\n"] }]
880
+ }], null, { frameRef: [{
881
+ type: ViewChild,
882
+ args: ['frame']
883
+ }], OnBeforeUnload: [{
850
884
  type: HostListener,
851
885
  args: ['window:beforeunload', ['$event']]
852
886
  }], OnKeydown: [{
853
887
  type: HostListener,
854
888
  args: ['keydown', ['$event']]
855
889
  }] }); })();
856
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LoginStudioResourceComponent, { className: "LoginStudioResourceComponent", filePath: "src/LoginStudio/login-studio-resource.component.ts", lineNumber: 61 }); })();
890
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LoginStudioResourceComponent, { className: "LoginStudioResourceComponent", filePath: "src/LoginStudio/login-studio-resource.component.ts", lineNumber: 65 }); })();
857
891
  //# sourceMappingURL=login-studio-resource.component.js.map