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

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
@@ -14132,57 +14132,67 @@ class WriteComplexFieldComponent extends AbstractFieldWriteComponent {
14132
14132
  const _c0$$ = ["writeComplexFieldComponent"];
14133
14133
  const _c1$q = a0 => ({ "form-group-error": a0 });
14134
14134
  const _c2$4 = a0 => ({ "govuk-input--error": a0 });
14135
- function WriteAddressFieldComponent_div_1_div_4_span_5_Template(rf, ctx) { if (rf & 1) {
14136
- i0.ɵɵelementStart(0, "span", 14);
14135
+ function WriteAddressFieldComponent_div_1_span_4_Template(rf, ctx) { if (rf & 1) {
14136
+ i0.ɵɵelementStart(0, "span", 9);
14137
+ i0.ɵɵelement(1, "ccd-markdown", 10);
14138
+ i0.ɵɵpipe(2, "rpxTranslate");
14139
+ i0.ɵɵelementEnd();
14140
+ } if (rf & 2) {
14141
+ const ctx_r0 = i0.ɵɵnextContext(2);
14142
+ i0.ɵɵadvance();
14143
+ i0.ɵɵproperty("content", i0.ɵɵpipeBind1(2, 1, ctx_r0.caseField.hint_text));
14144
+ } }
14145
+ function WriteAddressFieldComponent_div_1_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
14146
+ i0.ɵɵelementStart(0, "span", 17);
14137
14147
  i0.ɵɵtext(1);
14138
14148
  i0.ɵɵpipe(2, "rpxTranslate");
14139
14149
  i0.ɵɵelementEnd();
14140
14150
  } if (rf & 2) {
14141
- const ctx_r1 = i0.ɵɵnextContext(3);
14151
+ const ctx_r0 = i0.ɵɵnextContext(3);
14142
14152
  i0.ɵɵadvance();
14143
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, ctx_r1.errorMessage));
14153
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, ctx_r0.errorMessage));
14144
14154
  } }
14145
- function WriteAddressFieldComponent_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
14146
- const _r1 = i0.ɵɵgetCurrentView();
14147
- i0.ɵɵelementStart(0, "div", 8)(1, "label", 9)(2, "span", 10);
14155
+ function WriteAddressFieldComponent_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
14156
+ const _r2 = i0.ɵɵgetCurrentView();
14157
+ i0.ɵɵelementStart(0, "div", 11)(1, "label", 12)(2, "span", 13);
14148
14158
  i0.ɵɵtext(3);
14149
14159
  i0.ɵɵpipe(4, "rpxTranslate");
14150
14160
  i0.ɵɵelementEnd()();
14151
- i0.ɵɵtemplate(5, WriteAddressFieldComponent_div_1_div_4_span_5_Template, 3, 3, "span", 11);
14152
- i0.ɵɵelement(6, "input", 12);
14153
- i0.ɵɵelementStart(7, "button", 13);
14154
- i0.ɵɵlistener("click", function WriteAddressFieldComponent_div_1_div_4_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.findAddress()); });
14161
+ i0.ɵɵtemplate(5, WriteAddressFieldComponent_div_1_div_5_span_5_Template, 3, 3, "span", 14);
14162
+ i0.ɵɵelement(6, "input", 15);
14163
+ i0.ɵɵelementStart(7, "button", 16);
14164
+ i0.ɵɵlistener("click", function WriteAddressFieldComponent_div_1_div_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.findAddress()); });
14155
14165
  i0.ɵɵtext(8);
14156
14166
  i0.ɵɵpipe(9, "rpxTranslate");
14157
14167
  i0.ɵɵelementEnd()();
14158
14168
  } if (rf & 2) {
14159
- const ctx_r1 = i0.ɵɵnextContext(2);
14160
- i0.ɵɵproperty("id", ctx_r1.createElementId("postcodeLookup"))("ngClass", i0.ɵɵpureFunction1(14, _c1$q, ctx_r1.missingPostcode));
14169
+ const ctx_r0 = i0.ɵɵnextContext(2);
14170
+ i0.ɵɵproperty("id", ctx_r0.createElementId("postcodeLookup"))("ngClass", i0.ɵɵpureFunction1(14, _c1$q, ctx_r0.missingPostcode));
14161
14171
  i0.ɵɵadvance();
14162
- i0.ɵɵproperty("for", ctx_r1.createElementId("postcodeInput"));
14172
+ i0.ɵɵproperty("for", ctx_r0.createElementId("postcodeInput"));
14163
14173
  i0.ɵɵadvance(2);
14164
14174
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 10, "Enter a UK postcode"));
14165
14175
  i0.ɵɵadvance(2);
14166
- i0.ɵɵproperty("ngIf", ctx_r1.missingPostcode);
14176
+ i0.ɵɵproperty("ngIf", ctx_r0.missingPostcode);
14167
14177
  i0.ɵɵadvance();
14168
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(16, _c2$4, ctx_r1.missingPostcode))("id", ctx_r1.createElementId("postcodeInput"))("formControl", ctx_r1.postcode);
14178
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(16, _c2$4, ctx_r0.missingPostcode))("id", ctx_r0.createElementId("postcodeInput"))("formControl", ctx_r0.postcode);
14169
14179
  i0.ɵɵadvance();
14170
- i0.ɵɵproperty("disabled", ctx_r1.loadingAddresses);
14180
+ i0.ɵɵproperty("disabled", ctx_r0.loadingAddresses);
14171
14181
  i0.ɵɵadvance();
14172
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 12, ctx_r1.loadingAddresses ? "Finding addresses..." : "Find address"), " ");
14182
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 12, ctx_r0.loadingAddresses ? "Finding addresses..." : "Find address"), " ");
14173
14183
  } }
14174
- function WriteAddressFieldComponent_div_1_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
14175
- i0.ɵɵelementStart(0, "span", 14);
14184
+ function WriteAddressFieldComponent_div_1_div_6_span_5_Template(rf, ctx) { if (rf & 1) {
14185
+ i0.ɵɵelementStart(0, "span", 17);
14176
14186
  i0.ɵɵtext(1);
14177
14187
  i0.ɵɵpipe(2, "rpxTranslate");
14178
14188
  i0.ɵɵelementEnd();
14179
14189
  } if (rf & 2) {
14180
- const ctx_r1 = i0.ɵɵnextContext(3);
14190
+ const ctx_r0 = i0.ɵɵnextContext(3);
14181
14191
  i0.ɵɵadvance();
14182
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, ctx_r1.errorMessage));
14192
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, ctx_r0.errorMessage));
14183
14193
  } }
