@hmcts/ccd-case-ui-toolkit 7.3.35 → 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) {
@@ -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
  }
@@ -9455,7 +9520,7 @@ class CaseEditComponent {
9455
9520
  ngOnInit() {
9456
9521
  this.wizard = this.wizardFactory.create(this.eventTrigger);
9457
9522
  this.initialUrl = this.sessionStorageService.getItem('eventUrl');
9458
- this.isPageRefreshed = JSON.parse(this.sessionStorageService.getItem('isPageRefreshed'));
9523
+ this.isPageRefreshed = safeJsonParse(this.sessionStorageService.getItem('isPageRefreshed'), false);
9459
9524
  this.checkPageRefresh();
9460
9525
  this.form = this.fb.group({
9461
9526
  data: new FormGroup({}),
@@ -9579,15 +9644,11 @@ class CaseEditComponent {
9579
9644
  const taskEventCompletionStr = this.sessionStorageService.getItem(CaseEditComponent.TASK_EVENT_COMPLETION_INFO);
9580
9645
  const userInfoStr = this.sessionStorageService.getItem('userDetails');
9581
9646
  const assignNeeded = this.sessionStorageService.getItem('assignNeeded');
9582
- if (taskEventCompletionStr) {
9583
- taskEventCompletionInfo = JSON.parse(taskEventCompletionStr);
9584
- }
9585
- if (userInfoStr) {
9586
- userInfo = JSON.parse(userInfoStr);
9587
- }
9647
+ taskEventCompletionInfo = safeJsonParse(taskEventCompletionStr, null);
9648
+ userInfo = safeJsonParse(userInfoStr, null);
9588
9649
  const eventId = this.getEventId(form);
9589
9650
  const caseId = this.getCaseId(caseDetails);
9590
- const userId = userInfo.id ? userInfo.id : userInfo.uid;
9651
+ const userId = userInfo?.id ? userInfo.id : userInfo?.uid;
9591
9652
  const eventDetails = { eventId, caseId, userId, assignNeeded };
9592
9653
  if (this.taskExistsForThisEvent(taskInSessionStorage, taskEventCompletionInfo, eventDetails)) {
9593
9654
  this.abstractConfig.logMessage(`task ${taskInSessionStorage?.id} exist for this event for caseId and eventId as ${caseId} ${eventId}`);
@@ -9949,7 +10010,7 @@ class CaseEditComponent {
9949
10010
  }], submitted: [{
9950
10011
  type: Output
9951
10012
  }] }); })();
9952
- (() => { (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 }); })();
9953
10014
 
9954
10015
  function convertNonASCIICharacter(character) {
9955
10016
  if (character === '£') {
@@ -12008,6 +12069,42 @@ class CallbackErrorsComponent {
12008
12069
  }] }); })();
12009
12070
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CallbackErrorsComponent, { className: "CallbackErrorsComponent", filePath: "lib/shared/components/error/callback-errors.component.ts", lineNumber: 11 }); })();
12010
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
+
12011
12108
  function CaseEventCompletionComponent_app_case_event_completion_task_cancelled_0_Template(rf, ctx) { if (rf & 1) {
12012
12109
  const _r1 = i0.ɵɵgetCurrentView();
12013
12110
  i0.ɵɵelementStart(0, "app-case-event-completion-task-cancelled", 2);
@@ -13259,9 +13356,10 @@ class CaseFileViewFieldComponent {
13259
13356
  error: _ => this.getCategoriesAndDocumentsError = true
13260
13357
  });
13261
13358
  // EXUI-8000
13262
- const userInfo = JSON.parse(this.sessionStorageService.getItem('userDetails'));
13359
+ const userInfo = safeJsonParse(this.sessionStorageService.getItem('userDetails'), null);
13360
+ const userRoles = userInfo?.roles || [];
13263
13361
  // Get acls that intersects from acl roles and user roles
13264
- const acls = this.caseField.acls.filter(acl => userInfo.roles.includes(acl.role));
13362
+ const acls = this.caseField.acls.filter(acl => userRoles.includes(acl.role));
13265
13363
  // As there can be more than one intersecting role, if any acls are update: true
13266
13364
  this.allowMoving = acls.some(acl => acl.update);
13267
13365
  this.icp_jurisdictions = this.abstractConfig.getIcpJurisdictions();
@@ -13352,7 +13450,7 @@ class CaseFileViewFieldComponent {
13352
13450
  type: Component,
13353
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"] }]
13354
13452
  }], () => [{ type: i0.ElementRef }, { type: i1$1.ActivatedRoute }, { type: CaseFileViewService }, { type: DocumentManagementService }, { type: LoadingService }, { type: SessionStorageService }, { type: WindowService }, { type: CaseNotifier }, { type: AbstractAppConfig }], null); })();
