@ministryofjustice/hmpps-arns-frontend-components-lib 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/_all.scss CHANGED
@@ -5,3 +5,5 @@
5
5
  @import "./arns/components/predictor-badge/predictor-badge";
6
6
  @import "./arns/components/expanded-predictor-badge/expanded-predictor-badge";
7
7
  @import "./arns/components/predictor-scale/predictor-scale";
8
+ @import "./arns/components/predictor-scale-bar/predictor-scale-bar";
9
+ @import "./arns/components/predictor-scores-accordion/predictor-scores-accordion";
@@ -50,7 +50,7 @@ In template:
50
50
  {% endswitch %}
51
51
 
52
52
  {% set staticOrDynamicClass = 'arns-predictor-badge__static_or_dynamic' %}
53
- {% if shouldShowScore and predictor.band in ['VERY HIGH', 'MEDIUM'] and predictor.staticOrDynamic === 'DYNAMIC' %}
53
+ {% if shouldShowScore and predictor.band in ['VERY HIGH', 'MEDIUM'] and predictor.staticOrDynamic | upper === 'DYNAMIC' %}
54
54
  {% set staticOrDynamicClass = staticOrDynamicClass + ' arns-predictor-badge__wrapped_static_or_dynamic' %}
55
55
  {% endif %}
56
56
 
@@ -67,24 +67,26 @@ In template:
67
67
  {% set band = predictor.band | replace('_', ' ') %}
68
68
  {% endif %}
69
69
 
70
- <div class="{{ badgeClass }} {{ badgeWidthClass }}">
70
+ <div class="{{ badgeClass }} {{ badgeWidthClass }}"
71
+ data-expanded-predictor-badge="{{ predictor.name }} {{ band }}">
72
+
71
73
  <span
72
- class="arns-predictor-badge__type">{{ predictor.name }}</span>
74
+ class="arns-predictor-badge__type" data-test-id="name">{{ predictor.name }}</span>
73
75
 
74
76
  <div class="arns-predictor-badge__stats">
75
- <span class="arns-predictor-badge__level">{{ band }}</span>
77
+ <span class="arns-predictor-badge__level" data-test-id="band">{{ band }}</span>
76
78
 
77
79
  {% if shouldShowScore and badgeClass != 'arns-expanded-predictor-badge--default' %}
78
- <span class="arns-predictor-badge__score">{{ predictor.score }}%</span>
80
+ <span class="arns-predictor-badge__score" data-test-id="score">{{ predictor.score }}%</span>
79
81
  {% endif %}
80
82
 
81
83
  {% if predictor.staticOrDynamic and badgeClass != 'arns-expanded-predictor-badge--default' %}
82
- <span class="{{ staticOrDynamicClass }}">{{ predictor.staticOrDynamic }}</span>
84
+ <span class="{{ staticOrDynamicClass }}" data-test-id="staticOrDynamic">{{ predictor.staticOrDynamic }}</span>
83
85
  {% endif %}
84
86
 
85
87
  </div>
86
88
 
87
- <span class="arns-predictor-badge__last_updated">Last updated: {{ predictor.completedDate }}</span>
89
+ <span class="arns-predictor-badge__last_updated" data-test-id="completedDate">Last updated: {{ predictor.completedDate }}</span>
88
90
 
89
91
  </div>
90
92
  {% endif %}
@@ -1,42 +1,5 @@
1
- $very-high-score-colour: #942514;
2
- $very-high-score-colour--light: #ffac9f;
3
- $very-high-score-colour__text: #711a0d;
4
- $high-score-colour: #d4351c;
5
- $high-score-colour--light: #f6d7d2;
6
- $high-score-colour__text: #942514;
7
- $medium-score-colour: #f47738;
8
- $medium-score-colour--light: #f9e8bd;
9
- $medium-score-colour__text: #a34e00;
10
- $low-score-colour: #85994b;
11
- $low-score-colour--light: #dee9bd;
12
- $low-score-colour__text: #485b10;
13
1
  $border-colour: #B1B4B6;
14
2
 
