@worksafevictoria/wcl7.5 1.1.0-beta.1 → 1.1.0-beta.11

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 (35) hide show
  1. package/.storybook/main.js +4 -2
  2. package/.storybook/preview.js +5 -0
  3. package/ci/build/build_validation.yml +2 -0
  4. package/package.json +3 -1
  5. package/src/components/Common/CardGridItem/card-grid-item-icon.vue +1 -1
  6. package/src/components/Common/CardGridItem/index.vue +9 -3
  7. package/src/components/Global/AppHeader/ModalSearch/index.vue +6 -1
  8. package/src/components/Global/AppHeader/index.stories.js +16 -24
  9. package/src/components/Global/AppHeader/index.vue +9 -8
  10. package/src/components/Paragraphs/Chart/Constants.js +4790 -0
  11. package/src/components/Paragraphs/Chart/index.mdx +61 -0
  12. package/src/components/Paragraphs/Chart/index.stories.js +31 -0
  13. package/src/components/Paragraphs/Chart/index.vue +331 -0
  14. package/src/components/Paragraphs/ListGroup/Link/list-link.stories.js +34 -39
  15. package/src/components/Paragraphs/ListGroup/list-group.stories.js +34 -31
  16. package/src/components/Paragraphs/ListGroup/navigation-card.stories.js +33 -30
  17. package/src/components/Paragraphs/RelatedInformation/index.stories.js +5 -23
  18. package/src/components/Paragraphs/RelatedInformation/index.vue +12 -6
  19. package/src/components/Paragraphs/RelatedInformation/styles.scss +1 -3
  20. package/src/components/Paragraphs/ScrollSpy/index.stories.js +18 -26
  21. package/src/components/Paragraphs/ScrollSpy/index.vue +2 -1
  22. package/src/components/Paragraphs/TaskFinder/index.stories.js +10 -33
  23. package/src/components/Paragraphs/TaskFinder/pdf/index.vue +1 -1
  24. package/src/components/Paragraphs/TextMedia/index.stories.js +12 -61
  25. package/src/components/Paragraphs/VideoGrid/index.stories.js +16 -32
  26. package/src/components/SubComponents/FormInstance/index.vue +3 -1
  27. package/src/components/SubComponents/Search/GoogleREST/index.stories.js +50 -0
  28. package/src/components/SubComponents/Search/GoogleSearch/index.stories.js +23 -0
  29. package/src/components/SubComponents/Search/SearchListing/index.vue +69 -9
  30. package/src/components/SubComponents/Search/index.stories.js +19 -16
  31. package/src/components/SubComponents/Search/index.vue +563 -59
  32. package/src/includes/scss/vars/src/colors.scss +29 -1
  33. package/src/index.js +42 -40
  34. package/src/components/SubComponents/GoogleSearch/index.stories.js +0 -8
  35. package/src/components/SubComponents/GoogleSearch/index.vue +0 -405
@@ -20,6 +20,21 @@ $yellow: #ffd229;
20
20
  $lightyellow: #fff6d4;
21
21
  $outline: #da47ff;
22
22
  $outline-dark: #ffffff;
23
+ // Functional colours
24
+ $wsv-fun-dark-green: #576D2F;
25
+ $wsv-fun-dark-blue: #104f77;
26
+ $wsv-fun-dark-purple: #55356b;
27
+ $wsv-fun-dark-red: #760031;
28
+ $wsv-fun-dark-brown: #763b00;
29
+ $wsv-fun-dark-caramel: #cb7c2d;
30
+ $wsv-fun-light-teal: #7ac2b5;
31
+ $wsv-fun-light-blue: #8ecade;
32
+ $wsv-fun-light-purple: #9871a8;
33
+ $wsv-fun-light-fuchsia: #f16a7e;
34
+ $wsv-fun-light-green: #edeb72;
35
+ $wsv-fun-light-brown: #dbc38b;
36
+
37
+
23
38
 
