@hmcts/ccd-case-ui-toolkit 7.3.33 → 7.3.34-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) {
@@ -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;
@@ -6106,7 +6171,7 @@ class FormValueService {
6106
6171
  if (!rawArray) {
6107
6172
  return rawArray;
6108
6173
  }
6109
- rawArray.forEach(item => {
6174
+ rawArray.forEach((item) => {
6110
6175
  if (item && item.hasOwnProperty('value')) {
6111
6176
  item.value = this.sanitiseValue(item.value);
6112
6177
  }
@@ -6115,8 +6180,8 @@ class FormValueService {
6115
6180
  // association of a value. In addition, if the array contains items with a "value" object property, return only
6116
6181
  // those whose value object contains non-empty values, including for any descendant objects
6117
6182
  return rawArray
6118
- .filter(item => !!item)
6119
- .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);
6120
6185
  }
6121
6186
  sanitiseValue(rawValue) {
6122
6187
  if (Array.isArray(rawValue)) {
@@ -6135,7 +6200,7 @@ class FormValueService {
6135
6200
  }
6136
6201
  clearNonCaseFields(data, caseFields) {
6137
6202
  for (const dataKey in data) {
6138
- if (!caseFields.find(cf => cf.id === dataKey)) {
6203
+ if (!caseFields.find((cf) => cf.id === dataKey)) {
6139
6204
  delete data[dataKey];
6140
6205
  }
6141
6206
  }
@@ -6333,7 +6398,7 @@ class FormValueService {
6333
6398
  */
6334
6399
  removeCaseFieldsOfType(data, caseFields, types) {
6335
6400
  if (data && caseFields && caseFields.length > 0 && types.length > 0) {
6336
- const caseFieldsToRemove = caseFields.filter(caseField => FieldsUtils.isCaseFieldOfType(caseField, types));
6401
+ const caseFieldsToRemove = caseFields.filter((caseField) => FieldsUtils.isCaseFieldOfType(caseField, types));
6337
6402
  for (const caseField of caseFieldsToRemove) {
6338
6403
  delete data[caseField.id];
6339
6404
  }
@@ -6352,10 +6417,10 @@ class FormValueService {
6352
6417
  */
6353
6418
  repopulateFormDataFromCaseFieldValues(data, caseFields) {
6354
6419
  if (data && caseFields && caseFields.length > 0 &&
6355
- caseFields.findIndex(caseField => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher'])) > -1) {
6420
+ caseFields.findIndex((caseField) => FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher'])) > -1) {
6356
6421
  // Ignore the FlagLauncher CaseField because it does not hold any values
6357
- caseFields.filter(caseField => !FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))
6358
- .forEach(caseField => {
6422
+ caseFields.filter((caseField) => !FieldsUtils.isCaseFieldOfType(caseField, ['FlagLauncher']))
6423
+ .forEach((caseField) => {
6359
6424
  // Ensure that the data object is populated for all CaseField keys it contains, even if for a given
6360
6425
  // CaseField key, the data object has a falsy value (hence the use of hasOwnProperty() for the check below)
6361
6426
  // See https://tools.hmcts.net/jira/browse/EUI-7377
@@ -6387,8 +6452,8 @@ class FormValueService {
6387
6452
  */
6388
6453
  populateLinkedCasesDetailsFromCaseFields(data, caseFields) {
6389
6454
  if (data && caseFields && caseFields.length > 0) {
6390
- caseFields.filter(caseField => !FieldsUtils.isCaseFieldOfType(caseField, ['ComponentLauncher']))
6391
- .forEach(caseField => {
6455
+ caseFields.filter((caseField) => !FieldsUtils.isCaseFieldOfType(caseField, ['ComponentLauncher']))
6456
+ .forEach((caseField) => {
6392
6457
  if (data.hasOwnProperty('caseLinks') && caseField.value) {
6393
6458
  data[caseField.id] = caseField.value;
6394
6459
  }
@@ -9415,7 +9480,7 @@ class CaseEditComponent {
9415
9480
  ngOnInit() {
9416
9481
  this.wizard = this.wizardFactory.create(this.eventTrigger);
9417
9482
  this.initialUrl = this.sessionStorageService.getItem('eventUrl');
9418
- this.isPageRefreshed = JSON.parse(this.sessionStorageService.getItem('isPageRefreshed'));
9483
+ this.isPageRefreshed = safeJsonParse(this.sessionStorageService.getItem('isPageRefreshed'), false);
9419
9484
  this.checkPageRefresh();
9420
9485
  this.form = this.fb.group({
9421
9486
  data: new FormGroup({}),
@@ -9539,15 +9604,11 @@ class CaseEditComponent {
9539
9604
  const taskEventCompletionStr = this.sessionStorageService.getItem(CaseEditComponent.TASK_EVENT_COMPLETION_INFO);
9540
9605
  const userInfoStr = this.sessionStorageService.getItem('userDetails');
9541
9606
  const assignNeeded = this.sessionStorageService.getItem('assignNeeded');
9542
- if (taskEventCompletionStr) {
9543
- taskEventCompletionInfo = JSON.parse(taskEventCompletionStr);
9544
- }
9545
- if (userInfoStr) {
9546
- userInfo = JSON.parse(userInfoStr);
9547
- }
9607
+ taskEventCompletionInfo = safeJsonParse(taskEventCompletionStr, null);
9608
+ userInfo = safeJsonParse(userInfoStr, null);
9548
9609
  const eventId = this.getEventId(form);
9549
9610
  const caseId = this.getCaseId(caseDetails);
9550
- const userId = userInfo.id ? userInfo.id : userInfo.uid;
9611
+ const userId = userInfo?.id ? userInfo.id : userInfo?.uid;
9551
9612
  const eventDetails = { eventId, caseId, userId, assignNeeded };
9552
9613
  if (this.taskExistsForThisEvent(taskInSessionStorage, taskEventCompletionInfo, eventDetails)) {
9553
9614
  this.abstractConfig.logMessage(`task ${taskInSessionStorage?.id} exist for this event for caseId and eventId as ${caseId} ${eventId}`);
@@ -9909,7 +9970,7 @@ class CaseEditComponent {
9909
9970
  }], submitted: [{
9910
9971
  type: Output
9911
9972
  }] }); })();
9912
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 38 }); })();
9973
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 39 }); })();
9913
9974
 
9914
9975
  function convertNonASCIICharacter(character) {
9915
9976
  if (character === '£') {
@@ -11968,6 +12029,42 @@ class CallbackErrorsComponent {
11968
12029
  }] }); })();
11969
12030
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CallbackErrorsComponent, { className: "CallbackErrorsComponent", filePath: "lib/shared/components/error/callback-errors.component.ts", lineNumber: 11 }); })();
11970
12031
 
12032
+ class SessionErrorPageComponent {
12033
+ title = 'There is a problem with your session';
12034
+ primaryMessage = 'Go to landing page. Refreshing the page. If the problem persists, sign out and sign in again.';
12035
+ secondaryMessage = 'If you still cannot access the service, clear your browser data for this website.';
12036
+ static ɵfac = function SessionErrorPageComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SessionErrorPageComponent)(); };
12037
+ 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) {
12038
+ i0.ɵɵdomElementStart(0, "div", 0)(1, "main", 1)(2, "div", 2)(3, "div", 3)(4, "h1", 4);
12039
+ i0.ɵɵtext(5);
12040
+ i0.ɵɵdomElementEnd();
12041
+ i0.ɵɵdomElementStart(6, "p", 5);
12042
+ i0.ɵɵtext(7);
12043
+ i0.ɵɵdomElementEnd();
12044
+ i0.ɵɵdomElementStart(8, "p", 5);
12045
+ i0.ɵɵtext(9);
12046
+ i0.ɵɵdomElementEnd()()()()();
12047
+ } if (rf & 2) {
12048
+ i0.ɵɵadvance(5);
12049
+ i0.ɵɵtextInterpolate(ctx.title);
12050
+ i0.ɵɵadvance(2);
12051
+ i0.ɵɵtextInterpolate(ctx.primaryMessage);
12052
+ i0.ɵɵadvance(2);
12053
+ i0.ɵɵtextInterpolate(ctx.secondaryMessage);
12054
+ } }, dependencies: [CommonModule], encapsulation: 2 });
12055
+ }
12056
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SessionErrorPageComponent, [{
12057
+ type: Component,
12058
+ 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" }]
12059
+ }], null, { title: [{
12060
+ type: Input
12061
+ }], primaryMessage: [{
12062
+ type: Input
12063
+ }], secondaryMessage: [{
12064
+ type: Input
12065
+ }] }); })();
12066
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SessionErrorPageComponent, { className: "SessionErrorPageComponent", filePath: "lib/shared/components/error/session-error-page.component.ts", lineNumber: 10 }); })();
12067
+
11971
12068
  function CaseEventCompletionComponent_app_case_event_completion_task_cancelled_0_Template(rf, ctx) { if (rf & 1) {
11972
12069
  const _r1 = i0.ɵɵgetCurrentView();
11973
12070
  i0.ɵɵelementStart(0, "app-case-event-completion-task-cancelled", 2);
@@ -13217,9 +13314,10 @@ class CaseFileViewFieldComponent {
13217
13314
  error: _ => this.getCategoriesAndDocumentsError = true
13218
13315
  });
13219
13316
  // EXUI-8000
13220
- const userInfo = JSON.parse(this.sessionStorageService.getItem('userDetails'));
13317
+ const userInfo = safeJsonParse(this.sessionStorageService.getItem('userDetails'), null);
13318
+ const userRoles = userInfo?.roles || [];
13221
13319
  // Get acls that intersects from acl roles and user roles
13222
- const acls = this.caseField.acls.filter(acl => userInfo.roles.includes(acl.role));
13320
+ const acls = this.caseField.acls.filter(acl => userRoles.includes(acl.role));
13223
13321
  // As there can be more than one intersecting role, if any acls are update: true
13224
13322
  this.allowMoving = acls.some(acl => acl.update);
13225
13323
  this.icp_jurisdictions = this.abstractConfig.getIcpJurisdictions();
@@ -13300,7 +13398,7 @@ class CaseFileViewFieldComponent {
13300
13398
  type: Component,
13301
13399
  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"] }]
13302
13400
  }], () => [{ type: i0.ElementRef }, { type: i1$1.ActivatedRoute }, { type: CaseFileViewService }, { type: DocumentManagementService }, { type: LoadingService }, { type: SessionStorageService }, { type: CaseNotifier }, { type: AbstractAppConfig }], null); })();
