@pega/angular-sdk-overrides 24.2.10 → 25.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 (257) hide show
  1. package/lib/designSystemExtension/alert/alert.component.scss +3 -3
  2. package/lib/designSystemExtension/alert/alert.component.ts +0 -1
  3. package/lib/designSystemExtension/alert-banner/alert-banner.component.ts +0 -1
  4. package/lib/designSystemExtension/banner/banner.component.html +1 -1
  5. package/lib/designSystemExtension/banner/banner.component.scss +17 -3
  6. package/lib/designSystemExtension/banner/banner.component.ts +0 -1
  7. package/lib/designSystemExtension/case-create-stage/case-create-stage.component.ts +0 -1
  8. package/lib/designSystemExtension/field-group/field-group.component.ts +0 -1
  9. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +6 -3
  10. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +5 -34
  11. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.ts +0 -2
  12. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -5
  13. package/lib/designSystemExtension/material-details/material-details.component.ts +0 -1
  14. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +3 -3
  15. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
  16. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +6 -1
  17. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.scss +4 -17
  18. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.ts +0 -1
  19. package/lib/designSystemExtension/material-summary-list/material-summary-list.component.ts +0 -1
  20. package/lib/designSystemExtension/material-utility/material-utility.component.scss +1 -2
  21. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +1 -1
  22. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts +0 -1
  23. package/lib/designSystemExtension/operator/operator.component.html +2 -2
  24. package/lib/designSystemExtension/operator/operator.component.scss +13 -12
  25. package/lib/designSystemExtension/operator/operator.component.ts +4 -5
  26. package/lib/designSystemExtension/pulse/pulse.component.scss +2 -2
  27. package/lib/designSystemExtension/pulse/pulse.component.ts +0 -1
  28. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.html +4 -17
  29. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +0 -1
  30. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +30 -1
  31. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +16 -9
  32. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.ts +0 -1
  33. package/lib/field/auto-complete/auto-complete.component.html +0 -2
  34. package/lib/field/auto-complete/auto-complete.component.ts +48 -173
  35. package/lib/field/cancel-alert/cancel-alert.component.html +8 -12
  36. package/lib/field/cancel-alert/cancel-alert.component.scss +2 -3
  37. package/lib/field/cancel-alert/cancel-alert.component.ts +24 -37
  38. package/lib/field/check-box/check-box.component.html +17 -6
  39. package/lib/field/check-box/check-box.component.scss +0 -1
  40. package/lib/field/check-box/check-box.component.ts +25 -151
  41. package/lib/field/currency/currency.component.ts +54 -181
  42. package/lib/field/date/date.component.html +4 -3
  43. package/lib/field/date/date.component.ts +30 -151
  44. package/lib/field/date-time/date-time.component.html +2 -2
  45. package/lib/field/date-time/date-time.component.ts +47 -148
  46. package/lib/field/decimal/decimal.component.html +1 -0
  47. package/lib/field/decimal/decimal.component.ts +61 -164
  48. package/lib/field/dropdown/dropdown.component.html +1 -0
  49. package/lib/field/dropdown/dropdown.component.ts +43 -152
  50. package/lib/field/email/email.component.ts +28 -158
  51. package/lib/field/field.base.ts +149 -0
  52. package/lib/field/group/group.component.ts +7 -5
  53. package/lib/field/integer/integer.component.html +1 -1
  54. package/lib/field/integer/integer.component.ts +30 -160
  55. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.html +1 -1
  56. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.ts +3 -3
  57. package/lib/field/location/config-ext.json +8 -0
  58. package/lib/field/location/location.component.html +45 -0
  59. package/lib/field/location/location.component.scss +18 -0
  60. package/lib/field/location/location.component.spec.ts +22 -0
  61. package/lib/field/location/location.component.ts +280 -0
  62. package/lib/field/multiselect/multiselect.component.ts +47 -152
  63. package/lib/field/multiselect/utils.ts +55 -47
  64. package/lib/field/object-reference/object-reference.component.html +17 -0
  65. package/lib/field/object-reference/object-reference.component.scss +0 -0
  66. package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
  67. package/lib/field/object-reference/object-reference.component.ts +237 -0
  68. package/lib/field/percentage/percentage.component.html +1 -1
  69. package/lib/field/percentage/percentage.component.ts +62 -170
  70. package/lib/field/phone/config-ext.json +1 -1
  71. package/lib/field/phone/phone.component.html +18 -17
  72. package/lib/field/phone/phone.component.scss +4 -0
  73. package/lib/field/phone/phone.component.ts +47 -156
  74. package/lib/field/radio-buttons/radio-buttons.component.html +17 -12
  75. package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
  76. package/lib/field/radio-buttons/radio-buttons.component.ts +37 -160
  77. package/lib/field/rich-text/rich-text.component.html +2 -0
  78. package/lib/field/rich-text/rich-text.component.scss +172 -0
  79. package/lib/field/rich-text/rich-text.component.ts +32 -93
  80. package/lib/field/scalar-list/scalar-list.component.ts +17 -73
  81. package/lib/field/selectable-card/selectable-card.component.html +70 -0
  82. package/lib/field/selectable-card/selectable-card.component.scss +11 -0
  83. package/lib/field/selectable-card/selectable-card.component.spec.ts +22 -0
  84. package/lib/field/selectable-card/selectable-card.component.ts +219 -0
  85. package/lib/field/semantic-link/semantic-link.component.html +4 -8
  86. package/lib/field/semantic-link/semantic-link.component.scss +0 -13
  87. package/lib/field/semantic-link/semantic-link.component.ts +165 -6
  88. package/lib/field/text/text.component.scss +0 -1
  89. package/lib/field/text/text.component.ts +6 -5
  90. package/lib/field/text-area/text-area.component.html +4 -2
  91. package/lib/field/text-area/text-area.component.ts +30 -155
  92. package/lib/field/text-content/text-content.component.ts +0 -1
  93. package/lib/field/text-input/text-input.component.html +1 -1
  94. package/lib/field/text-input/text-input.component.ts +28 -158
  95. package/lib/field/time/time.component.html +2 -2
  96. package/lib/field/time/time.component.ts +34 -154
  97. package/lib/field/url/url.component.html +1 -1
  98. package/lib/field/url/url.component.ts +28 -157
  99. package/lib/field/user-reference/user-reference.component.html +40 -38
  100. package/lib/field/user-reference/user-reference.component.scss +0 -1
  101. package/lib/field/user-reference/user-reference.component.ts +70 -9
  102. package/lib/infra/Containers/flow-container/flow-container.component.html +2 -2
  103. package/lib/infra/Containers/flow-container/flow-container.component.ts +24 -51
  104. package/lib/infra/Containers/flow-container/helpers.ts +2 -2
  105. package/lib/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts +0 -1
  106. package/lib/infra/Containers/modal-view-container/modal-view-container.component.html +1 -11
  107. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +5 -18
  108. package/lib/infra/Containers/view-container/helper.ts +35 -2
  109. package/lib/infra/Containers/view-container/view-container.component.ts +1 -2
  110. package/lib/infra/action-buttons/action-buttons.component.html +13 -8
  111. package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
  112. package/lib/infra/action-buttons/action-buttons.component.ts +1 -3
  113. package/lib/infra/assignment/assignment.component.html +1 -1
  114. package/lib/infra/assignment/assignment.component.ts +100 -46
  115. package/lib/infra/assignment-card/assignment-card.component.html +2 -2
  116. package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
  117. package/lib/infra/assignment-card/assignment-card.component.ts +21 -5
  118. package/lib/infra/dashboard-filter/dashboard-filter.component.ts +0 -1
  119. package/lib/infra/defer-load/defer-load.component.html +6 -2
  120. package/lib/infra/defer-load/defer-load.component.ts +25 -12
  121. package/lib/infra/error-boundary/error-boundary.component.ts +0 -1
  122. package/lib/infra/multi-step/multi-step.component.html +22 -38
  123. package/lib/infra/multi-step/multi-step.component.scss +14 -27
  124. package/lib/infra/multi-step/multi-step.component.ts +0 -1
  125. package/lib/infra/navbar/navbar.component.html +36 -41
  126. package/lib/infra/navbar/navbar.component.scss +22 -4
  127. package/lib/infra/navbar/navbar.component.ts +8 -6
  128. package/lib/infra/reference/reference.component.ts +82 -90
  129. package/lib/infra/region/region.component.ts +0 -1
  130. package/lib/infra/root-container/root-container.component.html +2 -15
  131. package/lib/infra/root-container/root-container.component.scss +0 -1
  132. package/lib/infra/root-container/root-container.component.ts +25 -32
  133. package/lib/infra/stages/stages.component.html +4 -3
  134. package/lib/infra/stages/stages.component.scss +12 -36
  135. package/lib/infra/stages/stages.component.ts +4 -3
  136. package/lib/infra/view/view.component.html +1 -1
  137. package/lib/infra/view/view.component.ts +3 -7
  138. package/lib/template/advanced-search/advanced-search.component.html +12 -0
  139. package/lib/template/advanced-search/advanced-search.component.scss +0 -0
  140. package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
  141. package/lib/template/advanced-search/advanced-search.component.ts +112 -0
  142. package/lib/template/advanced-search/advanced-search.service.ts +27 -0
  143. package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
  144. package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
  145. package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
  146. package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
  147. package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
  148. package/lib/template/advanced-search/search-groups/utils.ts +29 -0
  149. package/lib/template/app-shell/app-shell.component.html +4 -1
  150. package/lib/template/app-shell/app-shell.component.scss +0 -3
  151. package/lib/template/app-shell/app-shell.component.ts +46 -8
  152. package/lib/template/banner-page/banner-page.component.ts +0 -1
  153. package/lib/template/base/form-template-base.ts +6 -0
  154. package/lib/template/case-summary/case-summary.component.scss +0 -2
  155. package/lib/template/case-summary/case-summary.component.ts +6 -22
  156. package/lib/template/case-view/case-view.component.html +4 -4
  157. package/lib/template/case-view/case-view.component.scss +18 -10
  158. package/lib/template/case-view/case-view.component.ts +1 -11
  159. package/lib/template/confirmation/confirmation.component.html +2 -2
  160. package/lib/template/confirmation/confirmation.component.ts +0 -1
  161. package/lib/template/data-reference/data-reference.component.html +11 -8
  162. package/lib/template/data-reference/data-reference.component.ts +346 -113
  163. package/lib/template/data-reference/search-form/search-form.component.html +39 -0
  164. package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
  165. package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
  166. package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
  167. package/lib/template/data-reference/search-form/tabsData.ts +160 -0
  168. package/lib/template/data-reference/utils.ts +92 -0
  169. package/lib/template/default-form/default-form.component.ts +45 -5
  170. package/lib/template/default-page/default-page.component.html +34 -0
  171. package/lib/template/default-page/default-page.component.scss +31 -0
  172. package/lib/template/default-page/default-page.component.spec.ts +24 -0
  173. package/lib/template/default-page/default-page.component.ts +64 -0
  174. package/lib/template/details/details.component.ts +0 -1
  175. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +0 -1
  176. package/lib/template/details-one-column/details-one-column.component.ts +0 -1
  177. package/lib/template/details-sub-tabs/details-sub-tabs.component.ts +0 -1
  178. package/lib/template/details-three-column/details-three-column.component.ts +0 -1
  179. package/lib/template/details-two-column/details-two-column.component.ts +0 -1
  180. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +0 -1
  181. package/lib/template/dynamic-tabs/dynamic-tabs.component.ts +0 -1
  182. package/lib/template/field-group-list/field-group-list.component.scss +0 -1
  183. package/lib/template/field-group-list/field-group-list.component.ts +0 -1
  184. package/lib/template/field-group-template/field-group-template.component.html +7 -7
  185. package/lib/template/field-group-template/field-group-template.component.scss +8 -0
  186. package/lib/template/field-group-template/field-group-template.component.ts +64 -55
  187. package/lib/template/field-value-list/field-value-list.component.html +2 -2
  188. package/lib/template/field-value-list/field-value-list.component.scss +4 -0
  189. package/lib/template/field-value-list/field-value-list.component.ts +0 -1
  190. package/lib/template/inline-dashboard/inline-dashboard.component.ts +0 -1
  191. package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +1 -2
  192. package/lib/template/list-page/list-page.component.ts +0 -1
  193. package/lib/template/list-view/list-view.component.html +170 -160
  194. package/lib/template/list-view/list-view.component.scss +25 -21
  195. package/lib/template/list-view/list-view.component.ts +208 -122
  196. package/lib/template/list-view/listViewHelpers.ts +3 -9
  197. package/lib/template/list-view/utils.ts +27 -7
  198. package/lib/template/multi-reference-readonly/multi-reference-readonly.component.ts +0 -1
  199. package/lib/template/narrow-wide-form/narrow-wide-form.component.ts +0 -1
  200. package/lib/template/object-page/object-page.component.html +1 -0
  201. package/lib/template/object-page/object-page.component.scss +0 -0
  202. package/lib/template/object-page/object-page.component.spec.ts +22 -0
  203. package/lib/template/object-page/object-page.component.ts +14 -0
  204. package/lib/template/one-column/one-column.component.ts +0 -1
  205. package/lib/template/one-column-page/one-column-page.component.ts +0 -1
  206. package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
  207. package/lib/template/one-column-tab/one-column-tab.component.ts +0 -1
  208. package/lib/template/page/page.component.ts +0 -1
  209. package/lib/template/promoted-filters/promoted-filters.component.ts +0 -1
  210. package/lib/template/repeating-structures/repeating-structures.component.ts +0 -2
  211. package/lib/template/self-service-case-view/self-service-case-view.component.html +78 -0
  212. package/lib/template/self-service-case-view/self-service-case-view.component.scss +132 -0
  213. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
  214. package/lib/template/self-service-case-view/self-service-case-view.component.ts +207 -0
  215. package/lib/template/simple-table/simple-table.component.ts +0 -2
  216. package/lib/template/simple-table-manual/helpers.ts +126 -10
  217. package/lib/template/simple-table-manual/simple-table-manual.component.html +27 -8
  218. package/lib/template/simple-table-manual/simple-table-manual.component.scss +15 -17
  219. package/lib/template/simple-table-manual/simple-table-manual.component.ts +103 -45
  220. package/lib/template/simple-table-select/simple-table-select.component.ts +0 -1
  221. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
  222. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
  223. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -4
  224. package/lib/template/sub-tabs/sub-tabs.component.ts +0 -1
  225. package/lib/template/three-column/three-column.component.ts +0 -1
  226. package/lib/template/three-column-page/three-column-page.component.ts +0 -1
  227. package/lib/template/two-column/two-column.component.ts +0 -1
  228. package/lib/template/two-column-page/two-column-page.component.ts +0 -1
  229. package/lib/template/two-column-tab/two-column-tab.component.ts +0 -1
  230. package/lib/template/utils.ts +58 -0
  231. package/lib/template/wide-narrow-form/wide-narrow-form.component.ts +0 -1
  232. package/lib/template/wide-narrow-page/wide-narrow-page.component.ts +0 -1
  233. package/lib/template/wss-nav-bar/wss-nav-bar.component.html +6 -5
  234. package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +8 -17
  235. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +1 -9
  236. package/lib/widget/app-announcement/app-announcement.component.html +1 -2
  237. package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
  238. package/lib/widget/app-announcement/app-announcement.component.ts +0 -1
  239. package/lib/widget/attachment/Attachment.types.ts +92 -0
  240. package/lib/widget/attachment/AttachmentUtils.ts +287 -0
  241. package/lib/widget/attachment/attachment.component.html +3 -3
  242. package/lib/widget/attachment/attachment.component.scss +9 -12
  243. package/lib/widget/attachment/attachment.component.ts +267 -254
  244. package/lib/widget/case-history/case-history.component.ts +0 -1
  245. package/lib/widget/feed-container/feed-container.component.scss +3 -9
  246. package/lib/widget/feed-container/feed-container.component.ts +2 -5
  247. package/lib/widget/file-utility/file-utility.component.html +3 -3
  248. package/lib/widget/file-utility/file-utility.component.scss +6 -17
  249. package/lib/widget/file-utility/file-utility.component.ts +24 -9
  250. package/lib/widget/list-utility/list-utility.component.scss +4 -5
  251. package/lib/widget/list-utility/list-utility.component.ts +0 -1
  252. package/lib/widget/quick-create/quick-create.component.ts +41 -23
  253. package/lib/widget/todo/todo.component.html +12 -10
  254. package/lib/widget/todo/todo.component.scss +20 -10
  255. package/lib/widget/todo/todo.component.ts +11 -7
  256. package/lib/widget/utility/utility.component.ts +0 -1
  257. package/package.json +1 -1
