@pega/angular-sdk-overrides 25.1.13 → 26.1.10

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 (153) hide show
  1. package/lib/designSystemExtension/alert/alert.component.html +4 -1
  2. package/lib/designSystemExtension/alert/alert.component.scss +9 -10
  3. package/lib/designSystemExtension/alert/alert.component.ts +6 -2
  4. package/lib/designSystemExtension/field-group/field-group.component.ts +11 -3
  5. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +51 -36
  6. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +12 -0
  7. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.ts +11 -0
  8. package/lib/designSystemExtension/operator/operator.component.html +5 -3
  9. package/lib/designSystemExtension/operator/operator.component.scss +7 -0
  10. package/lib/designSystemExtension/operator/operator.component.ts +2 -1
  11. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.html +100 -10
  12. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +141 -1
  13. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.spec.ts +1 -1
  14. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +240 -72
  15. package/lib/field/auto-complete/auto-complete.component.html +46 -5
  16. package/lib/field/auto-complete/auto-complete.component.scss +92 -0
  17. package/lib/field/auto-complete/auto-complete.component.ts +350 -23
  18. package/lib/field/cancel-alert/cancel-alert.component.ts +38 -15
  19. package/lib/field/check-box/check-box.component.html +8 -6
  20. package/lib/field/check-box/check-box.component.ts +9 -2
  21. package/lib/field/currency/currency.component.html +2 -1
  22. package/lib/field/currency/currency.component.ts +10 -1
  23. package/lib/field/date/date.component.html +2 -1
  24. package/lib/field/date/date.component.ts +2 -0
  25. package/lib/field/date-time/date-time.component.html +2 -1
  26. package/lib/field/date-time/date-time.component.scss +46 -40
  27. package/lib/field/date-time/date-time.component.ts +29 -0
  28. package/lib/field/decimal/decimal.component.html +2 -1
  29. package/lib/field/decimal/decimal.component.ts +2 -0
  30. package/lib/field/dropdown/dropdown.component.html +4 -1
  31. package/lib/field/dropdown/dropdown.component.ts +18 -19
  32. package/lib/field/email/email.component.html +2 -1
  33. package/lib/field/email/email.component.ts +2 -2
  34. package/lib/field/embedded-data-multi/embedded-data-multi.component.html +3 -0
  35. package/lib/field/embedded-data-multi/embedded-data-multi.component.scss +0 -0
  36. package/lib/field/embedded-data-multi/embedded-data-multi.component.ts +173 -0
  37. package/lib/field/field.base.ts +27 -1
  38. package/lib/field/group/group.component.html +1 -1
  39. package/lib/field/group/group.component.ts +15 -5
  40. package/lib/field/integer/integer.component.html +2 -1
  41. package/lib/field/integer/integer.component.ts +4 -2
  42. package/lib/field/location/location.component.html +2 -1
  43. package/lib/field/location/location.component.ts +3 -1
  44. package/lib/field/multiselect/multiselect.component.html +1 -1
  45. package/lib/field/multiselect/multiselect.component.ts +23 -4
  46. package/lib/field/multiselect/utils.ts +5 -3
  47. package/lib/field/object-reference/object-reference.component.html +30 -15
  48. package/lib/field/object-reference/object-reference.component.ts +818 -94
  49. package/lib/field/percentage/percentage.component.html +2 -1
  50. package/lib/field/percentage/percentage.component.ts +10 -1
  51. package/lib/field/phone/phone.component.html +2 -1
  52. package/lib/field/phone/phone.component.ts +2 -1
  53. package/lib/field/radio-buttons/radio-buttons.component.html +2 -1
  54. package/lib/field/radio-buttons/radio-buttons.component.ts +10 -1
  55. package/lib/field/rich-text/rich-text.component.scss +1 -166
  56. package/lib/field/rich-text/rich-text.component.spec.ts +1 -1
  57. package/lib/field/rich-text/rich-text.component.ts +1 -1
  58. package/lib/field/selectable-card/selectable-card.component.html +1 -0
  59. package/lib/field/selectable-card/selectable-card.component.ts +31 -16
  60. package/lib/field/semantic-link/semantic-link.component.html +1 -1
  61. package/lib/field/semantic-link/semantic-link.component.scss +4 -0
  62. package/lib/field/semantic-link/semantic-link.component.ts +13 -7
  63. package/lib/field/text-area/text-area.component.html +2 -1
  64. package/lib/field/text-area/text-area.component.ts +2 -1
  65. package/lib/field/text-input/text-input.component.html +2 -1
  66. package/lib/field/text-input/text-input.component.ts +2 -1
  67. package/lib/field/time/time.component.html +2 -1
  68. package/lib/field/time/time.component.ts +2 -1
  69. package/lib/field/url/url.component.html +2 -1
  70. package/lib/field/url/url.component.ts +2 -1
  71. package/lib/field/user-reference/user-reference.component.html +4 -2
  72. package/lib/field/user-reference/user-reference.component.ts +11 -6
  73. package/lib/infra/Containers/flow-container/flow-container.component.html +1 -1
  74. package/lib/infra/Containers/flow-container/flow-container.component.ts +35 -46
  75. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.html +12 -0
  76. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.spec.ts +130 -0
  77. package/lib/infra/Containers/modal-view-container/data-view-action-buttons/data-view-action-buttons.component.ts +77 -0
  78. package/lib/infra/Containers/modal-view-container/modal-view-container.component.html +35 -8
  79. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +185 -194
  80. package/lib/infra/Containers/view-container/view-container.component.ts +32 -35
  81. package/lib/infra/assignment/assignment.component.html +2 -1
  82. package/lib/infra/assignment/assignment.component.ts +42 -15
  83. package/lib/infra/defer-load/defer-load.component.ts +6 -3
  84. package/lib/infra/multi-step/multi-step.component.html +25 -33
  85. package/lib/infra/multi-step/multi-step.component.scss +67 -125
  86. package/lib/infra/multi-step/multi-step.component.ts +11 -0
  87. package/lib/infra/navbar/navbar.component.ts +33 -36
  88. package/lib/infra/reference/reference.component.ts +1 -2
  89. package/lib/infra/root-container/root-container.component.ts +33 -38
  90. package/lib/infra/view/view.component.ts +21 -40
  91. package/lib/template/advanced-search/advanced-search.component.ts +0 -1
  92. package/lib/template/advanced-search/search-groups/search-groups.component.ts +2 -3
  93. package/lib/template/app-shell/app-shell.component.ts +13 -13
  94. package/lib/template/base/details-template-base.ts +41 -14
  95. package/lib/template/case-summary/case-summary.component.ts +15 -1
  96. package/lib/template/case-view/case-view.component.html +13 -1
  97. package/lib/template/case-view/case-view.component.spec.ts +119 -10
  98. package/lib/template/case-view/case-view.component.ts +52 -3
  99. package/lib/template/data-reference/data-reference.component.ts +2 -4
  100. package/lib/template/data-reference/search-form/search-form.component.html +1 -1
  101. package/lib/template/data-reference/search-form/search-form.component.ts +9 -1
  102. package/lib/template/data-reference/search-form/tabsData.ts +0 -1
  103. package/lib/template/default-form/default-form.component.html +19 -3
  104. package/lib/template/default-form/default-form.component.ts +13 -3
  105. package/lib/template/details/details.component.html +23 -3
  106. package/lib/template/details/details.component.scss +9 -2
  107. package/lib/template/details/details.component.ts +3 -70
  108. package/lib/template/details-narrow-wide/details-narrow-wide.component.html +21 -2
  109. package/lib/template/details-narrow-wide/details-narrow-wide.component.scss +8 -1
  110. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +3 -39
  111. package/lib/template/details-one-column/details-one-column.component.html +23 -1
  112. package/lib/template/details-one-column/details-one-column.component.scss +14 -0
  113. package/lib/template/details-one-column/details-one-column.component.ts +3 -40
  114. package/lib/template/details-three-column/details-three-column.component.html +21 -2
  115. package/lib/template/details-three-column/details-three-column.component.scss +8 -1
  116. package/lib/template/details-three-column/details-three-column.component.ts +3 -48
  117. package/lib/template/details-two-column/details-two-column.component.html +21 -2
  118. package/lib/template/details-two-column/details-two-column.component.scss +8 -1
  119. package/lib/template/details-two-column/details-two-column.component.ts +3 -46
  120. package/lib/template/details-wide-narrow/details-wide-narrow.component.html +21 -2
  121. package/lib/template/details-wide-narrow/details-wide-narrow.component.scss +8 -1
  122. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +3 -43
  123. package/lib/template/field-group-template/field-group-template.component.ts +19 -6
  124. package/lib/template/field-value-list/field-value-list.component.scss +17 -0
  125. package/lib/template/list-view/list-view.component.ts +47 -11
  126. package/lib/template/self-service-case-view/self-service-case-view.component.html +13 -1
  127. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +96 -11
  128. package/lib/template/self-service-case-view/self-service-case-view.component.ts +52 -3
  129. package/lib/template/simple-table/simple-table.component.ts +6 -0
  130. package/lib/template/simple-table-manual/helpers.ts +84 -16
  131. package/lib/template/simple-table-manual/simple-table-manual.component.html +30 -14
  132. package/lib/template/simple-table-manual/simple-table-manual.component.scss +8 -2
  133. package/lib/template/simple-table-manual/simple-table-manual.component.ts +131 -43
  134. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +0 -0
  135. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +2 -3
  136. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +7 -8
  137. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +19 -21
  138. package/lib/widget/attachment/AttachmentUtils.ts +19 -11
  139. package/lib/widget/attachment/attachment.component.html +16 -6
  140. package/lib/widget/attachment/attachment.component.ts +14 -4
  141. package/lib/widget/case-history/case-history.component.ts +6 -2
  142. package/lib/widget/feed-container/feed-container.component.ts +1 -199
  143. package/lib/widget/file-utility/file-utility.component.ts +26 -30
  144. package/lib/widget/todo/todo.component.ts +7 -2
  145. package/package.json +2 -2
  146. package/lib/designSystemExtension/material-details/material-details.component.html +0 -40
  147. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -116
  148. package/lib/designSystemExtension/material-details/material-details.component.spec.ts +0 -24
  149. package/lib/designSystemExtension/material-details/material-details.component.ts +0 -31
  150. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +0 -29
  151. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +0 -34
  152. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.spec.ts +0 -22
  153. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +0 -37