13303
- (() => { (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 }); })();
13401
+ (() => { (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 }); })();
13304
13402
 
13305
13403
  function ReadCaseFlagFieldComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
13306
13404
  const _r1 = i0.ɵɵgetCurrentView();
@@ -20535,14 +20633,14 @@ class PaymentField extends AbstractFieldReadComponent {
20535
20633
  return this.appConfig.getNotificationUrl();
20536
20634
  }
20537
20635
  getUserRoles() {
20538
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20636
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20539
20637
  if (!userDetails || !userDetails.hasOwnProperty('roles')) {
20540
20638
  return [];
20541
20639
  }
20542
20640
  return userDetails.roles;
20543
20641
  }
20544
20642
  getUserEmail() {
20545
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20643
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20546
20644
  if (!userDetails || !userDetails.hasOwnProperty('sub')) {
20547
20645
  return '';
20548
20646
  }
@@ -21268,7 +21366,7 @@ class QueryManagementService {
21268
21366
  ) {
21269
21367
  let currentUserDetails;
21270
21368
  try {
21271
- currentUserDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
21369
+ currentUserDetails = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), {});
21272
21370
  }
21273
21371
  catch (e) {
21274
21372
  console.error('Could not parse USER_DETAILS from session storage:', e);
@@ -30164,7 +30262,9 @@ class EventLogTableComponent {
30164
30262
  }
30165
30263
  ngOnInit() {
30166
30264
  this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;
30167
- this.isUserExternal = JSON.parse(this.sessionStorage.getItem('userDetails')).roles.includes('pui-case-manager');
30265
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
30266
+ const roles = userDetails?.roles || [];
30267
+ this.isUserExternal = roles.includes('pui-case-manager');
30168
30268
  }
30169
30269
  select(event) {
30170
30270
  this.selected = event;
@@ -30253,7 +30353,7 @@ class EventLogTableComponent {
30253
30353
  }], onCaseHistory: [{
30254
30354
  type: Output
30255
30355
  }] }); })();