@@ -0,0 +1,294 @@
1
+ import { Component, Input, OnInit, OnDestroy, forwardRef, OnChanges, ChangeDetectorRef, signal } from '@angular/core';
2
+ import { FormGroup, ReactiveFormsModule } from '@angular/forms';
3
+ import { componentCachePersistUtils } from '@pega/angular-sdk-components';
4
+ import { MatRadioModule } from '@angular/material/radio';
5
+ import { MatOptionModule } from '@angular/material/core';
6
+ import { MatSelectModule } from '@angular/material/select';
7
+ import { MatButtonModule } from '@angular/material/button';
8
+ import { CommonModule } from '@angular/common';
9
+ import { MatFormFieldModule } from '@angular/material/form-field';
10
+ import { ComponentMapperComponent } from '@pega/angular-sdk-components';
11
+ import { getCacheInfo, isValidInput } from '@pega/angular-sdk-components';
12
+ import { Subscription } from 'rxjs';
13
+
14
+ const listViewConstants = {
15
+ EVENTS: {
16
+ LIST_VIEW_READY: 'LIST_VIEW_READY'
17
+ }
18
+ };
19
+
20
+ export function flattenObj(obj: any): any {
21
+ const result: any = {};
22
+ Object.keys(obj).forEach(key => {
23
+ if (!['context_data', 'pageInstructions'].includes(key)) {
24
+ if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
25
+ const temp = flattenObj(obj[key]);
26
+ Object.keys(temp).forEach(nestedKey => {
27
+ result[`${key}.${nestedKey}`] = temp[nestedKey];
28
+ });
29
+ } else {
30
+ result[key] = obj[key];
31
+ }
32
+ }
33
+ });
34
+ return result;
35
+ }
36
+
37
+ export const initializeSearchFields = (searchFields, getPConnect, referenceListClassID, searchFieldRestoreValues = {}) => {
38
+ const filtersProperties = {};
39
+ searchFields?.forEach(field => {
40
+ let val = '';
41
+ const { value, defaultValue = '' } = field.config;
42
+ const propPath = PCore.getAnnotationUtils().getPropertyName(value);
43
+
44
+ if (searchFieldRestoreValues[propPath]) {
45
+ val = searchFieldRestoreValues[propPath];
46
+ } else if (PCore.getAnnotationUtils().isProperty(defaultValue)) {
47
+ val = getPConnect().getValue(defaultValue.split(' ')[1]);
48
+ } else if (defaultValue.startsWith('@L')) {
49
+ val = defaultValue.split(' ')[1];
50
+ } else {
51
+ val = defaultValue;
52
+ }
53
+
54
+ filtersProperties[propPath] = val;
55
+
56
+ const valueSplit = value.split('@P ')[1]?.split('.').filter(Boolean) ?? [];
57
+ valueSplit.pop();
58
+
59
+ if (valueSplit.length) {
60
+ let path = '';
61
+ let currentClassID = referenceListClassID;
62
+ valueSplit.forEach(item => {
63
+ path = path.length ? `${path}.${item}` : item;
64
+ currentClassID = (PCore.getMetadataUtils().getPropertyMetadata(item, currentClassID) as any).pageClass;
65
+ if (currentClassID) {
66
+ filtersProperties[`${path}.classID`] = currentClassID;
67
+ }
68
+ });
69
+ }
70
+ });
71
+ return filtersProperties;
72
+ };
73
+
74
+ @Component({
75
+ selector: 'app-search-groups',
76
+ templateUrl: './search-groups.component.html',
77
+ styleUrls: ['./search-groups.component.scss'],
78
+ imports: [
79
+ CommonModule,
80
+ ReactiveFormsModule,
81
+ MatFormFieldModule,
82
+ MatRadioModule,
83
+ MatOptionModule,
84
+ MatSelectModule,
85
+ MatButtonModule,
86
+ forwardRef(() => ComponentMapperComponent)
87
+ ]
88
+ })
89
+ export class SearchGroupsComponent implements OnInit, OnDestroy, OnChanges {
90
+ @Input() pConn$: typeof PConnect;
91
+ @Input() formGroup$: FormGroup;
92
+ @Input() searchGroupsProps;
93
+
94
+ configProps$: any;
95
+ cache: any;
96
+ previousFormValues: any;
97
+ isValidatorField: any;
98
+ searchSelectCacheKey: any;
99
+ activeGroupId: string;
100
+ getPConnect: any;
101
+ searchFields: any;
102
+ referenceListClassID: any;
103
+ transientItemID: any;
104
+ useCache: boolean;
105
+ searchFieldsC11nEnv: any = signal(null);
106
+ referenceFieldName: any;
107
+ viewName: any;
108
+ subs: Subscription[] = [];
109
+ localizedVal = PCore.getLocaleUtils().getLocaleValue;
110
+ setShowRecords: any;
111
+ groups: any;
112
+ state: any = {};
113
+ rawGroupsConfig: any;
114
+ initialSearchFields: {};
115
+ constructor(private cdRef: ChangeDetectorRef) {}
116
+
117
+ ngOnInit(): void {
118
+ console.log('SearchGroupsComponent - ngOnInit');
119
+ }
120
+
121
+ ngOnChanges() {
122
+ this.updateSelf();
123
+ }
124
+
125
+ // updateSelf
126
+ updateSelf(): void {
127
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
128
+ const { searchGroups: groups, referenceList } = this.configProps$;
129
+ const { getPConnect, editableField, searchSelectCacheKey, cache } = this.searchGroupsProps;
130
+ this.searchSelectCacheKey = searchSelectCacheKey;
131
+ this.getPConnect = getPConnect;
132
+ this.cache = cache || {};
133
+ const referenceFieldName = editableField.replaceAll('.', '_');
134
+ const { classID: referenceListClassID } = PCore.getMetadataUtils().getDataPageMetadata(referenceList) as any;
135
+ const { useCache, initialActiveGroupId } = getCacheInfo(cache, groups);
136
+ this.activeGroupId = initialActiveGroupId;
137
+ const rawGroupsConfig = this.pConn$.getRawConfigProps().searchGroups;
138
+ const activeGroupIndex = groups.findIndex(group => group.config.id === this.activeGroupId);
139
+ const { children: searchFieldsChildren = [] } = activeGroupIndex !== -1 ? rawGroupsConfig[activeGroupIndex] : {};
140
+ this.searchFields = searchFieldsChildren.map(field => ({
141
+ ...field,
142
+ config: { ...field.config, isSearchField: true }
143
+ }));
144
+ this.initialSearchFields = initializeSearchFields(
145
+ this.searchFields,
146
+ getPConnect,
147
+ referenceListClassID,
148
+ useCache && cache.activeGroupId === this.activeGroupId ? cache.searchFields : {}
149
+ );
150
+ const filtersWithClassID = {
151
+ ...this.initialSearchFields,
152
+ classID: referenceListClassID
153
+ };
154
+ const viewName = this.pConn$.getCurrentView();
155
+ const transientId = getPConnect.getContainerManager().addTransientItem({ id: `${referenceFieldName}-${viewName}`, data: filtersWithClassID });
156
+ this.transientItemID = transientId;
157
+ this.createSearchFields();
158
+ }
159
+
160
+ createSearchFields() {
161
+ const searchFieldsViewConfig = {
162
+ name: 'SearchFields',
163
+ type: 'View',
164
+ config: {
165
+ template: 'DefaultForm',
166
+ NumCols: '3',
167
+ contextName: this.transientItemID, // can be null initially; will be replaced after transient creation
168
+ readOnly: false,
169
+ context: this.transientItemID,
170
+ localeReference: this.searchGroupsProps.localeReference
171
+ },
172
+ children: [
173
+ {
174
+ name: 'Fields',
175
+ type: 'Region',
176
+ children: this.searchFields
177
+ }
178
+ ]
179
+ };
180
+
181
+ // Create c11n env (Angular will render this via the SDK host component)
182
+ this.searchFieldsC11nEnv.set(
183
+ PCore.createPConnect({
184
+ meta: searchFieldsViewConfig,
185
+ options: {
186
+ hasForm: true,
187
+ contextName: this.transientItemID
188
+ }
189
+ })
190
+ );
191
+
192
+ this.cdRef.detectChanges();
193
+ }
194
+
195
+ getFilterData(): void {
196
+ let changes = PCore.getFormUtils().getSubmitData(this.transientItemID, {
197
+ isTransientContext: true,
198
+ includeDisabledFields: true
199
+ });
200
+
201
+ if (Object.keys(this.cache.searchFields ?? {}).length > 0 && Object.keys(changes).length === 1) {
202
+ changes = this.cache.searchFields;
203
+ }
204
+
205
+ const formValues = flattenObj(changes);
206
+
207
+ if (
208
+ !PCore.isDeepEqual(this.previousFormValues, formValues) &&
209
+ PCore.getFormUtils().isFormValid(this.transientItemID) &&
210
+ isValidInput(formValues)
211
+ ) {
212
+ if (this.isValidatorField) {
213
+ // @ts-ignore
214
+ PCore.getMessageManager().clearContextMessages({ context: transientItemID });
215
+ }
216
+
217
+ this.previousFormValues = formValues;
218
+ // this.setShowRecords(true);
219
+
220
+ PCore.getPubSubUtils().publish(PCore.getEvents().getTransientEvent().UPDATE_PROMOTED_FILTERS, {
221
+ payload: formValues,
222
+ showRecords: true,
223
+ viewName: this.getPConnect.getCurrentView()
224
+ });
225
+ }
226
+
227
+ this.state.activeGroupId = this.activeGroupId;
228
+ this.state.searchFields = changes;
229
+ this.state.selectedCategory = this.getPConnect.getCurrentView();
230
+ const options = componentCachePersistUtils.getComponentStateOptions(this.getPConnect);
231
+ componentCachePersistUtils.setComponentCache({
232
+ cacheKey: this.searchSelectCacheKey,
233
+ state: this.state,
234
+ options
235
+ });
236
+ }
237
+
238
+ resetFilterData(): void {
239
+ PCore.getNavigationUtils().resetComponentCache(this.searchSelectCacheKey);
240
+ const resetPayload = {
241
+ transientItemID: this.transientItemID,
242
+ data: initializeSearchFields(this.searchFields, this.getPConnect, this.referenceListClassID),
243
+ options: { reset: true }
244
+ };
245
+ PCore.getContainerUtils().updateTransientData(resetPayload);
246
+ }
247
+
248
+ /** NEW: update existing transient data when active group changes */
249
+ updateTransientDataForActiveGroup() {
250
+ const filtersWithClassID = {
251
+ ...this.initialSearchFields,
252
+ classID: this.referenceListClassID
253
+ };
254
+
255
+ if (this.transientItemID) {
256
+ // this mirrors the React: PCore.getContainerUtils().replaceTransientData(...)
257
+ PCore.getContainerUtils().replaceTransientData({ transientItemID: this.transientItemID, data: filtersWithClassID });
258
+ }
259
+ }
260
+
261
+ onActiveGroupChange(event: any) {
262
+ this.activeGroupId = event.value;
263
+ // update searchFields for the newly selected group (mirror how React recalculates)
264
+ const activeGroupIndex = this.groups.findIndex(g => g.config.id === this.activeGroupId);
265
+ const searchFieldsChildren = activeGroupIndex !== -1 ? this.rawGroupsConfig[activeGroupIndex]?.children || [] : [];
266
+ this.searchFields = searchFieldsChildren.map(field => ({
267
+ ...field,
268
+ config: { ...field.config, isSearchField: true }
269
+ }));
270
+
271
+ // IMPORTANT: call replaceTransientData to update the transient with the new group's search fields
272
+ this.updateTransientDataForActiveGroup();
273
+ }
274
+
275
+ private setupCacheReplayOnListViewReady(): void {
276
+ if (Object.keys(this.cache?.searchFields ?? {}).length > 0) {
277
+ const sub: any = PCore.getPubSubUtils().subscribe(
278
+ listViewConstants.EVENTS.LIST_VIEW_READY,
279
+ ({ viewName }: { viewName: string }) => {
280
+ if (viewName === this.viewName && this.useCache) {
281
+ this.getFilterData();
282
+ }
283
+ },
284
+ `${this.searchSelectCacheKey}-listview-ready`
285
+ );
286
+ this.subs.push(sub);
287
+ }
288
+ }
289
+
290
+ ngOnDestroy(): void {
291
+ PCore.getPubSubUtils().unsubscribe(listViewConstants.EVENTS.LIST_VIEW_READY, `${this.searchSelectCacheKey}-listview-ready`);
292
+ this.subs.forEach(s => s.unsubscribe());
293
+ }
294
+ }
@@ -0,0 +1,29 @@
1
+ function isEmpty(value: any): boolean {
2
+ return (
3
+ // null or undefined
4
+ value === null ||
5
+ value === undefined ||
6
+ ((Array.isArray(value) || typeof value === 'string') && value.length === 0) ||
7
+ // is an Object and has no keys
8
+ (value.constructor === Object && Object.keys(value).length === 0)
9
+ );
10
+ }
11
+
12
+ export function getCacheInfo(
13
+ cache: { selectedCategory: string; activeGroupId: string; searchFields: unknown },
14
+ groups: { config: { id: string } }[]
15
+ ) {
16
+ let initialActiveGroupId = groups.length ? groups[0].config.id : '';
17
+
18
+ let useCache = false;
19
+ if (cache.activeGroupId && groups?.find(group => group.config.id === cache.activeGroupId)) {
20
+ initialActiveGroupId = cache.activeGroupId;
21
+ useCache = true;
22
+ }
23
+
24
+ return { useCache, initialActiveGroupId };
25
+ }
26
+
27
+ export function isValidInput(input: { [s: string]: unknown }) {
28
+ return Object.values(input).some(value => !isEmpty(value));
29
+ }
@@ -3,7 +3,10 @@
3
3
  <component-mapper name="NavBar" [props]="{ pConn$, appName$, pages$, caseTypes$ }"></component-mapper>
