@hmcts/ccd-case-ui-toolkit 7.3.99-innerhtml-security-update → 7.3.99

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, Injectable, DOCUMENT, Inject, InjectionToken, Optional, ChangeDetectorRef, Directive, ViewChild, ChangeDetectionStrategy, Injector, ViewContainerRef, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, Injectable, DOCUMENT, Inject, InjectionToken, Optional, ChangeDetectorRef, Directive, ViewChild, ChangeDetectionStrategy, SecurityContext, 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';
@@ -31,7 +31,7 @@ import { MAT_LEGACY_DATE_LOCALE } from '@angular/material/legacy-core';
31
31
  import * as i3 from '@hmcts/ccpay-web-component';
32
32
  import { PaymentLibModule } from '@hmcts/ccpay-web-component';
33
33
  import { v4 } from 'uuid';
34
- import DOMPurify from 'dompurify';
34
+ import * as i1$5 from '@angular/platform-browser';
35
35
  import * as i3$1 from 'ngx-editor';
36
36
  import { Editor, NgxEditorModule } from 'ngx-editor';
37
37
  import { nodes, marks } from 'ngx-editor/schema';
@@ -6308,7 +6308,7 @@ class FormValidatorsService {
6308
6308
  // Matches: [text](url), ![alt](url), <img ...>, <a ...>...</a>
6309
6309
  const inlineMarkdownPattern = /(?:!?\[[^\]]{0,500}\]\([^)]{0,500}\)|<(?:img\b[^>]{0,500}>|a\b[^>]{0,500}>[\s\S]*?<\/a>))/i;
6310
6310
  // Matches: [text][id], ![alt][id], and the collapsed form [text][]
6311
- const referenceBoxPattern = /(!)?\[((?:[^[\]\\]|\\.){0,500})\]\s*\[([^\]]{0,100})\]/;
6311
+ const referenceBoxPattern = /(!)?\[((?:[^[\]\\]|\\.){0,500})\]\[([^\]]{0,100})\](?!\s*\/)/;
6312
6312
  // Matches: autolinks such as <http://example.com>
6313
6313
  const autolinkPattern = /<(?:[A-Za-z][A-Za-z0-9+.-]*:[^ <>\n]*|[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+)>/;
6314
6314
  // Matches: bare www.example.com autolinks
@@ -26378,8 +26378,10 @@ function sanitiseRichTextHtml(value) {
26378
26378
  }
26379
26379
 
26380
26380
  class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
26381
- constructor() {
26381
+ sanitizer;
26382
+ constructor(sanitizer) {
26382
26383
  super();
26384
+ this.sanitizer = sanitizer;
26383
26385
  }
26384
26386
  sanitisedValue() {
26385
26387
  const supportedHtml = sanitiseRichTextHtml(this.caseField.value || '');
@@ -26390,12 +26392,9 @@ class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
26390
26392
  delete element.dataset.indent;
26391
26393
  element.classList.add(`ccd-rich-text-indent-${indent}`);
26392
26394
  });
26393
- return DOMPurify.sanitize(documentElement.body.innerHTML, {
26394
- ALLOWED_ATTR: ['align', 'class', 'start', 'type'],
26395
- ALLOWED_TAGS: ['b', 'blockquote', 'br', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'li', 'ol', 'p', 'strong', 'u', 'ul']
26396
- });
26395
+ return this.sanitizer.sanitize(SecurityContext.HTML, documentElement.body.innerHTML) || '';
26397
26396
  }
26398
- static ɵfac = function ReadRichTextAreaFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReadRichTextAreaFieldComponent)(); };
26397
+ static ɵfac = function ReadRichTextAreaFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReadRichTextAreaFieldComponent)(i0.ɵɵdirectiveInject(i1$5.DomSanitizer)); };
26399
26398
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadRichTextAreaFieldComponent, selectors: [["ccd-read-rich-text-area-field"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[1, "ccd-rich-text-area-read", 3, "innerHTML"]], template: function ReadRichTextAreaFieldComponent_Template(rf, ctx) { if (rf & 1) {
26400
26399
  i0.ɵɵelement(0, "div", 0);
26401
26400
  } if (rf & 2) {
@@ -26404,8 +26403,8 @@ class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
26404
26403
  }
26405
26404
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReadRichTextAreaFieldComponent, [{
26406
26405
  type: Component,
26407
- args: [{ selector: 'ccd-read-rich-text-area-field', template: '<div class="ccd-rich-text-area-read" [innerHTML]="sanitisedValue()"></div>', encapsulation: ViewEncapsulation.None, standalone: false, styles: ["@charset \"UTF-8\";.ccd-rich-text-area-read{font-size:14px;overflow-wrap:anywhere;white-space:pre-wrap;word-break:normal}.ccd-rich-text-area-read strong,.ccd-rich-text-area-read strong *,.ccd-rich-text-area-read b,.ccd-rich-text-area-read b *{font-weight:700}.ccd-rich-text-area-read strong u,.ccd-rich-text-area-read u strong,.ccd-rich-text-area-read b u,.ccd-rich-text-area-read u b{font-weight:700!important;text-decoration:underline}.ccd-rich-text-area-read p,.ccd-rich-text-area-read ul,.ccd-rich-text-area-read ol,.ccd-rich-text-area-read li{font-size:14px;margin-top:0;overflow-wrap:anywhere;word-break:normal}.ccd-rich-text-area-read p:empty:before{content:\"\\a0\"}.ccd-rich-text-area-read ul{list-style:disc outside;padding-left:25px}.ccd-rich-text-area-read ol{list-style:decimal outside;padding-left:25px}.ccd-rich-text-area-read ol[type=a]{list-style-type:lower-alpha}.ccd-rich-text-area-read ol[type=i]{list-style-type:lower-roman}.ccd-rich-text-area-read ol[type=i]>li::marker{content:\"(\" counter(list-item,lower-roman) \") \"}.ccd-rich-text-area-read li{display:list-item;margin-bottom:5px}.ccd-rich-text-area-read li>p{margin:0}.ccd-rich-text-area-read li>ul,.ccd-rich-text-area-read li>ol{margin-top:5px}.ccd-rich-text-area-read h1{font-size:20px;font-weight:700}.ccd-rich-text-area-read h2{font-size:18px;font-weight:700}.ccd-rich-text-area-read h3{font-size:16px;font-weight:700}.ccd-rich-text-area-read .ccd-rich-text-indent-1{margin-left:40px}.ccd-rich-text-area-read .ccd-rich-text-indent-2{margin-left:80px}.ccd-rich-text-area-read .ccd-rich-text-indent-3{margin-left:120px}.ccd-rich-text-area-read .ccd-rich-text-indent-4{margin-left:160px}.ccd-rich-text-area-read .ccd-rich-text-indent-5{margin-left:200px}.ccd-rich-text-area-read .ccd-rich-text-indent-6{margin-left:240px}\n"] }]
26408
- }], () => [], null); })();
26406
+ args: [{ selector: 'ccd-read-rich-text-area-field', template: `<div class="ccd-rich-text-area-read" [innerHTML]="sanitisedValue()"></div>`, encapsulation: ViewEncapsulation.None, standalone: false, styles: ["@charset \"UTF-8\";.ccd-rich-text-area-read{font-size:14px;overflow-wrap:anywhere;white-space:pre-wrap;word-break:normal}.ccd-rich-text-area-read strong,.ccd-rich-text-area-read strong *,.ccd-rich-text-area-read b,.ccd-rich-text-area-read b *{font-weight:700}.ccd-rich-text-area-read strong u,.ccd-rich-text-area-read u strong,.ccd-rich-text-area-read b u,.ccd-rich-text-area-read u b{font-weight:700!important;text-decoration:underline}.ccd-rich-text-area-read p,.ccd-rich-text-area-read ul,.ccd-rich-text-area-read ol,.ccd-rich-text-area-read li{font-size:14px;margin-top:0;overflow-wrap:anywhere;word-break:normal}.ccd-rich-text-area-read p:empty:before{content:\"\\a0\"}.ccd-rich-text-area-read ul{list-style:disc outside;padding-left:25px}.ccd-rich-text-area-read ol{list-style:decimal outside;padding-left:25px}.ccd-rich-text-area-read ol[type=a]{list-style-type:lower-alpha}.ccd-rich-text-area-read ol[type=i]{list-style-type:lower-roman}.ccd-rich-text-area-read ol[type=i]>li::marker{content:\"(\" counter(list-item,lower-roman) \") \"}.ccd-rich-text-area-read li{display:list-item;margin-bottom:5px}.ccd-rich-text-area-read li>p{margin:0}.ccd-rich-text-area-read li>ul,.ccd-rich-text-area-read li>ol{margin-top:5px}.ccd-rich-text-area-read h1{font-size:20px;font-weight:700}.ccd-rich-text-area-read h2{font-size:18px;font-weight:700}.ccd-rich-text-area-read h3{font-size:16px;font-weight:700}.ccd-rich-text-area-read .ccd-rich-text-indent-1{margin-left:40px}.ccd-rich-text-area-read .ccd-rich-text-indent-2{margin-left:80px}.ccd-rich-text-area-read .ccd-rich-text-indent-3{margin-left:120px}.ccd-rich-text-area-read .ccd-rich-text-indent-4{margin-left:160px}.ccd-rich-text-area-read .ccd-rich-text-indent-5{margin-left:200px}.ccd-rich-text-area-read .ccd-rich-text-indent-6{margin-left:240px}\n"] }]
26407
+ }], () => [{ type: i1$5.DomSanitizer }], null); })();
26409
26408
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReadRichTextAreaFieldComponent, { className: "ReadRichTextAreaFieldComponent", filePath: "lib/shared/components/palette/rich-text-area/read-rich-text-area-field.component.ts", lineNumber: 13 }); })();
26410
26409
 
26411
26410
  const _c0$D = ["editorHost"];
@@ -26579,6 +26578,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
26579
26578
  },
