@hmcts/ccd-case-ui-toolkit 7.3.35-exui-3995-rc-1 → 7.3.36-fix-security-issue

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.
package/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  # ccd-case-ui-toolkit
2
2
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
3
- [![Build Status](https://travis-ci.org/hmcts/ccd-case-ui-toolkit.svg?branch=master)](https://travis-ci.org/hmcts/ccd-case-ui-toolkit)
4
3
  [![codecov](https://codecov.io/gh/hmcts/ccd-case-ui-toolkit/branch/master/graph/badge.svg)](https://codecov.io/gh/hmcts/ccd-case-ui-toolkit)
5
4
  [![Known Vulnerabilities](https://snyk.io/test/github/hmcts/ccd-case-ui-toolkit/badge.svg)](https://snyk.io/test/github/hmcts/ccd-case-ui-toolkit)
6
5
  [![HitCount](http://hits.dwyl.io/hmcts/ccd-case-ui-toolkit.svg)](#ccd-case-ui-toolkit)
@@ -124,7 +123,6 @@ case-ui-toolkit
124
123
  ├─ .editorconfig - Common IDE configuration
125
124
  ├─ .gitignore - List of files that are ignored while publishing to git repo
126
125
  ├─ .npmignore - List of files that are ignored while publishing to npmjs
127
- ├─ .travis.yml - Travis CI configuration
128
126
  ├─ LICENSE.md - License details
129
127
  ├─ README.md - README for the library
130
128
  ├─ gulpfile.js - Gulp helper scripts
@@ -181,7 +179,6 @@ As a result once you change library source code it will be automatically re-comp
181
179
 
182
180
  ### Library Release
183
181
 
184
- Travis build system automatically publish NPM packages including GitHub releases whenever there is a version change in package.json
185
182
 
186
183
  Prerelease version from PR branch should follow the format as `x.y.z-RDM-xxx-prerelease`
187
184
 
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, DOCUMENT, Injectable, Inject, ChangeDetectorRef, Directive, InjectionToken, ViewChild, ChangeDetectionStrategy, Injector, ViewContainerRef, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, DOCUMENT, Injectable, Inject, InjectionToken, Optional, ChangeDetectorRef, Directive, ViewChild, ChangeDetectionStrategy, Injector, ViewContainerRef, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3
3
  import * as i5 from '@angular/common';
4
4
  import { CommonModule, AsyncPipe, CurrencyPipe, formatDate } from '@angular/common';
5
5
  import * as i1 from 'rpx-xui-translation';
@@ -1637,23 +1637,89 @@ class SessionStorageService {
1637
1637
  sessionStorage.clear();
1638
1638
  }
1639
1639
  static ɵfac = function SessionStorageService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionStorageService)(); };
1640
- static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SessionStorageService, factory: SessionStorageService.ɵfac });
1640
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SessionStorageService, factory: SessionStorageService.ɵfac, providedIn: 'root' });
1641
1641
  }
1642
1642
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionStorageService, [{
1643
- type: Injectable
1643
+ type: Injectable,
1644
+ args: [{
1645
+ providedIn: 'root',
1646
+ }]
1644
1647
  }], null, null); })();
1645
1648
 
1649
+ function safeJsonParse(value, fallback = null) {
1650
+ if (!value) {
1651
+ return fallback;
1652
+ }
1653
+ try {
1654
+ return JSON.parse(value);
1655
+ }
1656
+ catch (error) {
1657
+ // Log for diagnostics, then return fallback to avoid UI crashes.
1658
+ // eslint-disable-next-line no-console
1659
+ console.error('safeJsonParse failed to parse JSON', error);
1660
+ return fallback;
1661
+ }
1662
+ }
1663
+
1664
+ const SessionErrorRoute = new InjectionToken('SessionErrorRoute');
1665
+ const SessionJsonErrorLogger = new InjectionToken('SessionJsonErrorLogger');
1666
+ class SessionStorageGuard {
1667
+ sessionStorageService;
1668
+ router;
1669
+ errorRoute;
1670
+ errorLogger;
1671
+ constructor(sessionStorageService, router, errorRoute, errorLogger) {
1672
+ this.sessionStorageService = sessionStorageService;
1673
+ this.router = router;
1674
+ this.errorRoute = errorRoute;
1675
+ this.errorLogger = errorLogger;
1676
+ }
1677
+ canActivate() {
1678
+ const userInfoStr = this.sessionStorageService.getItem('userDetails');
1679
+ if (!userInfoStr) {
1680
+ return true;
1681
+ }
1682
+ const parsed = safeJsonParse(userInfoStr, null);
1683
+ if (parsed !== null) {
1684
+ return true;
1685
+ }
1686
+ const error = new Error('Invalid userDetails in session storage');
1687
+ if (this.errorLogger) {
1688
+ this.errorLogger(error);
1689
+ }
1690
+ else {
1691
+ // eslint-disable-next-line no-console
1692
+ console.error('Invalid userDetails in session storage', error);
1693
+ }
1694
+ this.router.navigate([this.errorRoute || '/session-error']);
1695
+ return false;
1696
+ }
1697
+ static ɵfac = function SessionStorageGuard_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionStorageGuard)(i0.ɵɵinject(SessionStorageService), i0.ɵɵinject(i1$1.Router), i0.ɵɵinject(SessionErrorRoute, 8), i0.ɵɵinject(SessionJsonErrorLogger, 8)); };
1698
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SessionStorageGuard, factory: SessionStorageGuard.ɵfac, providedIn: 'root' });
1699
+ }
1700
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionStorageGuard, [{
1701
+ type: Injectable,
1702
+ args: [{
1703
+ providedIn: 'root',
1704
+ }]
1705
+ }], () => [{ type: SessionStorageService }, { type: i1$1.Router }, { type: undefined, decorators: [{
1706
+ type: Optional
1707
+ }, {
1708
+ type: Inject,
1709
+ args: [SessionErrorRoute]
1710
+ }] }, { type: SessionJsonErrorLogger, decorators: [{
1711
+ type: Optional
1712
+ }, {
1713
+ type: Inject,
1714
+ args: [SessionJsonErrorLogger]
1715
+ }] }], null); })();
1716
+
1646
1717
  const USER_DETAILS = 'userDetails';
1647
1718
  const PUI_CASE_MANAGER = 'pui-case-manager';
1648
1719
  const JUDGE = 'judge';
1649
1720
  function getUserDetails(sessionStorageService) {
1650
- try {
1651
- const item = sessionStorageService?.getItem(USER_DETAILS);
1652
- return item ? JSON.parse(item) : null;
1653
- }
1654
- catch {
1655
- return null;
1656
- }
1721
+ const item = sessionStorageService?.getItem(USER_DETAILS);
1722
+ return safeJsonParse(item, null);
1657
1723
  }
1658
1724
  function isInternalUser(sessionStorageService) {
1659
1725
  const userDetails = getUserDetails(sessionStorageService);
@@ -1692,8 +1758,11 @@ class ActivityService {
1692
1758
  return error;
1693
1759
  }
1694
1760
  getOptions() {
1695
- const userDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
1696
- const headers = new HttpHeaders().set('Content-Type', 'application/json').set('Authorization', userDetails.token);
1761
+ const userDetails = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS));
1762
+ let headers = new HttpHeaders().set('Content-Type', 'application/json');
1763
+ if (userDetails?.token) {
1764
+ headers = headers.set('Authorization', userDetails.token);
1765
+ }
1697
1766
  return {
1698
1767
  headers,
1699
1768
  withCredentials: true,
@@ -4501,11 +4570,8 @@ class FieldsUtils {
4501
4570
  }
4502
4571
  }
