mp-design-system 1.2.27 → 1.2.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. package/dist/build/scss/library.css +1 -1
  2. package/dist/build/scss/library.css.map +1 -1
  3. package/dist/build/scss/main.css +1 -1
  4. package/dist/build/scss/main.css.map +1 -1
  5. package/package.json +2 -2
  6. package/src/_includes/components/button/button.scss +1 -1
  7. package/src/_includes/components/card/existing-customer-card.config.js +51 -0
  8. package/src/_includes/components/card/existing-customer-card.njk +40 -0
  9. package/src/_includes/components/card/existing-customer-card.scss +100 -0
  10. package/src/_includes/components/card/industry-card.config.js +26 -3
  11. package/src/_includes/components/card/industry-card.njk +32 -6
  12. package/src/_includes/components/card/industry-card.scss +76 -6
  13. package/src/_includes/components/card/macro.njk +14 -2
  14. package/src/_includes/components/card/measurement-type-card.config.js +35 -0
  15. package/src/_includes/components/card/measurement-type-card.njk +35 -0
  16. package/src/_includes/components/card/measurement-type-card.scss +56 -0
  17. package/src/_includes/components/card/{product-comparison-card.config.js → product-card.config.js} +28 -27
  18. package/src/_includes/components/card/product-card.njk +50 -0
  19. package/src/_includes/components/card/product-card.scss +88 -0
  20. package/src/_includes/components/card/search-result-card.config.js +2 -2
  21. package/src/_includes/components/card/search-result-card.njk +27 -18
  22. package/src/_includes/components/card/search-result-card.scss +5 -5
  23. package/src/_includes/components/card/technology-card.config.js +35 -0
  24. package/src/_includes/components/card/technology-card.njk +35 -0
  25. package/src/_includes/components/card/technology-card.scss +56 -0
  26. package/src/_includes/components/component/preview-fixed-width.njk +5 -0
  27. package/src/_includes/components/eyebrow/eyebrow.config.js +14 -0
  28. package/src/_includes/components/eyebrow/eyebrow.scss +10 -0
  29. package/src/_includes/components/signpost/signpost.config.js +14 -1
  30. package/src/_includes/components/signpost/signpost.njk +7 -4
  31. package/src/_includes/components/signpost/signpost.scss +23 -0
  32. package/src/_includes/components/tabs/tabs.scss +4 -0
  33. package/src/_includes/components/twi/twi.scss +4 -0
  34. package/src/_includes/layout.njk +0 -2
  35. package/src/_includes/navigation/corporate.njk +0 -3
  36. package/src/assets/scss/components/index.scss +4 -1
  37. package/src/assets/scss/components/product-finder.scss +1 -1
  38. package/src/assets/scss/tools/cutoff.scss +5 -1
  39. package/src/assets/scss/tools/index.scss +11 -7
  40. package/src/assets/scss/utilities/space.scss +6 -0
  41. package/src/index.njk +1 -1
  42. package/src/prototype/events-hub.njk +463 -0
  43. package/src/prototype/index.njk +251 -182
  44. package/src/prototype/range.njk +5 -5
  45. package/src/prototype/sections.njk +6 -1
  46. package/src/static/svg/icon-globe-alt.svg +4 -0
  47. package/src/static/svg/icon-live-webinars.svg +6 -0
  48. package/src/static/svg/icon-recorded-webinars.svg +4 -0
  49. package/src/static/svg/icon-user-trainings.svg +5 -0
  50. package/src/_includes/components/card/product-comparison-card.njk +0 -37
  51. package/src/_includes/components/card/product-comparison-card.scss +0 -79
  52. /package/src/assets/fonts/{inter-bold.woff → Inter-Bold.woff} +0 -0
  53. /package/src/assets/fonts/{inter-bold.woff2 → Inter-Bold.woff2} +0 -0
  54. /package/src/assets/fonts/{inter-regular.woff → Inter-Regular.woff} +0 -0
  55. /package/src/assets/fonts/{inter-regular.woff2 → Inter-Regular.woff2} +0 -0
  56. /package/src/assets/fonts/{inter-semibold.woff → Inter-SemiBold.woff} +0 -0
  57. /package/src/assets/fonts/{inter-semibold.woff2 → Inter-SemiBold.woff2} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mp-design-system",
3
- "version": "1.2.27",
3
+ "version": "1.2.30",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "dev": "npm-run-all --parallel bundle:*",
@@ -30,7 +30,7 @@
30
30
  "parcel": "^2.4.0",