15
- @mixin arns-scale-marker-card-colour($primary-colour, $secondary-colour, $text-colour) {
16
- & .arns-scale-marker__card {
17
- border: 2px solid $primary-colour;
18
-
19
- & .arns-scale-marker__card-top {
20
- & h3,
21
- & p {
22
- color: $text-colour;
23
- }
24
- }
25
-
26
- & .arns-scale-marker__card-bottom {
27
- background-color: $secondary-colour;
28
- }
29
-
30
- & .arns-scale-marker__card-pointer {
31
- border-top: 16px solid $primary-colour;
32
- }
33
-
34
- & .arns-scale-marker__card-pointer::after {
35
- border-top: 14px solid $secondary-colour;
36
- }
37
- }
38
- }
39
-
40
3
  @mixin arns-scale-bar-label {
41
4
  position: relative;
42
5
  text-align: center;
@@ -70,259 +33,4 @@ $border-colour: #B1B4B6;
70
33
  padding: 30px 40px 10px;
71
34
  box-sizing: border-box;
72
35
  border: 1px solid $border-colour;
73
- }
74
-
75
- .arns-scale-marker__card-pointer {
76
- width: 0;
77
- height: 0;
78
- border-right: 16px solid transparent;
79
- border-left: 16px solid transparent;
80
- border-top: 16px solid govuk-colour("black");
81
- position: relative;
82
- top: 0;
83
- left: 23px;
84
- float: left;
85
- }
86
-
87
- .arns-scale-marker__card-pointer--white::after {
88
- border-top: 14px solid govuk-colour("white") !important;
89
- }
90
-
91
- .arns-scale-marker__card-pointer::after {
92
- width: 0;
93
- height: 0;
94
- border-right: 14px solid transparent;
95
- border-left: 14px solid transparent;
96
- border-top: 14px solid govuk-colour("white");
97
- position: absolute;
98
- top: -17px;
99
- left: -14px;
100
- content: "";
101
- }
102
-
103
- .arns-scale-marker {
104
- margin-bottom: 22px;
105
- width: 100%;
106
- }
107
-
108
- .arns-scale-marker-wrapper {
109
- position: relative;
110
- left: calc(-40px + (var(--margin) / 100) * (100% - 1px));
111
- }
112
-
113
- .arns-scale-marker-wrapper[data-margin] {
114
- --margin: attr(data-margin number);
115
- }
116
-
117
- .arns-scale-marker-wrapper--very-high {
118
- @include arns-scale-marker-card-colour(
119
- $very-high-score-colour,
120
- $very-high-score-colour--light,
121
- $very-high-score-colour__text
122
- );
123
- }
124
-
125
- .arns-scale-marker-wrapper--high {
126
- @include arns-scale-marker-card-colour($high-score-colour, $high-score-colour--light, $high-score-colour__text);
127
- }
128
-
129
- .arns-scale-marker-wrapper--medium {
130
- @include arns-scale-marker-card-colour($medium-score-colour, $medium-score-colour--light, $medium-score-colour__text);
131
- }
132
-
133
- .arns-scale-marker-wrapper--low {
134
- @include arns-scale-marker-card-colour($low-score-colour, $low-score-colour--light, $low-score-colour__text);
135
- }
136
-
137
- .arns-scale-marker__card {
138
- width: 78px;
139
- bottom: 30px;
140
- background-color: govuk-colour("white");
141
- border: 2px solid govuk-colour("black");
142
- }
143
-
144
- .arns-scale-marker__card-top {
145
- width: 100%;
146
-
147
- & h3,
148
- & p {
149
- margin: 0;
150
- text-align: center;
151
- text-transform: uppercase;
152
- }
153
-
154
- & h3 {
155
- @include govuk-font(14, "bold");
156
- }
157
-
158
- & p {
159
- @include govuk-font(14, "regular");
160
- }
161
- }
162
-
163
- .arns-scale-marker__card-bottom p {
164
- @include govuk-font(14, "bold");
165
-
166
- margin: 0;
167
- }
168
-
169
- .arns-scale-marker__card-top,
170
- .arns-scale-marker__card-bottom {
171
- padding: 3px;
172
- text-align: center;
173
- box-sizing: border-box;
174
- }
175
-
176
- .arns-scale-bar--small {
177
- @include arns-scale-bar-base;
178
-
179
- margin-bottom: 15px;
180
-
181
- & > div {
182
- width: calc(100%/3);
183
- padding-left: 1px;
184
- padding-right: 1px;
185
- display: inline;
186
- float: left;
187
- box-sizing: border-box;
188
- }
189
-
190
- & > div:nth-child(4n + 1) > span:first-child {
191
- &::after{
192
- @include govuk-font(16);
193
- @include arns-scale-bar-label;
194
-
195
- content:"LOW";
196
- bottom: -15px;
197
- color: $govuk-secondary-text-colour;
198
- }
199
- background-color: $low-score-colour;
200
- }
201
-
202
- & > div:nth-child(4n + 2) > span:first-child {
203
- &::after{
204
- @include govuk-font(16);
205
- @include arns-scale-bar-label;
206
-
207
- content:"MEDIUM";
208
- bottom: -15px;
209
- color: $govuk-secondary-text-colour;
210
- }
211
- background-color: $medium-score-colour;
212
- }
213
-
214
- & > div:nth-child(4n + 3) > span:first-child {
215
- &::after{
216
- @include govuk-font(16);
217
- @include arns-scale-bar-label;
218
-
219
- content:"HIGH";
220
- bottom: -15px;
221
- color: $govuk-secondary-text-colour;
222
- }
223
- background-color: $high-score-colour;
224
- }
225
- }
226
-
227
- .arns-scale-bar--small-fourths {
228
- & > div {
229
- width: calc(100%/4);
230
- padding-bottom: 20px;
231
- }
232
-
233
- & > div:nth-child(4n + 4) > span:first-child {
234
- &::after{
235
- @include govuk-font(16);
236
- @include arns-scale-bar-label;
237
-
238
- content:"VERY HIGH";
239
- bottom: -15px;
240
- color: $govuk-secondary-text-colour;
241
- }
242
- background-color: $very-high-score-colour;
243
- }
244
- }
245
-
246
- .arns-scale-bar {
247
- @include arns-scale-bar-base;
248
- margin-bottom: 50px;
249
- display: block;
250
- clear: both;
251
-
252
- & > div {
253
- width: calc(100%/3);
254
- height: 30px;
255
- float: left;
256
- border-left: 1px solid govuk-colour("black");
257
- box-sizing: border-box;
258
- position: relative;
259
-
260
- & > span:first-child {
261
- display: block;
262
- width: 100%;
263
- position: relative;
264
-
265
- &::after {
266
- @include govuk-font(16);
267
- @include arns-scale-bar-label;
268
- position: absolute;
269
- bottom: -20px;
270
- left: 50%;
271
- transform: translateX(-50%);
272
- white-space: nowrap;
273
- color: $govuk-secondary-text-colour;
274
- }
275
- }
276
-
277
- &::after {
278
- @include govuk-font(16);
279
- @include arns-scale-bar-label;
280
- content: attr(data-band-percentage);
281
- position: absolute;
282
- bottom: -25px;
283
- right: 0;
284
- transform: translateX(50%);
285
- white-space: nowrap;
286
- }
287
-
288
- &:first-child::before {
289
- @include govuk-font(16);
290
- @include arns-scale-bar-label;
291
- content: attr(data-band-percentage-start);
292
- position: absolute;
293
- bottom: -25px;
294
- left: 0;
295
- transform: translateX(-50%);
296
- white-space: nowrap;
297
- }
298
- }
299
-
300
- & > div:nth-child(1) {
301
- & > span:first-child { background-color: $low-score-colour; &::after { content: "LOW"; } }
302
- }
303
- & > div:nth-child(2) {
304
- & > span:first-child { background-color: $medium-score-colour; &::after { content: "MEDIUM"; } }
305
- }
306
- & > div:nth-child(3) {
307
- & > span:first-child { background-color: $high-score-colour; &::after { content: "HIGH"; } }
308
- }
309
- }
310
-
311
- .arns-scale-bar--fourths {
312
- & > div {
313
- width: calc(100%/4) !important;
314
- }
315
- & > div:nth-child(4) {
316
- border-right: 1px solid govuk-colour("black");
317
- & > span:first-child {
318
- background-color: $very-high-score-colour;
319
- &::after { content: "VERY HIGH"; }
320
- }
321
- }
322
- }
323
-
324
- .arns-scale-bar--thirds {
325
- & > div:nth-child(3) {
326
- border-right: 1px solid govuk-colour("black");
327
- }
328
- }
36
+ }
@@ -22,103 +22,31 @@ In template:
22
22
  @param {string} params.predictor - The name of the specific predictor to display