4503
4572
  static getUserTaskFromClientContext(clientContextStr) {
4504
- if (clientContextStr) {
4505
- let clientContext = JSON.parse(clientContextStr);
4506
- return clientContext.client_context.user_task;
4507
- }
4508
- return null;
4573
+ const clientContext = safeJsonParse(clientContextStr, null);
4574
+ return clientContext?.client_context?.user_task || null;
4509
4575
  }
4510
4576
  buildCanShowPredicate(eventTrigger, form) {
4511
4577
  const currentState = this.getCurrentEventState(eventTrigger, form);
@@ -5965,17 +6031,15 @@ class FormValueService {
5965
6031
  return form[currentFieldId + FieldsUtils.LABEL_SUFFIX].join(', ');
5966
6032
  }
5967
6033
  else if (FieldsUtils.isCollectionOfSimpleTypes(currentForm)) {
5968
- return currentForm.map(fieldValue => fieldValue['value']).join(', ');
6034
+ return currentForm.map((fieldValue) => fieldValue.value).join(', ');
5969
6035
  }
5970
6036
  else if (FieldsUtils.isCollection(currentForm)) {
5971
- return this.getFieldValue(currentForm[colIndex]['value'], fieldIds.slice(1).join('.'), colIndex);
6037
+ return this.getFieldValue(currentForm[colIndex].value, fieldIds.slice(1).join('.'), colIndex);
5972
6038
  }
5973
6039
  else if (FieldsUtils.isNonEmptyObject(currentForm)) {
5974
6040
  return this.getFieldValue(currentForm, fieldIds.slice(1).join('.'), colIndex);
5975
6041
  }
5976
- else {
5977
- return currentForm;
5978
- }
6042
+ return currentForm;
5979
6043
  }
5980
6044
  /**
5981
6045
  * A recursive method to remove anything with a `---LABEL` suffix.
@@ -6013,9 +6077,7 @@ class FormValueService {
6013
6077
  if (field.field_type) {
6014
6078
  return field.field_type.type === 'Label';
6015
6079
  }
6016
- else {
6017
- return false;
6018
- }
6080
+ return false;
6019
6081
  }
6020
6082
  static isEmptyData(data) {
6021
6083
  if (data) {
@@ -6050,8 +6112,8 @@ class FormValueService {
6050
6112
  constructor(fieldTypeSanitiser) {
6051
6113
  this.fieldTypeSanitiser = fieldTypeSanitiser;
6052
6114
  }
6053
- sanitise(rawValue, isCaseFlagJourney = false) {
6054
- return this.sanitiseObject(rawValue, isCaseFlagJourney);
6115
+ sanitise(rawValue) {
6116
+ return this.sanitiseObject(rawValue);
6055
6117
  }
6056
6118
  sanitiseCaseReference(reference) {
6057
6119
  // strip non digits
@@ -6062,10 +6124,13 @@ class FormValueService {
6062
6124
  return s;
6063
6125
  }
6064
6126
  filterCurrentPageFields(caseFields, editForm) {
6065
- const cloneForm = JSON.parse(JSON.stringify(editForm));
6066
- Object.keys(cloneForm['data']).forEach((key) => {
6127
+ const cloneForm = {
6128
+ ...(editForm || {}),
6129
+ data: { ...((editForm && editForm.data) || {}) }
6130
+ };
6131
+ Object.keys(cloneForm.data).forEach((key) => {
6067
6132
  if (caseFields.findIndex((element) => element.id === key) < 0) {
6068
- delete cloneForm['data'][key];
6133
+ delete cloneForm.data[key];
6069
6134
  }
6070
6135
  });
6071
6136
  return cloneForm;
@@ -6073,7 +6138,7 @@ class FormValueService {
6073
6138
  sanitiseDynamicLists(caseFields, editForm) {
6074
6139
  return this.fieldTypeSanitiser.sanitiseLists(caseFields, editForm.data);
6075
6140
  }
6076
- sanitiseObject(rawObject, isCaseFlagJourney = false) {
6141
+ sanitiseObject(rawObject) {
6077
6142
  if (!rawObject) {
6078
6143
  return rawObject;
6079
6144
  }
@@ -6087,17 +6152,14 @@ class FormValueService {
6087
6152
  break;
6088
6153
  }
6089
6154
  else if ('CaseReference' === key) {
6090
- sanitisedObject[key] = this.sanitiseValue(this.sanitiseCaseReference(String(rawObject[key])), isCaseFlagJourney);
6155
+ sanitisedObject[key] = this.sanitiseValue(this.sanitiseCaseReference(String(rawObject[key])));
6091
6156
  }
6092
6157
  else {
6093
- sanitisedObject[key] = this.sanitiseValue(rawObject[key], isCaseFlagJourney);
6158
+ sanitisedObject[key] = this.sanitiseValue(rawObject[key]);
6094
6159
  if (Array.isArray(sanitisedObject[key])) {
6095
6160
  // If the 'sanitised' array is empty, whereas the original array had 1 or more items
6096
6161
  // delete the property from the sanatised object
6097
- const shouldDeleteField = sanitisedObject[key].length === 0
6098
- && rawObject[key].length > 0
6099
- && !isCaseFlagJourney;
6100
- if (shouldDeleteField) {
6162
+ if (sanitisedObject[key].length === 0 && rawObject[key].length > 0) {
6101
6163
  delete sanitisedObject[key];
6102
6164
  }
6103
6165
  }
@@ -6105,29 +6167,29 @@ class FormValueService {
6105
6167
  }
6106
6168
  return sanitisedObject;
6107
6169
  }
6108
- sanitiseArray(rawArray, isCaseFlagJourney = false) {
6170
+ sanitiseArray(rawArray) {
6109
6171
  if (!rawArray) {
6110
6172
  return rawArray;
6111
6173
  }
6112
- rawArray.forEach(item => {
6174
+ rawArray.forEach((item) => {
6113
6175
  if (item && item.hasOwnProperty('value')) {
6114
- item.value = this.sanitiseValue(item.value, isCaseFlagJourney);
6176
+ item.value = this.sanitiseValue(item.value);
6115
6177
  }
6116
6178
  });
6117
6179
  // Filter the array to ensure only truthy values are returned; double-bang operator returns the boolean true/false
6118
6180
  // association of a value. In addition, if the array contains items with a "value" object property, return only
6119
6181
  // those whose value object contains non-empty values, including for any descendant objects
6120
6182
  return rawArray
6121
- .filter(item => !!item)
6122
- .filter(item => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);
6183
+ .filter((item) => !!item)
6184
+ .filter((item) => item.hasOwnProperty('value') ? FieldsUtils.containsNonEmptyValues(item.value) : true);
6123
6185
  }
6124
- sanitiseValue(rawValue, isCaseFlagJourney = false) {
6186
+ sanitiseValue(rawValue) {
6125
6187
  if (Array.isArray(rawValue)) {
6126
- return this.sanitiseArray(rawValue, isCaseFlagJourney);
6188
+ return this.sanitiseArray(rawValue);
6127
6189
  }
6128
6190
  switch (typeof rawValue) {
6129
6191
  case 'object':
6130
- return this.sanitiseObject(rawValue, isCaseFlagJourney);
6192
+ return this.sanitiseObject(rawValue);
6131
6193
  case 'string':
6132
6194
  return rawValue.trim();
6133
6195
  case 'number':
@@ -6138,7 +6200,7 @@ class FormValueService {
6138
6200
  }
6139
6201
  clearNonCaseFields(data, caseFields) {
6140
6202
  for (const dataKey in data) {
6141
- if (!caseFields.find(cf => cf.id === dataKey)) {
6203
+ if (!caseFields.find((cf) => cf.id === dataKey)) {
6142
6204
  delete data[dataKey];
6143
6205
  }
6144
6206
  }
@@ -6336,7 +6398,7 @@ class FormValueService {
6336
6398
  */