30256
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EventLogTableComponent, { className: "EventLogTableComponent", filePath: "lib/shared/components/palette/history/event-log/event-log-table.component.ts", lineNumber: 12 }); })();
30356
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EventLogTableComponent, { className: "EventLogTableComponent", filePath: "lib/shared/components/palette/history/event-log/event-log-table.component.ts", lineNumber: 13 }); })();
30257
30357
 
30258
30358
  function EventLogComponent_ccd_event_log_table_3_Template(rf, ctx) { if (rf & 1) {
30259
30359
  const _r1 = i0.ɵɵgetCurrentView();
@@ -35017,7 +35117,7 @@ class CaseResolver {
35017
35117
  // as discussed for EUI-5456, need functionality to go to default page
35018
35118
  goToDefaultPage() {
35019
35119
  console.info('Going to default page!');
35020
- const userDetails = JSON.parse(this.sessionStorage.getItem(USER_DETAILS));
35120
+ const userDetails = safeJsonParse(this.sessionStorage.getItem(USER_DETAILS));
35021
35121
  userDetails && userDetails.roles
35022
35122
  && !userDetails.roles.includes(PUI_CASE_MANAGER)
35023
35123
  &&
@@ -35070,7 +35170,7 @@ class EventTriggerResolver {
35070
35170
  const query = route.queryParams;
35071
35171
  // If jurisdiction or caseType are missing, redirect to correct URL
35072
35172
  if (!jurisdiction || !caseType) {
35073
- const caseInfo = JSON.parse(this.sessionStorageService.getItem('caseInfo') || '{}');
35173
+ const caseInfo = safeJsonParse(this.sessionStorageService.getItem('caseInfo'), {});
35074
35174
  const jurisdictionId = caseInfo?.jurisdiction;
35075
35175
  const caseTypeId = caseInfo?.caseType;
35076
35176
  const caseId = caseInfo?.caseId;
@@ -39338,7 +39438,7 @@ class CreateCaseFiltersComponent {
39338
39438
  return events.filter(event => event.pre_states.length === 0);
39339
39439
  }
39340
39440
  retainEventsWithCreateRights(events) {
39341
- const userProfile = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
39441
+ const userProfile = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), null);
39342
39442
  return events.filter(event => userProfile && userProfile.roles &&
39343
39443
  !!userProfile.roles.find(role => this.hasCreateAccess(event, role)));
39344
39444
  }
@@ -39476,7 +39576,7 @@ class CreateCaseFiltersComponent {
39476
39576
  }], selectionChanged: [{
39477
39577
  type: Output
39478
39578
  }] }); })();
39479
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CreateCaseFiltersComponent, { className: "CreateCaseFiltersComponent", filePath: "lib/shared/components/create-case-filters/create-case-filters.component.ts", lineNumber: 19 }); })();
39579
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CreateCaseFiltersComponent, { className: "CreateCaseFiltersComponent", filePath: "lib/shared/components/create-case-filters/create-case-filters.component.ts", lineNumber: 20 }); })();
39480
39580
 
39481
39581
  class CreateCaseFiltersModule {
39482
39582
  static ɵfac = function CreateCaseFiltersModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CreateCaseFiltersModule)(); };
@@ -41097,5 +41197,5 @@ class TestRouteSnapshotBuilder {
41097
41197
  * Generated bundle index. Do not edit.
41098
41198
  */
41099
41199
 
41100
- 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 };
41200
+ 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 };
41101
41201
  //# sourceMappingURL=hmcts-ccd-case-ui-toolkit.mjs.map