@worksafevictoria/wcl7.5 1.10.0 → 1.11.0

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.
Files changed (39) hide show
  1. package/package.json +1 -1
  2. package/src/assets/styles/generated-icons.scss +46 -46
  3. package/src/components/Common/CardGridItem/card-grid-item-caret.vue +39 -45
  4. package/src/components/Common/CardGridItem/card-grid-item-icon.vue +1 -1
  5. package/src/components/Common/CardGridItem/index.vue +8 -2
  6. package/src/components/Containers/Carousel/index.stories.js +6 -4
  7. package/src/components/Containers/Carousel/index.vue +131 -120
  8. package/src/components/Containers/HomepageHeader/index.stories.js +1 -1
  9. package/src/components/Containers/HomepageHeaderNew/index.stories.js +3 -15
  10. package/src/components/Containers/HomepageHeaderNew/index.vue +3 -7
  11. package/src/components/Global/AppFooter/index.vue +130 -137
  12. package/src/components/Global/AppHeader/ModalSearch/index.vue +7 -1
  13. package/src/components/Global/AppHeader/index.stories.js +2 -2
  14. package/src/components/Global/AppHeaderNew/ModalSearch/index.vue +21 -17
  15. package/src/components/Global/AppHeaderNew/index.stories.js +2 -2
  16. package/src/components/Global/AppHeaderNew/index.vue +53 -24
  17. package/src/components/Global/BackToTop/index.vue +16 -16
  18. package/src/components/Global/ContrastMode/index.stories.js +1 -1
  19. package/src/components/Global/HeroHeader/index.vue +62 -73
  20. package/src/components/Global/SocialShare/index.vue +114 -129
  21. package/src/components/Global/Strip/index.vue +9 -5
  22. package/src/components/Paragraphs/Accordion/AccordionItem/index.vue +22 -24
  23. package/src/components/Paragraphs/Accordion/StepperItem/index.vue +15 -15
  24. package/src/components/Paragraphs/Calculator/CardContainer/index.vue +74 -75
  25. package/src/components/Paragraphs/Calculator/RiskLevel/index.vue +31 -39
  26. package/src/components/Paragraphs/Directory/Asbestos/Records/SingleRecord/index.vue +104 -107
  27. package/src/components/Paragraphs/Directory/Asbestos/Records/index.vue +152 -120
  28. package/src/components/Paragraphs/Directory/HSCP/Records/SingleRecord/index.vue +127 -133
  29. package/src/components/Paragraphs/Directory/HSCP/Records/index.vue +158 -128
  30. package/src/components/Paragraphs/Tabs/index.vue +4 -4
  31. package/src/components/Paragraphs/TabulatedData/index.vue +21 -20
  32. package/src/components/SubComponents/CtaButton/index.vue +47 -44
  33. package/src/components/SubComponents/Icon/README.md +2 -2
  34. package/src/components/SubComponents/Icon/example.js +1 -0
  35. package/src/components/SubComponents/Icon/index.stories.js +1 -1
  36. package/src/components/SubComponents/Icon/index.vue +47 -47
  37. package/src/components/SubComponents/ResourceGroup/cardbody.vue +49 -61
  38. package/src/components/SubComponents/VideoThumbnail/index.vue +8 -6
  39. package/src/mock/carousel-items.js +46 -81
@@ -1,73 +1,71 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="caretSrc && loaded"
4
- :class="
5
- `card-grid-item-caret__container card-grid-item-caret__container--${computedCaret}`
6
- "
4
+ :class="`card-grid-item-caret__container card-grid-item-caret__container--${computedCaret}`"
7
5
  >
8
6
  <span v-if="caret === 'external'" class="visually-hidden">External link</span>
9
7
  <div
10
8
  class="tabCaretContainer"
11
9
  :class="{
12
- tabCaretContainerBottom: isTabbedCard
10
+ tabCaretContainerBottom: isTabbedCard,
13
11
  }"
14
12
  >
15
13
  <div class="tabCaretText" aria-hidden="true">
16
14
  {{ supportText }}
17
15
  </div>