6337
6399
  removeCaseFieldsOfType(data, caseFields, types) {
6338
6400
  if (data && caseFields && caseFields.length > 0 && types.length > 0) {
6339
- const caseFieldsToRemove = caseFields.filter(caseField => FieldsUtils.isCaseFieldOfType(caseField, types));
6401
+ const caseFieldsToRemove = caseFields.filter((caseField) => FieldsUtils.isCaseFieldOfType(caseField, types));
6340
6402
  for (const caseField of caseFieldsToRemove) {
6341
6403
  delete data[caseField.id];
6342
6404
  }
@@ -6355,10 +6417,10 @@ class FormValueService {
6355
6417
  */
6356
6418
  repopulateFormDataFromCaseFieldValues(data, caseFields) {
6357
6419
  if (data && caseFields && caseFields.length > 0 &&
6358
- caseFields.findIndex(caseField => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher'])) > -1) {
6420
+ caseFields.findIndex((caseField) => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher'])) > -1) {
6359
6421
  // Ignore the FlagLauncher CaseField because it does not hold any values
6360
- caseFields.filter(caseField => !FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))
6361
- .forEach(caseField => {
6422
+ caseFields.filter((caseField) => !FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))
6423
+ .forEach((caseField) => {
6362
6424
  // Ensure that the data object is populated for all CaseField keys it contains, even if for a given
6363
6425
  // CaseField key, the data object has a falsy value (hence the use of hasOwnProperty() for the check below)
6364
6426
  // See https://tools.hmcts.net/jira/browse/EUI-7377
@@ -6390,8 +6452,8 @@ class FormValueService {
6390
6452
  */
6391
6453
  populateLinkedCasesDetailsFromCaseFields(data, caseFields) {
6392
6454
  if (data && caseFields && caseFields.length > 0) {
6393
- caseFields.filter(caseField => !FieldsUtils.isCaseFieldOfType(caseField, ['ComponentLauncher']))
6394
- .forEach(caseField => {
6455
+ caseFields.filter((caseField) => !FieldsUtils.isCaseFieldOfType(caseField, ['ComponentLauncher']))
6456
+ .forEach((caseField) => {
6395
6457
  if (data.hasOwnProperty('caseLinks') && caseField.value) {
6396
6458
  data[caseField.id] = caseField.value;
6397
6459
  }
@@ -9458,7 +9520,7 @@ class CaseEditComponent {
9458
9520
  ngOnInit() {
9459
9521
  this.wizard = this.wizardFactory.create(this.eventTrigger);
9460
9522
  this.initialUrl = this.sessionStorageService.getItem('eventUrl');
9461
- this.isPageRefreshed = JSON.parse(this.sessionStorageService.getItem('isPageRefreshed'));
9523
+ this.isPageRefreshed = safeJsonParse(this.sessionStorageService.getItem('isPageRefreshed'), false);
9462
9524
  this.checkPageRefresh();
9463
9525
  this.form = this.fb.group({
9464
9526
  data: new FormGroup({}),
@@ -9582,15 +9644,11 @@ class CaseEditComponent {
9582
9644
  const taskEventCompletionStr = this.sessionStorageService.getItem(CaseEditComponent.TASK_EVENT_COMPLETION_INFO);
9583
9645
  const userInfoStr = this.sessionStorageService.getItem('userDetails');
9584
9646
  const assignNeeded = this.sessionStorageService.getItem('assignNeeded');
9585
- if (taskEventCompletionStr) {
9586
- taskEventCompletionInfo = JSON.parse(taskEventCompletionStr);
9587
- }
9588
- if (userInfoStr) {
9589
- userInfo = JSON.parse(userInfoStr);
9590
- }
9647
+ taskEventCompletionInfo = safeJsonParse(taskEventCompletionStr, null);
9648
+ userInfo = safeJsonParse(userInfoStr, null);
9591
9649
  const eventId = this.getEventId(form);
9592
9650
  const caseId = this.getCaseId(caseDetails);
9593
- const userId = userInfo.id ? userInfo.id : userInfo.uid;
9651
+ const userId = userInfo?.id ? userInfo.id : userInfo?.uid;
9594
9652
  const eventDetails = { eventId, caseId, userId, assignNeeded };
9595
9653
  if (this.taskExistsForThisEvent(taskInSessionStorage, taskEventCompletionInfo, eventDetails)) {
9596
9654
  this.abstractConfig.logMessage(`task ${taskInSessionStorage?.id} exist for this event for caseId and eventId as ${caseId} ${eventId}`);
@@ -9633,7 +9691,7 @@ class CaseEditComponent {
9633
9691
  }
9634
9692
  generateCaseEventData({ eventTrigger, form }) {
9635
9693
  const caseEventData = {
9636
- data: this.replaceEmptyComplexFieldValues(this.formValueService.sanitise(this.replaceHiddenFormValuesWithOriginalCaseData(form.get('data'), eventTrigger.case_fields), this.isCaseFlagSubmission)),
9694
+ data: this.replaceEmptyComplexFieldValues(this.formValueService.sanitise(this.replaceHiddenFormValuesWithOriginalCaseData(form.get('data'), eventTrigger.case_fields))),
9637
9695
  event: form.value.event
9638
9696
  };
9639
9697
  this.formValueService.clearNonCaseFields(caseEventData.data, eventTrigger.case_fields);
@@ -9952,7 +10010,7 @@ class CaseEditComponent {
9952
10010
  }], submitted: [{
9953
10011
  type: Output
9954
10012
  }] }); })();
9955
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 38 }); })();
10013
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 39 }); })();
9956
10014
 
9957
10015
  function convertNonASCIICharacter(character) {
9958
10016
  if (character === '£') {
@@ -12011,6 +12069,42 @@ class CallbackErrorsComponent {
12011
12069
  }] }); })();
12012
12070
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CallbackErrorsComponent, { className: "CallbackErrorsComponent", filePath: "lib/shared/components/error/callback-errors.component.ts", lineNumber: 11 }); })();
12013
12071
 
12072
+ class SessionErrorPageComponent {
12073
+ title = 'There is a problem with your session';
12074
+ primaryMessage = 'Go to landing page. Refreshing the page. If the problem persists, sign out and sign in again.';
12075
+ secondaryMessage = 'If you still cannot access the service, clear your browser data for this website.';
12076
+ static ɵfac = function SessionErrorPageComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionErrorPageComponent)(); };
12077
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SessionErrorPageComponent, selectors: [["ccd-session-error-page"]], inputs: { title: "title", primaryMessage: "primaryMessage", secondaryMessage: "secondaryMessage" }, decls: 10, vars: 3, consts: [[1, "govuk-width-container"], ["id", "content", "role", "main", 1, "govuk-main-wrapper", "govuk-main-wrapper--l"], [1, "govuk-grid-row"], [1, "govuk-grid-column-two-thirds"], [1, "govuk-heading-xl"], [1, "govuk-body"]], template: function SessionErrorPageComponent_Template(rf, ctx) { if (rf & 1) {
12078
+ i0.ɵɵdomElementStart(0, "div", 0)(1, "main", 1)(2, "div", 2)(3, "div", 3)(4, "h1", 4);
12079
+ i0.ɵɵtext(5);
12080
+ i0.ɵɵdomElementEnd();
12081
+ i0.ɵɵdomElementStart(6, "p", 5);
12082
+ i0.ɵɵtext(7);
12083
+ i0.ɵɵdomElementEnd();
12084
+ i0.ɵɵdomElementStart(8, "p", 5);
12085
+ i0.ɵɵtext(9);
12086
+ i0.ɵɵdomElementEnd()()()()();
12087
+ } if (rf & 2) {
12088
+ i0.ɵɵadvance(5);
12089
+ i0.ɵɵtextInterpolate(ctx.title);
12090
+ i0.ɵɵadvance(2);
12091
+ i0.ɵɵtextInterpolate(ctx.primaryMessage);
12092
+ i0.ɵɵadvance(2);
12093
+ i0.ɵɵtextInterpolate(ctx.secondaryMessage);
12094
+ } }, dependencies: [CommonModule], encapsulation: 2 });
12095
+ }
12096
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionErrorPageComponent, [{
12097
+ type: Component,
12098
+ args: [{ selector: 'ccd-session-error-page', standalone: true, imports: [CommonModule], template: "<div class=\"govuk-width-container\">\n <main class=\"govuk-main-wrapper govuk-main-wrapper--l\" id=\"content\" role=\"main\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">{{ title }}</h1>\n <p class=\"govuk-body\">{{ primaryMessage }}</p>\n <p class=\"govuk-body\">{{ secondaryMessage }}</p>\n </div>\n </div>\n </main>\n</div>\n" }]
12099
+ }], null, { title: [{
12100
+ type: Input
12101
+ }], primaryMessage: [{
12102
+ type: Input
12103
+ }], secondaryMessage: [{
12104
+ type: Input
12105
+ }] }); })();
12106
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SessionErrorPageComponent, { className: "SessionErrorPageComponent", filePath: "lib/shared/components/error/session-error-page.component.ts", lineNumber: 10 }); })();
12107
+
12014
12108
  function CaseEventCompletionComponent_app_case_event_completion_task_cancelled_0_Template(rf, ctx) { if (rf & 1) {
12015
12109
  const _r1 = i0.ɵɵgetCurrentView();
12016
12110
  i0.ɵɵelementStart(0, "app-case-event-completion-task-cancelled", 2);
@@ -13262,9 +13356,10 @@ class CaseFileViewFieldComponent {
13262
13356
  error: _ => this.getCategoriesAndDocumentsError = true
13263
13357
  });
13264
13358
  // EXUI-8000
13265
- const userInfo = JSON.parse(this.sessionStorageService.getItem('userDetails'));
13359
+ const userInfo = safeJsonParse(this.sessionStorageService.getItem('userDetails'), null);
13360
+ const userRoles = userInfo?.roles || [];
13266
13361
  // Get acls that intersects from acl roles and user roles
13267
- const acls = this.caseField.acls.filter(acl => userInfo.roles.includes(acl.role));
13362
+ const acls = this.caseField.acls.filter(acl => userRoles.includes(acl.role));
13268
13363
  // As there can be more than one intersecting role, if any acls are update: true
13269
13364
  this.allowMoving = acls.some(acl => acl.update);
13270
13365
  this.icp_jurisdictions = this.abstractConfig.getIcpJurisdictions();
@@ -13355,7 +13450,7 @@ class CaseFileViewFieldComponent {
13355
13450
  type: Component,
13356
13451
  args: [{ selector: 'ccd-case-file-view-field', standalone: false, template: "<ng-container *ngIf=\"errorMessages?.length\">\n <div\n id=\"case-file-view-field-errors\"\n class=\"govuk-error-summary govuk-!-margin-bottom-4\"\n data-module=\"govuk-error-summary\"\n >\n <div role=\"alert\">\n <h2 class=\"govuk-error-summary__title\">There is a problem</h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li *ngFor=\"let errorMessage of errorMessages\">\n <button type=\"button\" class=\"govuk-js-link\">{{ errorMessage }}</button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n</ng-container>\n\n<div\n *ngIf=\"getCategoriesAndDocumentsError\"\n class=\"govuk-grid-column-two-thirds\"\n>\n <h1 class=\"govuk-heading-xl\">Sorry, there is a problem with the service</h1>\n <p class=\"govuk-body\">Try again later.</p>\n</div>\n<div *ngIf=\"!getCategoriesAndDocumentsError\">\n <h2 class=\"govuk-heading-l\">Case file</h2>\n <div class=\"govuk-form-group\" id=\"case-file-view\">\n <!-- Document tree -->\n <div class=\"document-tree-container\">\n <ccd-case-file-view-folder \n class=\"document-tree-container__tree\"\n [categoriesAndDocuments]=\"categoriesAndDocuments$\"\n (clickedDocument)=\"setMediaViewerFile($event); resetErrorMessages()\" \n (moveDocument)=\"moveDocument($event)\"\n [allowMoving]=\"allowMoving\">\n </ccd-case-file-view-folder>\n </div>\n <!-- Slider -->\n <div class=\"slider\"></div>\n <!-- Media viewer -->\n <div class=\"media-viewer-container\">\n <ng-container *ngIf=\"currentDocument\">\n <mv-media-viewer\n [url]=\"currentDocument.document_binary_url\"\n [downloadFileName]=\"currentDocument.document_filename\"\n [showToolbar]=\"true\"\n [contentType]=\"currentDocument.content_type\"\n [enableAnnotations]=\"true\"\n [enableRedactions]=\"true\"\n [height]=\"'94.5vh'\"\n [caseId]=\"caseId\"\n [multimediaPlayerEnabled]=\"true\"\n [enableICP]=\"isIcpEnabled()\"\n >\n </mv-media-viewer>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: ["#case-file-view{display:flex;border:2px solid #C9C9C9;height:100vh;position:relative}#case-file-view .document-tree-container{background-color:#faf8f8;width:30%;min-height:400px;min-width:10%}#case-file-view .slider{width:.2%;background-color:#6b6b6b}#case-file-view .slider:hover,#case-file-view .slider:focus{cursor:col-resize}#case-file-view .media-viewer-container{background-color:#dee0e2;flex:1 1 0;overflow:hidden}\n"] }]
13357
13452
  }], () => [{ type: i0.ElementRef }, { type: i1$1.ActivatedRoute }, { type: CaseFileViewService }, { type: DocumentManagementService }, { type: LoadingService }, { type: SessionStorageService }, { type: WindowService }, { type: CaseNotifier }, { type: AbstractAppConfig }], null); })();
