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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +28 -0
  2. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
  3. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  4. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +15 -7
  5. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  6. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
  7. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  8. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +209 -57
  9. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  10. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
  11. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
  12. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
  13. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +28 -16
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
  18. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  19. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +30 -6
  20. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  21. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
  22. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  23. package/dist/AI/components/tags/tags-resource.component.js +15 -7
  24. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  25. package/dist/AI/components/vectors/sensitive-fields.d.ts +9 -4
  26. package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -1
  27. package/dist/AI/components/vectors/sensitive-fields.js +39 -14
  28. package/dist/AI/components/vectors/sensitive-fields.js.map +1 -1
  29. package/dist/AI/components/vectors/vector-document-rules.d.ts +13 -0
  30. package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -1
  31. package/dist/AI/components/vectors/vector-document-rules.js +14 -0
  32. package/dist/AI/components/vectors/vector-document-rules.js.map +1 -1
  33. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +34 -14
  34. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  35. package/dist/AI/components/vectors/vector-management-resource.component.js +127 -50
  36. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  37. package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
  38. package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
  39. package/dist/AI/components/vectors/vector-store-selection.js +57 -0
  40. package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
  41. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +236 -0
  42. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
  43. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +374 -0
  44. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
  45. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +195 -0
  46. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +1 -0
  47. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +2910 -0
  48. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +1 -0
  49. package/dist/ChiefOfStaff/index.d.ts +3 -0
  50. package/dist/ChiefOfStaff/index.d.ts.map +1 -0
  51. package/dist/ChiefOfStaff/index.js +3 -0
  52. package/dist/ChiefOfStaff/index.js.map +1 -0
  53. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  54. package/dist/Communication/communication-logs-resource.component.js +2 -1
  55. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  56. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  57. package/dist/Communication/communication-monitor-resource.component.js +23 -18
  58. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  59. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  60. package/dist/Communication/communication-runs-resource.component.js +11 -10
  61. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  62. package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
  63. package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
  64. package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
  65. package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
  66. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +24 -0
  67. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  68. package/dist/DataExplorer/data-explorer-dashboard.component.js +146 -50
  69. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  70. package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
  71. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  72. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  73. package/dist/LoginStudio/login-studio-resource.component.d.ts +10 -2
  74. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
  75. package/dist/LoginStudio/login-studio-resource.component.js +110 -77
  76. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
  77. package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
  78. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  79. package/dist/MCP/mcp-dashboard.component.js +118 -65
  80. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  81. package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
  82. package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
  83. package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
  84. package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
  85. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
  86. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  87. package/dist/PredictiveStudio/components/ps-experiments.component.js +256 -521
  88. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  89. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
  90. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
  91. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +122 -249
  92. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
  93. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
  94. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  95. package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
  96. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  97. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
  98. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  99. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +335 -326
  100. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  101. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
  102. package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
  103. package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
  104. package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
  105. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
  106. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  107. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +51 -2
  108. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  109. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
  110. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
  111. package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
  112. package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
  113. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
  114. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
  115. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
  116. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
  117. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
  118. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  119. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +185 -103
  120. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  121. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
  122. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  123. package/dist/ai-dashboards.module.d.ts +22 -21
  124. package/dist/ai-dashboards.module.d.ts.map +1 -1
  125. package/dist/ai-dashboards.module.js +8 -2
  126. package/dist/ai-dashboards.module.js.map +1 -1
  127. package/dist/public-api.d.ts +2 -0
  128. package/dist/public-api.d.ts.map +1 -1
  129. package/dist/public-api.js +3 -0
  130. package/dist/public-api.js.map +1 -1
  131. package/package.json +71 -71
  132. package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
  133. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
  134. package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
  135. package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
  136. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
  137. package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
  138. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
  139. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
  140. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
  141. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
  142. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
  143. 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
  }
@@ -764,6 +781,14 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
764
781
  this.cdr.markForCheck();
765
782
  }
766
783
  // ── Preview, agent, shell ───────────────────────────────────────────────────────────────────