31
31
  "require-glob": "^4.1.0",
32
32
  "rimraf": "^3.0.2",
33
- "sass": "^1.49.10",
33
+ "sass": "^1.71.0",
34
34
  "slugify": "^1.6.5"
35
35
  },
36
36
  "alias": {
@@ -149,7 +149,7 @@
149
149
 
150
150
  &--small {
151
151
  @include step(-1);
152
- padding: 0.5em 1em;
152
+ padding: 0.75em 1em;
153
153
  }
154
154
 
155
155
  &--loading {
@@ -0,0 +1,51 @@
1
+ const categories = require('../component/categories');
2
+
3
+ module.exports = {
4
+ title: 'Existing customer card',
5
+ category: categories.card,
6
+ component: {
7
+ name: 'existing-customer-card',
8
+ folder: 'card'
9
+ },
10
+ preview: 'cards-two',
11
+ context: {
12
+ title: 'Mastersizer accessories',
13
+ link: 'https://www.malvernpanalytical.com/en/products/product-range/mastersizer-range/mastersizer-3000#accessories',
14
+ lede: 'Configure your Mastersizer for your application and requirements with our range of accessories.',
15
+ cta: {
16
+ label: 'View accessories',
17
+ },
18
+ image: {
19
+ src: 'https://p3.aprimocdn.net/malvernpanalytical/37015a45-6002-4cc3-9650-ad9e00b43396/636216816480633919JL_Original%20file.jpg?quality=60',
20
+ alt: 'Mastersizer accessories',
21
+ }
22
+ },
23
+ variants: [
24
+ {
25
+ title: 'Large',
26
+ preview: 'fixed-width',
27
+ context: {
28
+ width: 'large',
29
+ title: 'Looking for support?',
30
+ link: 'https://www.malvernpanalytical.com/en/support/product-support/mastersizer-range',
31
+ lede: 'Looking for support, manuals or software? Malvern Panalytical will provide the support for your business.',
32
+ cta: {
33
+ label: 'Get support',
34
+ },
35
+ image: {
36
+ src: 'https://p3.aprimocdn.net/malvernpanalytical/15fab5ad-6222-460d-aa00-ae0e011438ad/i_110714_063_m3kBROCHURE_w_MV_Original.JPG?quality=60',
37
+ alt: 'Mastersizer accessories',
38
+ }
39
+ }
40
+ }
41
+ ],
42
+ props: [
43
+ {
44
+ table: [
45
+ ['title', 'string'],
46
+ ['description', 'string'],
47
+ ['url', 'string'],
48
+ ]
49
+ }
50
+ ]
51
+ }
@@ -0,0 +1,40 @@
1
+ {%- from "components/twi/macro.njk" import twi -%}
2
+
3
+ {%- set classNames = "mp c-existing-customer-card" -%}
4
+
5
+ {%- if params.width -%}
6
+ {% set classNames = classNames + " c-existing-customer-card--" + params.width %}
7
+ {% endif -%}
8
+
9
+ <div class="{{ classNames }}">
10
+ <div class="c-existing-customer-card__wrapper">
11
+ <div class="c-existing-customer-card__main-wrapper">
12
+ {% if params.title | length %}
13
+ <h3 class="c-existing-customer-card__title">
14
+ {% if params.link | length %}
15
+ <a href="{{ params.link }}" aria-label="{{ params.title }}">
16
+ {{ params.title }}
17
+ </a>
18
+ {% else %}
19
+ {{ params.title }}
20
+ {% endif %}
21
+ </h3>
22
+ {% endif %}
23
+ {% if params.lede | length %}
24
+ <p class="c-existing-customer-card__lede">{{ params.lede }}</p>
25
+ {% endif %}
26
+ {% if params.cta | length %}
27
+ {{ twi({
28
+ label: params.cta.label,
29
+ classes: 'u-link',
30
+ icon: 'arrow-right'
31
+ }) }}
32
+ {% endif %}
33
+ </div>
34
+ {% if params.image | length %}
35
+ <figure class="c-existing-customer-card__media-wrapper">
36
+ <img class="c-existing-customer-card__image" src="{{ params.image.src }}" alt="{{ params.image.alt }}" />
37
+ </figure>
38
+ {% endif %}
39
+ </div>
40
+ </div>
@@ -0,0 +1,100 @@
1
+ .c-existing-customer-card {
2
+ background: color('white');
3
+ position: relative;
4
+
5
+ &::before {
6
+ content: '';
7
+ position: absolute;
8
+ top: 0;
9
+ right: 0;
10
+ width: 0;
11
+ height: 0;
12
+ border-style: solid;
13
+ border-width: 0 var(--space-l) var(--space-l) 0;
14
+ border-color: transparent color('grey', 'step-3') transparent transparent;
15
+ }
16
+
17
+ &:focus-within {
18
+ outline: 2px solid color('petrol');
19
+ }
20
+
21
+ &:where(:hover, :focus-within) .u-link {
22
+ text-decoration: underline;
23
+ }
24
+
25
+ &__wrapper {
26
+ @include padding('s-m');
27
+ display: flex;
28
+ flex-direction: column;
29
+ }
30
+
31
+ &__main-wrapper {
32
+ width: auto;
33
+ @extend .u-flow--s-m;
34
+ text-align: center;
35
+ }
36
+
37
+ &__title {
38
+ @include step(2);
39
+
40
+ a {
41
+ @include clickable-parent;
42
+ }
43
+ }
44
+
45
+ &__lede {
46
+ line-height: lh('prose');
47
+ }
48
+
49
+ &__media-wrapper {
50
+ @include margin-top('m');
51
+ }
52
+
53
+ &__image {
54
+ max-height: 180px;
55
+ @include margin(0, 'auto');
56
+ }
57
+ }
58
+
59
+ .c-existing-customer-card--large {
60
+ @extend .c-existing-customer-card;
61
+
62
+ @media (min-width: 55em) {
63
+ .c-existing-customer-card {
64
+ &__wrapper {
65
+ @include o-grid(2);
66
+ @include padding-right('l-3xl');
67
+ @include padding-left('l-3xl');
68
+ display: flex;
69
+ flex-direction: row;
70
+ align-items: center;
71
+ justify-content: space-between;
72
+
73
+ & > * {
74
+ @include margin-bottom(0);
75
+ }
76
+ }
77
+
78
+ &__main-wrapper {
79
+ display: flex;
80
+ flex-direction: column;
81
+ justify-content: center;
82
+ text-align: left;
83
+ }
84
+
85
+ &__title {
86
+ @include step(3);
87
+ }
88
+
89
+ &__media-wrapper {
90
+ @include margin(0);
91
+ }
92
+
93
+ &__image {
94
+ max-height: unset;
95
+ height: auto;
96
+ width: auto;
97
+ }
98
+ }
99
+ }
100
+ }
@@ -9,13 +9,36 @@ module.exports = {
9
9
  },
10
10
  preview: 'cards-three',
11
11
  context: {
12
- title: 'Building materials',
12
+ classes: '',
13
+ title: 'Mining and minerals',
13
14
  link: '#',
15
+ description: 'Explore the world of Iron, Base metals, Bauxite, Clay, Coal, Industrial Minerals and Precious Metals in 3D. ',
14
16
  image: {
15
- src: '/static/img/sector-1.jpg',
17
+ src: '/static/img/sector-3.jpg',
16
18
  alt: ''
17
- }
19
+ },
20
+ footer: {
21
+ button: {
22
+ label: 'View industry'
23
+ }
24
+ },
18
25
  },
26
+ variants: [
27
+ {
28
+ title: 'Heading only',
29
+ context: {
30
+ classes: 'c-industry-card--heading',
31
+ title: 'Zetasizer Pro',
32
+ link: '#',
33
+ description: '',
34
+ image: {
35
+ src: '/static/img/range-product-1.jpg',
36
+ alt: ''
37
+ },
38
+ footer: {}
39
+ },
40
+ }
41
+ ],
19
42
  props: [
20
43
  {
21
44
  table: [
@@ -1,8 +1,34 @@
1
- <article class="mp c-industry-card">
2
- <a class="c-industry-card__link u-flow--xs" href="{{ params.link }}">
1
+ {%- from "components/twi/macro.njk" import twi -%}
2
+
3
+ {%- set classes = 'mp c-industry-card' -%}
4
+
5
+ {%- if params.classes -%}{% set classes = classes + ' ' + params.classes %}{%- endif -%}
6
+
7
+ <article class="{{ classes }}" role="article" aria-label="Industry card">
8
+ <div class="c-industry-card__body">
9
+ {% if params.title | length %}
10
+ <h3 class="c-industry-card__heading">
11
+ {% if params.link | length %}
12
+ <a href="{{ params.link }}" aria-label="{{ params.title }}">
13
+ {{ params.title }}
14
+ </a>
15
+ {% else %}
16
+ {{ params.title }}
17
+ {% endif %}
18
+ </h3>
19
+ {% endif %}
20
+ {% if params.description | length %}
21
+ <p class="c-industry-card__lede">{{ params.description }}</p>
22
+ {% endif %}
23
+ {% if params.footer | length %}
24
+ <footer class="c-industry-card__footer">
25
+ {{ twi({ label: params.footer.button.label, icon: 'arrow-right', classes: 'c-twi--small u-link' }) }}
26
+ </footer>
27
+ {% endif %}
28
+ </div>
29
+ {% if params.image | length %}
3
30
  <figure class="c-industry-card__image">
4
- <img class="u-2/1" src="{{ params.image.src }}" alt="{{ params.image.alt or params.title }}" />
31
+ <img src="{{ params.image.src }}" alt="{{ params.image.alt or params.title }}" />
5
32
  </figure>
6
- <h3 class="c-h c-h--reset">{{ params.title }}</h3>
7
- </a>
8
- </article>
33
+ {% endif %}
34
+ </article>
@@ -1,15 +1,85 @@
1
1
  .c-industry-card {
2
- color: color('utility-blue');
2
+ background: color('white');
3
+ display: flex;
4
+ flex-flow: column;
5
+ border: none;
6
+ border: 1px solid color('petrol', 'step-2');
7
+ position: relative;
3
8
 
4
- &__link {
5
- display: block;
9
+ &:focus-within {
10
+ outline: 2px solid color('petrol');
6
11
  }
7
12
 
8
- &:hover .c-h--reset {
13
+ &:where(:hover) .c-twi.u-link {
9
14
  text-decoration: underline;
15
+ text-underline-offset: 0.1em;
10
16
  }
11
17
 
12
- img {
13
- width: 100%;
18
+ &__body {
19
+ @include padding('s-m');
20
+ display: flex;
21
+ flex-flow: column;
22
+ flex-grow: 1;
23
+
24
+ & > * + * {
25
+ @include margin-top('xs');
26
+ }
27
+ }
28
+
29
+ &__heading {
30
+ @extend .c-h, .c-h--step-0;
31
+
32
+ a {
33
+ @include clickable-parent;
34
+ }
35
+ }
36
+
37
+ &__lede {
38
+ @extend .u-step--1;
39
+ }
40
+
41
+ &__footer {
42
+ @include margin-top('auto');
43
+ @include padding-top('s');
44
+ }
45
+
46
+ &__image {
47
+ max-height: 10em;
48
+ order: -1;
49
+
50
+ img {
51
+ height: 100%;
52
+ width: 100%;
53
+ aspect-ratio: 2/1;
54
+ object-fit: cover;
55
+ }
14
56
  }
15
57
  }
58
+
59
+ .c-industry-card--heading {
60
+ border: none;
61
+
62
+ .c-industry-card {
63
+ &__heading {
64
+ color: color('utility-blue');
65
+ @include margin-top('xs');
66
+ font-weight: normal;
67
+ }
68
+
69
+ &__body {
70
+ @include padding(0);
71
+ }
72
+
73
+ &__image {
74
+ height: unset;
75
+ }
76
+ }
77
+
78
+ &:where(:hover) {
79
+ .c-industry-card {
80
+ &__heading {
81
+ text-decoration: underline;
82
+ }
83
+ }
84
+ }
85
+ }
@@ -4,14 +4,26 @@
4
4
  {{ c({ name: 'card' }, params) }}
5
5
  {% endmacro %}
6
6
 
7
+ {% macro existingCustomerCard(params) %}
8
+ {{ c({ name: 'existing-customer-card', folder: 'card' }, params) }}
9
+ {% endmacro %}
10
+
7
11
  {% macro industryCard(params) %}
8
12
  {{ c({ name: 'industry-card', folder: 'card' }, params) }}
9
13
  {% endmacro %}
10
14
 
11
- {% macro productComparisonCard(params) %}
12
- {{ c({ name: 'product-comparison-card', folder: 'card' }, params) }}
15
+ {% macro measurementTypeCard(params) %}
16
+ {{ c({ name: 'measurement-type-card', folder: 'card' }, params) }}
17
+ {% endmacro %}
18
+
19
+ {% macro productCard(params) %}
20
+ {{ c({ name: 'product-card', folder: 'card' }, params) }}
13
21
  {% endmacro %}
14
22
 
15
23
  {% macro searchResultCard(params) %}
16
24
  {{ c({ name: 'search-result-card', folder: 'card' }, params) }}
25
+ {% endmacro %}
26
+
27
+ {% macro technologyCard(params) %}
28
+ {{ c({ name: 'technology-card', folder: 'card' }, params) }}
17
29
  {% endmacro %}
@@ -0,0 +1,35 @@
1
+ const categories = require('../component/categories');
2
+
3
+ module.exports = {
4
+ title: 'Measurement type card',
5
+ category: categories.card,
6
+ component: {
7
+ name: 'measurement-type-card',
8
+ folder: 'card'
9
+ },
10
+ preview: 'cards-three',
11
+ context: {
12
+ title: 'Particle size',
13
+ link: '#',
14
+ description: 'Measurement of particle size distributions is routinely carried out across a wide range of industries.',
15
+ image: {
16
+ src: '/static/img/range-product-1.jpg',
17
+ alt: ''
18
+ },
19
+ footer: {
20
+ button: {
21
+ label: 'View measurement type'
22
+ }
23
+ }
24
+ },
25
+ variants: [],
26
+ props: [
27
+ {
28
+ table: [
29
+ ['title', 'string'],
30
+ ['link', 'string'],
31
+ ['image', 'object', 'Image object']
32
+ ]
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,35 @@
1
+ {%- from "components/twi/macro.njk" import twi -%}
2
+
3
+ {%- set classes = 'mp c-measurement-type-card' -%}
4
+
5
+ {%- if params.classes -%}{% set classes = classes + ' ' + params.classes %}{%- endif -%}
6
+
7
+ <article class="{{ classes }}" role="article" aria-label="Measurement type card">
8
+ <div class="c-measurement-type-card__body">
9
+ {% if params.title | length %}
10
+ <h3 class="c-measurement-type-card__heading">
11
+ {% if params.link | length %}
12
+ <a href="{{ params.link }}" aria-label="{{ params.title }}">
13
+ {{ params.title }}
14
+ </a>
15
+ {% else %}
16
+ {{ params.title }}
17
+ {% endif %}
18
+ </h3>
19
+ {% endif %}
20
+ {% if params.description | length %}
21
+ <p class="c-measurement-type-card__lede">{{ params.description }}</p>
22
+ {% endif %}
23
+ {% if params.footer.button | length %}
24
+ <footer class="c-measurement-type-card__footer">
25
+ {{ twi({ label: params.footer.button.label, icon: 'arrow-right', classes: 'c-twi--small u-link' }) }}
26
+ </footer>
27
+ {% endif %}
28
+ </div>
29
+ {% if params.image | length %}
30
+ <figure class="c-measurement-type-card__image">
31
+ <img src="{{ params.image.src }}" alt="{{ params.image.alt or params.title }}" />
32
+ </figure>
33
+ {% endif %}
34
+ </article>
35
+
@@ -0,0 +1,56 @@
1
+ .c-measurement-type-card {
2
+ background: color('white');
3
+ display: flex;
4
+ flex-flow: column;
5
+ border: 1px solid color('petrol', 'step-2');
6
+ position: relative;
7
+
8
+ &:focus-within {
9
+ outline: 2px solid color('petrol');
10
+ }
11
+
12
+ &:where(:hover) .c-twi.u-link {
13
+ text-decoration: underline;
14
+ text-underline-offset: 0.1em;
15
+ }
16
+
17
+ &__body {
18
+ @include padding('s-m');
19
+ display: flex;
20
+ flex-flow: column;
21
+ flex-grow: 1;
22
+
23
+ & > * + * {
24
+ @include margin-top('xs');
25
+ }
26
+ }
27
+
28
+ &__heading {
29
+ @extend .c-h, .c-h--step-0;
30
+
31
+ a {
32
+ @include clickable-parent;
33
+ }
34
+ }
35
+
36
+ &__lede {
37
+ @extend .u-step--1;
38
+ }
39
+
40
+ &__footer {
41
+ @include margin-top('auto');
42
+ @include padding-top('s');
43
+ }
44
+
45
+ &__image {
46
+ height: 10em;
47
+ order: -1;
48
+
49
+ img {
50
+ height: 100%;
51
+ width: 100%;
52
+ aspect-ratio: 16/9;
53
+ object-fit: cover;
54
+ }
55
+ }
56
+ }
@@ -1,10 +1,10 @@
1
1
  const categories = require('../component/categories');
2
2
 
3
3
  module.exports = {
4
- title: 'Product comparison card',
4
+ title: 'Product card',
5
5
  category: categories.card,
6
6
  component: {
7
- name: 'product-comparison-card',
7
+ name: 'product-card',
8
8
  folder: 'card'
9
9
  },
10
10
  preview: 'cards-three',
@@ -15,46 +15,27 @@ module.exports = {
15
15
  src: '/static/img/range-product-1.jpg',
16
16
  alt: ''
17
17
  },
18
- features: [
19
- {
20
- icon: 'cross',
21
- label: 'Classic 90° DLS'
22
- },
23
- {
24
- icon: 'tick',
25
- label: 'Dynamic light scattering'
26
- },
27
- {
28
- icon: 'tick',
29
- label: 'Static light scattering'
30
- },
31
- {
32
- icon: 'tick',
33
- label: 'Non-Invasive Back Scatter DLS'
34
- },
35
- {
36
- icon: 'cross',
37
- label: 'Multi-Angle Dynamic Light Scattering'
38
- }
39
- ],
40
18
  footer: {
41
19
  buttons: [
42
20
  {
43
21
  link: '#',
44
- label: 'More details'
22
+ label: 'More details',
23
+ classes: 'c-button--small'
45
24
  },
46
25
  {
47
26
  link: '#',
48
- label: 'Request a quote'
27
+ label: 'Request a quote',
28
+ classes: 'c-button--small'
49
29
  }
50
30
  ]
51
31
  }
52
32
  },
53
33
  variants: [
54
34
  {
55
- title: 'Without features list',
35
+ title: 'With features list',
56
36
  preview: 'cards-three',
57
37
  context: {
38
+ classes: 'c-product-card--features-list',
58
39
  title: 'Zetasizer Pro',
59
40
  description: 'The Zetasizer Pro is your go-to instrument to measure a wide range of sample types and concentrations.',
60
41
  image: {
@@ -62,6 +43,26 @@ module.exports = {
62
43
  alt: ''
63
44
  },
64
45
  features: [
46
+ {
47
+ icon: 'cross',
48
+ label: 'Classic 90° DLS'
49
+ },
50
+ {
51
+ icon: 'tick',
52
+ label: 'Dynamic light scattering'
53
+ },
54
+ {
55
+ icon: 'tick',
56
+ label: 'Static light scattering'
57
+ },
58
+ {
59
+ icon: 'tick',
60
+ label: 'Non-Invasive Back Scatter DLS'
61
+ },
62
+ {
63
+ icon: 'cross',
64
+ label: 'Multi-Angle Dynamic Light Scattering'
65
+ }
65
66
  ],
66
67
  footer: {
67
68
  buttons: [
@@ -0,0 +1,50 @@
1
+ {%- from "components/button/macro.njk" import button -%}
2
+ {%- from "components/twi/macro.njk" import twi -%}
3
+
4
+ {%- set classes = 'mp c-product-card' -%}
5
+
6
+ {%- if params.classes -%}{% set classes = classes + ' ' + params.classes %}{%- endif -%}
7
+
8
+ <article class="{{ classes }}" role="article" aria-label="Product card">
9
+ <div class="c-product-card__body">
10
+ {% if params.title | length %}
11
+ <h3 class="c-product-card__heading">
12
+ {{ params.title }}
13
+ </h3>
14
+ {% endif %}
15
+ {% if params.description | length %}
16
+ <p class="c-product-card__lede">{{ params.description }}</p>
17
+ {% endif %}
18
+ {% if params.features | length %}
19
+ <p class="c-product-card__features-list-heading">Features include</p>
20
+ <ul class="c-product-card__features-list">
21
+ {% for feature in params.features %}
22
+ <li class="c-product-card__feature--{{ feature.icon }}">
23
+ {{ twi({
24
+ label: feature.label,
25
+ icon: feature.icon
26
+ }) }}
27
+ </li>
28
+ {% endfor %}
29
+ </ul>
30
+ {% endif %}
31
+ {% if params.footer.buttons | length %}
32
+ <footer class="c-product-card__footer">
33
+ {% for item in params.footer.buttons %}
34
+ {{ button({
35
+ link: item.link,
36
+ label: item.label,
37
+ classes: item.classes,
38
+ colour: 'outline-green' if loop.index0 == 0 else 'green'
39
+ }) }}
40
+ {% endfor %}
41
+ </footer>
42
+ {% endif %}
43
+ </div>
44
+ {% if params.image | length %}
45
+ <figure class="c-product-card__image">
46
+ <img src="{{ params.image.src }}" alt="{{ params.image.alt or params.title }}" />
47
+ </figure>
48
+ {% endif %}
49
+ </article>
50
+