13358
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 18 }); })();
13453
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 19 }); })();
13359
13454
 
13360
13455
  function ReadCaseFlagFieldComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
13361
13456
  const _r1 = i0.ɵɵgetCurrentView();
@@ -20597,14 +20692,14 @@ class PaymentField extends AbstractFieldReadComponent {
20597
20692
  return this.appConfig.getNotificationUrl();
20598
20693
  }
20599
20694
  getUserRoles() {
20600
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20695
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20601
20696
  if (!userDetails || !userDetails.hasOwnProperty('roles')) {
20602
20697
  return [];
20603
20698
  }
20604
20699
  return userDetails.roles;
20605
20700
  }
20606
20701
  getUserEmail() {
20607
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20702
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20608
20703
  if (!userDetails || !userDetails.hasOwnProperty('sub')) {
20609
20704
  return '';
20610
20705
  }
@@ -21330,7 +21425,7 @@ class QueryManagementService {
21330
21425
  ) {
21331
21426
  let currentUserDetails;
21332
21427
  try {
21333
- currentUserDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
21428
+ currentUserDetails = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), {});
21334
21429
  }
21335
21430
  catch (e) {
21336
21431
  console.error('Could not parse USER_DETAILS from session storage:', e);
@@ -30245,7 +30340,9 @@ class EventLogTableComponent {
30245
30340
  }
30246
30341
  ngOnInit() {
30247
30342
  this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;
30248
- this.isUserExternal = JSON.parse(this.sessionStorage.getItem('userDetails')).roles.includes('pui-case-manager');
30343
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
30344
+ const roles = userDetails?.roles || [];
30345
+ this.isUserExternal = roles.includes('pui-case-manager');
30249
30346
  }
30250
30347
  select(event) {
30251
30348
  this.selected = event;
@@ -30334,7 +30431,7 @@ class EventLogTableComponent {
30334
30431
  }], onCaseHistory: [{
30335
30432
  type: Output
30336
30433
  }] }); })();