784
+ /** Fit the desktop page to the frame. A hidden tab's frame measures 0, so it keeps its last fit. */
785
+ fitDesktop(width) {
786
+ if (!width)
787
+ return;
788
+ this.DesktopScale = width / DESKTOP_WIDTH;
789
+ // The observer runs outside Angular's zone, so check the view now rather than mark it.
790
+ this.cdr.detectChanges();
791
+ }
767
792
  /** After any change: the problems alert, the preview, the agent's view, the shell's edit state, and the view. */
768
793
  changed() {
769
794
  // A save refused for problems re-checks as you edit (or undo), and its alert goes once they are fixed.
@@ -806,17 +831,22 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
806
831
  ]);
807
832
  }
808
833
  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) {
834
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LoginStudioResourceComponent, selectors: [["mj-login-studio-resource"]], viewQuery: function LoginStudioResourceComponent_Query(rf, ctx) { if (rf & 1) {
835
+ i0.ɵɵviewQuery(_c0, 5);
836
+ } if (rf & 2) {
837
+ let _t;
838
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.frameRef = _t.first);
839
+ } }, hostBindings: function LoginStudioResourceComponent_HostBindings(rf, ctx) { if (rf & 1) {
810
840
  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);
841
+ } }, 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) {
842
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1);
843
+ i0.ɵɵconditionalCreate(2, LoginStudioResourceComponent_Conditional_2_Template, 1, 2, "mj-stat-badge", 2);
844
+ i0.ɵɵconditionalCreate(3, LoginStudioResourceComponent_Conditional_3_Template, 13, 5, "div", 3);
815
845
  i0.ɵɵelementEnd();
816
846
  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);
847
+ i0.ɵɵconditionalCreate(5, LoginStudioResourceComponent_Conditional_5_Template, 1, 1, "mj-alert", 4);
848
+ i0.ɵɵconditionalCreate(6, LoginStudioResourceComponent_Conditional_6_Template, 1, 1, "mj-alert", 5);
849
+ 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
850
  i0.ɵɵelementEnd()();
821
851
  } if (rf & 2) {
822
852
  i0.ɵɵadvance();
@@ -833,7 +863,7 @@ let LoginStudioResourceComponent = class LoginStudioResourceComponent extends Ba
833
863
  i0.ɵɵconditional(ctx.Loading ? 7 : !ctx.Theme ? 8 : 9);
834
864
  } }, dependencies: [CdkDropListGroup, CdkDropList, CdkDrag, SharedGenericModule, i1.LoadingComponent, MJAlertComponent, MJButtonDirective, MJEmptyStateComponent,
835
865
  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 });
866
+ 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
867
  };
838
868
  LoginStudioResourceComponent = __decorate([
839
869
  RegisterClass(BaseResourceComponent, 'LoginStudioResource')
@@ -845,13 +875,16 @@ export { LoginStudioResourceComponent };
845
875
  CdkDropListGroup, CdkDropList, CdkDrag, SharedGenericModule, MJAlertComponent, MJButtonDirective, MJEmptyStateComponent,
846
876
  MJPageLayoutComponent, MJPageHeaderComponent, MJPageBodyComponent, MJStatBadgeComponent, MJViewToggleComponent,
847
877
  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: [{
878
+ ], 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"] }]
879
+ }], null, { frameRef: [{
880
+ type: ViewChild,
881
+ args: ['frame']
882
+ }], OnBeforeUnload: [{
850
883
  type: HostListener,
851
884
  args: ['window:beforeunload', ['$event']]
852
885
  }], OnKeydown: [{
853
886
  type: HostListener,
854
887
  args: ['keydown', ['$event']]
855
888
  }] }); })();
856
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LoginStudioResourceComponent, { className: "LoginStudioResourceComponent", filePath: "src/LoginStudio/login-studio-resource.component.ts", lineNumber: 61 }); })();
889
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LoginStudioResourceComponent, { className: "LoginStudioResourceComponent", filePath: "src/LoginStudio/login-studio-resource.component.ts", lineNumber: 65 }); })();
857
890
  //# sourceMappingURL=login-studio-resource.component.js.map