@ministryofjustice/hmpps-arns-frontend-components-lib 0.0.5 → 0.0.7

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.
@@ -24,39 +24,36 @@
24
24
  @param {RiskData} params.data - Risk data object from ArnsComponents.getRiskData() containing an 'assessments' array
25
25
  @param {string} params.predictor - The name of the specific predictor to display
26
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
27
  #}
29
28
  {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
30
29
  {% set showScore = params.showScore if params.showScore else false %}
31
30
 
32
- {% if latestAssessment is defined %}
33
- <div class="predictor-badges{% 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 %}
56
- <span class="predictor-badge__static_or_dynamic">{{ predictor.staticOrDynamic }}</span>
57
- {% endif %}
58
- </div>
59
- {% endif %}
60
- {% endfor %}
61
- </div>
31
+ {% if latestAssessment %}
32
+ {% for key, predictor in latestAssessment %}
33
+ {% if key == params.predictor %}
34
+
35
+ {% set badgeClass = '' %}
36
+ {% switch predictor.band %}
37
+ {% case 'VERY HIGH' %}
38
+ {% set badgeClass = 'predictor-badge--very-high' %}
39
+ {% case 'HIGH' %}
40
+ {% set badgeClass = 'predictor-badge--high' %}
41
+ {% case 'MEDIUM' %}
42
+ {% set badgeClass = 'predictor-badge--medium' %}
43
+ {% case 'LOW' %}
44
+ {% set badgeClass = 'predictor-badge--low' %}
45
+ {% endswitch %}
46
+ <div class="{{ badgeClass }}">
47
+ <span class="predictor-badge__type_and_level">{{ predictor.name | upper }} <strong>{{ predictor.band }}</strong></span>
48
+
49
+ {% if showScore and predictor.score %}
50
+ <span class="predictor-badge__score">{{ predictor.score }}%</span>
51
+ {% endif %}
52
+
53
+ {% if predictor.staticOrDynamic %}
54
+ <span class="predictor-badge__static_or_dynamic">{{ predictor.staticOrDynamic }}</span>
55
+ {% endif %}
56
+ </div>
57
+ {% endif %}
58
+ {% endfor %}
62
59
  {% endif %}
@@ -0,0 +1,95 @@
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
+
14
+ @mixin expanded-predictor-badge-base($primary-colour, $secondary-colour, $text-colour) {
15
+ display: inline-flex;
16
+ flex-direction: column;
17
+ outline: 2px solid $primary-colour;
18
+ width: 259px;
19
+
20
+ & .predictor-badge__type {
21
+ @include govuk-font(19, "bold");
22
+ color: govuk-colour("black");
23
+
24
+ padding: 10px 10px 2px 10px;
25
+ }
26
+
27
+ & .predictor-badge__stats {
28
+ padding: 2px 10px 2px 10px;
29
+ }
30
+
31
+ & .predictor-badge__level {
32
+ @include govuk-font(19, "bold");
33
+ color: $text-colour;
34
+
35
+ padding: 0px;
36
+ }
37
+
38
+ & .predictor-badge__score {
39
+ @include govuk-font(19, "bold");
40
+ color: govuk-colour("black");
41
+
42
+ background-color: $secondary-colour;
43
+
44
+ padding: 2px 4px;
45
+ }
46
+
47
+ & .predictor-badge__static_or_dynamic {
48
+ @include govuk-font(19, "regular");
49
+ color: #282D30;
50
+
51
+ background-color: #E5E6E7;
52
+
53
+ padding: 2px 4px;
54
+ }
55
+
56
+ & .predictor-badge__wrapped_static_or_dynamic {
57
+ display: inline-block;
58
+ margin-top: 3px;
59
+ }
60
+
61
+ & .predictor-badge__last_updated {
62
+ @include govuk-font(16, "regular");
63
+ color: #6E777A;
64
+
65
+ padding: 2px 10px 10px 10px;
66
+ }
67
+ }
68
+
69
+ .expanded-predictor-badge--very-high {
70
+ @include expanded-predictor-badge-base(
71
+ $very-high-score-colour,
72
+ $very-high-score-colour--light,
73
+ $very-high-score-colour__text
74
+ );
75
+ }
76
+
77
+ .expanded-predictor-badge--high {
78
+ @include expanded-predictor-badge-base($high-score-colour, $high-score-colour--light, $high-score-colour__text);
79
+ }
80
+
81
+ .expanded-predictor-badge--medium {
82
+ @include expanded-predictor-badge-base($medium-score-colour, $medium-score-colour--light, $medium-score-colour__text);
83
+ }
84
+
85
+ .expanded-predictor-badge--low {
86
+ @include expanded-predictor-badge-base($low-score-colour, $low-score-colour--light, $low-score-colour__text);
87
+ }
88
+
89
+ .expanded-predictor-badge__fixed-width {
90
+ width: 259px;
91
+ }
92
+
93
+ .expanded-predictor-badge__dynamic {
94
+ width: 100%;
95
+ }
@@ -0,0 +1,3 @@
1
+ {% macro expandedPredictorBadge(params) %}
2
+ {%- include "./template.njk" -%}
3
+ {% endmacro %}
@@ -0,0 +1,82 @@
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
+ #}
30
+ {% set latestAssessment = params.data.assessments | first if params.data.assessments else null %}
31
+ {% set showScore = params.showScore if params.showScore else false %}
32
+
33
+ {% if latestAssessment %}
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 = 'expanded-predictor-badge--very-high' %}
41
+ {% case 'HIGH' %}
42
+ {% set badgeClass = 'expanded-predictor-badge--high' %}
43
+ {% case 'MEDIUM' %}
44
+ {% set badgeClass = 'expanded-predictor-badge--medium' %}
45
+ {% case 'LOW' %}
46
+ {% set badgeClass = 'expanded-predictor-badge--low' %}
47
+ {% endswitch %}
48
+
49
+ {% set staticOrDynamicClass = 'predictor-badge__static_or_dynamic' %}
50
+ {% if showScore and predictor.band in ['VERY HIGH', 'MEDIUM'] and predictor.staticOrDynamic === 'DYNAMIC' %}
51
+ {% set staticOrDynamicClass = staticOrDynamicClass + ' predictor-badge__wrapped_static_or_dynamic' %}
52
+ {% endif %}
53
+
54
+ {% if params.fixedWidth or params.fixedWidth is undefined %}
55
+ {% set badgeWidthClass = 'expanded-predictor-badge__fixed-width' %}
56
+ {% else %}
57
+ {% set badgeWidthClass = 'expanded-predictor-badge__dynamic' %}
58
+ {% endif %}
59
+
60
+ <div class="{{ badgeClass }} {{ badgeWidthClass }}">
61
+ <span
62
+ class="predictor-badge__type">{{ predictor.name }}</span>
63
+
64
+ <div class="predictor-badge__stats">
65
+ <span class="predictor-badge__level">{{ predictor.band }}</span>
66
+
67
+ {% if showScore and predictor.score %}
68
+ <span class="predictor-badge__score">{{ predictor.score }}%</span>
69
+ {% endif %}
70
+
71
+ {% if predictor.staticOrDynamic %}
72
+ <span class="{{ staticOrDynamicClass }}">{{ predictor.staticOrDynamic }}</span>
73
+ {% endif %}
74
+
75
+ </div>
76
+
77
+ <span class="predictor-badge__last_updated">Last updated: {{ predictor.completedDate }}</span>
78
+
79
+ </div>
80
+ {% endif %}
81
+ {% endfor %}
82
+ {% endif %}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ministryofjustice/hmpps-arns-frontend-components-lib",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
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"