@worksafevictoria/wcl7.5 1.1.0-beta.9 → 1.1.0-beta.91

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 (328) hide show
  1. package/.env +1 -3
  2. package/.storybook/preview.js +20 -13
  3. package/README.md +4 -4
  4. package/bin/deploy.sh +1 -1
  5. package/ci/build/build_validation.yml +2 -2
  6. package/ci/release/beta.yml +4 -3
  7. package/ci/release/master.yml +4 -3
  8. package/jest.config.js +10 -8
  9. package/lib/utility.js +10 -8
  10. package/package.json +15 -13
  11. package/src/assets/icons/AppFooter/x-ws-footer.svg +10 -0
  12. package/src/assets/icons/AppFooter/x-ww-footer.svg +28 -0
  13. package/src/assets/icons/SocialShare/x-icon-white.svg +28 -0
  14. package/src/assets/icons/WSV-reversed.svg +20 -0
  15. package/src/assets/icons/contrast.svg +4 -0
  16. package/src/assets/icons/lang.svg +13 -0
  17. package/src/assets/icons/login.svg +4 -0
  18. package/src/assets/styles/modal.scss +51 -0
  19. package/src/components/Common/CardGrid/cardgrid.stories.js +4 -57
  20. package/src/components/Common/CardGrid/index.vue +64 -48
  21. package/src/components/Common/CardGridItem/card-grid-item-caret.vue +7 -4
  22. package/src/components/Common/CardGridItem/card-grid-item-icon.vue +1 -1
  23. package/src/components/Common/CardGridItem/index.vue +95 -65
  24. package/src/components/Containers/Carousel/index.stories.js +30 -0
  25. package/src/components/Containers/Carousel/index.vue +172 -0
  26. package/src/components/Containers/HomepageHeader/index.vue +39 -38
  27. package/src/components/Containers/HomepageHeaderNew/index.stories.js +76 -0
  28. package/src/components/Containers/HomepageHeaderNew/index.vue +242 -0
  29. package/src/components/Containers/SectionGroup/index.vue +1 -1
  30. package/src/components/Containers/Subheader/index.vue +30 -20
  31. package/src/components/Global/AlertStrip/index.stories.js +1 -0
  32. package/src/components/Global/AppFooter/FooterSocialShare/index.vue +1 -1
  33. package/src/components/Global/AppFooter/index.stories.js +1 -0
  34. package/src/components/Global/AppFooter/index.vue +42 -33
  35. package/src/components/Global/AppHeader/index.vue +49 -52
  36. package/src/components/Global/AppHeaderNew/ModalSearch/index.vue +71 -0
  37. package/src/components/Global/AppHeaderNew/ModalSearch/styles.scss +43 -0
  38. package/src/components/Global/AppHeaderNew/includes.scss +71 -0
  39. package/src/components/Global/AppHeaderNew/index.stories.js +74 -0
  40. package/src/components/Global/AppHeaderNew/index.vue +1176 -0
  41. package/src/components/Global/AppHeaderNew/mobile.scss +269 -0
  42. package/src/components/Global/AppHeaderNew/styles.scss +642 -0
  43. package/src/components/Global/ContrastMode/index.stories.js +1 -0
  44. package/src/components/Global/ContrastMode/index.vue +1 -1
  45. package/src/components/Global/Cookies/index.stories.js +16 -10
  46. package/src/components/Global/Cookies/index.vue +209 -172
  47. package/src/components/Global/Cookies/styles.scss +54 -54
  48. package/src/components/Global/DirectoryFilters/SingleTaxonomy/index.vue +50 -132
  49. package/src/components/Global/GlobalNotice/index.stories.js +7 -1
  50. package/src/components/Global/GlobalNotice/index.vue +84 -84
  51. package/src/components/Global/HeroHeader/index.stories.js +3 -4
  52. package/src/components/Global/HeroHeader/index.vue +28 -29
  53. package/src/components/Global/ProgressBar/index.stories.js +6 -16
  54. package/src/components/Global/SocialShare/index.vue +3 -2
  55. package/src/components/Global/Strip/index.stories.js +1 -17
  56. package/src/components/Global/Strip/index.vue +9 -5
  57. package/src/components/Paragraphs/Accordion/AccordionItem/index.vue +29 -21
  58. package/src/components/Paragraphs/Accordion/StepperItem/index.vue +23 -23
  59. package/src/components/Paragraphs/Accordion/index.stories.js +22 -18
  60. package/src/components/Paragraphs/Accordion/index.vue +52 -48
  61. package/src/components/Paragraphs/Breakout/index.stories.js +1 -0
  62. package/src/components/Paragraphs/BrowseContent/index.stories.js +1 -0
  63. package/src/components/Paragraphs/BrowseContent/index.vue +207 -221
  64. package/src/components/Paragraphs/Calculator/Constants.js +2 -2
  65. package/src/components/Paragraphs/Calculator/index.stories.js +1 -0
  66. package/src/components/Paragraphs/Chart/Constants.js +485 -485
  67. package/src/components/Paragraphs/Chart/index.vue +232 -241
  68. package/src/components/Paragraphs/Directory/Records/CJ/index.vue +3 -3
  69. package/src/components/Paragraphs/Directory/Records/HSCP/index.stories.js +32 -0
  70. package/src/components/Paragraphs/Directory/Records/HSCP/index.vue +213 -0
  71. package/src/components/Paragraphs/Directory/Records/ISP/index.vue +5 -5
  72. package/src/components/Paragraphs/Directory/Records/PRS/index.vue +2 -2
  73. package/src/components/Paragraphs/Directory/Records/PRS/recordContent.vue +3 -3
  74. package/src/components/Paragraphs/Directory/Records/PRS/recordDetails.vue +3 -3
  75. package/src/components/Paragraphs/Directory/Records/index.vue +66 -30
  76. package/src/components/Paragraphs/Directory/Records/styles.scss +1 -0
  77. package/src/components/Paragraphs/Directory/constants.js +23 -5
  78. package/src/components/Paragraphs/Directory/index.vue +56 -45
  79. package/src/components/Paragraphs/ListGroup/Link/list-link.stories.js +35 -39
  80. package/src/components/Paragraphs/ListGroup/index.vue +60 -47
  81. package/src/components/Paragraphs/ListGroup/list-group.stories.js +35 -31
  82. package/src/components/Paragraphs/ListGroup/navigation-card.stories.js +34 -30
  83. package/src/components/Paragraphs/MarketingBanner/index.stories.js +4 -18
  84. package/src/components/Paragraphs/ProofPoints/index.stories.js +19 -20
  85. package/src/components/Paragraphs/RelatedInformation/index.stories.js +11 -21
  86. package/src/components/Paragraphs/RelatedInformation/index.vue +12 -6
  87. package/src/components/Paragraphs/RelatedInformation/styles.scss +1 -3
  88. package/src/components/Paragraphs/RichText/index.stories.js +2 -1
  89. package/src/components/Paragraphs/ScrollSpy/index.stories.js +3 -1
  90. package/src/components/Paragraphs/ScrollSpy/index.vue +26 -12
  91. package/src/components/Paragraphs/SelectableCards/Control/index.stories.js +1 -0
  92. package/src/components/Paragraphs/SelectableCards/index.vue +15 -12
  93. package/src/components/Paragraphs/Statistics/index.stories.js +1 -0
  94. package/src/components/Paragraphs/Statistics/index.vue +1 -0
  95. package/src/components/Paragraphs/TabbedCards/index.stories.js +8 -27
  96. package/src/components/Paragraphs/TabbedCards/index.vue +69 -103
  97. package/src/components/Paragraphs/Tabs/index.stories.js +1 -0
  98. package/src/components/Paragraphs/Tabs/index.vue +19 -17
  99. package/src/components/Paragraphs/TabulatedData/index.stories.js +6 -5
  100. package/src/components/Paragraphs/TabulatedData/index.vue +63 -35
  101. package/src/components/Paragraphs/TaskFinder/index.stories.js +2 -2
  102. package/src/components/Paragraphs/TaskFinder/index.vue +3 -3
  103. package/src/components/Paragraphs/TaskFinder/task-finder-column.vue +1 -1
  104. package/src/components/Paragraphs/TextMedia/index.stories.js +1 -0
  105. package/src/components/Paragraphs/TextMedia/index.vue +5 -1
  106. package/src/components/Paragraphs/VideoGrid/index.stories.js +1 -0
  107. package/src/components/Paragraphs/VideoGrid/index.vue +12 -12
  108. package/src/components/Paragraphs/VideoPlayer/index.stories.js +1 -13
  109. package/src/components/Paragraphs/Webform/index.stories.js +94 -57
  110. package/src/components/Paragraphs/Webform/index.vue +11 -8
  111. package/src/components/SubComponents/Breadcrumb/index.stories.js +3 -11
  112. package/src/components/SubComponents/CardGroup/index.stories.js +1 -30
  113. package/src/components/SubComponents/CardGroup/index.vue +38 -28
  114. package/src/components/SubComponents/CtaButton/index.stories.js +1 -24
  115. package/src/components/SubComponents/CtaButton/index.vue +27 -25
  116. package/src/components/SubComponents/FormAddressPostcode/index.stories.js +3 -28
  117. package/src/components/SubComponents/FormAddressPostcode/index.vue +33 -36
  118. package/src/components/SubComponents/FormInstance/components/alert/index.vue +129 -0
  119. package/src/components/SubComponents/FormInstance/components/custom/base-formio.js +77 -0
  120. package/src/components/SubComponents/FormInstance/components/custom/code-formio.js +35 -0
  121. package/src/components/SubComponents/FormInstance/components/custom/custom-formio-registry.js +30 -0
  122. package/src/components/SubComponents/FormInstance/components/custom/range-formio.js +121 -0
  123. package/src/components/SubComponents/FormInstance/components/custom/rating-formio.js +121 -0
  124. package/src/components/SubComponents/FormInstance/components/custom/scale-formio.js +99 -0
  125. package/src/components/SubComponents/FormInstance/components/custom/tableselect-formio.js +200 -0
  126. package/src/components/SubComponents/FormInstance/components/handler/index.vue +204 -0
  127. package/src/components/SubComponents/FormInstance/components/renderer/index.vue +282 -0
  128. package/src/components/SubComponents/FormInstance/index.test.js +65 -0
  129. package/src/components/SubComponents/FormInstance/index.vue +55 -6
  130. package/src/components/SubComponents/FormInstance/models/base-form-element.js +338 -0
  131. package/src/components/SubComponents/FormInstance/models/form-callback-queue.js +45 -0
  132. package/src/components/SubComponents/FormInstance/models/form-utils.js +50 -0
  133. package/src/components/SubComponents/FormInstance/models/overrides/address.js +141 -0
  134. package/src/components/SubComponents/FormInstance/models/overrides/autocomplete.js +41 -0
  135. package/src/components/SubComponents/FormInstance/models/overrides/checkbox.js +14 -0
  136. package/src/components/SubComponents/FormInstance/models/overrides/checkboxes.js +49 -0
  137. package/src/components/SubComponents/FormInstance/models/overrides/code.js +27 -0
  138. package/src/components/SubComponents/FormInstance/models/overrides/composite.js +57 -0
  139. package/src/components/SubComponents/FormInstance/models/overrides/container.js +65 -0
  140. package/src/components/SubComponents/FormInstance/models/overrides/currency.js +17 -0
  141. package/src/components/SubComponents/FormInstance/models/overrides/customcomposite.js +41 -0
  142. package/src/components/SubComponents/FormInstance/models/overrides/date.js +126 -0
  143. package/src/components/SubComponents/FormInstance/models/overrides/datelist.js +73 -0
  144. package/src/components/SubComponents/FormInstance/models/overrides/detail.js +38 -0
  145. package/src/components/SubComponents/FormInstance/models/overrides/email-confirm.js +12 -0
  146. package/src/components/SubComponents/FormInstance/models/overrides/email.js +7 -0
  147. package/src/components/SubComponents/FormInstance/models/overrides/file.js +52 -0
  148. package/src/components/SubComponents/FormInstance/models/overrides/flexbox.js +33 -0
  149. package/src/components/SubComponents/FormInstance/models/overrides/hidden.js +24 -0
  150. package/src/components/SubComponents/FormInstance/models/overrides/likert.js +40 -0
  151. package/src/components/SubComponents/FormInstance/models/overrides/markup.js +47 -0
  152. package/src/components/SubComponents/FormInstance/models/overrides/message.js +53 -0
  153. package/src/components/SubComponents/FormInstance/models/overrides/moretext.js +64 -0
  154. package/src/components/SubComponents/FormInstance/models/overrides/multiple.js +51 -0
  155. package/src/components/SubComponents/FormInstance/models/overrides/number.js +22 -0
  156. package/src/components/SubComponents/FormInstance/models/overrides/options-other.js +34 -0
  157. package/src/components/SubComponents/FormInstance/models/overrides/page.js +7 -0
  158. package/src/components/SubComponents/FormInstance/models/overrides/phonenumber.js +13 -0
  159. package/src/components/SubComponents/FormInstance/models/overrides/radio.js +31 -0
  160. package/src/components/SubComponents/FormInstance/models/overrides/range.js +19 -0
  161. package/src/components/SubComponents/FormInstance/models/overrides/rating.js +47 -0
  162. package/src/components/SubComponents/FormInstance/models/overrides/scale.js +33 -0
  163. package/src/components/SubComponents/FormInstance/models/overrides/section.js +39 -0
  164. package/src/components/SubComponents/FormInstance/models/overrides/select.js +28 -0
  165. package/src/components/SubComponents/FormInstance/models/overrides/signature.js +7 -0
  166. package/src/components/SubComponents/FormInstance/models/overrides/submit.js +23 -0
  167. package/src/components/SubComponents/FormInstance/models/overrides/table.js +48 -0
  168. package/src/components/SubComponents/FormInstance/models/overrides/tablerow.js +20 -0
  169. package/src/components/SubComponents/FormInstance/models/overrides/tableselect.js +66 -0
  170. package/src/components/SubComponents/FormInstance/models/overrides/testing.js +47 -0
  171. package/src/components/SubComponents/FormInstance/models/overrides/text.js +7 -0
  172. package/src/components/SubComponents/FormInstance/models/overrides/textarea.js +26 -0
  173. package/src/components/SubComponents/FormInstance/models/overrides/textformat.js +13 -0
  174. package/src/components/SubComponents/FormInstance/models/overrides/time.js +13 -0
  175. package/src/components/SubComponents/FormInstance/models/overrides/twig.js +118 -0
  176. package/src/components/SubComponents/FormInstance/models/overrides/unknown.js +24 -0
  177. package/src/components/SubComponents/FormInstance/models/overrides/url.js +13 -0
  178. package/src/components/SubComponents/FormInstance/services/convert-form-element.js +49 -0
  179. package/src/components/SubComponents/FormInstance/services/form-api.js +47 -0
  180. package/src/components/SubComponents/FormInstance/services/form-render-parser.js +156 -0
  181. package/src/components/SubComponents/FormInstance/services/form-submit-parser.js +68 -0
  182. package/src/components/SubComponents/FormInstance/services/logic-linker.js +73 -0
  183. package/src/components/SubComponents/FormInstance/services/logic-parser.js +173 -0
  184. package/src/components/SubComponents/FormInstance/services/registry-factory.js +284 -0
  185. package/src/components/SubComponents/FormInstance/stories/Documentation.mdx +234 -0
  186. package/src/components/SubComponents/FormInstance/stories/advanced.stories.js +109 -0
  187. package/src/components/SubComponents/FormInstance/stories/basic.stories.js +73 -0
  188. package/src/components/SubComponents/FormInstance/stories/build.stories.js +27 -0
  189. package/src/components/SubComponents/FormInstance/stories/composite.stories.js +90 -0
  190. package/src/components/SubComponents/FormInstance/stories/condition.stories.js +83 -0
  191. package/src/components/SubComponents/FormInstance/stories/custom.stories.js +69 -0
  192. package/src/components/SubComponents/FormInstance/stories/date.stories.js +76 -0
  193. package/src/components/SubComponents/FormInstance/stories/fileupload.stories.js +57 -0
  194. package/src/components/SubComponents/FormInstance/stories/form-alert.stories.js +93 -0
  195. package/src/components/SubComponents/FormInstance/stories/index.stories.js +63 -0
  196. package/src/components/SubComponents/FormInstance/stories/layout.stories.js +85 -0
  197. package/src/components/SubComponents/FormInstance/stories/markup.stories.js +91 -0
  198. package/src/components/SubComponents/FormInstance/stories/mocks/address.json +298 -0
  199. package/src/components/SubComponents/FormInstance/stories/mocks/advancedhtml.json +23 -0
  200. package/src/components/SubComponents/FormInstance/stories/mocks/autocomplete.json +34 -0
  201. package/src/components/SubComponents/FormInstance/stories/mocks/basichtml.json +15 -0
  202. package/src/components/SubComponents/FormInstance/stories/mocks/checkboxes.json +102 -0
  203. package/src/components/SubComponents/FormInstance/stories/mocks/checkboxesother.json +197 -0
  204. package/src/components/SubComponents/FormInstance/stories/mocks/container.json +134 -0
  205. package/src/components/SubComponents/FormInstance/stories/mocks/customcomposite.json +469 -0
  206. package/src/components/SubComponents/FormInstance/stories/mocks/date.json +19 -0
  207. package/src/components/SubComponents/FormInstance/stories/mocks/datelist.json +752 -0
  208. package/src/components/SubComponents/FormInstance/stories/mocks/datetime.json +89 -0
  209. package/src/components/SubComponents/FormInstance/stories/mocks/details.json +63 -0
  210. package/src/components/SubComponents/FormInstance/stories/mocks/email.json +18 -0
  211. package/src/components/SubComponents/FormInstance/stories/mocks/emailconfirm.json +110 -0
  212. package/src/components/SubComponents/FormInstance/stories/mocks/fieldset.json +62 -0
  213. package/src/components/SubComponents/FormInstance/stories/mocks/fileupload.json +25 -0
  214. package/src/components/SubComponents/FormInstance/stories/mocks/flexbox.json +58 -0
  215. package/src/components/SubComponents/FormInstance/stories/mocks/hidden.json +35 -0
  216. package/src/components/SubComponents/FormInstance/stories/mocks/horizontalrule.json +14 -0
  217. package/src/components/SubComponents/FormInstance/stories/mocks/jahd.json +1359 -0
  218. package/src/components/SubComponents/FormInstance/stories/mocks/label.json +14 -0
  219. package/src/components/SubComponents/FormInstance/stories/mocks/likert.json +375 -0
  220. package/src/components/SubComponents/FormInstance/stories/mocks/message.json +86 -0
  221. package/src/components/SubComponents/FormInstance/stories/mocks/more.json +19 -0
  222. package/src/components/SubComponents/FormInstance/stories/mocks/multiple.json +142 -0
  223. package/src/components/SubComponents/FormInstance/stories/mocks/number.json +35 -0
  224. package/src/components/SubComponents/FormInstance/stories/mocks/quad.json +249 -0
  225. package/src/components/SubComponents/FormInstance/stories/mocks/radios.json +70 -0
  226. package/src/components/SubComponents/FormInstance/stories/mocks/radiosother.json +176 -0
  227. package/src/components/SubComponents/FormInstance/stories/mocks/range.json +58 -0
  228. package/src/components/SubComponents/FormInstance/stories/mocks/rating.json +42 -0
  229. package/src/components/SubComponents/FormInstance/stories/mocks/rule-disabled-value.json +66 -0
  230. package/src/components/SubComponents/FormInstance/stories/mocks/rule-enabled-value.json +43 -0
  231. package/src/components/SubComponents/FormInstance/stories/mocks/rule-hidden-value.json +68 -0
  232. package/src/components/SubComponents/FormInstance/stories/mocks/rule-required-value.json +69 -0
  233. package/src/components/SubComponents/FormInstance/stories/mocks/rule-visible-value.json +157 -0
  234. package/src/components/SubComponents/FormInstance/stories/mocks/sameas.json +66 -0
  235. package/src/components/SubComponents/FormInstance/stories/mocks/scale.json +200 -0
  236. package/src/components/SubComponents/FormInstance/stories/mocks/section.json +63 -0
  237. package/src/components/SubComponents/FormInstance/stories/mocks/select.json +41 -0
  238. package/src/components/SubComponents/FormInstance/stories/mocks/selectother.json +115 -0
  239. package/src/components/SubComponents/FormInstance/stories/mocks/signature.json +25 -0
  240. package/src/components/SubComponents/FormInstance/stories/mocks/styles.json +81 -0
  241. package/src/components/SubComponents/FormInstance/stories/mocks/table-select.json +472 -0
  242. package/src/components/SubComponents/FormInstance/stories/mocks/table.json +154 -0
  243. package/src/components/SubComponents/FormInstance/stories/mocks/telephone.json +18 -0
  244. package/src/components/SubComponents/FormInstance/stories/mocks/textarea.json +22 -0
  245. package/src/components/SubComponents/FormInstance/stories/mocks/textfield.json +66 -0
  246. package/src/components/SubComponents/FormInstance/stories/mocks/time.json +20 -0
  247. package/src/components/SubComponents/FormInstance/stories/mocks/token.json +260 -0
  248. package/src/components/SubComponents/FormInstance/stories/mocks/twig.json +154 -0
  249. package/src/components/SubComponents/FormInstance/stories/mocks/url.json +18 -0
  250. package/src/components/SubComponents/FormInstance/stories/mocks/value.json +17 -0
  251. package/src/components/SubComponents/FormInstance/stories/mocks/wizard.json +353 -0
  252. package/src/components/SubComponents/FormInstance/stories/options.stories.js +98 -0
  253. package/src/components/SubComponents/FormInstance/stories/style.stories.js +55 -0
  254. package/src/components/SubComponents/FormInstance/stories/wizard.stories.js +55 -0
  255. package/src/components/SubComponents/FormInstance/style.scss +185 -0
  256. package/src/components/SubComponents/FormInstance/tests/address.test.js +255 -0
  257. package/src/components/SubComponents/FormInstance/tests/advancedhtml.test.js +31 -0
  258. package/src/components/SubComponents/FormInstance/tests/autocomplete.test.js +38 -0
  259. package/src/components/SubComponents/FormInstance/tests/basichtml.test.js +31 -0
  260. package/src/components/SubComponents/FormInstance/tests/checkbox.test.js +29 -0
  261. package/src/components/SubComponents/FormInstance/tests/checkboxes.test.js +44 -0
  262. package/src/components/SubComponents/FormInstance/tests/checkboxesother.test.js +91 -0
  263. package/src/components/SubComponents/FormInstance/tests/container.test.js +66 -0
  264. package/src/components/SubComponents/FormInstance/tests/customcomposite.test.js +86 -0
  265. package/src/components/SubComponents/FormInstance/tests/date.test.js +63 -0
  266. package/src/components/SubComponents/FormInstance/tests/datelist.test.js +136 -0
  267. package/src/components/SubComponents/FormInstance/tests/datetime.test.js +54 -0
  268. package/src/components/SubComponents/FormInstance/tests/details.test.js +58 -0
  269. package/src/components/SubComponents/FormInstance/tests/email.test.js +28 -0
  270. package/src/components/SubComponents/FormInstance/tests/emailconfirm.test.js +79 -0
  271. package/src/components/SubComponents/FormInstance/tests/fieldset.test.js +63 -0
  272. package/src/components/SubComponents/FormInstance/tests/flexbox.test.js +71 -0
  273. package/src/components/SubComponents/FormInstance/tests/form-test-utils.js +120 -0
  274. package/src/components/SubComponents/FormInstance/tests/form.test.js +26 -0
  275. package/src/components/SubComponents/FormInstance/tests/hidden.test.js +52 -0
  276. package/src/components/SubComponents/FormInstance/tests/horizontalrule.test.js +31 -0
  277. package/src/components/SubComponents/FormInstance/tests/label.test.js +31 -0
  278. package/src/components/SubComponents/FormInstance/tests/likert.test.js +38 -0
  279. package/src/components/SubComponents/FormInstance/tests/message.test.js +89 -0
  280. package/src/components/SubComponents/FormInstance/tests/more.test.js +32 -0
  281. package/src/components/SubComponents/FormInstance/tests/multiple.test.js +71 -0
  282. package/src/components/SubComponents/FormInstance/tests/number.test.js +51 -0
  283. package/src/components/SubComponents/FormInstance/tests/radios.test.js +34 -0
  284. package/src/components/SubComponents/FormInstance/tests/radiosother.test.js +79 -0
  285. package/src/components/SubComponents/FormInstance/tests/range.test.js +32 -0
  286. package/src/components/SubComponents/FormInstance/tests/rating.test.js +38 -0
  287. package/src/components/SubComponents/FormInstance/tests/rule-disabled.test.js +128 -0
  288. package/src/components/SubComponents/FormInstance/tests/rule-enabled-value.test.js +78 -0
  289. package/src/components/SubComponents/FormInstance/tests/rule-hidden.test.js +131 -0
  290. package/src/components/SubComponents/FormInstance/tests/rule-required-value.test.js +144 -0
  291. package/src/components/SubComponents/FormInstance/tests/rule-visible.test.js +619 -0
  292. package/src/components/SubComponents/FormInstance/tests/sameas.test.js +94 -0
  293. package/src/components/SubComponents/FormInstance/tests/scale.test.js +43 -0
  294. package/src/components/SubComponents/FormInstance/tests/section.test.js +63 -0
  295. package/src/components/SubComponents/FormInstance/tests/select.test.js +45 -0
  296. package/src/components/SubComponents/FormInstance/tests/selectother.test.js +82 -0
  297. package/src/components/SubComponents/FormInstance/tests/signature.test.js +32 -0
  298. package/src/components/SubComponents/FormInstance/tests/styles.test.js +73 -0
  299. package/src/components/SubComponents/FormInstance/tests/table-select.test.js +93 -0
  300. package/src/components/SubComponents/FormInstance/tests/table.test.js +97 -0
  301. package/src/components/SubComponents/FormInstance/tests/telephone.test.js +29 -0
  302. package/src/components/SubComponents/FormInstance/tests/textarea.test.js +29 -0
  303. package/src/components/SubComponents/FormInstance/tests/textfield.test.js +48 -0
  304. package/src/components/SubComponents/FormInstance/tests/time.test.js +29 -0
  305. package/src/components/SubComponents/FormInstance/tests/token.test.js +33 -0
  306. package/src/components/SubComponents/FormInstance/tests/twig.test.js +74 -0
  307. package/src/components/SubComponents/FormInstance/tests/url.test.js +48 -0
  308. package/src/components/SubComponents/FormInstance/tests/value.test.js +31 -0
  309. package/src/components/SubComponents/FormInstance/tests/wizard.test.js +145 -0
  310. package/src/components/SubComponents/Icon/index.stories.js +1 -6
  311. package/src/components/SubComponents/MediaPlayer/index.stories.js +1 -6
  312. package/src/components/SubComponents/Pagination/index.stories.js +3 -8
  313. package/src/components/SubComponents/ResourceGroup/List/index.stories.js +3 -2
  314. package/src/components/SubComponents/ResourceGroup/index.vue +211 -174
  315. package/src/components/SubComponents/Search/index.vue +39 -37
  316. package/src/components/SubComponents/SingleImage/index.stories.js +2 -16
  317. package/src/components/SubComponents/VideoThumbnail/index.stories.js +1 -0
  318. package/src/components/SubComponents/VideoThumbnail/index.vue +31 -117
  319. package/src/includes/scss/mixins/src/grid.scss +4 -2
  320. package/src/includes/scss/mixins/src/units.scss +25 -4
  321. package/src/includes/scss/vars/src/colors.module.scss +28 -1
  322. package/src/index.js +17 -5
  323. package/src/main.js +2 -10
  324. package/src/mock/app-header-new.js +715 -0
  325. package/src/mock/carousel-items.js +82 -0
  326. package/src/mock/jest.fileMock.js +1 -0
  327. package/vite.config.js +28 -15
  328. package/src/components/SubComponents/FormInstance/index.stories.js +0 -8