@@ -27,6 +27,8 @@ interface AssignmentProps {
27
27
  template: string;
28
28
  }
29
29
 
30
+ type StepIndicator = 'horizontal' | 'vertical' | 'vertical-start';
31
+
30
32
  @Component({
31
33
  selector: 'app-assignment',
32
34
  templateUrl: './assignment.component.html',
@@ -60,6 +62,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
60
62
 
61
63
  bHasNavigation$ = false;
62
64
  bIsVertical$ = false;
65
+ stepIndicator$: StepIndicator = 'horizontal';
63
66
  prevNavigationSteps: any[] = [];
64
67
  arCurrentStepIndicies$: number[] = [];
65
68
  arNavigationSteps$: any[] = [];
@@ -97,6 +100,9 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
97
100
 
98
101
  this.initComponent();
99
102
 
103
+ // ngOnChanges runs before ngOnInit, so updateChanges() never registers on first render.
104
+ this.registerForRefresh();
105
+
100
106
  this.angularPConnect.shouldComponentUpdate(this);
101
107
 
102
108
  this.bInitialized = true;
@@ -108,6 +114,8 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
108
114
  if (this.angularPConnectData.unsubscribeFn) {
109
115
  this.angularPConnectData.unsubscribeFn();
110
116
  }
117
+
118
+ this.bannerService.clearBanners(this.itemKey$);
111
119
  }
112
120
 
113
121
  // Callback passed when subscribing to store change
@@ -125,6 +133,9 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
125
133
  // AND removing the "gate" that was put there since shouldComponentUpdate
126
134
  // should be the real "gate"
127
135
  if (bUpdateSelf) {
136
+ // The engine drops registrations when it cleans the context cache, so re-register on each update (as React does per render).
137
+ this.registerForRefresh();
138
+
128
139
  let loadingInfo;
129
140
  try {
130
141
  // loadingInfo = this.pConn$.getLoadingStatus();
@@ -240,14 +251,22 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
240
251
  }
241
252
 
242
253
  createButtonsForMultiStepForm(oCaseInfo) {
243
- this.bHasNavigation$ = true;
244
-
245
- if ((oCaseInfo.navigation.template && oCaseInfo.navigation.template.toLowerCase() === 'standard') || oCaseInfo?.navigation?.steps?.length === 1) {
246
- this.bHasNavigation$ = false;
247
- } else if (oCaseInfo.navigation.template && oCaseInfo.navigation.template.toLowerCase() === 'vertical') {
248
- this.bIsVertical$ = true;
249
- } else {
250
- this.bIsVertical$ = false;
254
+ const navigationTemplate = oCaseInfo.navigation.template?.toLowerCase();
255
+ const stepCount = oCaseInfo.navigation.steps?.length ?? 0;
256
+ const shouldHideNavigation = navigationTemplate === 'standard' || stepCount <= 1;
257
+
258
+ this.bHasNavigation$ = !shouldHideNavigation;
259
+ this.bIsVertical$ = false;
260
+ this.stepIndicator$ = 'horizontal';
261
+
262
+ if (!shouldHideNavigation) {
263
+ if (navigationTemplate === 'vertical') {
264
+ this.bIsVertical$ = true;
265
+ this.stepIndicator$ = 'vertical';
266
+ } else if (navigationTemplate === 'vertical-left') {
267
+ this.bIsVertical$ = true;
268
+ this.stepIndicator$ = 'vertical-start';
269
+ }
251
270
  }
252
271
 
253
272
  // iterate through steps to find current one(s)
@@ -304,7 +323,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
304
323
 
305
324
  buttonClick(sAction, sButtonType) {
306
325
  this.snackBarRef?.dismiss();
307
- this.bannerService.clearBanners();
326
+ this.bannerService.clearBanners(this.itemKey$);
308
327
  PCore.getPubSubUtils().publish('clearBannerMessages');
309
328
  // right now, done on an individual basis, setting bReInit to true
310
329
  // upon the next flow container state change, will cause the flow container
@@ -478,7 +497,11 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
478
497
  }
479
498
 
480
499
  registerForRefresh() {
481
- const refreshConditions = this.pConn$.getCaseInfo()?.getActionRefreshConditions();
500
+ const caseInfo = this.pConn$.getCaseInfo();
501
+ if (!caseInfo) {
502
+ return;
503
+ }
504
+ const refreshConditions = caseInfo.getActionRefreshConditions();
482
505
  const pageReference = this.pConn$.getPageReference();
483
506
  const context = this.pConn$.getContextName();
484
507
 
@@ -487,7 +510,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
487
510
 
488
511
  // refresh api registration
489
512
  const refreshProps = getRefreshProps(refreshConditions);
490
- const caseKey = this.pConn$.getCaseInfo().getKey();
513
+ const caseKey = caseInfo.getKey();
491
514
  const refreshOptions = {
492
515
  autoDetectRefresh: true,
493
516
  preserveClientChanges: false
@@ -496,10 +519,14 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges {
496
519
  refreshProps.forEach(prop => {
497
520
  PCore.getRefreshManager().registerForRefresh(
498
521
  'PROP_CHANGE',
499
- this.pConn$.getActionsApi().refreshCaseView.bind(this.pConn$.getActionsApi(), caseKey, '', pageReference, {
500
- ...refreshOptions,
501
- refreshFor: prop[0]
502
- }),
522
+ // The registered prop is an authored pattern with an empty list index (ex: ".Addons().Type"),
523
+ // which the server rejects. The refresh manager hands back the concrete path that changed.
524
+ (matchedPath?: string) => {
525
+ this.pConn$.getActionsApi().refreshCaseView(caseKey, '', pageReference, {
526
+ ...refreshOptions,
527
+ refreshFor: matchedPath || prop[0]
528
+ });
529
+ },
503
530
  `${pageReference}.${prop[1]}`,
504
531
  `${context}/${pageReference}`,
505
532
  context
@@ -1,4 +1,4 @@
1
- import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';
1
+ import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { publicConstants } from '@pega/pcore-pconnect-typedefs/constants';
4
4
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
@@ -35,7 +35,10 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges {
35
35
  PAGE: any;
36
36
  DATA: any;
37
37
  lastUpdateCaseTime;
38
- constructor(private angularPConnect: AngularPConnectService) {
38
+ constructor(
39
+ private angularPConnect: AngularPConnectService,
40
+ private cdRef: ChangeDetectorRef
41
+ ) {
39
42
  this.constants = PCore.getConstants();
40
43
  }
41
44
 
@@ -132,7 +135,7 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges {
132
135
  PCore.getDeferLoadManager().stop(this.deferLoadId, this.pConn$.getContextName());
133
136
  }
134
137
  }
135
- // this.cdRef.detectChanges();
138
+ this.cdRef.detectChanges();
136
139
  }
137
140
 
138
141
  loadActiveTab() {
@@ -1,43 +1,35 @@
1
1
  <div *ngIf="bShow$">
2
- <div *ngIf="bIsVertical$" class="psdk-vertical-stepper">
3
- <div *ngFor="let mainStep of arNavigationSteps$; let i = index" class="psdk-vertical-step">
4
- <div class="psdk-vertical-step-header">
5
- <div class="{{ _getVIconClass(mainStep.visited_status) }}">
6
- <div class="psdk-vertical-step-icon-content">
7
- <span>{{ i + 1 }}</span>
8
- </div>
9
- </div>
10
- <div class="{{ _getVLabelClass(mainStep.visited_status) }}">
11
- {{ mainStep.name }}
12
- </div>
13
- </div>
14
- <div class="{{ _getVBodyClass(i) }}">
15
- <ng-container *ngIf="mainStep?.steps && mainStep.visited_status == 'current'">
16
- <div *ngFor="let subStep of mainStep.steps">
17
- <div *ngIf="subStep.visited_status == 'current'">
18
- <component-mapper
19
- name="AssignmentCard"
20
- [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
21
- [parent]="this"
22
- [outputEvents]="{ actionButtonClick: onActionButtonClick }"
23
- ></component-mapper>
2
+ <div
3
+ *ngIf="isVerticalLayout()"
4
+ class="psdk-vertical-stepper-container"
5
+ [class.stepper-start]="stepIndicator$ === 'vertical-start'"
6
+ [class.stepper-end]="stepIndicator$ === 'vertical'"
7
+ >
8
+ <div class="psdk-stepper-rail">
9
+ <div *ngFor="let mainStep of arNavigationSteps$; let i = index" class="psdk-vertical-step">
10
+ <div class="psdk-vertical-step-header">
11
+ <div class="{{ _getVIconClass(mainStep.visited_status) }}">
12
+ <div class="psdk-vertical-step-icon-content">
13
+ <span>{{ i + 1 }}</span>
24
14
  </div>
25
15
  </div>
26
- </ng-container>
27
-
28
- <ng-container *ngIf="!mainStep?.steps && mainStep.visited_status == 'current'">
29
- <component-mapper
30
- name="AssignmentCard"
31
- [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
32
- [parent]="this"
33
- [outputEvents]="{ actionButtonClick: onActionButtonClick }"
34
- ></component-mapper>
35
- </ng-container>
16
+ <div class="{{ _getVLabelClass(mainStep.visited_status) }}">
17
+ {{ mainStep.name }}
18
+ </div>
19
+ </div>
36
20
  </div>
37
21
  </div>
22
+ <div class="psdk-stepper-content">
23
+ <component-mapper
24
+ name="AssignmentCard"
25
+ [props]="{ pConn$, formGroup$, arChildren$, arMainButtons$, arSecondaryButtons$ }"
26
+ [parent]="this"
27
+ [outputEvents]="{ actionButtonClick: onActionButtonClick }"
28
+ ></component-mapper>
29
+ </div>
38
30
  </div>
39
31
 
40
- <div *ngIf="!bIsVertical$" class="psdk-horizontal-stepper">
32
+ <div *ngIf="isHorizontalLayout()" class="psdk-horizontal-stepper">
41
33
  <div class="psdk-horizontal-stepper-header-container">
42
34
  <ng-container *ngFor="let mainStep of arNavigationSteps$; let i = index">
43
35
  <div class="psdk-horizontal-step-header">
@@ -1,59 +1,3 @@
1
- .psdk-case-view-divider {
2
- border-bottom: 0.0625rem solid var(--mat-sys-outline-variant);
3
- }
4
-
5
- .psdk-icon {
6
- padding: 0rem 0.125rem;
7
- min-width: unset;
8
- }
9
-
10
- .psdk-current-svg-icon {
11
- width: 1rem;
12
- filter: var(--app-primary-color-filter);
13
- }
14
-
15
- .psdk-not-current-svg-icon {
16
- width: 1rem;
17
- filter: var(--app-neutral-color-filter);
18
- }
19
-
20
- mat-vertical-stepper {
21
- background-color: transparent;
22
- }
23
- mat-horizontal-stepper {
24
- background-color: transparent;
25
- }
26
-
27
- .psdk-sub-step-current {
28
- padding-left: 0.625rem;
29
- font-weight: bold;
30
- color: var(--mat-sys-on-secondary-container);
31
- }
32
-
33
- .psdk-sub-step-not-current {
34
- color: var(--mat-sys-on-surface-variant);
35
- padding-left: 0.625rem;
36
- }
37
-
38
- .psdk-flow-container-top {
39
- padding: 0rem 0.625rem;
40
- border-radius: 0.3125rem;
41
- }
42
- .psdk-flow-container {
43
- padding-left: 2.1875rem;
44
- }
45
-
46
- .psdk-sub-step-list {
47
- list-style: none;
48
- padding-bottom: 0.625rem;
49
- }
50
-
51
- .psdk-vertical-stepper {
52
- background-color: transparent;
53
- display: block;
54
- text-align: left;
55
- }
56
-
57
1
  .psdk-vertical-step {
58
2
  display: block;
59
3
  }
@@ -71,8 +15,12 @@ mat-horizontal-stepper {
71
15
  }
72
16
 
73
17
  .psdk-vertical-step-icon {
74
- margin-right: 12px;
75
18
  background-color: var(--mat-sys-secondary);
19
+ }
20
+
21
+ .psdk-vertical-step-icon,
22
+ .psdk-vertical-step-icon-selected {
23
+ margin-right: 12px;
76
24
  border-radius: 50%;
77
25
  height: 24px;
78
26
  width: 24px;
@@ -80,67 +28,95 @@ mat-horizontal-stepper {
80
28
  position: relative;
81
29
  }
82
30
 
83
- .psdk-vertical-step-icon-content {
31
+ .psdk-vertical-step-icon-content,
32
+ .psdk-horizontal-step-icon-content {
33
+ display: block;
84
34
  position: absolute;
85
35
  top: 50%;
86
36
  left: 50%;
87
37
  transform: translate(-50%, -50%);
88
38
  }
89
39
 
90
- .psdk-vertical-step-icon-selected {
91
- margin-right: 12px;
40
+ .psdk-vertical-step-icon-selected,
41
+ .psdk-horizontal-step-icon-selected {
92
42
  background-color: var(--mat-sys-primary);
93
43
  color: var(--mat-sys-surface);
94
- border-radius: 50%;
95
- height: 24px;
96
- width: 24px;
97
- flex-shrink: 0;
98
- position: relative;
99
44
  }
100
45
 
101
- .psdk-vertical-step-label {
102
- color: var(--mat-sys-on-surface-variant);
46
+ .psdk-vertical-step-label,
47
+ .psdk-vertical-step-label-selected,
48
+ .psdk-horizontal-step-label,
49
+ .psdk-horizontal-step-label-selected {
103
50
  display: inline-block;
104
- white-space: nowrap;
105
- overflow: hidden;
106
- text-overflow: ellipsis;
107
51
  min-width: 50px;
108
52
  vertical-align: middle;
109
53
  font-size: 14px;
110
54
  font-weight: 500;
111
55
  }
112
56
 
113
- .psdk-vertical-step-label-selected {
57
+ .psdk-vertical-step-label,
58
+ .psdk-horizontal-step-label {
59
+ color: var(--mat-sys-on-surface-variant);
60
+ }
61
+
62
+ .psdk-vertical-step-label-selected,
63
+ .psdk-horizontal-step-label-selected {
114
64
  color: var(--mat-sys-on-secondary-container);
115
- display: inline-block;
65
+ }
66
+
67
+ .psdk-vertical-step-label,
68
+ .psdk-vertical-step-label-selected {
116
69
  white-space: nowrap;
117
70
  overflow: hidden;
118
71
  text-overflow: ellipsis;
119
- min-width: 50px;
120
- vertical-align: middle;
121
- font-size: 14px;
122
- font-weight: 500;
123
72
  }
124
73
 
125
- .psdk-vertical-step-body {
126
- margin-left: 36px;
127
- border: 0;
74
+ .psdk-vertical-stepper-container {
75
+ display: grid;
76
+ gap: 2rem;
77
+ }
78
+
79
+ .psdk-vertical-stepper-container.stepper-end {
80
+ grid-template-columns: 1fr minmax(12rem, auto);
81
+ grid-template-areas: 'content stepper';
82
+ }
83
+
84
+ .psdk-vertical-stepper-container.stepper-start {
85
+ grid-template-columns: minmax(12rem, auto) 1fr;
86
+ grid-template-areas: 'stepper content';
87
+ }
88
+
89
+ .psdk-stepper-rail {
90
+ grid-area: stepper;
91
+ }
92
+
93
+ .psdk-stepper-content {
94
+ grid-area: content;
95
+ }
96
+
97
+ .psdk-stepper-rail .psdk-vertical-step {
128
98
  position: relative;
129
- display: block;
130
- text-align: left;
131
99
  }
132
- .psdk-vertical-step-line {
133
- display: block;
100
+
101
+ .psdk-stepper-rail .psdk-vertical-step-header {
102
+ height: auto;
103
+ overflow: visible;
104
+ padding: 0.75rem 0;
134
105
  }
135
106
 
136
- .psdk-vertical-step-line::before {
107
+ .psdk-stepper-rail .psdk-vertical-step:not(:last-child)::after {
137
108
  content: '';
138
109
  position: absolute;
139
- left: 0;
140
- border-left-width: 1px;
141
- border-left-style: solid;
142
- top: -16px;
143
- bottom: -16px;
110
+ left: 0.75rem;
111
+ top: calc(0.75rem + 1.75rem);
112
+ bottom: -0.25rem;
113
+ width: 0.0625rem;
114
+ background-color: var(--mat-sys-outline-variant);
115
+ }
116
+
117
+ .psdk-stepper-rail .psdk-vertical-step-label,
118
+ .psdk-stepper-rail .psdk-vertical-step-label-selected {
119
+ font-size: 0.875rem;
144
120
  }
145
121
 
146
122
  .psdk-horizontal-stepper {
@@ -164,7 +140,6 @@ mat-horizontal-stepper {
164
140
  box-sizing: content-box;
165
141
  display: flex;
166
142
  height: 72px;
167
- overflow: hidden;
168
143
  align-items: center;
169
144
  padding: 0 24px;
170
145
  }
@@ -172,54 +147,21 @@ mat-horizontal-stepper {
172
147
  .psdk-horizontal-step-icon {
173
148
  background-color: var(--mat-sys-secondary);
174
149
  color: var(--mat-sys-surface);
175
- border-radius: 50%;
176
- height: 24px;
177
- width: 24px;
178
- flex-shrink: 0;
179
- position: relative;
180
- display: block;
181
- margin-right: 8px;
182
- flex: none;
183
- }
184
-
185
- .psdk-horizontal-step-icon-content {
186
- display: block;
187
- position: absolute;
188
- top: 50%;
189
- left: 50%;
190
- transform: translate(-50%, -50%);
191
150
  }
192
151
 
152
+ .psdk-horizontal-step-icon,
193
153
  .psdk-horizontal-step-icon-selected {
194
- background-color: var(--mat-sys-primary);
195
- color: var(--mat-sys-surface);
196
154
  border-radius: 50%;
197
155
  height: 24px;
198
156
  width: 24px;
199
157
  flex-shrink: 0;
200
158
  position: relative;
201
- display: block;
202
159
  margin-right: 8px;
203
160
  flex: none;
204
161
  }
205
162
 
206
- .psdk-horizontal-step-label {
207
- color: var(--mat-sys-on-surface-variant);
208
- display: inline-block;
209
- min-width: 50px;
210
- vertical-align: middle;
211
- font-size: 14px;
212
- font-weight: 500;
213
- white-space: initial;
214
- }
215
-
163
+ .psdk-horizontal-step-label,
216
164
  .psdk-horizontal-step-label-selected {
217
- color: var(--mat-sys-on-secondary-container);
218
- display: inline-block;
219
- min-width: 50px;
220
- vertical-align: middle;
221
- font-size: 14px;
222
- font-weight: 500;
223
165
  white-space: initial;
224
166
  }
225
167
 
@@ -4,6 +4,8 @@ import { FormGroup } from '@angular/forms';
4
4
  import { Utils } from '@pega/angular-sdk-components';
5
5
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
6
6
 
7
+ type StepIndicator = 'horizontal' | 'vertical' | 'vertical-start';
8
+
7
9
  @Component({
8
10
  selector: 'app-multi-step',
9
11
  templateUrl: './multi-step.component.html',
@@ -18,6 +20,7 @@ export class MultiStepComponent implements OnInit {
18
20
  @Input() arSecondaryButtons$: any[];
19
21
  @Input() arChildren$: any[];
20
22
  @Input() bIsVertical$: boolean;
23
+ @Input() stepIndicator$?: StepIndicator;
21
24
  @Input() arCurrentStepIndicies$: number[];
22
25
  @Input() arNavigationSteps$: any[];
23
26
  @Output() actionButtonClick: EventEmitter<any> = new EventEmitter();
@@ -38,6 +41,14 @@ export class MultiStepComponent implements OnInit {
38
41
  this.actionButtonClick.emit(oData);
39
42
  }
40
43
 
44
+ isVerticalLayout(): boolean {
45
+ return this.stepIndicator$ === 'vertical' || this.stepIndicator$ === 'vertical-start';
46
+ }
47
+
48
+ isHorizontalLayout(): boolean {
49
+ return !this.isVerticalLayout();
50
+ }
51
+
41
52
  _getVIconClass(status): string {
42
53
  if (status == 'current') {
43
54
  return 'psdk-vertical-step-icon-selected';
@@ -1,4 +1,4 @@
1
- import { Component, OnInit, Input, ChangeDetectorRef, NgZone, OnDestroy } from '@angular/core';
1
+ import { Component, OnInit, Input, ChangeDetectorRef, OnDestroy } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { MatMenuModule } from '@angular/material/menu';
4
4
  import { MatListModule } from '@angular/material/list';
@@ -34,7 +34,7 @@ export class NavbarComponent implements OnInit, OnDestroy {
34
34
  bShowCaseTypes$ = false;
35
35
 
36
36
  portalApp$: string | undefined = '';
37
- portalLogoImage$: string;
37
+ portalLogoImage$: string | Blob | null;
38
38
  showAppName$?: boolean = false;
39
39
 
40
40
  portalOperator$: string | undefined;
@@ -53,7 +53,6 @@ export class NavbarComponent implements OnInit, OnDestroy {
53
53
  private angularPConnect: AngularPConnectService,
54
54
  private chRef: ChangeDetectorRef,
55
55
  private psService: ProgressSpinnerService,
56
- private ngZone: NgZone,
57
56
  private utils: Utils
58
57
  ) {}
59
58
 
@@ -104,40 +103,38 @@ export class NavbarComponent implements OnInit, OnDestroy {
104
103
  }
105
104
 
106
105
  initComponent() {
107
- this.ngZone.run(() => {
108
- this.navIcon$ = this.utils.getSDKStaticContentUrl().concat('assets/pzpega-logo-mark.svg');
109
- this.navExpandCollapse$ = this.utils.getImageSrc('plus', this.utils.getSDKStaticContentUrl());
110
-
111
- // Then, continue on with other initialization
112
-
113
- // making a copy, so can add info
114
- this.navPages$ = JSON.parse(JSON.stringify(this.pages$));
115
- // @ts-ignore
116
- const localeReference = PCore.getLocaleUtils().getPortalLocaleReference() || this.pConn$.getValue('.pyLocaleReference');
117
- this.navPages$.forEach(page => {
118
- const destinationObject: any = {};
119
- this.pConn$.resolveConfigProps(
120
- { defaultHeading: page.pyDefaultHeading || page.pyLabel, localeReference: page.pyLocalizationReference },
121
- destinationObject
122
- );
123
- page.name = this.localeUtils.getLocaleValue(destinationObject.defaultHeading, '', destinationObject.localeReference || localeReference);
124
- page.iconName = this.utils.getImageSrc(page.pxPageViewIcon, this.utils.getSDKStaticContentUrl());
125
- });
126
- this.actionsAPI = this.pConn$.getActionsApi();
127
- this.createWork = this.actionsAPI.createWork.bind(this.actionsAPI);
128
- this.showPage = this.actionsAPI.showPage.bind(this.actionsAPI);
129
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as NavBarProps;
130
- this.logout = this.actionsAPI.logout.bind(this.actionsAPI);
131
-
132
- // const oData = this.pConn$.getDataObject();
133
-
134
- this.portalLogoImage$ = this.utils.getSDKStaticContentUrl().concat('assets/pzpega-logo-mark.svg');
135
- this.portalOperator$ = PCore.getEnvironmentInfo().getOperatorName();
136
- this.portalOperatorInitials$ = this.utils.getInitials(this.portalOperator$ ?? '');
137
- this.showAppName$ = this.configProps$.showAppName;
138
-
139
- this.portalApp$ = PCore.getEnvironmentInfo().getApplicationLabel();
106
+ this.navIcon$ = this.utils.getSDKStaticContentUrl().concat('assets/pzpega-logo-mark.svg');
107
+ this.navExpandCollapse$ = this.utils.getImageSrc('plus', this.utils.getSDKStaticContentUrl());
108
+
109
+ // Then, continue on with other initialization
110
+
111
+ // making a copy, so can add info
112
+ this.navPages$ = JSON.parse(JSON.stringify(this.pages$));
113
+ const localeReference = PCore.getLocaleUtils().getPortalLocaleReference() || this.pConn$.getValue('.pyLocaleReference');
114
+ this.navPages$.forEach(page => {
115
+ const destinationObject: any = {};
116
+ this.pConn$.resolveConfigProps(
117
+ { defaultHeading: page.pyDefaultHeading || page.pyLabel, localeReference: page.pyLocalizationReference },
118
+ destinationObject
119
+ );
120
+ page.name = this.localeUtils.getLocaleValue(destinationObject.defaultHeading, '', destinationObject.localeReference || localeReference);
121
+ page.iconName = this.utils.getImageSrc(page.pxPageViewIcon, this.utils.getSDKStaticContentUrl());
140
122
  });
123
+ this.actionsAPI = this.pConn$.getActionsApi();
124
+ this.createWork = this.actionsAPI.createWork.bind(this.actionsAPI);
125
+ this.showPage = this.actionsAPI.showPage.bind(this.actionsAPI);
126
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as NavBarProps;
127
+ this.logout = this.actionsAPI.logout.bind(this.actionsAPI);
128
+
129
+ // const oData = this.pConn$.getDataObject();
130
+
131
+ this.portalLogoImage$ = this.utils.getSDKStaticContentUrl().concat('assets/pzpega-logo-mark.svg');
132
+ this.portalOperator$ = PCore.getEnvironmentInfo().getOperatorName();
133
+ this.portalOperatorInitials$ = this.utils.getInitials(this.portalOperator$ ?? '');
134
+ this.showAppName$ = this.configProps$.showAppName;
135
+
136
+ this.portalApp$ = PCore.getEnvironmentInfo().getApplicationLabel();
137
+ this.chRef.markForCheck();
141
138
  }
142
139
 
143
140
  navPanelButtonClick(oPageData: any) {
@@ -88,8 +88,7 @@ export class ReferenceComponent implements OnInit, OnDestroy, OnChanges {
88
88
  }
89
89
  };
90
90
 
91
- // @ts-expect-error - createComponent expects string but null is passed for unused parameters (matches React SDK pattern)
92
- const viewComponent: any = pConnect.createComponent(viewObject, null, null, {
91
+ const viewComponent: any = pConnect.createComponent(viewObject, '', 0, {
93
92
  pageReference: context && context.startsWith('@CLASS') ? '' : context
94
93
  });
95
94