26580
26579
  plugins: [
26581
26580
  new Plugin({
26581
+ appendTransaction: (transactions, oldState, newState) => this.renumberContinuedOrderedLists(transactions, oldState, newState),
26582
26582
  props: {
26583
26583
  handlePaste: (_view, event) => this.handleEditorPaste(event),
26584
26584
  handleDOMEvents: {
@@ -27062,6 +27062,71 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27062
27062
  ? candidateOrder === adjacentOrder + adjacentList.childCount
27063
27063
  : candidateOrder + candidateList.childCount === adjacentOrder;
27064
27064
  }
27065
+ renumberContinuedOrderedLists(transactions, oldState, newState) {
27066
+ if (!transactions.some((transaction) => transaction.docChanged)) {
27067
+ return null;
27068
+ }
27069
+ const oldChildren = [];
27070
+ let oldPosition = 0;
27071
+ oldState.doc.forEach((node) => {
27072
+ oldChildren.push({ node, position: oldPosition });
27073
+ oldPosition += node.nodeSize;
27074
+ });
27075
+ const mapPosition = (position) => transactions.reduce((mappedPosition, transaction) => transaction.mapping.map(mappedPosition, 1), position);
27076
+ const effectiveOrders = new Map();
27077
+ let result = null;
27078
+ oldChildren.forEach(({ node: candidate, position: candidatePosition }, candidateIndex) => {
27079
+ if (candidate.type.name !== 'ordered_list') {
27080
+ return;
27081
+ }
27082
+ let previousIndex = candidateIndex - 1;
27083
+ while (previousIndex >= 0 &&
27084
+ this.isOrderedListContinuationSeparator(oldChildren[previousIndex].node, candidate)) {
27085
+ previousIndex--;
27086
+ }
27087
+ if (previousIndex < 0) {
27088
+ return;
27089
+ }
27090
+ const previous = oldChildren[previousIndex].node;
27091
+ const previousPosition = oldChildren[previousIndex].position;
27092
+ if (previous.type.name !== 'ordered_list' ||
27093
+ !this.hasMatchingListType(candidate, previous) ||
27094
+ candidate.attrs.indent !== previous.attrs.indent ||
27095
+ !this.isSequentialList(candidate, previous, 1)) {
27096
+ return;
27097
+ }
27098
+ const mappedPreviousPosition = mapPosition(previousPosition);
27099
+ const mappedCandidatePosition = mapPosition(candidatePosition);
27100
+ const newPrevious = newState.doc.nodeAt(mappedPreviousPosition);
27101
+ const newCandidate = newState.doc.nodeAt(mappedCandidatePosition);
27102
+ if (!newPrevious || !newCandidate ||
27103
+ newPrevious.type.name !== 'ordered_list' || newCandidate.type.name !== 'ordered_list' ||
27104
+ newPrevious.firstChild?.textContent !== previous.firstChild?.textContent ||
27105
+ newCandidate.firstChild?.textContent !== candidate.firstChild?.textContent ||
27106
+ !this.hasMatchingListType(newCandidate, newPrevious) ||
27107
+ newCandidate.attrs.indent !== newPrevious.attrs.indent) {
27108
+ return;
27109
+ }
27110
+ const previousOrder = effectiveOrders.get(previousPosition) ?? (Number(newPrevious.attrs.order) || 1);
27111
+ const expectedOrder = previousOrder + newPrevious.childCount;
27112
+ effectiveOrders.set(candidatePosition, expectedOrder);
27113
+ if (Number(newCandidate.attrs.order) === expectedOrder) {
27114
+ return;
27115
+ }
27116
+ result = (result || newState.tr).setNodeMarkup(mappedCandidatePosition, newCandidate.type, {
27117
+ ...newCandidate.attrs,
27118
+ order: expectedOrder
27119
+ });
27120
+ });
27121
+ return result;
27122
+ }
27123
+ isOrderedListContinuationSeparator(node, candidate) {
27124
+ if (this.isEmptyParagraph(node) || this.isListSectionHeading(node)) {
27125
+ return true;
27126
+ }
27127
+ return this.isList(node) &&
27128
+ (Number(node.attrs.indent) || 0) > (Number(candidate.attrs.indent) || 0);
27129
+ }
27065
27130
  hasListContinuation(list) {
27066
27131
  return list.type.name === 'ordered_list' || Boolean(list.attrs.continuationOrder);
27067
27132
  }
@@ -27327,7 +27392,10 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27327
27392
  this.removeUnsupportedMarkup(documentElement);
27328
27393
  this.normaliseDateRangeSpacing(documentElement);
27329
27394
  this.removeUnsupportedAttributes(documentElement);
27330
- return this.normalisePlainTextValue(sanitiseRichTextDocument(documentElement));
27395
+ const sanitisedValue = sanitiseRichTextDocument(documentElement);
27396
+ return this.hasMeaningfulRichTextContent(documentElement)
27397
+ ? this.normalisePlainTextValue(sanitisedValue)
27398
+ : '';
27331
27399
  }
27332
27400
  normaliseRichTextValue(value) {
27333
27401
  if (!value) {
@@ -27345,7 +27413,15 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27345
27413
  this.removeUnsupportedMarkup(documentElement);
27346
27414
  this.normaliseDateRangeSpacing(documentElement);
27347
27415
  this.removeUnsupportedAttributes(documentElement);
27348
- return this.normalisePlainTextValue(sanitiseRichTextDocument(documentElement));
27416
+ const sanitisedValue = sanitiseRichTextDocument(documentElement);
27417
+ return this.hasMeaningfulRichTextContent(documentElement)
27418
+ ? this.normalisePlainTextValue(sanitisedValue)
27419
+ : '';
27420
+ }
27421
+ hasMeaningfulRichTextContent(documentElement) {
27422
+ const visibleText = (documentElement.body.textContent || '')
27423
+ .replace(/[\s\u00a0\u200b-\u200d\ufeff]/g, '');
27424
+ return visibleText.length > 0 || Boolean(documentElement.body.querySelector('hr'));
27349
27425
  }
27350
27426
  syncAccessibilityLater() {
27351
27427
  setTimeout(() => this.syncAccessibilityState());
@@ -27458,13 +27534,31 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27458
27534
  }
27459
27535
  this.isNormalisingValue = true;
27460
27536
  try {
27461
- this.richTextAreaControl.setValue(normalisedValue, { emitEvent: false });
27462
- this.editor.setContent(normalisedValue || '');
27537
+ this.richTextAreaControl.setValue(normalisedValue, {
27538
+ emitEvent: false,
27539
+ emitModelToViewChange: false
27540
+ });
27541
+ if (normalisedValue || this.editorHasMeaningfulRichTextContent()) {
27542
+ this.editor.setContent(normalisedValue || '');
27543
+ }
27463
27544
  }
27464
27545
  finally {
27465
27546
  this.isNormalisingValue = false;
27466
27547
  }
27467
27548
  }
27549
+ editorHasMeaningfulRichTextContent() {
27550
+ const documentNode = this.editor.view.state.doc;
27551
+ const visibleText = documentNode.textContent.replace(/[\s\u00a0\u200b-\u200d\ufeff]/g, '');
27552
+ let hasHorizontalRule = false;
27553
+ documentNode.descendants((node) => {
27554
+ if (node.type.name === 'horizontal_rule') {
27555
+ hasHorizontalRule = true;
27556
+ return false;
27557
+ }
27558
+ return !hasHorizontalRule;
27559
+ });
27560
+ return visibleText.length > 0 || hasHorizontalRule;
27561
+ }
27468
27562
  richTextRequiredValidator() {
27469
27563
  return (control) => {
27470
27564
  const textValue = this.htmlToText(control.value);
@@ -27478,8 +27572,9 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27478
27572
  };
27479
27573
  }
27480
27574
  htmlToText(value) {
27481
- const documentElement = new DOMParser().parseFromString(value || '', 'text/html');
27482
- return (documentElement.body.textContent || '').replaceAll('\u00a0', ' ').trim();
27575
+ const container = document.createElement('div');
27576
+ container.innerHTML = value || '';
27577
+ return (container.textContent || '').replaceAll('\u00a0', ' ').trim();
27483
27578
  }
27484
27579
  isWordHtml(html) {
27485
27580
  return /(class="?Mso|mso-|urn:schemas-microsoft-com:office:word|xmlns:o)/i.test(html);
@@ -28114,7 +28209,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28114
28209
  }
28115
28210
  return value
28116
28211
  .replace(/!?\[([^\]]{0,500})\]\(([^)]{0,500})\)/g, (_match, text, url) => text || url)
28117
- .replace(/!?\[((?:[^[\]\\]|\\.){0,500})\]\s*\[[^\]]{0,100}\]/g, '$1');
28212
+ .replace(/!?\[((?:[^[\]\\]|\\.){0,500})\]\[[^\]]{0,100}\](?!\s*\/)/g, '$1');
28118
28213
  }