23
23
  #}
24
24
  {%- from "govuk/components/tag/macro.njk" import govukTag -%}
25
- {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
25
+ {%- from "../predictor-scale-bar/macro.njk" import predictorScaleBar -%}
26
26
 
27
- {% macro predictorScaleMarker(predictor, showScore) %}
28
- <div class="arns-scale-marker__card">
29
- <div class="arns-scale-marker__card-top">
30
- <h3>{{ predictor.band }}</h3>
31
- </div>
32
- {% if showScore and predictor.score %}
33
- <div class="arns-scale-marker__card-bottom">
34
- <p>{{ predictor.score }}%</p>
35
- </div>
36
- <div class="arns-scale-marker__card-pointer"></div>
37
- {% else %}
38
- <div class="arns-scale-marker__card-pointer arns-scale-marker__card-pointer--white"></div>
39
- {% endif %}
40
- </div>
41
- {% endmacro %}
27
+ {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
42
28
 
43
29
  {% if latestAssessment %}
44
30
  {% for key, predictor in latestAssessment %}
45
31
  {% if key == params.predictor %}
46
32
 
47
- {% set config = predictorConfig[key] %}
48
-
49
- {% set scaleMarkerClass = '' %}
50
-
51
- {% switch predictor.band %}
52
- {% case 'LOW' %}
53
- {% set scaleMarkerClass = 'arns-scale-marker-wrapper--low' %}
54
- {% case 'MEDIUM' %}
55
- {% set scaleMarkerClass = 'arns-scale-marker-wrapper--medium' %}
56
- {% case 'HIGH' %}
57
- {% set scaleMarkerClass = 'arns-scale-marker-wrapper--high' %}
58
- {% case 'VERY HIGH' %}
59
- {% set scaleMarkerClass = 'arns-scale-marker-wrapper--very-high' %}
60
- {% endswitch %}
61
-
62
- {% set barTypeClass = '' %}
63
- {% if config.hasVeryHighBand !== true and config.showBandThresholdPercentages !== true %}
64
- {% set barTypeClass = 'arns-scale-bar--small' %}
65
- {% elif config.hasVeryHighBand === true and config.showBandThresholdPercentages !== true %}
66
- {% set barTypeClass = 'arns-scale-bar--small arns-scale-bar--small-fourths' %}
67
- {% elif config.hasVeryHighBand === true and config.showBandThresholdPercentages === true %}
68
- {% set barTypeClass = 'arns-scale-bar arns-scale-bar--fourths' %}
69
- {% elif config.hasVeryHighBand !== true and config.showBandThresholdPercentages === true %}
70
- {% set barTypeClass = 'arns-scale-bar arns-scale-bar--thirds' %}
71
- {% endif %}
72
-
73
- {% set scalePosition = '' %}
74
- {% if config.showBandThresholdPercentages == true %}
75
- {% set scalePosition = predictor.score | scoreToScaleMarkerPosition(config.bandThresholdPercentages) %}
76
- {% else %}
77
- {% set scalePosition = predictor.band | bandToScaleMarkerPosition(config.hasVeryHighBand) %}
78
- {% endif %}
79
-
80
- {% if predictor.band === 'NOT APPLICABLE' %}
81
- <div class="arns-predictor-scale govuk-body">
82
- <h2 class="govuk-heading-m">{{ predictor.name }}</h2>
83
- <p class="govuk-body">Not applicable</p>
84
- </div>
85
- {% else %}
86
- <div class="arns-predictor-scale govuk-body">
33
+ <div class="arns-predictor-scale govuk-body" data-predictor-scale="{{ predictor.name }}">
34
+ {% if predictor.band === 'NOT APPLICABLE' %}
35
+ <h2 class="govuk-heading-m" data-test-id="name">{{ predictor.name }}</h2>
36
+ <p class="govuk-body" data-test-id="notApplicable">Not applicable</p>
37
+ {% else %}
87
38
  <div class="arns-predictor-scale-header-wrapper">
88
39
  <div>
89
- <h2 class="govuk-heading-m">{{ predictor.name }}</h2>
90
- <p class="govuk-hint">Last updated: {{ predictor.completedDate }}</p>
40
+ <h2 class="govuk-heading-m" data-test-id="name">{{ predictor.name }}</h2>
41
+ <p class="govuk-hint" data-test-id="LastUpdatedDate">Last updated: {{ predictor.completedDate }}</p>
91
42
  </div>
92
43
  {% if predictor.staticOrDynamic %}
93
- <div>{{ govukTag({ text: predictor.staticOrDynamic, classes: "govuk-tag--grey"}) }}</div>
44
+ <div data-test-id="staticOrDynamic">{{ govukTag({ text: predictor.staticOrDynamic, classes: "govuk-tag--grey"}) }}</div>
94
45
  {% endif %}
95
46
  </div>
96
-
97
- <div class="arns-scale-marker">
98
- <div class="{{ scaleMarkerClass }} arns-scale-marker-wrapper" data-margin="{{ scalePosition }}">
99
- {{ predictorScaleMarker(predictor, config.showScore) }}
100
- </div>
101
- </div>
102
-
103
- <div class="{{ barTypeClass }}">
104
- <div data-band-percentage-start="{{ config.bandThresholdPercentages[0] }}"
105
- data-band-percentage="{{ config.bandThresholdPercentages[1] }}">
106
- <span></span>
107
- </div>
108
- <div data-band-percentage="{{ config.bandThresholdPercentages[2] }}">
109
- <span></span>
110
- </div>
111
- <div data-band-percentage="{{ config.bandThresholdPercentages[3] }}">
112
- <span></span>
113
- </div>
114
- {% if config.hasVeryHighBand === true %}
115
- <div data-band-percentage="{{ config.bandThresholdPercentages[4] }}">
116
- <span></span>
117
- </div>
118
- {% endif %}
119
- </div>
120
- </div>
121
- {% endif %}
47
+ {{ predictorScaleBar(predictor, key) }}
48
+ {% endif %}
49
+ </div>
122
50
 
123
51
  {% endif %}
124
52
  {% endfor %}