24
39
  $theme-colors: (
25
40
  'gold': $gold,
@@ -43,7 +58,20 @@ $theme-colors: (
43
58
  'yellow': $yellow,
44
59
  'lightyellow': $lightyellow,
45
60
  'outline': $outline,
46
- 'outline-dark': $outline-dark
61
+ 'outline-dark': $outline-dark,
62
+ // Functional colours
63
+ 'wsv-fun-dark-green':$wsv-fun-dark-green,
64
+ 'wsv-fun-dark-blue':$wsv-fun-dark-blue,
65
+ 'wsv-fun-dark-purple':$wsv-fun-dark-purple,
66
+ 'wsv-fun-dark-red':$wsv-fun-dark-red,
67
+ 'wsv-fun-dark-brown':$wsv-fun-dark-brown,
68
+ 'wsv-fun-dark-caramel':$wsv-fun-dark-caramel,
69
+ 'wsv-fun-light-teal':$wsv-fun-light-teal,
70
+ 'wsv-fun-light-blue':$wsv-fun-light-blue,
71
+ 'wsv-fun-light-purple':$wsv-fun-light-purple,
72
+ 'wsv-fun-light-fuchsia':$wsv-fun-light-fuchsia,
73
+ 'wsv-fun-light-green':$wsv-fun-light-green,
74
+ 'wsv-fun-light-brown':$wsv-fun-light-brown
47
75
  );
48
76
 
49
77
  :export {
package/src/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  // Global Components
2
- import Container from './components/Containers/Container'
3
- import Row from './components/Containers/Row'
4
- import Column from './components/Containers/Column'
5
- import HomepageHeader from './components/Containers/HomepageHeader'
6
- import Subheader from './components/Containers/Subheader'
7
- import SectionGroup from './components/Containers/SectionGroup'
2
+ import Container from './components/Containers/Container/index.vue'
3
+ import Row from './components/Containers/Row/index.vue'
4
+ import Column from './components/Containers/Column/index.vue'
5
+ import HomepageHeader from './components/Containers/HomepageHeader/index.vue'
6
+ import Subheader from './components/Containers/Subheader/index.vue'
7
+ import SectionGroup from './components/Containers/SectionGroup/index.vue'
8
8
 
9
- import AppHeader from './components/Global/AppHeader'
10
- import AppFooter from './components/Global/AppFooter'
11
- import HeroHeader from './components/Global/HeroHeader'
12
- import SocialShare from './components/Global/SocialShare'
13
- import Strip from './components/Global/Strip'
14
- import AlertStrip from './components/Global/AlertStrip'
9
+ import AppHeader from './components/Global/AppHeader/index.vue'
10
+ import AppFooter from './components/Global/AppFooter/index.vue'
11
+ import HeroHeader from './components/Global/HeroHeader/index.vue'
12
+ import SocialShare from './components/Global/SocialShare/index.vue'
13
+ import Strip from './components/Global/Strip/index.vue'
14
+ import AlertStrip from './components/Global/AlertStrip/index.vue'
15
15
  import CardGrid from './components/Common/CardGrid/index.vue'
16
16
  import CardGridItem from './components/Common/CardGridItem/index.vue'
17
17
  import Cookies from './components/Global/Cookies/index.vue'
@@ -20,35 +20,36 @@ import GlobalNotice from './components/Global/GlobalNotice/index.vue'
20
20
  import ContrastMode from './components/Global/ContrastMode/index.vue'
21
21
 
22
22
  // Paragraphs
23
- import RichText from './components/Paragraphs/RichText'
24
- import TextMedia from './components/Paragraphs/TextMedia'
25
- import Accordion from './components/Paragraphs/Accordion'
26
- import TabbedCards from './components/Paragraphs/TabbedCards'
27
- import BrowseContent from './components/Paragraphs/BrowseContent'
28
- import TaskFinder from './components/Paragraphs/TaskFinder'
29
- import ListGroup from './components/Paragraphs/ListGroup'
30
- import ScrollSpy from './components/Paragraphs/ScrollSpy'
31
- import Directory from './components/Paragraphs/Directory'
32
- import SelectableCards from './components/Paragraphs/SelectableCards'
33
- import VideoMedia from './components/Paragraphs/VideoPlayer'
34
- import VideoGrid from './components/Paragraphs/VideoGrid'
35
- import Statistics from './components/Paragraphs/Statistics'
36
- import ProofPoints from './components/Paragraphs/ProofPoints'
37
- import TabulatedData from './components/Paragraphs/TabulatedData'
38
- import Breakout from './components/Paragraphs/Breakout'
39
- import Tabs from './components/Paragraphs/Tabs'
40
- import MarketingBanner from './components/Paragraphs/MarketingBanner'
41
- import RelatedInformation from './components/Paragraphs/RelatedInformation'
42
- import Calculator from './components/Paragraphs/Calculator'
23
+ import RichText from './components/Paragraphs/RichText/index.vue'
24
+ import TextMedia from './components/Paragraphs/TextMedia/index.vue'
25
+ import Accordion from './components/Paragraphs/Accordion/index.vue'
26
+ import TabbedCards from './components/Paragraphs/TabbedCards/index.vue'
27
+ import BrowseContent from './components/Paragraphs/BrowseContent/index.vue'
28
+ import TaskFinder from './components/Paragraphs/TaskFinder/index.vue'
29
+ import ListGroup from './components/Paragraphs/ListGroup/index.vue'
30
+ import ScrollSpy from './components/Paragraphs/ScrollSpy/index.vue'
31
+ import Directory from './components/Paragraphs/Directory/index.vue'
32
+ import SelectableCards from './components/Paragraphs/SelectableCards/index.vue'
33
+ import VideoMedia from './components/Paragraphs/VideoPlayer/index.vue'
34
+ import VideoGrid from './components/Paragraphs/VideoGrid/index.vue'
35
+ import Statistics from './components/Paragraphs/Statistics/index.vue'
36
+ import ProofPoints from './components/Paragraphs/ProofPoints/index.vue'
37
+ import TabulatedData from './components/Paragraphs/TabulatedData/index.vue'
38
+ import Breakout from './components/Paragraphs/Breakout/index.vue'
39
+ import Tabs from './components/Paragraphs/Tabs/index.vue'
40
+ import MarketingBanner from './components/Paragraphs/MarketingBanner/index.vue'
41
+ import RelatedInformation from './components/Paragraphs/RelatedInformation/index.vue'
42
+ import Calculator from './components/Paragraphs/Calculator/index.vue'
43
+ import Chart from './components/Paragraphs/Chart/index.vue'
43
44
 
44
45
  // SubComponents
45
- import FormAddressPostcode from './components/SubComponents/FormAddressPostcode'
46
- import CtaButton from './components/SubComponents/CtaButton'
47
- import Pagination from './components/SubComponents/Pagination'
48
- import SingleImage from './components/SubComponents/SingleImage'
49
- import Loading from './components/SubComponents/Loading'
50
- import Icon from './components/SubComponents/Icon'
51
- import Breadcrumb from './components/SubComponents/Breadcrumb'
46
+ import FormAddressPostcode from './components/SubComponents/FormAddressPostcode/index.vue'
47
+ import CtaButton from './components/SubComponents/CtaButton/index.vue'
48
+ import Pagination from './components/SubComponents/Pagination/index.vue'
49
+ import SingleImage from './components/SubComponents/SingleImage/index.vue'
50
+ import Loading from './components/SubComponents/Loading/index.vue'
51
+ import Icon from './components/SubComponents/Icon/index.vue'
52
+ import Breadcrumb from './components/SubComponents/Breadcrumb/index.vue'
52
53
  import CardGroup from './components/SubComponents/CardGroup/index.vue'
53
54
  import Search from './components/SubComponents/Search/index.vue'
54
55
  import VideoThumbnail from './components/SubComponents/VideoThumbnail/index.vue'
@@ -98,7 +99,8 @@ export {
98
99
  Tabs,
99
100
  MarketingBanner,
100
101
  RelatedInformation,
101
- Calculator
102
+ Calculator,
103
+ Chart
102
104
  }
103
105
 
104
106
  // Export Sub Components
@@ -1,8 +0,0 @@
1
- import GoogleSearch from './index.vue'
2
-
3
- export default {
4
- title: 'SubComponents/GoogleSearch',
5
- component: GoogleSearch
6
- }
7
-
8
- export const Default = {}
@@ -1,405 +0,0 @@
1
- <template>
2
- <div class="wcl-search">
3
- <div class="gcse-search"></div>
4
- </div>
5
- </template>
6
-
7
- <script>
8
- export default {
9
- mounted() {
10
- // console.log('Component mounted')
11
- this.setupCustomeStyle()
12
-
13
- // Introduce a delay before setting up addEventListener
14
- setTimeout(() => {
15
- this.setupCustomAttr()
16
- this.handleSearchResultLinkTitle()
17
- }, 2000) // Adjust the delay time as needed
18
- },
19
-
20
- beforeDestroy() {
21
- // Remove event listeners before the component is destroyed
22
- const targetNode = document.querySelector('input[name="search"]')
23
- const buttonNode = document.querySelector('button.gsc-search-button')
24
-
25
- if (targetNode) {
26
- // Add keyup.enter event listener
27
- targetNode.removeEventListener('keyup', this.handleKeyUp)
28
- buttonNode.removeEventListener('click', this.handleKeyUp)
29
- }
30
- const paginationNodes = document.querySelectorAll('.gsc-cursor-page')
31
- paginationNodes.forEach((paginationNode) => {
32
- paginationNode.removeEventListener('click', this.handleSearchResultTitle)
33
- })
34
- },
35
-
36
- methods: {
37
- // Method to customize google search style
38
- setupCustomeStyle() {
39
- const script = document.createElement('script')
40
- script.async = true
41
- script.src = 'https://cse.google.com/cse.js?cx=53b1506aa03c64160'
42
- document.head.appendChild(script)
43
-
44
- // Create a new style element
45
- const style = document.createElement('style')
46
- style.id = 'searchStyle' // Assign an ID to the style element
47
- // The CSS we are going to inject
48
- const cssVar = 'table.gssb_c {display: none !important;}'
49
- // Inject the style element into the head
50
- document.head.appendChild(style)
51
- // Set the text content of the style element to the CSS text
52
- style.textContent = cssVar
53
- },
54
-
55
- // Method to add google search input attributes
56
- setupCustomAttr() {
57
- console.log('setupCustomInputAttr ...')
58
-
59
- const targetNode = document.querySelector('input[name="search"]')
60
- const buttonNode = document.querySelector('button.gsc-search-button')
61
-
62
- if (targetNode) {
63
- // Add keyup.enter event listener
64
- targetNode.addEventListener('keyup', this.handleKeyUp)
65
- buttonNode.addEventListener('click', this.handleKeyUp)
66
- }
67
-
68
- this.setupPaginationEvent()
69
- },
70
-
71
- setupPaginationEvent() {
72
- console.log('setupPaginationEvent ....')
73
- // Introduce a delay before setting up addEventListener on pagination
74
- setTimeout(() => {
75
- this.handleSearchResultLinkTitle()
76
- const paginationNodes = document.querySelectorAll('.gsc-cursor-page')
77
- console.log('paginationNodes length ..', paginationNodes.length)
78
-
79
- if (paginationNodes && paginationNodes.length > 0) {
80
- console.log('FOUND PAGINATION ....', paginationNodes)
81
-
82
- // Loop through each element and add a click event listener
83
- paginationNodes.forEach((paginationNode) => {
84
- // Check if the click event listener has already been added
85
- if (!paginationNode.clickEventListenerAdded) {
86
- // Add a click event listener
87
- paginationNode.addEventListener(
88
- 'click',
89
- this.handleSearchResultTitle
90
- )
91
- // Mark that the click event listener has been added
92
- paginationNode.clickEventListenerAdded = true
93
- console.log('Adding a click event listener')
94
- }
95
- })
96
- }
97
- }, 2000) // Adjust the delay time as needed
98
- },
99
-
100
- // Method to trim text after '|'
101
- handleSearchResultTitle() {
102
- //alert('handleSearchResultTitle ....')
103
- this.setupPaginationEvent()
104
- },
105
-
106
- handleSearchResultLinkTitle() {
107
- //alert('handleSearchResultLinkTitle ....')
108
- // Get all targetNodes with class "a.gs-title"
109
- var targetNodes = document.querySelectorAll('a.gs-title')
110
- console.log('search list title targetNodes :- ', targetNodes)
111
-
112
- // Loop through each element and hide the text after the "|"
113
- targetNodes.forEach(function(element) {
114
- // Get the text content
115
- var text = element.textContent || element.innerText
116
-
117
- // Find the index of the "|" symbol
118
- var pipeIndex = text.indexOf('|')
119
- console.log('text :- ', text)
120
- // If the "|" symbol is found, update the text content to display only the part before "|"
121
- if (pipeIndex !== -1) {
122
- element.textContent = text.substring(0, pipeIndex).trim()
123
- }
124
- })
125
- },
126
-
127
- handleKeyUp(event) {
128
- if (event.key === 'Enter' || event.type === 'click') {
129
- let keyword = event.key
130
- ? event.target.value
131
- : document.querySelector('input[name="search"]').value
132
-
133
- // console.log('Enter key pressed. Value:', keyword)
134
-
135
- // Check if the URL does not contain "/search"
136
- if (keyword && !window.location.href.includes('/search')) {
137
- let origin = window.location.origin
138
- let hash = window.location.hash
139
- let pathname = 'search'
140
- let URL = origin + '/' + pathname + hash
141
- // console.log('URL does not contains "/search" ...', URL)
142
- window.location.assign(URL)
143
- }
144
-
145
- this.setupPaginationEvent
146
- }
147
- }
148
- }
149
- }
150
- </script>
151
- <style lang="scss" scoped>
152
- @import '../../../includes/scss/all';
153
-
154
- .wcl-search {
155
- :deep(form.gsc-search-box) {
156
- position: relative;
157
- display: -ms-flexbox;
158
- display: flex;
159
- -ms-flex-wrap: wrap;
160
- flex-wrap: wrap;
161
- -ms-flex-align: stretch;
162
- align-items: stretch;
163
- width: 100%;
164
- }
165
- :deep(.gsib_a) {
166
- padding: 0 !important;
167
- height: 56px;
168
- }
169
- :deep(.gsib_b) {
170
- position: absolute;
171
- right: 5px;
172
- top: 15px;
173
- }
174
- :deep(.gcsc-more-maybe-branding-root) {
175
- display: none;
176
- }
177
- :deep(table.gsc-input) {
178
- position: relative;
179
- }
180
- :deep(td.gsc-input) {
181
- border: none;
182
- padding: 0;
183
- width: 100%;
184
- }
185
- :deep(.gsc-input-box) {
186
- border: none;
187
- }
188
- :deep(input.gsc-input) {
189
- border-radius: 8px 0px 0px 8px;
190
- border: 1px solid $gray !important;
191
- border-right: 0 !important;
192
- background: none !important;
193
- color: #495057;
194
- height: 56px !important;
195
- position: relative;
196
- -ms-flex: 1 1 auto;
197
- flex: 1 1 auto;
198
- padding: 0.375rem 0.75rem !important;
199
-
200
- @media screen and (max-width: 320px) {
201
- width: 220px;
202
- }
203
-
204
- &:focus {
205
- box-shadow: none;
206
- }
207
- }
208
- :deep(.gsc-search-button) {
209
- display: -ms-flexbox;
210
- display: flex;
211
- margin-left: 0px;
212
- height: 56px;
213
- margin-top: 0px;
214
- }
215
- :deep(button.gsc-search-button) {
216
- background: $orange;
217
- border: none;
218
- border-radius: 0px 8px 8px 0px;
219
- color: $black;
220
- display: flex;
221
- align-items: center;
222
- height: 56px !important;
223
- font-size: 16px;
224
- font-weight: 700;
225
- padding-right: 32px;
226
- padding-left: 32px;
227
-
228
- &:before {
229
- content: 'Search';
230
- }
231
- @media screen and (max-width: 767px) {
232
- margin-top: 6px;
233
- }
234
- @media screen and (max-width: 320px) {
235
- padding-right: 16px;
236
- padding-left: 16px;
237
- }
238
-
239
- svg {
240
- fill: black;
241
- height: 18px;
242
- width: 18px;
243
- margin-left: 10px;
244
- }
245
-
246
- :focus {
247
- box-shadow: 0px;
248
- }
249
- }
250
-
251
- :deep(.gsst_a .gscb_a) {
252
- color: #191919;
253
- }
254
- :deep(.gsc-result-info) {
255
- color: #191919;
256
- font-size: 16px;
257
- font-weight: 400;
258
- }
259
- :deep(.gsc-above-wrapper-area) {
260
- padding: 20px 0;
261
- border-bottom: none;
262
- }
263
- /* search list start */
264
- :deep(.gsc-url-top) {
265
- display: none;
266
- }
267
- :deep(.gsc-table-result) {
268
- line-height: 1.6;
269
- padding: 0 5px;
270
- font-size: 16px;
271
- font-weight: 400;
272
- width: 80%;
273
- b {
274
- color: #191919;
275
- font-size: 16px;
276
- font-weight: normal;
277
- }
278
- }
279
- :deep(.gsc-resultsRoot.gsc-tabData) {
280
- width: 100%;
281
- margin-left: auto;
282
- margin-right: auto;
283
- padding-left: 15px;
284
- padding-right: 15px;
285
-
286
- &:hover {
287
- border: none;
288
- }
289
- }
290
- :deep(.gs-bidi-start-align.gs-snippet) {
291
- color: #191919 !important;
292
- line-height: 24px;
293
- }
294
- :deep(.gsc-thumbnail-inside) {
295
- position: relative;
296
- padding: 0;
297
-
298
- &::after {
299
- content: ' ';
300
- position: absolute;
301
- height: 16px;
302
- width: 11px;
303
- top: 5px;
304
- right: 16px;
305
- background-repeat: no-repeat;
306
- background-image: url(../../../assets/icons/chev-right.svg);
307
- background-size: 100%;
308
- }
309
- div.gs-title {
310
- width: 90%;
311
- margin-bottom: 12px;
312
- overflow: visible;
313
- }
314
- a.gs-title {
315
- color: #191919 !important;
316
- font-weight: 700;
317
- line-height: 24px;
318
- font-size: 20px;
319
- border: 3px solid transparent;
320
- padding-left: 5px;
321
- padding-right: 5px;
322
- text-decoration: underline;
323
-
324
- &:hover {
325
- border: 3px solid #da47ff;
326
- color: #006bff !important;
327
- b {
328
- color: #006bff !important;
329
- }
330
- }
331
-
332
- b {
333
- color: #191919 !important;
334
- font-size: 20px;
335
- }
336
- }
337
- }
338
- :deep(.gsc-orderby-label) {
339
- font-size: 16px;
340
- font-weight: 700;
341
- color: #191919;
342
- }
343
- :deep(.gsc-selected-option-container) {
344
- background-color: white;
345
- border-radius: 10px;
346
- margin-top: 0px;
347
- padding-top: 6px;
348
- margin-right: 0;
349
- margin-left: 4px;
350
- padding-left: 20px;
351
- padding-bottom: 6px;
352
- height: 40px;
353
- .gsc-selected-option {
354
- font-size: 16px;
355
- font-weight: 400;
356
- line-height: 24px;
357
- margin-right: 20px;
358
- }
359
- }
360
- :deep(.gsc-control-cse .gsc-option-selector) {
361
- margin-top: 0;
362
- margin-right: 10px;
363
- }
364
- :deep(.gsc-expansionArea > .gsc-webResult.gsc-result) {
365
- border: 0;
366
- flex: 0 0 100%;
367
- max-width: 100%;
368
- padding: 0;
369
- &:first-child {
370
- border-top: 1px solid #bababa;
371
- }
372
- > div {
373
- border-bottom: 1px solid #bababa;
374
- padding: 32px 0;
375
- }
376
- }
377
-
378
- :deep(.gsc-results .gsc-cursor-box .gsc-cursor-current-page) {
379
- background-color: lightgrey;
380
- }
381
- :deep(.gsc-results .gsc-cursor-box .gsc-cursor-page) {
382
- border: 1px solid grey;
383
- color: #333333;
384
- padding: 10px 12px;
385
- border-radius: 5px;
386
- font-size: 16px;
387
- font-weight: 400;
388
- }
389
- :deep(.gsc-results .gsc-cursor-box) {
390
- margin-top: 50px;
391
- }
392
-
393
- /* search list end */
394
- @include mq('xs') {
395
- .not-extra-small-screen {
396
- display: none;
397
- }
398
- }
399
- }
400
- @media screen and (max-width: 767px) {
401
- :deep(.gssb_c) {
402
- width: 85% !important;
403
- }
404
- }
405
- </style>