14184
- function WriteAddressFieldComponent_div_1_div_5_option_7_Template(rf, ctx) { if (rf & 1) {
14185
- i0.ɵɵelementStart(0, "option", 19);
14194
+ function WriteAddressFieldComponent_div_1_div_6_option_7_Template(rf, ctx) { if (rf & 1) {
14195
+ i0.ɵɵelementStart(0, "option", 22);
14186
14196
  i0.ɵɵtext(1);
14187
14197
  i0.ɵɵpipe(2, "rpxTranslate");
14188
14198
  i0.ɵɵelementEnd();
@@ -14191,19 +14201,19 @@ function WriteAddressFieldComponent_div_1_div_5_option_7_Template(rf, ctx) { if
14191
14201
  i0.ɵɵadvance();
14192
14202
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "No address found"), " ");
14193
14203
  } }
14194
- function WriteAddressFieldComponent_div_1_div_5_option_8_Template(rf, ctx) { if (rf & 1) {
14195
- i0.ɵɵelementStart(0, "option", 19);
14204
+ function WriteAddressFieldComponent_div_1_div_6_option_8_Template(rf, ctx) { if (rf & 1) {
14205
+ i0.ɵɵelementStart(0, "option", 22);
14196
14206
  i0.ɵɵtext(1);
14197
14207
  i0.ɵɵpipe(2, "rpxTranslate");
14198
14208
  i0.ɵɵelementEnd();
14199
14209
  } if (rf & 2) {
14200
- const ctx_r1 = i0.ɵɵnextContext(3);
14210
+ const ctx_r0 = i0.ɵɵnextContext(3);
14201
14211
  i0.ɵɵproperty("ngValue", undefined);
14202
14212
  i0.ɵɵadvance();
14203
- i0.ɵɵtextInterpolate2(" ", ctx_r1.addressOptions.length, " ", i0.ɵɵpipeBind1(2, 3, ctx_r1.addressOptions.length === 1 ? "address found" : "addresses found"), " ");
14213
+ i0.ɵɵtextInterpolate2(" ", ctx_r0.addressOptions.length, " ", i0.ɵɵpipeBind1(2, 3, ctx_r0.addressOptions.length === 1 ? "address found" : "addresses found"), " ");
14204
14214
  } }
14205
- function WriteAddressFieldComponent_div_1_div_5_option_9_Template(rf, ctx) { if (rf & 1) {
14206
- i0.ɵɵelementStart(0, "option", 19);
14215
+ function WriteAddressFieldComponent_div_1_div_6_option_9_Template(rf, ctx) { if (rf & 1) {
14216
+ i0.ɵɵelementStart(0, "option", 22);
14207
14217
  i0.ɵɵtext(1);
14208
14218
  i0.ɵɵelementEnd();
14209
14219
  } if (rf & 2) {
@@ -14212,39 +14222,39 @@ function WriteAddressFieldComponent_div_1_div_5_option_9_Template(rf, ctx) { if
14212
14222
  i0.ɵɵadvance();
14213
14223
  i0.ɵɵtextInterpolate1(" ", addressOption_r4.description, " ");
14214
14224
  } }
14215
- function WriteAddressFieldComponent_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
14225
+ function WriteAddressFieldComponent_div_1_div_6_Template(rf, ctx) { if (rf & 1) {
14216
14226
  const _r3 = i0.ɵɵgetCurrentView();
14217
- i0.ɵɵelementStart(0, "div", 15)(1, "label", 9)(2, "span", 10);
14227
+ i0.ɵɵelementStart(0, "div", 18)(1, "label", 12)(2, "span", 13);
14218
14228
  i0.ɵɵtext(3);
14219
14229
  i0.ɵɵpipe(4, "rpxTranslate");
14220
14230
  i0.ɵɵelementEnd()();
14221
- i0.ɵɵtemplate(5, WriteAddressFieldComponent_div_1_div_5_span_5_Template, 3, 3, "span", 11);
14222
- i0.ɵɵelementStart(6, "select", 16);
14223
- i0.ɵɵlistener("change", function WriteAddressFieldComponent_div_1_div_5_Template_select_change_6_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.addressSelected()); });
14224
- i0.ɵɵtemplate(7, WriteAddressFieldComponent_div_1_div_5_option_7_Template, 3, 4, "option", 17)(8, WriteAddressFieldComponent_div_1_div_5_option_8_Template, 3, 5, "option", 17)(9, WriteAddressFieldComponent_div_1_div_5_option_9_Template, 2, 2, "option", 18);
14231
+ i0.ɵɵtemplate(5, WriteAddressFieldComponent_div_1_div_6_span_5_Template, 3, 3, "span", 14);
14232
+ i0.ɵɵelementStart(6, "select", 19);
14233
+ i0.ɵɵlistener("change", function WriteAddressFieldComponent_div_1_div_6_Template_select_change_6_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.addressSelected()); });
14234
+ i0.ɵɵtemplate(7, WriteAddressFieldComponent_div_1_div_6_option_7_Template, 3, 4, "option", 20)(8, WriteAddressFieldComponent_div_1_div_6_option_8_Template, 3, 5, "option", 20)(9, WriteAddressFieldComponent_div_1_div_6_option_9_Template, 2, 2, "option", 21);
14225
14235
  i0.ɵɵelementEnd()();
14226
14236
  } if (rf & 2) {
14227
- const ctx_r1 = i0.ɵɵnextContext(2);
14228
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c1$q, ctx_r1.noAddressSelected));
14237
+ const ctx_r0 = i0.ɵɵnextContext(2);
14238
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c1$q, ctx_r0.noAddressSelected));
14229
14239
  i0.ɵɵadvance();
14230
- i0.ɵɵproperty("for", ctx_r1.createElementId("addressList"));
14240
+ i0.ɵɵproperty("for", ctx_r0.createElementId("addressList"));
14231
14241
  i0.ɵɵadvance(2);
14232
14242
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 9, "Select an address"));
14233
14243
  i0.ɵɵadvance(2);
14234
- i0.ɵɵproperty("ngIf", ctx_r1.noAddressSelected);
14244
+ i0.ɵɵproperty("ngIf", ctx_r0.noAddressSelected);
14235
14245
  i0.ɵɵadvance();
14236
- i0.ɵɵproperty("id", ctx_r1.createElementId("addressList"))("formControl", ctx_r1.addressList);
14246
+ i0.ɵɵproperty("id", ctx_r0.createElementId("addressList"))("formControl", ctx_r0.addressList);
14237
14247
  i0.ɵɵadvance();
14238
- i0.ɵɵproperty("ngIf", ctx_r1.addressOptions.length === 0);
14248
+ i0.ɵɵproperty("ngIf", ctx_r0.addressOptions.length === 0);
14239
14249
  i0.ɵɵadvance();
14240
- i0.ɵɵproperty("ngIf", ctx_r1.addressOptions.length > 0);
14250
+ i0.ɵɵproperty("ngIf", ctx_r0.addressOptions.length > 0);
14241
14251
  i0.ɵɵadvance();
14242
- i0.ɵɵproperty("ngForOf", ctx_r1.addressOptions);
14252
+ i0.ɵɵproperty("ngForOf", ctx_r0.addressOptions);
14243
14253
  } }
14244
- function WriteAddressFieldComponent_div_1_a_6_Template(rf, ctx) { if (rf & 1) {
14254
+ function WriteAddressFieldComponent_div_1_a_7_Template(rf, ctx) { if (rf & 1) {
14245
14255
  const _r5 = i0.ɵɵgetCurrentView();
14246
- i0.ɵɵelementStart(0, "a", 20);
14247
- i0.ɵɵlistener("click", function WriteAddressFieldComponent_div_1_a_6_Template_a_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.blankAddress(); return i0.ɵɵresetView($event.preventDefault()); });
14256
+ i0.ɵɵelementStart(0, "a", 23);
14257
+ i0.ɵɵlistener("click", function WriteAddressFieldComponent_div_1_a_7_Template_a_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.blankAddress(); return i0.ɵɵresetView($event.preventDefault()); });
14248
14258
  i0.ɵɵtext(1);
14249
14259
  i0.ɵɵpipe(2, "rpxTranslate");
14250
14260
  i0.ɵɵelementEnd();
@@ -14257,18 +14267,20 @@ function WriteAddressFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
14257
14267
  i0.ɵɵtext(2);
14258
14268
  i0.ɵɵpipe(3, "ccdFieldLabel");
14259
14269
  i0.ɵɵelementEnd();
14260
- i0.ɵɵtemplate(4, WriteAddressFieldComponent_div_1_div_4_Template, 10, 18, "div", 5)(5, WriteAddressFieldComponent_div_1_div_5_Template, 10, 13, "div", 6)(6, WriteAddressFieldComponent_div_1_a_6_Template, 3, 3, "a", 7);
14270
+ i0.ɵɵtemplate(4, WriteAddressFieldComponent_div_1_span_4_Template, 3, 3, "span", 5)(5, WriteAddressFieldComponent_div_1_div_5_Template, 10, 18, "div", 6)(6, WriteAddressFieldComponent_div_1_div_6_Template, 10, 13, "div", 7)(7, WriteAddressFieldComponent_div_1_a_7_Template, 3, 3, "a", 8);
14261
14271
  i0.ɵɵelementEnd();
14262
14272
  } if (rf & 2) {
14263
- const ctx_r1 = i0.ɵɵnextContext();
14273
+ const ctx_r0 = i0.ɵɵnextContext();
14264
14274
  i0.ɵɵadvance(2);
14265
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, ctx_r1.caseField));
14275
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 5, ctx_r0.caseField));
14266
14276
  i0.ɵɵadvance(2);