@@ -0,0 +1,118 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+ import { generateUniqueId, htmlDecode } from '../form-utils'
3
+
4
+ export class TwigFormElement extends BaseFormElement {
5
+ getContent() {
6
+ let content = ''
7
+ const id = generateUniqueId('xxxxx')
8
+ const shouldHideLabel = this.shouldHideLabel()
9
+ if (!shouldHideLabel) {
10
+ content += `<label for="${id}" class="col-form-label">${this.getLabel()}</label>`
11
+ }
12
+
13
+ const tpl = this.showTokens()
14
+ ? this.getTokenContent()
15
+ : this.webformElement['#template']
16
+ if (!this.isEmpty(tpl)) {
17
+ content += htmlDecode(`<div id="${id}">${tpl}</div>`)
18
+ }
19
+
20
+ return content
21
+ }
22
+
23
+ isInput() {
24
+ return false
25
+ }
26
+
27
+ printTokens(form, data) {
28
+ form.components
29
+ .filter((el) => el.key !== 'action')
30
+ .reduce((prev, element) => {
31
+ const add = (cmp, parents) => {
32
+ if (!Array.isArray(cmp.components)) {
33
+ parents.push(cmp)
34
+ cmp.compositekey = parents
35
+ .filter((parent) => parent.type !== 'datagrid')
36
+ .map((parent) => parent.key)
37
+ .join('.')
38
+
39
+ prev.push(cmp)
40
+ } else {
41
+ if (cmp.type !== 'panel') {
42
+ parents.push(cmp)
43
+ }
44
+ cmp.components.forEach((subElement) =>
45
+ add(subElement, JSON.parse(JSON.stringify(parents)))
46
+ )
47
+ }
48
+ }
49
+ add(element, [])
50
+ return prev
51
+ }, [])
52
+ .filter((element) => element.input)
53
+ .map((element) => {
54
+ const index = function(obj, is, value) {
55
+ if (typeof is == 'string') return index(obj, is.split('.'), value)
56
+ else if (is.length == 1 && value !== undefined)
57
+ return (obj[is[0]] = value)
58
+ else if (is.length == 0) return obj
59
+ else return index(obj[is[0]], is.slice(1), value)
60
+ }
61
+ const dataElement = index(data, element.compositekey)
62
+ if (
63
+ dataElement !== null &&
64
+ dataElement !== undefined &&
65
+ dataElement !== ''
66
+ ) {
67
+ let value = dataElement
68
+ if (value === true || value === false) {
69
+ value = value === true ? 'Yes' : 'No'
70
+ } else if (Array.isArray(value)) {
71
+ value = value
72
+ .map((item) => {
73
+ if (!!item && item.constructor === Object) {
74
+ return Object.values(item).join(', ')
75
+ } else {
76
+ return item
77
+ }
78
+ })
79
+ .join(', ')
80
+ }
81
+ return element.label + ': ' + value
82
+ }
83
+ return undefined
84
+ })
85
+ .filter((tag) => !!tag)
86
+ .join('<br/>')
87
+ }
88
+
89
+ getTokenContent() {
90
+ const printFn = this.printTokens.toString()
91
+ const printFnBody = printFn.slice(
92
+ printFn.indexOf('{') + 1,
93
+ printFn.lastIndexOf(';')
94
+ )
95
+ return `
96
+ {{
97
+ ${printFnBody}
98
+ }} <br/><br/>`
99
+ }
100
+
101
+ showTokens() {
102
+ return (
103
+ this.webformElement['#webform_plugin_id'] === 'webform_computed_token'
104
+ )
105
+ }
106
+
107
+ getType() {
108
+ return 'htmlelement'
109
+ }
110
+
111
+ getCustomProperties() {
112
+ return {
113
+ tag: 'div',
114
+ content: this.getContent(),
115
+ refreshOnChange: true
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,24 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class UnknownFormElement extends BaseFormElement {
4
+ getType() {
5
+ return 'htmlelement'
6
+ }
7
+
8
+ isInput() {
9
+ return false
10
+ }
11
+
12
+ getLogic() {
13
+ return undefined
14
+ }
15
+
16
+ getCustomProperties() {
17
+ return {
18
+ content: `<span style="color: red">** Error: unhandled form element ${
19
+ this.webformElement['#type']
20
+ } >> ${this.getLabel() || this.getName()} **<s/pan>`,
21
+ refreshOnChange: false
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,13 @@
1
+ import { BaseFormElement } from '../base-form-element'
2
+
3
+ export class URLFormElement extends BaseFormElement {
4
+ transformSubmissionValue(url) {
5
+ if (url) {
6
+ const pattern = /^((http|https|ftp):\/\/)/
7
+ if (!pattern.test(url)) {
8
+ url = 'http://' + url
9
+ }
10
+ }
11
+ return url
12
+ }
13
+ }
@@ -0,0 +1,49 @@
1
+ export const converFormIOElementToJSON = (formioElement, formlogicList) => {
2
+ let formioElementJSON
3
+ if (formioElement.isCustomPropertiesAnArray()) {
4
+ formioElementJSON = formioElement.getCustomProperties()
5
+ } else {
6
+ formioElementJSON = Object.assign(
7
+ {
8
+ label: formioElement.getLabel(),
9
+ labelPosition: formioElement.getLabelPosition(),
10
+ autocomplete: formioElement.getAutoComplete(),
11
+ key: formioElement.getKey(),
12
+ id: formioElement.getId(),
13
+ type: formioElement.getType(),
14
+ input: formioElement.isInput(),
15
+ inputMask: formioElement.getInputMask(),
16
+ mask: formioElement.shouldHideInputText(),
17
+ description: formioElement.getDescription(),
18
+ tooltip: formioElement.getTooltip(),
19
+ placeholder: formioElement.getPlaceholder(),
20
+ prefix: formioElement.getPrefix(),
21
+ suffix: formioElement.getSuffix(),
22
+ validate: formioElement.getValidation(),
23
+ case: formioElement.getCasing(),
24
+ disabled: formioElement.isDisabled(),
25
+ hideLabel: formioElement.shouldHideLabel(),
26
+ clearOnHide: formioElement.shouldClearValuesWhenHidden(),
27
+ defaultValue: formioElement.getDefaultValue(),
28
+ customClass: formioElement.getCustomClass(),
29
+ attributes: {
30
+ instance: () => formioElement,
31
+ counter: formioElement.counter
32
+ }
33
+ },
34
+ formioElement.getCustomProperties()
35
+ )
36
+
37
+ Object.keys(formioElementJSON)
38
+ .filter((key) => formioElementJSON[key] === undefined)
39
+ .forEach((key) => delete formioElementJSON[key])
40
+ }
41
+ const logicList = formioElement.getLogic()
42
+ if (logicList && Array.isArray(logicList) && logicList.length > 0) {
43
+ formlogicList.push({
44
+ logicList,
45
+ sourceElement: formioElement
46
+ })
47
+ }
48
+ return { json: formioElementJSON, formlogicList }
49
+ }
@@ -0,0 +1,47 @@
1
+ export class FormApi {
2
+ initialise(baseUrl, formId, axios) {
3
+ this.baseUrl = baseUrl
4
+ this.formId = formId
5
+ this.axios = axios
6
+ }
7
+
8
+ fetchFormSchema = async () => {
9
+ try {
10
+ const formRestPath = `${this.baseUrl}/webform_rest/${this.formId}/fields`
11
+ const response = await this.axios.get(formRestPath)
12
+ return response?.data
13
+ } catch (e) {
14
+ return null
15
+ }
16
+ }
17
+
18
+ submitForm = async (payload, isPreview, tree) => {
19
+ if (isPreview) {
20
+ console.log('submission payload', payload)
21
+ return { submitted: true }
22
+ }
23
+ if (!payload) {
24
+ return { submitted: false }
25
+ }
26
+ try {
27
+ const formRestPath = `${this.baseUrl}/webform_rest/submit?_format=json`
28
+ let res = await this.axios.post(formRestPath, payload)
29
+ return { submitted: true, sid: res.data.sid }
30
+ } catch (e) {
31
+ const isValidationError =
32
+ typeof e === 'object' && e.response?.status === 400
33
+ if (isValidationError) {
34
+ return {
35
+ submitted: false,
36
+ message: e.response.data.error.message,
37
+ fields: Object.keys(e.response.data.error || {}).map((key) => ({
38
+ label: tree[key]?.getLabel() || key,
39
+ elementClass: tree[key]?.getCustomClass(),
40
+ error: e.response.data.error[key]
41
+ }))
42
+ }
43
+ }
44
+ return { submitted: false }
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,156 @@
1
+ import { isEmpty } from '../models/form-utils'
2
+ import { converFormIOElementToJSON } from './convert-form-element'
3
+ import { updateConditionWithFormReferences } from './logic-linker'
4
+ import { RegisterFactory } from './registry-factory'
5
+
6
+ export class FormRenderParser {
7
+ initialise(contentApiUrl, isPreview) {
8
+ this.formSettingsMeta = { contentApiUrl }
9
+ this.isPreview = isPreview
10
+ }
11
+
12
+ parse = (webform, options) => {
13
+ if (!webform) {
14
+ return null
15
+ }
16
+ const webFormElementTree = {}
17
+ const formlogicList = []
18
+ try {
19
+ webform = this.preProcessWebForm(webform)
20
+ const formiodefinition = {
21
+ id: webform['#id'],
22
+ components: this.parseFormContainerComponents(
23
+ webform,
24
+ webFormElementTree,
25
+ null,
26
+ formlogicList
27
+ )
28
+ }
29
+
30
+ options.breadcrumbSettings = { clickable: false }
31
+ options.buttonSettings = { showCancel: false }
32
+
33
+ this.applyConditionsToForm(webFormElementTree, formlogicList)
34
+ const css = this.applyStylesToForm(webFormElementTree)
35
+
36
+ formiodefinition.display = this.getDisplay(webFormElementTree)
37
+ if (this.isPreview) {
38
+ console.log('drupal webform', webform)
39
+ console.log('formio definition', formiodefinition)
40
+ }
41
+ return {
42
+ definition: formiodefinition,
43
+ tree: webFormElementTree,
44
+ options,
45
+ css
46
+ }
47
+ } catch (e) {
48
+ console.error(e)
49
+ return null
50
+ }
51
+ }
52
+
53
+ parseFormContainerComponents = (
54
+ container,
55
+ webFormElementTree,
56
+ parent,
57
+ formlogicList
58
+ ) => {
59
+ return Object.keys(container)
60
+ .filter((i) => !i.startsWith('#'))
61
+ .map((i) => container[i])
62
+ .map((webFormElement) => {
63
+ return RegisterFactory.getFormIOElement(
64
+ webFormElement,
65
+ this.formSettingsMeta,
66
+ parent
67
+ )
68
+ })
69
+ .filter(
70
+ (formIOElement) => !!formIOElement && formIOElement.isRenderable()
71
+ )
72
+ .map((formIOElement) => {
73
+ // nested form logic
74
+ if (formIOElement.isLayoutComponent()) {
75
+ const subContainer = formIOElement.getContainerChildElements()
76
+ formIOElement.setComponents(
77
+ this.parseFormContainerComponents(
78
+ subContainer,
79
+ webFormElementTree,
80
+ formIOElement,
81
+ formlogicList
82
+ )
83
+ )
84
+ }
85
+
86
+ return formIOElement
87
+ })
88
+ .map((formIOElement) => {
89
+ // conversion logic
90
+ webFormElementTree[formIOElement.getKey()] = formIOElement
91
+ const formioElementJSON = converFormIOElementToJSON(
92
+ formIOElement,
93
+ formlogicList
94
+ ).json
95
+ formIOElement.setFormIOdefinitionForElement(formioElementJSON)
96
+ return formioElementJSON
97
+ })
98
+ }
99
+
100
+ preProcessWebForm = (webform) => {
101
+ const hasSubmitButton = !!webform.actions
102
+ if (!hasSubmitButton) {
103
+ webform.actions = {
104
+ '#type': 'webform_actions',
105
+ '#webform_id': 'form--actions',
106
+ '#webform_key': 'actions'
107
+ }
108
+ }
109
+ return webform
110
+ }
111
+
112
+ applyConditionsToForm = (webFormElementTree, formlogicList) => {
113
+ formlogicList.forEach(({ logicList, sourceElement }) => {
114
+ logicList.forEach((logic) =>
115
+ updateConditionWithFormReferences(
116
+ logic,
117
+ sourceElement,
118
+ webFormElementTree
119
+ )
120
+ )
121
+ })
122
+ }
123
+
124
+ applyStylesToForm = (webFormElementTree) => {
125
+ let css = ''
126
+ Object.values(webFormElementTree).forEach((element) => {
127
+ const overrides = element.getCustomCSS()
128
+
129
+ if (overrides) {
130
+ const addStyle = (style, selector) => {
131
+ if (!isEmpty(style)) {
132
+ css += `.${element.getCustomClass()} ${selector}{${style}}`
133
+ }
134
+ }
135
+ addStyle(overrides.label, 'label ')
136
+ addStyle(overrides.wrapper, '')
137
+ addStyle(overrides.element, '[ref=element] > *')
138
+
139
+ if (!isEmpty(overrides.additional)) {
140
+ css += overrides.additional
141
+ }
142
+ }
143
+ })
144
+ return css
145
+ }
146
+
147
+ getDisplay(webFormElementTree) {
148
+ const pageKeys = Object.keys(webFormElementTree).filter((elementKey) =>
149
+ webFormElementTree[elementKey].isPageComponent()
150
+ )
151
+ if (pageKeys.length > 0) {
152
+ return 'wizard'
153
+ }
154
+ return 'form'
155
+ }
156
+ }
@@ -0,0 +1,68 @@
1
+ export class FormSubmitParser {
2
+ initialise(formId, axios) {
3
+ this.formId = formId
4
+ this.axios = axios
5
+ }
6
+
7
+ parse = async (submission, form, formioinstance) => {
8
+ try {
9
+ let parseData = await this.parseFormInstance(
10
+ submission.data,
11
+ form,
12
+ formioinstance,
13
+ )
14
+ return {
15
+ webform_id: this.formId,
16
+ ...parseData,
17
+ }
18
+ } catch (e) {
19
+ console.error(e)
20
+ return null
21
+ }
22
+ }
23
+
24
+ parseFormInstance = async (formSubmissionMap, form, formioinstance) => {
25
+ return Object.keys(formSubmissionMap)
26
+ .filter((key) => key !== 'actions')
27
+ .filter((key) => !!form.tree[key])
28
+ .reduce(async (previous, key) => {
29
+ const formTreeElement = form.tree[key]
30
+ const value = formSubmissionMap[key]
31
+ const component = formioinstance.components.find(
32
+ (component) => component.originalComponent?.key === key,
33
+ )
34
+ const isDisabled = component?.disabled
35
+ const ignore =
36
+ isDisabled || formTreeElement.shouldIgnoreSubmissionValue()
37
+ if (formTreeElement.isLayoutComponent() && ignore) {
38
+ const containerSubmissions = await this.parseFormInstance(
39
+ value,
40
+ form,
41
+ formioinstance,
42
+ )
43
+ previous = {
44
+ ...(await previous),
45
+ ...containerSubmissions,
46
+ }
47
+ } else if (!ignore) {
48
+ const returnValue = await formTreeElement.transformSubmissionValue(
49
+ value,
50
+ this.axios,
51
+ await previous,
52
+ )
53
+ if (typeof returnValue === 'object' && !Array.isArray(returnValue)) {
54
+ previous = {
55
+ ...(await previous),
56
+ ...returnValue,
57
+ }
58
+ } else {
59
+ previous = {
60
+ ...(await previous),
61
+ [key]: returnValue,
62
+ }
63
+ }
64
+ }
65
+ return previous
66
+ }, {})
67
+ }
68
+ }
@@ -0,0 +1,73 @@
1
+ export function updateConditionWithFormReferences(
2
+ logic,
3
+ sourceElement,
4
+ webFormElementTree
5
+ ) {
6
+ const condition = logic.trigger.javascript
7
+ // check if condition references elements with nested parents
8
+ let match = getElementToReplace(condition)
9
+ updateSourceElement(sourceElement, logic)
10
+
11
+ if (match) {
12
+ // if yes then replace condition data.{text1} with data.container1.text1
13
+ const conditionReferenceToElement = webFormElementTree[match.to]
14
+ if (conditionReferenceToElement) {
15
+ const updatedCondition = updateConditionWithReference(
16
+ condition,
17
+ conditionReferenceToElement,
18
+ match.from
19
+ )
20
+ logic.trigger.javascript = updatedCondition
21
+ match = getElementToReplace(condition)
22
+ return match
23
+ ? updateConditionWithFormReferences(
24
+ logic,
25
+ sourceElement,
26
+ webFormElementTree
27
+ )
28
+ : updatedCondition
29
+ }
30
+ }
31
+ return condition
32
+ }
33
+
34
+ function updateSourceElement(sourceElement, logic) {
35
+ const formioElement = sourceElement.formIOdefinitionForElement
36
+ formioElement.logic = formioElement.logic || []
37
+ formioElement.logic.push(logic)
38
+ for (const key in logic.defaultProps) {
39
+ const defaults = logic.defaultProps[key]
40
+ if (typeof defaults === 'object') {
41
+ for (const defaultkey in defaults) {
42
+ formioElement[key] = formioElement[key] || {}
43
+ formioElement[key][defaultkey] = defaults[defaultkey]
44
+ }
45
+ } else {
46
+ formioElement[key] = defaults
47
+ }
48
+ }
49
+ }
50
+
51
+ function updateConditionWithReference(
52
+ condition,
53
+ elementToReplace,
54
+ elementKeyToReplace
55
+ ) {
56
+ const elementToReplaceParent = elementToReplace.getParent()
57
+ const formReferenceParentKey = elementToReplaceParent
58
+ ? elementToReplaceParent.getKey() + '.'
59
+ : ''
60
+ let updatedCondition = condition.replace(
61
+ elementKeyToReplace,
62
+ formReferenceParentKey + elementToReplace.getKey()
63
+ )
64
+ return updatedCondition
65
+ }
66
+
67
+ function getElementToReplace(condition) {
68
+ const match = condition.match(/{([^}]+)}/)
69
+ if (match) {
70
+ return { from: match[0], to: match[1] }
71
+ }
72
+ return null
73
+ }