18
- <icon :glyph="caretSrc" icon-alt="arrow" width="18" float: right
19
- :height="caret === 'external' ? 18 : 16" :class=" `item-icon-${ isChev ?
20
- 'chev' : 'caret'} card-grid-item-caret--${computedCaret}`" />
16
+ <icon :glyph="caretSrc" icon-alt="Show more" width="18" float: right :height="caret
17
+ === 'external' ? 18 : 16" :class=" `item-icon-${ isChev ? 'chev' : 'caret'}
18
+ card-grid-item-caret--${computedCaret}`" />
21
19
  </div>
22
20
  </div>
23
21
  </template>
24
22
 
25
23
  <script>
26
- import { getCurrentInstance } from 'vue'
27
- import Icon from './../../SubComponents/Icon/index.vue'
28
- import ChevUp from './../../../assets/icons/chev-up.svg?raw'
29
- import CaretUp from './../../../assets/icons/caret-up.svg?url'
30
- import ExternalLink from './../../../assets/icons/external-link.svg?raw'
24
+ import { getCurrentInstance } from "vue";
25
+ import Icon from "./../../SubComponents/Icon/index.vue";
26
+ import ChevUp from "./../../../assets/icons/chev-up.svg?raw";
27
+ import CaretUp from "./../../../assets/icons/caret-up.svg?url";
28
+ import ExternalLink from "./../../../assets/icons/external-link.svg?raw";
31
29
 
32
30
  export default {
33
- name: 'CardGridItemCaret',
31
+ name: "CardGridItemCaret",
34
32
  components: { Icon },
35
33
  props: {
36
34
  caret: {
37
35
  type: String,
38
- default: null
36
+ default: null,
39
37
  },
40
38
  rtl: {
41
39
  type: Boolean,
42
- default: false
43
- }
40
+ default: false,
41
+ },
44
42
  },
45
43
  data() {
46
44
  return {
47
45
  loaded: false,
48
- isChev: false
49
- }
46
+ isChev: false,
47
+ };
50
48
  },
51
49
  computed: {
52
50
  computedCaret() {
53
51
  if (this.rtl) {
54
- if (this.caret === 'right') {
55
- return 'left'
56
- } else if (this.caret === 'left') {
57
- return 'right'
52
+ if (this.caret === "right") {
53
+ return "left";
54
+ } else if (this.caret === "left") {
55
+ return "right";
58
56
  }
59
57
  }
60
- return this.caret
58
+ return this.caret;
61
59
  },
62
60
  caretSrc() {
63
- if (this.caret === 'external') {
64
- return ExternalLink
61
+ if (this.caret === "external") {
62
+ return ExternalLink;
65
63
  } else if (!this.isChev && this.computedCaret) {
66
- return CaretUp
64
+ return CaretUp;
67
65
  } else if (this.isChev && this.computedCaret) {
68
- return ChevUp
66
+ return ChevUp;
69
67
  } else {
70
- return undefined
68
+ return undefined;
71
69
  }
72
70
  },
73
71
  //Identify if this is a tabbed card WSV2-374
@@ -75,7 +73,7 @@ export default {
75
73
  const instance = getCurrentInstance();
76
74
  const parentEl = instance?.parent?.proxy?.$el.parentNode;
77
75
 
78
- if (parentEl && parentEl.classList.contains('tabbed-card')) {
76
+ if (parentEl && parentEl.classList.contains("tabbed-card")) {
79
77
  return true;
80
78
  } else {
81
79
  return false;
@@ -83,22 +81,18 @@ export default {
83
81
  },
84
82
  //If isTabbedCard, then supportive text must be displayed for up and down carets. WSV2-374
85
83
  supportText() {
86
- if (
87
- this.isTabbedCard &&
88
- this.computedCaret &&
89
- this.computedCaret === 'up'
90
- ) {
91
- return 'Hide links'
84
+ if (this.isTabbedCard && this.computedCaret && this.computedCaret === "up") {
85
+ return "Hide links";
92
86
  } else if (
93
87
  this.isTabbedCard &&
94
88
  this.computedCaret &&
95
- this.computedCaret === 'down'
89
+ this.computedCaret === "down"
96
90
  ) {
97
- return 'Show links'
91
+ return "Show links";
98
92
  } else {
99
- return null
93
+ return null;
100
94
  }
101
- }
95
+ },
102
96
  },
103
97
  mounted() {
104
98
  /* The code below has been removed as part of WSV2-735
@@ -109,13 +103,13 @@ export default {
109
103
  .$el['_prevClass'].includes('task-finder-column')
110
104
  ? (this.isChev = false)
111
105
  : true */
112
-
113
- this.loaded = true
114
- }
115
- }
106
+
107
+ this.loaded = true;
108
+ },
109
+ };
116
110
  </script>
117
111
  <style lang="scss" scoped>
118
- @import '../../../includes/scss/all';
112
+ @import "../../../includes/scss/all";
119
113
  .card-grid-item-caret {
120
114
  &__container {
121
115
  padding-left: 4px;
@@ -149,7 +143,7 @@ export default {
149
143
  }
150
144
  }
151
145
  .tabCaretText {
152
- font-style: 'normal';
146
+ font-style: "normal";
153
147
  font-weight: 400;
154
148
  font-size: 12px;
155
149
  padding-right: 10px;
@@ -21,7 +21,7 @@
21
21
  }"
22
22
  :glyph="glyphSrc"
23
23
  :key="computedIconSize"
24
- icon-alt="alt"
24
+ icon-alt="card gid item icon"
25
25
  :bordered="iconIsBordered"
26
26
  :height="computedIconSize"
27
27
  :width="computedIconSize"
@@ -8,14 +8,20 @@
8
8
  class="card-grid-item__card"
9
9
  :class="cardClass"
10
10
  :role="buttonRole"
11
+ :tabindex="['button', 'radio'].includes(buttonRole) ? 0 : undefined"
11
12
  :aria-checked="
12
- buttonRole === 'radio' ? (isSelectable && selected ? 'true' : 'false') : false
13
+ buttonRole === 'radio' ? (isSelectable && selected ? 'true' : 'false') : undefined
13
14
  "
14
15
  :aria-expanded="
15
- isExpandable ? (isSelectable && selected ? 'true' : 'false') : false
16
+ buttonRole === 'button' && isExpandable
17
+ ? isSelectable && selected
18
+ ? 'true'
19
+ : 'false'
20
+ : undefined
16
21
  "
17
22
  :data-href="link"
18
23
  @click="cardClicked($event)"
24
+ @keydown.enter.space.prevent="cardClicked($event)"
19
25
  @keydown.tab="handleFocus($event)"
20
26
  >
21
27
  <div
@@ -2,8 +2,9 @@ import CarouselComponent from './index.vue'
2
2
  import { mockCarouselItems } from '../../../mock/carousel-items'
3
3
 
4
4
  export default {
5
- title: 'Website-Redesign/Carousel',
5
+ title: 'Containers/Carousel',
6
6
  component: CarouselComponent,
7
+ tags: ['autodocs'],
7
8
  data() {
8
9
  return {
9
10
  mockCarouselItems
@@ -11,7 +12,8 @@ export default {
11
12
  },
12
13
  args: {
13
14
  carouselItems: mockCarouselItems,
14
- storybook: true
15
+ storybook: true,
16
+ isParagraph: true,
15
17
  },
16
18
 
17
19
  }
@@ -21,8 +23,8 @@ const DefaultCarousel = (args) => ({
21
23
  setup() {
22
24
  return { args }
23
25
  },
24
- template: `<div style="width: 50%; height: auto;">
25
- <h2>Carousel Component</h2>
26
+ template: `<div>
27
+ <h2 style="padding-left: 50px; padding-bottom: 20px;">Carousel Component</h2>
26
28
  <carousel-component v-bind="args"></carousel-component>
27
29
  </div>`