28119
28214
  unwrapElement(element) {
28120
28215
  const parentNode = element.parentNode;
@@ -28133,6 +28228,8 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28133
28228
  const state = {
28134
28229
  listStack: [],
28135
28230
  listParents: [],
28231
+ listRunDeclaredLevel: null,
28232
+ listRunVisualLevel: null,
28136
28233
  resetListLevels: new Map(),
28137
28234
  previousListId: null
28138
28235
  };
@@ -28161,12 +28258,19 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28161
28258
  resetWordListConversionState(state) {
28162
28259
  state.listStack.length = 0;
28163
28260
  state.listParents.length = 0;
28261
+ state.listRunDeclaredLevel = null;
28262
+ state.listRunVisualLevel = null;
28164
28263
  state.resetListLevels.clear();
28165
28264
  state.previousListId = null;
28166
28265
  }
28167
28266
  wordListRequestedLevel(paragraph, listId, wordListIndents, state) {
28168
28267
  const declaredLevel = this.wordListDeclaredLevel(paragraph);
28169
- let requestedLevel = this.wordListLevel(paragraph, wordListIndents);
28268
+ const visualLevel = this.wordListVisualLevel(paragraph, wordListIndents);
28269
+ if (state.listRunDeclaredLevel === null || state.listRunVisualLevel === null) {
28270
+ state.listRunDeclaredLevel = declaredLevel;
28271
+ state.listRunVisualLevel = visualLevel;
28272
+ }
28273
+ let requestedLevel = Math.max(1, declaredLevel - state.listRunDeclaredLevel + 1, visualLevel - state.listRunVisualLevel + 1);
28170
28274
  const rememberedResetLevel = declaredLevel === 1 ? state.resetListLevels.get(listId) : null;
28171
28275
  if (rememberedResetLevel) {
28172
28276
  return Math.max(requestedLevel, rememberedResetLevel);
@@ -28187,7 +28291,8 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28187
28291
  let currentList = state.listStack[stackIndex];
28188
28292
  if (currentList?.tagName.toLowerCase() !== listType || currentList?.getAttribute('type') !== orderedListType ||
28189
28293
  state.listParents[stackIndex] !== listParent) {
28190
- currentList = this.createWordList(documentElement, paragraph, listType, orderedListType, parentListItem);
28294
+ const rootIndent = level === 1 ? state.listRunVisualLevel - 1 : 0;
28295
+ currentList = this.createWordList(documentElement, paragraph, listType, orderedListType, parentListItem, rootIndent);
28191
28296
  state.listStack[stackIndex] = currentList;
28192
28297
  state.listParents[stackIndex] = listParent;
28193
28298
  }
@@ -28195,15 +28300,18 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28195
28300
  state.listParents.length = level;
28196
28301
  return currentList;
28197
28302
  }
28198
- createWordList(documentElement, paragraph, listType, orderedListType, parentListItem) {
28303
+ createWordList(documentElement, paragraph, listType, orderedListType, parentListItem, rootIndent) {
28199
28304
  const list = documentElement.createElement(listType);
28200
- const listStart = this.wordListStart(paragraph);
28305
+ const listStart = this.wordListStart(paragraph, orderedListType);
28201
28306
  if (listType === 'ol' && listStart > 1) {
28202
28307
  list.setAttribute('start', listStart.toString());
28203
28308
  }
28204
28309
  if (orderedListType) {
28205
28310
  list.setAttribute('type', orderedListType);
28206
28311
  }
28312
+ if (rootIndent > 0) {
28313
+ list.dataset.indent = Math.min(6, rootIndent).toString();
28314
+ }
28207
28315
  if (parentListItem) {
28208
28316
  parentListItem.appendChild(list);
28209
28317
  }
@@ -28262,11 +28370,10 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28262
28370
  .find((element) => /mso-list:\s*Ignore/i.test(element.getAttribute('style') || ''));
28263
28371
  return (markerElement ? markerElement.textContent : paragraph.textContent).trim();
28264
28372
  }
28265
- wordListLevel(paragraph, wordListIndents) {
28266
- const declaredLevel = this.wordListDeclaredLevel(paragraph);
28373
+ wordListVisualLevel(paragraph, wordListIndents) {
28267
28374
  const indent = this.wordListIndent(paragraph);
28268
28375
  const visualLevel = wordListIndents.indexOf(indent) + 1;
28269
- return Math.max(declaredLevel, visualLevel || 1);
28376
+ return visualLevel || 1;
28270
28377
  }
28271
28378
  wordListDeclaredLevel(paragraph) {
28272
28379
  const match = (paragraph.getAttribute('style') || '').match(/mso-list:[^;]*\blevel(\d+)/i);
@@ -28287,9 +28394,18 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28287
28394
  const indent = Math.max(this.cssLengthToPixels(this.cssStyleLength(style, 'margin-left')), this.cssLengthToPixels(this.cssStyleLength(style, 'margin-inline-start')), this.cssLengthToPixels(this.cssStyleLength(style, 'mso-para-margin-left')), this.cssLengthToPixels(this.cssStyleLength(style, 'mso-margin-left-alt')), this.cssLengthToPixels(this.cssMarginLeftLength(style)));
28288
28395
  return Math.round(indent);
28289
28396
  }
28290
- wordListStart(paragraph) {
28291
- const match = /^(\d+)[.)]/.exec(this.wordListMarker(paragraph));
28292
- return match ? Number(match[1]) : 1;
28397
+ wordListStart(paragraph, orderedListType) {
28398
+ const match = /^\(?([a-z]+|\d+)[.)]/i.exec(this.wordListMarker(paragraph));
28399
+ if (!match) {
28400
+ return 1;
28401
+ }
28402
+ if (/^\d+$/.test(match[1])) {
28403
+ return Number(match[1]);
28404
+ }
28405
+ if (orderedListType === 'a') {
28406
+ return match[1].toLowerCase().split('').reduce((start, character) => (start * 26) + character.charCodeAt(0) - 96, 0);
28407
+ }
28408
+ return 1;
28293
28409
  }
28294
28410
  copyListItemContents(documentElement, paragraph, listItem) {
28295
28411
  Array.prototype.slice.call(paragraph.childNodes).forEach((childNode) => {
@@ -29008,7 +29124,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
29008
29124
  type: ViewChild,
29009
29125
  args: ['editorHost']
29010
29126
  }] }); })();
29011
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteRichTextAreaFieldComponent, { className: "WriteRichTextAreaFieldComponent", filePath: "lib/shared/components/palette/rich-text-area/write-rich-text-area-field.component.ts", lineNumber: 137 }); })();
29127
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteRichTextAreaFieldComponent, { className: "WriteRichTextAreaFieldComponent", filePath: "lib/shared/components/palette/rich-text-area/write-rich-text-area-field.component.ts", lineNumber: 139 }); })();
29012
29128
 
29013
29129
  class ReadTextFieldComponent extends AbstractFieldReadComponent {
29014
29130
  static ɵfac = /*@__PURE__*/ (() => { let ɵReadTextFieldComponent_BaseFactory; return function ReadTextFieldComponent_Factory(__ngFactoryType__) { return (ɵReadTextFieldComponent_BaseFactory || (ɵReadTextFieldComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadTextFieldComponent)))(__ngFactoryType__ || ReadTextFieldComponent); }; })();
@@ -31438,6 +31554,7 @@ function ManageCaseFlagsComponent_div_9_Template(rf, ctx) { if (rf & 1) {
31438
31554
  i0.ɵɵproperty("for", i0.ɵɵinterpolate1("flag-selection-", i_r4))("innerHTML", ctx_r0.sanitizeHtml(i0.ɵɵpipeBind1(3, 6, flagDisplay_r3)), i0.ɵɵsanitizeHtml);
31439
31555
  } }