13355
- (() => { (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 }); })();
13356
13454
 
13357
13455
  function ReadCaseFlagFieldComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
13358
13456
  const _r1 = i0.ɵɵgetCurrentView();
@@ -20594,14 +20692,14 @@ class PaymentField extends AbstractFieldReadComponent {
20594
20692
  return this.appConfig.getNotificationUrl();
20595
20693
  }
20596
20694
  getUserRoles() {
20597
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20695
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20598
20696
  if (!userDetails || !userDetails.hasOwnProperty('roles')) {
20599
20697
  return [];
20600
20698
  }
20601
20699
  return userDetails.roles;
20602
20700
  }
20603
20701
  getUserEmail() {
20604
- const userDetails = JSON.parse(this.sessionStorage.getItem('userDetails') || null);
20702
+ const userDetails = safeJsonParse(this.sessionStorage.getItem('userDetails'), null);
20605
20703
  if (!userDetails || !userDetails.hasOwnProperty('sub')) {
20606
20704
  return '';
20607
20705
  }
@@ -21327,7 +21425,7 @@ class QueryManagementService {
21327
21425
  ) {
21328
21426
  let currentUserDetails;
21329
21427
  try {
21330
- currentUserDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
21428
+ currentUserDetails = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), {});
21331
21429
  }
21332
21430
  catch (e) {
21333
21431
  console.error('Could not parse USER_DETAILS from session storage:', e);
@@ -30242,7 +30340,9 @@ class EventLogTableComponent {
30242
30340
  }
30243
30341
  ngOnInit() {
30244
30342
  this.isPartOfCaseTimeline = this.onCaseHistory.observers.length > 0;
30245
- 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');
30246
30346
  }
30247
30347
  select(event) {
30248
30348
  this.selected = event;
@@ -30331,7 +30431,7 @@ class EventLogTableComponent {
30331
30431
  }], onCaseHistory: [{
30332
30432
  type: Output
30333
30433
  }] }); })();
30334
- (() => { (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 }); })();
30335
30435
 
30336
30436
  function EventLogComponent_ccd_event_log_table_3_Template(rf, ctx) { if (rf & 1) {
30337
30437
  const _r1 = i0.ɵɵgetCurrentView();
@@ -35095,7 +35195,7 @@ class CaseResolver {
35095
35195
  // as discussed for EUI-5456, need functionality to go to default page
35096
35196
  goToDefaultPage() {
35097
35197
  console.info('Going to default page!');
35098
- const userDetails = JSON.parse(this.sessionStorage.getItem(USER_DETAILS));
35198
+ const userDetails = safeJsonParse(this.sessionStorage.getItem(USER_DETAILS));
35099
35199
  userDetails && userDetails.roles
35100
35200
  && !userDetails.roles.includes(PUI_CASE_MANAGER)
35101
35201
  &&
@@ -35148,7 +35248,7 @@ class EventTriggerResolver {
35148
35248
  const query = route.queryParams;
35149
35249
  // If jurisdiction or caseType are missing, redirect to correct URL
35150
35250
  if (!jurisdiction || !caseType) {
35151
- const caseInfo = JSON.parse(this.sessionStorageService.getItem('caseInfo') || '{}');
35251
+ const caseInfo = safeJsonParse(this.sessionStorageService.getItem('caseInfo'), {});
35152
35252
  const jurisdictionId = caseInfo?.jurisdiction;
35153
35253
  const caseTypeId = caseInfo?.caseType;
35154
35254
  const caseId = caseInfo?.caseId;
@@ -39416,7 +39516,7 @@ class CreateCaseFiltersComponent {
39416
39516
  return events.filter(event => event.pre_states.length === 0);
39417
39517
  }
39418
39518
  retainEventsWithCreateRights(events) {
39419
- const userProfile = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
39519
+ const userProfile = safeJsonParse(this.sessionStorageService.getItem(USER_DETAILS), null);
39420
39520
  return events.filter(event => userProfile && userProfile.roles &&
39421
39521
  !!userProfile.roles.find(role => this.hasCreateAccess(event, role)));
39422
39522
  }
@@ -39554,7 +39654,7 @@ class CreateCaseFiltersComponent {
39554
39654
  }], selectionChanged: [{
39555
39655
  type: Output
39556
39656
  }] }); })();
39557
- (() => { (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 }); })();
39558
39658
 
39559
39659
  class CreateCaseFiltersModule {
39560
39660
  static ɵfac = function CreateCaseFiltersModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CreateCaseFiltersModule)(); };
@@ -41175,5 +41275,5 @@ class TestRouteSnapshotBuilder {
41175
41275
  * Generated bundle index. Do not edit.
41176
41276
  */
41177
41277
 
41178
- 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 };
41179
41279
  //# sourceMappingURL=hmcts-ccd-case-ui-toolkit.mjs.map