14267
- i0.ɵɵproperty("ngIf", !ctx_r1.isExpanded);
14277
+ i0.ɵɵproperty("ngIf", ctx_r0.caseField.hint_text);
14278
+ i0.ɵɵadvance();
14279
+ i0.ɵɵproperty("ngIf", !ctx_r0.isExpanded);
14268
14280
  i0.ɵɵadvance();
14269
- i0.ɵɵproperty("ngIf", ctx_r1.addressOptions);
14281
+ i0.ɵɵproperty("ngIf", ctx_r0.addressOptions);
14270
14282
  i0.ɵɵadvance();
14271
- i0.ɵɵproperty("ngIf", !ctx_r1.shouldShowDetailFields());
14283
+ i0.ɵɵproperty("ngIf", !ctx_r0.shouldShowDetailFields());
14272
14284
  } }
14273
14285
  class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
14274
14286
  isCompoundPipe;
@@ -14402,9 +14414,9 @@ class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
14402
14414
  let _t;
14403
14415
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.writeComplexFieldComponent = _t.first);
14404
14416
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.focusElementDirectives = _t);
14405
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 9, consts: [["writeComplexFieldComponent", ""], [1, "form-group", 3, "id"], [4, "ngIf"], [3, "hidden", "caseField", "renderLabel", "parent", "formGroup", "ignoreMandatory", "idPrefix"], [1, "heading-h2"], ["class", "form-group bottom-30 postcodeLookup", 3, "id", "ngClass", 4, "ngIf"], ["class", "form-group", "id", "selectAddress", 3, "ngClass", 4, "ngIf"], ["class", "manual-link bottom-30", "href", "#", 3, "click", 4, "ngIf"], [1, "form-group", "bottom-30", "postcodeLookup", 3, "id", "ngClass"], [3, "for"], [1, "form-label"], ["class", "error-message", 4, "ngIf"], ["type", "text", "name", "postcode", 1, "form-control", "postcodeinput", "inline-block", 3, "ngClass", "id", "formControl"], ["type", "button", 1, "button", "button-30", 3, "click", "disabled"], [1, "error-message"], ["id", "selectAddress", 1, "form-group", 3, "ngClass"], ["name", "address", "focusElement", "", 1, "form-control", "ccd-dropdown", "addressList", 3, "change", "id", "formControl"], [3, "ngValue", 4, "ngIf"], [3, "ngValue", 4, "ngFor", "ngForOf"], [3, "ngValue"], ["href", "#", 1, "manual-link", "bottom-30", 3, "click"]], template: function WriteAddressFieldComponent_Template(rf, ctx) { if (rf & 1) {
14417
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 9, consts: [["writeComplexFieldComponent", ""], [1, "form-group", 3, "id"], [4, "ngIf"], [3, "hidden", "caseField", "renderLabel", "parent", "formGroup", "ignoreMandatory", "idPrefix"], [1, "heading-h2"], ["class", "form-hint", 4, "ngIf"], ["class", "form-group bottom-30 postcodeLookup", 3, "id", "ngClass", 4, "ngIf"], ["class", "form-group", "id", "selectAddress", 3, "ngClass", 4, "ngIf"], ["class", "manual-link bottom-30", "href", "#", 3, "click", 4, "ngIf"], [1, "form-hint"], [3, "content"], [1, "form-group", "bottom-30", "postcodeLookup", 3, "id", "ngClass"], [3, "for"], [1, "form-label"], ["class", "error-message", 4, "ngIf"], ["type", "text", "name", "postcode", 1, "form-control", "postcodeinput", "inline-block", 3, "ngClass", "id", "formControl"], ["type", "button", 1, "button", "button-30", 3, "click", "disabled"], [1, "error-message"], ["id", "selectAddress", 1, "form-group", 3, "ngClass"], ["name", "address", "focusElement", "", 1, "form-control", "ccd-dropdown", "addressList", 3, "change", "id", "formControl"], [3, "ngValue", 4, "ngIf"], [3, "ngValue", 4, "ngFor", "ngForOf"], [3, "ngValue"], ["href", "#", 1, "manual-link", "bottom-30", 3, "click"]], template: function WriteAddressFieldComponent_Template(rf, ctx) { if (rf & 1) {
14406
14418
  i0.ɵɵelementStart(0, "div", 1);
14407
- i0.ɵɵtemplate(1, WriteAddressFieldComponent_div_1_Template, 7, 6, "div", 2);
14419
+ i0.ɵɵtemplate(1, WriteAddressFieldComponent_div_1_Template, 8, 7, "div", 2);
14408
14420
  i0.ɵɵelement(2, "ccd-write-complex-type-field", 3, 0);
14409
14421
  i0.ɵɵelementEnd();
14410
14422
  } if (rf & 2) {
@@ -14417,7 +14429,7 @@ class WriteAddressFieldComponent extends AbstractFieldWriteComponent {
14417
14429
  }
14418
14430
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WriteAddressFieldComponent, [{
14419
14431
  type: Component,
14420
- args: [{ selector: 'ccd-write-address-field', standalone: false, template: "<div class=\"form-group\" [id]=\"id()\">\n <div *ngIf=\"!isComplexWithHiddenFields()\">\n <h2 class=\"heading-h2\">{{caseField | ccdFieldLabel}}</h2>\n\n <div class=\"form-group bottom-30 postcodeLookup\" [id]=\"createElementId('postcodeLookup')\" [ngClass]=\"{'form-group-error': missingPostcode}\" *ngIf=\"!isExpanded\">\n <label [for]=\"createElementId('postcodeInput')\">\n <span class=\"form-label\">{{'Enter a UK postcode' | rpxTranslate}}</span>\n </label>\n <span class=\"error-message\" *ngIf=\"missingPostcode\">{{errorMessage | rpxTranslate}}</span>\n <input type=\"text\" [ngClass]=\"{'govuk-input--error': missingPostcode}\"\n [id]=\"createElementId('postcodeInput')\" name=\"postcode\" class=\"form-control postcodeinput inline-block\" [formControl]=\"postcode\">\n <button type=\"button\" class=\"button button-30\" (click)=\"findAddress()\" [disabled]=\"loadingAddresses\">\n {{(loadingAddresses ? 'Finding addresses...' : 'Find address') | rpxTranslate}}\n </button>\n </div>\n\n <div class=\"form-group\" *ngIf=\"addressOptions\" id=\"selectAddress\" [ngClass]=\"{'form-group-error': noAddressSelected}\">\n <label [for]=\"createElementId('addressList')\">\n <span class=\"form-label\">{{'Select an address' | rpxTranslate}}</span>\n </label>\n <span class=\"error-message\" *ngIf=\"noAddressSelected\">{{errorMessage | rpxTranslate}}</span>\n <select class=\"form-control ccd-dropdown addressList\" [id]=\"createElementId('addressList')\" name=\"address\" [formControl]=\"addressList\" (change)=\"addressSelected()\" focusElement>\n <option *ngIf=\"addressOptions.length === 0\" [ngValue]=\"undefined\">\n {{'No address found' | rpxTranslate}}\n </option>\n <option *ngIf=\"addressOptions.length > 0\" [ngValue]=\"undefined\">\n {{addressOptions.length}} {{(addressOptions.length === 1 ? 'address found' : 'addresses found') | rpxTranslate}}\n </option>\n <option *ngFor=\"let addressOption of addressOptions\" [ngValue]=\"addressOption.value\">\n {{addressOption.description}}\n </option>\n </select>\n </div>\n\n <a class=\"manual-link bottom-30\" *ngIf=\"!shouldShowDetailFields()\" (click)=\"blankAddress(); $event.preventDefault()\" href=\"#\">\n {{\"I can't enter a UK postcode\" | rpxTranslate}}\n </a>\n </div>\n\n <ccd-write-complex-type-field\n [hidden]=\"!shouldShowDetailFields()\"\n [caseField]=\"caseField\"\n [renderLabel]=\"false\"\n [parent]=\"parent\"\n [formGroup]=\"formGroup\"\n [ignoreMandatory]=\"true\"\n [idPrefix]=\"buildIdPrefix('detail')\"\n #writeComplexFieldComponent>\n </ccd-write-complex-type-field>\n</div>\n", styles: [".manual-link{cursor:pointer;display:block;text-decoration:underline}\n"] }]
14432
+ args: [{ selector: 'ccd-write-address-field', standalone: false, template: "<div class=\"form-group\" [id]=\"id()\">\n <div *ngIf=\"!isComplexWithHiddenFields()\">\n <h2 class=\"heading-h2\">{{caseField | ccdFieldLabel}}</h2>\n <span class=\"form-hint\" *ngIf=\"caseField.hint_text\">\n <ccd-markdown [content]=\"caseField.hint_text | rpxTranslate\"></ccd-markdown>\n </span>\n\n <div class=\"form-group bottom-30 postcodeLookup\" [id]=\"createElementId('postcodeLookup')\" [ngClass]=\"{'form-group-error': missingPostcode}\" *ngIf=\"!isExpanded\">\n <label [for]=\"createElementId('postcodeInput')\">\n <span class=\"form-label\">{{'Enter a UK postcode' | rpxTranslate}}</span>\n </label>\n <span class=\"error-message\" *ngIf=\"missingPostcode\">{{errorMessage | rpxTranslate}}</span>\n <input type=\"text\" [ngClass]=\"{'govuk-input--error': missingPostcode}\"\n [id]=\"createElementId('postcodeInput')\" name=\"postcode\" class=\"form-control postcodeinput inline-block\" [formControl]=\"postcode\">\n <button type=\"button\" class=\"button button-30\" (click)=\"findAddress()\" [disabled]=\"loadingAddresses\">\n {{(loadingAddresses ? 'Finding addresses...' : 'Find address') | rpxTranslate}}\n </button>\n </div>\n\n <div class=\"form-group\" *ngIf=\"addressOptions\" id=\"selectAddress\" [ngClass]=\"{'form-group-error': noAddressSelected}\">\n <label [for]=\"createElementId('addressList')\">\n <span class=\"form-label\">{{'Select an address' | rpxTranslate}}</span>\n </label>\n <span class=\"error-message\" *ngIf=\"noAddressSelected\">{{errorMessage | rpxTranslate}}</span>\n <select class=\"form-control ccd-dropdown addressList\" [id]=\"createElementId('addressList')\" name=\"address\" [formControl]=\"addressList\" (change)=\"addressSelected()\" focusElement>\n <option *ngIf=\"addressOptions.length === 0\" [ngValue]=\"undefined\">\n {{'No address found' | rpxTranslate}}\n </option>\n <option *ngIf=\"addressOptions.length > 0\" [ngValue]=\"undefined\">\n {{addressOptions.length}} {{(addressOptions.length === 1 ? 'address found' : 'addresses found') | rpxTranslate}}\n </option>\n <option *ngFor=\"let addressOption of addressOptions\" [ngValue]=\"addressOption.value\">\n {{addressOption.description}}\n </option>\n </select>\n </div>\n\n <a class=\"manual-link bottom-30\" *ngIf=\"!shouldShowDetailFields()\" (click)=\"blankAddress(); $event.preventDefault()\" href=\"#\">\n {{\"I can't enter a UK postcode\" | rpxTranslate}}\n </a>\n </div>\n\n <ccd-write-complex-type-field\n [hidden]=\"!shouldShowDetailFields()\"\n [caseField]=\"caseField\"\n [renderLabel]=\"false\"\n [parent]=\"parent\"\n [formGroup]=\"formGroup\"\n [ignoreMandatory]=\"true\"\n [idPrefix]=\"buildIdPrefix('detail')\"\n #writeComplexFieldComponent>\n </ccd-write-complex-type-field>\n</div>\n", styles: [".manual-link{cursor:pointer;display:block;text-decoration:underline}\n"] }]
14421
14433
  }], () => [{ type: AddressesService }, { type: IsCompoundPipe }], { writeComplexFieldComponent: [{
14422
14434
  type: ViewChild,
14423
14435
  args: ['writeComplexFieldComponent', { static: false }]
@@ -26378,8 +26390,10 @@ function sanitiseRichTextHtml(value) {
26378
26390
  }
26379
26391
 
26380
26392
  class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
26381
- constructor() {
26393
+ sanitizer;
26394
+ constructor(sanitizer) {
26382
26395
  super();
26396
+ this.sanitizer = sanitizer;
26383
26397
  }
26384
26398
  sanitisedValue() {
26385
26399
  const supportedHtml = sanitiseRichTextHtml(this.caseField.value || '');
@@ -26390,12 +26404,9 @@ class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
26390
26404
  delete element.dataset.indent;
26391
26405
  element.classList.add(`ccd-rich-text-indent-${indent}`);
26392
26406
  });
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
- });
26407
+ return this.sanitizer.sanitize(SecurityContext.HTML, documentElement.body.innerHTML) || '';
26397
26408
  }
26398
- static ɵfac = function ReadRichTextAreaFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReadRichTextAreaFieldComponent)(); };
26409
+ static ɵfac = function ReadRichTextAreaFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReadRichTextAreaFieldComponent)(i0.ɵɵdirectiveInject(i1$5.DomSanitizer)); };
26399
26410
  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