31440
31556
  class ManageCaseFlagsComponent extends AbstractJourneyComponent {
31557
+ sanitizer;
31441
31558
  formGroup;
31442
31559
  flagsData;
31443
31560
  caseTitle;
@@ -31452,8 +31569,9 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
31452
31569
  selectedControlName = 'selectedManageCaseLocation';
31453
31570
  excludedFlagStatuses = [CaseFlagStatus.INACTIVE, CaseFlagStatus.NOT_APPROVED];
31454
31571
  cachedControls;
31455
- constructor(multipageComponentStateService) {
31572
+ constructor(multipageComponentStateService, sanitizer) {
31456
31573
  super(multipageComponentStateService);
31574
+ this.sanitizer = sanitizer;
31457
31575
  }
31458
31576
  ngOnInit() {
31459
31577
  this.manageCaseFlagTitle = this.setManageCaseFlagTitle(this.displayContextParameter);
@@ -31703,9 +31821,9 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
31703
31821
  }
31704
31822
  // Ensure there is no dangerous HTML in the flag name or description that could lead to XSS vulnerabilities
31705
31823
  sanitizeHtml(content) {
31706
- return DOMPurify.sanitize(content ?? '');
31824
+ return this.sanitizer.sanitize(SecurityContext.HTML, content ?? '') ?? '';
31707
31825
  }
31708
- static ɵfac = function ManageCaseFlagsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ManageCaseFlagsComponent)(i0.ɵɵdirectiveInject(MultipageComponentStateService)); };
31826
+ static ɵfac = function ManageCaseFlagsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ManageCaseFlagsComponent)(i0.ɵɵdirectiveInject(MultipageComponentStateService), i0.ɵɵdirectiveInject(i1$5.DomSanitizer)); };
31709
31827
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ManageCaseFlagsComponent, selectors: [["ccd-manage-case-flags"]], inputs: { formGroup: "formGroup", flagsData: "flagsData", caseTitle: "caseTitle", displayContextParameter: "displayContextParameter" }, outputs: { caseFlagStateEmitter: "caseFlagStateEmitter" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 9, consts: [[3, "formGroup"], [1, "govuk-form-group", 3, "ngClass"], ["aria-describedby", "manage-case-flag-heading", 1, "govuk-fieldset"], [1, "govuk-fieldset__legend", "govuk-fieldset__legend--m"], ["id", "manage-case-flag-heading", 1, "govuk-fieldset__heading"], ["id", "manage-case-flag-not-selected-error-message", "class", "govuk-error-message", 4, "ngIf"], ["data-module", "govuk-radios", "id", "conditional-radios-list", 1, "govuk-radios", "govuk-radios--conditional"], ["class", "govuk-radios__item", 4, "ngFor", "ngForOf"], ["id", "manage-case-flag-not-selected-error-message", 1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-radios__item"], ["type", "radio", 1, "govuk-radios__input", 3, "change", "id", "checked"], [1, "govuk-label", "govuk-radios__label", 3, "for", "innerHTML"]], template: function ManageCaseFlagsComponent_Template(rf, ctx) { if (rf & 1) {
31710
31828
  i0.ɵɵelementContainerStart(0, 0);
31711
31829
  i0.ɵɵelementStart(1, "div", 1)(2, "fieldset", 2)(3, "legend", 3)(4, "h1", 4);
@@ -31732,7 +31850,7 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
31732
31850
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ManageCaseFlagsComponent, [{
31733
31851
  type: Component,
31734
31852
  args: [{ selector: 'ccd-manage-case-flags', encapsulation: ViewEncapsulation.None, standalone: false, template: "<ng-container [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': errorMessages.length > 0}\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"manage-case-flag-heading\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 id=\"manage-case-flag-heading\" class=\"govuk-fieldset__heading\">\n {{manageCaseFlagTitle | rpxTranslate}}\n </h1>\n </legend>\n <div id=\"manage-case-flag-not-selected-error-message\" class=\"govuk-error-message\"\n *ngIf=\"manageCaseFlagSelectedErrorMessage\">\n <span class=\"govuk-visually-hidden\">{{'Error:' | rpxTranslate}}</span> {{manageCaseFlagSelectedErrorMessage | rpxTranslate}}\n </div>\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\" id=\"conditional-radios-list\">\n <div class=\"govuk-radios__item\" *ngFor=\"let flagDisplay of flagsDisplayData; index as i\">\n <input class=\"govuk-radios__input\" id=\"flag-selection-{{i}}\"\n type=\"radio\"\n [checked]=\"isSelected(flagDisplay)\"\n (change)=\"onFlagSelectionChange(flagDisplay)\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"flag-selection-{{i}}\" [innerHTML]=\"sanitizeHtml(flagDisplay | manageCaseFlagsLabelDisplay)\"></label>\n </div>\n </div>\n </fieldset>\n </div>\n</ng-container>", styles: [".flag-name-and-description{font-weight:700}\n"] }]
31735
- }], () => [{ type: MultipageComponentStateService }], { formGroup: [{
31853
+ }], () => [{ type: MultipageComponentStateService }, { type: i1$5.DomSanitizer }], { formGroup: [{
31736
31854
  type: Input
31737
31855
  }], flagsData: [{
31738
31856
  type: Input
@@ -34107,7 +34225,6 @@ function ReadComplexFieldCollectionTableComponent_th_10_Template(rf, ctx) { if (
34107
34225
  i0.ɵɵelementStart(4, "a", 9);
34108
34226
  i0.ɵɵpipe(5, "rpxTranslate");
34109
34227
  i0.ɵɵlistener("click", function ReadComplexFieldCollectionTableComponent_th_10_Template_a_click_4_listener($event) { const heading_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); ctx_r2.sortRowsByColumns(heading_r2); return i0.ɵɵresetView($event.preventDefault()); })("keyup.enter", function ReadComplexFieldCollectionTableComponent_th_10_Template_a_keyup_enter_4_listener() { const heading_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sortRowsByColumns(heading_r2)); });
34110
- i0.ɵɵtext(6);
34111
34228
  i0.ɵɵelementEnd()();
34112
34229
  } if (rf & 2) {
34113
34230
  const heading_r2 = ctx.$implicit;
@@ -34115,9 +34232,8 @@ function ReadComplexFieldCollectionTableComponent_th_10_Template(rf, ctx) { if (
34115
34232
  i0.ɵɵadvance(2);
34116
34233
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 3, ctx_r2.columnsAllLabels[heading_r2].label));
34117
34234
  i0.ɵɵadvance(2);
34235
+ i0.ɵɵproperty("innerHTML", ctx_r2.sortWidget(ctx_r2.columnsAllLabels[heading_r2]), i0.ɵɵsanitizeHtml);
34118
34236
  i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(5, 5, "Sort " + ctx_r2.columnsAllLabels[heading_r2].label));
34119
- i0.ɵɵadvance(2);
34120
- i0.ɵɵtextInterpolate(ctx_r2.sortWidget(ctx_r2.columnsAllLabels[heading_r2]));
34121
34237
  } }
34122
34238
  function ReadComplexFieldCollectionTableComponent_ng_container_12_ng_container_2_div_2_Template(rf, ctx) { if (rf & 1) {
34123
34239
  i0.ɵɵelementStart(0, "div");
@@ -34327,11 +34443,15 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34327
34443
  if (this.isHidden[row]) {
34328
34444
  return 'assets/img/accordion-plus.png';
34329
34445
  }
34330
- if (this.isVerticleDataNotEmpty(row)) {
34331
- return 'assets/img/accordion-minus.png';
34446
+ else {
34447
+ if (this.isVerticleDataNotEmpty(row)) {
34448
+ return 'assets/img/accordion-minus.png';
34449
+ }
34450
+ else {
34451
+ this.isHidden[row] = true;
34452
+ return 'assets/img/accordion-plus.png';
34453
+ }
34332
34454
  }
34333
- this.isHidden[row] = true;
34334
- return 'assets/img/accordion-plus.png';
34335
34455
  }
34336
34456
  /**
34337
34457
  * Needs to be called before 'ccdFieldsFilter' pipe is used, as it needs a caseField value.
@@ -34356,7 +34476,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34356
34476
  field_type: fieldType
34357
34477
  });
34358
34478
  }
34359
- keepOriginalOrder = (a) => a.key;
34479
+ keepOriginalOrder = (a, b) => a.key;
34360
34480
  sortRowsByColumns(column) {
34361
34481
  const shouldSortInAscendingOrder = this.columnsHorizontalLabel[column].sortOrder === SortOrder$1.UNSORTED
34362
34482
  || this.columnsHorizontalLabel[column].sortOrder === SortOrder$1.DESCENDING;
@@ -34399,7 +34519,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34399
34519
  }
34400
34520
  }
34401
34521
  sortWidget(column) {
34402
- return String.fromCharCode(ReadComplexFieldCollectionTableComponent.isSortAscending(column) ? 9660 : 9650);
34522
+ return ReadComplexFieldCollectionTableComponent.isSortAscending(column) ? '&#9660;' : '&#9650;';
34403
34523
  }
34404
34524
  populateHorizontalLabels(labelsHorizontal, allLabels, labelsVertical) {
34405
34525
  for (const id of this.columns) {
@@ -34443,7 +34563,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34443
34563
  return result;
34444
34564
  }
34445
34565
  static ɵfac = /*@__PURE__*/ (() => { let ɵReadComplexFieldCollectionTableComponent_BaseFactory; return function ReadComplexFieldCollectionTableComponent_Factory(__ngFactoryType__) { return (ɵReadComplexFieldCollectionTableComponent_BaseFactory || (ɵReadComplexFieldCollectionTableComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadComplexFieldCollectionTableComponent)))(__ngFactoryType__ || ReadComplexFieldCollectionTableComponent); }; })();
34446
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadComplexFieldCollectionTableComponent, selectors: [["ccd-read-complex-field-collection-table"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 13, vars: 6, consts: [["showEmptyTd", ""], ["SimpleRow", ""], [1, "complex-panel", 3, "hidden"], [1, "complex-panel-title"], [1, "text-16"], ["aria-describedby", "complex panel table", 1, "complex-panel-table"], ["scope", "col", 4, "ngFor", "ngForOf"], [4, "ngFor", "ngForOf"], ["scope", "col"], ["href", "#", 1, "sort-widget", 3, "click", "keyup.enter"], [1, "new-table-row", "accordion-heading", 3, "keyup", "click"], [2, "float", "right"], ["href", "#", 3, "click"], ["alt", "accordion-img", 1, "accordion-image", 3, "src"], [3, "hidden"], [3, "colSpan"], ["aria-describedby", "complex panel table expanded", 1, "complex-panel-table"], [4, "ngIf", "ngIfElse"], [3, "caseField", "context"], ["class", "complex-panel-simple-field accordion-body", 3, "hidden", 4, "ngIf"], [3, "hidden", 4, "ngIf"], [1, "complex-panel-simple-field", "accordion-body", 3, "hidden"], ["class", "text-16", 4, "ngIf"], ["colspan", "2"], ["class", "complex-panel-compound-field", 3, "hidden", 4, "ngIf", "ngIfElse"], [1, "complex-panel-compound-field", 3, "hidden"], [1, "complex-panel-nested-field", 3, "hidden"], [4, "ngIf"]], template: function ReadComplexFieldCollectionTableComponent_Template(rf, ctx) { if (rf & 1) {
34566
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadComplexFieldCollectionTableComponent, selectors: [["ccd-read-complex-field-collection-table"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 13, vars: 6, consts: [["showEmptyTd", ""], ["SimpleRow", ""], [1, "complex-panel", 3, "hidden"], [1, "complex-panel-title"], [1, "text-16"], ["aria-describedby", "complex panel table", 1, "complex-panel-table"], ["scope", "col", 4, "ngFor", "ngForOf"], [4, "ngFor", "ngForOf"], ["scope", "col"], ["href", "#", 1, "sort-widget", 3, "click", "keyup.enter", "innerHTML"], [1, "new-table-row", "accordion-heading", 3, "keyup", "click"], [2, "float", "right"], ["href", "#", 3, "click"], ["alt", "accordion-img", 1, "accordion-image", 3, "src"], [3, "hidden"], [3, "colSpan"], ["aria-describedby", "complex panel table expanded", 1, "complex-panel-table"], [4, "ngIf", "ngIfElse"], [3, "caseField", "context"], ["class", "complex-panel-simple-field accordion-body", 3, "hidden", 4, "ngIf"], [3, "hidden", 4, "ngIf"], [1, "complex-panel-simple-field", "accordion-body", 3, "hidden"], ["class", "text-16", 4, "ngIf"], ["colspan", "2"], ["class", "complex-panel-compound-field", 3, "hidden", 4, "ngIf", "ngIfElse"], [1, "complex-panel-compound-field", 3, "hidden"], [1, "complex-panel-nested-field", 3, "hidden"], [4, "ngIf"]], template: function ReadComplexFieldCollectionTableComponent_Template(rf, ctx) { if (rf & 1) {
34447
34567
  i0.ɵɵelementStart(0, "div", 2)(1, "dl", 3)(2, "dt")(3, "span", 4);
34448
34568
  i0.ɵɵtext(4);
34449
34569
  i0.ɵɵpipe(5, "rpxTranslate");
@@ -34451,7 +34571,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34451
34571
  i0.ɵɵelement(6, "dd");
34452
34572
  i0.ɵɵelementEnd();
34453
34573
  i0.ɵɵelementStart(7, "table", 5)(8, "tbody")(9, "tr");
34454
- i0.ɵɵtemplate(10, ReadComplexFieldCollectionTableComponent_th_10_Template, 7, 7, "th", 6);
34574
+ i0.ɵɵtemplate(10, ReadComplexFieldCollectionTableComponent_th_10_Template, 6, 7, "th", 6);
34455
34575
  i0.ɵɵelement(11, "th");
34456
34576
  i0.ɵɵelementEnd();
34457
34577
  i0.ɵɵtemplate(12, ReadComplexFieldCollectionTableComponent_ng_container_12_Template, 15, 20, "ng-container", 7);
@@ -34468,7 +34588,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34468
34588
  }
34469
34589
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReadComplexFieldCollectionTableComponent, [{
34470
34590
  type: Component,
34471
- args: [{ selector: 'ccd-read-complex-field-collection-table', standalone: false, template: "<div class=\"complex-panel\" [hidden]=\"caseField.hidden\">\n <dl class=\"complex-panel-title\">\n <dt><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></dt>\n <dd></dd>\n </dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table\">\n <tbody>\n <!-- <COMPLEX table field header>-->\n <tr>\n <th *ngFor=\"let heading of columns\" scope=\"col\">\n <span class=\"text-16\">{{columnsAllLabels[heading].label | rpxTranslate}}</span>\n <a href=\"#\"\n (click)=\"sortRowsByColumns(heading); $event.preventDefault()\"\n (keyup.enter)=\"sortRowsByColumns(heading)\"\n class=\"sort-widget\"\n [attr.aria-label]=\"'Sort ' + columnsAllLabels[heading].label | rpxTranslate\"\n >{{ sortWidget(columnsAllLabels[heading]) }}</a>\n </th>\n <th></th>\n </tr>\n <!-- </COMPLEX table field header>-->\n <ng-container *ngFor=\"let item of rows; let i = index;\">\n <!-- <COMPLEX table collapsed view>-->\n <tr class=\"new-table-row accordion-heading\" (keyup)=\"$event.key === 'Enter' ? (isHidden[i] = !isHidden[i]) : null\" (click)=\"isHidden[i] = !isHidden[i]\"\n [class.last-accordion]=\"isHidden[i]\">\n <ng-container *ngFor=\"let heading of columns\">\n <td class=\"text-16\">\n <div *ngIf=\"item[heading]; else showEmptyTd\">\n <ccd-field-read\n [caseField]=\"toCaseField(heading, item[heading].label, columnsHorizontalLabel[heading].type, item[heading])\"\n [context]=\"context\"></ccd-field-read>\n </div>\n <ng-template #showEmptyTd>\n <div>&nbsp;</div>\n </ng-template>\n </td>\n </ng-container>\n <td>\n <div style=\"float: right;\">\n <a href=\"#\" (click)=\"$event.preventDefault()\"> <img src=\"{{ getImage(i) }}\" alt=\"accordion-img\" class=\"accordion-image\"/></a>\n </div>\n </td>\n </tr>\n <!-- </COMPLEX table collapsed view>-->\n <!-- <COMPLEX table expanded view>-->\n <tr [hidden]=\"isHidden[i]\">\n <td [colSpan]=\"columns.length + 1\">\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table expanded\">\n <tbody>\n <ng-container\n *ngFor=\"let vLabel of columnsVerticalLabel | keyvalue: keepOriginalOrder | ccdCollectionTableCaseFieldsFilter: caseField: rows[i] | ccdReadFieldsFilter:true :undefined :true\">\n <!-- <COMPLEX table expandable body simple field>-->\n <tr class=\"complex-panel-simple-field accordion-body\" *ngIf=\"item[vLabel.id]\" [hidden]=\"vLabel.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{ vLabel.label | rpxTranslate }}</span></th>\n <td *ngIf=\"vLabel['type'] !== 'Complex'\" class=\"text-16\">\n <ccd-field-read [caseField]=\"toCaseField('', vLabel.label, vLabel.field_type, item[vLabel.id])\"\n [context]=\"context\"></ccd-field-read>\n </td>\n </tr>\n <!-- </COMPLEX table expandable body simple field>-->\n\n <!-- <COMPLEX table expandable body complex field>-->\n <tr *ngIf=\"vLabel['type'] === 'Complex' && addCaseFieldValue(vLabel, item[vLabel.id])\" [hidden]=\"vLabel.hidden\">\n <td colspan=\"2\">\n <ng-container *ngFor=\"let caseField of vLabel | ccdReadFieldsFilter:true :undefined :true\">\n <tr class=\"complex-panel-compound-field\" *ngIf=\"(caseField | ccdIsCompound); else SimpleRow\" [hidden]=\"caseField\">\n <td colspan=\"2\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n </tr>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-nested-field\" [hidden]=\"caseField.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></th>\n <td *ngIf=\"!item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n <td *ngIf=\"item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <ccd-read-case-link-field [caseField]=\"addCaseReferenceValue(caseField, item[vLabel.id].CaseReference)\" [context]=\"context\"></ccd-read-case-link-field>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </td>\n </tr>\n <!-- <COMPLEX table expandable body complex field>-->\n </ng-container>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- </COMPLEX table expanded view>-->\n </ng-container>\n </tbody>\n </table>\n</div>\n", styles: [".complex-panel{margin:13px 0;border:1px solid #bfc1c3}.complex-panel .complex-panel-title{background-color:#dee0e2;padding:5px 5px 2px;border-bottom:1px solid #bfc1c3;display:block;color:#0b0c0c;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:16px;line-height:1.25}@media(min-width:641px){.complex-panel .complex-panel-title{font-size:19px;line-height:1.3157894737}}.complex-panel .complex-panel-table>tbody>tr>th{vertical-align:top}.complex-panel .complex-panel-table>tbody>tr:last-child>th{border-bottom:none}.complex-panel .complex-panel-table th{padding-left:5px;font-weight:700;border-bottom:none}.complex-panel .complex-panel-table td{padding-left:5px;padding-top:0;padding-bottom:0;border-bottom:none}.complex-panel .new-table-row{border-top:1px solid #bfc1c3}.complex-panel .complex-panel-simple-field th{padding-left:5px;padding-top:0;padding-bottom:0;width:295px}.complex-panel .complex-panel-nested-field th{padding-left:33px;padding-top:0;padding-bottom:0;width:200px}.complex-panel .complex-panel-compound-field td{padding:5px;border-bottom:none}.sort-widget{cursor:pointer;text-decoration:none;color:#0b0c0c}.accordion-wrapper{margin-bottom:20px}.accordion-wrapper .heading-medium{margin:0}.accordion-wrapper .accordion-heading{border-top:1px solid #bfc1c3;padding-top:20px;padding-bottom:10px;height:20px;cursor:pointer}.accordion-wrapper .accordion-heading .accordion-image{width:25px;margin-right:20px}.accordion-wrapper .accordion-body{margin-top:20px;margin-right:20px}.accordion-wrapper .last-accordion{border-bottom:1px solid #bfc1c3;padding-bottom:30px}\n"] }]
34591
+ args: [{ selector: 'ccd-read-complex-field-collection-table', standalone: false, template: "<div class=\"complex-panel\" [hidden]=\"caseField.hidden\">\n <dl class=\"complex-panel-title\">\n <dt><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></dt>\n <dd></dd>\n </dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table\">\n <tbody>\n <!-- <COMPLEX table field header>-->\n <tr>\n <th *ngFor=\"let heading of columns\" scope=\"col\">\n <span class=\"text-16\">{{columnsAllLabels[heading].label | rpxTranslate}}</span>\n <a href=\"#\"\n (click)=\"sortRowsByColumns(heading); $event.preventDefault()\"\n (keyup.enter)=\"sortRowsByColumns(heading)\"\n class=\"sort-widget\"\n [attr.aria-label]=\"'Sort ' + columnsAllLabels[heading].label | rpxTranslate\"\n [innerHTML]=\"sortWidget(columnsAllLabels[heading])\"></a>\n </th>\n <th></th>\n </tr>\n <!-- </COMPLEX table field header>-->\n <ng-container *ngFor=\"let item of rows; let i = index;\">\n <!-- <COMPLEX table collapsed view>-->\n <tr class=\"new-table-row accordion-heading\" (keyup)=\"$event.key === 'Enter' ? (isHidden[i] = !isHidden[i]) : null\" (click)=\"isHidden[i] = !isHidden[i]\"\n [class.last-accordion]=\"isHidden[i]\">\n <ng-container *ngFor=\"let heading of columns\">\n <td class=\"text-16\">\n <div *ngIf=\"item[heading]; else showEmptyTd\">\n <ccd-field-read\n [caseField]=\"toCaseField(heading, item[heading].label, columnsHorizontalLabel[heading].type, item[heading])\"\n [context]=\"context\"></ccd-field-read>\n </div>\n <ng-template #showEmptyTd>\n <div>&nbsp;</div>\n </ng-template>\n </td>\n </ng-container>\n <td>\n <div style=\"float: right;\">\n <a href=\"#\" (click)=\"$event.preventDefault()\"> <img src=\"{{ getImage(i) }}\" alt=\"accordion-img\" class=\"accordion-image\"/></a>\n </div>\n </td>\n </tr>\n <!-- </COMPLEX table collapsed view>-->\n <!-- <COMPLEX table expanded view>-->\n <tr [hidden]=\"isHidden[i]\">\n <td [colSpan]=\"columns.length + 1\">\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table expanded\">\n <tbody>\n <ng-container\n *ngFor=\"let vLabel of columnsVerticalLabel | keyvalue: keepOriginalOrder | ccdCollectionTableCaseFieldsFilter: caseField: rows[i] | ccdReadFieldsFilter:true :undefined :true\">\n <!-- <COMPLEX table expandable body simple field>-->\n <tr class=\"complex-panel-simple-field accordion-body\" *ngIf=\"item[vLabel.id]\" [hidden]=\"vLabel.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{ vLabel.label | rpxTranslate }}</span></th>\n <td *ngIf=\"vLabel['type'] !== 'Complex'\" class=\"text-16\">\n <ccd-field-read [caseField]=\"toCaseField('', vLabel.label, vLabel.field_type, item[vLabel.id])\"\n [context]=\"context\"></ccd-field-read>\n </td>\n </tr>\n <!-- </COMPLEX table expandable body simple field>-->\n\n <!-- <COMPLEX table expandable body complex field>-->\n <tr *ngIf=\"vLabel['type'] === 'Complex' && addCaseFieldValue(vLabel, item[vLabel.id])\" [hidden]=\"vLabel.hidden\">\n <td colspan=\"2\">\n <ng-container *ngFor=\"let caseField of vLabel | ccdReadFieldsFilter:true :undefined :true\">\n <tr class=\"complex-panel-compound-field\" *ngIf=\"(caseField | ccdIsCompound); else SimpleRow\" [hidden]=\"caseField\">\n <td colspan=\"2\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n </tr>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-nested-field\" [hidden]=\"caseField.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></th>\n <td *ngIf=\"!item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n <td *ngIf=\"item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <ccd-read-case-link-field [caseField]=\"addCaseReferenceValue(caseField, item[vLabel.id].CaseReference)\" [context]=\"context\"></ccd-read-case-link-field>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </td>\n </tr>\n <!-- <COMPLEX table expandable body complex field>-->\n </ng-container>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- </COMPLEX table expanded view>-->\n </ng-container>\n </tbody>\n </table>\n</div>\n", styles: [".complex-panel{margin:13px 0;border:1px solid #bfc1c3}.complex-panel .complex-panel-title{background-color:#dee0e2;padding:5px 5px 2px;border-bottom:1px solid #bfc1c3;display:block;color:#0b0c0c;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:16px;line-height:1.25}@media(min-width:641px){.complex-panel .complex-panel-title{font-size:19px;line-height:1.3157894737}}.complex-panel .complex-panel-table>tbody>tr>th{vertical-align:top}.complex-panel .complex-panel-table>tbody>tr:last-child>th{border-bottom:none}.complex-panel .complex-panel-table th{padding-left:5px;font-weight:700;border-bottom:none}.complex-panel .complex-panel-table td{padding-left:5px;padding-top:0;padding-bottom:0;border-bottom:none}.complex-panel .new-table-row{border-top:1px solid #bfc1c3}.complex-panel .complex-panel-simple-field th{padding-left:5px;padding-top:0;padding-bottom:0;width:295px}.complex-panel .complex-panel-nested-field th{padding-left:33px;padding-top:0;padding-bottom:0;width:200px}.complex-panel .complex-panel-compound-field td{padding:5px;border-bottom:none}.sort-widget{cursor:pointer;text-decoration:none;color:#0b0c0c}.accordion-wrapper{margin-bottom:20px}.accordion-wrapper .heading-medium{margin:0}.accordion-wrapper .accordion-heading{border-top:1px solid #bfc1c3;padding-top:20px;padding-bottom:10px;height:20px;cursor:pointer}.accordion-wrapper .accordion-heading .accordion-image{width:25px;margin-right:20px}.accordion-wrapper .accordion-body{margin-top:20px;margin-right:20px}.accordion-wrapper .last-accordion{border-bottom:1px solid #bfc1c3;padding-bottom:30px}\n"] }]
34472
34592
  }], null, null); })();
34473
34593
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReadComplexFieldCollectionTableComponent, { className: "ReadComplexFieldCollectionTableComponent", filePath: "lib/shared/components/palette/complex/read-complex-field-collection-table.component.ts", lineNumber: 13 }); })();
34474
34594
 
@@ -45172,15 +45292,13 @@ function SearchResultComponent_table_0_th_11_div_5_Template(rf, ctx) { if (rf &
45172
45292
  i0.ɵɵelementStart(0, "div", 28)(1, "a", 29);
45173
45293
  i0.ɵɵpipe(2, "rpxTranslate");
45174
45294
  i0.ɵɵlistener("click", function SearchResultComponent_table_0_th_11_div_5_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r6); const col_r5 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.sort(col_r5); return i0.ɵɵresetView($event.preventDefault()); })("keyup.enter", function SearchResultComponent_table_0_th_11_div_5_Template_a_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r6); const col_r5 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.sort(col_r5)); });
45175
- i0.ɵɵtext(3);
45176
45295
  i0.ɵɵelementEnd()();
45177
45296
  } if (rf & 2) {
45178
45297
  const col_r5 = i0.ɵɵnextContext().$implicit;
45179
45298
  const ctx_r0 = i0.ɵɵnextContext(2);
45180
45299
  i0.ɵɵadvance();
45300
+ i0.ɵɵproperty("innerHTML", ctx_r0.sortWidget(col_r5), i0.ɵɵsanitizeHtml);
45181
45301
  i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(2, 2, "Sort " + col_r5.label));
45182
- i0.ɵɵadvance(2);
45183
- i0.ɵɵtextInterpolate(ctx_r0.sortWidget(col_r5));
45184
45302
  } }