30337
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EventLogTableComponent, { className: "EventLogTableComponent", filePath: "lib/shared/components/palette/history/event-log/event-log-table.component.ts", lineNumber: 12 }); })();
30434
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EventLogTableComponent, { className: "EventLogTableComponent", filePath: "lib/shared/components/palette/history/event-log/event-log-table.component.ts", lineNumber: 13 }); })();
30338
30435
 
30339
30436
  function EventLogComponent_ccd_event_log_table_3_Template(rf, ctx) { if (rf & 1) {
30340
30437
  const _r1 = i0.ɵɵgetCurrentView();
@@ -35098,7 +35195,7 @@ class CaseResolver {
35098
35195
  // as discussed for EUI-5456, need functionality to go to default page
35099
35196
  goToDefaultPage() {
35100
35197
  console.info('Going to default page!');
35101
- const userDetails = JSON.parse(this.sessionStorage.getItem(USER_DETAILS));
35198
+ const userDetails = safeJsonParse(this.sessionStorage.getItem(USER_DETAILS));
35102
35199
  userDetails && userDetails.roles
35103
35200
  && !userDetails.roles.includes(PUI_CASE_MANAGER)
35104
35201
  &&
@@ -35151,7 +35248,7 @@ class EventTriggerResolver {
35151
35248
  const query = route.queryParams;
35152
35249
  // If jurisdiction or caseType are missing, redirect to correct URL
35153
35250
  if (!jurisdiction || !caseType) {
35154
- const caseInfo = JSON.parse(this.sessionStorageService.getItem('caseInfo') || '{}');
35251
+ const caseInfo = safeJsonParse(this.sessionStorageService.getItem('caseInfo'), {});
35155
35252
  const jurisdictionId = caseInfo?.jurisdiction;
35156
35253
  const caseTypeId = caseInfo?.caseType;
35157
35254
  const caseId = caseInfo?.caseId;
@@ -39419,7 +39516,7 @@ class CreateCaseFiltersComponent {
39419
39516
  return events.filter(event => event.pre_states.length === 0);
39420
39517
  }
39421
39518
  retainEventsWithCreateRights(events) {
39422
- const userProfile = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
39519
+ const userProfile = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), null);
39423
39520
  return events.filter(event => userProfile && userProfile.roles &&
39424
39521
  !!userProfile.roles.find(role => this.hasCreateAccess(event, role)));
39425
39522
  }
@@ -39557,7 +39654,7 @@ class CreateCaseFiltersComponent {
39557
39654
  }], selectionChanged: [{
39558
39655
  type: Output
39559
39656
  }] }); })();
39560
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CreateCaseFiltersComponent, { className: "CreateCaseFiltersComponent", filePath: "lib/shared/components/create-case-filters/create-case-filters.component.ts", lineNumber: 19 }); })();
39657
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CreateCaseFiltersComponent, { className: "CreateCaseFiltersComponent", filePath: "lib/shared/components/create-case-filters/create-case-filters.component.ts", lineNumber: 20 }); })();
39561
39658
 
39562
39659
  class CreateCaseFiltersModule {
39563
39660
  static ɵfac = function CreateCaseFiltersModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CreateCaseFiltersModule)(); };