28
30
  })
@@ -1,9 +1,10 @@
1
1
  <template>
2
- <div>
2
+ <div>
3
3
  <b-carousel
4
4
  id="carousel-1"
5
+ :class="{carouselPara: isParagraph}"
5
6
  v-model="slide"
6
- interval=0
7
+ interval="0"
7
8
  controls
8
9
  indicators
9
10
  keyboard
@@ -13,160 +14,170 @@
13
14
  <b-carousel-slide
14
15
  v-for="item in filteredCarouselItems"
15
16
  :key="item.id"
16
- :img-src="getImageURL(item.field_image.field_media_image?.uri?.url)"
17
- @click.prevent="handleClick(item.field_link.url)"
17
+ :img-src="getImageURL(item.imageURL)"
18
+ :img-alt="item.imageAlt"
19
+ @click.prevent="handleClick(item.linkURL)"
18
20
  >
19
- <h4>{{ item.field_title}}</h4>
21
+ <h4>{{ item.title }}</h4>
20
22
  </b-carousel-slide>
21
23
  </b-carousel>
22
24
  </div>
23
25
  </template>
24
26
 
25
27
  <script>
26
- import { BCarousel, BCarouselSlide } from 'bootstrap-vue-next'
27
- import { isAbsoluteUrl, navigateToPath } from '../../../../lib/utility'
28
+ import { BCarousel, BCarouselSlide } from "bootstrap-vue-next"
29
+ import { isAbsoluteUrl, navigateToPath } from "../../../../lib/utility"
28
30
 
