@ministryofjustice/hmpps-arns-frontend-components-lib 0.0.6 → 0.0.8

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.
@@ -0,0 +1,2 @@
1
+ import { Environment } from 'nunjucks';
2
+ export declare const arnsNunjucksSetup: (env: Environment) => void;
package/dist/_all.scss CHANGED
@@ -3,3 +3,5 @@
3
3
  // Requires govuk-frontend to be imported first
4
4
 
5
5
  @import "./arns/components/badge/predictor-badge";
6
+ @import "./arns/components/expanded-badge/expanded-predictor-badge";
7
+ @import "./arns/components/predictor-scale/predictor-scale";
@@ -11,31 +11,31 @@ $low-score-colour: #85994b;
11
11
  $low-score-colour--light: #dee9bd;
12
12
  $low-score-colour__text: #485b10;
13
13
 
14
- @mixin expanded-predictor-badge-base($primary-colour, $secondary-colour, $text-colour) {
14
+ @mixin arns-expanded-predictor-badge-base($primary-colour, $secondary-colour, $text-colour) {
15
15
  display: inline-flex;
16
16
  flex-direction: column;
17
17
  outline: 2px solid $primary-colour;
18
18
  width: 259px;
19
19
 
20
- & .predictor-badge__type {
20
+ & .arns-predictor-badge__type {
21
21
  @include govuk-font(19, "bold");
22
22
  color: govuk-colour("black");
23
23
 
24
24
  padding: 10px 10px 2px 10px;
25
25
  }
26
26
 
27
- & .predictor-badge__stats {
27
+ & .arns-predictor-badge__stats {
28
28
  padding: 2px 10px 2px 10px;
29
29
  }
30
30
 
31
- & .predictor-badge__level {
31
+ & .arns-predictor-badge__level {
32
32
  @include govuk-font(19, "bold");
33
33
  color: $text-colour;
34
34
 
35
35
  padding: 0px;
36
36
  }
37
37
 
38
- & .predictor-badge__score {
38
+ & .arns-predictor-badge__score {
39
39
  @include govuk-font(19, "bold");
40
40
  color: govuk-colour("black");
41
41
 
@@ -44,7 +44,7 @@ $low-score-colour__text: #485b10;
44
44
  padding: 2px 4px;
45
45
  }
46
46
 
47
- & .predictor-badge__static_or_dynamic {
47
+ & .arns-predictor-badge__static_or_dynamic {
48
48
  @include govuk-font(19, "regular");
49
49
  color: #282D30;
50
50
 
@@ -53,12 +53,12 @@ $low-score-colour__text: #485b10;
53
53
  padding: 2px 4px;
54
54
  }
55
55
 
56
- & .predictor-badge__wrapped_static_or_dynamic {
56
+ & .arns-predictor-badge__wrapped_static_or_dynamic {
57
57
  display: inline-block;
58
58
  margin-top: 3px;
59
59
  }
60
60
 
61
- & .predictor-badge__last_updated {
61
+ & .arns-predictor-badge__last_updated {
62
62
  @include govuk-font(16, "regular");
63
63
  color: #6E777A;
64
64
 
@@ -66,30 +66,30 @@ $low-score-colour__text: #485b10;
66
66
  }
67
67
  }
68
68
 
69
- .expanded-predictor-badge--very-high {
70
- @include expanded-predictor-badge-base(
69
+ .arns-expanded-predictor-badge--very-high {
70
+ @include arns-expanded-predictor-badge-base(
71
71
  $very-high-score-colour,
72
72
  $very-high-score-colour--light,
73
73
  $very-high-score-colour__text
74
74
  );
75
75
  }
76
76
 
77
- .expanded-predictor-badge--high {
78
- @include expanded-predictor-badge-base($high-score-colour, $high-score-colour--light, $high-score-colour__text);
77
+ .arns-expanded-predictor-badge--high {
78
+ @include arns-expanded-predictor-badge-base($high-score-colour, $high-score-colour--light, $high-score-colour__text);
79
79
  }
80
80
 
81
- .expanded-predictor-badge--medium {
82
- @include expanded-predictor-badge-base($medium-score-colour, $medium-score-colour--light, $medium-score-colour__text);
81
+ .arns-expanded-predictor-badge--medium {
82
+ @include arns-expanded-predictor-badge-base($medium-score-colour, $medium-score-colour--light, $medium-score-colour__text);
83
83
  }
84
84
 
85
- .expanded-predictor-badge--low {
86
- @include expanded-predictor-badge-base($low-score-colour, $low-score-colour--light, $low-score-colour__text);
85
+ .arns-expanded-predictor-badge--low {
86
+ @include arns-expanded-predictor-badge-base($low-score-colour, $low-score-colour--light, $low-score-colour__text);
87
87
  }
88
88
 
89
- .expanded-predictor-badge__fixed-width {
89
+ .arns-expanded-predictor-badge__fixed-width {
90
90
  width: 259px;
91
91
  }
92
92
 
93
- .expanded-predictor-badge__dynamic {
93
+ .arns-expanded-predictor-badge__dynamic {
94
94
  width: 100%;
95
95
  }
@@ -0,0 +1,81 @@
1
+ {#
2
+ ARNS Expanded Predictor Badge Component
3
+
4
+ @name expandedPredictorBadge
5
+
6
+ @description Displays a specified risk predictor score badge in an expanded format.
7
+ It uses the latest assessment from the provided data set.
8
+
9
+ @example
10
+ In route handler:
11
+ const riskData = await arnsComponents.getRiskData(token, 'crn', 'X123456')
12
+ res.render('page', { riskData })
13
+
14
+ In template:
15
+ {% from "components/expanded-predictor-badge/macro.njk" import expandedPredictorBadge %}
16
+ {{ expandedPredictorBadge({
17
+ data: riskData,
18
+ predictor: "allReoffendingPredictor",
19
+ showScore: true,
20
+ fixedWidth: true
21
+ }) }}
22
+
23
+ @param {object} params
24
+ @param {RiskData} params.data - Risk data object from ArnsComponents.getRiskData() containing an 'assessments' array
25
+ @param {string} params.predictor - The name of the specific predictor to display
26
+ @param {boolean} [params.showScore=false] - If true, displays the percentage score
27
+ @param {boolean} [params.fixedWidth=true] - If true or undefined, displays the expanded predictor badge in a fixed width format
28
+ #}
29
+ {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
30
+ {% set showScore = params.showScore if params.showScore else false %}
31
+
32
+ {% if latestAssessment %}
33
+ {% for key, predictor in latestAssessment %}
34
+ {% if key == params.predictor %}
35
+
36
+ {% set badgeClass = '' %}
37
+ {% switch predictor.band %}
38
+ {% case 'VERY HIGH' %}
39
+ {% set badgeClass = 'arns-expanded-predictor-badge--very-high' %}
40
+ {% case 'HIGH' %}
41
+ {% set badgeClass = 'arns-expanded-predictor-badge--high' %}
42
+ {% case 'MEDIUM' %}
43
+ {% set badgeClass = 'arns-expanded-predictor-badge--medium' %}
44
+ {% case 'LOW' %}
45
+ {% set badgeClass = 'arns-expanded-predictor-badge--low' %}
46
+ {% endswitch %}
47
+
48
+ {% set staticOrDynamicClass = 'arns-predictor-badge__static_or_dynamic' %}
49
+ {% if showScore and predictor.band in ['VERY HIGH', 'MEDIUM'] and predictor.staticOrDynamic === 'DYNAMIC' %}
50
+ {% set staticOrDynamicClass = staticOrDynamicClass + ' arns-predictor-badge__wrapped_static_or_dynamic' %}
51
+ {% endif %}
52
+
53
+ {% if params.fixedWidth or params.fixedWidth is undefined %}
54
+ {% set badgeWidthClass = 'arns-expanded-predictor-badge__fixed-width' %}
55
+ {% else %}
56
+ {% set badgeWidthClass = 'arns-expanded-predictor-badge__dynamic' %}
57
+ {% endif %}
58
+
59
+ <div class="{{ badgeClass }} {{ badgeWidthClass }}">
60
+ <span
61
+ class="arns-predictor-badge__type">{{ predictor.name }}</span>
62
+
63
+ <div class="arns-predictor-badge__stats">
64
+ <span class="arns-predictor-badge__level">{{ predictor.band }}</span>
65
+
66
+ {% if showScore and predictor.score %}
67
+ <span class="arns-predictor-badge__score">{{ predictor.score }}%</span>
68
+ {% endif %}
69
+
70
+ {% if predictor.staticOrDynamic %}
71
+ <span class="{{ staticOrDynamicClass }}">{{ predictor.staticOrDynamic }}</span>
72
+ {% endif %}
73
+
74
+ </div>
75
+
76
+ <span class="arns-predictor-badge__last_updated">Last updated: {{ predictor.completedDate }}</span>
77
+
78
+ </div>
79
+ {% endif %}
80
+ {% endfor %}
81
+ {% endif %}
@@ -11,18 +11,18 @@ $low-score-colour: #85994b;
11
11
  $low-score-colour--light: #dee9bd;
12
12
  $low-score-colour__text: #485b10;
13
13
 
14
- @mixin predictor-badge-base($primary-colour, $secondary-colour, $text-colour) {
14
+ @mixin arns-predictor-badge-base($primary-colour, $secondary-colour, $text-colour) {
15
15
  display: inline-flex;
16
16
  outline: 2px solid $primary-colour;
17
17
 
18
- & .predictor-badge__type_and_level {
18
+ & .arns-predictor-badge__type_and_level {
19
19
  @include govuk-font(19, "regular");
20
20
  color: $text-colour;
21
21
 
22
22
  padding: 2px 10px;
23
23
  }
24
24
 
25
- & .predictor-badge__score {
25
+ & .arns-predictor-badge__score {
26
26
  @include govuk-font(19, "bold");
27
27
  color: govuk-colour("black");
28
28
 
@@ -33,7 +33,7 @@ $low-score-colour__text: #485b10;
33
33
  align-content: center;
34
34
  }
35
35
 
36
- & .predictor-badge__static_or_dynamic {
36
+ & .arns-predictor-badge__static_or_dynamic {
37
37
  @include govuk-font(19, "regular");
38
38
  color: #282D30;
39
39
 
@@ -45,22 +45,22 @@ $low-score-colour__text: #485b10;
45
45
  }
46
46
  }
47
47
 
48
- .predictor-badge--very-high {
49
- @include predictor-badge-base(
48
+ .arns-predictor-badge--very-high {
49
+ @include arns-predictor-badge-base(
50
50
  $very-high-score-colour,
51
51
  $very-high-score-colour--light,
52
52
  $very-high-score-colour__text
53
53
  );
54
54
  }
55
55
 
56
- .predictor-badge--high {
57
- @include predictor-badge-base($high-score-colour, $high-score-colour--light, $high-score-colour__text);
56
+ .arns-predictor-badge--high {
57
+ @include arns-predictor-badge-base($high-score-colour, $high-score-colour--light, $high-score-colour__text);
58
58
  }
59
59
 
60
- .predictor-badge--medium {
61
- @include predictor-badge-base($medium-score-colour, $medium-score-colour--light, $medium-score-colour__text);
60
+ .arns-predictor-badge--medium {
61
+ @include arns-predictor-badge-base($medium-score-colour, $medium-score-colour--light, $medium-score-colour__text);
62
62
  }
63
63
 
64
- .predictor-badge--low {
65
- @include predictor-badge-base($low-score-colour, $low-score-colour--light, $low-score-colour__text);
64
+ .arns-predictor-badge--low {
65
+ @include arns-predictor-badge-base($low-score-colour, $low-score-colour--light, $low-score-colour__text);
66
66
  }
@@ -0,0 +1,58 @@
1
+ {#
2
+ ARNS Predictor Badge Component
3
+
4
+ @name predictorBadge
5
+
6
+ @description Displays a specified risk predictor score badge.
7
+ It uses the latest assessment from the provided data set.
8
+
9
+ @example
10
+ In route handler:
11
+ const riskData = await arnsComponents.getRiskData(token, 'crn', 'X123456')
12
+ res.render('page', { riskData })
13
+
14
+ In template:
15
+ {% from "components/predictor-badge/macro.njk" import predictorBadge %}
16
+ {{ predictorBadge({
17
+ data: riskData,
18
+ predictor: "allReoffendingPredictor",
19
+ showScore: true
20
+ }) }}
21
+
22
+ @param {object} params
23
+ @param {RiskData} params.data - Risk data object from ArnsComponents.getRiskData() containing an 'assessments' array
24
+ @param {string} params.predictor - The name of the specific predictor to display
25
+ @param {boolean} [params.showScore=false] - If true, displays the percentage score
26
+ #}
27
+ {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
28
+ {% set showScore = params.showScore if params.showScore else false %}
29
+
30
+ {% if latestAssessment %}
31
+ {% for key, predictor in latestAssessment %}
32
+ {% if key == params.predictor %}
33
+
34
+ {% set badgeClass = '' %}
35
+ {% switch predictor.band %}
36
+ {% case 'VERY HIGH' %}
37
+ {% set badgeClass = 'arns-predictor-badge--very-high' %}
38
+ {% case 'HIGH' %}
39
+ {% set badgeClass = 'arns-predictor-badge--high' %}
40
+ {% case 'MEDIUM' %}
41
+ {% set badgeClass = 'arns-predictor-badge--medium' %}
42
+ {% case 'LOW' %}
43
+ {% set badgeClass = 'arns-predictor-badge--low' %}
44
+ {% endswitch %}
45
+ <div class="{{ badgeClass }}">
46
+ <span class="arns-predictor-badge__type_and_level">{{ predictor.name | upper }} <strong>{{ predictor.band }}</strong></span>
47
+
48
+ {% if showScore and predictor.score %}
49
+ <span class="arns-predictor-badge__score">{{ predictor.score }}%</span>
50
+ {% endif %}
51
+
52
+ {% if predictor.staticOrDynamic %}
53
+ <span class="arns-predictor-badge__static_or_dynamic">{{ predictor.staticOrDynamic }}</span>
54
+ {% endif %}
55
+ </div>
56
+ {% endif %}
57
+ {% endfor %}
58
+ {% endif %}
@@ -0,0 +1,357 @@
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
+ $border-colour: #B1B4B6;
14
+
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
+ @mixin arns-scale-bar-label {
41
+ position: relative;
42
+ text-align: center;
43
+ display: block;
44
+ color: govuk-colour("black");
45
+ }
46
+
47
+ @mixin arns-scale-bar-base {
48
+ width: 100%;
49
+
50
+ &::after {
51
+ content: "";
52
+ display: block;
53
+ visibility: hidden;
54
+ clear: both;
55
+ }
56
+
57
+ & > div > span {
58
+ height: 15px;
59
+ display: block;
60
+ }
61
+ }
62
+
63
+ .arns-predictor-scale-header-wrapper{
64
+ display: flex;
65
+ justify-content: space-between;
66
+ }
67
+
68
+ .arns-predictor-scale {
69
+ width: 100%;
70
+ padding: 30px 40px 10px;
71
+ box-sizing: border-box;
72
+ 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--position-one-of-three,
109
+ .arns-scale-marker-wrapper--position-two-of-three,
110
+ .arns-scale-marker-wrapper--position-three-of-three {
111
+ width: 33%;
112
+ }
113
+
114
+ .arns-scale-marker-wrapper--position-one-of-three {
115
+ margin-left: 0;
116
+ }
117
+
118
+ .arns-scale-marker-wrapper--position-two-of-three {
119
+ margin-left: 34%;
120
+ }
121
+
122
+ .arns-scale-marker-wrapper--position-three-of-three {
123
+ margin-left: 67%;
124
+ }
125
+
126
+ .arns-scale-marker-wrapper--position-one-of-four,
127
+ .arns-scale-marker-wrapper--position-two-of-four,
128
+ .arns-scale-marker-wrapper--position-three-of-four,
129
+ .arns-scale-marker-wrapper--position-four-of-four {
130
+ width: 25%;
131
+ }
132
+
133
+ .arns-scale-marker-wrapper--position-one-of-four {
134
+ margin-left: 0;
135
+ }
136
+
137
+ .arns-scale-marker-wrapper--position-two-of-four {
138
+ margin-left: 25%;
139
+ }
140
+
141
+ .arns-scale-marker-wrapper--position-three-of-four {
142
+ margin-left: 50%;
143
+ }
144
+
145
+ .arns-scale-marker-wrapper--position-four-of-four {
146
+ margin-left: 75%;
147
+ }
148
+
149
+ .arns-scale-marker-wrapper--very-high {
150
+ @include arns-scale-marker-card-colour(
151
+ $very-high-score-colour,
152
+ $very-high-score-colour--light,
153
+ $very-high-score-colour__text
154
+ );
155
+ }
156
+
157
+ .arns-scale-marker-wrapper--high {
158
+ @include arns-scale-marker-card-colour($high-score-colour, $high-score-colour--light, $high-score-colour__text);
159
+ }
160
+
161
+ .arns-scale-marker-wrapper--medium {
162
+ @include arns-scale-marker-card-colour($medium-score-colour, $medium-score-colour--light, $medium-score-colour__text);
163
+ }
164
+
165
+ .arns-scale-marker-wrapper--low {
166
+ @include arns-scale-marker-card-colour($low-score-colour, $low-score-colour--light, $low-score-colour__text);
167
+ }
168
+
169
+ .arns-scale-marker__card {
170
+ width: 78px;
171
+ bottom: 30px;
172
+ margin: 0 auto;
173
+ background-color: govuk-colour("white");
174
+ border: 2px solid govuk-colour("black");
175
+ }
176
+
177
+ .arns-scale-marker__card-top {
178
+ width: 100%;
179
+
180
+ & h3,
181
+ & p {
182
+ margin: 0;
183
+ text-align: center;
184
+ text-transform: uppercase;
185
+ }
186
+
187
+ & h3 {
188
+ @include govuk-font(14, "bold");
189
+ }
190
+
191
+ & p {
192
+ @include govuk-font(14, "regular");
193
+ }
194
+ }
195
+
196
+ .arns-scale-marker__card-bottom p {
197
+ @include govuk-font(14, "bold");
198
+
199
+ margin: 0;
200
+ }
201
+
202
+ .arns-scale-marker__card-top,
203
+ .arns-scale-marker__card-bottom {
204
+ padding: 3px;
205
+ text-align: center;
206
+ box-sizing: border-box;
207
+ }
208
+
209
+ .arns-scale-bar--small {
210
+ @include arns-scale-bar-base;
211
+
212
+ margin-bottom: 15px;
213
+
214
+ & > div {
215
+ width: 33%;
216
+ display: inline;
217
+ float: left;
218
+ border-right: 1px solid transparent;
219
+ box-sizing: border-box;
220
+ }
221
+
222
+ & > div:nth-child(4n + 1) > span:first-child {
223
+ &::after{
224
+ @include govuk-font(16);
225
+ @include arns-scale-bar-label;
226
+
227
+ content:"LOW";
228
+ bottom: -15px;
229
+ color: $govuk-secondary-text-colour;
230
+ }
231
+ background-color: $low-score-colour;
232
+ }
233
+
234
+ & > div:nth-child(4n + 2) > span:first-child {
235
+ &::after{
236
+ @include govuk-font(16);
237
+ @include arns-scale-bar-label;
238
+
239
+ content:"MEDIUM";
240
+ bottom: -15px;
241
+ color: $govuk-secondary-text-colour;
242
+ }
243
+ background-color: $medium-score-colour;
244
+ }
245
+
246
+ & > div:nth-child(4n + 3) > span:first-child {
247
+ &::after{
248
+ @include govuk-font(16);
249
+ @include arns-scale-bar-label;
250
+
251
+ content:"HIGH";
252
+ bottom: -15px;
253
+ color: $govuk-secondary-text-colour;
254
+ }
255
+ background-color: $high-score-colour;
256
+ }
257
+ }
258
+
259
+ .arns-scale-bar--small-fourths {
260
+ & > div {
261
+ width: 25%;
262
+ padding-bottom: 20px;
263
+ }
264
+
265
+ & > div:nth-child(4n + 4) > span:first-child {
266
+ &::after{
267
+ @include govuk-font(16);
268
+ @include arns-scale-bar-label;
269
+
270
+ content:"VERY HIGH";
271
+ bottom: -15px;
272
+ color: $govuk-secondary-text-colour;
273
+ }
274
+ background-color: $very-high-score-colour;
275
+ }
276
+ }
277
+
278
+ .arns-scale-bar {
279
+ @include arns-scale-bar-base;
280
+ margin-bottom: 50px;
281
+ display: block;
282
+ clear: both;
283
+
284
+ & > div {
285
+ width: 33.33%;
286
+ height: 30px;
287
+ float: left;
288
+ border-right: 1px solid govuk-colour("black");
289
+ box-sizing: border-box;
290
+ position: relative;
291
+
292
+ &:first-child {
293
+ border-left: 1px solid govuk-colour("black");
294
+ }
295
+
296
+ & > span:first-child {
297
+ display: block;
298
+ width: 100%;
299
+ position: relative;
300
+
301
+ &::after {
302
+ @include govuk-font(16);
303
+ @include arns-scale-bar-label;
304
+ position: absolute;
305
+ bottom: -20px;
306
+ left: 50%;
307
+ transform: translateX(-50%);
308
+ white-space: nowrap;
309
+ color: $govuk-secondary-text-colour;
310
+ }
311
+ }
312
+
313
+ &::after {
314
+ @include govuk-font(16);
315
+ @include arns-scale-bar-label;
316
+ content: attr(data-band-percentage);
317
+ position: absolute;
318
+ bottom: -25px;
319
+ right: 0;
320
+ transform: translateX(50%);
321
+ white-space: nowrap;
322
+ }
323
+
324
+ &:first-child::before {
325
+ @include govuk-font(16);
326
+ @include arns-scale-bar-label;
327
+ content: attr(data-band-percentage-start);
328
+ position: absolute;
329
+ bottom: -25px;
330
+ left: 0;
331
+ transform: translateX(-50%);
332
+ white-space: nowrap;
333
+ }
334
+ }
335
+
336
+ & > div:nth-child(1) {
337
+ & > span:first-child { background-color: $low-score-colour; &::after { content: "LOW"; } }
338
+ }
339
+ & > div:nth-child(2) {
340
+ & > span:first-child { background-color: $medium-score-colour; &::after { content: "MEDIUM"; } }
341
+ }
342
+ & > div:nth-child(3) {
343
+ & > span:first-child { background-color: $high-score-colour; &::after { content: "HIGH"; } }
344
+ }
345
+ }
346
+
347
+ .arns-scale-bar--fourths {
348
+ & > div {
349
+ width: 25% !important;
350
+ }
351
+ & > div:nth-child(4) {
352
+ & > span:first-child {
353
+ background-color: $very-high-score-colour;
354
+ &::after { content: "VERY HIGH"; }
355
+ }
356
+ }
357
+ }
@@ -0,0 +1,3 @@
1
+ {% macro predictorScale(params) %}
2
+ {%- include "./template.njk" -%}
3
+ {% endmacro %}
@@ -0,0 +1,156 @@
1
+ {#
2
+ ARNS Predictor Scale Component
3
+
4
+ @name predictorScale
5
+
6
+ @description Displays a specified risk predictor scale.
7
+
8
+ @example
9
+ In route handler:
10
+ const riskData = await arnsComponents.getRiskData(token, 'crn', 'X123456')
11
+ res.render('page', { riskData })
12
+
13
+ In template:
14
+ {% from "components/predictor-scale/macro.njk" import predictorScale %}
15
+ {{ predictorScale({
16
+ data: riskData,
17
+ predictor: "allReoffendingPredictor"
18
+ }) }}
19
+
20
+ @param {object} params
21
+ @param {RiskData} params.data - Risk data object from ArnsComponents.getRiskData() containing an 'assessments' array
22
+ @param {string} params.predictor - The name of the specific predictor to display
23
+ #}
24
+ {%- from "govuk/components/tag/macro.njk" import govukTag -%}
25
+ {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
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 %}
42
+
43
+ {% if latestAssessment %}
44
+ {% for key, predictor in latestAssessment %}
45
+ {% if key == params.predictor %}
46
+
47
+ {% set includeVeryHigh = true %}
48
+ {% set showScore = true %}
49
+ {% set includePercentage = true %}
50
+ {% set bandThresholdPercentages = [] %}
51
+
52
+ {% switch key %}
53
+ {% case 'allReoffendingPredictor' %}{% case 'ogrs3' %}
54
+ {% set bandThresholdPercentages = ['0%', '50%', '75%', '90%', '100%'] %}
55
+ {% case 'violentReoffendingPredictor' %}{% case 'ovp' %}
56
+ {% set bandThresholdPercentages = ['0%', '30%', '60%', '80%', '100%'] %}
57
+ {% case 'seriousViolentReoffendingPredictor' %}
58
+ {% set showScore = false %}
59
+ {% set includePercentage = false %}
60
+ {% case 'directContactSexualReoffendingPredictor' %}{% case 'ospdc' %}
61
+ {% set showScore = false %}
62
+ {% set includePercentage = false %}
63
+ {% case 'indirectImageContactSexualReoffendingPredictor' %}{% case 'ospiic' %}
64
+ {% set includeVeryHigh = false %}
65
+ {% set showScore = false %}
66
+ {% set includePercentage = false %}
67
+ {% case 'combinedSeriousReoffendingPredictor' %}
68
+ {% set bandThresholdPercentages = ['0%', '1%', '3%', '6.9%', '25%+'] %}
69
+ {% case 'ogp' %}
70
+ {% set bandThresholdPercentages = ['0%', '34%', '67%', '85%', '100%'] %}
71
+ {% case 'rsr' %}
72
+ {% set includeVeryHigh = false %}
73
+ {% set bandThresholdPercentages = ['0%', '3%', '6.9%', '25%+'] %}
74
+ {% endswitch %}
75
+
76
+ {% set scaleMarkerClass = '' %}
77
+
78
+ {% if includeVeryHigh !== true %}
79
+ {% switch predictor.band %}
80
+ {% case 'LOW' %}
81
+ {% set scaleMarkerClass = 'arns-scale-marker-wrapper--low arns-scale-marker-wrapper--position-one-of-three' %}
82
+ {% case 'MEDIUM' %}
83
+ {% set scaleMarkerClass = 'arns-scale-marker-wrapper--medium arns-scale-marker-wrapper--position-two-of-three' %}
84
+ {% case 'HIGH' %}
85
+ {% set scaleMarkerClass = 'arns-scale-marker-wrapper--high arns-scale-marker-wrapper--position-three-of-three' %}
86
+ {% endswitch %}
87
+ {% else %}
88
+ {% switch predictor.band %}
89
+ {% case 'LOW' %}
90
+ {% set scaleMarkerClass = 'arns-scale-marker-wrapper--low arns-scale-marker-wrapper--position-one-of-four' %}
91
+ {% case 'MEDIUM' %}
92
+ {% set scaleMarkerClass = 'arns-scale-marker-wrapper--medium arns-scale-marker-wrapper--position-two-of-four' %}
93
+ {% case 'HIGH' %}
94
+ {% set scaleMarkerClass = 'arns-scale-marker-wrapper--high arns-scale-marker-wrapper--position-three-of-four' %}
95
+ {% case 'VERY HIGH' %}
96
+ {% set scaleMarkerClass = 'arns-scale-marker-wrapper--very-high arns-scale-marker-wrapper--position-four-of-four' %}
97
+ {% endswitch %}
98
+ {% endif %}
99
+
100
+ {% set barTypeClass = '' %}
101
+
102
+ {% if includeVeryHigh !== true and includePercentage !== true %}
103
+ {% set barTypeClass = 'arns-scale-bar--small' %}
104
+ {% elif includeVeryHigh === true and includePercentage !== true %}
105
+ {% set barTypeClass = 'arns-scale-bar--small arns-scale-bar--small-fourths' %}
106
+ {% elif includeVeryHigh === true and includePercentage === true %}
107
+ {% set barTypeClass = 'arns-scale-bar arns-scale-bar--fourths' %}
108
+ {% elif includeVeryHigh !== true and includePercentage === true %}
109
+ {% set barTypeClass = 'arns-scale-bar' %}
110
+ {% endif %}
111
+
112
+ {% if predictor.band === 'NOT APPLICABLE' %}
113
+ <div class="arns-predictor-scale govuk-body">
114
+ <h2 class="govuk-heading-m">{{ predictor.name }}</h2>
115
+ <p class="govuk-body">Not applicable</p>
116
+ </div>
117
+ {% else %}
118
+ <div class="arns-predictor-scale govuk-body">
119
+ <div class="arns-predictor-scale-header-wrapper">
120
+ <div>
121
+ <h2 class="govuk-heading-m">{{ predictor.name }}</h2>
122
+ <p class="govuk-hint">Last updated: {{ predictor.completedDate }}</p>
123
+ </div>
124
+ {% if predictor.staticOrDynamic %}
125
+ <div>{{ govukTag({ text: predictor.staticOrDynamic, classes: "govuk-tag--grey"}) }}</div>
126
+ {% endif %}
127
+ </div>
128
+
129
+ <div class="arns-scale-marker">
130
+ <div class="{{ scaleMarkerClass }}">
131
+ {{ predictorScaleMarker(predictor, showScore) }}
132
+ </div>
133
+ </div>
134
+
135
+ <div class="{{ barTypeClass }}">
136
+ <div data-band-percentage-start="{{ bandThresholdPercentages[0] }}" data-band-percentage="{{ bandThresholdPercentages[1] }}">
137
+ <span></span>
138
+ </div>
139
+ <div data-band-percentage="{{ bandThresholdPercentages[2] }}">
140
+ <span></span>
141
+ </div>
142
+ <div data-band-percentage="{{ bandThresholdPercentages[3] }}">
143
+ <span></span>
144
+ </div>
145
+ {% if includeVeryHigh === true %}
146
+ <div data-band-percentage="{{ bandThresholdPercentages[4] }}">
147
+ <span></span>
148
+ </div>
149
+ {% endif %}
150
+ </div>
151
+ </div>
152
+ {% endif %}
153
+
154
+ {% endif %}
155
+ {% endfor %}
156
+ {% endif %}
package/dist/index.cjs.js CHANGED
@@ -79,5 +79,14 @@ class ArnsComponents {
79
79
  }
80
80
  }
81
81
 
82
+ const arnsNunjucksSetup = (env) => {
83
+ // TODO update with required globals and filters
84
+ env.addGlobal('testGlobal', 'This is a test global');
85
+ env.addFilter('testFilter', (inputString) => {
86
+ return inputString.toUpperCase();
87
+ });
88
+ };
89
+
82
90
  exports.ArnsComponents = ArnsComponents;
91
+ exports.arnsNunjucksSetup = arnsNunjucksSetup;
83
92
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/transformers/AllPredictorVersionedDtoToAssessmentsTransformer.ts","../src/ArnsComponents.ts"],"sourcesContent":[null,null],"names":["RestClient"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/transformers/AllPredictorVersionedDtoToAssessmentsTransformer.ts","../src/ArnsComponents.ts","../src/NunjucksSetup.ts"],"sourcesContent":[null,null,null],"names":["RestClient"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ApiConfig, AuthOptions } from '@ministryofjustice/hmpps-rest-client';
2
2
  import { AuthenticationClient } from '@ministryofjustice/hmpps-auth-clients';
3
3
  import Logger from 'bunyan';
4
+ import { Environment } from 'nunjucks';
4
5
 
5
6
  interface ArnsComponentsConfig extends ApiConfig {
6
7
  }
@@ -47,5 +48,7 @@ declare class ArnsComponents {
47
48
  getRiskData(authOptions: AuthOptions | string, identifierType: string, identifierValue: string): Promise<RiskData>;
48
49
  }
49
50
 
50
- export { ArnsComponents };
51
+ declare const arnsNunjucksSetup: (env: Environment) => void;
52
+
53
+ export { ArnsComponents, arnsNunjucksSetup };
51
54
  export type { ArnsComponentsConfig, Assessments, RiskData };
package/dist/index.esm.js CHANGED
@@ -77,5 +77,13 @@ class ArnsComponents {
77
77
  }
78
78
  }
79
79
 
80
- export { ArnsComponents };
80
+ const arnsNunjucksSetup = (env) => {
81
+ // TODO update with required globals and filters
82
+ env.addGlobal('testGlobal', 'This is a test global');
83
+ env.addFilter('testFilter', (inputString) => {
84
+ return inputString.toUpperCase();
85
+ });
86
+ };
87
+
88
+ export { ArnsComponents, arnsNunjucksSetup };
81
89
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/transformers/AllPredictorVersionedDtoToAssessmentsTransformer.ts","../src/ArnsComponents.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/transformers/AllPredictorVersionedDtoToAssessmentsTransformer.ts","../src/ArnsComponents.ts","../src/NunjucksSetup.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ministryofjustice/hmpps-arns-frontend-components-lib",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "ARNS front-end library for risk score visualisations",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",
@@ -114,7 +114,7 @@
114
114
  "@ministryofjustice/hmpps-auth-clients": "^1.0.1",
115
115
  "@ministryofjustice/hmpps-rest-client": "^1.0.0",
116
116
  "@types/express": "^5.0.6",
117
- "@types/node": "22.19.7",
117
+ "@types/node": "22.19.8",
118
118
  "@types/nunjucks": "^3.2.6",
119
119
  "nunjucks": "^3.2.4",
120
120
  "superagent": "^10.3.0"
@@ -1,62 +0,0 @@
1
- {#
2
- ARNS Predictor Badge Component
3
-
4
- @name predictorBadge
5
-
6
- @description Displays specified risk predictor score badges.
7
- It uses the latest assessment from the provided data set.
8
-
9
- @example
10
- In route handler:
11
- const riskData = await arnsComponents.getRiskData(token, 'crn', 'X123456')
12
- res.render('page', { riskData })
13
-
14
- In template:
15
- {% from "components/badge/macro.njk" import predictorBadge %}
16
- {{ predictorBadge({
17
- data: riskData,
18
- predictor: "allReoffendingPredictor",
19
- showScore: true,
20
- classes: "class-name-here"
21
- }) }}
22
-
23
- @param {object} params
24
- @param {RiskData} params.data - Risk data object from ArnsComponents.getRiskData() containing an 'assessments' array
25
- @param {string} params.predictor - The name of the specific predictor to display
26
- @param {boolean} [params.showScore=false] - If true, displays the percentage score
27
- @param {string} [params.classes] - Optional CSS utility classes to apply to the container
28
- #}
29
- {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
30
- {% set showScore = params.showScore if params.showScore else false %}
31
-
32
- {% if latestAssessment is defined %}
33
- <div class="{% if params.classes %}{{ params.classes }}{% endif %}">
34
- {% for key, predictor in latestAssessment %}
35
- {% if key == params.predictor %}
36
-
37
- {% set badgeClass = '' %}
38
- {% switch predictor.band %}
39
- {% case 'VERY HIGH' %}
40
- {% set badgeClass = 'predictor-badge--very-high' %}
41
- {% case 'HIGH' %}
42
- {% set badgeClass = 'predictor-badge--high' %}
43
- {% case 'MEDIUM' %}
44
- {% set badgeClass = 'predictor-badge--medium' %}
45
- {% case 'LOW' %}
46
- {% set badgeClass = 'predictor-badge--low' %}
47
- {% endswitch %}
48
- <div class="{{ badgeClass }}">
49
- <span class="predictor-badge__type_and_level">{{ predictor.name | upper }} <strong>{{ predictor.band }}</strong></span>
50
-
51
- {% if showScore and predictor.score is defined %}
52
- <span class="predictor-badge__score">{{ predictor.score }}%</span>
53
- {% endif %}
54
-
55
- {% if predictor.staticOrDynamic is defined %}
56
- <span class="predictor-badge__static_or_dynamic">{{ predictor.staticOrDynamic }}</span>
57
- {% endif %}
58
- </div>
59
- {% endif %}
60
- {% endfor %}
61
- </div>
62
- {% endif %}
@@ -1,87 +0,0 @@
1
- {#
2
- ARNS Expanded Predictor Badge Component
3
-
4
- @name expandedPredictorBadge
5
-
6
- @description Displays specified risk predictor score badges in an expanded format.
7
- It uses the latest assessment from the provided data set.
8
-
9
- @example
10
- In route handler:
11
- const riskData = await arnsComponents.getRiskData(token, 'crn', 'X123456')
12
- res.render('page', { riskData })
13
-
14
- In template:
15
- {% from "components/expanded-badge/macro.njk" import expandedPredictorBadge %}
16
- {{ expandedPredictorBadge({
17
- data: riskData,
18
- predictor: "allReoffendingPredictor",
19
- showScore: true,
20
- fixedWidth: true,
21
- classes: "class-name-here"
22
- }) }}
23
-
24
- @param {object} params
25
- @param {RiskData} params.data - Risk data object from ArnsComponents.getRiskData() containing an 'assessments' array
26
- @param {string} params.predictor - The name of the specific predictor to display
27
- @param {boolean} [params.showScore=false] - If true, displays the percentage score
28
- @param {boolean} [params.fixedWidth=true] - If true or undefined, displays the expanded predictor badge in a fixed width format
29
- @param {string} [params.classes] - Optional CSS utility classes to apply to the container
30
- #}
31
- {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
32
- {% set showScore = params.showScore if params.showScore else false %}
33
-
34
- {% if latestAssessment is defined %}
35
- <div class="{% if params.classes %}{{ params.classes }}{% endif %}">
36
-
37
- {% for key, predictor in latestAssessment %}
38
- {% if key == params.predictor %}
39
-
40
- {% set badgeClass = '' %}
41
- {% switch predictor.band %}
42
- {% case 'VERY_HIGH' %}
43
- {% set badgeClass = 'expanded-predictor-badge--very-high' %}
44
- {% case 'HIGH' %}
45
- {% set badgeClass = 'expanded-predictor-badge--high' %}
46
- {% case 'MEDIUM' %}
47
- {% set badgeClass = 'expanded-predictor-badge--medium' %}
48
- {% case 'LOW' %}
49
- {% set badgeClass = 'expanded-predictor-badge--low' %}
50
- {% endswitch %}
51
-
52
- {% set staticOrDynamicClass = 'predictor-badge__static_or_dynamic' %}
53
- {% if showScore and predictor.band in ['VERY HIGH', 'MEDIUM'] and predictor.staticOrDynamic === 'DYNAMIC' %}
54
- {% set staticOrDynamicClass = staticOrDynamicClass + ' predictor-badge__wrapped_static_or_dynamic' %}
55
- {% endif %}
56
-
57
- {% if params.fixedWidth or params.fixedWidth is undefined %}
58
- {% set badgeWidthClass = 'expanded-predictor-badge__fixed-width' %}
59
- {% else %}
60
- {% set badgeWidthClass = 'expanded-predictor-badge__dynamic' %}
61
- {% endif %}
62
-
63
- <div class="{{ badgeClass }} {{ badgeWidthClass }}">
64
- <span
65
- class="predictor-badge__type">{{ predictor.name }}</span>
66
-
67
- <div class="predictor-badge__stats">
68
- <span class="predictor-badge__level">{{ predictor.band }}</span>
69
-
70
- {% if showScore and predictor.score is defined %}
71
- <span class="predictor-badge__score">{{ predictor.score }}%</span>
72
- {% endif %}
73
-
74
- {% if predictor.staticOrDynamic is defined %}
75
- <span class="{{ staticOrDynamicClass }}">{{ predictor.staticOrDynamic }}</span>
76
- {% endif %}
77
-
78
- </div>
79
-
80
- <span class="predictor-badge__last_updated">Last updated: {{ predictor.completedDate }}</span>
81
-
82
- </div>
83
- {% endif %}
84
- {% endfor %}
85
- {% endif %}
86
- </div>
87
- {% endif %}