4
4
  </div>
5
5
  <div *ngIf="bShowAppShell$ && portalTemplate === 'wss'">
6
- <component-mapper name="WssNavBar" [props]="{ pConn$, appName$, homePage: pages$[0], pages$: links, caseTypes$ }"></component-mapper>
6
+ <component-mapper
7
+ name="WssNavBar"
8
+ [props]="{ pConn$, appName$, homePage: pages$[0], pages$: links, caseTypes$, portalLogoImage$: imageURL }"
9
+ ></component-mapper>
7
10
  </div>
8
11
  <div [ngClass]="{ 'appshell-main': portalTemplate !== 'wss', 'appshell-main-wss': portalTemplate === 'wss' }">
9
12
  <div *ngFor="let kid of arChildren$">
@@ -1,9 +1,7 @@
1
1
  .appshell-top {
2
- background-color: var(--app-background-color);
3
2
  }
4
3
 
5
4
  .appshell-top-wss {
6
- background-color: var(--app-background-color);
7
5
  }
8
6
 
9
7
  .appshell-main {
@@ -32,7 +30,6 @@
32
30
  align-items: center;
33
31
  height: 100%;
34
32
  width: 100%;
35
- background-color: var(--app-background-color);
36
33
  position: fixed;
37
34
  z-index: 999;
38
35
  top: 0rem;
@@ -5,6 +5,7 @@ import { Subscription } from 'rxjs';
5
5
  import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
6
6
  import { ErrorMessagesService } from '@pega/angular-sdk-components';
7
7
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
8
+ import { Utils } from '@pega/angular-sdk-components';
8
9
 
9
10
  interface IPage {
10
11
  classID: string;
@@ -24,14 +25,13 @@ interface AppShellProps {
24
25
  portalTemplate: string;
25
26
  readOnly?: boolean;
26
27
  showAppHeaderBar: boolean;
27
- showAppName: boolean;
28
+ showAppName: any;
28
29
  }
29
30
 
30
31
  @Component({
31
32
  selector: 'app-app-shell',
32
33
  templateUrl: './app-shell.component.html',
33
34
  styleUrls: ['./app-shell.component.scss'],
34
- standalone: true,
35
35
  imports: [CommonModule, MatSnackBarModule, forwardRef(() => ComponentMapperComponent)]
36
36
  })
37
37
  export class AppShellComponent implements OnInit, OnDestroy {
@@ -45,19 +45,22 @@ export class AppShellComponent implements OnInit, OnDestroy {
45
45
  caseTypes$?: object[];
46
46
  arChildren$: any[];
47
47
  bShowAppShell$ = false;
48
- appName$ = 'PEGA';
48
+ appName$ = '';
49
49
  errorMessagesSubscription: Subscription;
50
50
  sErrorMessages = '';
51
51
  snackBarRef: any;
52
52
  bOkDisplayError = false;
53
53
  portalTemplate: string;
54
54
  links: any = [];
55
+ imageURL: string | Blob;
56
+ localizedVal = PCore.getLocaleUtils().getLocaleValue;
55
57
 
56
58
  constructor(
57
59
  private angularPConnect: AngularPConnectService,
58
60
  private erService: ErrorMessagesService,
59
61
  private snackBar: MatSnackBar,
60
- private ngZone: NgZone
62
+ private ngZone: NgZone,
63
+ private utils: Utils
61
64
  ) {}
62
65
 
63
66
  ngOnInit() {
@@ -68,6 +71,8 @@ export class AppShellComponent implements OnInit, OnDestroy {
68
71
 
69
72
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AppShellProps;
70
73
 
74
+ this.portalTemplate = this.configProps$.portalTemplate;
75
+
71
76
  // making a copy, so can add info
72
77
  this.pages$ = this.configProps$.pages;
73
78
 
@@ -79,6 +84,11 @@ export class AppShellComponent implements OnInit, OnDestroy {
79
84
  this.bShowAppShell$ = true;
80
85
  }
81
86
 
87
+ /* TODO: We're setting the `pyPortalTemplate` for now, this would be handled by the CoreJS in the future releases */
88
+ if (this.portalTemplate === 'wss') {
89
+ PCore.getEnvironmentInfo().setEnvironmentInfo({ ...PCore.getEnvironmentInfo().environmentInfoObject, pyPortalTemplate: 'wss' } as any);
90
+ }
91
+
82
92
  // @ts-ignore - Property 'pyCaseTypesAvailableToCreateDP' does not exist on type pxApplication
83
93
  const caseTypesAvailableToCreateDP = PCore.getEnvironmentInfo().environmentInfoObject?.pxApplication?.pyCaseTypesAvailableToCreateDP;
84
94
  if (caseTypesAvailableToCreateDP) {
@@ -100,8 +110,6 @@ export class AppShellComponent implements OnInit, OnDestroy {
100
110
 
101
111
  this.arChildren$ = this.pConn$.getChildren();
102
112
 
103
- this.portalTemplate = this.configProps$.portalTemplate;
104
-
105
113
  // handle showing and hiding the progress spinner
106
114
  this.errorMessagesSubscription = this.erService.getMessage().subscribe(message => {
107
115
  this.showDismissErrorMessages(message);
@@ -138,6 +146,12 @@ export class AppShellComponent implements OnInit, OnDestroy {
138
146
  updateSelf() {
139
147
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AppShellProps;
140
148
 
149
+ const showAppName = this.configProps$.showAppName;
150
+ const envInfo = PCore.getEnvironmentInfo();
151
+ const appNameToDisplay = showAppName ? envInfo.getApplicationLabel() : '';
152
+ const portalClass = this.pConn$.getValue('.classID', ''); // 2nd arg empty string until typedef marked correctly
153
+ const envPortalName = envInfo.getPortalName();
154
+
141
155
  this.ngZone.run(() => {
142
156
  // making a copy, so can add info
143
157
  this.pages$ = this.configProps$.pages;
@@ -149,6 +163,30 @@ export class AppShellComponent implements OnInit, OnDestroy {
149
163
  this.caseTypes$ = this.configProps$.caseTypes;
150
164
  this.arChildren$ = this.pConn$.getChildren();
151
165
  });
166
+
167
+ const portalLogo = this.configProps$.portalLogo;
168
+ // using the default icon then fetch it from the static folder (not auth involved)
169
+ if (
170
+ !portalLogo ||
171
+ portalLogo.toLowerCase().includes('pzpega-logo-mark') ||
172
+ portalLogo.toLowerCase().includes('py-logo') ||
173
+ portalLogo.toLowerCase().includes('py-full-logo')
174
+ ) {
175
+ const portalLogoImage = this.utils.getIconPath(this.utils.getSDKStaticContentUrl()).concat('pzpega-logo-mark.svg');
176
+ this.imageURL = portalLogoImage;
177
+ }
178
+ // not using default icon to fetch it using the way which uses authentication
179
+ else {
180
+ PCore.getAssetLoader()
181
+ .getSvcImageUrl(portalLogo)
182
+ .then(data => {
183
+ this.imageURL = data;
184
+ })
185
+ .catch(() => {
186
+ console.error(`${this.localizedVal('Unable to load the image for the portal logo/icon with the insName', 'AppShell')}:${portalLogo}`);
187
+ });
188
+ }
189
+ this.appName$ = this.localizedVal(appNameToDisplay || '', '', `${portalClass}!PORTAL!${envPortalName}`.toUpperCase());
152
190
  }
153
191
 
154
192
  // fpr show/hiding error messages in the SnackBar component
@@ -156,7 +194,7 @@ export class AppShellComponent implements OnInit, OnDestroy {
156
194
  switch (errorMessages.action) {
157
195
  case 'update':
158
196
  // won't show unless publish is turned on
159
- // eslint-disable-next-line @typescript-eslint/prefer-includes
197
+
160
198
  if (this.sErrorMessages.indexOf(errorMessages.actionMessage) < 0) {
161
199
  this.sErrorMessages = this.sErrorMessages.concat(errorMessages.actionMessage).concat('\n');
162
200
 
@@ -169,7 +207,7 @@ export class AppShellComponent implements OnInit, OnDestroy {
169
207
  case 'show':
170
208
  // add error message if not in the list
171
209
  // won't show unless publish is turned on
172
- // eslint-disable-next-line @typescript-eslint/prefer-includes
210
+
173
211
  if (this.sErrorMessages.indexOf(errorMessages.actionMessage) < 0) {
174
212
  this.sErrorMessages = this.sErrorMessages.concat(errorMessages.actionMessage).concat('\n');
175
213
  }
@@ -16,7 +16,6 @@ interface BannerPageProps {
16
16
  selector: 'app-banner-page',
17
17
  templateUrl: './banner-page.component.html',
18
18
  styleUrls: ['./banner-page.component.scss'],
19
- standalone: true,
20
19
  imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
21
20
  })
22
21
  export class BannerPageComponent implements OnInit, OnChanges {
@@ -1,10 +1,16 @@
1
1
  import { Directive, OnDestroy } from '@angular/core';
2
+ import { AngularPConnectData } from '@pega/angular-sdk-components';
2
3
 
3
4
  @Directive()
4
5
  export class FormTemplateBase implements OnDestroy {
5
6
  pConn$: any;
7
+ angularPConnectData: AngularPConnectData;
6
8
 
7
9
  ngOnDestroy(): void {
8
10
  PCore.getContextTreeManager().removeContextTreeNode(this.pConn$.getContextName());
11
+
12
+ if (this.angularPConnectData?.unsubscribeFn) {
13
+ this.angularPConnectData.unsubscribeFn();
14
+ }
9
15
  }
10
16
  }
@@ -30,8 +30,6 @@
30
30
  }
31
31
 
32
32
  .psdk-status {
33
- background-color: var(--app-primary-color);
34
- color: var(--app-form-color);
35
33
  padding: 0;
36
34
  margin-top: 0.625rem;
37
35
  width: fit-content;
@@ -3,6 +3,7 @@ import { FormGroup } from '@angular/forms';
3
3
  import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
4
4
  import { ReferenceComponent } from '@pega/angular-sdk-components';
5
5
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
6
+ import { Utils } from '@pega/angular-sdk-components';
6
7
 
7
8
  interface CaseSummaryProps {
8
9
  // If any, enter additional props that only exist on this component
@@ -16,7 +17,6 @@ interface CaseSummaryProps {
16
17
  selector: 'app-case-summary',
17
18
  templateUrl: './case-summary.component.html',
18
19
  styleUrls: ['./case-summary.component.scss'],
19
- standalone: true,
20
20
  imports: [forwardRef(() => ComponentMapperComponent)]
21
21
  })
22
22
  export class CaseSummaryComponent implements OnInit, OnDestroy, OnChanges {
@@ -33,7 +33,10 @@ export class CaseSummaryComponent implements OnInit, OnDestroy, OnChanges {
33
33
  primaryFields$: any[] = [];
34
34
  secondaryFields$: any[] = [];
35
35
 
36
- constructor(private angularPConnect: AngularPConnectService) {}
36
+ constructor(
37
+ private angularPConnect: AngularPConnectService,
38
+ private utils: Utils
39
+ ) {}
37
40
 
38
41
  ngOnInit(): void {
39
42
  // First thing in initialization is registering and subscribing to the AngularPConnect service
@@ -101,30 +104,11 @@ export class CaseSummaryComponent implements OnInit, OnDestroy, OnChanges {
101
104
  });
102
105
  }
103
106
 
104
- prepareComponentInCaseSummary(pConnectMeta, getPConnect) {
105
- const { config, children } = pConnectMeta;
106
- const pConnect = getPConnect();
107
-
108
- const caseSummaryComponentObject: any = {};
109
-
110
- const { type } = pConnectMeta;
111
- const createdComponent = pConnect.createComponent({
112
- type,
113
- children: children ? [...children] : [],
114
- config: {
115
- ...config
116
- }
117
- });
118
-
119
- caseSummaryComponentObject.value = createdComponent;
120
- return caseSummaryComponentObject;
121
- }
122
-
123
107
  prepareCaseSummaryData(summaryFieldChildren) {
124
108
  const convertChildrenToSummaryData = kid => {
125
109
  return kid?.map((childItem, index) => {
126
110
  const childMeta = childItem.getPConnect().meta;
127
- const caseSummaryComponentObject = this.prepareComponentInCaseSummary(childMeta, childItem.getPConnect);
111
+ const caseSummaryComponentObject = this.utils.prepareComponentInCaseSummary(childMeta, childItem.getPConnect);
128
112
  caseSummaryComponentObject.id = index + 1;
129
113
  return caseSummaryComponentObject;
130
114
  });
@@ -1,7 +1,7 @@
1
1
  <div class="psdk-case-view" id="case-view">
2
2
  <div class="psdk-case-view-info">
3
- <mat-toolbar color="primary" class="psdk-case-view-toolbar">
4
- <mat-toolbar-row style="padding-left: 1rem">
3
+ <mat-toolbar class="psdk-case-view-toolbar">
4
+ <mat-toolbar-row class="psdk-case-view-toolbar-row">
5
5
  <div class="psdk-case-icon-div">
6
6
  <img class="psdk-case-svg-icon" src="{{ svgCase$ }}" />
7
7
  </div>
@@ -73,8 +73,8 @@
73
73
  </div>
74
74
  </div>
75
75
 
76
- <div>
77
- <component-mapper name="DeferLoad" [props]="{ pConn$, loadData$: tabData$, name: tabData$?.config?.name }"></component-mapper>
76
+ <div *ngIf="tabData$">
77
+ <component-mapper name="DeferLoad" [props]="{ pConn$, name: tabData$?.config?.name }"></component-mapper>
78
78
  </div>
79
79
  </div>
80
80
  <div>
@@ -27,7 +27,7 @@ h1 {
27
27
  }
28
28
 
29
29
  .psdk-case-icon-div {
30
- background-color: var(--app-primary-dark-color);
30
+ background-color: var(--mat-sys-on-primary-fixed);
31
31
  border-radius: 1rem;
32
32
  padding: 0.5rem 0.3rem 0.3rem 0.3rem;
33
33
  }
@@ -47,11 +47,9 @@ h1 {
47
47
  flex: 0 0 auto;
48
48
  width: 25rem;
49
49
  float: left;
50
- padding: 0rem 0.3125rem 0rem 0rem;
51
- margin-left: 0.5rem;
52
- margin-top: 0.5rem;
53
- height: 100%; /* Should be removed. Only for demonstration */
54
- background-color: var(--app-form-color);
50
+ // padding: 0rem 0.3125rem 0rem 0rem;
51
+ background-color: var(--mat-sys-surface-container);
52
+ height: 100%;
55
53
  }
56
54
 
57
55
  .psdk-case-view-main {
@@ -84,24 +82,34 @@ h1 {
84
82
  }
85
83
 
86
84
  .psdk-case-view-utilities {
85
+ background-color: var(--mat-sys-surface-container);
87
86
  width: 21.875rem;
88
87
  float: left;
89
88
  padding: 0rem 0.3125rem;
90
- height: 100%; /* Should be removed. Only for demonstration */
91
89
  }
92
90
 
93
91
  .psdk-case-view-divider {
94
- border-bottom: 0.0625rem solid var(--app-neutral-light-color);
92
+ border-bottom: 0.0625rem solid var(--mat-sys-outline-variant);
95
93
  }
96
94
 
97
95
  .psdk-status {
98
96
  padding: 0.3125rem 0.3125rem;
99
- background-color: var(--app-primary-color);
100
- color: var(--app-form-color);
97
+ background-color: var(--mat-sys-primary);
98
+ color: var(--mat-sys-surface-container);
101
99
  width: fit-content;
102
100
  margin: 0.625rem;
103
101
  }
104
102
 
103
+ .psdk-case-view-toolbar {
104
+ background-color: var(--mat-sys-primary);
105
+ }
106
+
105
107
  button {
106
108
  margin: 0rem 0.3125rem;
107
109
  }
110
+
111
+ .psdk-case-view-toolbar-row {
112
+ padding-left: 1rem;
113
+ white-space: normal;
114
+ height: auto;
115
+ }