@@ -41178,5 +41275,5 @@ class TestRouteSnapshotBuilder {
41178
41275
  * Generated bundle index. Do not edit.
41179
41276
  */
41180
41277
 
41181
- export { AbstractAppConfig, AbstractFieldReadComponent, AbstractFieldWriteComponent, AbstractFieldWriteJourneyComponent, AbstractJourneyComponent, Activity, ActivityBannerComponent, ActivityComponent, ActivityIconComponent, ActivityInfo, ActivityModule, ActivityPollingService, ActivityService, AddCommentsComponent, AddCommentsErrorMessage, AddCommentsStep, AddressModel, AddressOption, AddressesService, Alert, AlertComponent, AlertIconClassPipe, AlertMessageType, AlertModule, AlertService, AuthService, Banner, BannersService, BeforeYouStartComponent, BodyComponent, BrowserService, CCDCaseLinkType, COMPONENT_PORTAL_INJECTION_TOKEN, CallbackErrorsComponent, CallbackErrorsContext, CaseAccessUtils, CaseBasicAccessViewComponent, CaseChallengedAccessRequestComponent, CaseChallengedAccessSuccessComponent, CaseCreateComponent, CaseDetails, CaseEditComponent, CaseEditConfirmComponent, CaseEditDataModule, CaseEditDataService, CaseEditFormComponent, CaseEditPageComponent, CaseEditSubmitComponent, CaseEditWizardGuard, CaseEditorConfig, CaseEditorModule, CaseEvent, CaseEventCompletionComponent, CaseEventCompletionTaskCancelledComponent, CaseEventCompletionTaskReassignedComponent, CaseEventData, CaseEventTrigger, CaseEventTriggerComponent, CaseField, CaseFieldService, CaseFileViewFieldComponent, CaseFileViewFolderComponent, CaseFileViewFolderDocumentActionsComponent, CaseFileViewFolderSelectorComponent, CaseFileViewFolderSortComponent, CaseFileViewFolderToggleComponent, CaseFileViewOverlayMenuComponent, CaseFileViewService, CaseFlagCheckYourAnswersPageStep, CaseFlagDisplayContextParameter, CaseFlagErrorMessage, CaseFlagFieldState, CaseFlagFormFields, CaseFlagRefdataService, CaseFlagStatus, CaseFlagSummaryListComponent, CaseFlagSummaryListDisplayMode, CaseFlagTableComponent, CaseFlagWizardStepTitle, CaseFullAccessViewComponent, CaseHeaderComponent, CaseHeaderModule, CaseHistoryViewerFieldComponent, CaseLink, CaseLinkResponse, CaseListComponent, CaseListFiltersComponent, CaseListFiltersModule, CaseListModule, CaseNotifier, CasePaymentHistoryViewerFieldComponent, CasePrintDocument, CasePrinterComponent, CaseProgressComponent, CaseReferencePipe, CaseResolver, CaseSpecificAccessRequestComponent, CaseSpecificAccessSuccessComponent, CaseState, CaseTab, CaseTimelineComponent, CaseTimelineDisplayMode, CaseTimelineModule, CaseType, CaseTypeLite, CaseView, CaseViewComponent, CaseViewEvent, CaseViewTrigger, CaseViewerComponent, CaseViewerModule, CasesService, CaseworkerService, CcdCYAPageLabelFilterPipe, CcdCaseTitlePipe, CcdCollectionTableCaseFieldsFilterPipe, CcdPageFieldsPipe, CcdTabFieldsPipe, CheckYourAnswersComponent, CloseQueryComponent, ConditionalShowFormDirective, ConditionalShowModule, ConditionalShowRegistrarService, ConfirmFlagStatusComponent, ConfirmStatusErrorMessage, ConfirmStatusStep, Confirmation, ConvertHrefToRouterService, CreateCaseFiltersComponent, CreateCaseFiltersModule, CreateCaseFiltersSelection, DRAFT_PREFIX, DRAFT_QUERY_PARAM, DashPipe, DateInputComponent, DatePipe, DateTimeFormatUtils, DatetimePickerComponent, DefinitionsModule, DefinitionsService, DeleteOrCancelDialogComponent, DialogsModule, DisplayMode, Document, DocumentData, DocumentDialogComponent, DocumentLinks, DocumentManagementService, DocumentUrlPipe, Draft, DraftService, DynamicListPipe, DynamicRadioListPipe, ESQueryType, Embedded, EnumDisplayDescriptionPipe, ErrorMessageComponent, ErrorNotifierService, EventCaseField, EventCompletionReturnStates, EventCompletionStateMachineService, EventCompletionStates, EventLogComponent, EventLogDetailsComponent, EventLogTableComponent, EventMessageModule, EventStartComponent, EventStartModule, EventStartStateMachineService, EventStatusService, EventTriggerResolver, EventTriggerService, Fee, FeeValue, Field, FieldLabelPipe, FieldReadComponent, FieldReadLabelComponent, FieldType, FieldTypeSanitiser, FieldWriteComponent, FieldsFilterPipe, FieldsPurger, FieldsUtils, FirstErrorPipe, FixedListItem, FixedListPipe, FixedRadioListPipe, FlagFieldDisplayPipe, FocusElementDirective, FocusElementModule, FooterComponent, FormDocument, FormErrorService, FormValidatorsService, FormValueService, FormatTranslatorService, GreyBarService, HRef, HeaderBarComponent, HeadersModule, HttpError, HttpErrorService, HttpService, IsCompoundPipe, IsMandatoryPipe, IsReadOnlyAndNotCollectionPipe, IsReadOnlyPipe, JudicialworkerService, Jurisdiction, JurisdictionService, LabelFieldComponent, LabelSubstitutorDirective, LabelSubstitutorModule, LanguageInterpreterDisplayPipe, LinkCaseReason, LinkCasesComponent, LinkCasesFromReasonValuePipe, LinkCasesReasonValuePipe, LinkDetails, LinkFromReason, LinkReason, LinkedCasesErrorMessages, LinkedCasesEventTriggers, LinkedCasesFromTableComponent, LinkedCasesPages, LinkedCasesResponse, LinkedCasesToTableComponent, LoadingModule, LoadingService, LoadingSpinnerComponent, LoadingSpinnerModule, MEDIA_VIEWER_LOCALSTORAGE_KEY, MULTIPLE_TASKS_FOUND, ManageCaseFlagsComponent, ManageCaseFlagsLabelDisplayPipe, MarkdownComponent, MarkdownComponentModule, MoneyGbpInputComponent, MultipageComponentStateService, MultipleTasksExistComponent, NavigationComponent, NavigationItemComponent, NavigationNotifierService, NavigationOrigin, NoLinkedCasesComponent, NoTasksAvailableComponent, NotificationBannerComponent, NotificationBannerHeaderClass, NotificationBannerType, OrderService, OrderSummary, OrganisationConverter, OrganisationService, PageValidationService, PaginationComponent, PaginationMetadata, PaginationModule, PaletteContext, PaletteModule, PaletteService, PaletteUtilsModule, Patterns, PaymentField, PhaseComponent, PipesModule, PlaceholderService, PrintUrlPipe, Profile, ProfileNotifier, ProfileService, QualifyingQuestionDetailComponent, QualifyingQuestionOptionsComponent, QualifyingQuestionService, QualifyingQuestionsErrorMessage, QueryAttachmentsReadComponent, QueryCaseDetailsHeaderComponent, QueryCheckYourAnswersComponent, QueryConfirmationComponent, QueryCreateContext, QueryDetailsComponent, QueryEventCompletionComponent, QueryItemResponseStatus, QueryListComponent, QueryListData, QueryListItem, QueryManagementService, QueryWriteAddDocumentsComponent, QueryWriteDateInputComponent, QueryWriteRaiseQueryComponent, QueryWriteRespondToQueryComponent, RaiseQueryErrorMessage, ReadCaseFlagFieldComponent, ReadCaseLinkFieldComponent, ReadCollectionFieldComponent, ReadComplexFieldCollectionTableComponent, ReadComplexFieldComponent, ReadComplexFieldRawComponent, ReadComplexFieldTableComponent, ReadCookieService, ReadDateFieldComponent, ReadDocumentFieldComponent, ReadDynamicListFieldComponent, ReadDynamicMultiSelectListFieldComponent, ReadDynamicRadioListFieldComponent, ReadEmailFieldComponent, ReadFieldsFilterPipe, ReadFixedListFieldComponent, ReadFixedRadioListFieldComponent, ReadJudicialUserFieldComponent, ReadLinkedCasesFieldComponent, ReadMoneyGbpFieldComponent, ReadMultiSelectListFieldComponent, ReadNumberFieldComponent, ReadOrderSummaryFieldComponent, ReadOrderSummaryRowComponent, ReadOrganisationFieldComponent, ReadOrganisationFieldRawComponent, ReadOrganisationFieldTableComponent, ReadPhoneUKFieldComponent, ReadQueryManagementFieldComponent, ReadTextAreaFieldComponent, ReadTextFieldComponent, ReadYesNoFieldComponent, RefdataCaseFlagType, RemoveDialogComponent, RequestOptionsBuilder, RespondToQueryErrorMessages, RetryUtil, RouterHelperService, RouterLinkComponent, SaveOrDiscardDialogComponent, SearchFiltersComponent, SearchFiltersModule, SearchFiltersWrapperComponent, SearchInput, SearchLanguageInterpreterComponent, SearchLanguageInterpreterErrorMessage, SearchLanguageInterpreterStep, SearchResultComponent, SearchResultModule, SearchResultView, SearchResultViewColumn, SearchResultViewItem, SearchResultViewItemComparatorFactory, SearchService, SelectFlagErrorMessage, SelectFlagLocationComponent, SelectFlagLocationErrorMessage, SelectFlagTypeComponent, SelectFlagTypeErrorMessage, SessionStorageService, ShowCondition, SortOrder$1 as SortOrder, SortParameters, SortSearchResultPipe, TabComponent, TableColumnConfig, TableConfig, TabsComponent, TabsModule, TaskAssignedComponent, TaskCancelledComponent, TaskConflictComponent, TaskUnassignedComponent, Terms, TestRouteSnapshotBuilder, TranslatedMarkdownDirective, TranslatedMarkdownModule, UnLinkCasesComponent, UnsupportedFieldComponent, UpdateFlagAddTranslationErrorMessage, UpdateFlagAddTranslationFormComponent, UpdateFlagAddTranslationStep, UpdateFlagComponent, UpdateFlagErrorMessage, UpdateFlagStep, UpdateFlagTitleDisplayPipe, WaysToPayFieldComponent, WindowService, Wizard, WizardFactoryService, WizardPage, WizardPageField, WorkAllocationService, WorkbasketFiltersComponent, WorkbasketFiltersModule, WorkbasketInput, WorkbasketInputFilterService, WorkbasketInputModel, WriteAddressFieldComponent, WriteCaseFlagFieldComponent, WriteCaseLinkFieldComponent, WriteCollectionFieldComponent, WriteComplexFieldComponent, WriteDateContainerFieldComponent, WriteDateFieldComponent, WriteDocumentFieldComponent, WriteDynamicListFieldComponent, WriteDynamicMultiSelectListFieldComponent, WriteDynamicRadioListFieldComponent, WriteEmailFieldComponent, WriteFixedListFieldComponent, WriteFixedRadioListFieldComponent, WriteJudicialUserFieldComponent, WriteLinkedCasesFieldComponent, WriteMoneyGbpFieldComponent, WriteMultiSelectListFieldComponent, WriteNumberFieldComponent, WriteOrderSummaryFieldComponent, WriteOrganisationComplexFieldComponent, WriteOrganisationFieldComponent, WritePhoneUKFieldComponent, WriteTextAreaFieldComponent, WriteTextFieldComponent, WriteYesNoFieldComponent, YesNoService, aCaseField, caseMessagesMockData, createACL, createCaseEventTrigger, createCaseField, createComplexFieldOverride, createFieldType, createFixedListFieldType, createHiddenComplexFieldOverride, createMultiSelectListFieldType, createWizardPage, createWizardPageField, editorRouting, initDialog, newCaseField, textFieldType, viewerRouting };
41278
+ export { AbstractAppConfig, AbstractFieldReadComponent, AbstractFieldWriteComponent, AbstractFieldWriteJourneyComponent, AbstractJourneyComponent, Activity, ActivityBannerComponent, ActivityComponent, ActivityIconComponent, ActivityInfo, ActivityModule, ActivityPollingService, ActivityService, AddCommentsComponent, AddCommentsErrorMessage, AddCommentsStep, AddressModel, AddressOption, AddressesService, Alert, AlertComponent, AlertIconClassPipe, AlertMessageType, AlertModule, AlertService, AuthService, Banner, BannersService, BeforeYouStartComponent, BodyComponent, BrowserService, CCDCaseLinkType, COMPONENT_PORTAL_INJECTION_TOKEN, CallbackErrorsComponent, CallbackErrorsContext, CaseAccessUtils, CaseBasicAccessViewComponent, CaseChallengedAccessRequestComponent, CaseChallengedAccessSuccessComponent, CaseCreateComponent, CaseDetails, CaseEditComponent, CaseEditConfirmComponent, CaseEditDataModule, CaseEditDataService, CaseEditFormComponent, CaseEditPageComponent, CaseEditSubmitComponent, CaseEditWizardGuard, CaseEditorConfig, CaseEditorModule, CaseEvent, CaseEventCompletionComponent, CaseEventCompletionTaskCancelledComponent, CaseEventCompletionTaskReassignedComponent, CaseEventData, CaseEventTrigger, CaseEventTriggerComponent, CaseField, CaseFieldService, CaseFileViewFieldComponent, CaseFileViewFolderComponent, CaseFileViewFolderDocumentActionsComponent, CaseFileViewFolderSelectorComponent, CaseFileViewFolderSortComponent, CaseFileViewFolderToggleComponent, CaseFileViewOverlayMenuComponent, CaseFileViewService, CaseFlagCheckYourAnswersPageStep, CaseFlagDisplayContextParameter, CaseFlagErrorMessage, CaseFlagFieldState, CaseFlagFormFields, CaseFlagRefdataService, CaseFlagStatus, CaseFlagSummaryListComponent, CaseFlagSummaryListDisplayMode, CaseFlagTableComponent, CaseFlagWizardStepTitle, CaseFullAccessViewComponent, CaseHeaderComponent, CaseHeaderModule, CaseHistoryViewerFieldComponent, CaseLink, CaseLinkResponse, CaseListComponent, CaseListFiltersComponent, CaseListFiltersModule, CaseListModule, CaseNotifier, CasePaymentHistoryViewerFieldComponent, CasePrintDocument, CasePrinterComponent, CaseProgressComponent, CaseReferencePipe, CaseResolver, CaseSpecificAccessRequestComponent, CaseSpecificAccessSuccessComponent, CaseState, CaseTab, CaseTimelineComponent, CaseTimelineDisplayMode, CaseTimelineModule, CaseType, CaseTypeLite, CaseView, CaseViewComponent, CaseViewEvent, CaseViewTrigger, CaseViewerComponent, CaseViewerModule, CasesService, CaseworkerService, CcdCYAPageLabelFilterPipe, CcdCaseTitlePipe, CcdCollectionTableCaseFieldsFilterPipe, CcdPageFieldsPipe, CcdTabFieldsPipe, CheckYourAnswersComponent, CloseQueryComponent, ConditionalShowFormDirective, ConditionalShowModule, ConditionalShowRegistrarService, ConfirmFlagStatusComponent, ConfirmStatusErrorMessage, ConfirmStatusStep, Confirmation, ConvertHrefToRouterService, CreateCaseFiltersComponent, CreateCaseFiltersModule, CreateCaseFiltersSelection, DRAFT_PREFIX, DRAFT_QUERY_PARAM, DashPipe, DateInputComponent, DatePipe, DateTimeFormatUtils, DatetimePickerComponent, DefinitionsModule, DefinitionsService, DeleteOrCancelDialogComponent, DialogsModule, DisplayMode, Document, DocumentData, DocumentDialogComponent, DocumentLinks, DocumentManagementService, DocumentUrlPipe, Draft, DraftService, DynamicListPipe, DynamicRadioListPipe, ESQueryType, Embedded, EnumDisplayDescriptionPipe, ErrorMessageComponent, ErrorNotifierService, EventCaseField, EventCompletionReturnStates, EventCompletionStateMachineService, EventCompletionStates, EventLogComponent, EventLogDetailsComponent, EventLogTableComponent, EventMessageModule, EventStartComponent, EventStartModule, EventStartStateMachineService, EventStatusService, EventTriggerResolver, EventTriggerService, Fee, FeeValue, Field, FieldLabelPipe, FieldReadComponent, FieldReadLabelComponent, FieldType, FieldTypeSanitiser, FieldWriteComponent, FieldsFilterPipe, FieldsPurger, FieldsUtils, FirstErrorPipe, FixedListItem, FixedListPipe, FixedRadioListPipe, FlagFieldDisplayPipe, FocusElementDirective, FocusElementModule, FooterComponent, FormDocument, FormErrorService, FormValidatorsService, FormValueService, FormatTranslatorService, GreyBarService, HRef, HeaderBarComponent, HeadersModule, HttpError, HttpErrorService, HttpService, IsCompoundPipe, IsMandatoryPipe, IsReadOnlyAndNotCollectionPipe, IsReadOnlyPipe, JudicialworkerService, Jurisdiction, JurisdictionService, LabelFieldComponent, LabelSubstitutorDirective, LabelSubstitutorModule, LanguageInterpreterDisplayPipe, LinkCaseReason, LinkCasesComponent, LinkCasesFromReasonValuePipe, LinkCasesReasonValuePipe, LinkDetails, LinkFromReason, LinkReason, LinkedCasesErrorMessages, LinkedCasesEventTriggers, LinkedCasesFromTableComponent, LinkedCasesPages, LinkedCasesResponse, LinkedCasesToTableComponent, LoadingModule, LoadingService, LoadingSpinnerComponent, LoadingSpinnerModule, MEDIA_VIEWER_LOCALSTORAGE_KEY, MULTIPLE_TASKS_FOUND, ManageCaseFlagsComponent, ManageCaseFlagsLabelDisplayPipe, MarkdownComponent, MarkdownComponentModule, MoneyGbpInputComponent, MultipageComponentStateService, MultipleTasksExistComponent, NavigationComponent, NavigationItemComponent, NavigationNotifierService, NavigationOrigin, NoLinkedCasesComponent, NoTasksAvailableComponent, NotificationBannerComponent, NotificationBannerHeaderClass, NotificationBannerType, OrderService, OrderSummary, OrganisationConverter, OrganisationService, PageValidationService, PaginationComponent, PaginationMetadata, PaginationModule, PaletteContext, PaletteModule, PaletteService, PaletteUtilsModule, Patterns, PaymentField, PhaseComponent, PipesModule, PlaceholderService, PrintUrlPipe, Profile, ProfileNotifier, ProfileService, QualifyingQuestionDetailComponent, QualifyingQuestionOptionsComponent, QualifyingQuestionService, QualifyingQuestionsErrorMessage, QueryAttachmentsReadComponent, QueryCaseDetailsHeaderComponent, QueryCheckYourAnswersComponent, QueryConfirmationComponent, QueryCreateContext, QueryDetailsComponent, QueryEventCompletionComponent, QueryItemResponseStatus, QueryListComponent, QueryListData, QueryListItem, QueryManagementService, QueryWriteAddDocumentsComponent, QueryWriteDateInputComponent, QueryWriteRaiseQueryComponent, QueryWriteRespondToQueryComponent, RaiseQueryErrorMessage, ReadCaseFlagFieldComponent, ReadCaseLinkFieldComponent, ReadCollectionFieldComponent, ReadComplexFieldCollectionTableComponent, ReadComplexFieldComponent, ReadComplexFieldRawComponent, ReadComplexFieldTableComponent, ReadCookieService, ReadDateFieldComponent, ReadDocumentFieldComponent, ReadDynamicListFieldComponent, ReadDynamicMultiSelectListFieldComponent, ReadDynamicRadioListFieldComponent, ReadEmailFieldComponent, ReadFieldsFilterPipe, ReadFixedListFieldComponent, ReadFixedRadioListFieldComponent, ReadJudicialUserFieldComponent, ReadLinkedCasesFieldComponent, ReadMoneyGbpFieldComponent, ReadMultiSelectListFieldComponent, ReadNumberFieldComponent, ReadOrderSummaryFieldComponent, ReadOrderSummaryRowComponent, ReadOrganisationFieldComponent, ReadOrganisationFieldRawComponent, ReadOrganisationFieldTableComponent, ReadPhoneUKFieldComponent, ReadQueryManagementFieldComponent, ReadTextAreaFieldComponent, ReadTextFieldComponent, ReadYesNoFieldComponent, RefdataCaseFlagType, RemoveDialogComponent, RequestOptionsBuilder, RespondToQueryErrorMessages, RetryUtil, RouterHelperService, RouterLinkComponent, SaveOrDiscardDialogComponent, SearchFiltersComponent, SearchFiltersModule, SearchFiltersWrapperComponent, SearchInput, SearchLanguageInterpreterComponent, SearchLanguageInterpreterErrorMessage, SearchLanguageInterpreterStep, SearchResultComponent, SearchResultModule, SearchResultView, SearchResultViewColumn, SearchResultViewItem, SearchResultViewItemComparatorFactory, SearchService, SelectFlagErrorMessage, SelectFlagLocationComponent, SelectFlagLocationErrorMessage, SelectFlagTypeComponent, SelectFlagTypeErrorMessage, SessionErrorPageComponent, SessionErrorRoute, SessionJsonErrorLogger, SessionStorageGuard, SessionStorageService, ShowCondition, SortOrder$1 as SortOrder, SortParameters, SortSearchResultPipe, TabComponent, TableColumnConfig, TableConfig, TabsComponent, TabsModule, TaskAssignedComponent, TaskCancelledComponent, TaskConflictComponent, TaskUnassignedComponent, Terms, TestRouteSnapshotBuilder, TranslatedMarkdownDirective, TranslatedMarkdownModule, UnLinkCasesComponent, UnsupportedFieldComponent, UpdateFlagAddTranslationErrorMessage, UpdateFlagAddTranslationFormComponent, UpdateFlagAddTranslationStep, UpdateFlagComponent, UpdateFlagErrorMessage, UpdateFlagStep, UpdateFlagTitleDisplayPipe, WaysToPayFieldComponent, WindowService, Wizard, WizardFactoryService, WizardPage, WizardPageField, WorkAllocationService, WorkbasketFiltersComponent, WorkbasketFiltersModule, WorkbasketInput, WorkbasketInputFilterService, WorkbasketInputModel, WriteAddressFieldComponent, WriteCaseFlagFieldComponent, WriteCaseLinkFieldComponent, WriteCollectionFieldComponent, WriteComplexFieldComponent, WriteDateContainerFieldComponent, WriteDateFieldComponent, WriteDocumentFieldComponent, WriteDynamicListFieldComponent, WriteDynamicMultiSelectListFieldComponent, WriteDynamicRadioListFieldComponent, WriteEmailFieldComponent, WriteFixedListFieldComponent, WriteFixedRadioListFieldComponent, WriteJudicialUserFieldComponent, WriteLinkedCasesFieldComponent, WriteMoneyGbpFieldComponent, WriteMultiSelectListFieldComponent, WriteNumberFieldComponent, WriteOrderSummaryFieldComponent, WriteOrganisationComplexFieldComponent, WriteOrganisationFieldComponent, WritePhoneUKFieldComponent, WriteTextAreaFieldComponent, WriteTextFieldComponent, WriteYesNoFieldComponent, YesNoService, aCaseField, caseMessagesMockData, createACL, createCaseEventTrigger, createCaseField, createComplexFieldOverride, createFieldType, createFixedListFieldType, createHiddenComplexFieldOverride, createMultiSelectListFieldType, createWizardPage, createWizardPageField, editorRouting, initDialog, newCaseField, safeJsonParse, textFieldType, viewerRouting };
41182
41279
  //# sourceMappingURL=hmcts-ccd-case-ui-toolkit.mjs.map