29
31
  export default {
30
- name: 'CarouselComponent',
31
- data() {
32
- return {
33
- slide: 0,
34
- }
32
+ name: "CarouselComponent",
33
+ data() {
34
+ return {
35
+ slide: 0,
36
+ }
37
+ },
38
+ components: {
39
+ BCarousel,
40
+ BCarouselSlide,
41
+ },
42
+ props: {
43
+ carouselItems: {
44
+ type: Array,
45
+ required: true,
46
+ default: () => [],
35
47
  },
36
- components: {
37
- BCarousel,
38
- BCarouselSlide
48
+ storybook: {
49
+ type: Boolean,
50
+ default: false,
39
51
  },
40
- props: {
41
- carouselItems: {
42
- type: Array,
43
- required: true,
44
- default: () => [],
45
- },
46
- storybook: {
47
- type: Boolean,
48
- default: false
49
- }
52
+ isParagraph: {
53
+ type: Boolean,
54
+ default: false,
50
55
  },
51
- computed: {
52
- filteredCarouselItems() {
53
-
54
- var todayDate = new Date()
55
-
56
- for (var i = 0, length = this.carouselItems.length; i < length; i++) {
57
- if (this.carouselItems[i].field_favorite === true) {
56
+ },
57
+ computed: {
58
+ filteredCarouselItems() {
59
+
60
+ var todayDate = new Date();
61
+
62
+ for (var i = 0, length = this.carouselItems.length; i < length; i++) {
63
+ if (this.carouselItems[i].favourite === true) {
64
+ this.carouselItems[i].active = 'Yes';
65
+ } else if (new Date(this.carouselItems[i].dateStart).valueOf() <= todayDate.valueOf()) {
66
+ if (new Date(this.carouselItems[i].dateEnd).valueOf() >= todayDate.valueOf()) {
58
67
  this.carouselItems[i].active = 'Yes'
59
- } else if (new Date(this.carouselItems[i].field_date_start).valueOf() <= todayDate.valueOf()) {
60
- if (new Date(this.carouselItems[i].field_date_end).valueOf() >= todayDate.valueOf()) {
61
- this.carouselItems[i].active = 'Yes'
62
- }
63
68
  }
64
69
  }
65
-
66
- let filtered = this.carouselItems.filter(e =>
67
- e.active === 'Yes');
68
- return filtered
69
70
  }
70
- },
71
- methods: {
72
-
73
- handleClick(link) {
74
- if (link) {
75
- if (isAbsoluteUrl(link)) {
76
- navigateToPath(link, true)
71
+
72
+ let filtered = this.carouselItems.filter(e => e.active === "Yes");
73
+ return filtered;
74
+ }
75
+ },
76
+ methods: {
77
+
78
+ handleClick(link) {
79
+ if (link) {
80
+ if (isAbsoluteUrl(link)) {
81
+ navigateToPath(link, true);
82
+ } else {
83
+ if (this.storybook) {
84
+ alert('This link will go to: ' + link);
77
85
  } else {
78
- if (this.storybook) {
79
- alert('This link will go to: ' + link)
80
- } else {
81
- this.$router.push({ path: link })
82
- }
86
+ this.$router.push({ path: link });
83
87
  }
84
88
  }
85
- },
86
-
87
- getImageURL(imagePath) {
88
- let apiPath = this.$config ? this.$config.public.apiURL : process.env.CONTENT_API_URL;
89
- let fullPath = apiPath.concat(imagePath)
90
- return fullPath
91
- },
92
-
93
- formatDate(date) {
94
- return [
95
- date.getFullYear(),
96
- ('0' + date.getDate()).slice(-2),
97
- ('0' + (date.getMonth() + 1)).slice(-2)
98
- ].join('-')
99
89
  }
90
+ },
91
+
92
+ getImageURL(imagePath) {
93
+ let apiPath = this.$config ? this.$config.public.apiURL : process.env.CONTENT_API_URL;
94
+ let fullPath = apiPath.concat(imagePath);
95
+ return fullPath;
96
+ },
97
+
98
+ formatDate(date) {
99
+ return [
100
+ date.getFullYear(),
101
+ ('0' + date.getDate()).slice(-2),
102
+ ('0' + (date.getMonth() + 1)).slice(-2)
103
+ ].join('-');
100
104
  }
101
105
  }
106
+ }
102
107
  </script>
103
108
 
104
109
  <style lang="scss" scoped>
105
- @import '../../../includes/scss/all';
110
+ @use '../../../includes/scss/all';
106
111
  </style>
107
112
 
108
113
  <style>
109
- .carousel {
110
- position: relative;
111
- padding-bottom: 7rem;
112
- max-width: 540px;
113
- }
114
+ .carousel {
115
+ position: relative;
116
+ padding-bottom: 7rem;
117
+ max-width: 540px;
118
+ }
114
119
 
115
- .carousel-inner {
116
- overflow: visible;
117
- }
120
+ .carousel-inner {
121
+ overflow: visible;
122
+ }
118
123
 
119
- .carousel-indicators {
120
- padding-bottom: 3rem;
121
- float: right;
122
- right: 2% !important;
123
- width: 20%;
124
- justify-content: end;
125
- margin-left: 80%;
126
- margin-right: 0;
127
- }
124
+ .carousel-indicators {
125
+ padding-bottom: 3rem;
126
+ float: right;
127
+ right: 2% !important;
128
+ width: 20%;
129
+ justify-content: end;
130
+ margin-left: 80%;
131
+ margin-right: 0;
132
+ }
128
133
 
129
- .carousel-indicators button {
130
- width: 10px !important;
131
- height: 10px !important;
132
- border-radius: 50% !important;
133
- background-color: black !important;
134
- }
134
+ .carousel-indicators button {
135
+ width: 10px !important;
136
+ height: 10px !important;
137
+ border-radius: 50% !important;
138
+ background-color: black !important;
139
+ }
135
140
 
136
- .carousel-indicators button:focus,
137
- .carousel-indicators button:active {
138
- outline: none !important;
139
- box-shadow: none;
141
+ .carousel-indicators button:focus,
142
+ .carousel-indicators button:active {
143
+ outline: none !important;
144
+ box-shadow: none;
145
+ }
140
146
 
141
- }
147
+ .carousel-caption {
148
+ color: black;
149
+ top: 100%;
150
+ left: 0;
151
+ right: 20%;
152
+ text-align: left;
153
+ text-decoration: underline;
154
+ }
142
155
 
143
- .carousel-caption {
144
- color: black;
145
- top: 100%;
146
- left: 0;
147
- right: 20%;
148
- text-align: left;
149
- text-decoration: underline;
150
- }
156
+ .carousel-control-next,
157
+ .carousel-control-prev {
158
+ bottom: 7rem;
159
+ }
151
160
 
152
- .carousel-control-next,
153
- .carousel-control-prev {
154
- bottom: 7rem;
155
- }
161
+ .carousel-control-prev:focus,
162
+ .carousel-control-prev:active,
163
+ .carousel-control-next:focus,
164
+ .carousel-control-next:active {
165
+ outline: none !important;
166
+ box-shadow: none;
167
+ }
156
168
 
157
- .carousel-control-prev:focus,
158
- .carousel-control-prev:active,
159
- .carousel-control-next:focus,
160
- .carousel-control-next:active {
161
- outline: none !important;
162
- box-shadow: none;
163
- }
169
+ .carousel-control-prev-icon,
170
+ .carousel-control-next-icon {
171
+ height: 50px !important;
172
+ width: 50px !important;
173
+ outline:none !important;
174
+ }
164
175
 
165
- .carousel-control-prev-icon,
166
- .carousel-control-next-icon {
167
- height: 50px !important;
168
- width: 50px !important;
169
- outline:none !important;
170
- }
176
+ .carouselPara {
177
+ margin-left: auto;
178
+ margin-right: auto;
179
+ width: 75%;
180
+ height: auto;
181
+ }
171
182
 
172
183
  </style>
@@ -99,4 +99,4 @@ const DefaultHH = (args) => ({
99
99
  template: '<homepage-header v-bind="args" ref="hh" />',
100
100
  })
101
101
 
102
- export const Default = DefaultHH.bind({})
102
+ export const Former = DefaultHH.bind({})
@@ -39,8 +39,9 @@ const headerLinks = [
39
39
  }
40
40
 
41
41
  export default {
42
- title: 'Website_Redesign/HomepageHeader',
42
+ title: 'Containers/HomepageHeader',
43
43
  component: HomepageHeader,
44
+ tags: ['autodocs'],
44
45
  argTypes: {
45
46
  fetchMenu: {
46
47
  control: 'function',
@@ -59,17 +60,4 @@ export default {
59
60
  }
60
61
  }
61
62
 
62
- const DefaultHH = (args) => ({
63
- components: { HomepageHeader },
64
- setup() {
65
- return { args };
66
- },
67
- mounted() {
68
- setTimeout(() => {
69
- this.$refs.hh.renderMenu()
70
- })
71
- },
72
- template: '<homepage-header v-bind="args" ref="hh" />'
73
- })
74
-
75
- export const Default = DefaultHH.bind({})
63
+ export const New = {}
@@ -1,5 +1,3 @@
1
- <!-- When implemented, importing mock values for carousel to be removed. This was only for testing locally, while values not available from drupal. -->
2
-
3
1
  <template>
4
2
  <div class="homepage-header">
5
3
  <container>
@@ -22,8 +20,9 @@
22
20
  :md="7"
23
21
  >
24
22
  <carousel-component
25
- :carouselItems="this.slideList"
26
- :storybook="this.isStorybook"
23
+ :carousel-items="slideList"
24
+ :storybook="isStorybook"
25
+ :is-paragraph="false"
27
26
  />
28
27
  </column>
29
28
  <column
@@ -56,7 +55,6 @@ import earthIcon from './../../../assets/icons/earth.svg?url'
56
55
  import CarouselComponent from './../../Containers/Carousel/index.vue'
57
56
  import Row from './../../Containers/Row/index.vue'
58
57
  import Column from './../../Containers/Column/index.vue'
59
- // import { mockCarouselItems } from '../../../mock/carousel-items'
60
58
 
61
59
  export default {
62
60
  name: 'HomepageHeader',
@@ -66,7 +64,6 @@ export default {
66
64
  CarouselComponent,
67
65
  Row,
68
66
  Column,
69
- // mockCarouselItems
70
67
  },
71
68
  props: {
72
69
  contentParser: {
@@ -76,7 +73,6 @@ export default {
76
73
  slideList: {
77
74
  type: Array,
78
75
  required: true,
79
- // default: mockCarouselItems
80
76
  },
81
77
  isStorybook: {
82
78
  type: Boolean,