45185
45303
  function SearchResultComponent_table_0_th_11_Template(rf, ctx) { if (rf & 1) {
45186
45304
  const _r4 = i0.ɵɵgetCurrentView();
@@ -45189,7 +45307,7 @@ function SearchResultComponent_table_0_th_11_Template(rf, ctx) { if (rf & 1) {
45189
45307
  i0.ɵɵtext(3);
45190
45308
  i0.ɵɵpipe(4, "rpxTranslate");
45191
45309
  i0.ɵɵelementEnd();
45192
- i0.ɵɵtemplate(5, SearchResultComponent_table_0_th_11_div_5_Template, 4, 4, "div", 27);
45310
+ i0.ɵɵtemplate(5, SearchResultComponent_table_0_th_11_div_5_Template, 3, 4, "div", 27);
45193
45311
  i0.ɵɵelementEnd()();
45194
45312
  } if (rf & 2) {
45195
45313
  const col_r5 = ctx.$implicit;
@@ -45538,7 +45656,7 @@ class SearchResultComponent {
45538
45656
  ngOnInit() {
45539
45657
  if (this.preSelectedCases) {
45540
45658
  for (const preSelectedCase of this.preSelectedCases) {
45541
- if (this.selectedCases && !this.selectedCases.some((aCase) => aCase.case_id === preSelectedCase.case_id)) {
45659
+ if (this.selectedCases && !this.selectedCases.some(aCase => aCase.case_id === preSelectedCase.case_id)) {
45542
45660
  this.selectedCases.push(preSelectedCase);
45543
45661
  }
45544
45662
  }
@@ -45547,7 +45665,7 @@ class SearchResultComponent {
45547
45665
  this.selection.emit(this.selectedCases);
45548
45666
  }
45549
45667
  ngOnChanges(changes) {
45550
- if (changes.resultView) {
45668
+ if (changes['resultView']) {
45551
45669
  this.hideRows = false;
45552
45670
  this.sortParameters = undefined;
45553
45671
  // Clone `resultView` to prevent sorting the external variable
@@ -45562,8 +45680,8 @@ class SearchResultComponent {
45562
45680
  this.hydrateResultView();
45563
45681
  this.draftsCount = this.draftsCount ? this.draftsCount : this.numberOfDrafts();
45564
45682
  }
45565
- if (changes.page) {
45566
- this.selected.page = (changes.page).currentValue;
45683
+ if (changes['page']) {
45684
+ this.selected.page = (changes['page']).currentValue;
45567
45685
  }
45568
45686
  }
45569
45687
  isTranslatable(col) {
@@ -45593,7 +45711,7 @@ class SearchResultComponent {
45593
45711
  selectAll() {
45594
45712
  if (this.allOnPageSelected()) {
45595
45713
  // all cases already selected, so unselect all on this page
45596
- this.resultView.results.forEach((c) => {
45714
+ this.resultView.results.forEach(c => {
45597
45715
  this.selectedCases.forEach((s, i) => {
45598
45716
  if (c.case_id === s.case_id) {
45599
45717
  this.selectedCases.splice(i, 1);
@@ -45602,7 +45720,7 @@ class SearchResultComponent {
45602
45720
  });
45603
45721
  }
45604
45722
  else {
45605
- this.resultView.results.forEach((c) => {
45723
+ this.resultView.results.forEach(c => {
45606
45724
  if (!this.isSelected(c) && this.canBeShared(c)) {
45607
45725
  this.selectedCases.push(c);
45608
45726
  }
@@ -45654,21 +45772,21 @@ class SearchResultComponent {
45654
45772
  */
45655
45773
  // A longer term resolution is to move this piece of logic to the backend
45656
45774
  hydrateResultView() {
45657
- this.resultView.results.forEach((result) => {
45775
+ this.resultView.results.forEach(result => {
45658
45776
  const caseFields = [];
45659
- Object.keys(result.case_fields).forEach((fieldId) => {
45777
+ Object.keys(result.case_fields).forEach(fieldId => {
45660
45778
  const field = result.case_fields[fieldId];
45661
45779
  caseFields.push(Object.assign(new CaseField(), {
45662
45780
  id: fieldId,
45663
45781
  label: null,
45664
45782
  field_type: {},
45665
45783
  value: field,
45666
- display_context: null
45784
+ display_context: null,
45667
45785
  }));
45668
45786
  });
45669
45787
  result.hydrated_case_fields = caseFields;
45670
45788
  result.columns = {};
45671
- this.resultView.columns.forEach((col) => {
45789
+ this.resultView.columns.forEach(col => {
45672
45790
  result.columns[col.case_field_id] = this.buildCaseField(col, result);
45673
45791
  });
45674
45792
  });
@@ -45706,7 +45824,7 @@ class SearchResultComponent {
45706
45824
  field_type: col.case_field_type,
45707
45825
  value: result.case_fields[col.case_field_id],
45708
45826
  display_context_parameter: col.display_context_parameter,
45709
- display_context: col.display_context
45827
+ display_context: col.display_context,
45710
45828
  });
45711
45829
  }
45712
45830
  getColumnsWithPrefix(col, result) {
@@ -45759,7 +45877,7 @@ class SearchResultComponent {
45759
45877
  else {
45760
45878
  condition = this.isSortAscending(column);
45761
45879
  }
45762
- return String.fromCodePoint(condition ? 9660 : 9650);
45880
+ return condition ? '&#9660;' : '&#9650;';
45763
45881
  }
45764
45882
  activityEnabled() {
45765
45883
  return this.activityService.isEnabled;
@@ -45768,13 +45886,19 @@ class SearchResultComponent {
45768
45886
  if (col.case_field_id === '[CASE_REFERENCE]') {
45769
45887
  return this.caseReferencePipe.transform(result.case_fields[col.case_field_id]);
45770
45888
  }
45771
- if (col.id) {
45772
- if (col.id === '[CASE_REFERENCE]') {
45773
- return this.caseReferencePipe.transform(result.case_fields[col.id]);
45889
+ else {
45890
+ if (col.id) {
45891
+ if (col.id === '[CASE_REFERENCE]') {
45892
+ return this.caseReferencePipe.transform(result.case_fields[col.id]);
45893
+ }
45894
+ else {
45895
+ return result.case_fields[col.id];
45896
+ }
45897
+ }
45898
+ else {
45899
+ return result.case_fields[col.case_field_id];
45774
45900
  }
45775
- return result.case_fields[col.id];
45776
45901
  }
45777
- return result.case_fields[col.case_field_id];
45778
45902
  }
45779
45903
  draftPrefixOrGet(col, result) {
45780
45904
  return result.case_id.startsWith(DRAFT_PREFIX) ? DRAFT_PREFIX : this.hyphenateIfCaseReferenceOrGet(col, result);
@@ -45809,7 +45933,7 @@ class SearchResultComponent {
45809
45933
  return currentPage > 1 ? this.draftsCount : 0;
45810
45934
  }
45811
45935
  numberOfDrafts() {
45812
- return this.resultView.results.filter((_) => _.case_id.startsWith(DRAFT_PREFIX)).length;
45936
+ return this.resultView.results.filter(_ => _.case_id.startsWith(DRAFT_PREFIX)).length;
45813
45937
  }
45814
45938
  goToCase(caseId) {
45815
45939
  this.clickCase.emit({
@@ -45826,7 +45950,7 @@ class SearchResultComponent {
45826
45950
  // eslint-disable-next-line @typescript-eslint/no-empty-function
45827
45951
  noop() { }
45828
45952
  static ɵfac = function SearchResultComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SearchResultComponent)(i0.ɵɵdirectiveInject(SearchResultViewItemComparatorFactory), i0.ɵɵdirectiveInject(AbstractAppConfig), i0.ɵɵdirectiveInject(ActivityService), i0.ɵɵdirectiveInject(CaseReferencePipe), i0.ɵɵdirectiveInject(PlaceholderService), i0.ɵɵdirectiveInject(BrowserService), i0.ɵɵdirectiveInject(SessionStorageService)); };
45829
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchResultComponent, selectors: [["ccd-search-result"]], inputs: { caseLinkUrlTemplate: "caseLinkUrlTemplate", jurisdiction: "jurisdiction", caseType: "caseType", caseState: "caseState", caseFilterFG: "caseFilterFG", resultView: "resultView", page: "page", paginationMetadata: "paginationMetadata", metadataFields: "metadataFields", selectionEnabled: "selectionEnabled", showOnlySelected: "showOnlySelected", preSelectedCases: "preSelectedCases", consumerSortingEnabled: "consumerSortingEnabled" }, outputs: { selection: "selection", changePage: "changePage", clickCase: "clickCase", sortHandler: "sortHandler" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 3, consts: [["case_reference", ""], [4, "ngIf"], [3, "visibilityLabel", "autoHide", "maxSize", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel", "pageChange", 4, "ngIf"], ["class", "notification", 4, "ngIf"], ["id", "search-result-heading__text", "tabindex", "-1", 1, "heading-h2"], ["class", "govuk-warning-text pagination-limit-warning", 4, "ngIf"], ["class", "pagination-top", 4, "ngIf"], ["class", "reset-selection", 4, "ngIf"], ["scope", "row"], ["class", "govuk-table__checkbox", 4, "ngIf"], ["class", "search-result-column-header", "scope", "col", 4, "ngFor", "ngForOf"], ["style", "width: 110px;", "scope", "col", 4, "ngIf"], [1, "govuk-warning-text", "pagination-limit-warning"], ["aria-hidden", "true", 1, "govuk-warning-text__icon"], [1, "govuk-warning-text__text"], [1, "govuk-warning-text__assistive"], [1, "pagination-top"], ["id", "search-result-summary__text", 1, "text-16"], [1, "govuk-!-font-weight-bold"], [1, "reset-selection"], ["href", "#", 1, "search-result-reset-link", 3, "click"], [1, "govuk-table__checkbox"], [1, "govuk-checkboxes__item"], ["id", "select-all", "name", "select-all", "type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "checked", "disabled"], ["for", "select-all", 1, "govuk-label", "govuk-checkboxes__label"], ["scope", "col", 1, "search-result-column-header"], [1, "search-result-column-label", 3, "click", "keyup"], ["class", "search-result-column-sort", 4, "ngIf"], [1, "search-result-column-sort"], ["href", "#", 1, "sort-widget", 3, "click", "keyup.enter"], ["scope", "col", 2, "width", "110px"], [4, "ngFor", "ngForOf"], ["class", "govuk-table__checkbox", "scope", "col", 4, "ngIf"], ["class", "search-result-column-cell", "scope", "row", 4, "ngFor", "ngForOf"], ["scope", "col", 1, "govuk-table__checkbox"], ["type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "id", "name", "checked", "disabled"], [1, "govuk-label", "govuk-checkboxes__label", 3, "for"], ["scope", "row", 1, "search-result-column-cell"], ["class", "govuk-link", 3, "routerLink", 4, "ngIf"], ["class", "text-16", 3, "visibility", 4, "ngIf"], [1, "govuk-link", 3, "routerLink"], ["class", "text-16", 4, "ngIf"], [1, "text-16"], ["ccdLabelSubstitutor", "", 3, "caseField", "contextFields", "elementsToSubstitute", 4, "ngIf", "ngIfElse"], ["ccdLabelSubstitutor", "", 3, "caseField", "contextFields", "elementsToSubstitute"], [3, "caseId", "displayMode"], ["type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "keyup", "id", "name", "checked", "disabled"], [3, "pageChange", "visibilityLabel", "autoHide", "maxSize", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], [1, "notification"]], template: function SearchResultComponent_Template(rf, ctx) { if (rf & 1) {
45953
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchResultComponent, selectors: [["ccd-search-result"]], inputs: { caseLinkUrlTemplate: "caseLinkUrlTemplate", jurisdiction: "jurisdiction", caseType: "caseType", caseState: "caseState", caseFilterFG: "caseFilterFG", resultView: "resultView", page: "page", paginationMetadata: "paginationMetadata", metadataFields: "metadataFields", selectionEnabled: "selectionEnabled", showOnlySelected: "showOnlySelected", preSelectedCases: "preSelectedCases", consumerSortingEnabled: "consumerSortingEnabled" }, outputs: { selection: "selection", changePage: "changePage", clickCase: "clickCase", sortHandler: "sortHandler" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 3, consts: [["case_reference", ""], [4, "ngIf"], [3, "visibilityLabel", "autoHide", "maxSize", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel", "pageChange", 4, "ngIf"], ["class", "notification", 4, "ngIf"], ["id", "search-result-heading__text", "tabindex", "-1", 1, "heading-h2"], ["class", "govuk-warning-text pagination-limit-warning", 4, "ngIf"], ["class", "pagination-top", 4, "ngIf"], ["class", "reset-selection", 4, "ngIf"], ["scope", "row"], ["class", "govuk-table__checkbox", 4, "ngIf"], ["class", "search-result-column-header", "scope", "col", 4, "ngFor", "ngForOf"], ["style", "width: 110px;", "scope", "col", 4, "ngIf"], [1, "govuk-warning-text", "pagination-limit-warning"], ["aria-hidden", "true", 1, "govuk-warning-text__icon"], [1, "govuk-warning-text__text"], [1, "govuk-warning-text__assistive"], [1, "pagination-top"], ["id", "search-result-summary__text", 1, "text-16"], [1, "govuk-!-font-weight-bold"], [1, "reset-selection"], ["href", "#", 1, "search-result-reset-link", 3, "click"], [1, "govuk-table__checkbox"], [1, "govuk-checkboxes__item"], ["id", "select-all", "name", "select-all", "type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "checked", "disabled"], ["for", "select-all", 1, "govuk-label", "govuk-checkboxes__label"], ["scope", "col", 1, "search-result-column-header"], [1, "search-result-column-label", 3, "click", "keyup"], ["class", "search-result-column-sort", 4, "ngIf"], [1, "search-result-column-sort"], ["href", "#", 1, "sort-widget", 3, "click", "keyup.enter", "innerHTML"], ["scope", "col", 2, "width", "110px"], [4, "ngFor", "ngForOf"], ["class", "govuk-table__checkbox", "scope", "col", 4, "ngIf"], ["class", "search-result-column-cell", "scope", "row", 4, "ngFor", "ngForOf"], ["scope", "col", 1, "govuk-table__checkbox"], ["type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "id", "name", "checked", "disabled"], [1, "govuk-label", "govuk-checkboxes__label", 3, "for"], ["scope", "row", 1, "search-result-column-cell"], ["class", "govuk-link", 3, "routerLink", 4, "ngIf"], ["class", "text-16", 3, "visibility", 4, "ngIf"], [1, "govuk-link", 3, "routerLink"], ["class", "text-16", 4, "ngIf"], [1, "text-16"], ["ccdLabelSubstitutor", "", 3, "caseField", "contextFields", "elementsToSubstitute", 4, "ngIf", "ngIfElse"], ["ccdLabelSubstitutor", "", 3, "caseField", "contextFields", "elementsToSubstitute"], [3, "caseId", "displayMode"], ["type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "keyup", "id", "name", "checked", "disabled"], [3, "pageChange", "visibilityLabel", "autoHide", "maxSize", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], [1, "notification"]], template: function SearchResultComponent_Template(rf, ctx) { if (rf & 1) {
45830
45954
  i0.ɵɵtemplate(0, SearchResultComponent_table_0_Template, 16, 11, "table", 1)(1, SearchResultComponent_ccd_pagination_1_Template, 1, 6, "ccd-pagination", 2)(2, SearchResultComponent_div_2_Template, 4, 6, "div", 3);
45831
45955
  } if (rf & 2) {
45832
45956
  i0.ɵɵproperty("ngIf", ctx.hasResults() || ctx.hasDrafts());
@@ -45838,7 +45962,7 @@ class SearchResultComponent {
45838
45962
  }
45839
45963
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchResultComponent, [{
45840
45964
  type: Component,
45841
- args: [{ selector: 'ccd-search-result', standalone: false, template: "<table *ngIf=\"hasResults() || hasDrafts()\">\n <caption>\n <h2 class=\"heading-h2\" id=\"search-result-heading__text\" tabindex=\"-1\">{{ (caseState ? 'Your cases' : 'Search result') | rpxTranslate}}</h2>\n\n <div class=\"govuk-warning-text pagination-limit-warning\" *ngIf=\"paginationLimitEnforced\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">{{'Warning' | rpxTranslate}}</span>\n {{'The total size of the result set is' | rpxTranslate}} {{paginationMetadata.totalResultsCount | number}}. {{'Only the first 10,000 records are available for display.' | rpxTranslate}}\n </strong>\n </div>\n\n <div *ngIf=\"(hasResults() || hasDrafts())\" class=\"pagination-top\">\n <output [attr.aria-label]=\"getTotalResults() + ' ' + ('results have been found' | rpxTranslate)\"></output>\n <span class=\"text-16\" id=\"search-result-summary__text\">{{'Showing' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getFirstResult() }}</span>\n {{'to' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getLastResult() }}</span>\n {{'of' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getTotalResults() }}</span> {{'results' | rpxTranslate}}</span>\n </div>\n <div *ngIf=\"(hasResults() || hasDrafts()) && selectionEnabled\" class=\"reset-selection\"\n [attr.aria-label]=\"'Reset selection' | rpxTranslate\">\n <span><a class=\"search-result-reset-link\" href=\"#\" (click)=\"clearSelection(); $event.preventDefault()\">{{'Reset case selection' | rpxTranslate}}</a></span>\n </div>\n </caption>\n <thead>\n <tr scope=\"row\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-all\" name=\"select-all\" type=\"checkbox\" (change)=\"selectAll()\" [checked]=\"allOnPageSelected()\" [disabled]=\"!canAnyBeShared()\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-all\" [attr.aria-labelledby]=\"'select-all'\">\n </label>\n </div>\n </td>\n <th *ngFor=\"let col of resultView.columns\" class=\"search-result-column-header\"\n [attr.aria-sort]=\"isSortAscending(col) === null ? null : (isSortAscending(col) ? 'ascending' : 'descending')\" scope=\"col\">\n <div>\n <div class=\"search-result-column-label\" (click)=\"sort(col)\" (keyup)=\"noop()\">\n {{ isTranslatable(col) ? (col.label | rpxTranslate) : col.label }}\n </div>\n <div *ngIf=\"comparator(col)\" class=\"search-result-column-sort\">\n <a (click)=\"sort(col); $event.preventDefault()\" (keyup.enter)=\"sort(col)\" class=\"sort-widget\" [attr.aria-label]=\"'Sort ' + col.label | rpxTranslate\" href=\"#\">{{ sortWidget(col) }}</a>\n </div>\n </div>\n </th>\n <th *ngIf=\"activityEnabled()\" style=\"width: 110px;\" scope=\"col\">&ZeroWidthSpace;</th>\n </tr>\n </thead>\n\n <tbody>\n <!-- sorted by consumer -->\n <ng-container *ngIf=\"consumerSortingEnabled\">\n <tr *ngFor=\"let result of resultView.results | paginate: { itemsPerPage: paginationPageSize, currentPage: selected.page, totalItems: resultTotal }\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ result.case_id }}\" name=\"select-{{ result.case_id }}\"\n type=\"checkbox\" (change)=\"changeSelection(result)\" [checked]=\"isSelected(result)\" [disabled]=\"!canBeShared(result)\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ result.case_id }}\" [attr.aria-labelledby]=\"'select-' + result.case_id\">\n </label>\n </div>\n </td>\n <td class=\"search-result-column-cell\" *ngFor=\"let col of resultView.columns; let colIndex = index\" scope=\"row\">\n <a *ngIf=\"colIndex == 0\" [routerLink]=\"prepareCaseLinkUrl(result.case_id)\"\n attr.aria-label=\"go to case with Case reference:{{ result.case_id | ccdCaseReference }}\" class=\"govuk-link\">\n <ng-container class=\"text-16\" *ngIf=\"!hideRows\">\n <ccd-field-read *ngIf=\"draftPrefixOrGet(col, result); else case_reference\"\n ccdLabelSubstitutor [caseField]=\"getColumnsWithPrefix(result.columns[col.case_field_id], result)\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n <ng-template #case_reference>{{result.case_id | ccdCaseReference}}</ng-template>\n </ng-container>\n </a>\n <div *ngIf=\"colIndex != 0\" class=\"text-16\" [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-field-read ccdLabelSubstitutor\n [caseField]=\"result.columns[col.case_field_id]\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n </div>\n </td>\n <td *ngIf=\"activityEnabled()\">\n <div [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-activity [caseId]=\"result.case_id\" [displayMode]=\"ICON\"></ccd-activity>\n </div>\n </td>\n </tr>\n </ng-container>\n <!-- sorted by toolkit -->\n <ng-container *ngIf=\"!consumerSortingEnabled\">\n <tr *ngFor=\"let result of resultView.results | ccdSortSearchResult : sortParameters | paginate: { itemsPerPage: paginationPageSize, currentPage: selected.page, totalItems: resultTotal }\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ result.case_id }}\" name=\"select-{{ result.case_id }}\"\n type=\"checkbox\" (change)=\"changeSelection(result)\" [checked]=\"isSelected(result)\" [disabled]=\"!canBeShared(result)\" (keyup)=\"onKeyUp($event, result)\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ result.case_id }}\" [attr.aria-labelledby]=\"'select-' + result.case_id\">\n </label>\n </div>\n </td>\n <td class=\"search-result-column-cell\" *ngFor=\"let col of resultView.columns; let colIndex = index\" scope=\"row\">\n\n <a *ngIf=\"colIndex == 0\" [routerLink]=\"prepareCaseLinkUrl(result.case_id)\"\n attr.aria-label=\"go to case with Case reference:{{ result.case_id | ccdCaseReference }}\" class=\"govuk-link\">\n <ng-container class=\"text-16\" *ngIf=\"!hideRows\">\n <ccd-field-read *ngIf=\"draftPrefixOrGet(col, result); else case_reference\"\n ccdLabelSubstitutor [caseField]=\"getColumnsWithPrefix(result.columns[col.case_field_id], result)\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n <ng-template #case_reference>{{result.case_id | ccdCaseReference}}</ng-template>\n </ng-container>\n </a>\n <div *ngIf=\"colIndex != 0\" class=\"text-16\" [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-field-read ccdLabelSubstitutor\n [caseField]=\"result.columns[col.case_field_id]\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n </div>\n </td>\n <td *ngIf=\"activityEnabled()\">\n <div [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-activity [caseId]=\"result.case_id\" [displayMode]=\"ICON\"></ccd-activity>\n </div>\n </td>\n </tr>\n </ng-container>\n\n </tbody>\n</table>\n\n<ccd-pagination\n *ngIf=\"hasResults()\"\n (pageChange)=\"goToPage($event)\"\n [visibilityLabel]=\"hideRows ? 'hidden' : 'visible'\"\n [autoHide]=\"true\"\n [maxSize]=\"8\"\n [screenReaderPaginationLabel]=\"'Pagination'\"\n [screenReaderPageLabel]=\"page\"\n [screenReaderCurrentLabel]=\"'You\\'re on page'\"></ccd-pagination>\n\n<div *ngIf=\"!(hasResults() || hasDrafts())\" class=\"notification\"\n[attr.aria-describedby]=\"'No cases found. Try using different filters.' | rpxTranslate\">\n{{'No cases found. Try using different filters.' | rpxTranslate}}\n</div>\n", styles: ["table thead tr th{vertical-align:top}table tbody tr td{font-size:16px;word-wrap:break-word}table tbody tr td a{float:left}table .caseid-col{white-space:nowrap}.notification{text-align:center;padding:30px 0;margin-top:75px}a:hover{color:#005ea5}.search-result-reset-link{padding-right:15px;padding-left:15px}.search-result-column-header{width:unset;table-layout:normal}.search-result-column-header div{display:table-cell;width:auto}@media screen and (max-width:379px){.search-result-column-header div{display:block;float:right}}.search-result-column-label{font-size:16px;font-weight:700;word-wrap:break-word;cursor:pointer;padding-right:15px}.search-result-column-sort{font-size:16px}.sort-widget{cursor:pointer;text-decoration:none;color:#231f20}span.heading-medium{margin-top:-20px}.govuk-table__checkbox{vertical-align:middle;padding-left:3px}#search-result-heading__text:focus{outline:none}\n"] }]
45965
+ args: [{ selector: 'ccd-search-result', standalone: false, template: "<table *ngIf=\"hasResults() || hasDrafts()\">\n <caption>\n <h2 class=\"heading-h2\" id=\"search-result-heading__text\" tabindex=\"-1\">{{ (caseState ? 'Your cases' : 'Search result') | rpxTranslate}}</h2>\n\n <div class=\"govuk-warning-text pagination-limit-warning\" *ngIf=\"paginationLimitEnforced\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">{{'Warning' | rpxTranslate}}</span>\n {{'The total size of the result set is' | rpxTranslate}} {{paginationMetadata.totalResultsCount | number}}. {{'Only the first 10,000 records are available for display.' | rpxTranslate}}\n </strong>\n </div>\n\n <div *ngIf=\"(hasResults() || hasDrafts())\" class=\"pagination-top\">\n <output [attr.aria-label]=\"getTotalResults() + ' ' + ('results have been found' | rpxTranslate)\"></output>\n <span class=\"text-16\" id=\"search-result-summary__text\">{{'Showing' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getFirstResult() }}</span>\n {{'to' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getLastResult() }}</span>\n {{'of' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getTotalResults() }}</span> {{'results' | rpxTranslate}}</span>\n </div>\n <div *ngIf=\"(hasResults() || hasDrafts()) && selectionEnabled\" class=\"reset-selection\"\n [attr.aria-label]=\"'Reset selection' | rpxTranslate\">\n <span><a class=\"search-result-reset-link\" href=\"#\" (click)=\"clearSelection(); $event.preventDefault()\">{{'Reset case selection' | rpxTranslate}}</a></span>\n </div>\n </caption>\n <thead>\n <tr scope=\"row\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-all\" name=\"select-all\" type=\"checkbox\" (change)=\"selectAll()\" [checked]=\"allOnPageSelected()\" [disabled]=\"!canAnyBeShared()\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-all\" [attr.aria-labelledby]=\"'select-all'\">\n </label>\n </div>\n </td>\n <th *ngFor=\"let col of resultView.columns\" class=\"search-result-column-header\"\n [attr.aria-sort]=\"isSortAscending(col) === null ? null : (isSortAscending(col) ? 'ascending' : 'descending')\" scope=\"col\">\n <div>\n <div class=\"search-result-column-label\" (click)=\"sort(col)\" (keyup)=\"noop()\">\n {{ isTranslatable(col) ? (col.label | rpxTranslate) : col.label }}\n </div>\n <div *ngIf=\"comparator(col)\" class=\"search-result-column-sort\">\n <a (click)=\"sort(col); $event.preventDefault()\" (keyup.enter)=\"sort(col)\" class=\"sort-widget\" [innerHTML]=\"sortWidget(col)\" [attr.aria-label]=\"'Sort ' + col.label | rpxTranslate\" href=\"#\"></a>\n </div>\n </div>\n </th>\n <th *ngIf=\"activityEnabled()\" style=\"width: 110px;\" scope=\"col\">&ZeroWidthSpace;</th>\n </tr>\n </thead>\n\n <tbody>\n <!-- sorted by consumer -->\n <ng-container *ngIf=\"consumerSortingEnabled\">\n <tr *ngFor=\"let result of resultView.results | paginate: { itemsPerPage: paginationPageSize, currentPage: selected.page, totalItems: resultTotal }\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ result.case_id }}\" name=\"select-{{ result.case_id }}\"\n type=\"checkbox\" (change)=\"changeSelection(result)\" [checked]=\"isSelected(result)\" [disabled]=\"!canBeShared(result)\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ result.case_id }}\" [attr.aria-labelledby]=\"'select-' + result.case_id\">\n </label>\n </div>\n </td>\n <td class=\"search-result-column-cell\" *ngFor=\"let col of resultView.columns; let colIndex = index\" scope=\"row\">\n <a *ngIf=\"colIndex == 0\" [routerLink]=\"prepareCaseLinkUrl(result.case_id)\"\n attr.aria-label=\"go to case with Case reference:{{ result.case_id | ccdCaseReference }}\" class=\"govuk-link\">\n <ng-container class=\"text-16\" *ngIf=\"!hideRows\">\n <ccd-field-read *ngIf=\"draftPrefixOrGet(col, result); else case_reference\"\n ccdLabelSubstitutor [caseField]=\"getColumnsWithPrefix(result.columns[col.case_field_id], result)\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n <ng-template #case_reference>{{result.case_id | ccdCaseReference}}</ng-template>\n </ng-container>\n </a>\n <div *ngIf=\"colIndex != 0\" class=\"text-16\" [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-field-read ccdLabelSubstitutor\n [caseField]=\"result.columns[col.case_field_id]\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n </div>\n </td>\n <td *ngIf=\"activityEnabled()\">\n <div [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-activity [caseId]=\"result.case_id\" [displayMode]=\"ICON\"></ccd-activity>\n </div>\n </td>\n </tr>\n </ng-container>\n <!-- sorted by toolkit -->\n <ng-container *ngIf=\"!consumerSortingEnabled\">\n <tr *ngFor=\"let result of resultView.results | ccdSortSearchResult : sortParameters | paginate: { itemsPerPage: paginationPageSize, currentPage: selected.page, totalItems: resultTotal }\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ result.case_id }}\" name=\"select-{{ result.case_id }}\"\n type=\"checkbox\" (change)=\"changeSelection(result)\" [checked]=\"isSelected(result)\" [disabled]=\"!canBeShared(result)\" (keyup)=\"onKeyUp($event, result)\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ result.case_id }}\" [attr.aria-labelledby]=\"'select-' + result.case_id\">\n </label>\n </div>\n </td>\n <td class=\"search-result-column-cell\" *ngFor=\"let col of resultView.columns; let colIndex = index\" scope=\"row\">\n\n <a *ngIf=\"colIndex == 0\" [routerLink]=\"prepareCaseLinkUrl(result.case_id)\"\n attr.aria-label=\"go to case with Case reference:{{ result.case_id | ccdCaseReference }}\" class=\"govuk-link\">\n <ng-container class=\"text-16\" *ngIf=\"!hideRows\">\n <ccd-field-read *ngIf=\"draftPrefixOrGet(col, result); else case_reference\"\n ccdLabelSubstitutor [caseField]=\"getColumnsWithPrefix(result.columns[col.case_field_id], result)\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n <ng-template #case_reference>{{result.case_id | ccdCaseReference}}</ng-template>\n </ng-container>\n </a>\n <div *ngIf=\"colIndex != 0\" class=\"text-16\" [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-field-read ccdLabelSubstitutor\n [caseField]=\"result.columns[col.case_field_id]\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n </div>\n </td>\n <td *ngIf=\"activityEnabled()\">\n <div [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-activity [caseId]=\"result.case_id\" [displayMode]=\"ICON\"></ccd-activity>\n </div>\n </td>\n </tr>\n </ng-container>\n\n </tbody>\n</table>\n\n<ccd-pagination\n *ngIf=\"hasResults()\"\n (pageChange)=\"goToPage($event)\"\n [visibilityLabel]=\"hideRows ? 'hidden' : 'visible'\"\n [autoHide]=\"true\"\n [maxSize]=\"8\"\n [screenReaderPaginationLabel]=\"'Pagination'\"\n [screenReaderPageLabel]=\"page\"\n [screenReaderCurrentLabel]=\"'You\\'re on page'\"></ccd-pagination>\n\n<div *ngIf=\"!(hasResults() || hasDrafts())\" class=\"notification\"\n[attr.aria-describedby]=\"'No cases found. Try using different filters.' | rpxTranslate\">\n{{'No cases found. Try using different filters.' | rpxTranslate}}\n</div>\n", styles: ["table thead tr th{vertical-align:top}table tbody tr td{font-size:16px;word-wrap:break-word}table tbody tr td a{float:left}table .caseid-col{white-space:nowrap}.notification{text-align:center;padding:30px 0;margin-top:75px}a:hover{color:#005ea5}.search-result-reset-link{padding-right:15px;padding-left:15px}.search-result-column-header{width:unset;table-layout:normal}.search-result-column-header div{display:table-cell;width:auto}@media screen and (max-width:379px){.search-result-column-header div{display:block;float:right}}.search-result-column-label{font-size:16px;font-weight:700;word-wrap:break-word;cursor:pointer;padding-right:15px}.search-result-column-sort{font-size:16px}.sort-widget{cursor:pointer;text-decoration:none;color:#231f20}span.heading-medium{margin-top:-20px}.govuk-table__checkbox{vertical-align:middle;padding-left:3px}#search-result-heading__text:focus{outline:none}\n"] }]
45842
45966
  }], () => [{ type: SearchResultViewItemComparatorFactory }, { type: AbstractAppConfig }, { type: ActivityService }, { type: CaseReferencePipe }, { type: PlaceholderService }, { type: BrowserService }, { type: SessionStorageService }], { caseLinkUrlTemplate: [{
45843
45967
  type: Input
45844
45968
  }], jurisdiction: [{