26411
  i0.ɵɵelement(0, "div", 0);
26401
26412
  } if (rf & 2) {
@@ -26404,8 +26415,8 @@ class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
26404
26415
  }
26405
26416
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReadRichTextAreaFieldComponent, [{
26406
26417
  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); })();
26418
+ 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"] }]
26419
+ }], () => [{ type: i1$5.DomSanitizer }], null); })();
26409
26420
  (() => { (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
26421
 
26411
26422
  const _c0$D = ["editorHost"];
@@ -26579,6 +26590,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
26579
26590
  },
26580
26591
  plugins: [
26581
26592
  new Plugin({
26593
+ appendTransaction: (transactions, oldState, newState) => this.renumberContinuedOrderedLists(transactions, oldState, newState),
26582
26594
  props: {
26583
26595
  handlePaste: (_view, event) => this.handleEditorPaste(event),
26584
26596
  handleDOMEvents: {
@@ -27062,6 +27074,71 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27062
27074
  ? candidateOrder === adjacentOrder + adjacentList.childCount
27063
27075
  : candidateOrder + candidateList.childCount === adjacentOrder;
27064
27076
  }
27077
+ renumberContinuedOrderedLists(transactions, oldState, newState) {
27078
+ if (!transactions.some((transaction) => transaction.docChanged)) {
27079
+ return null;
27080
+ }
27081
+ const oldChildren = [];
27082
+ let oldPosition = 0;
27083
+ oldState.doc.forEach((node) => {
27084
+ oldChildren.push({ node, position: oldPosition });
27085
+ oldPosition += node.nodeSize;
27086
+ });
27087
+ const mapPosition = (position) => transactions.reduce((mappedPosition, transaction) => transaction.mapping.map(mappedPosition, 1), position);
27088
+ const effectiveOrders = new Map();
27089
+ let result = null;
27090
+ oldChildren.forEach(({ node: candidate, position: candidatePosition }, candidateIndex) => {
27091
+ if (candidate.type.name !== 'ordered_list') {
27092
+ return;
27093
+ }
27094
+ let previousIndex = candidateIndex - 1;
27095
+ while (previousIndex >= 0 &&
27096
+ this.isOrderedListContinuationSeparator(oldChildren[previousIndex].node, candidate)) {
27097
+ previousIndex--;
27098
+ }
27099
+ if (previousIndex < 0) {
27100
+ return;
27101
+ }
27102
+ const previous = oldChildren[previousIndex].node;
27103
+ const previousPosition = oldChildren[previousIndex].position;
27104
+ if (previous.type.name !== 'ordered_list' ||
27105
+ !this.hasMatchingListType(candidate, previous) ||
27106
+ candidate.attrs.indent !== previous.attrs.indent ||
27107
+ !this.isSequentialList(candidate, previous, 1)) {
27108
+ return;
27109
+ }
27110
+ const mappedPreviousPosition = mapPosition(previousPosition);
27111
+ const mappedCandidatePosition = mapPosition(candidatePosition);
27112
+ const newPrevious = newState.doc.nodeAt(mappedPreviousPosition);
27113
+ const newCandidate = newState.doc.nodeAt(mappedCandidatePosition);
27114
+ if (!newPrevious || !newCandidate ||
27115
+ newPrevious.type.name !== 'ordered_list' || newCandidate.type.name !== 'ordered_list' ||
27116
+ newPrevious.firstChild?.textContent !== previous.firstChild?.textContent ||
27117
+ newCandidate.firstChild?.textContent !== candidate.firstChild?.textContent ||
27118
+ !this.hasMatchingListType(newCandidate, newPrevious) ||
27119
+ newCandidate.attrs.indent !== newPrevious.attrs.indent) {
27120
+ return;
27121
+ }
27122
+ const previousOrder = effectiveOrders.get(previousPosition) ?? (Number(newPrevious.attrs.order) || 1);
27123
+ const expectedOrder = previousOrder + newPrevious.childCount;
27124
+ effectiveOrders.set(candidatePosition, expectedOrder);
27125
+ if (Number(newCandidate.attrs.order) === expectedOrder) {
27126
+ return;
27127
+ }
27128
+ result = (result || newState.tr).setNodeMarkup(mappedCandidatePosition, newCandidate.type, {
27129
+ ...newCandidate.attrs,
27130
+ order: expectedOrder
27131
+ });
27132
+ });
27133
+ return result;
27134
+ }
27135
+ isOrderedListContinuationSeparator(node, candidate) {
27136
+ if (this.isEmptyParagraph(node) || this.isListSectionHeading(node)) {
27137
+ return true;
27138
+ }
27139
+ return this.isList(node) &&
27140
+ (Number(node.attrs.indent) || 0) > (Number(candidate.attrs.indent) || 0);
27141
+ }
27065
27142
  hasListContinuation(list) {
27066
27143
  return list.type.name === 'ordered_list' || Boolean(list.attrs.continuationOrder);
27067
27144
  }
@@ -27327,7 +27404,10 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27327
27404
  this.removeUnsupportedMarkup(documentElement);
27328
27405
  this.normaliseDateRangeSpacing(documentElement);
27329
27406
  this.removeUnsupportedAttributes(documentElement);
27330
- return this.normalisePlainTextValue(sanitiseRichTextDocument(documentElement));
27407
+ const sanitisedValue = sanitiseRichTextDocument(documentElement);
27408
+ return this.hasMeaningfulRichTextContent(documentElement)
27409
+ ? this.normalisePlainTextValue(sanitisedValue)
27410
+ : '';
27331
27411
  }
27332
27412
  normaliseRichTextValue(value) {
27333
27413
  if (!value) {
@@ -27345,7 +27425,15 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27345
27425
  this.removeUnsupportedMarkup(documentElement);
27346
27426
  this.normaliseDateRangeSpacing(documentElement);
27347
27427
  this.removeUnsupportedAttributes(documentElement);
27348
- return this.normalisePlainTextValue(sanitiseRichTextDocument(documentElement));
27428
+ const sanitisedValue = sanitiseRichTextDocument(documentElement);
27429
+ return this.hasMeaningfulRichTextContent(documentElement)
27430
+ ? this.normalisePlainTextValue(sanitisedValue)
27431
+ : '';
27432
+ }
27433
+ hasMeaningfulRichTextContent(documentElement) {
27434
+ const visibleText = (documentElement.body.textContent || '')
27435
+ .replace(/[\s\u00a0\u200b-\u200d\ufeff]/g, '');
27436
+ return visibleText.length > 0 || Boolean(documentElement.body.querySelector('hr'));
27349
27437
  }
27350
27438
  syncAccessibilityLater() {
27351
27439
  setTimeout(() => this.syncAccessibilityState());
@@ -27458,13 +27546,31 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27458
27546
  }
27459
27547
  this.isNormalisingValue = true;
27460
27548
  try {
27461
- this.richTextAreaControl.setValue(normalisedValue, { emitEvent: false });
27462
- this.editor.setContent(normalisedValue || '');
27549
+ this.richTextAreaControl.setValue(normalisedValue, {
27550
+ emitEvent: false,
27551
+ emitModelToViewChange: false
27552
+ });
27553
+ if (normalisedValue || this.editorHasMeaningfulRichTextContent()) {
27554
+ this.editor.setContent(normalisedValue || '');
27555
+ }
27463
27556
  }
27464
27557
  finally {
27465
27558
  this.isNormalisingValue = false;
27466
27559
  }
27467
27560
  }
27561
+ editorHasMeaningfulRichTextContent() {
27562
+ const documentNode = this.editor.view.state.doc;
27563
+ const visibleText = documentNode.textContent.replace(/[\s\u00a0\u200b-\u200d\ufeff]/g, '');
27564
+ let hasHorizontalRule = false;
27565
+ documentNode.descendants((node) => {
27566
+ if (node.type.name === 'horizontal_rule') {
27567
+ hasHorizontalRule = true;
27568
+ return false;
27569
+ }
27570
+ return !hasHorizontalRule;
27571
+ });
27572
+ return visibleText.length > 0 || hasHorizontalRule;
27573
+ }
27468
27574
  richTextRequiredValidator() {
27469
27575
  return (control) => {
27470
27576
  const textValue = this.htmlToText(control.value);
@@ -27478,8 +27584,9 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
27478
27584
  };
27479
27585
  }
27480
27586
  htmlToText(value) {
27481
- const documentElement = new DOMParser().parseFromString(value || '', 'text/html');
27482
- return (documentElement.body.textContent || '').replaceAll('\u00a0', ' ').trim();
27587
+ const container = document.createElement('div');
27588
+ container.innerHTML = value || '';
27589
+ return (container.textContent || '').replaceAll('\u00a0', ' ').trim();
27483
27590
  }
27484
27591
  isWordHtml(html) {
27485
27592
  return /(class="?Mso|mso-|urn:schemas-microsoft-com:office:word|xmlns:o)/i.test(html);
@@ -28114,7 +28221,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28114
28221
  }
28115
28222
  return value
28116
28223
  .replace(/!?\[([^\]]{0,500})\]\(([^)]{0,500})\)/g, (_match, text, url) => text || url)
28117
- .replace(/!?\[((?:[^[\]\\]|\\.){0,500})\]\s*\[[^\]]{0,100}\]/g, '$1');
28224
+ .replace(/!?\[((?:[^[\]\\]|\\.){0,500})\]\[[^\]]{0,100}\](?!\s*\/)/g, '$1');
28118
28225
  }
28119
28226
  unwrapElement(element) {
28120
28227
  const parentNode = element.parentNode;
@@ -28133,6 +28240,8 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28133
28240
  const state = {
28134
28241
  listStack: [],
28135
28242
  listParents: [],
28243
+ listRunDeclaredLevel: null,
28244
+ listRunVisualLevel: null,
28136
28245
  resetListLevels: new Map(),
28137
28246
  previousListId: null
28138
28247
  };
@@ -28161,12 +28270,19 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28161
28270
  resetWordListConversionState(state) {
28162
28271
  state.listStack.length = 0;
28163
28272
  state.listParents.length = 0;
28273
+ state.listRunDeclaredLevel = null;
28274
+ state.listRunVisualLevel = null;
28164
28275
  state.resetListLevels.clear();
28165
28276
  state.previousListId = null;
28166
28277
  }
28167
28278
  wordListRequestedLevel(paragraph, listId, wordListIndents, state) {
28168
28279
  const declaredLevel = this.wordListDeclaredLevel(paragraph);
28169
- let requestedLevel = this.wordListLevel(paragraph, wordListIndents);
28280
+ const visualLevel = this.wordListVisualLevel(paragraph, wordListIndents);
28281
+ if (state.listRunDeclaredLevel === null || state.listRunVisualLevel === null) {
28282
+ state.listRunDeclaredLevel = declaredLevel;
28283
+ state.listRunVisualLevel = visualLevel;
28284
+ }
28285
+ let requestedLevel = Math.max(1, declaredLevel - state.listRunDeclaredLevel + 1, visualLevel - state.listRunVisualLevel + 1);
28170
28286
  const rememberedResetLevel = declaredLevel === 1 ? state.resetListLevels.get(listId) : null;
28171
28287
  if (rememberedResetLevel) {
28172
28288
  return Math.max(requestedLevel, rememberedResetLevel);
@@ -28187,7 +28303,8 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28187
28303
  let currentList = state.listStack[stackIndex];
28188
28304
  if (currentList?.tagName.toLowerCase() !== listType || currentList?.getAttribute('type') !== orderedListType ||
28189
28305
  state.listParents[stackIndex] !== listParent) {
28190
- currentList = this.createWordList(documentElement, paragraph, listType, orderedListType, parentListItem);
28306
+ const rootIndent = level === 1 ? state.listRunVisualLevel - 1 : 0;
28307
+ currentList = this.createWordList(documentElement, paragraph, listType, orderedListType, parentListItem, rootIndent);
28191
28308
  state.listStack[stackIndex] = currentList;
28192
28309
  state.listParents[stackIndex] = listParent;
28193
28310
  }
@@ -28195,15 +28312,18 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28195
28312
  state.listParents.length = level;
28196
28313
  return currentList;
28197
28314
  }
28198
- createWordList(documentElement, paragraph, listType, orderedListType, parentListItem) {
28315
+ createWordList(documentElement, paragraph, listType, orderedListType, parentListItem, rootIndent) {
28199
28316
  const list = documentElement.createElement(listType);
28200
- const listStart = this.wordListStart(paragraph);
28317
+ const listStart = this.wordListStart(paragraph, orderedListType);
28201
28318
  if (listType === 'ol' && listStart > 1) {
28202
28319
  list.setAttribute('start', listStart.toString());
28203
28320
  }
28204
28321
  if (orderedListType) {
28205
28322
  list.setAttribute('type', orderedListType);
28206
28323
  }
28324
+ if (rootIndent > 0) {
28325
+ list.dataset.indent = Math.min(6, rootIndent).toString();
28326
+ }
28207
28327
  if (parentListItem) {
28208
28328
  parentListItem.appendChild(list);
28209
28329
  }
@@ -28262,11 +28382,10 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28262
28382
  .find((element) => /mso-list:\s*Ignore/i.test(element.getAttribute('style') || ''));
28263
28383
  return (markerElement ? markerElement.textContent : paragraph.textContent).trim();
28264
28384
  }
28265
- wordListLevel(paragraph, wordListIndents) {
28266
- const declaredLevel = this.wordListDeclaredLevel(paragraph);
28385
+ wordListVisualLevel(paragraph, wordListIndents) {
28267
28386
  const indent = this.wordListIndent(paragraph);
28268
28387
  const visualLevel = wordListIndents.indexOf(indent) + 1;
28269
- return Math.max(declaredLevel, visualLevel || 1);
28388
+ return visualLevel || 1;
28270
28389
  }
28271
28390
  wordListDeclaredLevel(paragraph) {
28272
28391
  const match = (paragraph.getAttribute('style') || '').match(/mso-list:[^;]*\blevel(\d+)/i);
@@ -28287,9 +28406,18 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
28287
28406
  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
28407
  return Math.round(indent);
28289
28408
  }
28290
- wordListStart(paragraph) {
28291
- const match = /^(\d+)[.)]/.exec(this.wordListMarker(paragraph));
28292
- return match ? Number(match[1]) : 1;
28409
+ wordListStart(paragraph, orderedListType) {
28410
+ const match = /^\(?([a-z]+|\d+)[.)]/i.exec(this.wordListMarker(paragraph));
28411
+ if (!match) {
28412
+ return 1;
28413
+ }
28414
+ if (/^\d+$/.test(match[1])) {
28415
+ return Number(match[1]);
28416
+ }
28417
+ if (orderedListType === 'a') {
28418
+ return match[1].toLowerCase().split('').reduce((start, character) => (start * 26) + character.charCodeAt(0) - 96, 0);
28419
+ }
28420
+ return 1;
28293
28421
  }
28294
28422
  copyListItemContents(documentElement, paragraph, listItem) {
28295
28423
  Array.prototype.slice.call(paragraph.childNodes).forEach((childNode) => {
@@ -29008,7 +29136,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
29008
29136
  type: ViewChild,
29009
29137
  args: ['editorHost']
29010
29138
  }] }); })();
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 }); })();
29139
+ (() => { (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
29140
 
29013
29141
  class ReadTextFieldComponent extends AbstractFieldReadComponent {
29014
29142
  static ɵfac = /*@__PURE__*/ (() => { let ɵReadTextFieldComponent_BaseFactory; return function ReadTextFieldComponent_Factory(__ngFactoryType__) { return (ɵReadTextFieldComponent_BaseFactory || (ɵReadTextFieldComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadTextFieldComponent)))(__ngFactoryType__ || ReadTextFieldComponent); }; })();
@@ -31438,6 +31566,7 @@ function ManageCaseFlagsComponent_div_9_Template(rf, ctx) { if (rf & 1) {
31438
31566
  i0.ɵɵproperty("for", i0.ɵɵinterpolate1("flag-selection-", i_r4))("innerHTML", ctx_r0.sanitizeHtml(i0.ɵɵpipeBind1(3, 6, flagDisplay_r3)), i0.ɵɵsanitizeHtml);
31439
31567
  } }
31440
31568
  class ManageCaseFlagsComponent extends AbstractJourneyComponent {
31569
+ sanitizer;
31441
31570
  formGroup;
31442
31571
  flagsData;
31443
31572
  caseTitle;
@@ -31452,8 +31581,9 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
31452
31581
  selectedControlName = 'selectedManageCaseLocation';
31453
31582
  excludedFlagStatuses = [CaseFlagStatus.INACTIVE, CaseFlagStatus.NOT_APPROVED];
31454
31583
  cachedControls;
31455
- constructor(multipageComponentStateService) {
31584
+ constructor(multipageComponentStateService, sanitizer) {
31456
31585
  super(multipageComponentStateService);
31586
+ this.sanitizer = sanitizer;
31457
31587
  }
31458
31588
  ngOnInit() {
31459
31589
  this.manageCaseFlagTitle = this.setManageCaseFlagTitle(this.displayContextParameter);
@@ -31703,9 +31833,9 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
31703
31833
  }
31704
31834
  // Ensure there is no dangerous HTML in the flag name or description that could lead to XSS vulnerabilities
31705
31835
  sanitizeHtml(content) {
31706
- return DOMPurify.sanitize(content ?? '');
31836
+ return this.sanitizer.sanitize(SecurityContext.HTML, content ?? '') ?? '';
31707
31837
  }
31708
- static ɵfac = function ManageCaseFlagsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ManageCaseFlagsComponent)(i0.ɵɵdirectiveInject(MultipageComponentStateService)); };
31838
+ static ɵfac = function ManageCaseFlagsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ManageCaseFlagsComponent)(i0.ɵɵdirectiveInject(MultipageComponentStateService), i0.ɵɵdirectiveInject(i1$5.DomSanitizer)); };
31709
31839
  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
31840
  i0.ɵɵelementContainerStart(0, 0);
31711
31841
  i0.ɵɵelementStart(1, "div", 1)(2, "fieldset", 2)(3, "legend", 3)(4, "h1", 4);
@@ -31732,7 +31862,7 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
31732
31862
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ManageCaseFlagsComponent, [{
31733
31863
  type: Component,
31734
31864
  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: [{
31865
+ }], () => [{ type: MultipageComponentStateService }, { type: i1$5.DomSanitizer }], { formGroup: [{
31736
31866
  type: Input
31737
31867
  }], flagsData: [{
31738
31868
  type: Input
@@ -34107,7 +34237,6 @@ function ReadComplexFieldCollectionTableComponent_th_10_Template(rf, ctx) { if (
34107
34237
  i0.ɵɵelementStart(4, "a", 9);
34108
34238
  i0.ɵɵpipe(5, "rpxTranslate");
34109
34239
  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
34240
  i0.ɵɵelementEnd()();
34112
34241
  } if (rf & 2) {
34113
34242
  const heading_r2 = ctx.$implicit;
@@ -34115,9 +34244,8 @@ function ReadComplexFieldCollectionTableComponent_th_10_Template(rf, ctx) { if (
34115
34244
  i0.ɵɵadvance(2);
34116
34245
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 3, ctx_r2.columnsAllLabels[heading_r2].label));
34117
34246
  i0.ɵɵadvance(2);
34247
+ i0.ɵɵproperty("innerHTML", ctx_r2.sortWidget(ctx_r2.columnsAllLabels[heading_r2]), i0.ɵɵsanitizeHtml);
34118
34248
  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
34249
  } }
34122
34250
  function ReadComplexFieldCollectionTableComponent_ng_container_12_ng_container_2_div_2_Template(rf, ctx) { if (rf & 1) {
34123
34251
  i0.ɵɵelementStart(0, "div");
@@ -34327,11 +34455,15 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34327
34455
  if (this.isHidden[row]) {
34328
34456
  return 'assets/img/accordion-plus.png';
34329
34457
  }
34330
- if (this.isVerticleDataNotEmpty(row)) {
34331
- return 'assets/img/accordion-minus.png';
34458
+ else {
34459
+ if (this.isVerticleDataNotEmpty(row)) {
34460
+ return 'assets/img/accordion-minus.png';
34461
+ }
34462
+ else {
34463
+ this.isHidden[row] = true;
34464
+ return 'assets/img/accordion-plus.png';
34465
+ }
34332
34466
  }
34333
- this.isHidden[row] = true;
34334
- return 'assets/img/accordion-plus.png';
34335
34467
  }
34336
34468
  /**
34337
34469
  * Needs to be called before 'ccdFieldsFilter' pipe is used, as it needs a caseField value.
@@ -34356,7 +34488,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34356
34488
  field_type: fieldType
34357
34489
  });
34358
34490
  }
34359
- keepOriginalOrder = (a) => a.key;
34491
+ keepOriginalOrder = (a, b) => a.key;
34360
34492
  sortRowsByColumns(column) {
34361
34493
  const shouldSortInAscendingOrder = this.columnsHorizontalLabel[column].sortOrder === SortOrder$1.UNSORTED
34362
34494
  || this.columnsHorizontalLabel[column].sortOrder === SortOrder$1.DESCENDING;
@@ -34399,7 +34531,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34399
34531
  }
34400
34532
  }
34401
34533
  sortWidget(column) {
34402
- return String.fromCharCode(ReadComplexFieldCollectionTableComponent.isSortAscending(column) ? 9660 : 9650);
34534
+ return ReadComplexFieldCollectionTableComponent.isSortAscending(column) ? '&#9660;' : '&#9650;';
34403
34535
  }
34404
34536
  populateHorizontalLabels(labelsHorizontal, allLabels, labelsVertical) {
34405
34537
  for (const id of this.columns) {
@@ -34443,7 +34575,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34443
34575
  return result;
34444
34576
  }
34445
34577
  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) {
34578
+ 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
34579
  i0.ɵɵelementStart(0, "div", 2)(1, "dl", 3)(2, "dt")(3, "span", 4);
34448
34580
  i0.ɵɵtext(4);
34449
34581
  i0.ɵɵpipe(5, "rpxTranslate");
@@ -34451,7 +34583,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34451
34583
  i0.ɵɵelement(6, "dd");
34452
34584
  i0.ɵɵelementEnd();
34453
34585
  i0.ɵɵelementStart(7, "table", 5)(8, "tbody")(9, "tr");
34454
- i0.ɵɵtemplate(10, ReadComplexFieldCollectionTableComponent_th_10_Template, 7, 7, "th", 6);
34586
+ i0.ɵɵtemplate(10, ReadComplexFieldCollectionTableComponent_th_10_Template, 6, 7, "th", 6);
34455
34587
  i0.ɵɵelement(11, "th");
34456
34588
  i0.ɵɵelementEnd();
34457
34589
  i0.ɵɵtemplate(12, ReadComplexFieldCollectionTableComponent_ng_container_12_Template, 15, 20, "ng-container", 7);
@@ -34468,7 +34600,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
34468
34600
  }
34469
34601
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReadComplexFieldCollectionTableComponent, [{
34470
34602
  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"] }]
34603
+ 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
34604
  }], null, null); })();
34473
34605
  (() => { (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
34606
 
@@ -36921,7 +37053,7 @@ i0.ɵɵsetComponentScope(ReadLinkedCasesFieldComponent, function () { return [i5
36921
37053
  // Components for linked cases
36922
37054
  LinkedCasesToTableComponent,
36923
37055
  LinkedCasesFromTableComponent]; }, []);
36924
- i0.ɵɵsetComponentScope(WriteAddressFieldComponent, function () { return [i5.NgClass, i5.NgForOf, i5.NgIf, i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i4.DefaultValueAccessor, i4.SelectControlValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.FormControlDirective, i4.FormGroupDirective, WriteComplexFieldComponent]; }, function () { return [FieldLabelPipe, i1.RpxTranslatePipe]; });
37056
+ i0.ɵɵsetComponentScope(WriteAddressFieldComponent, function () { return [i5.NgClass, i5.NgForOf, i5.NgIf, i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i4.DefaultValueAccessor, i4.SelectControlValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.FormControlDirective, i4.FormGroupDirective, MarkdownComponent, WriteComplexFieldComponent]; }, function () { return [FieldLabelPipe, i1.RpxTranslatePipe]; });
36925
37057
  i0.ɵɵsetComponentScope(WriteComplexFieldComponent, function () { return [i5.NgForOf, i5.NgIf, i5.NgSwitch, i5.NgSwitchCase, i4.NgControlStatusGroup, i4.FormGroupDirective, LabelSubstitutorDirective, FieldReadComponent,
36926
37058
  FieldWriteComponent]; }, function () { return [FieldLabelPipe, IsReadOnlyPipe]; });
36927
37059
  i0.ɵɵsetComponentScope(WriteDocumentFieldComponent, function () { return [i5.NgClass, i5.NgIf, i1$4.MarkdownComponent, ReadDocumentFieldComponent]; }, function () { return [FieldLabelPipe, i1.RpxTranslatePipe]; });
@@ -45172,15 +45304,13 @@ function SearchResultComponent_table_0_th_11_div_5_Template(rf, ctx) { if (rf &
45172
45304
  i0.ɵɵelementStart(0, "div", 28)(1, "a", 29);
45173
45305
  i0.ɵɵpipe(2, "rpxTranslate");
45174
45306
  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
45307
  i0.ɵɵelementEnd()();
45177
45308
  } if (rf & 2) {
45178
45309
  const col_r5 = i0.ɵɵnextContext().$implicit;
45179
45310
  const ctx_r0 = i0.ɵɵnextContext(2);
45180
45311
  i0.ɵɵadvance();
45312
+ i0.ɵɵproperty("innerHTML", ctx_r0.sortWidget(col_r5), i0.ɵɵsanitizeHtml);
45181
45313
  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
45314
  } }
45185
45315
  function SearchResultComponent_table_0_th_11_Template(rf, ctx) { if (rf & 1) {
45186
45316
  const _r4 = i0.ɵɵgetCurrentView();
@@ -45189,7 +45319,7 @@ function SearchResultComponent_table_0_th_11_Template(rf, ctx) { if (rf & 1) {
45189
45319
  i0.ɵɵtext(3);
45190
45320
  i0.ɵɵpipe(4, "rpxTranslate");
45191
45321
  i0.ɵɵelementEnd();
45192
- i0.ɵɵtemplate(5, SearchResultComponent_table_0_th_11_div_5_Template, 4, 4, "div", 27);
45322
+ i0.ɵɵtemplate(5, SearchResultComponent_table_0_th_11_div_5_Template, 3, 4, "div", 27);
45193
45323
  i0.ɵɵelementEnd()();
45194
45324
  } if (rf & 2) {
45195
45325
  const col_r5 = ctx.$implicit;
@@ -45538,7 +45668,7 @@ class SearchResultComponent {
45538
45668
  ngOnInit() {
45539
45669
  if (this.preSelectedCases) {
45540
45670
  for (const preSelectedCase of this.preSelectedCases) {
45541
- if (this.selectedCases && !this.selectedCases.some((aCase) => aCase.case_id === preSelectedCase.case_id)) {
45671
+ if (this.selectedCases && !this.selectedCases.some(aCase => aCase.case_id === preSelectedCase.case_id)) {
45542
45672
  this.selectedCases.push(preSelectedCase);
45543
45673
  }
45544
45674
  }
@@ -45547,7 +45677,7 @@ class SearchResultComponent {
45547
45677
  this.selection.emit(this.selectedCases);
45548
45678
  }
45549
45679
  ngOnChanges(changes) {
45550
- if (changes.resultView) {
45680
+ if (changes['resultView']) {
45551
45681
  this.hideRows = false;
45552
45682
  this.sortParameters = undefined;
45553
45683
  // Clone `resultView` to prevent sorting the external variable
@@ -45562,8 +45692,8 @@ class SearchResultComponent {
45562
45692
  this.hydrateResultView();
45563
45693
  this.draftsCount = this.draftsCount ? this.draftsCount : this.numberOfDrafts();
45564
45694
  }
45565
- if (changes.page) {
45566
- this.selected.page = (changes.page).currentValue;
45695
+ if (changes['page']) {
45696
+ this.selected.page = (changes['page']).currentValue;
45567
45697
  }
45568
45698
  }
45569
45699
  isTranslatable(col) {
@@ -45593,7 +45723,7 @@ class SearchResultComponent {
45593
45723
  selectAll() {
45594
45724
  if (this.allOnPageSelected()) {
45595
45725
  // all cases already selected, so unselect all on this page
45596
- this.resultView.results.forEach((c) => {
45726
+ this.resultView.results.forEach(c => {
45597
45727
  this.selectedCases.forEach((s, i) => {
45598
45728
  if (c.case_id === s.case_id) {
45599
45729
  this.selectedCases.splice(i, 1);
@@ -45602,7 +45732,7 @@ class SearchResultComponent {
45602
45732
  });
45603
45733
  }
45604
45734
  else {
45605
- this.resultView.results.forEach((c) => {
45735
+ this.resultView.results.forEach(c => {
45606
45736
  if (!this.isSelected(c) && this.canBeShared(c)) {
45607
45737
  this.selectedCases.push(c);
45608
45738
  }
@@ -45654,21 +45784,21 @@ class SearchResultComponent {
45654
45784
  */
45655
45785
  // A longer term resolution is to move this piece of logic to the backend
45656
45786
  hydrateResultView() {
45657
- this.resultView.results.forEach((result) => {
45787
+ this.resultView.results.forEach(result => {
45658
45788
  const caseFields = [];
45659
- Object.keys(result.case_fields).forEach((fieldId) => {
45789
+ Object.keys(result.case_fields).forEach(fieldId => {
45660
45790
  const field = result.case_fields[fieldId];
45661
45791
  caseFields.push(Object.assign(new CaseField(), {
45662
45792
  id: fieldId,
45663
45793
  label: null,
45664
45794
  field_type: {},
45665
45795
  value: field,
45666
- display_context: null
45796
+ display_context: null,
45667
45797
  }));
45668
45798
  });
45669
45799
  result.hydrated_case_fields = caseFields;
45670
45800
  result.columns = {};
45671
- this.resultView.columns.forEach((col) => {
45801
+ this.resultView.columns.forEach(col => {
45672
45802
  result.columns[col.case_field_id] = this.buildCaseField(col, result);
45673
45803
  });
45674
45804
  });
@@ -45706,7 +45836,7 @@ class SearchResultComponent {
45706
45836
  field_type: col.case_field_type,
45707
45837
  value: result.case_fields[col.case_field_id],
45708
45838
  display_context_parameter: col.display_context_parameter,
45709
- display_context: col.display_context
45839
+ display_context: col.display_context,
45710
45840
  });
45711
45841
  }
45712
45842
  getColumnsWithPrefix(col, result) {
@@ -45759,7 +45889,7 @@ class SearchResultComponent {
45759
45889
  else {
45760
45890
  condition = this.isSortAscending(column);
45761
45891
  }
45762
- return String.fromCodePoint(condition ? 9660 : 9650);
45892
+ return condition ? '&#9660;' : '&#9650;';
45763
45893
  }
45764
45894
  activityEnabled() {
45765
45895
  return this.activityService.isEnabled;
@@ -45768,13 +45898,19 @@ class SearchResultComponent {
45768
45898
  if (col.case_field_id === '[CASE_REFERENCE]') {
45769
45899
  return this.caseReferencePipe.transform(result.case_fields[col.case_field_id]);
45770
45900
  }
45771
- if (col.id) {
45772
- if (col.id === '[CASE_REFERENCE]') {
45773
- return this.caseReferencePipe.transform(result.case_fields[col.id]);
45901
+ else {
45902
+ if (col.id) {
45903
+ if (col.id === '[CASE_REFERENCE]') {
45904
+ return this.caseReferencePipe.transform(result.case_fields[col.id]);
45905
+ }
45906
+ else {
45907
+ return result.case_fields[col.id];
45908
+ }
45909
+ }
45910
+ else {
45911
+ return result.case_fields[col.case_field_id];
45774
45912
  }
45775
- return result.case_fields[col.id];
45776
45913
  }
45777
- return result.case_fields[col.case_field_id];
45778
45914
  }
45779
45915
  draftPrefixOrGet(col, result) {
45780
45916
  return result.case_id.startsWith(DRAFT_PREFIX) ? DRAFT_PREFIX : this.hyphenateIfCaseReferenceOrGet(col, result);
@@ -45809,7 +45945,7 @@ class SearchResultComponent {
45809
45945
  return currentPage > 1 ? this.draftsCount : 0;
45810
45946
  }
45811
45947
  numberOfDrafts() {
45812
- return this.resultView.results.filter((_) => _.case_id.startsWith(DRAFT_PREFIX)).length;
45948
+ return this.resultView.results.filter(_ => _.case_id.startsWith(DRAFT_PREFIX)).length;
45813
45949
  }
45814
45950
  goToCase(caseId) {
45815
45951
  this.clickCase.emit({
@@ -45826,7 +45962,7 @@ class SearchResultComponent {
45826
45962
  // eslint-disable-next-line @typescript-eslint/no-empty-function
45827
45963
  noop() { }
45828
45964
  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) {
45965
+ 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
45966
  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
45967
  } if (rf & 2) {
45832
45968
  i0.ɵɵproperty("ngIf", ctx.hasResults() || ctx.hasDrafts());
@@ -45838,7 +45974,7 @@ class SearchResultComponent {
45838
45974
  }
45839
45975
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchResultComponent, [{
45840
45976
  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"] }]
45977
+ 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
45978
  }], () => [{ type: SearchResultViewItemComparatorFactory }, { type: AbstractAppConfig }, { type: ActivityService }, { type: CaseReferencePipe }, { type: PlaceholderService }, { type: BrowserService }, { type: SessionStorageService }], { caseLinkUrlTemplate: [{
45843
45979
  type: Input
45844
45980
  }], jurisdiction: [{