@saasquatch/mint-components 1.12.1-5 → 1.12.1-6

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 (532) hide show
  1. package/dist/cjs/{GenericTableView-80d7642e.js → GenericTableView-7ef786c3.js} +2 -2
  2. package/dist/cjs/{ShadowViewAddon-fa205e28.js → ShadowViewAddon-fae7ab2c.js} +199 -285
  3. package/dist/cjs/copy-text-view-43e8349f.js +231 -0
  4. package/dist/cjs/{email-registration-view-248652bb.js → email-registration-view-4eeee3e4.js} +2 -2
  5. package/dist/cjs/{global-02e50f09.js → global-d9abaf4d.js} +3 -3
  6. package/dist/cjs/{index-b0129cd6.js → index-3cf5ef3d.js} +16 -0
  7. package/dist/cjs/{index.module-df530553.js → index.module-ccf9bd9c.js} +57 -19
  8. package/dist/cjs/loader.cjs.js +5 -5
  9. package/dist/cjs/{luxon-05098e19.js → luxon-14ae1f8a.js} +1 -1
  10. package/dist/cjs/mint-components.cjs.js +5 -5
  11. package/dist/cjs/{mixins-fe9d4112.js → mixins-f7e0377a.js} +0 -1
  12. package/dist/cjs/{mockRewardData-4258e067.js → mockRewardData-a384d9f5.js} +1 -1
  13. package/dist/cjs/raisins-plop-target.cjs.entry.js +1 -1
  14. package/dist/cjs/{re-render-1976e05e.js → re-render-1e63c82b.js} +5 -5
  15. package/dist/cjs/{sqm-asset-card-view-a0e33f21.js → sqm-asset-card-view-a3abee0b.js} +1 -1
  16. package/dist/cjs/sqm-asset-card.cjs.entry.js +4 -4
  17. package/dist/cjs/sqm-banking-info-form_16.cjs.entry.js +67 -67
  18. package/dist/cjs/sqm-base-registration-form-view-e4a74dee.js +68 -0
  19. package/dist/cjs/{sqm-big-stat_39.cjs.entry.js → sqm-big-stat_37.cjs.entry.js} +91 -153
  20. package/dist/cjs/{sqm-close-button-view-fd6e8f60.js → sqm-close-button-view-0cdada3a.js} +2 -2
  21. package/dist/cjs/sqm-close-button.cjs.entry.js +5 -5
  22. package/dist/cjs/sqm-context-router.cjs.entry.js +4 -4
  23. package/dist/cjs/sqm-empty_4.cjs.entry.js +11 -7
  24. package/dist/cjs/sqm-form-message.cjs.entry.js +2 -2
  25. package/dist/cjs/sqm-google-sign-in.cjs.entry.js +45 -0
  26. package/dist/cjs/sqm-graphql-client-provider.cjs.entry.js +7 -7
  27. package/dist/cjs/sqm-header-logo.cjs.entry.js +2 -2
  28. package/dist/cjs/sqm-instant-access-registration.cjs.entry.js +7 -7
  29. package/dist/cjs/{sqm-invoice-table-view-e3b03a00.js → sqm-invoice-table-view-a13d1c7f.js} +2 -2
  30. package/dist/cjs/{sqm-leaderboard-rank-view-5a3d4a88.js → sqm-leaderboard-rank-view-133f8d95.js} +1 -1
  31. package/dist/cjs/sqm-leaderboard-rank.cjs.entry.js +8 -8
  32. package/dist/cjs/{sqm-logout-current-user-view-c9f18d96.js → sqm-logout-current-user-view-64ca6abe.js} +1 -1
  33. package/dist/cjs/sqm-logout-current-user.cjs.entry.js +7 -7
  34. package/dist/cjs/sqm-name-fields-view-57c734bf.js +55 -0
  35. package/dist/cjs/sqm-name-fields.cjs.entry.js +59 -0
  36. package/dist/cjs/{sqm-navigation-sidebar-item-view-a125ec5f.js → sqm-navigation-sidebar-item-view-38519acf.js} +4 -4
  37. package/dist/cjs/sqm-navigation-sidebar-item.cjs.entry.js +7 -7
  38. package/dist/cjs/{sqm-navigation-sidebar-view-921704fb.js → sqm-navigation-sidebar-view-37209a17.js} +1 -1
  39. package/dist/cjs/sqm-navigation-sidebar.cjs.entry.js +6 -6
  40. package/dist/cjs/sqm-pagination_3.cjs.entry.js +392 -0
  41. package/dist/cjs/sqm-password-field.cjs.entry.js +6 -6
  42. package/dist/cjs/sqm-popup-container.cjs.entry.js +6 -6
  43. package/dist/cjs/{sqm-portal-container-view-990a85a3.js → sqm-portal-container-view-9a36f5ed.js} +1 -1
  44. package/dist/cjs/{sqm-portal-email-verification-view-292b5bf4.js → sqm-portal-email-verification-view-6e1e80e7.js} +4 -4
  45. package/dist/cjs/sqm-portal-email-verification.cjs.entry.js +12 -12
  46. package/dist/cjs/{sqm-portal-forgot-password-view-969c49ed.js → sqm-portal-forgot-password-view-97903679.js} +3 -3
  47. package/dist/cjs/sqm-portal-forgot-password.cjs.entry.js +9 -9
  48. package/dist/cjs/sqm-portal-google-registration-form.cjs.entry.js +314 -0
  49. package/dist/cjs/sqm-portal-logout.cjs.entry.js +4 -4
  50. package/dist/cjs/{sqm-portal-profile-view-fde54e35.js → sqm-portal-profile-view-f4489585.js} +3 -3
  51. package/dist/cjs/sqm-portal-profile.cjs.entry.js +11 -11
  52. package/dist/cjs/sqm-portal-protected-route.cjs.entry.js +7 -7
  53. package/dist/cjs/{sqm-portal-registration-form-view-621348a6.js → sqm-portal-registration-form-view-5f277c9d.js} +19 -17
  54. package/dist/cjs/sqm-portal-registration-form.cjs.entry.js +19 -218
  55. package/dist/cjs/{sqm-portal-reset-password-view-96f329ed.js → sqm-portal-reset-password-view-0ed5419e.js} +3 -3
  56. package/dist/cjs/sqm-portal-reset-password.cjs.entry.js +12 -12
  57. package/dist/cjs/{sqm-portal-verify-email-view-7ffcc0d4.js → sqm-portal-verify-email-view-cd2c3086.js} +3 -3
  58. package/dist/cjs/sqm-portal-verify-email.cjs.entry.js +12 -12
  59. package/dist/cjs/sqm-referral-table_11.cjs.entry.js +15 -13
  60. package/dist/cjs/sqm-referred-registration.cjs.entry.js +7 -7
  61. package/dist/cjs/sqm-rewards-table-customer-note-cell.cjs.entry.js +3 -3
  62. package/dist/cjs/sqm-rewards-table-customer-note-column.cjs.entry.js +4 -4
  63. package/dist/cjs/sqm-rewards-table_9.cjs.entry.js +17 -17
  64. package/dist/cjs/sqm-route.cjs.entry.js +1 -1
  65. package/dist/cjs/sqm-stencilbook.cjs.entry.js +747 -420
  66. package/dist/cjs/sqm-tab.cjs.entry.js +4 -4
  67. package/dist/cjs/sqm-tabs.cjs.entry.js +6 -6
  68. package/dist/cjs/{sqm-text-span-view-e1cd9bd3.js → sqm-text-span-view-a22f50aa.js} +1 -1
  69. package/dist/cjs/sqm-text-span.cjs.entry.js +3 -3
  70. package/dist/cjs/{stencil-hooks.module-72742a0b.js → stencil-hooks.module-ece1ee46.js} +1 -1
  71. package/dist/cjs/{useChildElements-e0d44916.js → useChildElements-438cf387.js} +3 -3
  72. package/dist/cjs/{useInstantAccessRegistration-bbe746d1.js → useInstantAccessRegistration-7d91867a.js} +4 -4
  73. package/dist/cjs/usePortalRegistrationForm-b9a28240.js +214 -0
  74. package/dist/cjs/{useReferralTable-a76adb0d.js → useReferralTable-6b4920f9.js} +11 -11
  75. package/dist/cjs/{useRegistrationFormState-876ed65d.js → useRegistrationFormState-5911d016.js} +3 -3
  76. package/dist/cjs/{utilities-cec9dd36.js → utilities-27e9535b.js} +2 -2
  77. package/dist/collection/collection-manifest.json +13 -2
  78. package/dist/collection/components/sqm-base-registration/BaseRegistrationForm.stories.js +36 -0
  79. package/dist/collection/components/sqm-base-registration/sqm-base-registration-form-view.js +63 -0
  80. package/dist/collection/components/sqm-checkbox-field/CheckboxField.stories.js +1 -1
  81. package/dist/collection/components/sqm-checkbox-field/sqm-checkbox-field-view.js +15 -6
  82. package/dist/collection/components/sqm-checkbox-field/sqm-checkbox-field.js +5 -5
  83. package/dist/collection/components/sqm-coupon-code/sqm-coupon-code.js +1 -1
  84. package/dist/collection/components/sqm-empty/sqm-empty.js +10 -2
  85. package/dist/collection/components/sqm-google-sign-in/sqm-google-sign-in.js +78 -0
  86. package/dist/collection/components/sqm-logout-current-user/sqm-logout-current-user.js +1 -1
  87. package/dist/collection/components/sqm-pagination/Pagination.stories.js +12 -0
  88. package/dist/collection/components/sqm-pagination/sqm-pagination-view.js +32 -0
  89. package/dist/collection/components/sqm-pagination/sqm-pagination.js +112 -0
  90. package/dist/collection/components/sqm-pagination/usePagination.js +29 -0
  91. package/dist/collection/components/sqm-portal-container/sqm-portal-container.js +0 -4
  92. package/dist/collection/components/sqm-portal-google-registration-form/PortalGoogleRegistrationForm.stories.js +78 -0
  93. package/dist/collection/components/sqm-portal-google-registration-form/small-views/RegistrationFieldsView.js +86 -0
  94. package/dist/collection/components/sqm-portal-google-registration-form/sqm-portal-google-registration-form.js +880 -0
  95. package/dist/collection/components/sqm-portal-google-registration-form/usePortalGoogleRegistrationForm.js +70 -0
  96. package/dist/collection/components/sqm-portal-login/PortalLogin.stories.js +28 -4
  97. package/dist/collection/components/sqm-portal-login/sqm-portal-login-view.js +9 -1
  98. package/dist/collection/components/sqm-portal-login/sqm-portal-login.js +80 -3
  99. package/dist/collection/components/sqm-portal-register/sqm-portal-register-view.js +6 -3
  100. package/dist/collection/components/sqm-portal-registration-form/PortalRegistrationForm.stories.js +1 -5
  101. package/dist/collection/components/sqm-portal-registration-form/sqm-portal-registration-form-view.js +16 -14
  102. package/dist/collection/components/sqm-portal-registration-form/sqm-portal-registration-form.js +30 -3
  103. package/dist/collection/components/sqm-portal-registration-form/usePortalRegistrationForm.js +1 -2
  104. package/dist/collection/components/sqm-referral-card/ReferralCard.stories.js +20 -0
  105. package/dist/collection/components/sqm-referral-code/ReferralCode.stories.js +60 -0
  106. package/dist/collection/components/sqm-referral-code/sqm-referral-code.js +317 -0
  107. package/dist/collection/components/sqm-referral-code/useReferralCode.js +63 -0
  108. package/dist/collection/components/sqm-referral-codes/ReferralCodes.stories.js +65 -0
  109. package/dist/collection/components/sqm-referral-codes/sqm-referral-codes-view.js +69 -0
  110. package/dist/collection/components/sqm-referral-codes/sqm-referral-codes.js +219 -0
  111. package/dist/collection/components/sqm-referral-codes/useReferralCodes.js +131 -0
  112. package/dist/collection/components/sqm-referral-table/ReferralTableRewardsCell.stories.js +0 -1
  113. package/dist/collection/components/sqm-referral-table/cells/sqm-referral-table-rewards-cell.js +6 -2
  114. package/dist/collection/components/sqm-rewards-table/RewardsTableCell.stories.js +1 -3
  115. package/dist/collection/components/sqm-share-button/useShareButton.js +29 -18
  116. package/dist/collection/components/sqm-share-code/sqm-share-code.js +1 -1
  117. package/dist/collection/components/sqm-share-link/sqm-share-link.js +1 -1
  118. package/dist/collection/components/sqm-share-link/useShareLink.js +11 -4
  119. package/dist/collection/components/sqm-stencilbook/sqm-stencilbook.js +12 -4
  120. package/dist/collection/components/views/copy-text-view.js +18 -3
  121. package/dist/collection/global/mixins.js +0 -1
  122. package/dist/collection/stories/Widget.stories.js +5 -0
  123. package/dist/esm/{GenericTableView-d59d8ab4.js → GenericTableView-6aa9fac9.js} +2 -2
  124. package/dist/esm/{ShadowViewAddon-170728a6.js → ShadowViewAddon-f91cd444.js} +198 -282
  125. package/dist/esm/copy-text-view-61eebf5d.js +225 -0
  126. package/dist/esm/{email-registration-view-a89a88bf.js → email-registration-view-6870d230.js} +2 -2
  127. package/dist/esm/{global-04c7d3b5.js → global-3611a2b7.js} +3 -3
  128. package/dist/esm/{index-17b4da69.js → index-60f16d0a.js} +15 -1
  129. package/dist/esm/{index.module-def4aec5.js → index.module-f3d96fbb.js} +41 -4
  130. package/dist/esm/loader.js +5 -5
  131. package/dist/esm/{luxon-7600be8d.js → luxon-9b1f9912.js} +1 -1
  132. package/dist/esm/mint-components.js +5 -5
  133. package/dist/esm/{mixins-f60a614c.js → mixins-83f90fa1.js} +0 -1
  134. package/dist/esm/{mockRewardData-0eb6e778.js → mockRewardData-8b3afd15.js} +1 -1
  135. package/dist/esm/raisins-plop-target.entry.js +1 -1
  136. package/dist/esm/{re-render-12fd274a.js → re-render-3b630de2.js} +5 -5
  137. package/dist/esm/{sqm-asset-card-view-9d93fbdd.js → sqm-asset-card-view-2157b61f.js} +1 -1
  138. package/dist/esm/sqm-asset-card.entry.js +4 -4
  139. package/dist/esm/sqm-banking-info-form_16.entry.js +67 -67
  140. package/dist/esm/sqm-base-registration-form-view-dd481f19.js +66 -0
  141. package/dist/esm/{sqm-big-stat_39.entry.js → sqm-big-stat_37.entry.js} +90 -150
  142. package/dist/esm/{sqm-close-button-view-dc65b4e3.js → sqm-close-button-view-0c0bfff8.js} +2 -2
  143. package/dist/esm/sqm-close-button.entry.js +5 -5
  144. package/dist/esm/sqm-context-router.entry.js +4 -4
  145. package/dist/esm/sqm-empty_4.entry.js +11 -7
  146. package/dist/esm/sqm-form-message.entry.js +2 -2
  147. package/dist/esm/sqm-google-sign-in.entry.js +41 -0
  148. package/dist/esm/sqm-graphql-client-provider.entry.js +7 -7
  149. package/dist/esm/sqm-header-logo.entry.js +2 -2
  150. package/dist/esm/sqm-instant-access-registration.entry.js +7 -7
  151. package/dist/esm/{sqm-invoice-table-view-6e13a323.js → sqm-invoice-table-view-b8240dc6.js} +2 -2
  152. package/dist/esm/{sqm-leaderboard-rank-view-10657658.js → sqm-leaderboard-rank-view-7cd0de83.js} +1 -1
  153. package/dist/esm/sqm-leaderboard-rank.entry.js +8 -8
  154. package/dist/esm/{sqm-logout-current-user-view-2c6122cd.js → sqm-logout-current-user-view-02e9f508.js} +1 -1
  155. package/dist/esm/sqm-logout-current-user.entry.js +7 -7
  156. package/dist/esm/sqm-name-fields-view-ec19e9e8.js +53 -0
  157. package/dist/esm/sqm-name-fields.entry.js +55 -0
  158. package/dist/esm/{sqm-navigation-sidebar-item-view-60ef06cc.js → sqm-navigation-sidebar-item-view-a4e4edb6.js} +4 -4
  159. package/dist/esm/sqm-navigation-sidebar-item.entry.js +7 -7
  160. package/dist/esm/{sqm-navigation-sidebar-view-0312e073.js → sqm-navigation-sidebar-view-ce55d74d.js} +1 -1
  161. package/dist/esm/sqm-navigation-sidebar.entry.js +6 -6
  162. package/dist/esm/sqm-pagination_3.entry.js +386 -0
  163. package/dist/esm/sqm-password-field.entry.js +6 -6
  164. package/dist/esm/sqm-popup-container.entry.js +6 -6
  165. package/dist/esm/{sqm-portal-container-view-6c582684.js → sqm-portal-container-view-c3be4b88.js} +1 -1
  166. package/dist/esm/{sqm-portal-email-verification-view-4307c992.js → sqm-portal-email-verification-view-d500dd01.js} +4 -4
  167. package/dist/esm/sqm-portal-email-verification.entry.js +12 -12
  168. package/dist/esm/{sqm-portal-forgot-password-view-c2ed8fed.js → sqm-portal-forgot-password-view-4f6c89a7.js} +3 -3
  169. package/dist/esm/sqm-portal-forgot-password.entry.js +9 -9
  170. package/dist/esm/sqm-portal-google-registration-form.entry.js +310 -0
  171. package/dist/esm/sqm-portal-logout.entry.js +4 -4
  172. package/dist/esm/{sqm-portal-profile-view-ffe955c8.js → sqm-portal-profile-view-2997f902.js} +3 -3
  173. package/dist/esm/sqm-portal-profile.entry.js +11 -11
  174. package/dist/esm/sqm-portal-protected-route.entry.js +7 -7
  175. package/dist/esm/sqm-portal-registration-form-view-30ced11c.js +85 -0
  176. package/dist/esm/sqm-portal-registration-form.entry.js +18 -217
  177. package/dist/esm/{sqm-portal-reset-password-view-79a85e02.js → sqm-portal-reset-password-view-e29f1842.js} +3 -3
  178. package/dist/esm/sqm-portal-reset-password.entry.js +12 -12
  179. package/dist/esm/{sqm-portal-verify-email-view-d7ea2c56.js → sqm-portal-verify-email-view-d5dcf5c5.js} +3 -3
  180. package/dist/esm/sqm-portal-verify-email.entry.js +12 -12
  181. package/dist/esm/sqm-referral-table_11.entry.js +15 -13
  182. package/dist/esm/sqm-referred-registration.entry.js +7 -7
  183. package/dist/esm/sqm-rewards-table-customer-note-cell.entry.js +3 -3
  184. package/dist/esm/sqm-rewards-table-customer-note-column.entry.js +4 -4
  185. package/dist/esm/sqm-rewards-table_9.entry.js +17 -17
  186. package/dist/esm/sqm-route.entry.js +1 -1
  187. package/dist/esm/sqm-stencilbook.entry.js +733 -406
  188. package/dist/esm/sqm-tab.entry.js +4 -4
  189. package/dist/esm/sqm-tabs.entry.js +6 -6
  190. package/dist/esm/{sqm-text-span-view-8d140661.js → sqm-text-span-view-d1b54710.js} +1 -1
  191. package/dist/esm/sqm-text-span.entry.js +3 -3
  192. package/dist/esm/{stencil-hooks.module-ac12ca1c.js → stencil-hooks.module-e20edc0b.js} +1 -1
  193. package/dist/esm/{useChildElements-32e1bda1.js → useChildElements-d1d3fedd.js} +3 -3
  194. package/dist/esm/{useInstantAccessRegistration-46b89952.js → useInstantAccessRegistration-c5d80a2e.js} +4 -4
  195. package/dist/esm/usePortalRegistrationForm-a00ba140.js +212 -0
  196. package/dist/esm/{useReferralTable-f4de0650.js → useReferralTable-fbcfc2a7.js} +11 -11
  197. package/dist/esm/{useRegistrationFormState-9fc1ac80.js → useRegistrationFormState-33f9cb24.js} +3 -3
  198. package/dist/esm/{utilities-3f5bba22.js → utilities-33996ce7.js} +2 -2
  199. package/dist/esm-es5/{GenericTableView-d59d8ab4.js → GenericTableView-6aa9fac9.js} +1 -1
  200. package/dist/esm-es5/ShadowViewAddon-f91cd444.js +1 -0
  201. package/dist/esm-es5/copy-text-view-61eebf5d.js +1 -0
  202. package/dist/esm-es5/{email-registration-view-a89a88bf.js → email-registration-view-6870d230.js} +1 -1
  203. package/dist/esm-es5/{global-04c7d3b5.js → global-3611a2b7.js} +2 -2
  204. package/dist/esm-es5/{index-17b4da69.js → index-60f16d0a.js} +1 -1
  205. package/dist/esm-es5/index.module-f3d96fbb.js +1 -0
  206. package/dist/esm-es5/loader.js +1 -1
  207. package/dist/esm-es5/{luxon-7600be8d.js → luxon-9b1f9912.js} +1 -1
  208. package/dist/esm-es5/mint-components.js +1 -1
  209. package/dist/esm-es5/{mixins-f60a614c.js → mixins-83f90fa1.js} +1 -1
  210. package/dist/esm-es5/{mockRewardData-0eb6e778.js → mockRewardData-8b3afd15.js} +1 -1
  211. package/dist/esm-es5/raisins-plop-target.entry.js +1 -1
  212. package/dist/esm-es5/{re-render-12fd274a.js → re-render-3b630de2.js} +1 -1
  213. package/dist/esm-es5/{sqm-asset-card-view-9d93fbdd.js → sqm-asset-card-view-2157b61f.js} +1 -1
  214. package/dist/esm-es5/sqm-asset-card.entry.js +1 -1
  215. package/dist/esm-es5/sqm-banking-info-form_16.entry.js +1 -1
  216. package/dist/esm-es5/sqm-base-registration-form-view-dd481f19.js +1 -0
  217. package/dist/esm-es5/sqm-big-stat_37.entry.js +1 -0
  218. package/dist/esm-es5/{sqm-close-button-view-dc65b4e3.js → sqm-close-button-view-0c0bfff8.js} +1 -1
  219. package/dist/esm-es5/sqm-close-button.entry.js +1 -1
  220. package/dist/esm-es5/sqm-context-router.entry.js +1 -1
  221. package/dist/esm-es5/sqm-empty_4.entry.js +1 -1
  222. package/dist/esm-es5/sqm-form-message.entry.js +1 -1
  223. package/dist/esm-es5/sqm-google-sign-in.entry.js +1 -0
  224. package/dist/esm-es5/sqm-graphql-client-provider.entry.js +1 -1
  225. package/dist/esm-es5/sqm-header-logo.entry.js +1 -1
  226. package/dist/esm-es5/sqm-instant-access-registration.entry.js +1 -1
  227. package/dist/esm-es5/{sqm-invoice-table-view-6e13a323.js → sqm-invoice-table-view-b8240dc6.js} +1 -1
  228. package/dist/esm-es5/sqm-leaderboard-rank-view-7cd0de83.js +1 -0
  229. package/dist/esm-es5/sqm-leaderboard-rank.entry.js +1 -1
  230. package/dist/esm-es5/{sqm-logout-current-user-view-2c6122cd.js → sqm-logout-current-user-view-02e9f508.js} +1 -1
  231. package/dist/esm-es5/sqm-logout-current-user.entry.js +1 -1
  232. package/dist/esm-es5/sqm-name-fields-view-ec19e9e8.js +1 -0
  233. package/dist/esm-es5/sqm-name-fields.entry.js +1 -0
  234. package/dist/esm-es5/sqm-navigation-sidebar-item-view-a4e4edb6.js +1 -0
  235. package/dist/esm-es5/sqm-navigation-sidebar-item.entry.js +1 -1
  236. package/dist/esm-es5/{sqm-navigation-sidebar-view-0312e073.js → sqm-navigation-sidebar-view-ce55d74d.js} +1 -1
  237. package/dist/esm-es5/sqm-navigation-sidebar.entry.js +1 -1
  238. package/dist/esm-es5/sqm-pagination_3.entry.js +1 -0
  239. package/dist/esm-es5/sqm-password-field.entry.js +1 -1
  240. package/dist/esm-es5/sqm-popup-container.entry.js +1 -1
  241. package/dist/esm-es5/{sqm-portal-container-view-6c582684.js → sqm-portal-container-view-c3be4b88.js} +1 -1
  242. package/dist/esm-es5/{sqm-portal-email-verification-view-4307c992.js → sqm-portal-email-verification-view-d500dd01.js} +1 -1
  243. package/dist/esm-es5/sqm-portal-email-verification.entry.js +1 -1
  244. package/dist/esm-es5/{sqm-portal-forgot-password-view-c2ed8fed.js → sqm-portal-forgot-password-view-4f6c89a7.js} +1 -1
  245. package/dist/esm-es5/sqm-portal-forgot-password.entry.js +1 -1
  246. package/dist/esm-es5/sqm-portal-google-registration-form.entry.js +1 -0
  247. package/dist/esm-es5/sqm-portal-logout.entry.js +1 -1
  248. package/dist/esm-es5/{sqm-portal-profile-view-ffe955c8.js → sqm-portal-profile-view-2997f902.js} +1 -1
  249. package/dist/esm-es5/sqm-portal-profile.entry.js +1 -1
  250. package/dist/esm-es5/sqm-portal-protected-route.entry.js +1 -1
  251. package/dist/esm-es5/sqm-portal-registration-form-view-30ced11c.js +1 -0
  252. package/dist/esm-es5/sqm-portal-registration-form.entry.js +1 -1
  253. package/dist/esm-es5/{sqm-portal-reset-password-view-79a85e02.js → sqm-portal-reset-password-view-e29f1842.js} +1 -1
  254. package/dist/esm-es5/sqm-portal-reset-password.entry.js +1 -1
  255. package/dist/esm-es5/{sqm-portal-verify-email-view-d7ea2c56.js → sqm-portal-verify-email-view-d5dcf5c5.js} +1 -1
  256. package/dist/esm-es5/sqm-portal-verify-email.entry.js +1 -1
  257. package/dist/esm-es5/sqm-referral-table_11.entry.js +1 -1
  258. package/dist/esm-es5/sqm-referred-registration.entry.js +1 -1
  259. package/dist/esm-es5/sqm-rewards-table-customer-note-cell.entry.js +1 -1
  260. package/dist/esm-es5/sqm-rewards-table-customer-note-column.entry.js +1 -1
  261. package/dist/esm-es5/sqm-rewards-table_9.entry.js +1 -1
  262. package/dist/esm-es5/sqm-route.entry.js +1 -1
  263. package/dist/esm-es5/sqm-stencilbook.entry.js +1 -1
  264. package/dist/esm-es5/sqm-tab.entry.js +1 -1
  265. package/dist/esm-es5/sqm-tabs.entry.js +1 -1
  266. package/dist/esm-es5/{sqm-text-span-view-8d140661.js → sqm-text-span-view-d1b54710.js} +1 -1
  267. package/dist/esm-es5/sqm-text-span.entry.js +1 -1
  268. package/dist/esm-es5/{stencil-hooks.module-ac12ca1c.js → stencil-hooks.module-e20edc0b.js} +1 -1
  269. package/dist/esm-es5/useChildElements-d1d3fedd.js +1 -0
  270. package/dist/esm-es5/useInstantAccessRegistration-c5d80a2e.js +1 -0
  271. package/dist/esm-es5/usePortalRegistrationForm-a00ba140.js +1 -0
  272. package/dist/esm-es5/{useReferralTable-f4de0650.js → useReferralTable-fbcfc2a7.js} +1 -1
  273. package/dist/esm-es5/useRegistrationFormState-33f9cb24.js +1 -0
  274. package/dist/esm-es5/{utilities-3f5bba22.js → utilities-33996ce7.js} +1 -1
  275. package/dist/mint-components/mint-components.esm.js +1 -1
  276. package/dist/mint-components/mint-components.js +1 -1
  277. package/dist/mint-components/{p-56f14840.entry.js → p-070fa30d.entry.js} +1 -1
  278. package/dist/mint-components/p-0725d1a7.system.entry.js +1 -0
  279. package/dist/mint-components/{p-1c857edb.entry.js → p-0954e95d.entry.js} +2 -2
  280. package/dist/mint-components/p-0a20844c.js +13 -0
  281. package/dist/mint-components/{p-6afb4f48.system.entry.js → p-0aa76ad0.system.entry.js} +1 -1
  282. package/dist/mint-components/{p-c5d2e4ba.js → p-0b6200b3.js} +1 -1
  283. package/dist/mint-components/p-0c4c5874.js +1 -0
  284. package/dist/mint-components/{p-cf690d55.system.entry.js → p-0e89ac7f.system.entry.js} +1 -1
  285. package/dist/mint-components/{p-8679ed9f.system.entry.js → p-0fd20804.system.entry.js} +1 -1
  286. package/dist/mint-components/p-0fe8fbe1.system.entry.js +1 -0
  287. package/dist/mint-components/{p-251e7567.js → p-12d27b9b.js} +1 -1
  288. package/dist/mint-components/p-13fe7290.js +1 -0
  289. package/dist/mint-components/{p-7731f793.system.entry.js → p-14dc52dc.system.entry.js} +1 -1
  290. package/dist/mint-components/{p-c84659a3.system.js → p-15b2063c.system.js} +1 -1
  291. package/dist/mint-components/{p-021a735d.entry.js → p-1739dfb8.entry.js} +1 -1
  292. package/dist/mint-components/{p-6b5e355c.system.js → p-1ab3f305.system.js} +1 -1
  293. package/dist/mint-components/{p-a9050eb0.entry.js → p-1d58a8ff.entry.js} +1 -1
  294. package/dist/mint-components/{p-4d233cd4.js → p-22110634.js} +1 -1
  295. package/dist/mint-components/{p-e546347e.system.js → p-222fa722.system.js} +1 -1
  296. package/dist/mint-components/p-2295cf05.system.js +1 -0
  297. package/dist/mint-components/p-24d441bf.system.js +1 -0
  298. package/dist/mint-components/{p-5f1c4160.system.entry.js → p-273ad080.system.entry.js} +1 -1
  299. package/dist/mint-components/p-27ba7f25.system.entry.js +1 -0
  300. package/dist/mint-components/p-27f281f4.system.js +1 -0
  301. package/dist/mint-components/{p-509e29e6.js → p-2dff4fb2.js} +1 -1
  302. package/dist/mint-components/{p-01cfff8a.system.entry.js → p-38b8050c.system.entry.js} +1 -1
  303. package/dist/mint-components/p-38bd81d1.system.js +1 -0
  304. package/dist/mint-components/{p-370a1a73.system.js → p-3ae32130.system.js} +1 -1
  305. package/dist/mint-components/{p-88aac6a9.system.entry.js → p-3b923175.system.entry.js} +1 -1
  306. package/dist/mint-components/{p-4edde470.entry.js → p-3c00282b.entry.js} +1 -1
  307. package/dist/mint-components/p-3c04f8d1.system.js +1 -0
  308. package/dist/mint-components/p-3d4978ca.system.entry.js +1 -0
  309. package/dist/mint-components/{p-4ea58025.system.entry.js → p-3dbcd42a.system.entry.js} +1 -1
  310. package/dist/mint-components/{p-3223ba7b.entry.js → p-3dc9a448.entry.js} +1 -1
  311. package/dist/mint-components/{p-b6fc1227.system.entry.js → p-44c4a54f.system.entry.js} +1 -1
  312. package/dist/mint-components/p-455a3f54.system.entry.js +1 -0
  313. package/dist/mint-components/p-478e8baa.system.js +1 -0
  314. package/dist/mint-components/p-4b55e96b.entry.js +223 -0
  315. package/dist/mint-components/p-4b9cdf01.system.entry.js +1 -0
  316. package/dist/mint-components/p-500a2bff.entry.js +13 -0
  317. package/dist/mint-components/{p-3ed71bef.system.js → p-5057380a.system.js} +1 -1
  318. package/dist/mint-components/{p-e3e16c36.js → p-5309ebf3.js} +1 -1
  319. package/dist/mint-components/p-53238aee.js +1 -0
  320. package/dist/mint-components/{p-2a414b2e.system.js → p-58bcece7.system.js} +1 -1
  321. package/dist/mint-components/p-59cf8677.entry.js +1 -0
  322. package/dist/mint-components/{p-44787d6e.system.js → p-5b6cf6cd.system.js} +1 -1
  323. package/dist/mint-components/{p-bb00db59.js → p-5c714029.js} +1 -1
  324. package/dist/mint-components/p-5e61bdfd.entry.js +1 -0
  325. package/dist/mint-components/{p-ec41d6a4.entry.js → p-5fb1bcb5.entry.js} +6 -6
  326. package/dist/mint-components/p-6465b781.js +1 -0
  327. package/dist/mint-components/p-6673a331.system.js +1 -0
  328. package/dist/mint-components/{p-2ee2ebba.js → p-682450a8.js} +2 -2
  329. package/dist/mint-components/{p-41a11a7f.js → p-683cfd07.js} +1 -1
  330. package/dist/mint-components/{p-7d5e0645.system.js → p-697d6e54.system.js} +1 -1
  331. package/dist/mint-components/p-6a218ad6.js +1 -0
  332. package/dist/mint-components/p-6a95e6b7.js +52 -0
  333. package/dist/mint-components/{p-6cef104b.entry.js → p-6ac9d2cf.entry.js} +1 -1
  334. package/dist/mint-components/p-7027b14d.js +1 -0
  335. package/dist/mint-components/{p-be4b748a.system.entry.js → p-70eafbbd.system.entry.js} +1 -1
  336. package/dist/mint-components/{p-35d84041.system.entry.js → p-7141d536.system.entry.js} +1 -1
  337. package/dist/mint-components/{p-ce621bcc.js → p-71d6b762.js} +1 -1
  338. package/dist/mint-components/p-74d5d3d1.entry.js +1 -0
  339. package/dist/mint-components/{p-fbdf0738.entry.js → p-75956e50.entry.js} +1 -1
  340. package/dist/mint-components/{p-f0806232.system.entry.js → p-7bc9308c.system.entry.js} +1 -1
  341. package/dist/mint-components/p-7c78da35.system.entry.js +1 -0
  342. package/dist/mint-components/{p-a1dba9a1.system.entry.js → p-7d2d59ec.system.entry.js} +1 -1
  343. package/dist/mint-components/{p-e8dde8f4.system.js → p-7e3ada1b.system.js} +1 -1
  344. package/dist/mint-components/p-7ef0cb0a.system.js +1 -0
  345. package/dist/mint-components/p-7facf5cd.system.entry.js +1 -0
  346. package/dist/mint-components/p-823f61da.entry.js +1 -0
  347. package/dist/mint-components/p-8329e1fa.system.js +1 -0
  348. package/dist/mint-components/p-8525931d.system.entry.js +1 -0
  349. package/dist/mint-components/{p-ce5afa40.entry.js → p-863340dc.entry.js} +1 -1
  350. package/dist/mint-components/{p-178d2d2e.entry.js → p-8799b28f.entry.js} +1 -1
  351. package/dist/mint-components/p-88104392.system.entry.js +1 -0
  352. package/dist/mint-components/{p-79da7f18.js → p-88197cfd.js} +1 -1
  353. package/dist/mint-components/p-8a0a87e7.system.entry.js +1 -0
  354. package/dist/mint-components/{p-c1a47137.system.entry.js → p-8f705bea.system.entry.js} +1 -1
  355. package/dist/mint-components/p-8fb2af73.system.js +1 -0
  356. package/dist/mint-components/{p-02be1a88.js → p-91521e9d.js} +1 -1
  357. package/dist/mint-components/p-920b48ad.system.entry.js +1 -0
  358. package/dist/mint-components/p-93124bdb.entry.js +1 -0
  359. package/dist/mint-components/p-944918d9.entry.js +1 -0
  360. package/dist/mint-components/p-966eed0f.system.js +1 -0
  361. package/dist/mint-components/{p-c8610d0c.js → p-9716a83b.js} +1 -1
  362. package/dist/mint-components/{p-ff17b3a4.system.js → p-989fdd2e.system.js} +1 -1
  363. package/dist/mint-components/p-9c7a031a.js +1 -0
  364. package/dist/mint-components/{p-f3053c61.js → p-9d078f60.js} +1 -1
  365. package/dist/mint-components/{p-1dd69917.system.entry.js → p-9d954277.system.entry.js} +1 -1
  366. package/dist/mint-components/{p-3036cf58.system.js → p-9e4e3d5f.system.js} +1 -1
  367. package/dist/mint-components/{p-c7fd9e16.js → p-9fff2218.js} +1 -1
  368. package/dist/mint-components/p-a1cb66c0.system.js +1 -0
  369. package/dist/mint-components/p-a2a3d9dc.entry.js +1 -0
  370. package/dist/mint-components/{p-ed095674.system.js → p-a631db44.system.js} +1 -1
  371. package/dist/mint-components/{p-59fe4ad1.system.js → p-a67e8ef4.system.js} +1 -1
  372. package/dist/mint-components/p-a8bf33fc.js +1 -0
  373. package/dist/mint-components/p-a9166b6a.entry.js +1 -0
  374. package/dist/mint-components/{p-fb93c962.js → p-aa5446c1.js} +1 -1
  375. package/dist/mint-components/{p-4502ed11.system.entry.js → p-adc14a77.system.entry.js} +1 -1
  376. package/dist/mint-components/{p-2dd67762.entry.js → p-aeea67a3.entry.js} +1 -1
  377. package/dist/mint-components/{p-a7c2ced2.system.entry.js → p-b043693d.system.entry.js} +1 -1
  378. package/dist/mint-components/{p-5d0c9424.js → p-b11f43ee.js} +1 -1
  379. package/dist/mint-components/{p-1b9e6fc6.js → p-b33381a7.js} +1 -1
  380. package/dist/mint-components/{p-639d3dd3.entry.js → p-b3499953.entry.js} +1 -1
  381. package/dist/mint-components/{p-eaada4da.js → p-b402df18.js} +1 -1
  382. package/dist/mint-components/{p-fd2c5407.js → p-b619a5e0.js} +1 -1
  383. package/dist/mint-components/p-b667d890.system.entry.js +1 -0
  384. package/dist/mint-components/p-b6a4ce83.entry.js +1 -0
  385. package/dist/mint-components/p-b6f41077.entry.js +1 -0
  386. package/dist/mint-components/p-b7bd7ff0.js +1 -0
  387. package/dist/mint-components/p-b7edef12.system.entry.js +1 -0
  388. package/dist/mint-components/p-b959acfb.entry.js +9 -0
  389. package/dist/mint-components/{p-9c310991.system.entry.js → p-bc305236.system.entry.js} +1 -1
  390. package/dist/mint-components/{p-7f088154.entry.js → p-bd5706ba.entry.js} +1 -1
  391. package/dist/mint-components/p-bebe70b4.js +391 -0
  392. package/dist/mint-components/p-c037a0f3.entry.js +1 -0
  393. package/dist/mint-components/{p-c5577dd7.system.js → p-c1ede4f5.system.js} +1 -1
  394. package/dist/mint-components/{p-fb20eb5e.system.entry.js → p-c2bc302f.system.entry.js} +1 -1
  395. package/dist/mint-components/{p-92110eef.entry.js → p-c33ccfb7.entry.js} +1 -1
  396. package/dist/mint-components/p-c4c922fc.system.entry.js +1 -0
  397. package/dist/mint-components/p-c56b47e5.system.js +1 -0
  398. package/dist/mint-components/p-c5dd12cf.entry.js +1 -0
  399. package/dist/mint-components/{p-f6934a55.system.js → p-cd1d497f.system.js} +1 -1
  400. package/dist/mint-components/p-cd39acd0.system.entry.js +1 -0
  401. package/dist/mint-components/p-d23d5113.js +1 -0
  402. package/dist/mint-components/{p-8704937c.js → p-d47569d0.js} +1 -1
  403. package/dist/mint-components/{p-ce9e7c98.system.js → p-d477a07b.system.js} +1 -1
  404. package/dist/mint-components/p-d4c0d53f.js +1 -0
  405. package/dist/mint-components/{p-b4c52c5a.entry.js → p-d59c19ba.entry.js} +2 -2
  406. package/dist/mint-components/{p-137ea86e.entry.js → p-d9dd65fd.entry.js} +1 -1
  407. package/dist/mint-components/{p-aad11a68.entry.js → p-dacefee2.entry.js} +1 -1
  408. package/dist/mint-components/{p-4f775e84.system.js → p-e0c608e4.system.js} +1 -1
  409. package/dist/mint-components/p-e10be944.entry.js +1 -0
  410. package/dist/mint-components/{p-ac1bf045.js → p-e56447fd.js} +1 -1
  411. package/dist/mint-components/{p-e3735866.entry.js → p-e605fe66.entry.js} +2 -2
  412. package/dist/mint-components/p-e64c49dd.system.js +1 -0
  413. package/dist/mint-components/{p-86990110.entry.js → p-e864a155.entry.js} +1 -1
  414. package/dist/mint-components/p-eac81420.entry.js +1 -0
  415. package/dist/mint-components/{p-88a2e66e.system.entry.js → p-ec379cf4.system.entry.js} +1 -1
  416. package/dist/mint-components/p-ec867cad.system.entry.js +1 -0
  417. package/dist/mint-components/p-ec9c8ced.system.js +1 -0
  418. package/dist/mint-components/{p-0d8c53ac.system.js → p-ef7b966e.system.js} +1 -1
  419. package/dist/mint-components/p-f3d3abd0.system.js +1 -0
  420. package/dist/mint-components/{p-5cac90e8.system.entry.js → p-f7175fc2.system.entry.js} +1 -1
  421. package/dist/mint-components/p-f81cc2cd.entry.js +1 -0
  422. package/dist/mint-components/{p-5b333fa8.system.entry.js → p-f8450975.system.entry.js} +1 -1
  423. package/dist/mint-components/p-f8b41805.system.js +1 -0
  424. package/dist/mint-components/p-fde23de1.entry.js +13 -0
  425. package/dist/mint-components/{p-4e48267b.system.js → p-ff19bf56.system.js} +1 -1
  426. package/dist/types/components/sqm-base-registration/BaseRegistrationForm.stories.d.ts +6 -0
  427. package/dist/types/components/sqm-base-registration/sqm-base-registration-form-view.d.ts +19 -0
  428. package/dist/types/components/sqm-checkbox-field/sqm-checkbox-field-view.d.ts +1 -1
  429. package/dist/types/components/sqm-checkbox-field/sqm-checkbox-field.d.ts +4 -4
  430. package/dist/types/components/sqm-empty/sqm-empty.d.ts +1 -1
  431. package/dist/types/components/sqm-google-sign-in/sqm-google-sign-in.d.ts +12 -0
  432. package/dist/types/components/{sqm-marketing-emails-checkbox/MarketingEmailsCheckbox.stories.d.ts → sqm-pagination/Pagination.stories.d.ts} +0 -3
  433. package/dist/types/components/sqm-pagination/sqm-pagination-view.d.ts +15 -0
  434. package/dist/types/components/sqm-pagination/sqm-pagination.d.ts +22 -0
  435. package/dist/types/components/sqm-pagination/usePagination.d.ts +16 -0
  436. package/dist/types/components/sqm-portal-container/sqm-portal-container.d.ts +0 -1
  437. package/dist/types/components/sqm-portal-google-registration-form/PortalGoogleRegistrationForm.stories.d.ts +8 -0
  438. package/dist/types/components/sqm-portal-google-registration-form/small-views/RegistrationFieldsView.d.ts +31 -0
  439. package/dist/types/components/sqm-portal-google-registration-form/sqm-portal-google-registration-form.d.ts +155 -0
  440. package/dist/types/components/sqm-portal-google-registration-form/usePortalGoogleRegistrationForm.d.ts +14 -0
  441. package/dist/types/components/sqm-portal-login/PortalLogin.stories.d.ts +1 -0
  442. package/dist/types/components/sqm-portal-login/sqm-portal-login-view.d.ts +2 -0
  443. package/dist/types/components/sqm-portal-login/sqm-portal-login.d.ts +8 -0
  444. package/dist/types/components/sqm-portal-registration-form/PortalRegistrationForm.stories.d.ts +0 -1
  445. package/dist/types/components/sqm-portal-registration-form/sqm-portal-registration-form-view.d.ts +2 -1
  446. package/dist/types/components/sqm-portal-registration-form/sqm-portal-registration-form.d.ts +7 -1
  447. package/dist/types/components/sqm-portal-registration-form/usePortalRegistrationForm.d.ts +1 -0
  448. package/dist/types/components/sqm-referral-card/ReferralCard.stories.d.ts +1 -0
  449. package/dist/types/components/sqm-referral-code/ReferralCode.stories.d.ts +18 -0
  450. package/dist/types/components/sqm-referral-code/sqm-referral-code.d.ts +70 -0
  451. package/dist/types/components/sqm-referral-code/useReferralCode.d.ts +3 -0
  452. package/dist/types/components/sqm-referral-codes/ReferralCodes.stories.d.ts +12 -0
  453. package/dist/types/components/sqm-referral-codes/sqm-referral-codes-view.d.ts +16 -0
  454. package/dist/types/components/sqm-referral-codes/sqm-referral-codes.d.ts +39 -0
  455. package/dist/types/components/sqm-referral-codes/useReferralCodes.d.ts +52 -0
  456. package/dist/types/components/sqm-share-link/useShareLink.d.ts +1 -0
  457. package/dist/types/components/views/copy-text-view.d.ts +3 -0
  458. package/dist/types/components.d.ts +543 -48
  459. package/dist/types/global/android.d.ts +7 -0
  460. package/dist/types/global/demo.d.ts +2 -0
  461. package/dist/types/global/mixins.d.ts +0 -2
  462. package/dist/types/stories/Widget.stories.d.ts +6 -0
  463. package/dist/types/stories/features.d.ts +4 -0
  464. package/dist/types/stories/templates.d.ts +4 -0
  465. package/docs/docs.docx +0 -0
  466. package/docs/raisins.json +1 -1
  467. package/grapesjs/grapesjs.js +1 -1
  468. package/package.json +1 -1
  469. package/dist/collection/components/sqm-marketing-emails-checkbox/MarketingEmailsCheckbox.stories.js +0 -11
  470. package/dist/collection/components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.js +0 -130
  471. package/dist/esm/sqm-portal-registration-form-view-1d3066e1.js +0 -83
  472. package/dist/esm-es5/ShadowViewAddon-170728a6.js +0 -1
  473. package/dist/esm-es5/index.module-def4aec5.js +0 -1
  474. package/dist/esm-es5/sqm-big-stat_39.entry.js +0 -1
  475. package/dist/esm-es5/sqm-leaderboard-rank-view-10657658.js +0 -1
  476. package/dist/esm-es5/sqm-navigation-sidebar-item-view-60ef06cc.js +0 -1
  477. package/dist/esm-es5/sqm-portal-registration-form-view-1d3066e1.js +0 -1
  478. package/dist/esm-es5/useChildElements-32e1bda1.js +0 -1
  479. package/dist/esm-es5/useInstantAccessRegistration-46b89952.js +0 -1
  480. package/dist/esm-es5/useRegistrationFormState-9fc1ac80.js +0 -1
  481. package/dist/mint-components/p-02424350.system.js +0 -1
  482. package/dist/mint-components/p-03494732.entry.js +0 -1
  483. package/dist/mint-components/p-04e666dc.js +0 -391
  484. package/dist/mint-components/p-07f675ab.system.entry.js +0 -1
  485. package/dist/mint-components/p-0a898ab1.js +0 -1
  486. package/dist/mint-components/p-0b9fa97f.js +0 -1
  487. package/dist/mint-components/p-10e89d0a.entry.js +0 -1
  488. package/dist/mint-components/p-1ce3afa6.entry.js +0 -223
  489. package/dist/mint-components/p-32d1d162.entry.js +0 -1
  490. package/dist/mint-components/p-3d4656bb.system.js +0 -1
  491. package/dist/mint-components/p-3ec16698.entry.js +0 -13
  492. package/dist/mint-components/p-40b1de58.js +0 -1
  493. package/dist/mint-components/p-4112e198.system.js +0 -1
  494. package/dist/mint-components/p-4df8f1d2.system.js +0 -1
  495. package/dist/mint-components/p-51f517a2.js +0 -1
  496. package/dist/mint-components/p-58ef25d3.system.entry.js +0 -1
  497. package/dist/mint-components/p-5b761128.system.entry.js +0 -1
  498. package/dist/mint-components/p-5be235f9.entry.js +0 -1
  499. package/dist/mint-components/p-61eab172.js +0 -1
  500. package/dist/mint-components/p-62221541.system.js +0 -1
  501. package/dist/mint-components/p-64c3217a.js +0 -1
  502. package/dist/mint-components/p-674a64fe.system.js +0 -1
  503. package/dist/mint-components/p-7049e9b0.entry.js +0 -1
  504. package/dist/mint-components/p-711ba77e.system.entry.js +0 -1
  505. package/dist/mint-components/p-770368bc.system.js +0 -1
  506. package/dist/mint-components/p-79191f88.entry.js +0 -1
  507. package/dist/mint-components/p-7c6c96e2.system.entry.js +0 -1
  508. package/dist/mint-components/p-8b5b78ca.entry.js +0 -1
  509. package/dist/mint-components/p-8b617d7e.entry.js +0 -9
  510. package/dist/mint-components/p-8baf6566.system.entry.js +0 -1
  511. package/dist/mint-components/p-8e907ac7.system.entry.js +0 -1
  512. package/dist/mint-components/p-91669312.entry.js +0 -1
  513. package/dist/mint-components/p-9dcfa187.system.js +0 -1
  514. package/dist/mint-components/p-9f0629ba.system.entry.js +0 -1
  515. package/dist/mint-components/p-a51533cb.system.js +0 -1
  516. package/dist/mint-components/p-a6a7dcaa.js +0 -1
  517. package/dist/mint-components/p-a8f7cb95.js +0 -1
  518. package/dist/mint-components/p-af062c8f.system.entry.js +0 -1
  519. package/dist/mint-components/p-afd366ae.system.entry.js +0 -1
  520. package/dist/mint-components/p-b370fca8.system.js +0 -1
  521. package/dist/mint-components/p-b3b5b4b7.system.entry.js +0 -1
  522. package/dist/mint-components/p-b5861974.system.entry.js +0 -1
  523. package/dist/mint-components/p-c8878e79.entry.js +0 -1
  524. package/dist/mint-components/p-d49e2f7a.js +0 -1
  525. package/dist/mint-components/p-d8d2de11.entry.js +0 -1
  526. package/dist/mint-components/p-dd0d79bf.entry.js +0 -1
  527. package/dist/mint-components/p-dd7ee007.system.js +0 -1
  528. package/dist/mint-components/p-eba44835.system.entry.js +0 -1
  529. package/dist/mint-components/p-ed17e637.system.js +0 -1
  530. package/dist/mint-components/p-ed6ebd60.system.js +0 -1
  531. package/dist/mint-components/p-f3dd15c5.entry.js +0 -13
  532. package/dist/types/components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.d.ts +0 -28
@@ -2,36 +2,39 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-b0129cd6.js');
6
- const stencilHooks_module = require('./stencil-hooks.module-72742a0b.js');
7
- require('./global-02e50f09.js');
8
- const index_module = require('./index.module-df530553.js');
5
+ const index = require('./index-3cf5ef3d.js');
6
+ const stencilHooks_module = require('./stencil-hooks.module-ece1ee46.js');
7
+ require('./global-d9abaf4d.js');
8
+ const index_module = require('./index.module-ccf9bd9c.js');
9
9
  require('./cjs-1066ec21.js');
10
- require('./mixins-fe9d4112.js');
11
- const JSS = require('./JSS-8503a151.js');
12
- const GenericTableView = require('./GenericTableView-80d7642e.js');
13
- require('./useChildElements-e0d44916.js');
14
- const luxon = require('./luxon-05098e19.js');
15
10
  require('./utils-6847bc06.js');
16
- require('./sqm-text-span-view-e1cd9bd3.js');
17
- const sqmAssetCardView = require('./sqm-asset-card-view-a0e33f21.js');
18
- const sqmCloseButtonView = require('./sqm-close-button-view-fd6e8f60.js');
11
+ const JSS = require('./JSS-8503a151.js');
12
+ const copyTextView = require('./copy-text-view-43e8349f.js');
13
+ require('./mixins-f7e0377a.js');
14
+ const GenericTableView = require('./GenericTableView-7ef786c3.js');
15
+ require('./useChildElements-438cf387.js');
16
+ const luxon = require('./luxon-14ae1f8a.js');
17
+ require('./sqm-text-span-view-a22f50aa.js');
18
+ const sqmAssetCardView = require('./sqm-asset-card-view-a3abee0b.js');
19
+ const sqmCloseButtonView = require('./sqm-close-button-view-0cdada3a.js');
19
20
  require('./index-8c6255f5.js');
20
- const emailRegistrationView = require('./email-registration-view-248652bb.js');
21
- const sqmLeaderboardRankView = require('./sqm-leaderboard-rank-view-5a3d4a88.js');
22
- const sqmLogoutCurrentUserView = require('./sqm-logout-current-user-view-c9f18d96.js');
23
- const sqmNavigationSidebarView = require('./sqm-navigation-sidebar-view-921704fb.js');
24
- const sqmNavigationSidebarItemView = require('./sqm-navigation-sidebar-item-view-a125ec5f.js');
25
- const sqmPortalEmailVerificationView = require('./sqm-portal-email-verification-view-292b5bf4.js');
26
- const sqmPortalForgotPasswordView = require('./sqm-portal-forgot-password-view-969c49ed.js');
27
- const sqmPortalProfileView = require('./sqm-portal-profile-view-fde54e35.js');
28
- require('./utilities-cec9dd36.js');
29
- const sqmPortalRegistrationFormView = require('./sqm-portal-registration-form-view-621348a6.js');
30
- const sqmPortalResetPasswordView = require('./sqm-portal-reset-password-view-96f329ed.js');
31
- const sqmPortalVerifyEmailView = require('./sqm-portal-verify-email-view-7ffcc0d4.js');
32
- const ShadowViewAddon = require('./ShadowViewAddon-fa205e28.js');
33
- const sqmPortalContainerView = require('./sqm-portal-container-view-990a85a3.js');
34
- const sqmInvoiceTableView = require('./sqm-invoice-table-view-e3b03a00.js');
21
+ const emailRegistrationView = require('./email-registration-view-4eeee3e4.js');
22
+ const sqmLeaderboardRankView = require('./sqm-leaderboard-rank-view-133f8d95.js');
23
+ const sqmLogoutCurrentUserView = require('./sqm-logout-current-user-view-64ca6abe.js');
24
+ const sqmNavigationSidebarView = require('./sqm-navigation-sidebar-view-37209a17.js');
25
+ const sqmNavigationSidebarItemView = require('./sqm-navigation-sidebar-item-view-38519acf.js');
26
+ const sqmPortalEmailVerificationView = require('./sqm-portal-email-verification-view-6e1e80e7.js');
27
+ const sqmPortalForgotPasswordView = require('./sqm-portal-forgot-password-view-97903679.js');
28
+ const sqmBaseRegistrationFormView = require('./sqm-base-registration-form-view-e4a74dee.js');
29
+ const sqmPortalRegistrationFormView = require('./sqm-portal-registration-form-view-5f277c9d.js');
30
+ const sqmPortalProfileView = require('./sqm-portal-profile-view-f4489585.js');
31
+ require('./utilities-27e9535b.js');
32
+ const sqmPortalResetPasswordView = require('./sqm-portal-reset-password-view-0ed5419e.js');
33
+ const sqmPortalVerifyEmailView = require('./sqm-portal-verify-email-view-cd2c3086.js');
34
+ const ShadowViewAddon = require('./ShadowViewAddon-fae7ab2c.js');
35
+ const sqmPortalContainerView = require('./sqm-portal-container-view-9a36f5ed.js');
36
+ const sqmNameFieldsView = require('./sqm-name-fields-view-57c734bf.js');
37
+ const sqmInvoiceTableView = require('./sqm-invoice-table-view-a13d1c7f.js');
35
38
 
36
39
  /**
37
40
  * lodash (Custom Build) <https://lodash.com/>
@@ -1629,6 +1632,19 @@ const EmptyState = /*#__PURE__*/Object.freeze({
1629
1632
  SlottedIntoComponent: SlottedIntoComponent
1630
1633
  });
1631
1634
 
1635
+ const Pagination_stories = {
1636
+ title: "Components/Link Button",
1637
+ };
1638
+ const Default = () => {
1639
+ return index.h("sqm-pagination", null);
1640
+ };
1641
+
1642
+ const Pagination = /*#__PURE__*/Object.freeze({
1643
+ __proto__: null,
1644
+ 'default': Pagination_stories,
1645
+ Default: Default
1646
+ });
1647
+
1632
1648
  const scenario$2 = "@author:johan\n@owner:johan\nFeature: Share Link\n\n The share link component is a box that allows users to see and copy their share link for a given program\n\n Background: Environment\n Given there is a valid program ID in the environment\n And there is a valid user ID and account ID in the environment\n\n @motivating\n Scenario: A Users sharelink can be copied to their clipboard\n Given tooltipText is \"hello tooltip\"\n When the component renders\n Then there is a textbox with the user's share link\n When the clipboard icon is clicked\n Then the link is copied to clipboard\n And a tooltip appears for ~1 second\n\n @minutia\n Scenario: Tooltip lifespan defaults to 2000\n Given the tooltip's lifespan is set to 2000\n And there is tooltip text\n When the component renders\n And the clipboard icon is clicked\n Then a tooltip appears for ~2 seconds\n\n @minutia\n Scenario: Demo\n Given isDemo() returns true\n Then the share link is \"https://www.example.com/sharelink/abc\"\n And the component won't be interactive\n And the tooltip is hidden\n\n @minutia\n Scenario: Program ID can be sourced from prop\n Given the programId prop is set to \"program-a\"\n And window.widgetIdent.programId is set to \"program-b\"\n When the component renders\n Then the share link is for \"program-a\"\n\n @minutia\n Scenario: Program ID can be sourced from window\n Given the programId prop is unset\n And window.widgetIdent.programId is set to \"program-b\"\n When the component renders\n Then the share link is for \"program-b\"\n\n @minutia\n Scenario: An analytic event is fired when a user copies their sharelink\n Given a user viewing the share link component\n And the component is rendered for \"program-a\"\n When they click to copy their link\n Then an \"USER_REFERRAL_PROGRAM_ENGAGEMENT_EVENT\" analytic event is fired\n And it is for \"program-a\"\n And it has share medium \"DIRECT\"\n\n\n @ui\n Scenario Outline: user can edit the alignment of the share link text\n Given a user is editing the share link component\n Then they see \"Align text\" props\n And the default value is \"left\"\n When they change the option to <option>\n Then they see the text in <position>\n Examples:\n | option | position |\n | left | left |\n | center | center |\n | right | right |\n\n @ui\n Scenario Outline: The position of the copy button can be changed\n Given a user is editing the share link component\n Then they see \"Style\" props\n And the default value is \"icon\"\n When they change the option to <option>\n Then they see the copy button in <position>\n Examples:\n | option | position |\n | button outside | outside the input, on the right |\n | button below | outside the input, below |\n | icon | inside the input as an icon |\n";
1633
1649
 
1634
1650
  const ShareLink_stories = {
@@ -1637,13 +1653,13 @@ const ShareLink_stories = {
1637
1653
  scenario: scenario$2,
1638
1654
  },
1639
1655
  };
1640
- const Default = () => {
1656
+ const Default$1 = () => {
1641
1657
  const props = {
1642
1658
  copyString: "https://noah.example.com",
1643
1659
  open: false,
1644
1660
  tooltiptext: "Copied!",
1645
1661
  };
1646
- return index.h(ShadowViewAddon.CopyTextView, Object.assign({}, props));
1662
+ return index.h(copyTextView.CopyTextView, Object.assign({}, props));
1647
1663
  };
1648
1664
  const Tooltip = () => {
1649
1665
  const props = {
@@ -1651,7 +1667,7 @@ const Tooltip = () => {
1651
1667
  tooltiptext: "Some text for the tooltip",
1652
1668
  open: true,
1653
1669
  };
1654
- return index.h(ShadowViewAddon.CopyTextView, Object.assign({}, props));
1670
+ return index.h(copyTextView.CopyTextView, Object.assign({}, props));
1655
1671
  };
1656
1672
  const Disabled = () => {
1657
1673
  const props = {
@@ -1660,7 +1676,7 @@ const Disabled = () => {
1660
1676
  open: true,
1661
1677
  tooltiptext: "Copied!",
1662
1678
  };
1663
- return index.h(ShadowViewAddon.CopyTextView, Object.assign({}, props));
1679
+ return index.h(copyTextView.CopyTextView, Object.assign({}, props));
1664
1680
  };
1665
1681
  const Error$1 = () => {
1666
1682
  const props = {
@@ -1670,7 +1686,7 @@ const Error$1 = () => {
1670
1686
  tooltiptext: "Copied!",
1671
1687
  error: true,
1672
1688
  };
1673
- return index.h(ShadowViewAddon.CopyTextView, Object.assign({}, props));
1689
+ return index.h(copyTextView.CopyTextView, Object.assign({}, props));
1674
1690
  };
1675
1691
  const TextAlignCenter = () => {
1676
1692
  return index.h("sqm-share-link", { textAlign: "center" });
@@ -1679,7 +1695,7 @@ const TextAlignRight = () => {
1679
1695
  return index.h("sqm-share-link", { textAlign: "right" });
1680
1696
  };
1681
1697
  const CopyButton = () => {
1682
- return (index.h(ShadowViewAddon.CopyTextView, Object.assign({}, {
1698
+ return (index.h(copyTextView.CopyTextView, Object.assign({}, {
1683
1699
  copyString: "https://noah.example.com",
1684
1700
  open: false,
1685
1701
  tooltiptext: "Copied!",
@@ -1687,7 +1703,7 @@ const CopyButton = () => {
1687
1703
  })));
1688
1704
  };
1689
1705
  const CopyButtonBelow = () => {
1690
- return (index.h(ShadowViewAddon.CopyTextView, Object.assign({}, {
1706
+ return (index.h(copyTextView.CopyTextView, Object.assign({}, {
1691
1707
  copyString: "https://noah.example.com",
1692
1708
  open: false,
1693
1709
  tooltiptext: "Copied!",
@@ -1701,7 +1717,7 @@ const FullStack = () => {
1701
1717
  const ShareLink = /*#__PURE__*/Object.freeze({
1702
1718
  __proto__: null,
1703
1719
  'default': ShareLink_stories,
1704
- Default: Default,
1720
+ Default: Default$1,
1705
1721
  Tooltip: Tooltip,
1706
1722
  Disabled: Disabled,
1707
1723
  Error: Error$1,
@@ -1720,7 +1736,7 @@ const BigStat_stories = {
1720
1736
  scenario: scenario$3,
1721
1737
  },
1722
1738
  };
1723
- const Default$1 = () => {
1739
+ const Default$2 = () => {
1724
1740
  const props = { value: 990000, statvalue: "9.900,00", loading: false };
1725
1741
  return index.h(ShadowViewAddon.BigStatView, Object.assign({}, props), "Big stat");
1726
1742
  };
@@ -1803,7 +1819,7 @@ const MultipleStats = () => {
1803
1819
  const BigStat = /*#__PURE__*/Object.freeze({
1804
1820
  __proto__: null,
1805
1821
  'default': BigStat_stories,
1806
- Default: Default$1,
1822
+ Default: Default$2,
1807
1823
  LeftAlign: LeftAlign,
1808
1824
  RightAlign: RightAlign,
1809
1825
  FlexReverse: FlexReverse,
@@ -2540,36 +2556,36 @@ const routes = `
2540
2556
  `;
2541
2557
  const TemplateNavigation = createHookStory(() => {
2542
2558
  return (index.h("div", null,
2543
- index.h("button", { onClick: () => index_module.$n.push("/") }, "/"),
2544
- index.h("button", { onClick: () => index_module.$n.push("/foo") }, "/foo"),
2545
- index.h("button", { onClick: () => index_module.$n.push("/bar") }, "/bar"),
2546
- index.h("button", { onClick: () => index_module.$n.push("/baz/bang") }, "/baz/bang"),
2547
- index.h("button", { onClick: () => index_module.$n.push("/refer") }, "/refer"),
2548
- index.h("button", { onClick: () => index_module.$n.push("/refer/1") }, "/refer/1"),
2549
- index.h("button", { onClick: () => index_module.$n.push("/refer/2") }, "/refer/2"),
2550
- index.h("button", { onClick: () => index_module.$n.back() }, "Back"),
2551
- index.h("button", { onClick: () => index_module.$n.forward() }, "Forward"),
2559
+ index.h("button", { onClick: () => index_module.xn.push("/") }, "/"),
2560
+ index.h("button", { onClick: () => index_module.xn.push("/foo") }, "/foo"),
2561
+ index.h("button", { onClick: () => index_module.xn.push("/bar") }, "/bar"),
2562
+ index.h("button", { onClick: () => index_module.xn.push("/baz/bang") }, "/baz/bang"),
2563
+ index.h("button", { onClick: () => index_module.xn.push("/refer") }, "/refer"),
2564
+ index.h("button", { onClick: () => index_module.xn.push("/refer/1") }, "/refer/1"),
2565
+ index.h("button", { onClick: () => index_module.xn.push("/refer/2") }, "/refer/2"),
2566
+ index.h("button", { onClick: () => index_module.xn.back() }, "Back"),
2567
+ index.h("button", { onClick: () => index_module.xn.forward() }, "Forward"),
2552
2568
  index.h("hr", null),
2553
2569
  index.h("sqm-router", { innerHTML: templates })));
2554
2570
  });
2555
2571
  const RouteNavigation = createHookStory(() => {
2556
2572
  return (index.h("div", null,
2557
- index.h("button", { onClick: () => index_module.$n.push("/") }, "/"),
2558
- index.h("button", { onClick: () => index_module.$n.push("/foo") }, "/foo"),
2559
- index.h("button", { onClick: () => index_module.$n.push("/bar") }, "/bar"),
2560
- index.h("button", { onClick: () => index_module.$n.push("/baz/bang") }, "/baz/bang"),
2561
- index.h("button", { onClick: () => index_module.$n.push("/refer") }, "/refer"),
2562
- index.h("button", { onClick: () => index_module.$n.push("/refer/1") }, "/refer/1"),
2563
- index.h("button", { onClick: () => index_module.$n.push("/refer/2") }, "/refer/2"),
2564
- index.h("button", { onClick: () => index_module.$n.back() }, "Back"),
2565
- index.h("button", { onClick: () => index_module.$n.forward() }, "Forward"),
2573
+ index.h("button", { onClick: () => index_module.xn.push("/") }, "/"),
2574
+ index.h("button", { onClick: () => index_module.xn.push("/foo") }, "/foo"),
2575
+ index.h("button", { onClick: () => index_module.xn.push("/bar") }, "/bar"),
2576
+ index.h("button", { onClick: () => index_module.xn.push("/baz/bang") }, "/baz/bang"),
2577
+ index.h("button", { onClick: () => index_module.xn.push("/refer") }, "/refer"),
2578
+ index.h("button", { onClick: () => index_module.xn.push("/refer/1") }, "/refer/1"),
2579
+ index.h("button", { onClick: () => index_module.xn.push("/refer/2") }, "/refer/2"),
2580
+ index.h("button", { onClick: () => index_module.xn.back() }, "Back"),
2581
+ index.h("button", { onClick: () => index_module.xn.forward() }, "Forward"),
2566
2582
  index.h("hr", null),
2567
2583
  index.h("sqm-router", { innerHTML: routes })));
2568
2584
  });
2569
2585
  const Styling = createHookStory(() => {
2570
2586
  return (index.h("div", null,
2571
- index.h("button", { onClick: () => index_module.$n.push("/") }, "/"),
2572
- index.h("button", { onClick: () => index_module.$n.push("/foo") }, "/foo"),
2587
+ index.h("button", { onClick: () => index_module.xn.push("/") }, "/"),
2588
+ index.h("button", { onClick: () => index_module.xn.push("/foo") }, "/foo"),
2573
2589
  index.h("hr", null),
2574
2590
  index.h("div", { style: { display: "flex", justifyContent: "space-around" } },
2575
2591
  index.h("sqm-router", { innerHTML: `<template path="/">
@@ -2583,7 +2599,7 @@ function useTemplate(templateString) {
2583
2599
  const [previewTemplate, setPreviewTemplate] = stencilHooks_module.useState(templateString);
2584
2600
  function setPath(e) {
2585
2601
  //@ts-ignore
2586
- index_module.$n.push(e.target.value);
2602
+ index_module.xn.push(e.target.value);
2587
2603
  }
2588
2604
  return {
2589
2605
  states: { previewTemplate, editedTemplate },
@@ -2747,8 +2763,8 @@ const FullStackFrame = () => {
2747
2763
  "Current path:",
2748
2764
  " ",
2749
2765
  index.h("code", null,
2750
- index.h("strong", null, (_a = index_module.Sn()) === null || _a === void 0 ? void 0 : _a.pathname))),
2751
- index.h("button", { onClick: index_module.$n.back }, "Go Back")));
2766
+ index.h("strong", null, (_a = index_module.jn()) === null || _a === void 0 ? void 0 : _a.pathname))),
2767
+ index.h("button", { onClick: index_module.xn.back }, "Go Back")));
2752
2768
  };
2753
2769
  const FullStackFrameLoggedOut = () => {
2754
2770
  var _a;
@@ -2772,8 +2788,8 @@ const FullStackFrameLoggedOut = () => {
2772
2788
  "Current path:",
2773
2789
  " ",
2774
2790
  index.h("code", null,
2775
- index.h("strong", null, (_a = index_module.Sn()) === null || _a === void 0 ? void 0 : _a.pathname))),
2776
- index.h("button", { onClick: index_module.$n.back }, "Go Back")));
2791
+ index.h("strong", null, (_a = index_module.jn()) === null || _a === void 0 ? void 0 : _a.pathname))),
2792
+ index.h("button", { onClick: index_module.xn.back }, "Go Back")));
2777
2793
  };
2778
2794
 
2779
2795
  const PortalFrame = /*#__PURE__*/Object.freeze({
@@ -2892,7 +2908,7 @@ const BareBonesView = createHookStory(() => {
2892
2908
  });
2893
2909
  const RegularView = createHookStory(() => {
2894
2910
  setupGraphQL$1();
2895
- return (index.h(ShadowViewAddon.CopyTextView, Object.assign({}, ShadowViewAddon.useShareLink({
2911
+ return (index.h(copyTextView.CopyTextView, Object.assign({}, ShadowViewAddon.useShareLink({
2896
2912
  programId: "klip-referral-program",
2897
2913
  tooltiptext: "Copied to clipboard",
2898
2914
  tooltiplifespan: 1000,
@@ -2900,7 +2916,7 @@ const RegularView = createHookStory(() => {
2900
2916
  });
2901
2917
  const FastTooltip = createHookStory(() => {
2902
2918
  setupGraphQL$1();
2903
- return (index.h(ShadowViewAddon.CopyTextView, Object.assign({}, ShadowViewAddon.useShareLink({
2919
+ return (index.h(copyTextView.CopyTextView, Object.assign({}, ShadowViewAddon.useShareLink({
2904
2920
  programId: "klip-referral-program",
2905
2921
  tooltiptext: "⠀⠀⠀⠀⠀⠀⠀⠀⠀HELLO THERE!!!\n⠀⠀⠀⡯⡯⡾⠝⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢊⠘⡮⣣⠪⠢⡑⡌\n⠀⠀⠀⠟⠝⠈⠀⠀⠀⠡⠀⠠⢈⠠⢐⢠⢂⢔⣐⢄⡂⢔⠀⡁⢉⠸⢨⢑⠕⡌\n⠀⠀⡀⠁⠀⠀⠀⡀⢂⠡⠈⡔⣕⢮⣳⢯⣿⣻⣟⣯⣯⢷⣫⣆⡂⠀⠀⢐⠑⡌\n⢀⠠⠐⠈⠀⢀⢂⠢⡂⠕⡁⣝⢮⣳⢽⡽⣾⣻⣿⣯⡯⣟⣞⢾⢜⢆⠀⡀⠀⠪\n⣬⠂⠀⠀⢀⢂⢪⠨⢂⠥⣺⡪⣗⢗⣽⢽⡯⣿⣽⣷⢿⡽⡾⡽⣝⢎⠀⠀⠀⢡\n⣿⠀⠀⠀⢂⠢⢂⢥⢱⡹⣪⢞⡵⣻⡪⡯⡯⣟⡾⣿⣻⡽⣯⡻⣪⠧⠑⠀⠁⢐\n⣿⠀⠀⠀⠢⢑⠠⠑⠕⡝⡎⡗⡝⡎⣞⢽⡹⣕⢯⢻⠹⡹⢚⠝⡷⡽⡨⠀⠀⢔\n⣿⡯⠀⢈⠈⢄⠂⠂⠐⠀⠌⠠⢑⠱⡱⡱⡑⢔⠁⠀⡀⠐⠐⠐⡡⡹⣪⠀⠀⢘\n⣿⣽⠀⡀⡊⠀⠐⠨⠈⡁⠂⢈⠠⡱⡽⣷⡑⠁⠠⠑⠀⢉⢇⣤⢘⣪⢽⠀⢌⢎\n⣿⢾⠀⢌⠌⠀⡁⠢⠂⠐⡀⠀⢀⢳⢽⣽⡺⣨⢄⣑⢉⢃⢭⡲⣕⡭⣹⠠⢐⢗\n⣿⡗⠀⠢⠡⡱⡸⣔⢵⢱⢸⠈⠀⡪⣳⣳⢹⢜⡵⣱⢱⡱⣳⡹⣵⣻⢔⢅⢬⡷\n⣷⡇⡂⠡⡑⢕⢕⠕⡑⠡⢂⢊⢐⢕⡝⡮⡧⡳⣝⢴⡐⣁⠃⡫⡒⣕⢏⡮⣷⡟\n⣷⣻⣅⠑⢌⠢⠁⢐⠠⠑⡐⠐⠌⡪⠮⡫⠪⡪⡪⣺⢸⠰⠡⠠⠐⢱⠨⡪⡪⡰\n⣯⢷⣟⣇⡂⡂⡌⡀⠀⠁⡂⠅⠂⠀⡑⡄⢇⠇⢝⡨⡠⡁⢐⠠⢀⢪⡐⡜⡪⡊\n⣿⢽⡾⢹⡄⠕⡅⢇⠂⠑⣴⡬⣬⣬⣆⢮⣦⣷⣵⣷⡗⢃⢮⠱⡸⢰⢱⢸⢨⢌\n⣯⢯⣟⠸⣳⡅⠜⠔⡌⡐⠈⠻⠟⣿⢿⣿⣿⠿⡻⣃⠢⣱⡳⡱⡩⢢⠣⡃⠢⠁\n⡯⣟⣞⡇⡿⣽⡪⡘⡰⠨⢐⢀⠢⢢⢄⢤⣰⠼⡾⢕⢕⡵⣝⠎⢌⢪⠪⡘⡌⠀\n⡯⣳⠯⠚⢊⠡⡂⢂⠨⠊⠔⡑⠬⡸⣘⢬⢪⣪⡺⡼⣕⢯⢞⢕⢝⠎⢻⢼⣀⠀\n⠁⡂⠔⡁⡢⠣⢀⠢⠀⠅⠱⡐⡱⡘⡔⡕⡕⣲⡹⣎⡮⡏⡑⢜⢼⡱⢩⣗⣯⣟\n⢀⢂⢑⠀⡂⡃⠅⠊⢄⢑⠠⠑⢕⢕⢝⢮⢺⢕⢟⢮⢊⢢⢱⢄⠃⣇⣞⢞⣞⢾\n⢀⠢⡑⡀⢂⢊⠠⠁⡂⡐⠀⠅⡈⠪⠪⠪⠣⠫⠑⡁⢔⠕⣜⣜⢦⡰⡎⡯⡾⡽",
2906
2922
  tooltiplifespan: 500,
@@ -3500,7 +3516,7 @@ function useExchangeButton() {
3500
3516
  const { id, accountId } = setupGraphQL$6();
3501
3517
  const [points, setPoints] = stencilHooks_module.useState(10);
3502
3518
  const [rate, setRate] = stencilHooks_module.useState(100);
3503
- const [exchange, { data, errors }] = index_module.Xe(EXCHANGE);
3519
+ const [exchange, { data, errors }] = index_module.an(EXCHANGE);
3504
3520
  return {
3505
3521
  states: {
3506
3522
  points,
@@ -3902,14 +3918,14 @@ const Dashboard = () => {
3902
3918
  padding: "none",
3903
3919
  label: (index.h("sqm-text", null,
3904
3920
  index.h("h3", null, "Share your referral link"))),
3905
- content: index.h(ShadowViewAddon.CopyTextView, Object.assign({}, sharelinkProps)),
3921
+ content: index.h(copyTextView.CopyTextView, Object.assign({}, sharelinkProps)),
3906
3922
  })),
3907
3923
  index.h(sqmPortalContainerView.PortalSectionView, Object.assign({}, {
3908
3924
  labelMargin: "small",
3909
3925
  padding: "none",
3910
3926
  label: (index.h("sqm-text", null,
3911
3927
  index.h("h3", null, "Share your referral code"))),
3912
- content: index.h(ShadowViewAddon.CopyTextView, Object.assign({}, sharecodeProps)),
3928
+ content: index.h(copyTextView.CopyTextView, Object.assign({}, sharecodeProps)),
3913
3929
  })),
3914
3930
  index.h(sqmPortalContainerView.PortalSectionView, Object.assign({}, {
3915
3931
  labelMargin: "small",
@@ -4071,6 +4087,8 @@ const referralWidget = "<sqm-brand brand-color=\"#4225c4\" brand-font=\"Nunito S
4071
4087
 
4072
4088
  const monoWidget = "<sqm-brand brand-color=\"#4225c4\" brand-font=\"Nunito Sans\">\n <sqm-portal-container\n direction=\"column\"\n padding=\"small\"\n gap=\"xxx-large\"\n display=\"grid\"\n max-width=\"100%\"\n background-color=\"#ffffff\"\n >\n <sqm-portal-container\n direction=\"column\"\n padding=\"none\"\n gap=\"xxx-large\"\n display=\"grid\"\n max-width=\"100%\"\n >\n <sqm-hero-image\n image-url=\"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\"\n header=\"MyCompany Rewards\"\n description=\"Refer friends and complete tasks to earn rewards\"\n layout=\"columns\"\n image-pos=\"right\"\n background-color=\"#F9F9F9\"\n image-mobile-pos=\"top\"\n image-percentage=\"50\"\n padding-image=\"none\"\n padding-text=\"xxxx-large\"\n >\n </sqm-hero-image>\n </sqm-portal-container>\n <sqm-portal-container\n direction=\"column\"\n padding=\"none\"\n gap=\"xxx-large\"\n max-width=\"770px\"\n center\n display=\"grid\"\n >\n <sqm-stat-container space=\"xxx-large\" display=\"flex\">\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/referralsCount\"\n >\n <p>Referrals</p>\n </sqm-big-stat>\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/integrationRewardsCountFiltered/AVAILABLE/global\"\n >\n <p>Giftcards Earned</p>\n </sqm-big-stat>\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardBalance/CREDIT/POINT/value/global\"\n >\n <p>Points Balance</p>\n </sqm-big-stat>\n </sqm-stat-container>\n <sqm-portal-container\n gap=\"xx-large\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <sqm-titled-section\n text-align=\"center\"\n label-margin=\"xxx-small\"\n padding=\"none\"\n >\n <h3 slot=\"label\">Share $50 with friends</h3>\n <p slot=\"content\">\n They’ll get a $50 credit towards a new account and you’ll get up to\n $1200\n </p>\n </sqm-titled-section>\n <sqm-referral-card vertical-alignment=\"start\">\n <sqm-portal-container\n gap=\"large\"\n slot=\"left\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <p>\n They’ll get a $50 credit towards a new account and you’ll get:\n </p>\n <sqm-timeline icon=\"circle\">\n <sqm-timeline-entry\n reward=\"$50\"\n unit=\"visa giftcard\"\n desc=\"Your friend purchases a Business plan\"\n icon=\"circle\"\n >\n </sqm-timeline-entry>\n <sqm-timeline-entry\n reward=\"$200\"\n unit=\"visa giftcard\"\n desc=\"Our sales team qualifies your friend as a good fit for our Enterprise plan\"\n icon=\"circle\"\n >\n </sqm-timeline-entry>\n <sqm-timeline-entry\n reward=\"$1000\"\n unit=\"visa giftcard\"\n desc=\"Your friend purchases an Enterprise plan\"\n icon=\"circle\"\n >\n </sqm-timeline-entry>\n </sqm-timeline>\n </sqm-portal-container>\n <sqm-portal-container\n gap=\"large\"\n slot=\"right\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <p>Choose how you want to share:</p>\n <p><sub>Your unique referral link:</sub></p>\n <sqm-share-link\n tooltip-text=\"Copied to Clipboard\"\n tooltip-lifespan=\"1000\"\n >\n </sqm-share-link>\n <sqm-portal-container\n gap=\"x-small\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <sqm-share-button\n medium=\"email\"\n icon-slot=\"prefix\"\n size=\"medium\"\n type=\"default\"\n >\n Share via email\n </sqm-share-button>\n <sqm-share-button\n medium=\"linkedin\"\n icon-slot=\"prefix\"\n size=\"medium\"\n type=\"default\"\n >\n Share on LinkedIn\n </sqm-share-button>\n <sqm-share-button\n medium=\"twitter\"\n icon-slot=\"prefix\"\n size=\"medium\"\n type=\"default\"\n >\n Post about us on X\n </sqm-share-button>\n </sqm-portal-container>\n </sqm-portal-container>\n </sqm-referral-card>\n <sqm-portal-container\n gap=\"xx-large\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n min-width=\"\"\n padding=\"none\"\n >\n <sqm-titled-section text-align=\"center\" label-margin=\"xxx-small\">\n <h3 slot=\"label\">Earn more rewards</h3>\n <p slot=\"content\">\n Get points while using our product. Use those points to redeem\n rewards like one free month of Enterprise or two plane tickets to\n anywhere in North America\n </p>\n </sqm-titled-section>\n <sqm-card-feed gap=\"24\" width=\"347\">\n <sqm-task-card\n reward-amount=\"20\"\n goal=\"1\"\n card-title=\"Complete a Survey\"\n description=\"Fill out our NPS survey and get 20 points for giving us honest feedback.\"\n button-text=\"Take survey\"\n reward-unit=\"Points\"\n completed-text=\"Completed {finite, select, 0 {{count, plural, =1 {{count} time} other {{count} times}}} other {{count}/{finite} times}}\"\n ended-message=\"Ended {endDate}\"\n expiry-message=\"Ends {endDate}\"\n finite=\"0\"\n starts-on-message=\"Starts {startDate}\"\n >\n </sqm-task-card>\n <sqm-task-card\n reward-amount=\"250\"\n goal=\"500\"\n show-progress-bar\n card-title=\"Spend $500\"\n description=\"Earn 250 points when you spend $500 or more.\"\n button-text=\"See plans\"\n completed-text=\"Completed {finite, select, 0 {{count, plural, =1 {{count} time} other {{count} times}}} other {{count}/{finite} times}}\"\n ended-message=\"Ended {endDate}\"\n expiry-message=\"Ends {endDate}\"\n progress-bar-unit=\"$\"\n finite=\"0\"\n reward-unit=\"Points\"\n starts-on-message=\"Starts {startDate}\"\n >\n </sqm-task-card>\n <sqm-task-card\n goal=\"1\"\n reward-amount=\"50\"\n card-title=\"Follow Us on X\"\n description=\"Earn 50 points when you Follow Us on X!\"\n button-text=\"Follow\"\n button-link=\"https://twitter.com/\"\n open-new-tab=\"true\"\n event-key=\"socialFollow\"\n completed-text=\"Completed {finite, select, 0 {{count, plural, =1 {{count} time} other {{count} times}}} other {{count}/{finite} times}}\"\n ended-message=\"Ended {endDate}\"\n expiry-message=\"Ends {endDate}\"\n finite=\"0\"\n reward-unit=\"Points\"\n starts-on-message=\"Starts {startDate}\"\n >\n </sqm-task-card>\n <sqm-task-card\n reward-amount=\"1\"\n reward-unit=\"Free Month\"\n goal=\"1\"\n card-title=\"Upgrade Your Plan\"\n description=\"Receive one free month for being a committed customer when you upgrade your plan.\"\n button-text=\"Upgrade\"\n completed-text=\"Completed {finite, select, 0 {{count, plural, =1 {{count} time} other {{count} times}}} other {{count}/{finite} times}}\"\n ended-message=\"Ended {endDate}\"\n expiry-message=\"Ends {endDate}\"\n open-new-tab=\"false\"\n finite=\"0\"\n starts-on-message=\"Starts {startDate}\"\n >\n </sqm-task-card>\n </sqm-card-feed>\n </sqm-portal-container>\n <sqm-tabs>\n <sqm-tab header=\"Referral history\">\n <sqm-referral-table\n per-page=\"4\"\n hidden-columns=\"2\"\n more-label=\"Next\"\n prev-label=\"Prev\"\n sm-breakpoint=\"599\"\n md-breakpoint=\"799\"\n >\n <sqm-referral-table-user-column\n column-title=\"User\"\n anonymous-user=\"Anonymous User\"\n deleted-user=\"Deleted User\"\n >\n </sqm-referral-table-user-column>\n <sqm-referral-table-status-column\n column-title=\"Referral status\"\n converted-status-text=\"Converted\"\n in-progress-status-text=\"In Progress\"\n >\n </sqm-referral-table-status-column>\n <sqm-referral-table-rewards-column\n column-title=\"Rewards\"\n expiring-text=\"Expiring in\"\n fuel-tank-text=\"Your code is\"\n pending-for-text=\"{status} for {date}\"\n reward-received-text=\"Reward received on\"\n status-long-text=\"{status, select, AVAILABLE {Reward expiring on} CANCELLED {Reward cancelled on} PENDING {Available on} EXPIRED {Reward expired on} other {Not available} }\"\n status-text=\"{status, select, AVAILABLE {Available} CANCELLED {Cancelled} PENDING {Pending} EXPIRED {Expired} REDEEMED {Redeemed} other {Not available} }\"\n >\n </sqm-referral-table-rewards-column>\n <sqm-referral-table-date-column\n column-title=\"Date referred\"\n date-shown=\"dateReferralStarted\"\n >\n </sqm-referral-table-date-column>\n <sqm-empty\n slot=\"empty\"\n empty-state-image=\"https://res.cloudinary.com/saasquatch/image/upload/v1644000223/squatch-assets/empty_referral2.png\"\n empty-state-header=\"View your referral details\"\n empty-state-text=\"Refer a friend to view the status of your referrals and rewards earned\"\n >\n </sqm-empty>\n </sqm-referral-table>\n </sqm-tab>\n <sqm-tab header=\"Reward history\">\n <sqm-rewards-table\n per-page=\"4\"\n program-id=\"\"\n hidden-columns=\"0\"\n more-label=\"Next\"\n prev-label=\"Prev\"\n sm-breakpoint=\"599\"\n md-breakpoint=\"799\"\n >\n <sqm-rewards-table-reward-column\n available-text=\"{availableAmount} remaining\"\n column-title=\"Reward\"\n copy-text=\"Copied!\"\n redeemed-text=\"{redeemedAmount} redeemed\"\n >\n </sqm-rewards-table-reward-column>\n <sqm-rewards-table-source-column\n anonymous-user=\"Anonymous User\"\n column-title=\"Source\"\n deleted-user=\"Deleted User\"\n referral-text=\"{rewardSource, select, FRIEND_SIGNUP {Referral to} REFERRED {Referred by} other {}}\"\n reward-exchange-text=\"Reward Exchange\"\n reward-source-text=\"{rewardSource, select, MANUAL {Manual} AUTOMATED {{programName}} other {}}\"\n >\n </sqm-rewards-table-source-column>\n <sqm-rewards-table-status-column\n column-title=\"Status\"\n expiry-text=\"Expires on \"\n status-text=\"{status, select, AVAILABLE {Available} CANCELLED {Cancelled} PENDING {Pending} EXPIRED {Expired} REDEEMED {Redeemed} other {Not available} }\"\n >\n </sqm-rewards-table-status-column>\n <sqm-rewards-table-date-column\n column-title=\"Date received\"\n date-shown=\"dateGiven\"\n >\n </sqm-rewards-table-date-column>\n <sqm-empty\n slot=\"empty\"\n empty-state-image=\"https://res.cloudinary.com/saasquatch/image/upload/v1644360953/squatch-assets/empty_reward2.png\"\n empty-state-header=\"View your rewards\"\n empty-state-text=\"Refer friends and complete tasks to view the details of your rewards\"\n >\n </sqm-empty>\n </sqm-rewards-table>\n </sqm-tab>\n </sqm-tabs>\n </sqm-portal-container>\n <sqm-portal-footer\n support-email=\"support@example.com\"\n terms-link=\"https:\\/\\/example.com\"\n faq-link=\"https:\\/\\/example.com\"\n terms-text=\"Terms And Conditions\"\n faq-text=\"FAQ\"\n show-powered-by=\"true\"\n padding-bottom=\"none\"\n padding-left=\"none\"\n padding-right=\"none\"\n padding-top=\"none\"\n ></sqm-portal-footer>\n </sqm-portal-container>\n </sqm-portal-container>\n</sqm-brand>\n";
4073
4089
 
4090
+ const promoCodeReferralWidget = "<sqm-brand brand-color=\"#4225c4\" brand-font=\"Nunito Sans\">\n <sqm-portal-container\n direction=\"column\"\n padding=\"small\"\n gap=\"xxx-large\"\n display=\"grid\"\n max-width=\"100%\"\n background-color=\"#ffffff\"\n >\n <sqm-portal-container\n direction=\"column\"\n padding=\"none\"\n gap=\"xxx-large\"\n display=\"grid\"\n max-width=\"100%\"\n >\n <sqm-hero-image\n image-url=\"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\"\n header=\"MyCompany Rewards\"\n description=\"Refer a friend and earn up to $1200 in rewards\"\n layout=\"columns\"\n image-pos=\"right\"\n background-color=\"#F9F9F9\"\n >\n </sqm-hero-image>\n </sqm-portal-container>\n <sqm-portal-container\n direction=\"column\"\n padding=\"none\"\n gap=\"xxx-large\"\n max-width=\"770px\"\n center\n display=\"grid\"\n >\n <sqm-stat-container space=\"xxx-large\" display=\"flex\">\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/referralsCount\"\n >\n <p>Referrals</p>\n </sqm-big-stat>\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/integrationRewardsCountFiltered/AVAILABLE/global\"\n >\n <p>Giftcards</p>\n </sqm-big-stat>\n </sqm-stat-container>\n <sqm-portal-container\n gap=\"large\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <sqm-titled-section\n text-align=\"center\"\n label-margin=\"xxx-small\"\n padding=\"none\"\n >\n <h3 slot=\"label\">Get rewarded when your friend uses our product</h3>\n </sqm-titled-section>\n <sqm-referral-card vertical-alignment=\"start\">\n <sqm-portal-container\n gap=\"large\"\n slot=\"left\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <p>\n They’ll get a $50 credit towards a new account and you’ll get:\n </p>\n <sqm-timeline icon=\"circle\">\n <sqm-timeline-entry\n reward=\"$50\"\n unit=\"visa giftcard\"\n desc=\"Your friend purchases a Business plan\"\n icon=\"circle\"\n >\n </sqm-timeline-entry>\n <sqm-timeline-entry\n reward=\"$200\"\n unit=\"visa giftcard\"\n desc=\"Our sales team qualifies your friend as a good fit for our Enterprise plan\"\n icon=\"circle\"\n >\n </sqm-timeline-entry>\n <sqm-timeline-entry\n reward=\"$1000\"\n unit=\"visa giftcard\"\n desc=\"Your friend purchases an Enterprise plan\"\n icon=\"circle\"\n >\n </sqm-timeline-entry>\n </sqm-timeline>\n </sqm-portal-container>\n <sqm-referral-codes slot=\"right\">\n <sqm-pagination slot=\"pagination\"></sqm-pagination>\n <sqm-referral-code\n slot=\"shareCodes\"\n show-notification-text=\"true\"\n ></sqm-referral-code>\n <sqm-portal-container gap=\"small\" slot=\"shareButtons\">\n <sqm-share-button medium=\"email\"\n >Share via email</sqm-share-button\n >\n <sqm-share-button medium=\"fbmessenger\"\n >Share on Facebook</sqm-share-button\n >\n <sqm-share-button medium=\"whatsapp\"\n >Share on WhatsApp</sqm-share-button\n >\n </sqm-portal-container>\n </sqm-referral-codes>\n </sqm-referral-card>\n </sqm-portal-container>\n <sqm-portal-container\n gap=\"large\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <sqm-titled-section\n padding=\"none\"\n text-align=\"center\"\n label-margin=\"xx-small\"\n >\n <h3 slot=\"label\">Referral History</h3>\n </sqm-titled-section>\n <sqm-referral-table\n per-page=\"4\"\n hidden-columns=\"2\"\n more-label=\"Next\"\n prev-label=\"Prev\"\n sm-breakpoint=\"599\"\n md-breakpoint=\"799\"\n >\n <sqm-referral-table-user-column\n column-title=\"User\"\n anonymous-user=\"Anonymous User\"\n deleted-user=\"Deleted User\"\n >\n </sqm-referral-table-user-column>\n <sqm-referral-table-status-column\n column-title=\"Referral status\"\n converted-status-text=\"Converted\"\n in-progress-status-text=\"In Progress\"\n >\n </sqm-referral-table-status-column>\n <sqm-referral-table-rewards-column\n column-title=\"Rewards\"\n expiring-text=\"Expiring in\"\n fuel-tank-text=\"Your code is\"\n pending-for-text=\"{status} for {date}\"\n reward-received-text=\"Reward received on\"\n status-long-text=\"{status, select, AVAILABLE {Reward expiring on} CANCELLED {Reward cancelled on} PENDING {Available on} EXPIRED {Reward expired on} other {Not available} }\"\n status-text=\"{status, select, AVAILABLE {Available} CANCELLED {Cancelled} PENDING {Pending} EXPIRED {Expired} REDEEMED {Redeemed} other {Not available} }\"\n >\n </sqm-referral-table-rewards-column>\n <sqm-referral-table-date-column\n column-title=\"Date referred\"\n date-shown=\"dateReferralStarted\"\n >\n </sqm-referral-table-date-column>\n <sqm-empty\n slot=\"empty\"\n empty-state-image=\"https://res.cloudinary.com/saasquatch/image/upload/v1644000223/squatch-assets/empty_referral2.png\"\n empty-state-header=\"View your referral details\"\n empty-state-text=\"Refer a friend to view the status of your referrals and rewards earned\"\n ></sqm-empty>\n </sqm-referral-table>\n </sqm-portal-container>\n <sqm-portal-footer\n support-email=\"support@example.com\"\n terms-link=\"https:\\/\\/example.com\"\n faq-link=\"https:\\/\\/example.com\"\n terms-text=\"Terms And Conditions\"\n faq-text=\"FAQ\"\n show-powered-by=\"true\"\n padding-bottom=\"none\"\n padding-left=\"none\"\n padding-right=\"none\"\n padding-top=\"none\"\n ></sqm-portal-footer>\n </sqm-portal-container>\n </sqm-portal-container>\n</sqm-brand>\n";
4091
+
4074
4092
  const loyaltyWidget = "<sqm-brand brand-color=\"#4225c4\" brand-font=\"Nunito Sans\">\n <sqm-portal-container\n direction=\"column\"\n padding=\"small\"\n gap=\"xxxx-large\"\n display=\"grid\"\n max-width=\"100%\"\n background-color=\"#ffffff\"\n >\n <sqm-portal-container\n direction=\"column\"\n padding=\"none\"\n gap=\"xxx-large\"\n display=\"grid\"\n max-width=\"100%\"\n >\n <sqm-hero-image\n image-url=\"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\"\n header=\"MyCompany Rewards\"\n description=\"Complete tasks to earn rewards\"\n layout=\"overlay\"\n padding-image=\"xxxx-large\"\n padding-text=\"xxx-large\"\n image-pos=\"center\"\n overlay-color=\"#5e5669\"\n overlay-opacity=\"0.9\"\n >\n </sqm-hero-image>\n <sqm-portal-container\n direction=\"column\"\n padding=\"none\"\n gap=\"xxx-large\"\n max-width=\"770px\"\n center\n display=\"grid\"\n >\n <sqm-program-explainer header=\"How it works\">\n <sqm-program-explainer-step\n description=\"Complete tasks like uploading your first video or sharing videos with friends\"\n header=\"Earn points for using our product\"\n icon=\"cash-stack\"\n text-color=\"#000000\"\n >\n </sqm-program-explainer-step>\n <sqm-program-explainer-step\n description=\"Redeem rewards like one free month of Enterprise or two plane tickets to anywhere in North America\"\n header=\"Redeem rewards with your points\"\n icon=\"people\"\n text-color=\"#000000\"\n >\n </sqm-program-explainer-step>\n </sqm-program-explainer>\n <sqm-portal-container\n center\n direction=\"row\"\n display=\"flex\"\n justify-content=\"space-between\"\n gap=\"xxx-large\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <sqm-stat-container space=\"xxx-large\" display=\"flex\">\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardsRedeemed/CREDIT/POINTS\"\n >\n <p>Points Redeemed</p>\n </sqm-big-stat>\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardBalance/CREDIT/POINT/value/global\"\n >\n <p>Points Balance</p>\n </sqm-big-stat>\n </sqm-stat-container>\n </sqm-portal-container>\n <sqm-portal-container\n direction=\"column\"\n padding=\"none\"\n gap=\"xx-large\"\n display=\"grid\"\n max-width=\"100%\"\n >\n <sqm-titled-section\n label-margin=\"small\"\n padding=\"none\"\n text-align=\"center\"\n >\n <h3 slot=\"label\">Earn points</h3>\n </sqm-titled-section>\n <sqm-card-feed gap=\"24\" width=\"347\">\n <sqm-task-card\n reward-amount=\"20\"\n goal=\"1\"\n card-title=\"Complete a Survey\"\n description=\"Fill out our NPS survey and get 20 points for giving us honest feedback.\"\n button-text=\"Take survey\"\n reward-unit=\"Points\"\n completed-text=\"Completed {finite, select, 0 {{count, plural, =1 {{count} time} other {{count} times}}} other {{count}/{finite} times}}\"\n ended-message=\"Ended {endDate}\"\n expiry-message=\"Ends {endDate}\"\n finite=\"0\"\n starts-on-message=\"Starts {startDate}\"\n >\n </sqm-task-card>\n <sqm-task-card\n reward-amount=\"250\"\n goal=\"500\"\n show-progress-bar\n card-title=\"Spend $500\"\n description=\"Earn 250 points when you spend $500 or more.\"\n button-text=\"See plans\"\n completed-text=\"Completed {finite, select, 0 {{count, plural, =1 {{count} time} other {{count} times}}} other {{count}/{finite} times}}\"\n ended-message=\"Ended {endDate}\"\n expiry-message=\"Ends {endDate}\"\n progress-bar-unit=\"$\"\n finite=\"0\"\n reward-unit=\"Points\"\n starts-on-message=\"Starts {startDate}\"\n >\n </sqm-task-card>\n <sqm-task-card\n goal=\"1\"\n reward-amount=\"50\"\n card-title=\"Follow Us on X\"\n description=\"Earn 50 points when you Follow Us on X!\"\n button-text=\"Follow\"\n button-link=\"https://twitter.com/\"\n open-new-tab=\"true\"\n event-key=\"socialFollow\"\n completed-text=\"Completed {finite, select, 0 {{count, plural, =1 {{count} time} other {{count} times}}} other {{count}/{finite} times}}\"\n ended-message=\"Ended {endDate}\"\n expiry-message=\"Ends {endDate}\"\n finite=\"0\"\n reward-unit=\"Points\"\n starts-on-message=\"Starts {startDate}\"\n >\n </sqm-task-card>\n <sqm-task-card\n reward-amount=\"1\"\n reward-unit=\"Free Month\"\n goal=\"1\"\n card-title=\"Upgrade Your Plan\"\n description=\"Receive one free month for being a committed customer when you upgrade your plan.\"\n button-text=\"Upgrade\"\n completed-text=\"Completed {finite, select, 0 {{count, plural, =1 {{count} time} other {{count} times}}} other {{count}/{finite} times}}\"\n ended-message=\"Ended {endDate}\"\n expiry-message=\"Ends {endDate}\"\n open-new-tab=\"false\"\n finite=\"0\"\n starts-on-message=\"Starts {startDate}\"\n >\n </sqm-task-card>\n </sqm-card-feed>\n <sqm-portal-container\n gap=\"large\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n >\n <sqm-titled-section\n padding=\"none\"\n text-align=\"center\"\n label-margin=\"xx-small\"\n >\n <h3 slot=\"label\">Reward History</h3>\n </sqm-titled-section>\n <sqm-rewards-table\n per-page=\"4\"\n hidden-columns=\"0\"\n more-label=\"Next\"\n prev-label=\"Prev\"\n sm-breakpoint=\"599\"\n md-breakpoint=\"799\"\n >\n <sqm-rewards-table-reward-column\n available-text=\"{availableAmount} remaining\"\n column-title=\"Reward\"\n copy-text=\"Copied!\"\n redeemed-text=\"{redeemedAmount} redeemed\"\n >\n </sqm-rewards-table-reward-column>\n <sqm-rewards-table-source-column\n anonymous-user=\"Anonymous User\"\n column-title=\"Source\"\n deleted-user=\"Deleted User\"\n referral-text=\"{rewardSource, select, FRIEND_SIGNUP {Referral to} REFERRED {Referred by} other {}}\"\n reward-exchange-text=\"Reward Exchange\"\n reward-source-text=\"{rewardSource, select, MANUAL {Manual} AUTOMATED {{programName}} other {}}\"\n >\n </sqm-rewards-table-source-column>\n <sqm-rewards-table-status-column\n column-title=\"Status\"\n expiry-text=\"Expires on \"\n status-text=\"{status, select, AVAILABLE {Available} CANCELLED {Cancelled} PENDING {Pending} EXPIRED {Expired} REDEEMED {Redeemed} other {Not available} }\"\n >\n </sqm-rewards-table-status-column>\n <sqm-rewards-table-date-column\n column-title=\"Date received\"\n date-shown=\"dateGiven\"\n >\n </sqm-rewards-table-date-column>\n <sqm-empty\n slot=\"empty\"\n empty-state-image=\"https://res.cloudinary.com/saasquatch/image/upload/v1644360953/squatch-assets/empty_reward2.png\"\n empty-state-header=\"View your rewards\"\n empty-state-text=\"Refer friends and complete tasks to view the details of your rewards\"\n >\n </sqm-empty>\n </sqm-rewards-table>\n </sqm-portal-container>\n </sqm-portal-container>\n <sqm-portal-footer\n support-email=\"support@example.com\"\n terms-link=\"https:\\/\\/example.com\"\n faq-link=\"https:\\/\\/example.com\"\n terms-text=\"Terms And Conditions\"\n faq-text=\"FAQ\"\n show-powered-by=\"true\"\n padding-bottom=\"none\"\n padding-left=\"none\"\n padding-right=\"none\"\n padding-top=\"none\"\n ></sqm-portal-footer>\n </sqm-portal-container>\n </sqm-portal-container>\n </sqm-portal-container>\n</sqm-brand>\n";
4075
4093
 
4076
4094
  const instantAccessReferrerShareWidget = "<sqm-hero\n background=\"https://res.cloudinary.com/saasquatch/image/upload/v1683589933/Portal%20Assets/Screen-Shot-2022-01-06-at-3.23.58-AM.png\"\n columns=\"2\"\n padding-size=\"medium\"\n wrap-direction=\"wrap\"\n secondary-background=\"#FFFFFF\"\n min-height=\"200\"\n ><sqm-referral-card\n vertical-alignment=\"start\"\n slot=\"secondary-column\"\n padding-bottom=\"small\"\n padding-left=\"x-large\"\n padding-right=\"x-large\"\n padding-top=\"small\"\n >\n <sqm-titled-section\n text-align=\"center\"\n label-margin=\"none\"\n padding=\"none\"\n slot=\"header\"\n ><h1 slot=\"label\">Invite your friends to unlock rewards!</h1>\n <p slot=\"content\">\n They&#x2019;ll get a &#x24;50 credit towards a new account and\n you&#x2019;ll get a &#x24;50 in credit for each friend you refer.\n </p></sqm-titled-section\n >\n <sqm-portal-container\n gap=\"small\"\n direction=\"column\"\n display=\"grid\"\n max-width=\"100%\"\n padding=\"none\"\n slot=\"left\"\n >\n <p style=\"margin: 0\">Choose how you want to share:</p>\n <sqm-share-link\n tooltip-text=\"Copied to Clipboard\"\n tooltip-lifespan=\"1000\"\n >\n </sqm-share-link>\n <sqm-share-button\n medium=\"email\"\n icon-slot=\"prefix\"\n size=\"medium\"\n type=\"default\"\n >\n Share via email\n </sqm-share-button>\n <sqm-share-button\n medium=\"linkedin\"\n icon-slot=\"prefix\"\n size=\"medium\"\n type=\"default\"\n >\n Share on LinkedIn\n </sqm-share-button>\n <sqm-share-button\n medium=\"twitter\"\n icon-slot=\"prefix\"\n size=\"medium\"\n type=\"default\"\n >\n Post about us on X\n </sqm-share-button> </sqm-portal-container\n ><sqm-portal-container\n display=\"flex\"\n slot=\"footer\"\n gap=\"small\"\n justify-content=\"center\"\n >\n <sqm-logout-current-user\n user-identification-text=\"{email}\"\n switch-user-link=\"#\"\n switch-user-text=\"not you?\"\n ></sqm-logout-current-user>\n <sqm-portal-footer\n support-email=\"support@example.com\"\n show-powered-by=\"true\"\n padding-bottom=\"x-small\"\n padding-left=\"none\"\n padding-right=\"none\"\n padding-top=\"none\"\n hide-support-text\n terms-text=\"Terms And Conditions\"\n terms-link=\"https://example.com\"\n ></sqm-portal-footer></sqm-portal-container\n ></sqm-referral-card>\n</sqm-hero>\n";
@@ -4101,16 +4119,16 @@ function DefaultTemplateView(props) {
4101
4119
  gridTemplateColumns: "repeat(9, 80px)",
4102
4120
  gridGap: "10px",
4103
4121
  } },
4104
- index.h("button", { onClick: () => index_module.$n.push("/") }, "Dashboard"),
4105
- props.leadSubmit && (index.h("button", { onClick: () => index_module.$n.push("/refer") }, "Submit a Referral")),
4106
- index.h("button", { onClick: () => index_module.$n.push("/activity") }, "Activity"),
4107
- index.h("button", { onClick: () => index_module.$n.push("/editProfile") }, "Edit Profile"),
4108
- index.h("button", { onClick: () => index_module.$n.push("/login") }, "Login"),
4109
- index.h("button", { onClick: () => index_module.$n.push("/register") }, "Register"),
4110
- index.h("button", { onClick: () => index_module.$n.push("/emailVerification") }, "Email Verification"),
4111
- index.h("button", { onClick: () => index_module.$n.push("/verifyEmail") }, "Verify Email"),
4112
- index.h("button", { onClick: () => index_module.$n.push("/forgotPassword") }, "Forgot Password"),
4113
- index.h("button", { onClick: () => index_module.$n.push("/resetPassword") }, "Reset Password")),
4122
+ index.h("button", { onClick: () => index_module.xn.push("/") }, "Dashboard"),
4123
+ props.leadSubmit && (index.h("button", { onClick: () => index_module.xn.push("/refer") }, "Submit a Referral")),
4124
+ index.h("button", { onClick: () => index_module.xn.push("/activity") }, "Activity"),
4125
+ index.h("button", { onClick: () => index_module.xn.push("/editProfile") }, "Edit Profile"),
4126
+ index.h("button", { onClick: () => index_module.xn.push("/login") }, "Login"),
4127
+ index.h("button", { onClick: () => index_module.xn.push("/register") }, "Register"),
4128
+ index.h("button", { onClick: () => index_module.xn.push("/emailVerification") }, "Email Verification"),
4129
+ index.h("button", { onClick: () => index_module.xn.push("/verifyEmail") }, "Verify Email"),
4130
+ index.h("button", { onClick: () => index_module.xn.push("/forgotPassword") }, "Forgot Password"),
4131
+ index.h("button", { onClick: () => index_module.xn.push("/resetPassword") }, "Reset Password")),
4114
4132
  index.h("br", null),
4115
4133
  index.h("div", { innerHTML: states.previewTemplate })));
4116
4134
  }
@@ -7127,6 +7145,10 @@ const Loyalty = createHookStory(() => {
7127
7145
  const { states, callbacks } = useTemplate$1(loyaltyWidget);
7128
7146
  return (index.h(DefaultTemplateView, { states: states, callbacks: callbacks, template: loyaltyWidget }));
7129
7147
  });
7148
+ const PromoCodeReferralWidget = createHookStory(() => {
7149
+ const { states, callbacks } = useTemplate$1(promoCodeReferralWidget);
7150
+ return (index.h(DefaultTemplateView, { states: states, callbacks: callbacks, template: referralWidget }));
7151
+ });
7130
7152
  const InstantAccessReferrerShareWidget = createHookStory(() => {
7131
7153
  const { states, callbacks } = useTemplate$1(instantAccessReferrerShareWidget);
7132
7154
  return index.h(TemplateView$1, { states: states, callbacks: callbacks });
@@ -7158,6 +7180,7 @@ const Widget = /*#__PURE__*/Object.freeze({
7158
7180
  ReferralWidget: ReferralWidget,
7159
7181
  MonoWidget: MonoWidget,
7160
7182
  Loyalty: Loyalty,
7183
+ PromoCodeReferralWidget: PromoCodeReferralWidget,
7161
7184
  InstantAccessReferrerShareWidget: InstantAccessReferrerShareWidget,
7162
7185
  PaypalMonoWidget: PaypalMonoWidget,
7163
7186
  PaypalReferralWidget: PaypalReferralWidget,
@@ -7251,7 +7274,9 @@ const defaultProps$2 = {
7251
7274
  callbacks: {
7252
7275
  submit: async (e) => await e,
7253
7276
  },
7254
- content: { pageLabel: "Sign in to your account" },
7277
+ content: {
7278
+ pageLabel: "Sign in to your account",
7279
+ },
7255
7280
  };
7256
7281
  const errorProps = {
7257
7282
  states: {
@@ -7263,7 +7288,9 @@ const errorProps = {
7263
7288
  callbacks: {
7264
7289
  submit: async (e) => await e,
7265
7290
  },
7266
- content: { pageLabel: "Sign in to your account" },
7291
+ content: {
7292
+ pageLabel: "Sign in to your account",
7293
+ },
7267
7294
  };
7268
7295
  const loadingProps = {
7269
7296
  states: {
@@ -7275,16 +7302,37 @@ const loadingProps = {
7275
7302
  callbacks: {
7276
7303
  submit: async (e) => await e,
7277
7304
  },
7278
- content: { pageLabel: "Sign in to your account" },
7279
- };
7280
- const Default$2 = () => index.h(ShadowViewAddon.PortalLoginView, Object.assign({}, defaultProps$2));
7305
+ content: {
7306
+ pageLabel: "Sign in to your account",
7307
+ },
7308
+ };
7309
+ const Default$3 = () => (index.h("sqm-portal-login", { showGoogleLogin: false, demoData: { ...defaultProps$2 } }));
7310
+ const IsGoogle = () => (
7311
+ // <sqm-portal-login
7312
+ // showGoogleLogin
7313
+ // demoData={{
7314
+ // ...defaultProps,
7315
+ // content: {
7316
+ // googleButton: <sl-button>Sign in with Google</sl-button>,
7317
+ // },
7318
+ // states: { ...defaultProps.states },
7319
+ // }}
7320
+ // ></sqm-portal-login>
7321
+ index.h(ShadowViewAddon.PortalLoginView, Object.assign({}, defaultProps$2, { content: {
7322
+ secondaryButton: (index.h("span", null,
7323
+ "Don't have an account?",
7324
+ " ",
7325
+ index.h("sl-button", { style: { width: "60px" }, size: "large", type: "text" }, "Register"))),
7326
+ googleButton: index.h("sl-button", null, "Sign in with Google"),
7327
+ } })));
7281
7328
  const LoginWithError = () => index.h(ShadowViewAddon.PortalLoginView, Object.assign({}, errorProps));
7282
7329
  const LoginLoading = () => index.h(ShadowViewAddon.PortalLoginView, Object.assign({}, loadingProps));
7283
7330
 
7284
7331
  const PortalLogin = /*#__PURE__*/Object.freeze({
7285
7332
  __proto__: null,
7286
7333
  'default': PortalLogin_stories,
7287
- Default: Default$2,
7334
+ Default: Default$3,
7335
+ IsGoogle: IsGoogle,
7288
7336
  LoginWithError: LoginWithError,
7289
7337
  LoginLoading: LoginLoading
7290
7338
  });
@@ -7387,7 +7435,7 @@ const slottedProps = {
7387
7435
  index.h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
7388
7436
  },
7389
7437
  };
7390
- const Default$3 = () => index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultProps$3));
7438
+ const Default$4 = () => index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultProps$3));
7391
7439
  const RegisterWithError = () => index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, errorProps$1));
7392
7440
  const RegisterLoading = () => index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, loadingProps$1));
7393
7441
  const FieldsHidden = () => {
@@ -7414,7 +7462,7 @@ const TermsAndConditions = () => (index.h(ShadowViewAddon.PortalRegisterView, Ob
7414
7462
  const PortalRegister = /*#__PURE__*/Object.freeze({
7415
7463
  __proto__: null,
7416
7464
  'default': PortalRegister_stories,
7417
- Default: Default$3,
7465
+ Default: Default$4,
7418
7466
  RegisterWithError: RegisterWithError,
7419
7467
  RegisterLoading: RegisterLoading,
7420
7468
  FieldsHidden: FieldsHidden,
@@ -7422,126 +7470,6 @@ const PortalRegister = /*#__PURE__*/Object.freeze({
7422
7470
  TermsAndConditions: TermsAndConditions
7423
7471
  });
7424
7472
 
7425
- const PortalRegistrationForm_stories = {
7426
- title: "Components/Microsite Register Form New",
7427
- };
7428
- const defaultProps$4 = {
7429
- states: {
7430
- error: "",
7431
- loading: false,
7432
- confirmPassword: true,
7433
- hideInputs: false,
7434
- loginPath: "/login",
7435
- },
7436
- callbacks: {
7437
- submit: () => console.log("Submit!"),
7438
- inputFunction: () => { },
7439
- },
7440
- refs: {
7441
- formRef: {},
7442
- },
7443
- content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
7444
- };
7445
- const errorProps$2 = {
7446
- states: {
7447
- error: "Something went wrong. Please try again.",
7448
- loading: false,
7449
- confirmPassword: true,
7450
- hideInputs: false,
7451
- loginPath: "/login",
7452
- },
7453
- callbacks: {
7454
- submit: () => console.log("Submit!"),
7455
- inputFunction: () => { },
7456
- },
7457
- refs: {
7458
- formRef: {},
7459
- },
7460
- content: {
7461
- pageLabel: "Register",
7462
- confirmPasswordLabel: "Confirm Password",
7463
- },
7464
- };
7465
- const loadingProps$2 = {
7466
- states: {
7467
- error: "",
7468
- loading: true,
7469
- confirmPassword: true,
7470
- hideInputs: false,
7471
- loginPath: "/login",
7472
- },
7473
- callbacks: {
7474
- submit: () => console.log("Submit!"),
7475
- inputFunction: () => { },
7476
- },
7477
- refs: {
7478
- formRef: {},
7479
- },
7480
- content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
7481
- };
7482
- const slottedProps$1 = {
7483
- states: {
7484
- error: "",
7485
- loading: false,
7486
- confirmPassword: true,
7487
- hideInputs: false,
7488
- loginPath: "/login",
7489
- },
7490
- callbacks: {
7491
- submit: () => console.log("Submit!"),
7492
- inputFunction: () => { },
7493
- },
7494
- refs: {
7495
- formRef: {},
7496
- },
7497
- content: {
7498
- pageLabel: "Register",
7499
- confirmPasswordLabel: "Confirm Password",
7500
- formData: (index.h("div", null,
7501
- index.h("sl-input", { style: { marginBottom: "var(--sl-spacing-x-large)" }, exportparts: "label: input-label, base: input-base", label: "Slotted Input", required: true }),
7502
- index.h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
7503
- },
7504
- };
7505
- const Default$4 = () => index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$4));
7506
- const RegisterWithError$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, errorProps$2)));
7507
- const RegisterLoading$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, loadingProps$2)));
7508
- const FieldsHidden$1 = () => {
7509
- return (index.h("sqm-portal-register", { demoData: {
7510
- states: {
7511
- error: "",
7512
- loading: true,
7513
- registrationFormState: {},
7514
- confirmPassword: true,
7515
- hideInputs: true,
7516
- loginPath: "/login",
7517
- },
7518
- } }));
7519
- };
7520
- const SlottedInputs$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, slottedProps$1)));
7521
- const RegisterWithMarketingEmailsCheckbox = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$4, { content: {
7522
- ...defaultProps$4.content,
7523
- emailOptIn: (index.h("sqm-checkbox-field", { checkboxLabel: "I would like to receive marketing and promotional emails for this referral program" })),
7524
- } })));
7525
- const TermsAndConditions$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$4, { content: {
7526
- ...defaultProps$4.content,
7527
- terms: (index.h("p", null,
7528
- "By signing up you agree to the",
7529
- " ",
7530
- index.h("a", { href: "https://example.com", target: "_blank" }, "Terms and Conditions"))),
7531
- } })));
7532
-
7533
- const NewPortalRegistrationForm = /*#__PURE__*/Object.freeze({
7534
- __proto__: null,
7535
- 'default': PortalRegistrationForm_stories,
7536
- Default: Default$4,
7537
- RegisterWithError: RegisterWithError$1,
7538
- RegisterLoading: RegisterLoading$1,
7539
- FieldsHidden: FieldsHidden$1,
7540
- SlottedInputs: SlottedInputs$1,
7541
- RegisterWithMarketingEmailsCheckbox: RegisterWithMarketingEmailsCheckbox,
7542
- TermsAndConditions: TermsAndConditions$1
7543
- });
7544
-
7545
7473
  const scenario$6 = "@author:derek\n@owner:ian\nFeature: Forgot Password\n\n @motivating\n Scenario: Users can request to reset their password\n Given a user enters their email address\n And that email address is linked to a previously created account\n When they click \"Reset Password\"\n Then the button enters a loading state\n When the password reset email is sent\n Then a confirmation banner is shown stating a password reset email was sent\n\n @motivating\n Scenario: Users are notified if sending their password reset email fails\n Given a user enters their email address\n And that email address is linked to a previously created account\n When they click \"Reset Password\"\n Then the button enters a loading state\n When the password reset email fails to send\n Then the user does not receive a password reset email\n And an error banner is shown stating that they should try again\n\n @motivating\n @landmine\n Scenario: If the input email is not associated to an account a success banner is shown but an email is not be sent\n Given the user entered an email address that is not associated to an accoun\n When they click \"Reset Password\"\n Then the button enters a loading state\n But no email is sent\n And a success banner is shown stating a password reset email was sent if the given email was associated to an account\n\n @motivating\n Scenario: Users can resend password reset email\n Given a user had previously requested to reset their password\n When they enter their email address\n And that email address is linked to a previously created account\n And they click \"Reset Password\"\n Then the user receives a second password reset email\n And a success banner is shown stating that their email was sent\n\n @motivating\n Scenario Outline: The email link can be configured to redirect users to a specific base path but defaults to \"/resetPassword\"\n Given a user viewing the password reset component\n And the component <mayHave> \"redirect-path\" with <value>\n When they request a password reset email\n And they click the link in the email\n Then they are redirected to <redirectPath>\n Examples:\n | mayHave | value | redirectPath |\n | doesn't have | N/A | /resetPassword |\n | has | /resetMyPassword | /resetMyPassword |\n\n @minutia\n Scenario Outline: Navigation back to the login page can be customized but defaults to \"/login\"\n Given a user viewing the password reset component\n And the component <mayHave> \"login-path\" with <value>\n Then they see a \"Sign In\" text button\n When they click \"Sign In\"\n Then they are redirected to <redirectPath>\n Examples:\n | mayHave | value | redirectPath |\n | doesn't have | N/A | /login |\n | has | /signin | /signin |";
7546
7474
 
7547
7475
  const PortalForgotPassword_stories = {
@@ -7550,7 +7478,7 @@ const PortalForgotPassword_stories = {
7550
7478
  scenario: scenario$6,
7551
7479
  },
7552
7480
  };
7553
- const defaultProps$5 = {
7481
+ const defaultProps$4 = {
7554
7482
  states: {
7555
7483
  error: "",
7556
7484
  loading: false,
@@ -7565,7 +7493,7 @@ const defaultProps$5 = {
7565
7493
  messageSlot: "Enter your email below to receive a password reset link.",
7566
7494
  },
7567
7495
  };
7568
- const errorProps$3 = {
7496
+ const errorProps$2 = {
7569
7497
  states: {
7570
7498
  error: "Something went wrong. Please try again.",
7571
7499
  loading: false,
@@ -7580,7 +7508,7 @@ const errorProps$3 = {
7580
7508
  messageSlot: "Enter your email below to receive a password reset link.",
7581
7509
  },
7582
7510
  };
7583
- const loadingProps$3 = {
7511
+ const loadingProps$2 = {
7584
7512
  states: {
7585
7513
  error: "",
7586
7514
  loading: true,
@@ -7610,9 +7538,9 @@ const successProps = {
7610
7538
  messageSlot: "Enter your email below to receive a password reset link.",
7611
7539
  },
7612
7540
  };
7613
- const Default$5 = () => index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, defaultProps$5));
7614
- const ForgotPasswordWithError = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, errorProps$3)));
7615
- const ForgotPasswordLoading = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, loadingProps$3)));
7541
+ const Default$5 = () => index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, defaultProps$4));
7542
+ const ForgotPasswordWithError = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, errorProps$2)));
7543
+ const ForgotPasswordLoading = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, loadingProps$2)));
7616
7544
  const ForgotPasswordSuccess = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, successProps)));
7617
7545
 
7618
7546
  const PortalForgotPassword = /*#__PURE__*/Object.freeze({
@@ -7651,12 +7579,12 @@ const defaultStates = {
7651
7579
  loadingVerification: false,
7652
7580
  countdown: 10,
7653
7581
  };
7654
- const defaultProps$6 = {
7582
+ const defaultProps$5 = {
7655
7583
  states: defaultStates,
7656
7584
  callbacks: defaultCallbacks,
7657
7585
  content: defaultContent,
7658
7586
  };
7659
- const errorProps$4 = {
7587
+ const errorProps$3 = {
7660
7588
  states: {
7661
7589
  ...defaultStates,
7662
7590
  error: "Something went wrong. Please try again.",
@@ -7664,7 +7592,7 @@ const errorProps$4 = {
7664
7592
  callbacks: defaultCallbacks,
7665
7593
  content: defaultContent,
7666
7594
  };
7667
- const loadingProps$4 = {
7595
+ const loadingProps$3 = {
7668
7596
  states: {
7669
7597
  ...defaultStates,
7670
7598
  loading: true,
@@ -7689,9 +7617,9 @@ const loadingVerificationProps = {
7689
7617
  callbacks: defaultCallbacks,
7690
7618
  content: defaultContent,
7691
7619
  };
7692
- const Default$6 = () => index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, defaultProps$6));
7693
- const EmailVerificationWithError = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, errorProps$4)));
7694
- const EmailVerificationLoading = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, loadingProps$4)));
7620
+ const Default$6 = () => index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, defaultProps$5));
7621
+ const EmailVerificationWithError = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, errorProps$3)));
7622
+ const EmailVerificationLoading = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, loadingProps$3)));
7695
7623
  const EmailVerificationCheckingVerification = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, loadingVerificationProps)));
7696
7624
  const EmailVerificationSuccess = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, successProps$1)));
7697
7625
 
@@ -7713,7 +7641,7 @@ const PortalResetPassword_stories = {
7713
7641
  scenario: scenario$8,
7714
7642
  },
7715
7643
  };
7716
- const defaultProps$7 = {
7644
+ const defaultProps$6 = {
7717
7645
  states: {
7718
7646
  error: "",
7719
7647
  loading: false,
@@ -7759,7 +7687,7 @@ const defaultPropsNoConfirm = {
7759
7687
  failed: () => console.log("failed"),
7760
7688
  },
7761
7689
  };
7762
- const errorProps$5 = {
7690
+ const errorProps$4 = {
7763
7691
  states: {
7764
7692
  error: "Something went wrong. Please try again.",
7765
7693
  loading: false,
@@ -7782,7 +7710,7 @@ const errorProps$5 = {
7782
7710
  failed: () => console.log("failed"),
7783
7711
  },
7784
7712
  };
7785
- const loadingProps$5 = {
7713
+ const loadingProps$4 = {
7786
7714
  states: {
7787
7715
  error: "",
7788
7716
  loading: true,
@@ -7851,10 +7779,10 @@ const validatingCodeProps = {
7851
7779
  failed: () => console.log("failed"),
7852
7780
  },
7853
7781
  };
7854
- const Default$7 = () => index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, defaultProps$7));
7782
+ const Default$7 = () => index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, defaultProps$6));
7855
7783
  const DefaultWithoutConfirmField = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, defaultPropsNoConfirm)));
7856
- const ResetPasswordWithError = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, errorProps$5)));
7857
- const ResetPasswordLoading = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, loadingProps$5)));
7784
+ const ResetPasswordWithError = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, errorProps$4)));
7785
+ const ResetPasswordLoading = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, loadingProps$4)));
7858
7786
  const ResetPasswordSuccess = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, successProps$2)));
7859
7787
  const CodeValidating = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, validatingCodeProps)));
7860
7788
 
@@ -7877,7 +7805,7 @@ const PortalVerifyEmail_stories = {
7877
7805
  scenario: scenario$9,
7878
7806
  },
7879
7807
  };
7880
- const errorProps$6 = {
7808
+ const errorProps$5 = {
7881
7809
  states: {
7882
7810
  error: "Something went wrong. Please try again.",
7883
7811
  loading: false,
@@ -7911,7 +7839,7 @@ const verifiedProps = {
7911
7839
  },
7912
7840
  content: {},
7913
7841
  };
7914
- const EmailVerificationWithError$1 = () => (index.h(sqmPortalVerifyEmailView.PortalVerifyEmailView, Object.assign({}, errorProps$6)));
7842
+ const EmailVerificationWithError$1 = () => (index.h(sqmPortalVerifyEmailView.PortalVerifyEmailView, Object.assign({}, errorProps$5)));
7915
7843
  const EmailVerificationSuccess$1 = () => (index.h(sqmPortalVerifyEmailView.PortalVerifyEmailView, Object.assign({}, verifiedProps)));
7916
7844
 
7917
7845
  const PortalVerifyEmail = /*#__PURE__*/Object.freeze({
@@ -8041,7 +7969,7 @@ const ChangePassword_stories = {
8041
7969
  scenario: scenario$a,
8042
7970
  },
8043
7971
  };
8044
- const defaultProps$8 = {
7972
+ const defaultProps$7 = {
8045
7973
  states: {
8046
7974
  open: false,
8047
7975
  loading: false,
@@ -8085,7 +8013,7 @@ const openProps = {
8085
8013
  submit: (e) => console.log("Submit", e),
8086
8014
  },
8087
8015
  };
8088
- const errorProps$7 = {
8016
+ const errorProps$6 = {
8089
8017
  states: {
8090
8018
  open: true,
8091
8019
  loading: false,
@@ -8129,7 +8057,7 @@ const passwordErrorProps = {
8129
8057
  submit: (e) => console.log("Submit", e),
8130
8058
  },
8131
8059
  };
8132
- const loadingProps$6 = {
8060
+ const loadingProps$5 = {
8133
8061
  states: {
8134
8062
  open: true,
8135
8063
  loading: true,
@@ -8173,11 +8101,11 @@ const successProps$3 = {
8173
8101
  submit: (e) => console.log("Submit", e),
8174
8102
  },
8175
8103
  };
8176
- const Default$9 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, defaultProps$8));
8104
+ const Default$9 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, defaultProps$7));
8177
8105
  const Open = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, openProps));
8178
- const Error$2 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, errorProps$7));
8106
+ const Error$2 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, errorProps$6));
8179
8107
  const PaswordError = () => (index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, passwordErrorProps)));
8180
- const Loading$1 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, loadingProps$6));
8108
+ const Loading$1 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, loadingProps$5));
8181
8109
  const Success = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, successProps$3));
8182
8110
 
8183
8111
  const ChangePassword = /*#__PURE__*/Object.freeze({
@@ -8194,7 +8122,7 @@ const ChangePassword = /*#__PURE__*/Object.freeze({
8194
8122
  const PortalProfile_stories = {
8195
8123
  title: "Components/Microsite Profile",
8196
8124
  };
8197
- const defaultProps$9 = {
8125
+ const defaultProps$8 = {
8198
8126
  states: {
8199
8127
  success: false,
8200
8128
  loading: false,
@@ -8266,7 +8194,7 @@ const noCountry = {
8266
8194
  onChange: (e) => console.log(e),
8267
8195
  },
8268
8196
  };
8269
- const loadingProps$7 = {
8197
+ const loadingProps$6 = {
8270
8198
  states: {
8271
8199
  success: false,
8272
8200
  loading: true,
@@ -8338,7 +8266,7 @@ const disabledProps = {
8338
8266
  onChange: (e) => console.log(e),
8339
8267
  },
8340
8268
  };
8341
- const errorProps$8 = {
8269
+ const errorProps$7 = {
8342
8270
  states: {
8343
8271
  success: false,
8344
8272
  loading: false,
@@ -8410,11 +8338,11 @@ const successProps$4 = {
8410
8338
  onChange: (e) => console.log(e),
8411
8339
  },
8412
8340
  };
8413
- const Default$a = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, defaultProps$9));
8341
+ const Default$a = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, defaultProps$8));
8414
8342
  const DefaultNoCountry = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, noCountry));
8415
- const Loading$2 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, loadingProps$7));
8343
+ const Loading$2 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, loadingProps$6));
8416
8344
  const Disabled$1 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, disabledProps));
8417
- const Error$3 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, errorProps$8));
8345
+ const Error$3 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, errorProps$7));
8418
8346
  const Success$1 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, successProps$4));
8419
8347
 
8420
8348
  const PortalProfile = /*#__PURE__*/Object.freeze({
@@ -8722,7 +8650,6 @@ const PayoutFailed = () => {
8722
8650
  },
8723
8651
  ], statusText: statusText, statusLongText: statusLongText, fuelTankText: "Your code is", rewardReceivedText: "Reward received on", expiringText: "Expiring in", pendingForText: "{status} for {date}", deniedHelpText: "Contact support if you think this is a mistake." }));
8724
8652
  };
8725
- // AL: TODO payout cancelled
8726
8653
  const PayoutCancelled = () => {
8727
8654
  return (index.h("sqm-referral-table-rewards-cell", { rewards: [
8728
8655
  {
@@ -10169,7 +10096,7 @@ const portalTemplate = "<sqm-portal-frame>\n <a slot=\"header\" href=\"/\">\n
10169
10096
 
10170
10097
  const portalLeadSubmitTemplate = "<sqm-portal-frame>\n <a slot=\"header\" href=\"/\">\n <sqm-text style=\"height: 60px\">\n <img\n style=\"height: 60px\"\n src=\"https://res.cloudinary.com/saasquatch/image/upload/v1634255445/squatch-assets/Copy_of_saasquatch-logo-tree-large-horizontal.png\"\n />\n </sqm-text>\n </a>\n <sqb-program-section program-id=\"referral-program\">\n <sqm-router>\n <template\n path=\"/:path(\\bregister\\b|\\bemailVerification\\b|\\blogin\\b|\\bverifyEmail\\b|\\bforgotPassword\\b|\\bresetPassword\\b|\\blogout\\b)\"\n >\n <sqm-hero\n background=\"https://images.unsplash.com/photo-1599676821464-3555954838dc?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1939&q=80\"\n >\n <sqm-router>\n <template path=\"/register\">\n <sqm-portal-register>\n <sqm-name-fields slot=\"formData\"></sqm-name-fields>\n </sqm-portal-register>\n </template>\n\n <template path=\"/emailVerification\">\n <sqm-portal-protected-route\n redirect-to=\"/login\"\n ></sqm-portal-protected-route>\n <sqm-portal-email-verification></sqm-portal-email-verification>\n </template>\n\n <template path=\"/login\">\n <sqm-portal-login></sqm-portal-login>\n </template>\n\n <template path=\"/verifyEmail\">\n <sqm-portal-verify-email></sqm-portal-verify-email>\n </template>\n\n <template path=\"/forgotPassword\">\n <sqm-portal-forgot-password\n email-label=\"Business Email\"\n ></sqm-portal-forgot-password>\n </template>\n\n <template path=\"/resetPassword\">\n <sqm-portal-reset-password\n confirm-password=\"true\"\n ></sqm-portal-reset-password>\n </template>\n <template path=\"/logout\">\n <sqm-portal-logout next-page=\"/login\"></sqm-portal-logout>\n </template>\n </sqm-router>\n </sqm-hero>\n </template>\n </sqm-router>\n <sqm-router>\n <template path=\"/:path(\\bactivity\\b|\\beditProfile\\b|\\brefer\\b)?\">\n <sqm-divided-layout\n direction=\"row\"\n style=\"\n border-top: 1px solid #eaeaea;\n border-bottom: 1px solid #eaeaea;\n \"\n >\n <sqm-navigation-sidebar>\n <sqm-navigation-sidebar-item\n path=\"/\"\n icon=\"house\"\n label=\"Dashboard\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/refer\"\n icon=\"inbox\"\n label=\"Submit A Lead\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/activity\"\n icon=\"bar-chart\"\n label=\"Activity\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/editProfile\"\n icon=\"person\"\n label=\"Edit Profile\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/logout\"\n icon=\"box-arrow-right\"\n label=\"Logout\"\n ></sqm-navigation-sidebar-item>\n </sqm-navigation-sidebar>\n <sqm-divided-layout direction=\"column\">\n <sqm-router>\n <template path=\"/\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqb-widget\n widget-type=\"p/referral-program/w/referrerWidget\"\n track-loads=\"true\"\n ></sqb-widget>\n </template>\n <template path=\"/editProfile\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-profile></sqm-portal-profile> </sqm-portal-container\n ><sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-change-password></sqm-portal-change-password>\n </sqm-portal-container>\n </template>\n <template path=\"/refer\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-referral-iframe></sqm-referral-iframe>\n </template>\n <template path=\"/activity\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container\n direction=\"column\"\n padding=\"xxx-large\"\n gap=\"xxx-large\"\n >\n <sqm-text> <h1>Activity</h1></sqm-text>\n <sqm-stat-container space=\"xxxx-large\"\n ><sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/referralsCount\"\n ><sqm-text><p>Referrals</p></sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardsCountFiltered/AVAILABLE\"\n ><sqm-text><p>Rewards Earned</p></sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardBalance/CREDIT/CENTS\"\n ><sqm-text><p>Reward Balance</p></sqm-text></sqm-big-stat\n >\n </sqm-stat-container>\n <sqm-referral-table>\n <sqm-referral-table-user-column></sqm-referral-table-user-column>\n <sqm-referral-table-rewards-column></sqm-referral-table-rewards-column>\n <sqm-referral-table-status-column></sqm-referral-table-status-column>\n <sqm-referral-table-date-column\n column-title=\"Referred\"\n date-shown=\"dateReferralStarted\"\n ></sqm-referral-table-date-column> </sqm-referral-table\n ></sqm-portal-container>\n </template>\n </sqm-router>\n </sqm-divided-layout>\n </sqm-divided-layout>\n </template>\n </sqm-router>\n </sqb-program-section>\n <sqm-portal-footer\n slot=\"footer\"\n support-email=\"support@example.com\"\n terms-link=\"https://example.com\"\n faq-link=\"https://example.com\"\n terms-text=\"Terms And Conditions\"\n faq-text=\"FAQ\"\n show-powered-by=\"true\"\n ></sqm-portal-footer>\n</sqm-portal-frame>\n";
10171
10098
 
10172
- const taxAndCashTemplate = "<sqm-portal-frame>\n <a slot=\"header\" href=\"/\">\n <sqm-text style=\"height: 60px\">\n <img\n style=\"height: 60px\"\n src=\"https://res.cloudinary.com/saasquatch/image/upload/v1634255445/squatch-assets/Copy_of_saasquatch-logo-tree-large-horizontal.png\"\n />\n </sqm-text>\n </a>\n <sqb-program-section program-id=\"referral-program\">\n <sqm-router>\n <template\n path=\"/:path(\\bregister\\b|\\bemailVerification\\b|\\blogin\\b|\\bverifyEmail\\b|\\bforgotPassword\\b|\\bresetPassword\\b|\\blogout\\b)\"\n >\n <sqm-hero\n background=\"https://images.unsplash.com/photo-1599676821464-3555954838dc?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1939&q=80\"\n >\n <sqm-router>\n <template path=\"/register\">\n <sqm-portal-register>\n <sqm-name-fields slot=\"formData\"></sqm-name-fields>\n </sqm-portal-register>\n </template>\n\n <template path=\"/emailVerification\">\n <sqm-portal-protected-route\n redirect-to=\"/login\"\n ></sqm-portal-protected-route>\n <sqm-portal-email-verification></sqm-portal-email-verification>\n </template>\n\n <template path=\"/login\">\n <sqm-portal-login></sqm-portal-login>\n </template>\n\n <template path=\"/verifyEmail\">\n <sqm-portal-verify-email></sqm-portal-verify-email>\n </template>\n\n <template path=\"/forgotPassword\">\n <sqm-portal-forgot-password\n email-label=\"Business Email\"\n ></sqm-portal-forgot-password>\n </template>\n\n <template path=\"/resetPassword\">\n <sqm-portal-reset-password\n confirm-password=\"true\"\n ></sqm-portal-reset-password>\n </template>\n <template path=\"/logout\">\n <sqm-portal-logout next-page=\"/login\"></sqm-portal-logout>\n </template>\n </sqm-router>\n </sqm-hero>\n </template>\n </sqm-router>\n <sqm-router>\n <template path=\"/:path(\\bactivity\\b|\\beditProfile\\b|\\brefer\\b)?\">\n <sqm-divided-layout\n direction=\"row\"\n style=\"\n border-top: 1px solid #eaeaea;\n border-bottom: 1px solid #eaeaea;\n \"\n >\n <sqm-navigation-sidebar>\n <sqm-navigation-sidebar-item\n path=\"/\"\n icon=\"house\"\n label=\"Dashboard\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/activity\"\n icon=\"bar-chart\"\n label=\"Activity\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/editProfile\"\n icon=\"person\"\n label=\"Edit Profile\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/taxAndCash\"\n icon=\"file-earmark-text\"\n label=\"Tax & Payout Settings\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/logout\"\n icon=\"box-arrow-right\"\n label=\"Logout\"\n ></sqm-navigation-sidebar-item>\n </sqm-navigation-sidebar>\n <sqm-divided-layout direction=\"column\" content-area-width=\"1200px\">\n <sqm-router>\n <template path=\"/\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqb-widget\n widget-type=\"p/referral-program/w/referrerWidget\"\n track-loads=\"true\"\n ></sqb-widget>\n </template>\n <template path=\"/editProfile\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-profile></sqm-portal-profile> </sqm-portal-container\n ><sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-change-password></sqm-portal-change-password>\n </sqm-portal-container>\n </template>\n <template path=\"/refer\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-referral-iframe></sqm-referral-iframe>\n </template>\n <template path=\"/activity\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container\n direction=\"column\"\n padding=\"xxx-large\"\n gap=\"xxx-large\"\n >\n <sqm-text>\n <h1>Activity</h1>\n </sqm-text>\n <sqm-stat-container space=\"xxxx-large\"\n ><sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/referralsCount\"\n ><sqm-text>\n <p>Referrals</p>\n </sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardsCountFiltered/AVAILABLE\"\n ><sqm-text>\n <p>Rewards Earned</p>\n </sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardBalance/CREDIT/CENTS\"\n ><sqm-text>\n <p>Reward Balance</p>\n </sqm-text></sqm-big-stat\n >\n </sqm-stat-container>\n <sqm-referral-table>\n <sqm-referral-table-user-column></sqm-referral-table-user-column>\n <sqm-referral-table-rewards-column></sqm-referral-table-rewards-column>\n <sqm-referral-table-status-column></sqm-referral-table-status-column>\n <sqm-referral-table-date-column\n column-title=\"Referred\"\n date-shown=\"dateReferralStarted\"\n ></sqm-referral-table-date-column> </sqm-referral-table\n ></sqm-portal-container>\n </template>\n <template path=\"/taxAndCash\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-tax-and-cash\n step-1_first-name=\"First name\"\n step-1_last-name=\"Last name\"\n step-1_email=\"Email\"\n step-1_country=\"Country\"\n step-1_phone-number=\"Phone number\"\n step-1_address=\"Address\"\n step-1_city=\"City\"\n step-1_state=\"State\"\n step-1_province=\"Province\"\n step-1_region=\"Region\"\n step-1_postal-code=\"Postal code\"\n step-1_currency=\"Currency\"\n step-1_currency-help-text=\"Choose your preferred payout currency\"\n step-1_allow-banking-collection=\"I have read the {termsAndConditionsLink} and allow impact.com to collect my tax and banking information\"\n step-1_personal-information=\"Personal Information\"\n step-1_terms-and-conditions-label=\"terms and conditions\"\n step-1_terms-and-conditions-link=\"/payout-terms-and-conditions\"\n step-1_search-for-currency-text=\"Search for currency..\"\n step-2_indirect-tax=\"Indirect Tax\"\n step-2_indirect-tax-description=\"Indirect taxes (e.g. VAT, HST, GST) are transaction based taxes often applied to goods and services. Service providers are typically required to register with their tax authority and collect these taxes on behalf governments.\"\n step-2_indirect-tax-details=\"Indirect tax details\"\n step-2_other-region=\"Registered for indirect tax\"\n step-2_other-region-subtext=\"If you’ve registered with your tax authority, add your information to stay tax compliant.\"\n step-2_not-registered=\"Not registered for indirect tax\"\n step-2_not-registered-subtext=\"If you’ve never set up indirect tax with your tax authority, then you’re likely not considered registered.\"\n step-2_selected-region=\"Country / region of indirect tax\"\n step-2_indirect-tax-number=\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}}\"\n step-2_province=\"Province\"\n step-2_indirect-tax-number-error=\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}} is required\"\n step-2_qst-number=\"QST number\"\n step-2_is-registered-q-s-t=\"I am registered for QST Tax\"\n step-2_is-registered-sub-region-income-tax=\"I am an individual registered for Income Tax purposes in Spain, and withholding tax will apply to any payments made to me.\"\n step-2_sub-region=\"Sub-region\"\n step-2_sub-region-tax-number-label=\"Income Tax Number\"\n step-2_cannot-change-info-alert=\"Changes to your personal and indirect tax information can only be made through our Support team after you complete this step. Make sure these are correct before continuing.\"\n step-3_tax-form=\"Tax form\"\n step-3_tax-form-label=\"{documentType} Tax Form\"\n step-3_participant-type=\"Participant type\"\n step-3_business-entity=\"I represent a business\"\n step-3_individual-participant=\"I am an individual participant\"\n step-3_tax-form-description=\"Participants based in the US need to submit a {documentType} form.\"\n step-3_tax-form-description-individual-participant=\"Participants residing outside of the US, joining the referral program of a US-based company, need to submit a {documentType} form.\"\n step-3_tax-form-description-business-entity=\"Participants residing outside of the US who represent a business entity need to submit a {documentType} form.\"\n step-3_docusign-expired=\"For your security and privacy, we automatically end your session after 20 minutes of inactivity. Please refresh and re-enter your tax information to continue.\"\n step-3_docusign-session-warning=\"For your security, we automatically end your session when you have not interacted with the form after 20 minutes.\"\n step-3_docusign-error=\"There was a problem displaying this form. Please refresh the page. If this problem continues, contact Support.\"\n step-3_refresh-button=\"Refresh Page\"\n step-3_exit-button=\"Exit\"\n step-4_tax-and-payouts=\"Payouts\"\n step-4_directly-to-bank-account=\"Directly to my bank account\"\n step-4_to-pay-pal-account=\"PayPal (2% processing fee capped to {feeCap})\"\n step-4_payment-schedule-balance-threshold=\"Pay me when my balance reaches a threshold\"\n step-4_payment-schedule-fixed-day=\"Pay me on a fixed day of the month\"\n step-4_payment-day-select-label=\"Payment Day\"\n step-4_payment-threshold-select-label=\"Payment threshold\"\n step-4_payment-day-first-of-month-label-text=\"1st of the month\"\n step-4_payment-day-fifteenth-of-month-label-text=\"15th of the month\"\n step-4_payment-method=\"Payment method\"\n step-4_payment-schedule=\"Payment schedule\"\n step-4_payment-method-subtext=\"Payouts will be sent from our referral program provider, impact.com.\"\n step-4_pay-pal-input-label=\"PayPal email\"\n step-4_bank-location-label=\"Bank country location\"\n step-4_beneficiary-account-name-label=\"Beneficiary account name\"\n step-4_bank-account-type-label=\"Bank account type\"\n step-4_checking-select-item-label=\"Checking\"\n step-4_savings-select-item-label=\"Savings\"\n step-4_bank-account-number-label=\"Bank account number\"\n step-4_iban-label=\"IBAN\"\n step-4_swift-code-label=\"SWIFT code\"\n step-4_routing-code-label=\"{bankCountry, select, AU {BSB number} CA {Routing number} CZ {Bank code} HK {Clearing code} SG {Clearing code} US {ABA routing number} NZ {BSB number} ZA {Bank/Branch number} IN {IFSC} CNY {CNAPS} other {Routing code} }\"\n step-4_bank-name-label=\"Bank name\"\n step-4_classification-entity-label=\"Classification entity\"\n step-4_business-select-item-label=\"Business\"\n step-4_individual-select-item-label=\"Individual\"\n step-4_foreign-select-item-label=\"Foreign\"\n step-4_classification-c-p-f-label=\"Classification CPF\"\n step-4_patronymic-name-label=\"Patronymic name\"\n step-4_vo-code-label=\"VO code\"\n step-4_agency-code-label=\"Agency code\"\n step-4_branch-code-label=\"Branch code\"\n step-4_classification-label=\"Classification\"\n step-4_tax-payer-id-label=\"Beneficiary INN\"\n step-4-bank-address-label=\"Bank address\"\n step-4_bank-city-label=\"Bank city\"\n step-4_bank-state-label=\"Bank Province / State\"\n step-4_bank-postal-code-label=\"Bank postal code\"\n step-4_eft-withdrawal-label=\"EFT Withdrawal (free)\"\n step-4_fx-wire-processing-fee-label=\"FX Wire (Processing Fee {currency}{defaultFxFee}.00)\"\n dashboard_status-text-active=\"Active\"\n dashboard_status-text-not-active=\"Invalid Tax Form\"\n dashboard_status-text-not-verified=\"Not Verified\"\n dashboard_badge-text-submitted-on=\"Submitted on {dateSubmitted}.\"\n dashboard_badge-text-submitted-on-w-8=\"Submitted on {dateSubmitted}. Valid for three years after submission.\"\n dashboard_badge-text-awaiting-review=\"Awaiting review. Submitted on {dateSubmitted}.\"\n dashboard_tax-alert-header-not-active-w-9=\"Your W9 tax form has personal information that doesn’t match your profile\"\n dashboard_tax-alert-header-not-active-w-8=\"{documentType} tax form is invalid\"\n dashboard_tax-alert-not-active-message-w-9=\"Please resubmit a new {documentType} form.\"\n dashboard_tax-alert-not-active-message-w-8=\"Your tax form may have expired or has personal information that doesn’t match your profile. Please submit a new {documentType} form.\"\n dashboard_invalid-form=\"Make sure your information is correct and submit new form.\"\n dashboard_banking-information-section-header=\"Payout Information\"\n dashboard_tax-document-section-header=\"Tax documents\"\n dashboard_tax-document-section-sub-header=\"{documentType} tax form\"\n dashboard_no-form-needed-subtext=\"Tax documents are only required if you are based in the US or joining the referral program of a US based brand.\"\n dashboard_indirect-tax-info-section-header=\"Indirect tax\"\n dashboard_indirect-tax-info-spain=\"Registered in {country}, {subRegion}\"\n dashboard_indirect-tax-info-other-country=\"Registered in {country}\"\n dashboard_indirect-tax-info-canada=\"Registered in {province}, {country}\"\n dashboard_indirect-tax-tooltip-support=\"To make changes to your indirect tax information, please contact Support.\"\n dashboard_indirect-tax-details=\"{indirectTaxType} number: {indirectTaxNumber}\"\n dashboard_new-form-button=\"Submit new form\"\n dashboard_edit-payment-information-button=\"Edit Payout Information\"\n dashboard_not-registered-for-tax=\"Not registered for indirect tax. If you’ve previously registered with your tax authority, contact Support to add your information to stay tax compliant.\"\n dashboard_qst-number=\"QST number: {qstNumber}\"\n dashboard_sub-region-tax-number=\"Income tax number: {subRegionTaxNumber}\"\n dashboard_status-badge-text=\"{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} }\"\n dashboard_threshold-payout-text=\"Next payout occurs when balance is {thresholdBalance}\"\n dashboard_account-text=\"Account\"\n dashboard_invoice-column-title=\"Invoice\"\n dashboard_date-column-title=\"Date\"\n dashboard_earnings-column-title=\"Earnings\"\n dashboard_indirect-tax-column-title=\"Indirect tax\"\n dashboard_payout-from-impact=\"Your balance may take up to 24 hours to update. Payouts will be sent from our referral program provider, impact.com.\"\n dashboard_earnings-after-tax-column-title=\"Earnings after tax\"\n dashboard_error-title-text=\"Your payout is on hold \"\n dashboard_error-description-text=\"If you’ve recently added your payout information, please wait while we verify your information. If it’s still on hold after a few days, please contact Support or check your inbox for an email from our referral program provider, impact.com.\"\n dashboard_payout-missing-information-text=\"Missing banking information, go to Impact.com to resolve.\"\n dashboard_invoice-description=\"View and download your invoices to report your earnings and stay tax compliant.\"\n dashboard_invoice-prev-label=\"Prev\"\n dashboard_invoice-more-label=\"Next\"\n dashboard_invoice-header=\"Invoices\"\n dashboard_invoice-empty-state-header=\"View your invoice details\"\n dashboard_invoice-empty-state-text=\"Refer a friend to view the status of your invoices and rewards earned\"\n dashboard_replace-tax-form-modal-header=\"Replace existing tax form\"\n dashboard_replace-tax-form-modal-body-text=\"Submitting a new tax form will remove your existing form. Make sure to sign and complete your new tax form to prevent any issues with your next payout.\"\n form-step=\"Step {step} of {count}\"\n general-error-title=\"There was a problem submitting your information\"\n general-error-description=\"Please review your information and try again. If this problem continues, contact Support.\"\n field-required-error=\"{fieldName} is required\"\n invalid-character-error=\"{fieldName} includes characters that aren't supported.\"\n field-invalid-error=\"{fieldName} is invalid\"\n continue-button=\"Continue\"\n back-button=\"Back\"\n cancel-button=\"Cancel\"\n is-partner-alert-header=\"An account with this email already exists with our referral program provider, impact.com\"\n is-partner-alert-description=\"If you don’t recognize this referral program provider or believe this is a mistake, please contact Support or sign up for this referral program with a different email.\"\n search-for-country-text=\"Search for country..\"\n loading-error-alert-header=\"There was a problem loading your form\"\n loading-error-alert-description=\"Please refresh the page and try again. If this problem continues, contact Support.\"\n tax-and-payouts-description=\"Submit your tax documents and add your banking information to receive your rewards.\"\n ></sqm-tax-and-cash>\n </template>\n </sqm-router>\n </sqm-divided-layout>\n </sqm-divided-layout>\n </template>\n </sqm-router>\n </sqb-program-section>\n <sqm-portal-footer\n slot=\"footer\"\n support-email=\"support@example.com\"\n terms-link=\"https://example.com\"\n faq-link=\"https://example.com\"\n terms-text=\"Terms And Conditions\"\n faq-text=\"FAQ\"\n show-powered-by=\"true\"\n ></sqm-portal-footer>\n</sqm-portal-frame>\n";
10099
+ const taxAndCashTemplate = "<sqm-portal-frame>\n <a slot=\"header\" href=\"/\">\n <sqm-text style=\"height: 60px\">\n <img\n style=\"height: 60px\"\n src=\"https://res.cloudinary.com/saasquatch/image/upload/v1634255445/squatch-assets/Copy_of_saasquatch-logo-tree-large-horizontal.png\"\n />\n </sqm-text>\n </a>\n <sqb-program-section program-id=\"referral-program\">\n <sqm-router>\n <template\n path=\"/:path(\\bregister\\b|\\bemailVerification\\b|\\blogin\\b|\\bverifyEmail\\b|\\bforgotPassword\\b|\\bresetPassword\\b|\\blogout\\b)\"\n >\n <sqm-hero\n background=\"https://images.unsplash.com/photo-1599676821464-3555954838dc?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1939&q=80\"\n >\n <sqm-router>\n <template path=\"/register\">\n <sqm-portal-login></sqm-portal-login>\n <sqm-portal-register>\n <sqm-name-fields slot=\"formData\"></sqm-name-fields>\n </sqm-portal-register>\n </template>\n\n <template path=\"/emailVerification\">\n <sqm-portal-protected-route\n redirect-to=\"/login\"\n ></sqm-portal-protected-route>\n <sqm-portal-email-verification></sqm-portal-email-verification>\n </template>\n\n <template path=\"/login\">\n <sqm-portal-login></sqm-portal-login>\n </template>\n\n <template path=\"/verifyEmail\">\n <sqm-portal-verify-email></sqm-portal-verify-email>\n </template>\n\n <template path=\"/forgotPassword\">\n <sqm-portal-forgot-password\n email-label=\"Business Email\"\n ></sqm-portal-forgot-password>\n </template>\n\n <template path=\"/resetPassword\">\n <sqm-portal-reset-password\n confirm-password=\"true\"\n ></sqm-portal-reset-password>\n </template>\n <template path=\"/logout\">\n <sqm-portal-logout next-page=\"/login\"></sqm-portal-logout>\n </template>\n </sqm-router>\n </sqm-hero>\n </template>\n </sqm-router>\n <sqm-router>\n <template path=\"/:path(\\bactivity\\b|\\beditProfile\\b|\\brefer\\b)?\">\n <sqm-divided-layout\n direction=\"row\"\n style=\"\n border-top: 1px solid #eaeaea;\n border-bottom: 1px solid #eaeaea;\n \"\n >\n <sqm-navigation-sidebar>\n <sqm-navigation-sidebar-item\n path=\"/\"\n icon=\"house\"\n label=\"Dashboard\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/activity\"\n icon=\"bar-chart\"\n label=\"Activity\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/editProfile\"\n icon=\"person\"\n label=\"Edit Profile\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/taxAndCash\"\n icon=\"file-earmark-text\"\n label=\"Tax & Payout Settings\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/logout\"\n icon=\"box-arrow-right\"\n label=\"Logout\"\n ></sqm-navigation-sidebar-item>\n </sqm-navigation-sidebar>\n <sqm-divided-layout direction=\"column\" content-area-width=\"1200px\">\n <sqm-router>\n <template path=\"/\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqb-widget\n widget-type=\"p/referral-program/w/referrerWidget\"\n track-loads=\"true\"\n ></sqb-widget>\n </template>\n <template path=\"/editProfile\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-profile></sqm-portal-profile> </sqm-portal-container\n ><sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-change-password></sqm-portal-change-password>\n </sqm-portal-container>\n </template>\n <template path=\"/refer\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-referral-iframe></sqm-referral-iframe>\n </template>\n <template path=\"/activity\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container\n direction=\"column\"\n padding=\"xxx-large\"\n gap=\"xxx-large\"\n >\n <sqm-text>\n <h1>Activity</h1>\n </sqm-text>\n <sqm-stat-container space=\"xxxx-large\"\n ><sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/referralsCount\"\n ><sqm-text>\n <p>Referrals</p>\n </sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardsCountFiltered/AVAILABLE\"\n ><sqm-text>\n <p>Rewards Earned</p>\n </sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardBalance/CREDIT/CENTS\"\n ><sqm-text>\n <p>Reward Balance</p>\n </sqm-text></sqm-big-stat\n >\n </sqm-stat-container>\n <sqm-referral-table>\n <sqm-referral-table-user-column></sqm-referral-table-user-column>\n <sqm-referral-table-rewards-column></sqm-referral-table-rewards-column>\n <sqm-referral-table-status-column></sqm-referral-table-status-column>\n <sqm-referral-table-date-column\n column-title=\"Referred\"\n date-shown=\"dateReferralStarted\"\n ></sqm-referral-table-date-column> </sqm-referral-table\n ></sqm-portal-container>\n </template>\n <template path=\"/taxAndCash\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-tax-and-cash\n step-1_first-name=\"First name\"\n step-1_last-name=\"Last name\"\n step-1_email=\"Email\"\n step-1_country=\"Country\"\n step-1_phone-number=\"Phone number\"\n step-1_address=\"Address\"\n step-1_city=\"City\"\n step-1_state=\"State\"\n step-1_province=\"Province\"\n step-1_region=\"Region\"\n step-1_postal-code=\"Postal code\"\n step-1_currency=\"Currency\"\n step-1_currency-help-text=\"Choose your preferred payout currency\"\n step-1_allow-banking-collection=\"I have read the {termsAndConditionsLink} and allow impact.com to collect my tax and banking information\"\n step-1_personal-information=\"Personal Information\"\n step-1_terms-and-conditions-label=\"terms and conditions\"\n step-1_terms-and-conditions-link=\"/payout-terms-and-conditions\"\n step-1_search-for-currency-text=\"Search for currency..\"\n step-2_indirect-tax=\"Indirect Tax\"\n step-2_indirect-tax-description=\"Indirect taxes (e.g. VAT, HST, GST) are transaction based taxes often applied to goods and services. Service providers are typically required to register with their tax authority and collect these taxes on behalf governments.\"\n step-2_indirect-tax-details=\"Indirect tax details\"\n step-2_other-region=\"Registered for indirect tax\"\n step-2_other-region-subtext=\"If you’ve registered with your tax authority, add your information to stay tax compliant.\"\n step-2_not-registered=\"Not registered for indirect tax\"\n step-2_not-registered-subtext=\"If you’ve never set up indirect tax with your tax authority, then you’re likely not considered registered.\"\n step-2_selected-region=\"Country / region of indirect tax\"\n step-2_indirect-tax-number=\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}}\"\n step-2_province=\"Province\"\n step-2_indirect-tax-number-error=\"{taxType, select, GST {GST number} HST {HST number} VAT {VAT number} CT {CT number} SST {SST number} GENERAL {Indirect tax number}} is required\"\n step-2_qst-number=\"QST number\"\n step-2_is-registered-q-s-t=\"I am registered for QST Tax\"\n step-2_is-registered-sub-region-income-tax=\"I am an individual registered for Income Tax purposes in Spain, and withholding tax will apply to any payments made to me.\"\n step-2_sub-region=\"Sub-region\"\n step-2_sub-region-tax-number-label=\"Income Tax Number\"\n step-2_cannot-change-info-alert=\"Changes to your personal and indirect tax information can only be made through our Support team after you complete this step. Make sure these are correct before continuing.\"\n step-3_tax-form=\"Tax form\"\n step-3_tax-form-label=\"{documentType} Tax Form\"\n step-3_participant-type=\"Participant type\"\n step-3_business-entity=\"I represent a business\"\n step-3_individual-participant=\"I am an individual participant\"\n step-3_tax-form-description=\"Participants based in the US need to submit a {documentType} form.\"\n step-3_tax-form-description-individual-participant=\"Participants residing outside of the US, joining the referral program of a US-based company, need to submit a {documentType} form.\"\n step-3_tax-form-description-business-entity=\"Participants residing outside of the US who represent a business entity need to submit a {documentType} form.\"\n step-3_docusign-expired=\"For your security and privacy, we automatically end your session after 20 minutes of inactivity. Please refresh and re-enter your tax information to continue.\"\n step-3_docusign-session-warning=\"For your security, we automatically end your session when you have not interacted with the form after 20 minutes.\"\n step-3_docusign-error=\"There was a problem displaying this form. Please refresh the page. If this problem continues, contact Support.\"\n step-3_refresh-button=\"Refresh Page\"\n step-3_exit-button=\"Exit\"\n step-4_tax-and-payouts=\"Payouts\"\n step-4_directly-to-bank-account=\"Directly to my bank account\"\n step-4_to-pay-pal-account=\"PayPal (2% processing fee capped to {feeCap})\"\n step-4_payment-schedule-balance-threshold=\"Pay me when my balance reaches a threshold\"\n step-4_payment-schedule-fixed-day=\"Pay me on a fixed day of the month\"\n step-4_payment-day-select-label=\"Payment Day\"\n step-4_payment-threshold-select-label=\"Payment threshold\"\n step-4_payment-day-first-of-month-label-text=\"1st of the month\"\n step-4_payment-day-fifteenth-of-month-label-text=\"15th of the month\"\n step-4_payment-method=\"Payment method\"\n step-4_payment-schedule=\"Payment schedule\"\n step-4_payment-method-subtext=\"Payouts will be sent from our referral program provider, impact.com.\"\n step-4_pay-pal-input-label=\"PayPal email\"\n step-4_bank-location-label=\"Bank country location\"\n step-4_beneficiary-account-name-label=\"Beneficiary account name\"\n step-4_bank-account-type-label=\"Bank account type\"\n step-4_checking-select-item-label=\"Checking\"\n step-4_savings-select-item-label=\"Savings\"\n step-4_bank-account-number-label=\"Bank account number\"\n step-4_iban-label=\"IBAN\"\n step-4_swift-code-label=\"SWIFT code\"\n step-4_routing-code-label=\"{bankCountry, select, AU {BSB number} CA {Routing number} CZ {Bank code} HK {Clearing code} SG {Clearing code} US {ABA routing number} NZ {BSB number} ZA {Bank/Branch number} IN {IFSC} CNY {CNAPS} other {Routing code} }\"\n step-4_bank-name-label=\"Bank name\"\n step-4_classification-entity-label=\"Classification entity\"\n step-4_business-select-item-label=\"Business\"\n step-4_individual-select-item-label=\"Individual\"\n step-4_foreign-select-item-label=\"Foreign\"\n step-4_classification-c-p-f-label=\"Classification CPF\"\n step-4_patronymic-name-label=\"Patronymic name\"\n step-4_vo-code-label=\"VO code\"\n step-4_agency-code-label=\"Agency code\"\n step-4_branch-code-label=\"Branch code\"\n step-4_classification-label=\"Classification\"\n step-4_tax-payer-id-label=\"Beneficiary INN\"\n step-4-bank-address-label=\"Bank address\"\n step-4_bank-city-label=\"Bank city\"\n step-4_bank-state-label=\"Bank Province / State\"\n step-4_bank-postal-code-label=\"Bank postal code\"\n step-4_eft-withdrawal-label=\"EFT Withdrawal (free)\"\n step-4_fx-wire-processing-fee-label=\"FX Wire (Processing Fee {currency}{defaultFxFee}.00)\"\n dashboard_status-text-active=\"Active\"\n dashboard_status-text-not-active=\"Invalid Tax Form\"\n dashboard_status-text-not-verified=\"Not Verified\"\n dashboard_badge-text-submitted-on=\"Submitted on {dateSubmitted}.\"\n dashboard_badge-text-submitted-on-w-8=\"Submitted on {dateSubmitted}. Valid for three years after submission.\"\n dashboard_badge-text-awaiting-review=\"Awaiting review. Submitted on {dateSubmitted}.\"\n dashboard_tax-alert-header-not-active-w-9=\"Your W9 tax form has personal information that doesn’t match your profile\"\n dashboard_tax-alert-header-not-active-w-8=\"{documentType} tax form is invalid\"\n dashboard_tax-alert-not-active-message-w-9=\"Please resubmit a new {documentType} form.\"\n dashboard_tax-alert-not-active-message-w-8=\"Your tax form may have expired or has personal information that doesn’t match your profile. Please submit a new {documentType} form.\"\n dashboard_invalid-form=\"Make sure your information is correct and submit new form.\"\n dashboard_banking-information-section-header=\"Payout Information\"\n dashboard_tax-document-section-header=\"Tax documents\"\n dashboard_tax-document-section-sub-header=\"{documentType} tax form\"\n dashboard_no-form-needed-subtext=\"Tax documents are only required if you are based in the US or joining the referral program of a US based brand.\"\n dashboard_indirect-tax-info-section-header=\"Indirect tax\"\n dashboard_indirect-tax-info-spain=\"Registered in {country}, {subRegion}\"\n dashboard_indirect-tax-info-other-country=\"Registered in {country}\"\n dashboard_indirect-tax-info-canada=\"Registered in {province}, {country}\"\n dashboard_indirect-tax-tooltip-support=\"To make changes to your indirect tax information, please contact Support.\"\n dashboard_indirect-tax-details=\"{indirectTaxType} number: {indirectTaxNumber}\"\n dashboard_new-form-button=\"Submit new form\"\n dashboard_edit-payment-information-button=\"Edit Payout Information\"\n dashboard_not-registered-for-tax=\"Not registered for indirect tax. If you’ve previously registered with your tax authority, contact Support to add your information to stay tax compliant.\"\n dashboard_qst-number=\"QST number: {qstNumber}\"\n dashboard_sub-region-tax-number=\"Income tax number: {subRegionTaxNumber}\"\n dashboard_status-badge-text=\"{badgeText, select, payoutToday {Payout Today} nextPayout {Next Payout} }\"\n dashboard_threshold-payout-text=\"Next payout occurs when balance is {thresholdBalance}\"\n dashboard_account-text=\"Account\"\n dashboard_invoice-column-title=\"Invoice\"\n dashboard_date-column-title=\"Date\"\n dashboard_earnings-column-title=\"Earnings\"\n dashboard_indirect-tax-column-title=\"Indirect tax\"\n dashboard_payout-from-impact=\"Your balance may take up to 24 hours to update. Payouts will be sent from our referral program provider, impact.com.\"\n dashboard_earnings-after-tax-column-title=\"Earnings after tax\"\n dashboard_error-title-text=\"Your payout is on hold \"\n dashboard_error-description-text=\"If you’ve recently added your payout information, please wait while we verify your information. If it’s still on hold after a few days, please contact Support or check your inbox for an email from our referral program provider, impact.com.\"\n dashboard_payout-missing-information-text=\"Missing banking information, go to Impact.com to resolve.\"\n dashboard_invoice-description=\"View and download your invoices to report your earnings and stay tax compliant.\"\n dashboard_invoice-prev-label=\"Prev\"\n dashboard_invoice-more-label=\"Next\"\n dashboard_invoice-header=\"Invoices\"\n dashboard_invoice-empty-state-header=\"View your invoice details\"\n dashboard_invoice-empty-state-text=\"Refer a friend to view the status of your invoices and rewards earned\"\n dashboard_replace-tax-form-modal-header=\"Replace existing tax form\"\n dashboard_replace-tax-form-modal-body-text=\"Submitting a new tax form will remove your existing form. Make sure to sign and complete your new tax form to prevent any issues with your next payout.\"\n form-step=\"Step {step} of {count}\"\n general-error-title=\"There was a problem submitting your information\"\n general-error-description=\"Please review your information and try again. If this problem continues, contact Support.\"\n field-required-error=\"{fieldName} is required\"\n invalid-character-error=\"{fieldName} includes characters that aren't supported.\"\n field-invalid-error=\"{fieldName} is invalid\"\n continue-button=\"Continue\"\n back-button=\"Back\"\n cancel-button=\"Cancel\"\n is-partner-alert-header=\"An account with this email already exists with our referral program provider, impact.com\"\n is-partner-alert-description=\"If you don’t recognize this referral program provider or believe this is a mistake, please contact Support or sign up for this referral program with a different email.\"\n search-for-country-text=\"Search for country..\"\n loading-error-alert-header=\"There was a problem loading your form\"\n loading-error-alert-description=\"Please refresh the page and try again. If this problem continues, contact Support.\"\n tax-and-payouts-description=\"Submit your tax documents and add your banking information to receive your rewards.\"\n ></sqm-tax-and-cash>\n </template>\n </sqm-router>\n </sqm-divided-layout>\n </sqm-divided-layout>\n </template>\n </sqm-router>\n </sqb-program-section>\n <sqm-portal-footer\n slot=\"footer\"\n support-email=\"support@example.com\"\n terms-link=\"https://example.com\"\n faq-link=\"https://example.com\"\n terms-text=\"Terms And Conditions\"\n faq-text=\"FAQ\"\n show-powered-by=\"true\"\n ></sqm-portal-footer>\n</sqm-portal-frame>\n";
10173
10100
 
10174
10101
  const portalLeadSubmitTemplateWithDashboard = "<sqm-portal-frame>\n <a slot=\"header\" href=\"/\">\n <sqm-text style=\"height: 60px\">\n <img\n style=\"height: 60px\"\n src=\"https://res.cloudinary.com/saasquatch/image/upload/v1634255445/squatch-assets/Copy_of_saasquatch-logo-tree-large-horizontal.png\"\n />\n </sqm-text>\n </a>\n <sqb-program-section program-id=\"referral-program\">\n <sqm-router>\n <template\n path=\"/:path(\\bregister\\b|\\bemailVerification\\b|\\blogin\\b|\\bverifyEmail\\b|\\bforgotPassword\\b|\\bresetPassword\\b|\\blogout\\b)\"\n >\n <sqm-hero\n background=\"https://images.unsplash.com/photo-1599676821464-3555954838dc?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1939&q=80\"\n >\n <sqm-router>\n <template path=\"/register\">\n <sqm-portal-register>\n <sqm-name-fields slot=\"formData\"></sqm-name-fields>\n </sqm-portal-register>\n </template>\n\n <template path=\"/emailVerification\">\n <sqm-portal-protected-route\n redirect-to=\"/login\"\n ></sqm-portal-protected-route>\n <sqm-portal-email-verification></sqm-portal-email-verification>\n </template>\n\n <template path=\"/login\">\n <sqm-portal-login></sqm-portal-login>\n </template>\n\n <template path=\"/verifyEmail\">\n <sqm-portal-verify-email></sqm-portal-verify-email>\n </template>\n\n <template path=\"/forgotPassword\">\n <sqm-portal-forgot-password\n email-label=\"Business Email\"\n ></sqm-portal-forgot-password>\n </template>\n\n <template path=\"/resetPassword\">\n <sqm-portal-reset-password\n confirm-password=\"true\"\n ></sqm-portal-reset-password>\n </template>\n <template path=\"/logout\">\n <sqm-portal-logout next-page=\"/login\"></sqm-portal-logout>\n </template>\n </sqm-router>\n </sqm-hero>\n </template>\n </sqm-router>\n <sqm-router>\n <template path=\"/:path(\\bactivity\\b|\\beditProfile\\b|\\brefer\\b)?\">\n <sqm-divided-layout\n direction=\"row\"\n style=\"\n border-top: 1px solid #eaeaea;\n border-bottom: 1px solid #eaeaea;\n \"\n >\n <sqm-navigation-sidebar>\n <sqm-navigation-sidebar-item\n path=\"/\"\n icon=\"house\"\n label=\"Dashboard\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/refer\"\n icon=\"inbox\"\n label=\"Submit A Lead\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/activity\"\n icon=\"bar-chart\"\n label=\"Activity\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/editProfile\"\n icon=\"person\"\n label=\"Edit Profile\"\n ></sqm-navigation-sidebar-item>\n <sqm-navigation-sidebar-item\n path=\"/logout\"\n icon=\"box-arrow-right\"\n label=\"Logout\"\n ></sqm-navigation-sidebar-item>\n </sqm-navigation-sidebar>\n <sqm-divided-layout direction=\"column\">\n <sqm-router>\n <template path=\"/\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container\n direction=\"column\"\n padding=\"xxx-large\"\n gap=\"xxx-large\"\n ><sqm-titled-section label-margin=\"xx-small\"\n ><sqm-text slot=\"label\"> <p>Welcome back,</p> </sqm-text\n ><sqm-text slot=\"content\">\n <h1>\n <sqm-user-name\n fallback=\"Anonymous User\"\n ></sqm-user-name>\n </h1> </sqm-text\n ></sqm-titled-section>\n <sqm-stat-container space=\"xxxx-large\"\n ><sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/referralsCount\"\n ><sqm-text><p>Referrals</p></sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardsCountFiltered/AVAILABLE\"\n ><sqm-text><p>Rewards Earned</p></sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardBalance/CREDIT/CENTS\"\n ><sqm-text><p>Reward Balance</p></sqm-text></sqm-big-stat\n >\n </sqm-stat-container> </sqm-portal-container\n ><sqm-portal-container\n direction=\"column\"\n padding=\"xxx-large\"\n gap=\"xxx-large\"\n >\n <sqm-titled-section padding=\"none\" label-margin=\"x-large\"\n ><sqm-text slot=\"label\">\n <h2>Partner and Profit</h2> </sqm-text\n ><sqm-text slot=\"content\">\n <p>\n Get rewarded for referring potential customers to\n SaaSquatch. Earn commission for each successful lead you\n send our way\n </p>\n </sqm-text></sqm-titled-section\n >\n <sqm-titled-section label-margin=\"small\" padding=\"none\"\n ><sqm-text slot=\"label\">\n <h3>Share your referral link</h3> </sqm-text\n ><sqm-share-link slot=\"content\"></sqm-share-link\n ></sqm-titled-section>\n <sqm-titled-section label-margin=\"small\" padding=\"none\">\n <sqm-text slot=\"label\">\n <h3>Share your referral code</h3> </sqm-text\n ><sqm-share-code slot=\"content\"></sqm-share-code>\n </sqm-titled-section>\n <sqm-titled-section label-margin=\"small\" padding=\"none\"\n ><sqm-text slot=\"label\">\n <h3>Share via social media</h3> </sqm-text\n ><sqm-portal-container\n slot=\"content\"\n direction=\"row\"\n padding=\"none\"\n gap=\"xxx-large\"\n min-width=\"160px\"\n ><sqm-share-button\n icon=\"envelope\"\n medium=\"email\"\n size=\"medium\"\n pill=\"true\"\n >Email a friend</sqm-share-button\n ><sqm-share-button\n medium=\"twitter\"\n size=\"medium\"\n pill=\"true\"\n >Post about us on X</sqm-share-button\n ><sqm-share-button\n medium=\"facebook\"\n size=\"medium\"\n pill=\"true\"\n >Share on Facebook</sqm-share-button\n ></sqm-portal-container\n ></sqm-titled-section\n ></sqm-portal-container\n >\n </template>\n <template path=\"/editProfile\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-profile></sqm-portal-profile> </sqm-portal-container\n ><sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-change-password></sqm-portal-change-password>\n </sqm-portal-container>\n </template>\n <template path=\"/refer\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-referral-iframe></sqm-referral-iframe>\n </template>\n <template path=\"/activity\">\n <sqm-portal-protected-route\n require-email-verification=\"true\"\n redirect-to=\"/login\"\n redirect-to-unverified=\"/emailVerification\"\n ></sqm-portal-protected-route>\n <sqm-portal-container\n direction=\"column\"\n padding=\"xxx-large\"\n gap=\"xxx-large\"\n >\n <sqm-text> <h1>Activity</h1></sqm-text>\n <sqm-stat-container space=\"xxxx-large\"\n ><sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/referralsCount\"\n ><sqm-text><p>Referrals</p></sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardsCountFiltered/AVAILABLE\"\n ><sqm-text><p>Rewards Earned</p></sqm-text></sqm-big-stat\n >\n <sqm-big-stat\n flex-reverse=\"true\"\n alignment=\"left\"\n stat-type=\"/rewardBalance/CREDIT/CENTS\"\n ><sqm-text><p>Reward Balance</p></sqm-text></sqm-big-stat\n >\n </sqm-stat-container>\n <sqm-referral-table>\n <sqm-referral-table-user-column></sqm-referral-table-user-column>\n <sqm-referral-table-rewards-column></sqm-referral-table-rewards-column>\n <sqm-referral-table-status-column></sqm-referral-table-status-column>\n <sqm-referral-table-date-column\n column-title=\"Referred\"\n date-shown=\"dateReferralStarted\"\n ></sqm-referral-table-date-column> </sqm-referral-table\n ></sqm-portal-container>\n </template>\n </sqm-router>\n </sqm-divided-layout>\n </sqm-divided-layout>\n </template>\n </sqm-router>\n </sqb-program-section>\n <sqm-portal-footer\n slot=\"footer\"\n support-email=\"support@example.com\"\n terms-link=\"https://example.com\"\n faq-link=\"https://example.com\"\n terms-text=\"Terms And Conditions\"\n faq-text=\"FAQ\"\n show-powered-by=\"true\"\n ></sqm-portal-footer>\n</sqm-portal-frame>\n";
10175
10102
 
@@ -10205,13 +10132,13 @@ const emailVerifiedTemplate = "<sqm-portal-verify-email></sqm-portal-verify-emai
10205
10132
 
10206
10133
  const emailVerificationTemplate = "<sqm-portal-protected-route redirect-to=\"/login\"></sqm-portal-protected-route>\n<sqm-portal-email-verification></sqm-portal-email-verification>\n";
10207
10134
 
10208
- const LoginReadme = "# sqm-portal-login\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| --------------------- | ----------------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |\n| `demoData` | -- | | `{ states?: { error: string; loading: boolean; forgotPasswordPath: string; registerPath: string; }; content?: { forgotPasswordButton?: any; secondaryButton?: any; emailLabel?: string; passwordLabel?: string; submitLabel?: string; pageLabel?: string; }; }` | `undefined` |\n| `emailLabel` | `email-label` | | `string` | `\"Email\"` |\n| `forgotPasswordLabel` | `forgot-password-label` | | `string` | `\"Forgot Password?\"` |\n| `forgotPasswordPath` | `forgot-password-path` | Redirect participants to this page to reset their password | `string` | `\"/forgotPassword\"` |\n| `networkErrorMessage` | `network-error-message` | | `string` | `\"An error occurred while logging you in. Please refresh the page and try again.\"` |\n| `nextPage` | `next-page` | Redirect participants to this page after they successfully login. | `string` | `\"/\"` |\n| `pageLabel` | `page-label` | | `string` | `\"Sign in to your account\"` |\n| `passwordLabel` | `password-label` | | `string` | `\"Password\"` |\n| `registerLabel` | `register-label` | | `string` | `\"Register\"` |\n| `registerPath` | `register-path` | Redirect participants to this page to start registration. | `string` | `\"/register\"` |\n| `submitLabel` | `submit-label` | | `string` | `\"Sign In\"` |\n\n\n## Dependencies\n\n### Used by\n\n - [sqm-stencilbook](../sqm-stencilbook)\n\n### Depends on\n\n- [sqm-form-message](../sqm-form-message)\n\n### Graph\n```mermaid\ngraph TD;\n sqm-portal-login --> sqm-form-message\n sqm-stencilbook --> sqm-portal-login\n style sqm-portal-login fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
10135
+ const LoginReadme = "# sqm-portal-login\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| --------------------- | ----------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |\n| `demoData` | -- | | `{ states?: { error: string; loading: boolean; forgotPasswordPath: string; registerPath: string; }; content?: { googleButton?: VNode; forgotPasswordButton?: any; secondaryButton?: any; emailLabel?: string; passwordLabel?: string; submitLabel?: string; pageLabel?: string; }; }` | `undefined` |\n| `emailLabel` | `email-label` | | `string` | `\"Email\"` |\n| `forgotPasswordLabel` | `forgot-password-label` | | `string` | `\"Forgot Password?\"` |\n| `forgotPasswordPath` | `forgot-password-path` | Redirect participants to this page to reset their password | `string` | `\"/forgotPassword\"` |\n| `networkErrorMessage` | `network-error-message` | | `string` | `\"An error occurred while logging you in. Please refresh the page and try again.\"` |\n| `nextPage` | `next-page` | Redirect participants to this page after they successfully login. | `string` | `\"/\"` |\n| `pageLabel` | `page-label` | | `string` | `\"Sign in to your account\"` |\n| `passwordLabel` | `password-label` | | `string` | `\"Password\"` |\n| `registerCTA` | `register-c-t-a` | | `string` | `\"Don't have an account?\"` |\n| `registerLabel` | `register-label` | | `string` | `\"Register\"` |\n| `registerPath` | `register-path` | Redirect participants to this page to start registration. | `string` | `\"/register\"` |\n| `submitLabel` | `submit-label` | | `string` | `\"Sign In\"` |\n\n\n## Dependencies\n\n### Used by\n\n - [sqm-stencilbook](../sqm-stencilbook)\n\n### Depends on\n\n- [sqm-google-sign-in](../sqm-google-sign-in)\n- [sqm-form-message](../sqm-form-message)\n\n### Graph\n```mermaid\ngraph TD;\n sqm-portal-login --> sqm-google-sign-in\n sqm-portal-login --> sqm-form-message\n sqm-stencilbook --> sqm-portal-login\n style sqm-portal-login fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
10209
10136
 
10210
10137
  const ReferralIframeReadme = "# sqm-referral-iframe\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| -------------- | --------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------- |\n| `demoData` | -- | | `{ states?: { content: { iframeSrc: string; iframeHeight: string; iframeWidth: string; }; }; data?: { shareCode: string; }; }` | `undefined` |\n| `iframeHeight` | `iframe-height` | Define the height of the iframe with any valid CSS height value. Example: 100px, 5rem, or auto. | `string` | `\"100%\"` |\n| `iframeSrc` | `iframe-src` | URL of iframe to display | `string` | `undefined` |\n| `iframeWidth` | `iframe-width` | Define the width of the iframe with any valid CSS width value. Example: 100px, 5rem, or auto. | `string` | `\"100%\"` |\n\n\n## Dependencies\n\n### Used by\n\n - [sqm-stencilbook](../sqm-stencilbook)\n\n### Graph\n```mermaid\ngraph TD;\n sqm-stencilbook --> sqm-referral-iframe\n style sqm-referral-iframe fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
10211
10138
 
10212
10139
  const ForgotPasswordReadme = "# sqm-portal-forgot-password\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| --------------------- | ----------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |\n| `demoData` | -- | | `{ states?: { error: string; loading: boolean; success: boolean; loginPath: string; }; content?: { secondaryButton: any; messageSlot: any; emailLabel?: string; submitLabel?: string; successAlertText?: string; }; }` | `undefined` |\n| `emailLabel` | `email-label` | | `string` | `\"Email\"` |\n| `headerText` | `header-text` | | `string` | `\"Enter your email below to receive a password reset link.\"` |\n| `loginPath` | `login-path` | | `string` | `\"/login\"` |\n| `loginText` | `login-text` | | `string` | `\"Sign In\"` |\n| `networkErrorMessage` | `network-error-message` | | `string` | `\"An error occurred while loading this page. Please refresh the page.\"` |\n| `redirectPath` | `redirect-path` | Redirect participants to this page after they verify their email. | `string` | `\"/resetPassword\"` |\n| `submitLabel` | `submit-label` | | `string` | `\"Request Password Reset\"` |\n| `successAlertText` | `success-alert-text` | | `string` | `\"If an account with that email exists, a password reset email will be sent.\"` |\n\n\n## Dependencies\n\n### Depends on\n\n- [sqm-form-message](../sqm-form-message)\n\n### Graph\n```mermaid\ngraph TD;\n sqm-portal-forgot-password --> sqm-form-message\n style sqm-portal-forgot-password fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
10213
10140
 
10214
- const RegisterReadme = "# sqm-portal-register\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| ------------------------------ | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |\n| `confirmPassword` | `confirm-password` | | `boolean` | `false` |\n| `confirmPasswordLabel` | `confirm-password-label` | | `string` | `\"Confirm Password\"` |\n| `demoData` | -- | | `{ states?: { error: string; loading: boolean; confirmPassword: boolean; hideInputs: boolean; registrationFormState: RegistrationFormState; disablePasswordValidation?: boolean; loginPath: string; }; refs?: { formRef: any; }; content?: { formData?: VNode; terms?: VNode; passwordField?: VNode; secondaryButton?: VNode; emailLabel?: string; passwordLabel?: string; submitLabel?: string; pageLabel?: string; confirmPasswordLabel: string; requiredFieldErrorMessage: string; invalidEmailErrorMessage: string; meetsRequirementsText?: string; doesNotMeetRequirementsText?: string; minErrorText?: string; uppercaseErrorText?: string; lowercaseErrorText?: string; hasErrorText?: string; }; }` | `undefined` |\n| `disablePasswordValidation` | `disable-password-validation` | | `boolean` | `false` |\n| `doesNotMeetRequirementsText` | `does-not-meet-requirements-text` | | `string` | `\"Password must meet the following requirements:\"` |\n| `emailLabel` | `email-label` | | `string` | `\"Email\"` |\n| `hasErrorText` | `has-error-text` | | `string` | `\"contain at least 1 number or symbol\"` |\n| `hideInputs` | `hide-inputs` | Hides the email and password fields. Note: If you hide default inputs, you must add additional input fields. They must have the input name attributes \"email\" and \"password\" for this form to succeed. | `boolean` | `false` |\n| `invalidEmailErrorMessage` | `invalid-email-error-message` | The message to be displayed when the email used is invalid or blocked. | `string` | `\"Must be a valid email address\"` |\n| `loginLabel` | `login-label` | | `string` | `\"Sign in\"` |\n| `loginPath` | `login-path` | Redirect participants to this page after clicking the login button. | `string` | `\"/login\"` |\n| `lowercaseErrorText` | `lowercase-error-text` | | `string` | `\"contain at least 1 lowercase character\"` |\n| `meetsRequirementsText` | `meets-requirements-text` | | `string` | `\"Password has met all requirements\"` |\n| `minErrorText` | `min-error-text` | | `string` | `\"be a minimum of 8 characters\"` |\n| `networkErrorMessage` | `network-error-message` | The message to be displayed when a the form submission fails unexpectedly. | `string` | `\"Network request failed.\"` |\n| `nextPage` | `next-page` | Redirect participants to this page from their verification email | `string` | `\"/\"` |\n| `pageLabel` | `page-label` | | `string` | `\"Register\"` |\n| `passwordLabel` | `password-label` | | `string` | `\"Password\"` |\n| `passwordMismatchErrorMessage` | `password-mismatch-error-message` | The message to be displayed when password inputs do not match. | `string` | `\"Passwords do not match.\"` |\n| `redirectPath` | `redirect-path` | The page that participants are redirected to from the verification email. | `string` | `\"/verifyEmail\"` |\n| `requiredFieldErrorMessage` | `required-field-error-message` | The message to be displayed when a required field is not filled. | `string` | `\"Cannot be empty\"` |\n| `submitLabel` | `submit-label` | | `string` | `\"Register\"` |\n| `uppercaseErrorText` | `uppercase-error-text` | | `string` | `\"contain at least 1 uppercase character\"` |\n\n\n## Dependencies\n\n### Used by\n\n - [sqm-stencilbook](../sqm-stencilbook)\n\n### Depends on\n\n- [sqm-form-message](../sqm-form-message)\n- [sqm-password-field](../sqm-password-field)\n\n### Graph\n```mermaid\ngraph TD;\n sqm-portal-register --> sqm-form-message\n sqm-portal-register --> sqm-password-field\n sqm-stencilbook --> sqm-portal-register\n style sqm-portal-register fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
10141
+ const RegisterReadme = "# sqm-portal-register\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| ------------------------------ | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- |\n| `confirmPassword` | `confirm-password` | | `boolean` | `false` |\n| `confirmPasswordLabel` | `confirm-password-label` | | `string` | `\"Confirm Password\"` |\n| `demoData` | -- | | `{ states?: { error: string; loading: boolean; confirmPassword: boolean; hideInputs: boolean; registrationFormState: RegistrationFormState; disablePasswordValidation?: boolean; loginPath: string; isGoogle: boolean; }; refs?: { formRef: any; }; content?: { formData?: VNode; terms?: VNode; passwordField?: VNode; secondaryButton?: VNode; emailLabel?: string; passwordLabel?: string; submitLabel?: string; pageLabel?: string; confirmPasswordLabel: string; requiredFieldErrorMessage: string; invalidEmailErrorMessage: string; meetsRequirementsText?: string; doesNotMeetRequirementsText?: string; minErrorText?: string; uppercaseErrorText?: string; lowercaseErrorText?: string; hasErrorText?: string; }; }` | `undefined` |\n| `disablePasswordValidation` | `disable-password-validation` | | `boolean` | `false` |\n| `doesNotMeetRequirementsText` | `does-not-meet-requirements-text` | | `string` | `\"Password must meet the following requirements:\"` |\n| `emailLabel` | `email-label` | | `string` | `\"Email\"` |\n| `hasErrorText` | `has-error-text` | | `string` | `\"contain at least 1 number or symbol\"` |\n| `hideInputs` | `hide-inputs` | Hides the email and password fields. Note: If you hide default inputs, you must add additional input fields. They must have the input name attributes \"email\" and \"password\" for this form to succeed. | `boolean` | `false` |\n| `invalidEmailErrorMessage` | `invalid-email-error-message` | The message to be displayed when the email used is invalid or blocked. | `string` | `\"Must be a valid email address\"` |\n| `loginLabel` | `login-label` | | `string` | `\"Sign in\"` |\n| `loginPath` | `login-path` | Redirect participants to this page after clicking the login button. | `string` | `\"/login\"` |\n| `lowercaseErrorText` | `lowercase-error-text` | | `string` | `\"contain at least 1 lowercase character\"` |\n| `meetsRequirementsText` | `meets-requirements-text` | | `string` | `\"Password has met all requirements\"` |\n| `minErrorText` | `min-error-text` | | `string` | `\"be a minimum of 8 characters\"` |\n| `networkErrorMessage` | `network-error-message` | The message to be displayed when a the form submission fails unexpectedly. | `string` | `\"Network request failed.\"` |\n| `nextPage` | `next-page` | Redirect participants to this page from their verification email | `string` | `\"/\"` |\n| `pageLabel` | `page-label` | | `string` | `\"Register\"` |\n| `passwordLabel` | `password-label` | | `string` | `\"Password\"` |\n| `passwordMismatchErrorMessage` | `password-mismatch-error-message` | The message to be displayed when password inputs do not match. | `string` | `\"Passwords do not match.\"` |\n| `redirectPath` | `redirect-path` | The page that participants are redirected to from the verification email. | `string` | `\"/verifyEmail\"` |\n| `requiredFieldErrorMessage` | `required-field-error-message` | The message to be displayed when a required field is not filled. | `string` | `\"Cannot be empty\"` |\n| `submitLabel` | `submit-label` | | `string` | `\"Register\"` |\n| `uppercaseErrorText` | `uppercase-error-text` | | `string` | `\"contain at least 1 uppercase character\"` |\n\n\n## Dependencies\n\n### Used by\n\n - [sqm-stencilbook](../sqm-stencilbook)\n\n### Depends on\n\n- [sqm-form-message](../sqm-form-message)\n- [sqm-password-field](../sqm-password-field)\n\n### Graph\n```mermaid\ngraph TD;\n sqm-portal-register --> sqm-form-message\n sqm-portal-register --> sqm-password-field\n sqm-stencilbook --> sqm-portal-register\n style sqm-portal-register fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
10215
10142
 
10216
10143
  const EditProfileReadme = "# sqm-portal-profile\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| ------------------------ | --------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |\n| `countrytext` | `countrytext` | | `string` | `\"Country\"` |\n| `demoData` | -- | | `{ states?: { success: boolean; loading: boolean; submitDisabled: boolean; showCountry: boolean; formState: { country: string; firstName: string; lastName: string; errors: any; error: string; }; user: { id: string; accountId: string; firstName: string; lastName: string; email: string; countryCode: string; }; text: { firstnametext: string; lastnametext: string; emailtext: string; countrytext: string; editProfileHeader: string; editProfileSubHeader: string; submitChangeButtonText: string; submissionSuccessText?: string; fieldEmptyText?: string; }; }; }` | `undefined` |\n| `editProfileHeader` | `edit-profile-header` | | `string` | `\"Edit your profile\"` |\n| `editProfileSubHeader` | `edit-profile-sub-header` | | `string` | `\"Personal Information\"` |\n| `emailtext` | `emailtext` | | `string` | `\"Email\"` |\n| `fieldEmptyText` | `field-empty-text` | | `string` | `\"Field is required\"` |\n| `firstnametext` | `firstnametext` | | `string` | `\"First Name\"` |\n| `formErrorText` | `form-error-text` | | `string` | `\"Please correct the errors below to update your profile.\"` |\n| `hideCountry` | `hide-country` | | `boolean` | `false` |\n| `lastnametext` | `lastnametext` | | `string` | `\"Last Name\"` |\n| `networkRequestMessage` | `network-request-message` | | `string` | `\"An error occurred while loading this page. Please refresh the page.\"` |\n| `submissionSuccessText` | `submission-success-text` | | `string` | `\"Your profile has been successfully updated.\"` |\n| `submitChangeButtonText` | `submit-change-button-text` | | `string` | `\"Submit Changes\"` |\n\n\n## Dependencies\n\n### Depends on\n\n- [sqm-form-message](../sqm-form-message)\n\n### Graph\n```mermaid\ngraph TD;\n sqm-portal-profile --> sqm-form-message\n style sqm-portal-profile fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
10217
10144
 
@@ -10406,7 +10333,7 @@ const PortalFooter_stories = {
10406
10333
  scenario: scenario$f,
10407
10334
  },
10408
10335
  };
10409
- const defaultProps$a = {
10336
+ const defaultProps$9 = {
10410
10337
  supportEmail: "support@example.com",
10411
10338
  supportText: "For program support, contact {email}",
10412
10339
  hidePoweredBy: false,
@@ -10416,12 +10343,12 @@ const defaultProps$a = {
10416
10343
  paddingBottom: "large",
10417
10344
  paddingLeft: "large",
10418
10345
  };
10419
- const DefaultFooter = () => index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$a));
10420
- const FooterWithTerms = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$a, { termsLink: "https://example.com", termsText: "Terms and Conditions" })));
10421
- const FooterWithFAQ = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$a, { faqLink: "https://example.com", faqText: "FAQ" })));
10422
- const FooterWithTermsAndFAQ = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$a, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ" })));
10423
- const FooterNoPoweredBy = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$a, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hidePoweredBy: true })));
10424
- const FooterNoSupportText = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$a, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hideSupportText: true })));
10346
+ const DefaultFooter = () => index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$9));
10347
+ const FooterWithTerms = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$9, { termsLink: "https://example.com", termsText: "Terms and Conditions" })));
10348
+ const FooterWithFAQ = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$9, { faqLink: "https://example.com", faqText: "FAQ" })));
10349
+ const FooterWithTermsAndFAQ = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$9, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ" })));
10350
+ const FooterNoPoweredBy = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$9, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hidePoweredBy: true })));
10351
+ const FooterNoSupportText = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$9, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hideSupportText: true })));
10425
10352
 
10426
10353
  const PortalFooter = /*#__PURE__*/Object.freeze({
10427
10354
  __proto__: null,
@@ -10703,7 +10630,7 @@ const props$1 = {
10703
10630
  },
10704
10631
  },
10705
10632
  };
10706
- const errorProps$9 = {
10633
+ const errorProps$8 = {
10707
10634
  states: {
10708
10635
  registrationFormState: {
10709
10636
  validationErrors: {
@@ -10718,10 +10645,10 @@ const errorProps$9 = {
10718
10645
  },
10719
10646
  };
10720
10647
  const NameFields = () => {
10721
- return index.h(ShadowViewAddon.NameFieldsView, Object.assign({}, props$1));
10648
+ return index.h(sqmNameFieldsView.NameFieldsView, Object.assign({}, props$1));
10722
10649
  };
10723
10650
  const NameFieldsWithErrors = () => {
10724
- return index.h(ShadowViewAddon.NameFieldsView, Object.assign({}, errorProps$9));
10651
+ return index.h(sqmNameFieldsView.NameFieldsView, Object.assign({}, errorProps$8));
10725
10652
  };
10726
10653
 
10727
10654
  const NameFields$1 = /*#__PURE__*/Object.freeze({
@@ -10739,7 +10666,7 @@ const CheckboxField_stories = {
10739
10666
  scenario: scenario$j,
10740
10667
  },
10741
10668
  };
10742
- const defaultProps$b = {
10669
+ const defaultProps$a = {
10743
10670
  states: {
10744
10671
  registrationFormState: {
10745
10672
  validationErrors: {},
@@ -10747,7 +10674,7 @@ const defaultProps$b = {
10747
10674
  checked: false,
10748
10675
  },
10749
10676
  content: {
10750
- checkboxName: "terms",
10677
+ checkboxName: "agree",
10751
10678
  checkboxLabel: "By signing up you agree to the {labelLink}",
10752
10679
  checkboxLabelLink: "https://example.com",
10753
10680
  checkboxLabelLinkText: "Terms and Conditions",
@@ -10780,35 +10707,35 @@ const defaultRegisterProps = {
10780
10707
  invalidEmailErrorMessage: "Must be a valid email address",
10781
10708
  },
10782
10709
  };
10783
- const Default$c = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$b))));
10784
- const DefaultChecked = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$b, { states: {
10785
- ...defaultProps$b.states,
10710
+ const Default$c = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$a))));
10711
+ const DefaultChecked = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$a, { states: {
10712
+ ...defaultProps$a.states,
10786
10713
  checked: true,
10787
10714
  } }))));
10788
- const CustomLabel = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$b, { content: {
10789
- ...defaultProps$b.content,
10715
+ const CustomLabel = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$a, { content: {
10716
+ ...defaultProps$a.content,
10790
10717
  checkboxLabel: "I Agree",
10791
10718
  } }))));
10792
- const Error$4 = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$b, { states: {
10793
- ...defaultProps$b.states,
10719
+ const Error$4 = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$a, { states: {
10720
+ ...defaultProps$a.states,
10794
10721
  registrationFormState: {
10795
10722
  validationErrors: {
10796
10723
  agree: "Must be checked",
10797
10724
  },
10798
10725
  },
10799
10726
  } }))));
10800
- const CustomError = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$b, { states: {
10801
- ...defaultProps$b.states,
10727
+ const CustomError = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$a, { states: {
10728
+ ...defaultProps$a.states,
10802
10729
  registrationFormState: {
10803
10730
  validationErrors: {
10804
10731
  agree: "Must be checked",
10805
10732
  },
10806
10733
  },
10807
10734
  }, content: {
10808
- ...defaultProps$b.content,
10735
+ ...defaultProps$a.content,
10809
10736
  errorMessage: "This checkbox must be checked to continue",
10810
10737
  } }))));
10811
- const TermsAndConditions$2 = createHookStory(() => (index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultRegisterProps, {
10738
+ const TermsAndConditions$1 = createHookStory(() => (index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultRegisterProps, {
10812
10739
  //@ts-ignore
10813
10740
  content: {
10814
10741
  ...defaultRegisterProps.content,
@@ -10840,29 +10767,11 @@ const CheckboxField = /*#__PURE__*/Object.freeze({
10840
10767
  CustomLabel: CustomLabel,
10841
10768
  Error: Error$4,
10842
10769
  CustomError: CustomError,
10843
- TermsAndConditions: TermsAndConditions$2,
10770
+ TermsAndConditions: TermsAndConditions$1,
10844
10771
  TermsAndConditionsCustomLabel: TermsAndConditionsCustomLabel,
10845
10772
  TermsAndConditionsLongCustomLabel: TermsAndConditionsLongCustomLabel
10846
10773
  });
10847
10774
 
10848
- const scenario$k = "@owner:zach\n@author:zach\nFeature: Marketing Emails Checkbox\n\n A checkbox that is used to opt in for referral program marketing emails.\n\n Background: A user is on the portal registration page\n Given a user is viewing the \"/register\"\n And \"/register\" contains the registration form\n And the registration form has the following fields\n | fields |\n | first name |\n | last name |\n | email |\n | password |\n | Marketing Emails Checkbox |\n \n @motivating\n Scenario: Checkbox is optional by default\n Given the user is filling out the registration form\n And the name fields have valid input\n And the email field has valid input\n And the password field has valid input\n And the checkbox is not checked\n When they try to register\n Then the form is submitted\n And there is no error for the checkbox\n\n Scenario: The form field name is provided by default\n Given the customer has added a marketing emails checkbox to their registration form\n Then the field name is automatically set to \"marketing-emails\"\n And the name is configurable \n\n\n\n ";
10849
-
10850
- const MarketingEmailsCheckbox_stories = {
10851
- title: "Components/Marketing Emails Checkbox",
10852
- parameters: {
10853
- scenario: scenario$k,
10854
- },
10855
- };
10856
- const Default$d = () => {
10857
- return index.h("sqm-marketing-emails-checkbox", null);
10858
- };
10859
-
10860
- const MarketingEmailsCheckbox = /*#__PURE__*/Object.freeze({
10861
- __proto__: null,
10862
- 'default': MarketingEmailsCheckbox_stories,
10863
- Default: Default$d
10864
- });
10865
-
10866
10775
  const UseCheckboxField_stories = {
10867
10776
  title: "Hooks / useCheckboxField",
10868
10777
  parameters: {
@@ -10892,7 +10801,7 @@ function setupGraphQL$9() {
10892
10801
  }, []);
10893
10802
  return { id, accountId };
10894
10803
  }
10895
- const TermsAndConditions$3 = createHookStory(() => {
10804
+ const TermsAndConditions$2 = createHookStory(() => {
10896
10805
  setupGraphQL$9();
10897
10806
  return (index.h("sqm-portal-register", null,
10898
10807
  index.h("div", { slot: "terms" },
@@ -10930,7 +10839,7 @@ const MissingName = createHookStory(() => {
10930
10839
  const UseCheckboxField = /*#__PURE__*/Object.freeze({
10931
10840
  __proto__: null,
10932
10841
  'default': UseCheckboxField_stories,
10933
- TermsAndConditions: TermsAndConditions$3,
10842
+ TermsAndConditions: TermsAndConditions$2,
10934
10843
  TermsAndConditionsWithLabel: TermsAndConditionsWithLabel,
10935
10844
  MultipleCheckboxes: MultipleCheckboxes,
10936
10845
  OptionalCheckboxes: OptionalCheckboxes,
@@ -10940,7 +10849,7 @@ const UseCheckboxField = /*#__PURE__*/Object.freeze({
10940
10849
  const DropdownField_stories = {
10941
10850
  title: "Components/Dropdown Field",
10942
10851
  };
10943
- const defaultProps$c = {
10852
+ const defaultProps$b = {
10944
10853
  states: {
10945
10854
  registrationFormState: {},
10946
10855
  },
@@ -10955,24 +10864,24 @@ const defaultProps$c = {
10955
10864
  ],
10956
10865
  },
10957
10866
  };
10958
- const Default$e = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$c))));
10959
- const CustomLabel$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$c, { content: {
10960
- ...defaultProps$c.content,
10867
+ const Default$d = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$b))));
10868
+ const CustomLabel$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$b, { content: {
10869
+ ...defaultProps$b.content,
10961
10870
  dropdownLabel: "Pick your favorite",
10962
10871
  } }))));
10963
- const Error$5 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$c, { states: {
10964
- ...defaultProps$c.states,
10872
+ const Error$5 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$b, { states: {
10873
+ ...defaultProps$b.states,
10965
10874
  registrationFormState: {
10966
10875
  validationErrors: {
10967
10876
  options: "Must select an option",
10968
10877
  },
10969
10878
  },
10970
10879
  } }))));
10971
- const CustomError$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$c, { content: {
10972
- ...defaultProps$c.content,
10880
+ const CustomError$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$b, { content: {
10881
+ ...defaultProps$b.content,
10973
10882
  errorMessage: "An option must be selected to continue",
10974
10883
  }, states: {
10975
- ...defaultProps$c.states,
10884
+ ...defaultProps$b.states,
10976
10885
  registrationFormState: {
10977
10886
  validationErrors: {
10978
10887
  options: "Must select an option",
@@ -10983,7 +10892,7 @@ const CustomError$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFie
10983
10892
  const DropdownField = /*#__PURE__*/Object.freeze({
10984
10893
  __proto__: null,
10985
10894
  'default': DropdownField_stories,
10986
- Default: Default$e,
10895
+ Default: Default$d,
10987
10896
  CustomLabel: CustomLabel$1,
10988
10897
  Error: Error$5,
10989
10898
  CustomError: CustomError$1
@@ -11048,15 +10957,15 @@ const UseDropdownField = /*#__PURE__*/Object.freeze({
11048
10957
  MissingName: MissingName$1
11049
10958
  });
11050
10959
 
11051
- const scenario$l = "@author:derek\n@owner:derek\nFeature: Form Input Field\n\n This component is used as a custom registration field during registration. The field can be text,\n a date or phone number. A motivating use case is to ask for a users company name, this value would then be mapped\n through the Managed Identity Service and upserted on the user after registration.\n\n Background: A user exists and is viewing the hosted portal registration\n Given a user is viewing \"/register\"\n And \"/register\" contains the registration form\n And the registration form has a custom input field\n\n @motivating\n Scenario Outline: Input fields are required by default but can be optional\n Given the input has prop \"field-optional\" with <value>\n And the input is empty\n When the user tries to register\n Then the input <mayBe> highlighted in red\n And an error message <mayAppear> in red below\n And form submission <mayBe> blocked\n Examples:\n | value | mayBe | mayAppear |\n | false | is | appears |\n | | is | appears |\n | true | isn't | doesn't appear |\n\n @motivating\n Scenario: Input field labels are configurable\n Given the input has prop \"field-label\" with value \"My Custom Input\"\n When the user views the registration form\n Then they see the input field\n And it has label \"My Custom Input\" above the input\n\n @minutia\n Scenario Outline: The validation error message is configurable\n The error message string is evaluated as an ICU string, but currently is provided no context\n Given the input is required\n And it has prop \"error-message\" with <value>\n When the user tries to register\n But they haven't filled in the input\n Then they see <errorMessage> below\n Examples:\n | value | errorMessage |\n | | Cannot be empty |\n | My Custom Message | My Custom Message |\n\n @motivating\n Scenario: Form data attribute name is configurable\n Given the input has prop \"field-name\" with value \"myCustomField\"\n When the user types \"testing testing\" into the input\n And they register\n Then \"testing testing\" is submitted under \"myCustomField\" in the form data\n\n @motivating\n Scenario Outline: The input field is a text input by default\n Given the input <mayHave> prop \"field-type\" with <value>\n When the user views the input field\n Then it is a text input\n Examples:\n | mayHave | value |\n | has | text |\n | doesn't have | |\n\n @motivating\n Scenario: Date type inputs are supported\n Given the input has prop \"field-type\" \"date\"\n When the user views the input field\n Then they see \"mm/dd/yyyy\" as a placeholder\n And they see a calendar icon on the right\n When they start typing a date\n Then it maintains the \"mm/dd/yyyy\" format\n When they click the calendar icon\n Then a dropdown appears\n And they see a calendar\n When they select a date\n Then it is applied to the input\n\n @landmine\n Scenario: The clear text button in the date picker does not clear the date\n Due to an incompatibility between our shoelace version and the browser, the clear funtionality is not supported currently\n Given the input has prop \"field-type\" \"date\"\n And the user has entered a date\n When they click the calendar icon\n And click the 'clear' text button\n Then their selected date is not cleared\n\n @motivating\n Scenario: Phone number type inputs are supported\n Given the input has prop \"field-type\" with value \"tel\"\n When the user starts typing a phone number in the input\n Then it is formatted into the following form \"(XXX) XXX-XXXX\"\n When they pre-fix their phone number with a \"1\"\n Then it is formatted into the following form \"1 (XXX) XXX-XXXX\"\n\n @landmine\n Scenario: Telephone formatting is removed after 10 numbers\n Given a user using a phone number input field\n And they entered their 10 character phone number\n And it was not prefixed with a 1\n When they add another character\n Then the formatting is removed\n\n @landmine\n Scenario Outline: Input values are always recorded as strings in the form data\n Given the input has prop \"field-type\" with <value>\n And it has a \"field-name\"\n When the user inputs <formInput>\n And they register\n Then <formData> is recorded in the form data as a string\n Examples:\n | value | formInput | formData |\n | text | Hello there | Hello there |\n | date | 05/07/2021 | 2021-05-07 |\n | tel | (250) 234-9877 | (250) 234-9877 |\n\n @minutia\n Scenario Outline: The input field component fails fast if a field name isn't provided\n Given the input <mayHave> prop \"field-name\"\n And it <mayHavePropValue>\n When a user views the input\n Then an alert with an error message is displayed in place of the input\n And it has a details section\n When \"More details\" is clicked\n Then the following information is displayed\n | information |\n | component being used |\n | missing attribute(s) |\n Examples:\n | mayBeAnAttribute | mayHavePropValue |\n | doesn't have | N/A |\n | has | \"\" |\n | has | |";
10960
+ const scenario$k = "@author:derek\n@owner:derek\nFeature: Form Input Field\n\n This component is used as a custom registration field during registration. The field can be text,\n a date or phone number. A motivating use case is to ask for a users company name, this value would then be mapped\n through the Managed Identity Service and upserted on the user after registration.\n\n Background: A user exists and is viewing the hosted portal registration\n Given a user is viewing \"/register\"\n And \"/register\" contains the registration form\n And the registration form has a custom input field\n\n @motivating\n Scenario Outline: Input fields are required by default but can be optional\n Given the input has prop \"field-optional\" with <value>\n And the input is empty\n When the user tries to register\n Then the input <mayBe> highlighted in red\n And an error message <mayAppear> in red below\n And form submission <mayBe> blocked\n Examples:\n | value | mayBe | mayAppear |\n | false | is | appears |\n | | is | appears |\n | true | isn't | doesn't appear |\n\n @motivating\n Scenario: Input field labels are configurable\n Given the input has prop \"field-label\" with value \"My Custom Input\"\n When the user views the registration form\n Then they see the input field\n And it has label \"My Custom Input\" above the input\n\n @minutia\n Scenario Outline: The validation error message is configurable\n The error message string is evaluated as an ICU string, but currently is provided no context\n Given the input is required\n And it has prop \"error-message\" with <value>\n When the user tries to register\n But they haven't filled in the input\n Then they see <errorMessage> below\n Examples:\n | value | errorMessage |\n | | Cannot be empty |\n | My Custom Message | My Custom Message |\n\n @motivating\n Scenario: Form data attribute name is configurable\n Given the input has prop \"field-name\" with value \"myCustomField\"\n When the user types \"testing testing\" into the input\n And they register\n Then \"testing testing\" is submitted under \"myCustomField\" in the form data\n\n @motivating\n Scenario Outline: The input field is a text input by default\n Given the input <mayHave> prop \"field-type\" with <value>\n When the user views the input field\n Then it is a text input\n Examples:\n | mayHave | value |\n | has | text |\n | doesn't have | |\n\n @motivating\n Scenario: Date type inputs are supported\n Given the input has prop \"field-type\" \"date\"\n When the user views the input field\n Then they see \"mm/dd/yyyy\" as a placeholder\n And they see a calendar icon on the right\n When they start typing a date\n Then it maintains the \"mm/dd/yyyy\" format\n When they click the calendar icon\n Then a dropdown appears\n And they see a calendar\n When they select a date\n Then it is applied to the input\n\n @landmine\n Scenario: The clear text button in the date picker does not clear the date\n Due to an incompatibility between our shoelace version and the browser, the clear funtionality is not supported currently\n Given the input has prop \"field-type\" \"date\"\n And the user has entered a date\n When they click the calendar icon\n And click the 'clear' text button\n Then their selected date is not cleared\n\n @motivating\n Scenario: Phone number type inputs are supported\n Given the input has prop \"field-type\" with value \"tel\"\n When the user starts typing a phone number in the input\n Then it is formatted into the following form \"(XXX) XXX-XXXX\"\n When they pre-fix their phone number with a \"1\"\n Then it is formatted into the following form \"1 (XXX) XXX-XXXX\"\n\n @landmine\n Scenario: Telephone formatting is removed after 10 numbers\n Given a user using a phone number input field\n And they entered their 10 character phone number\n And it was not prefixed with a 1\n When they add another character\n Then the formatting is removed\n\n @landmine\n Scenario Outline: Input values are always recorded as strings in the form data\n Given the input has prop \"field-type\" with <value>\n And it has a \"field-name\"\n When the user inputs <formInput>\n And they register\n Then <formData> is recorded in the form data as a string\n Examples:\n | value | formInput | formData |\n | text | Hello there | Hello there |\n | date | 05/07/2021 | 2021-05-07 |\n | tel | (250) 234-9877 | (250) 234-9877 |\n\n @minutia\n Scenario Outline: The input field component fails fast if a field name isn't provided\n Given the input <mayHave> prop \"field-name\"\n And it <mayHavePropValue>\n When a user views the input\n Then an alert with an error message is displayed in place of the input\n And it has a details section\n When \"More details\" is clicked\n Then the following information is displayed\n | information |\n | component being used |\n | missing attribute(s) |\n Examples:\n | mayBeAnAttribute | mayHavePropValue |\n | doesn't have | N/A |\n | has | \"\" |\n | has | |";
11052
10961
 
11053
10962
  const InputField_stories = {
11054
10963
  title: "Components/Input Field",
11055
10964
  parameters: {
11056
- scenario: scenario$l,
10965
+ scenario: scenario$k,
11057
10966
  },
11058
10967
  };
11059
- const defaultProps$d = {
10968
+ const defaultProps$c = {
11060
10969
  states: {
11061
10970
  registrationFormState: {
11062
10971
  validationErrors: {},
@@ -11093,21 +11002,21 @@ const defaultRegisterProps$1 = {
11093
11002
  invalidEmailErrorMessage: "Must be a valid email address",
11094
11003
  },
11095
11004
  };
11096
- const Default$f = () => index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$d));
11097
- const CustomLabel$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$d, { content: { ...defaultProps$d.content, fieldLabel: "My Label" } })));
11098
- const Error$6 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$d, { states: {
11099
- ...defaultProps$d.states,
11005
+ const Default$e = () => index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$c));
11006
+ const CustomLabel$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$c, { content: { ...defaultProps$c.content, fieldLabel: "My Label" } })));
11007
+ const Error$6 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$c, { states: {
11008
+ ...defaultProps$c.states,
11100
11009
  registrationFormState: {
11101
11010
  validationErrors: {
11102
11011
  field: "Cannot be empty",
11103
11012
  },
11104
11013
  },
11105
11014
  } })));
11106
- const CustomError$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$d, { content: {
11107
- ...defaultProps$d.content,
11015
+ const CustomError$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$c, { content: {
11016
+ ...defaultProps$c.content,
11108
11017
  errorMessage: "A value must be entered to continue",
11109
11018
  }, states: {
11110
- ...defaultProps$d.states,
11019
+ ...defaultProps$c.states,
11111
11020
  registrationFormState: {
11112
11021
  validationErrors: {
11113
11022
  field: "Cannot be empty",
@@ -11115,27 +11024,27 @@ const CustomError$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assi
11115
11024
  },
11116
11025
  } })));
11117
11026
  const DateType = () => {
11118
- return (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$d, { content: {
11119
- ...defaultProps$d.content,
11027
+ return (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$c, { content: {
11028
+ ...defaultProps$c.content,
11120
11029
  fieldLabel: "Date",
11121
11030
  fieldType: "date",
11122
11031
  } })));
11123
11032
  };
11124
11033
  const TelType = () => {
11125
- return (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$d, { content: {
11126
- ...defaultProps$d.content,
11034
+ return (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$c, { content: {
11035
+ ...defaultProps$c.content,
11127
11036
  fieldLabel: "Phone Number",
11128
11037
  fieldType: "tel",
11129
11038
  } })));
11130
11039
  };
11131
11040
  const RegistrationField = () => (index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultRegisterProps$1, { content: {
11132
11041
  ...defaultRegisterProps$1.content,
11133
- formData: index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$d)),
11042
+ formData: index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$c)),
11134
11043
  } })));
11135
11044
  const RegistrationFieldCustomLabel = () => (index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultRegisterProps$1, { content: {
11136
11045
  ...defaultRegisterProps$1.content,
11137
- formData: (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$d, { content: {
11138
- ...defaultProps$d.content,
11046
+ formData: (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$c, { content: {
11047
+ ...defaultProps$c.content,
11139
11048
  fieldLabel: "Data",
11140
11049
  } }))),
11141
11050
  } })));
@@ -11143,7 +11052,7 @@ const RegistrationFieldCustomLabel = () => (index.h(ShadowViewAddon.PortalRegist
11143
11052
  const InputField = /*#__PURE__*/Object.freeze({
11144
11053
  __proto__: null,
11145
11054
  'default': InputField_stories,
11146
- Default: Default$f,
11055
+ Default: Default$e,
11147
11056
  CustomLabel: CustomLabel$2,
11148
11057
  Error: Error$6,
11149
11058
  CustomError: CustomError$2,
@@ -11156,7 +11065,7 @@ const InputField = /*#__PURE__*/Object.freeze({
11156
11065
  const UseInputField_stories = {
11157
11066
  title: "Hooks / useInputField",
11158
11067
  parameters: {
11159
- scenario: scenario$l,
11068
+ scenario: scenario$k,
11160
11069
  },
11161
11070
  };
11162
11071
  function setupGraphQL$b() {
@@ -11238,12 +11147,12 @@ const UseInputField = /*#__PURE__*/Object.freeze({
11238
11147
  MissingName: MissingName$2
11239
11148
  });
11240
11149
 
11241
- const scenario$m = "@author:derek\n@owner:derek\nFeature: Reward Exchange List\n\n The Reward Exchange List gives end users the power to exchange their rewards for other rewards.\n It populates a list from the reward exchange rules set up on a given tenant.\n\n Background:\n Given a tenant with reward exchange rules\n\n @motivating\n @ui\n Scenario: The empty state is shown if there are no visible exchanges\n Given a user with no visible exchanges\n When they view the reward exchange\n Then no exchange options are displayed\n And they see an image of a present\n And \"Redeem Rewards\" in bold\n And \"Use your points to redeem rewards once they become available\" below the bolded text\n And the pagination buttons are disabled\n\n @minutia\n @ui\n Scenario: A custom empty state can be provided\n Given a user with no visible exchanges\n And a custom empty state has been supplied in the \"empty\" slot\n When they view the reward exchange\n Then they see the custom empty state\n\n @motivating\n @ui\n Scenario: A Loading Skeleton is displayed when the reward exchange rules are loading\n Given a user\n When they load the reward exchange list\n Then they see a loading Skeleton\n And it has 8 skeleton cards\n When the reward exchange rules have loaded\n Then the skeleton is replaced with reward exchange options\n\n @motivating\n Scenario: An error banner appears when the reward exchange list fails to load\n Given a user trying to view the reward exchange list\n But it fails to load\n Then an error banner is displayed\n And it displays \"Unable to load reward exchange list. Please try again\"\n\n @motivating\n @ui\n Scenario: The exchange progress bar progresses through the exchange process\n Given a user who is eligible for the tenants reward exchange rules\n When they view the reward exchange list\n Then the process bar displays the following elements\n | elements |\n | Step 1 `Rewards` title in black |\n | Step 1 circle with green outline, white fill and number 1 in green |\n | Step 2 `Select` title in grey |\n | Step 2 circle with grey fill and number 2 in white |\n | Step 3 `Confirm` title in grey |\n | Step 3 circle with grey fill and number 3 in white |\n | lines between all steps are greyed out |\n When they continue to the selection page\n Then the progress bar displays the following elements\n | elements |\n | Step 1 `Rewards` title in black |\n | Step 1 circle with white checkmark and green fill |\n | Step 2 `Select` title in black |\n | Step 2 circle with green outline, white fill and number 2 in green |\n | Step 3 `Confirm` title in grey |\n | Step 3 circle with grey fill and number 3 in white |\n | Green line between step 1 and 2 |\n | Grey line between step 2 and 3 |\n When they continue to the confirmation page\n Then the progress bar displays the following elements\n | elements |\n | Step 1 `Rewards` title in black |\n | Step 1 circle with white checkmark and green fill |\n | Step 2 `Select` title in black |\n | Step 2 circle with white checkmark and green fill |\n | Step 3 `Confirm` title in black |\n | Step 3 circle with green outline, white fill and number 3 in green |\n | Green line between all steps |\n When they continue to the redemption page\n Then the progress bar displays the following elements\n | elements |\n | Step 1 `Rewards` title in black |\n | Step 1 circle with white checkmark and green fill |\n | Step 2 `Select` title in black |\n | Step 2 circle with white checkmark and green fill |\n | Step 3 `Confirm` title in black |\n | Step 3 circle with white checkmark and green fill |\n | Green line between all steps |\n\n @motivating\n Scenario: Users must choose a reward exchange option to continue to the selection page\n Given a user who is eligible for the tenants reward exchange rules\n When they view the reward exchange list\n Then the 'Continue' button is disabled\n When they select a reward exchange card\n Then the card is outlined in brand colour with a brand colour cirlcular check box icon in the top right\n And the continue button is no longer disabled\n When they click \"Continue\"\n Then they are brought to the selection page\n\n @motivating\n @ui\n Scenario: Reward exchange rule names and images are used in the reward exchange cards\n Given a tenant reward exchange rule\n And it has name \"My Visa Exchange Rule\"\n And it has an image\n When a user views the reward exchange list\n Then they see a exchange card with title \"My Visa Exchange Rule\"\n And the exchange image on the left hand side of the card\n\n @motivating\n Scenario Outline: Reward exchange source values are displayed on reward exchange cards\n Given a <type> reward exchange rule\n When a user views the reward exchange list\n Then they see <text> under the name on the exchange option cards\n And the pretty values are localized to a user locale\n Examples:\n | type | text |\n | FIXED_GLOBAL_REWARD | the exchange source pretty value |\n | STEPPED_FIXED_GLOBAL_REWARD | the exchange source min pretty value to the source max pretty value |\n | VARIABLE_GLOBAL_REWARD | the exchange source min pretty value to the source max pretty value |\n | VARIABLE_CREDIT_REWARD | the exchange source min pretty value to the source max pretty value |\n\n @motivating\n Scenario Outline: Reward exchange cards can display customized error messages\n Given a reward exchange rule\n And it has <availabilityPredicate>\n And the reward exchange list has prop \"not-available-error\" with <value>\n When the user views the reward exchange list\n Then the card for the reward exchange rule is disabled\n And <message> is displayed\n Examples:\n | availabilityPredicate | value | message |\n | 'champion' in user.segments ? \"NOT_CHAMPION\" : true | {unavailableReasonCode, select, NOT_CHAMPION {Sorry must be a champion!} other {unavailableReasonCode} } | Sorry must be a champion! |\n | user.customFields.purchaseCount < 10 ? \"MORE_PURCHASE\" : true | {unavailableReasonCode, select, MORE_PURCHASE {Complete 10 purchases to unlock} other {unavailableReasonCode} } | Complete 10 purchases to unlock |\n\n @motivating\n Scenario: Exchange options are disabled if they put a user over the W9 limit\n Given a user who is approaching their W9 limit\n And a reward exchange rule\n And its destination reward has a US taxable value that would put the user over their limit\n When they view the reward exchange list\n Then the reward exchange card is disabled\n And a \"US Tax Limit\" error message is displayed on to the right of a exclamation triangle icon\n And the text is orange\n And the icon is orange\n\n @motivating\n Scenario Outline: Exchange options are disabled if a users lacks enough credit to redeem\n Given a <type> reward exchange rule\n But the user lacks enough credit to exchange for it\n When they view the reward exchange list\n Then the reward exchange card is disabled\n And a <text> error message is displayed on to the right of a exclamation triangle icon\n And the text is orange\n And the icon is orange\n Examples:\n | type | text |\n | FIXED_GLOBAL_REWARD | {prettySourceValue} required |\n | STEPPED_FIXED_GLOBAL_REWARD | {prettySourceMinValue} required |\n | VARIABLE_GLOBAL_REWARD | {prettySourceMinValue} required |\n | VARIABLE_CREDIT_REWARD | {prettySourceMinValue} required |\n\n @motivating\n Scenario: Users can go back to the Rewards page from the Select page\n Given a user viewing the Select page\n Then they see a \"Cancel\" text button\n And a \"Continue to confirmation\" brand colour button in the bottom right corner\n When they click \"Cancel\"\n Then they return to the Rewards page\n\n @motivating\n Scenario: Users can go back to the Select Page from the Confirm page\n Given a user viewing the Confirm page\n Then they see a \"Back\" text button\n And a \"Redeem\" brand colour button in the bottom right corner\n When they click \"Back\"\n Then they return to the Select Page\n\n @motivating\n Scenario: Reward rules with visibility predicates that evaluates to false are not shown\n Given a tenant reward exchange rule with visibility predicates that evaluates to false\n When a user views the reward exchange list\n Then they do not see the card for that reward exchange rule\n\n @motivating\n Scenario Outline: Users can choose their reward option for variable rewards on the Select page\n Given a <type> exchange rule\n And it has the following fields\n | fields |\n | name |\n | description |\n | image |\n When a user views the reward exchange list\n And they progress to the Select page for this exchange\n Then they see the exchange rule image on the left hand side\n And on the right hand side they see the following in this order from top to bottom\n | elements |\n | exchange name |\n | exchange description |\n | select list with all exchange options using pretty values, destination reward above source reward |\n Examples:\n | type |\n | STEPPED_FIXED_GLOBAL_REWARD |\n | VARIABLE_GLOBAL_REWARD |\n | VARIABLE_CREDIT_REWARD |\n\n @motivating\n Scenario: Users who selected a fixed exchange rule see exchange information on the Select page\n Given a \"FIXED_GLOBAL_REWARD\" exchange rule\n And it has the following fields\n | fields |\n | name |\n | description |\n | image |\n When a user views the reward exchange list\n And they progress to the Select page for this exchange\n Then they see the exchange rule image on the left hand side\n And on the right hand side they see the following in this order from top to bottom\n | elements |\n | exchange name |\n | exchange source pretty value displayed in brand colour |\n | exchange description |\n\n @motivating\n Scenario Outline: Users selection variable rewards can only select rewards they are eligible to exchange for\n Given a <type> exchange rule\n When a user views the reward exchange list\n And they progress to the Select page for this exchange\n Then they see a drop down with all the reward exchange selections\n When they click on the drop down\n But they are not eligible for all of the exchanges options <dueToReason>\n Then the ineligble options are disabled\n And under the source value is <text>\n Examples:\n | type | dueToReason | text |\n | STEPPED_FIXED_GLOBAL_REWARD | due to insufficent source value | {prettySourceValue} required |\n | VARIABLE_GLOBAL_REWARD | due to insufficent source value | {prettySourceValue} required |\n | VARIABLE_CREDIT_REWARD | due to insufficent source value | {prettySourceValue} required |\n | STEPPED_FIXED_GLOBAL_REWARD | W9 | US Tax Limit |\n | VARIABLE_GLOBAL_REWARD | W9 | US Tax Limit |\n | VARIABLE_CREDIT_REWARD | W9 | US Tax Limit |\n\n @motivating\n Scenario Outline: The Confirm page allows users to view their exchange before committing\n Given a <type> exchange rule\n When a user views the reward exchange list\n And they select the exchange\n And they progress to Confirm page\n Then they see a row with title \"Reward\"\n And it contains the exchange name\n And it contains the exchange image\n And they <maySee> a row with title \"Reward Amount\"\n And it <mayContain> <amountTitle>\n And they see a row with title \"Cost to Redeem\"\n And it contains the source reward pretty value in bolded text\n Examples:\n | type | maySee | mayContain | amountTitle |\n | FIXED_GLOBAL_REWARD | don't | doesn't contain | N/A |\n | VARIABLE_GLOBAL_REWARD | see | contains | the pretty destination value |\n | STEPPED_FIXED_GLOBAL_REWARD | see | contains | the pretty destination value |\n | VARIABLE_CREDIT_REWARD | see | contains | the pretty destination value |\n\n @motivating\n Scenario: An error banner is displayed if an error occurs during redemeption\n Given a user has selected a reward to exchange\n And is on the confirmation page\n When they click \"Redeem\"\n But an error occurs\n Then an error banner appears\n And it contains details about the error\n And the reward exchange is not completed\n\n @motivating\n Scenario: Confetti is displayed when a reward exchange succeeds\n Given a user has selected a reward to exchange\n And they are on the confirmation page\n When they click \"Redeem\"\n And the exchange is successful\n Then they see confetti centered on the success page\n And they see text describing what they exchanged for their new reward\n And they see a \"Done\" brand colour button\n When they click \"Done\"\n Then they see the Rewards page\n\n @motivating\n Scenario: Fuel tank codes are shown when a reward exchange succeeds\n Given a user has selected to exchange for a fuel tank reward\n When they complete the reward exchange\n And are on the success page\n Then they see a textbox with their fuel tank code\n And a clipboard icon\n When they click the clipboard icon\n Then their fuel tank code is copied to their clipboard\n\n @motivating\n Scenario Outline: Users can exchange for any type of reward\n Given a <type> reward exchange rule for a <reward>\n And a user who has enough source credit to exchange for the reward\n When they go through the exchange flow\n And exchange for their reward\n Then their credit is exchanged for the <reward>\n Examples:\n | type | reward |\n | FIXED_GLOBAL_REWARD | gift card |\n | FIXED_GLOBAL_REWARD | fuel tank code |\n | FIXED_GLOBAL_REWARD | discount |\n | FIXED_GLOBAL_REWARD | credit reward |\n | STEPPED_FIXED_GLOBAL_REWARD | gift card |\n | STEPPED_FIXED_GLOBAL_REWARD | discount |\n | STEPPED_FIXED_GLOBAL_REWARD | credit reward |\n | VARIABLE_GLOBAL_REWARD | gift card |\n | VARIABLE_GLOBAL_REWARD | discount |\n | VARIABLE_GLOBAL_REWARD | credit reward |\n | VARIABLE_CREDIT_REWARD | credit reward |";
11150
+ const scenario$l = "@author:derek\n@owner:derek\nFeature: Reward Exchange List\n\n The Reward Exchange List gives end users the power to exchange their rewards for other rewards.\n It populates a list from the reward exchange rules set up on a given tenant.\n\n Background:\n Given a tenant with reward exchange rules\n\n @motivating\n @ui\n Scenario: The empty state is shown if there are no visible exchanges\n Given a user with no visible exchanges\n When they view the reward exchange\n Then no exchange options are displayed\n And they see an image of a present\n And \"Redeem Rewards\" in bold\n And \"Use your points to redeem rewards once they become available\" below the bolded text\n And the pagination buttons are disabled\n\n @minutia\n @ui\n Scenario: A custom empty state can be provided\n Given a user with no visible exchanges\n And a custom empty state has been supplied in the \"empty\" slot\n When they view the reward exchange\n Then they see the custom empty state\n\n @motivating\n @ui\n Scenario: A Loading Skeleton is displayed when the reward exchange rules are loading\n Given a user\n When they load the reward exchange list\n Then they see a loading Skeleton\n And it has 8 skeleton cards\n When the reward exchange rules have loaded\n Then the skeleton is replaced with reward exchange options\n\n @motivating\n Scenario: An error banner appears when the reward exchange list fails to load\n Given a user trying to view the reward exchange list\n But it fails to load\n Then an error banner is displayed\n And it displays \"Unable to load reward exchange list. Please try again\"\n\n @motivating\n @ui\n Scenario: The exchange progress bar progresses through the exchange process\n Given a user who is eligible for the tenants reward exchange rules\n When they view the reward exchange list\n Then the process bar displays the following elements\n | elements |\n | Step 1 `Rewards` title in black |\n | Step 1 circle with green outline, white fill and number 1 in green |\n | Step 2 `Select` title in grey |\n | Step 2 circle with grey fill and number 2 in white |\n | Step 3 `Confirm` title in grey |\n | Step 3 circle with grey fill and number 3 in white |\n | lines between all steps are greyed out |\n When they continue to the selection page\n Then the progress bar displays the following elements\n | elements |\n | Step 1 `Rewards` title in black |\n | Step 1 circle with white checkmark and green fill |\n | Step 2 `Select` title in black |\n | Step 2 circle with green outline, white fill and number 2 in green |\n | Step 3 `Confirm` title in grey |\n | Step 3 circle with grey fill and number 3 in white |\n | Green line between step 1 and 2 |\n | Grey line between step 2 and 3 |\n When they continue to the confirmation page\n Then the progress bar displays the following elements\n | elements |\n | Step 1 `Rewards` title in black |\n | Step 1 circle with white checkmark and green fill |\n | Step 2 `Select` title in black |\n | Step 2 circle with white checkmark and green fill |\n | Step 3 `Confirm` title in black |\n | Step 3 circle with green outline, white fill and number 3 in green |\n | Green line between all steps |\n When they continue to the redemption page\n Then the progress bar displays the following elements\n | elements |\n | Step 1 `Rewards` title in black |\n | Step 1 circle with white checkmark and green fill |\n | Step 2 `Select` title in black |\n | Step 2 circle with white checkmark and green fill |\n | Step 3 `Confirm` title in black |\n | Step 3 circle with white checkmark and green fill |\n | Green line between all steps |\n\n @motivating\n Scenario: Users must choose a reward exchange option to continue to the selection page\n Given a user who is eligible for the tenants reward exchange rules\n When they view the reward exchange list\n Then the 'Continue' button is disabled\n When they select a reward exchange card\n Then the card is outlined in brand colour with a brand colour cirlcular check box icon in the top right\n And the continue button is no longer disabled\n When they click \"Continue\"\n Then they are brought to the selection page\n\n @motivating\n @ui\n Scenario: Reward exchange rule names and images are used in the reward exchange cards\n Given a tenant reward exchange rule\n And it has name \"My Visa Exchange Rule\"\n And it has an image\n When a user views the reward exchange list\n Then they see a exchange card with title \"My Visa Exchange Rule\"\n And the exchange image on the left hand side of the card\n\n @motivating\n Scenario Outline: Reward exchange source values are displayed on reward exchange cards\n Given a <type> reward exchange rule\n When a user views the reward exchange list\n Then they see <text> under the name on the exchange option cards\n And the pretty values are localized to a user locale\n Examples:\n | type | text |\n | FIXED_GLOBAL_REWARD | the exchange source pretty value |\n | STEPPED_FIXED_GLOBAL_REWARD | the exchange source min pretty value to the source max pretty value |\n | VARIABLE_GLOBAL_REWARD | the exchange source min pretty value to the source max pretty value |\n | VARIABLE_CREDIT_REWARD | the exchange source min pretty value to the source max pretty value |\n\n @motivating\n Scenario Outline: Reward exchange cards can display customized error messages\n Given a reward exchange rule\n And it has <availabilityPredicate>\n And the reward exchange list has prop \"not-available-error\" with <value>\n When the user views the reward exchange list\n Then the card for the reward exchange rule is disabled\n And <message> is displayed\n Examples:\n | availabilityPredicate | value | message |\n | 'champion' in user.segments ? \"NOT_CHAMPION\" : true | {unavailableReasonCode, select, NOT_CHAMPION {Sorry must be a champion!} other {unavailableReasonCode} } | Sorry must be a champion! |\n | user.customFields.purchaseCount < 10 ? \"MORE_PURCHASE\" : true | {unavailableReasonCode, select, MORE_PURCHASE {Complete 10 purchases to unlock} other {unavailableReasonCode} } | Complete 10 purchases to unlock |\n\n @motivating\n Scenario: Exchange options are disabled if they put a user over the W9 limit\n Given a user who is approaching their W9 limit\n And a reward exchange rule\n And its destination reward has a US taxable value that would put the user over their limit\n When they view the reward exchange list\n Then the reward exchange card is disabled\n And a \"US Tax Limit\" error message is displayed on to the right of a exclamation triangle icon\n And the text is orange\n And the icon is orange\n\n @motivating\n Scenario Outline: Exchange options are disabled if a users lacks enough credit to redeem\n Given a <type> reward exchange rule\n But the user lacks enough credit to exchange for it\n When they view the reward exchange list\n Then the reward exchange card is disabled\n And a <text> error message is displayed on to the right of a exclamation triangle icon\n And the text is orange\n And the icon is orange\n Examples:\n | type | text |\n | FIXED_GLOBAL_REWARD | {prettySourceValue} required |\n | STEPPED_FIXED_GLOBAL_REWARD | {prettySourceMinValue} required |\n | VARIABLE_GLOBAL_REWARD | {prettySourceMinValue} required |\n | VARIABLE_CREDIT_REWARD | {prettySourceMinValue} required |\n\n @motivating\n Scenario: Users can go back to the Rewards page from the Select page\n Given a user viewing the Select page\n Then they see a \"Cancel\" text button\n And a \"Continue to confirmation\" brand colour button in the bottom right corner\n When they click \"Cancel\"\n Then they return to the Rewards page\n\n @motivating\n Scenario: Users can go back to the Select Page from the Confirm page\n Given a user viewing the Confirm page\n Then they see a \"Back\" text button\n And a \"Redeem\" brand colour button in the bottom right corner\n When they click \"Back\"\n Then they return to the Select Page\n\n @motivating\n Scenario: Reward rules with visibility predicates that evaluates to false are not shown\n Given a tenant reward exchange rule with visibility predicates that evaluates to false\n When a user views the reward exchange list\n Then they do not see the card for that reward exchange rule\n\n @motivating\n Scenario Outline: Users can choose their reward option for variable rewards on the Select page\n Given a <type> exchange rule\n And it has the following fields\n | fields |\n | name |\n | description |\n | image |\n When a user views the reward exchange list\n And they progress to the Select page for this exchange\n Then they see the exchange rule image on the left hand side\n And on the right hand side they see the following in this order from top to bottom\n | elements |\n | exchange name |\n | exchange description |\n | select list with all exchange options using pretty values, destination reward above source reward |\n Examples:\n | type |\n | STEPPED_FIXED_GLOBAL_REWARD |\n | VARIABLE_GLOBAL_REWARD |\n | VARIABLE_CREDIT_REWARD |\n\n @motivating\n Scenario: Users who selected a fixed exchange rule see exchange information on the Select page\n Given a \"FIXED_GLOBAL_REWARD\" exchange rule\n And it has the following fields\n | fields |\n | name |\n | description |\n | image |\n When a user views the reward exchange list\n And they progress to the Select page for this exchange\n Then they see the exchange rule image on the left hand side\n And on the right hand side they see the following in this order from top to bottom\n | elements |\n | exchange name |\n | exchange source pretty value displayed in brand colour |\n | exchange description |\n\n @motivating\n Scenario Outline: Users selection variable rewards can only select rewards they are eligible to exchange for\n Given a <type> exchange rule\n When a user views the reward exchange list\n And they progress to the Select page for this exchange\n Then they see a drop down with all the reward exchange selections\n When they click on the drop down\n But they are not eligible for all of the exchanges options <dueToReason>\n Then the ineligble options are disabled\n And under the source value is <text>\n Examples:\n | type | dueToReason | text |\n | STEPPED_FIXED_GLOBAL_REWARD | due to insufficent source value | {prettySourceValue} required |\n | VARIABLE_GLOBAL_REWARD | due to insufficent source value | {prettySourceValue} required |\n | VARIABLE_CREDIT_REWARD | due to insufficent source value | {prettySourceValue} required |\n | STEPPED_FIXED_GLOBAL_REWARD | W9 | US Tax Limit |\n | VARIABLE_GLOBAL_REWARD | W9 | US Tax Limit |\n | VARIABLE_CREDIT_REWARD | W9 | US Tax Limit |\n\n @motivating\n Scenario Outline: The Confirm page allows users to view their exchange before committing\n Given a <type> exchange rule\n When a user views the reward exchange list\n And they select the exchange\n And they progress to Confirm page\n Then they see a row with title \"Reward\"\n And it contains the exchange name\n And it contains the exchange image\n And they <maySee> a row with title \"Reward Amount\"\n And it <mayContain> <amountTitle>\n And they see a row with title \"Cost to Redeem\"\n And it contains the source reward pretty value in bolded text\n Examples:\n | type | maySee | mayContain | amountTitle |\n | FIXED_GLOBAL_REWARD | don't | doesn't contain | N/A |\n | VARIABLE_GLOBAL_REWARD | see | contains | the pretty destination value |\n | STEPPED_FIXED_GLOBAL_REWARD | see | contains | the pretty destination value |\n | VARIABLE_CREDIT_REWARD | see | contains | the pretty destination value |\n\n @motivating\n Scenario: An error banner is displayed if an error occurs during redemeption\n Given a user has selected a reward to exchange\n And is on the confirmation page\n When they click \"Redeem\"\n But an error occurs\n Then an error banner appears\n And it contains details about the error\n And the reward exchange is not completed\n\n @motivating\n Scenario: Confetti is displayed when a reward exchange succeeds\n Given a user has selected a reward to exchange\n And they are on the confirmation page\n When they click \"Redeem\"\n And the exchange is successful\n Then they see confetti centered on the success page\n And they see text describing what they exchanged for their new reward\n And they see a \"Done\" brand colour button\n When they click \"Done\"\n Then they see the Rewards page\n\n @motivating\n Scenario: Fuel tank codes are shown when a reward exchange succeeds\n Given a user has selected to exchange for a fuel tank reward\n When they complete the reward exchange\n And are on the success page\n Then they see a textbox with their fuel tank code\n And a clipboard icon\n When they click the clipboard icon\n Then their fuel tank code is copied to their clipboard\n\n @motivating\n Scenario Outline: Users can exchange for any type of reward\n Given a <type> reward exchange rule for a <reward>\n And a user who has enough source credit to exchange for the reward\n When they go through the exchange flow\n And exchange for their reward\n Then their credit is exchanged for the <reward>\n Examples:\n | type | reward |\n | FIXED_GLOBAL_REWARD | gift card |\n | FIXED_GLOBAL_REWARD | fuel tank code |\n | FIXED_GLOBAL_REWARD | discount |\n | FIXED_GLOBAL_REWARD | credit reward |\n | STEPPED_FIXED_GLOBAL_REWARD | gift card |\n | STEPPED_FIXED_GLOBAL_REWARD | discount |\n | STEPPED_FIXED_GLOBAL_REWARD | credit reward |\n | VARIABLE_GLOBAL_REWARD | gift card |\n | VARIABLE_GLOBAL_REWARD | discount |\n | VARIABLE_GLOBAL_REWARD | credit reward |\n | VARIABLE_CREDIT_REWARD | credit reward |";
11242
11151
 
11243
11152
  const RewardExchangeList_stories = {
11244
11153
  title: "Components/Reward Exchange List",
11245
11154
  parameters: {
11246
- scenario: scenario$m,
11155
+ scenario: scenario$l,
11247
11156
  },
11248
11157
  };
11249
11158
  const StoryBase = (props) => () => {
@@ -11291,12 +11200,12 @@ const RewardExchangeList = /*#__PURE__*/Object.freeze({
11291
11200
  Empty: Empty$2
11292
11201
  });
11293
11202
 
11294
- const scenario$n = "@author:derek\n@owner:derek\nFeature: Program Explainer\n\n @motivating\n @ui\n Scenario Outline: The program explainer wraps program explainer steps and aligns them\n Given a program explainer component\n And it has <number> program explainer steps as components\n When a user views the program explainer\n Then they see <number> steps aligned horizontally\n And they have equal height/width\n And equal padding in between\n When they are viewed on a screen smaller than 500px\n Then the steps stack vertically with equal padding in between\n And they have equal width\n But height may vary\n Examples:\n | number |\n | 2 |\n | 3 |\n | 4 |\n\n @motivating\n @ui\n Scenario: The program explainer displays a section header\n Given a program explainer step with props\n | prop | value |\n | header | My Header |\n And it has program explainer steps as children\n When a user views the program explainer\n Then they see \"My Header\" centered above the explainer steps\n\n @motivating\n @ui\n Scenario: Colours are customizable\n Given a program explainer with props\n | prop | value |\n | text-color | purple |\n | background-color | grey |\n When a user views the program explainer\n Then the header is purple\n And the background between steos is grey\n";
11203
+ const scenario$m = "@author:derek\n@owner:derek\nFeature: Program Explainer\n\n @motivating\n @ui\n Scenario Outline: The program explainer wraps program explainer steps and aligns them\n Given a program explainer component\n And it has <number> program explainer steps as components\n When a user views the program explainer\n Then they see <number> steps aligned horizontally\n And they have equal height/width\n And equal padding in between\n When they are viewed on a screen smaller than 500px\n Then the steps stack vertically with equal padding in between\n And they have equal width\n But height may vary\n Examples:\n | number |\n | 2 |\n | 3 |\n | 4 |\n\n @motivating\n @ui\n Scenario: The program explainer displays a section header\n Given a program explainer step with props\n | prop | value |\n | header | My Header |\n And it has program explainer steps as children\n When a user views the program explainer\n Then they see \"My Header\" centered above the explainer steps\n\n @motivating\n @ui\n Scenario: Colours are customizable\n Given a program explainer with props\n | prop | value |\n | text-color | purple |\n | background-color | grey |\n When a user views the program explainer\n Then the header is purple\n And the background between steos is grey\n";
11295
11204
 
11296
11205
  const ProgramExplainer_stories = {
11297
11206
  title: "Components/Program Explainer",
11298
11207
  parameters: {
11299
- scenario: scenario$n,
11208
+ scenario: scenario$m,
11300
11209
  },
11301
11210
  };
11302
11211
  const OneStep = () => {
@@ -11352,12 +11261,12 @@ const ProgramExplainer = /*#__PURE__*/Object.freeze({
11352
11261
  ProgramExplainerGeneric: ProgramExplainerGeneric
11353
11262
  });
11354
11263
 
11355
- const scenario$o = "@author:derek\n@owner:derek\nFeature: Program Explainer Step\n\n @motivating\n @ui\n Scenario: The program explainer step displays a icon, header and description\n Given a program explainer step with props\n | prop | value |\n | header | My Header |\n | description | My program explainer description |\n | icon | person-plus-fill |\n When a user views the explainer step\n Then they see an person icon with a + in the top left hand corner\n And the icon is weight 300 brand colour\n And below they see \"My Header\" in large bold font\n And below they see \"My program explainer description\" in medium font\n And the step background colour is weight 50 brand colour\n\n @motivating\n @ui\n Scenario: The program explainer can display an image in place of an icon\n Given a program explainer\n And it has an \"image-url\" prop with a value of a valid url to an image\n When a user views the explainer step\n Then the image is displayed in place of an incon in the top left hand corner\n\n @motivating\n @ui\n Scenario: Colours are customizable\n Given a program explainer step with props\n | prop | value |\n | text-color | purple |\n | background-color | grey |\n When a user views the explainer step\n Then they see the step background is grey\n And the header text is purple\n And the description text is purple\n";
11264
+ const scenario$n = "@author:derek\n@owner:derek\nFeature: Program Explainer Step\n\n @motivating\n @ui\n Scenario: The program explainer step displays a icon, header and description\n Given a program explainer step with props\n | prop | value |\n | header | My Header |\n | description | My program explainer description |\n | icon | person-plus-fill |\n When a user views the explainer step\n Then they see an person icon with a + in the top left hand corner\n And the icon is weight 300 brand colour\n And below they see \"My Header\" in large bold font\n And below they see \"My program explainer description\" in medium font\n And the step background colour is weight 50 brand colour\n\n @motivating\n @ui\n Scenario: The program explainer can display an image in place of an icon\n Given a program explainer\n And it has an \"image-url\" prop with a value of a valid url to an image\n When a user views the explainer step\n Then the image is displayed in place of an incon in the top left hand corner\n\n @motivating\n @ui\n Scenario: Colours are customizable\n Given a program explainer step with props\n | prop | value |\n | text-color | purple |\n | background-color | grey |\n When a user views the explainer step\n Then they see the step background is grey\n And the header text is purple\n And the description text is purple\n";
11356
11265
 
11357
11266
  const ProgramExplainerStep_stories = {
11358
11267
  title: "Components/Program Explainer Step",
11359
11268
  parameters: {
11360
- scenario: scenario$o,
11269
+ scenario: scenario$n,
11361
11270
  },
11362
11271
  };
11363
11272
  const ProgramExplainerStep = () => {
@@ -11374,12 +11283,12 @@ const ProgramExplainerStep$1 = /*#__PURE__*/Object.freeze({
11374
11283
  ProgramExplainerStepCustom: ProgramExplainerStepCustom
11375
11284
  });
11376
11285
 
11377
- const scenario$p = "@author:derek\n@owner:logan\nFeature: Brand Configuration\n\n\t@motivating\n\tScenario: The brand components creates a colour pallet from a brand colour and applies it to children\n\t\tGiven a brand component with \"brand-color\" \"#4225c4\"\n\t\tAnd it is wrapping several mint components\n\t\tWhen a user views the children components\n\t\tThen the following css variables are set\n\t\t\t| variable | value |\n\t\t\t| --sl-color-primary-50 | hsla(251, 68%, 95%, 1) |\n\t\t\t| --sl-color-primary-100 | hsla(251, 68%, 86%, 1) |\n\t\t\t| --sl-color-primary-200 | hsla(251, 68%, 76%, 1) |\n\t\t\t| --sl-color-primary-300 | hsla(251, 68%, 66%, 1) |\n\t\t\t| --sl-color-primary-400 | hsla(251, 68%, 56%, 1) |\n\t\t\t| --sl-color-primary-500 | hsla(251, 68%, 46%, 1) |\n\t\t\t| --sl-color-primary-600 | hsla(251, 68%, 39%, 1) |\n\t\t\t| --sl-color-primary-700 | hsla(251, 68%, 32%, 1) |\n\t\t\t| --sl-color-primary-800 | hsla(251, 68%, 25%, 1) |\n\t\t\t| --sl-color-primary-900 | hsla(251, 68%, 18%, 1) |\n\t\t\t| --sl-color-primary-950 | hsla(251, 68%, 15%, 1) |\n\t\t\t| --sl-focus-ring-color-primary | var(--sl-color-primary-100) |\n\t\t\t| --sl-input-border-color-focus | var(--sl-color-primary-500) |\n\t\t\t| --sl-color-primary-hue | var(--sl-color-primary-500) |\n\t\tAnd they are applied to the children components\n\t\tBut they are not applied to any components outside of the brand component\n\t\tAnd they are not applied to any vanilla components\n\n\t@minutia\n\tScenario Outline: The brand colour can be hex, HSL or rgb\n\t\tGiven a brand component with \"brand-color\" <colour>\n\t\tAnd it is wrapping several mint components\n\t\tWhen a user views the children components\n\t\tThen the colour is used to create a brand palete\n\t\tAnd it is applied to the children components\n\t\tExamples:\n\t\t\t| colour |\n\t\t\t| #4225c4 |\n\t\t\t| rgb(66, 37, 196) |\n\t\t\t| hsl(251, 68%, 46%) |\n\t\t\t| hsla(251, 68%, 46%, 1) |\n\n\t@motivating\n\tScenario: The brand component can apply a brand font to children components\n\t\tGiven a brand component with \"brand-font\" \"Nunito Sans\"\n\t\tAnd it is wrapping several mint components\n\t\tWhen a user views the children components\n\t\tThen the following css variables are set\n\t\t\t| variable | value |\n\t\t\t| --sl-font-sans | \"Nunito Sans\", arial |\n\t\t\t| --sl-input-font-family | \"Nunito Sans\", arial |\n\t\t\t| --sl-tooltip-font-family | \"Nunito Sans\", arial |\n\t\t\t| font-family | \"Nunito Sans\", arial |\n\t\tAnd they are applied to the children components\n\t\tAnd the children component's text is \"Nunito Sans\"";
11286
+ const scenario$o = "@author:derek\n@owner:logan\nFeature: Brand Configuration\n\n\t@motivating\n\tScenario: The brand components creates a colour pallet from a brand colour and applies it to children\n\t\tGiven a brand component with \"brand-color\" \"#4225c4\"\n\t\tAnd it is wrapping several mint components\n\t\tWhen a user views the children components\n\t\tThen the following css variables are set\n\t\t\t| variable | value |\n\t\t\t| --sl-color-primary-50 | hsla(251, 68%, 95%, 1) |\n\t\t\t| --sl-color-primary-100 | hsla(251, 68%, 86%, 1) |\n\t\t\t| --sl-color-primary-200 | hsla(251, 68%, 76%, 1) |\n\t\t\t| --sl-color-primary-300 | hsla(251, 68%, 66%, 1) |\n\t\t\t| --sl-color-primary-400 | hsla(251, 68%, 56%, 1) |\n\t\t\t| --sl-color-primary-500 | hsla(251, 68%, 46%, 1) |\n\t\t\t| --sl-color-primary-600 | hsla(251, 68%, 39%, 1) |\n\t\t\t| --sl-color-primary-700 | hsla(251, 68%, 32%, 1) |\n\t\t\t| --sl-color-primary-800 | hsla(251, 68%, 25%, 1) |\n\t\t\t| --sl-color-primary-900 | hsla(251, 68%, 18%, 1) |\n\t\t\t| --sl-color-primary-950 | hsla(251, 68%, 15%, 1) |\n\t\t\t| --sl-focus-ring-color-primary | var(--sl-color-primary-100) |\n\t\t\t| --sl-input-border-color-focus | var(--sl-color-primary-500) |\n\t\t\t| --sl-color-primary-hue | var(--sl-color-primary-500) |\n\t\tAnd they are applied to the children components\n\t\tBut they are not applied to any components outside of the brand component\n\t\tAnd they are not applied to any vanilla components\n\n\t@minutia\n\tScenario Outline: The brand colour can be hex, HSL or rgb\n\t\tGiven a brand component with \"brand-color\" <colour>\n\t\tAnd it is wrapping several mint components\n\t\tWhen a user views the children components\n\t\tThen the colour is used to create a brand palete\n\t\tAnd it is applied to the children components\n\t\tExamples:\n\t\t\t| colour |\n\t\t\t| #4225c4 |\n\t\t\t| rgb(66, 37, 196) |\n\t\t\t| hsl(251, 68%, 46%) |\n\t\t\t| hsla(251, 68%, 46%, 1) |\n\n\t@motivating\n\tScenario: The brand component can apply a brand font to children components\n\t\tGiven a brand component with \"brand-font\" \"Nunito Sans\"\n\t\tAnd it is wrapping several mint components\n\t\tWhen a user views the children components\n\t\tThen the following css variables are set\n\t\t\t| variable | value |\n\t\t\t| --sl-font-sans | \"Nunito Sans\", arial |\n\t\t\t| --sl-input-font-family | \"Nunito Sans\", arial |\n\t\t\t| --sl-tooltip-font-family | \"Nunito Sans\", arial |\n\t\t\t| font-family | \"Nunito Sans\", arial |\n\t\tAnd they are applied to the children components\n\t\tAnd the children component's text is \"Nunito Sans\"";
11378
11287
 
11379
11288
  const SqmBrand_stories = {
11380
11289
  title: "Components/Brand",
11381
11290
  parameters: {
11382
- scenario: scenario$p,
11291
+ scenario: scenario$o,
11383
11292
  },
11384
11293
  };
11385
11294
  const SampleComponents = () => (index.h("div", { style: { padding: "10px", border: "5px solid #EEE" } },
@@ -11480,12 +11389,12 @@ const BrandStories = /*#__PURE__*/Object.freeze({
11480
11389
  Fonts: Fonts
11481
11390
  });
11482
11391
 
11483
- const scenario$q = "@author:kutay\n@owner:kutay\nFeature: Card Feed\n\n\tThe Card Feed component displays Task Card components in a grid layout.\n\n\tBackground: A user on the portal is viewing the widget\n\t\tGiven a user viewing the Card Feed component\n\n\t@motivating\n\tScenario: The Card Feed component displays Task Cards given as children slots\n\t\tGiven a Card Feed component\n\t\tAnd it is wrapping a number of task cards as children\n\t\tWhen the user views the Card Feed\n\t\tThen the task cards are displayed in a masonry layout\n\t\tWhen the card feed with grows or shrinks in width\n\t\tThen the number of columns adjust to the given width\n\n\t@motivating\n\t@ui\n\tScenario Outline: The Card Feed component can have a maximum width\n\t\tGiven a Card Feed component\n\t\tAnd it is wrapping a number of task cards as children\n\t\tAnd has prop \"width\" has a provided <value>\n\t\tThen the task cards are displayed in a masonry layout\n\t\tWhen the card feed with grows or shrinks in width\n\t\tThen the number of columns adjust to the given width\n\t\tAnd the task cards do not exceed <width>\n\t\tExamples:\n\t\t\t| value | width |\n\t\t\t| | 347px |\n\t\t\t| 200 | 200px |\n\t\t\t| 400 | 400px |\n\n\t@motivating\n\t@ui\n\tScenario Outline: The Card Feed component gap between task cards can be customized\n\t\tGiven a Card Feed component\n\t\tAnd it is wrapping a number of task cards as children\n\t\tAnd has prop \"gap\" has a provided <value>\n\t\tThen the task cards are displayed in a masonry layout\n\t\tAnd the gap between the columns is the <gap>\n\t\tExamples:\n\t\t\t| value | gap |\n\t\t\t| | 24px |\n\t\t\t| 20 | 20px |\n\t\t\t| 50 | 50px |";
11392
+ const scenario$p = "@author:kutay\n@owner:kutay\nFeature: Card Feed\n\n\tThe Card Feed component displays Task Card components in a grid layout.\n\n\tBackground: A user on the portal is viewing the widget\n\t\tGiven a user viewing the Card Feed component\n\n\t@motivating\n\tScenario: The Card Feed component displays Task Cards given as children slots\n\t\tGiven a Card Feed component\n\t\tAnd it is wrapping a number of task cards as children\n\t\tWhen the user views the Card Feed\n\t\tThen the task cards are displayed in a masonry layout\n\t\tWhen the card feed with grows or shrinks in width\n\t\tThen the number of columns adjust to the given width\n\n\t@motivating\n\t@ui\n\tScenario Outline: The Card Feed component can have a maximum width\n\t\tGiven a Card Feed component\n\t\tAnd it is wrapping a number of task cards as children\n\t\tAnd has prop \"width\" has a provided <value>\n\t\tThen the task cards are displayed in a masonry layout\n\t\tWhen the card feed with grows or shrinks in width\n\t\tThen the number of columns adjust to the given width\n\t\tAnd the task cards do not exceed <width>\n\t\tExamples:\n\t\t\t| value | width |\n\t\t\t| | 347px |\n\t\t\t| 200 | 200px |\n\t\t\t| 400 | 400px |\n\n\t@motivating\n\t@ui\n\tScenario Outline: The Card Feed component gap between task cards can be customized\n\t\tGiven a Card Feed component\n\t\tAnd it is wrapping a number of task cards as children\n\t\tAnd has prop \"gap\" has a provided <value>\n\t\tThen the task cards are displayed in a masonry layout\n\t\tAnd the gap between the columns is the <gap>\n\t\tExamples:\n\t\t\t| value | gap |\n\t\t\t| | 24px |\n\t\t\t| 20 | 20px |\n\t\t\t| 50 | 50px |";
11484
11393
 
11485
11394
  const CardFeed_stories = {
11486
11395
  title: "Components/Card Feed",
11487
11396
  parameters: {
11488
- scenario: scenario$q,
11397
+ scenario: scenario$p,
11489
11398
  },
11490
11399
  };
11491
11400
  const oneAction$1 = {
@@ -11722,12 +11631,12 @@ const CardFeed = /*#__PURE__*/Object.freeze({
11722
11631
  CardFeedGeneric: CardFeedGeneric
11723
11632
  });
11724
11633
 
11725
- const scenario$r = "@author:kutay\n@owner:noah\nFeature: Portal Container\n\n\t@motivating\n\t@ui\n\tScenario: Horizontal content overflows, but does not stretch\n\t\tGiven there are two element in the container\n\t\tAnd the first is small\n\t\tAnd the second would stretch the container wider than it's parent\n\t\tThen the second one is clipped\n\t\tAnd the first one doesn't stretch\n\n\t@landmine\n\t@ui\n\tScenario: `max-width` is required for displaying as a row\n\t\tGiven I have `direction` to \"row\"\n\t\tAnd I have not set a `max-width`\n\t\tThen it displays as a column\n\n\t@motivating\n\t@ui\n\tScenario Outline: Content padding can be customized\n\t\tGiven prop \"padding\" has <value>\n\t\tThen <padding> is applied to content\n\n\t\tExamples:\n\t\t\t| value | padding |\n\t\t\t| none | no padding |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| N/A | no padding |\n\n\n\t@motivating\n\t@ui\n\tScenario Outline: Gap between content elements can be customized\n\t\tGiven prop \"gap\" has <value>\n\t\tThen <gap> is applied to elements between content\n\n\t\tExamples:\n\t\t\t| value | gap |\n\t\t\t| none | no padding |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| N/A | no padding |\n\n\t@minutia\n\t@ui\n\tScenario: Content can be center aligned in horizontal view\n\t\tGiven I have supplied the prop \"center\"\n\t\tThen the content is center aligned\n\n\t@minutia\n\t@ui\n\tScenario: Content in the last row can span full width with display in horizontal view\n\t\tGiven I have `display` to \"flex\"\n\t\tThen the content is full width on the last row\n\n\t@motivating\n\t@ui\n\tScenario Outline: Content can be aligned along the x-axis\n\t\tGiven prop \"justify-content\" has <value>\n\t\tThen content within the container is aligned <alignment>\n\n\t\tExamples:\n\t\t\t| value | alignment |\n\t\t\t| none | no alignment |\n\t\t\t| start | to the start |\n\t\t\t| center | to the center |\n\t\t\t| end | to the end |\n\t\t\t| space-between | with space between |\n\t\t\t| space-around | with space around |\n\t\t\t| space-evenly | with space evenly |\n\n\n\t@motivating\n\t@ui\n\tScenario Outline: Component background color can be customized\n\t\tGiven a user is viewing the Portal Container component\n\t\tThen the default value is \"#ffffff00\"\n\t\tWhen the prop \"background-color\" has <value>\n\t\tThen the background has color <backgroundColor>\n\t\tExamples:\n\t\t\t| value | backgroundColor |\n\t\t\t| empty (default value) | var(--sl-color-neutral-0) (#ffffff) |\n\t\t\t| aquamarine | #7fffd4 |\n";
11634
+ const scenario$q = "@author:kutay\n@owner:noah\nFeature: Portal Container\n\n\t@motivating\n\t@ui\n\tScenario: Horizontal content overflows, but does not stretch\n\t\tGiven there are two element in the container\n\t\tAnd the first is small\n\t\tAnd the second would stretch the container wider than it's parent\n\t\tThen the second one is clipped\n\t\tAnd the first one doesn't stretch\n\n\t@landmine\n\t@ui\n\tScenario: `max-width` is required for displaying as a row\n\t\tGiven I have `direction` to \"row\"\n\t\tAnd I have not set a `max-width`\n\t\tThen it displays as a column\n\n\t@motivating\n\t@ui\n\tScenario Outline: Content padding can be customized\n\t\tGiven prop \"padding\" has <value>\n\t\tThen <padding> is applied to content\n\n\t\tExamples:\n\t\t\t| value | padding |\n\t\t\t| none | no padding |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| N/A | no padding |\n\n\n\t@motivating\n\t@ui\n\tScenario Outline: Gap between content elements can be customized\n\t\tGiven prop \"gap\" has <value>\n\t\tThen <gap> is applied to elements between content\n\n\t\tExamples:\n\t\t\t| value | gap |\n\t\t\t| none | no padding |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| N/A | no padding |\n\n\t@minutia\n\t@ui\n\tScenario: Content can be center aligned in horizontal view\n\t\tGiven I have supplied the prop \"center\"\n\t\tThen the content is center aligned\n\n\t@minutia\n\t@ui\n\tScenario: Content in the last row can span full width with display in horizontal view\n\t\tGiven I have `display` to \"flex\"\n\t\tThen the content is full width on the last row\n\n\t@motivating\n\t@ui\n\tScenario Outline: Content can be aligned along the x-axis\n\t\tGiven prop \"justify-content\" has <value>\n\t\tThen content within the container is aligned <alignment>\n\n\t\tExamples:\n\t\t\t| value | alignment |\n\t\t\t| none | no alignment |\n\t\t\t| start | to the start |\n\t\t\t| center | to the center |\n\t\t\t| end | to the end |\n\t\t\t| space-between | with space between |\n\t\t\t| space-around | with space around |\n\t\t\t| space-evenly | with space evenly |\n\n\n\t@motivating\n\t@ui\n\tScenario Outline: Component background color can be customized\n\t\tGiven a user is viewing the Portal Container component\n\t\tThen the default value is \"#ffffff00\"\n\t\tWhen the prop \"background-color\" has <value>\n\t\tThen the background has color <backgroundColor>\n\t\tExamples:\n\t\t\t| value | backgroundColor |\n\t\t\t| empty (default value) | var(--sl-color-neutral-0) (#ffffff) |\n\t\t\t| aquamarine | #7fffd4 |\n";
11726
11635
 
11727
11636
  const PortalContainer_stories = {
11728
11637
  title: "Components/Microsite Container",
11729
11638
  parameters: {
11730
- scenario: scenario$r,
11639
+ scenario: scenario$q,
11731
11640
  },
11732
11641
  };
11733
11642
  const TooWideColumn = () => (index.h("div", { style: { width: "200px", border: "1px dashed grey" } },
@@ -11893,13 +11802,13 @@ const scenario2 = "@author:derek\n@owner:derek\nFeature: Reward Table reward Col
11893
11802
 
11894
11803
  const scenario3 = "@author:derek @owner:derek\nFeature: Reward Table Status Column\n Shows the status of each reward\n\n Background: \n Given the status column is included in the reward table\n\n @motivating @ui\n Scenario Outline: The title of the status column is configurable\n Given the \"column-title\" prop is set to <value>\n Then the status column is shown with <columnTitle>\n\n Examples: \n | value | columnTitle |\n | Status | |\n | My column title | My column title |\n\n @motivating @ui\n Scenario Outline: The status column displays the status of each reward\n Given a user\n And they have a <status> reward\n When they view the reward table\n Then the status of their reward is displayed in <pillColour> pill with <text>\n\n Examples: \n | status | text | pillColour |\n | AVAILABLE | Available | Green |\n | CANCELLED | Cancelled | Red |\n | PENDING | Pending | Orange |\n | EXPIRED | Expired | Red |\n | REDEEMED | Redeemed | Blue |\n | PENDING_REVIEW | Pending | Orange |\n | PAYOUT_TRANSFERRED | Payout Approved | blue |\n | PAYOUT_NOT_YET_DUE | Payout Approved | blue |\n | PAYOUT_OVERDUE | Payout Failed | Red |\n | PAYOUT_REVERSED | Payout Cancelled | Red |\n | PENDING_TAX_REVIEW | Pending | Orange |\n | PENDING_NEW_TAX_FORM | Pending | Orange |\n | PENDING_TAX_SUBMISSION | Pending | Orange |\n | PENDING_PARTNER_CREATION | Pending | Orange |\n | DENIED | Denied | Red |\n\n @motivating\n Scenario Outline: Reward status related information is displayed under status pills\n Given a user\n And they have a <reward>\n And their program is\n When they view the reward table\n Then they see their reward\n And under the pill is <text>\n And the date is localized to the users locale\n\n Examples: \n | reward | text |\n | available reward with an expiry date | localized expiry date in format \"Month-Day-Year\" |\n | redeemed reward | localized redemption date in format \"Month-Day-Year\" |\n | expired reward | localized expired date in format \"Month-Day-Year\" |\n | cancelled reward | localized cancelled date in format \"Month-Day-Year\" |\n | pending reward with a end date | localized pending for date in format \"Month-Day-Year\" |\n | pending reward due to W9 | W-9 required |\n | pending reward due to fufillment error | Fulfillment error |\n | reward pending review of referral | Pending review |\n | pending reward due to no connected Impact partner | Complete your tax and cash payout setup to receive your rewards. |\n | pending reward due to an invalid tax document | Invalid tax form. Submit a new form to receive your rewards. |\n | pending reward due to user required to submit a tax document | Submit your tax documents to receive your rewards. |\n | pending reward due to tax document being in review | Awaiting tax form review. |\n | reward whose payout failed | Payout failed due to a fulfillment issue and is currently being retried. |\n | reward whose payout was approved | Reward approved for payout and was scheduled for payment based on your settings. |\n | reward whose payout was cancelled | If you think this is a mistake, contact our Support team. |\n | cancelled reward from denied referral | Flagged as fraud |\n\n @minutia\n Scenario Outline: Tax-related reward statuses are based on the user's Impact tax connection\n Given a user\n And they are in a program that has Impact tax handling enabled\n And they have at least one pending reward\n And the reward's pending reasons include \"PAYOUT_CONFIGURATION_MISSING\"\n Then the status description will be\n \"\"\"\n Complete your tax and cash payout setup to receive your rewards.\n \"\"\"\n\n @motivating\n Scenario Outline: Statuses can be customized\n Given the \"status-text\" prop is \"{status, select, AVAILABLE {Redeem me!} CANCELLED {Unavailable} PENDING {Coming soon!} EXPIRED {Past due} REDEEMED {Spent} PENDING_REVIEW {Pending Review!} PAYOUT_SENT {Payout Sent!} PAYOUT_FAILED {Payout Failed!} PENDING_TAX_REVIEW {Pending Tax Review!} PENDING_NEW_TAX_FORM {Pending new tax form!} PENDING_TAX_SUBMISSION {Pending tax submission!} PENDING_PARTNER_CREATION {Pending partner creation!} DENIED {Unlucky!}}\"\n And a user\n And they have a <status> reward\n When they view the reward table\n Then the status of their reward is displayed in <pillColour> pill with <text>\n\n Examples: \n | status | text | pillColour |\n | AVAILABLE | Redeem me! | Green |\n | CANCELLED | Unavailable | Red |\n | PENDING | Coming soon! | Orange |\n | EXPIRED | Past due | Red |\n | REDEEMED | Spent | Blue |\n | PENDING_REVIEW | Pending Review! | Orange |\n | PAYOUT_TRANSFERRED | Payout Approved! | Blue |\n | PAYOUT_NOT_YET_DUE | Payout Approved! | Blue |\n | PAYOUT_OVERDUE | Payout Failed! | Red |\n | PAYOUT_REVERSED | Payout Cancelled! | Red |\n | DENIED | Unlucky! | Red |\n\n @minutia @ui\n Scenario: Expiry status date text can be configured\n Given the \"expiry-text\" prop has <value>\n And a user with an available reward with an expiry date\n When they view the reward table\n Then they see <text> under the Available Status pill\n\n Examples: \n | value | text |\n | | Expires on <EXPIRY DATE> |\n | Redeem before | Redeem before <EXPIRY DATE> |\n";
11895
11804
 
11896
- const scenario4 = "@author:derek @owner:derek\nFeature: Reward Table Source Column\n Shows the source of each reward\n\n @motivating @ui\n Scenario Outline: The title of the source column is configurable\n Given the \"column-title\" prop is set to <value>\n Then the source column is shown with <columnTitle>\n\n Examples:\n | value | columnTitle |\n | Source | |\n | My column title | My column title |\n\n @motivating @ui\n Scenario: The source column displays manual if the reward is caused by a manual action\n Given a user with a \"MANUAL\" reward\n When they view the rewards table\n Then the source of their reward is displayed as \"Manual\"\n\n @motivating @ui\n Scenario: The source column displays the program name if the reward is caused automatically by a program\n Given a user with a \"AUTOMATED\" program reward\n And the program has name \"Loyalty Program\"\n When they view the rewards table\n Then the source of their reward is displayed as \"Loyalty Program\"\n\n @motivating @ui\n Scenario Outline: The source column displays customizable reward exchange text with amount if the reward is caused by reward exchange\n Given the \"reward-exchange-text\" prop is <propValue>\n And a user with a \"MANUAL\" reward\n But it was created by a reward exchange\n Then they view the rewards table\n Then the source displays <exchangeText>\n And under it displays the following\n | prettyRedeemedCredit → prettyValue |\n\n Examples:\n | propValue | exchangeText |\n | | Reward Exchange |\n | Exchanged | Exchanged |\n\n @motivating @ui\n Scenario Outline: The source column displays customizable referral information if the reward is from a referral\n Given the \"reward-source-text\" prop is <propValue>\n And a user with a referral reward\n And that reward has <rewardSource>\n When they view the rewards table\n Then then source displays <referralText>\n And under it displays the full name of the <referralUser>\n\n Examples:\n | propValue | rewardSource | referralText | referralUser |\n | | REFERRED | Referred by | referrer user |\n | | FRIEND_SIGNUP | Referral to | referred user |\n | {rewardSource, select, FRIEND_SIGNUP {You Referred} REFERRED {Referred you} other {}} | REFERRED | Referred you | referrer user |\n | {rewardSource, select, FRIEND_SIGNUP {You Referred} REFERRED {Referred you} other {}} | FRIEND_SIGNUP | You Referred | referred user |\n\n @motivating @ui\n Scenario Outline: The source column displays the existing name for a referral if either the first name or last name does not exist\n Given a user with a referral reward\n And referral user exists\n And referral user has <name>\n But referral user has no <otherName>\n When they view the rewards table\n Then referral user's name is displayed as <name>\n\n Examples:\n | name | otherName |\n | first.name | last.name |\n | last.name | first.name |\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Anonymous User\" if the referral user has no names\n Given a user with a referral reward\n And that reward has <rewardSource>\n And the <referralUser> has no first name\n And the <referralUser> has no last name\n When they view the rewards table\n Then then source displays <sourceText>\n And under it displays \"Anonymous User\"\n\n Examples:\n | rewardSource | referralUser | sourceText |\n | FRIEND_SIGNUP | referrer | Referral to |\n | REFERRED | referred user | Referred by |\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Deleted User\" if the referral user is deleted in the system\n Given a user with a referral reward\n And that reward has <rewardSource>\n But <referral> user was deleted\n When they view the rewards table\n Then the source displays <sourceText>\n And under it displays \"Deleted User\"\n\n Examples:\n | rewardSource | referral | sourceText |\n | \"FRIEND_SIGNUP\" | referrer | Referral to |\n | \"REFERRED\" | referred | Referred by |\n# AL: TODO DELETED REFERRAL SPEC\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Deleted referral\" if the referral user is deleted in the system\n Given a user with a referral reward\n And that reward has <rewardSource>\n But <referral> user was deleted\n When they view the rewards table\n Then the source displays <sourceText>\n And under it displays \"Deleted referral\"\n\n Examples:\n | rewardSource | referral | sourceText |\n | \"FRIEND_SIGNUP\" | referrer | Referral to |\n | \"REFERRED\" | referred | Referred by |\n\n @minutia @ui\n Scenario Outline: Name fallbacks for referral users without names are customizable\n Given <prop> with <value>\n And a user with a referral reward\n But the referral user <hadAction>\n When they view the rewards table\n Then the source displays <value> as the referral user\n\n Examples:\n | prop | value | hadAction |\n | deleted-user | Former Customer | was deleted |\n | anonymous-user | Nameless User | had first and last name deleted |\n\n @motivating\n Scenario Outline: Source text can be customized\n Given the \"reward-source-text\" prop is \"{rewardSource, select, MANUAL {Support} AUTOMATED {Loyalty Program} other {}}\"\n And a user with a <rewardSource> reward\n When they view the rewards table\n Then the source is <sourceText>\n\n Examples:\n | rewardSource | sourceText |\n | MANUAL | Support |\n | AUTOMATED | Loyalty Program |\n";
11805
+ const scenario4 = "@author:derek @owner:derek\nFeature: Reward Table Source Column\n Shows the source of each reward\n\n @motivating @ui\n Scenario Outline: The title of the source column is configurable\n Given the \"column-title\" prop is set to <value>\n Then the source column is shown with <columnTitle>\n\n Examples:\n | value | columnTitle |\n | Source | |\n | My column title | My column title |\n\n @motivating @ui\n Scenario: The source column displays manual if the reward is caused by a manual action\n Given a user with a \"MANUAL\" reward\n When they view the rewards table\n Then the source of their reward is displayed as \"Manual\"\n\n @motivating @ui\n Scenario: The source column displays the program name if the reward is caused automatically by a program\n Given a user with a \"AUTOMATED\" program reward\n And the program has name \"Loyalty Program\"\n When they view the rewards table\n Then the source of their reward is displayed as \"Loyalty Program\"\n\n @motivating @ui\n Scenario Outline: The source column displays customizable reward exchange text with amount if the reward is caused by reward exchange\n Given the \"reward-exchange-text\" prop is <propValue>\n And a user with a \"MANUAL\" reward\n But it was created by a reward exchange\n Then they view the rewards table\n Then the source displays <exchangeText>\n And under it displays the following\n | prettyRedeemedCredit → prettyValue |\n\n Examples:\n | propValue | exchangeText |\n | | Reward Exchange |\n | Exchanged | Exchanged |\n\n @motivating @ui\n Scenario Outline: The source column displays customizable referral information if the reward is from a referral\n Given the \"reward-source-text\" prop is <propValue>\n And a user with a referral reward\n And that reward has <rewardSource>\n When they view the rewards table\n Then then source displays <referralText>\n And under it displays the full name of the <referralUser>\n\n Examples:\n | propValue | rewardSource | referralText | referralUser |\n | | REFERRED | Referred by | referrer user |\n | | FRIEND_SIGNUP | Referral to | referred user |\n | {rewardSource, select, FRIEND_SIGNUP {You Referred} REFERRED {Referred you} other {}} | REFERRED | Referred you | referrer user |\n | {rewardSource, select, FRIEND_SIGNUP {You Referred} REFERRED {Referred you} other {}} | FRIEND_SIGNUP | You Referred | referred user |\n\n @motivating @ui\n Scenario Outline: The source column displays the existing name for a referral if either the first name or last name does not exist\n Given a user with a referral reward\n And referral user exists\n And referral user has <name>\n But referral user has no <otherName>\n When they view the rewards table\n Then referral user's name is displayed as <name>\n\n Examples:\n | name | otherName |\n | first.name | last.name |\n | last.name | first.name |\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Anonymous User\" if the referral user has no names\n Given a user with a referral reward\n And that reward has <rewardSource>\n And the <referralUser> has no first name\n And the <referralUser> has no last name\n When they view the rewards table\n Then then source displays <sourceText>\n And under it displays \"Anonymous User\"\n\n Examples:\n | rewardSource | referralUser | sourceText |\n | FRIEND_SIGNUP | referrer | Referral to |\n | REFERRED | referred user | Referred by |\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Deleted User\" if the referral user is deleted in the system\n Given a user with a referral reward\n And that reward has <rewardSource>\n But <referral> user was deleted\n When they view the rewards table\n Then the source displays <sourceText>\n And under it displays \"Deleted User\"\n\n Examples:\n | rewardSource | referral | sourceText |\n | \"FRIEND_SIGNUP\" | referrer | Referral to |\n | \"REFERRED\" | referred | Referred by |\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Deleted referral\" if the referral user is deleted in the system\n Given a user with a referral reward\n And that reward has <rewardSource>\n But <referral> user was deleted\n When they view the rewards table\n Then the source displays <sourceText>\n And under it displays \"Deleted referral\"\n\n Examples:\n | rewardSource | referral | sourceText |\n | \"FRIEND_SIGNUP\" | referrer | Referral to |\n | \"REFERRED\" | referred | Referred by |\n\n @minutia @ui\n Scenario Outline: Name fallbacks for referral users without names are customizable\n Given <prop> with <value>\n And a user with a referral reward\n But the referral user <hadAction>\n When they view the rewards table\n Then the source displays <value> as the referral user\n\n Examples:\n | prop | value | hadAction |\n | deleted-user | Former Customer | was deleted |\n | anonymous-user | Nameless User | had first and last name deleted |\n\n @motivating\n Scenario Outline: Source text can be customized\n Given the \"reward-source-text\" prop is \"{rewardSource, select, MANUAL {Support} AUTOMATED {Loyalty Program} other {}}\"\n And a user with a <rewardSource> reward\n When they view the rewards table\n Then the source is <sourceText>\n\n Examples:\n | rewardSource | sourceText |\n | MANUAL | Support |\n | AUTOMATED | Loyalty Program |\n";
11897
11806
 
11898
- const scenario$s = scenario1 + scenario2 + scenario3 + scenario4;
11807
+ const scenario$r = scenario1 + scenario2 + scenario3 + scenario4;
11899
11808
  const RewardsTableCell_stories = {
11900
11809
  title: "Components/Rewards Table Cell",
11901
11810
  parameters: {
11902
- scenario: scenario$s,
11811
+ scenario: scenario$r,
11903
11812
  },
11904
11813
  };
11905
11814
  const rewardsData$1 = {
@@ -12116,9 +12025,7 @@ const SourceCellDeletedUser = () => {
12116
12025
  return (index.h("sqm-rewards-table-source-cell", { reward: { ...rewardsData$1, ...referral(null) }, referralText: "Referral to", deletedUserText: "Deleted User" }));
12117
12026
  };
12118
12027
  const SourceCellDeletedReferral = () => {
12119
- return (
12120
- // AL: TODO
12121
- index.h("sqm-rewards-table-source-cell", {
12028
+ return (index.h("sqm-rewards-table-source-cell", {
12122
12029
  //@ts-ignore
12123
12030
  reward: { ...rewardsData$1, ...deletedReferral() }, referralText: "Referral to", deletedReferralText: "Deleted Referral" }));
12124
12031
  };
@@ -12348,12 +12255,12 @@ const RewardsTableCell = /*#__PURE__*/Object.freeze({
12348
12255
  EmptyCell: EmptyCell$2
12349
12256
  });
12350
12257
 
12351
- const scenario$t = "@owner:sam\n@author:sam\nFeature: Rewards Table\n\n Shows a list of rewards as a table\n\n @motivating\n @ui\n Scenario: The empty state is shown if there are no rewards\n Given a user with rewards\n When they view the reward table\n Then no rewards are displayed\n And they see an image with a user icon\n And \"View your rewards\" in bold\n And \"See all the rewards you have earned from referring friends and completing tasks\" below the bolded text\n And the pagination buttons are disabled\n\n @minutia\n @ui\n Scenario: A custom empty state can be provided\n Given a user with no rewards\n And a custom empty state has been supplied in the \"empty\" slot\n When they view the reward table\n Then they see the custom empty state\n\n @minutia\n @ui\n Scenario: The loading state is shown while rewards are loading\n Given the table is loading\n Then the loading state is shown in the table\n And a custom loading state can be supplied in the \"loading\" slot\n And the pagination buttons are disabled\n\n @motivating\n @ui\n Scenario Outline: The table becomes paginated when the number of rewards exceeds the per page limit\n Given the user has <number of rewards>\n And the table is configured to show <page limit> rewards per page\n Then the table will have <number of pages> page(s)\n And pagination buttons will allow users to navigate between pages\n And the pagination button to go to the next page is disabled on the last page of rewards\n And the pagination button to go to the previous page is disabled on the first page of rewards\n Examples:\n | number of rewards | page limit | number of pages |\n | 0 | 4 | 1 |\n | 1 | 4 | 1 |\n | 3 | 4 | 1 |\n | 5 | 4 | 2 |\n | 42 | 4 | 11 |\n\n @motivating\n @ui\n Scenario: The table converts to a card view on tablet and mobile window sizes\n Given a user with rewards\n When they view the table\n And their window size is smaller than \"799px\"\n Then rewards are displayed as cards\n And they are in two columns\n When their window size is smaller than \"599px\"\n Then the rewards are displayed as cards in a singular column\n\n @motivating\n @ui\n Scenario: Table and Mobile beakpoints can be configured\n Given the reward table has been configured with the following props\n | prop | value |\n | smBreakpoint | 599 |\n | mdBreakpoint | 799 |\n And a user with rewards\n When they view the table\n And their window size is smaller than \"799px\"\n Then rewards are displayed as cards\n And they are in two columns\n When their window size is smaller than \"599px\"\n Then the rewards are displayed as cards in a singular column\n\n @motivating\n @ui\n Scenario Outline: By default the first column heading is hidden in mobile\n Given a reward table with 4 columns\n And prop \"hidden-columns\" with <hideColumnValue>\n And a user with rewards\n When they view the reward table\n And their window size is below the tablet breakpoint\n Then reward cards are displayed\n And the titles of <columnsArehidden> within the card\n Examples:\n | hideColumnValue | columnsArehidden |\n | | the first column |\n | 0,1,2 | the first, second and third columns |\n | 3 | the fourth column |\n\n @motivating\n Scenario: Only rewards which occured in the program specific by \"program-id\" are shown\n Given the table is configured with \"program-id\"\n Then only rewards from the program with \"program-id\" are shown\n\n @landmine\n Scenario: When a `classic` program Id is set then any reward without a programId is shown\n There is no easy way for the backend to filter for \"classic\" programs,\n thus we are filtering for rewards without programId's.\n\n Given the \"program-id\" of the table is set to \"classic\"\n Then rewards from classic programs are shown\n And manual rewards are shown\n\n @minutia\n @ui\n Scenario: Column heading can be hidden\n Given the table is configured with \"hide-labels\" set to \"true\"\n Then the table is displayed without column headings";
12258
+ const scenario$s = "@owner:sam\n@author:sam\nFeature: Rewards Table\n\n Shows a list of rewards as a table\n\n @motivating\n @ui\n Scenario: The empty state is shown if there are no rewards\n Given a user with rewards\n When they view the reward table\n Then no rewards are displayed\n And they see an image with a user icon\n And \"View your rewards\" in bold\n And \"See all the rewards you have earned from referring friends and completing tasks\" below the bolded text\n And the pagination buttons are disabled\n\n @minutia\n @ui\n Scenario: A custom empty state can be provided\n Given a user with no rewards\n And a custom empty state has been supplied in the \"empty\" slot\n When they view the reward table\n Then they see the custom empty state\n\n @minutia\n @ui\n Scenario: The loading state is shown while rewards are loading\n Given the table is loading\n Then the loading state is shown in the table\n And a custom loading state can be supplied in the \"loading\" slot\n And the pagination buttons are disabled\n\n @motivating\n @ui\n Scenario Outline: The table becomes paginated when the number of rewards exceeds the per page limit\n Given the user has <number of rewards>\n And the table is configured to show <page limit> rewards per page\n Then the table will have <number of pages> page(s)\n And pagination buttons will allow users to navigate between pages\n And the pagination button to go to the next page is disabled on the last page of rewards\n And the pagination button to go to the previous page is disabled on the first page of rewards\n Examples:\n | number of rewards | page limit | number of pages |\n | 0 | 4 | 1 |\n | 1 | 4 | 1 |\n | 3 | 4 | 1 |\n | 5 | 4 | 2 |\n | 42 | 4 | 11 |\n\n @motivating\n @ui\n Scenario: The table converts to a card view on tablet and mobile window sizes\n Given a user with rewards\n When they view the table\n And their window size is smaller than \"799px\"\n Then rewards are displayed as cards\n And they are in two columns\n When their window size is smaller than \"599px\"\n Then the rewards are displayed as cards in a singular column\n\n @motivating\n @ui\n Scenario: Table and Mobile beakpoints can be configured\n Given the reward table has been configured with the following props\n | prop | value |\n | smBreakpoint | 599 |\n | mdBreakpoint | 799 |\n And a user with rewards\n When they view the table\n And their window size is smaller than \"799px\"\n Then rewards are displayed as cards\n And they are in two columns\n When their window size is smaller than \"599px\"\n Then the rewards are displayed as cards in a singular column\n\n @motivating\n @ui\n Scenario Outline: By default the first column heading is hidden in mobile\n Given a reward table with 4 columns\n And prop \"hidden-columns\" with <hideColumnValue>\n And a user with rewards\n When they view the reward table\n And their window size is below the tablet breakpoint\n Then reward cards are displayed\n And the titles of <columnsArehidden> within the card\n Examples:\n | hideColumnValue | columnsArehidden |\n | | the first column |\n | 0,1,2 | the first, second and third columns |\n | 3 | the fourth column |\n\n @motivating\n Scenario: Only rewards which occured in the program specific by \"program-id\" are shown\n Given the table is configured with \"program-id\"\n Then only rewards from the program with \"program-id\" are shown\n\n @landmine\n Scenario: When a `classic` program Id is set then any reward without a programId is shown\n There is no easy way for the backend to filter for \"classic\" programs,\n thus we are filtering for rewards without programId's.\n\n Given the \"program-id\" of the table is set to \"classic\"\n Then rewards from classic programs are shown\n And manual rewards are shown\n\n @minutia\n @ui\n Scenario: Column heading can be hidden\n Given the table is configured with \"hide-labels\" set to \"true\"\n Then the table is displayed without column headings";
12352
12259
 
12353
12260
  const RewardsTable_stories = {
12354
12261
  title: "Components/Rewards Table",
12355
12262
  parameters: {
12356
- scenario: scenario$t,
12263
+ scenario: scenario$s,
12357
12264
  },
12358
12265
  };
12359
12266
  const loadingElement$1 = (index.h("div", { slot: "loading", style: { display: "contents" } },
@@ -12665,12 +12572,12 @@ const UseReferralTable = /*#__PURE__*/Object.freeze({
12665
12572
  ReferralTableFr: ReferralTableFr
12666
12573
  });
12667
12574
 
12668
- const scenario$u = "@author:kutay\n@owner:kutay\nFeature: Hero Image\n\n\tThe Hero Image component displays media images with a header, description and button using an overlay or a double column layout to offer an attrative widget page.\n\n\tBackground: A user on the portal is viewing the widget\n\t\tGiven a user viewing the Hero Image component\n\n\t@motivating\n\t@ui\n\tScenario: Overlay image displays header, description, and button with brand color\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000278/squatch-assets/bTwu1Um.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"overlay\" |\n\t\tThen they see their image\n\t\tAnd the image has no padding\n\t\tAnd it has a brand colour overlay\n\t\tAnd \"Klip Rewards\" is displayed over top of the image in xxx-large font\n\t\tAnd below \"Refer friends or complete tasks while using Klip to earn rewards\" is displayed over top of the image in x-large font\n\t\tAnd below they see a brand coloured button with text \"Start earning\"\n\t\tAnd the text section has xxx-large padding\n\t\tWhen the component is scaled down to 599px\n\t\tThen the image is scaled to fit content\n\n\t@motivating\n\t@ui\n\tScenario Outline: Overlay image crop can be aligned left, center or right\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000278/squatch-assets/bTwu1Um.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"overlay\" |\n\t\t\t| image-pos | <value> |\n\t\tThen the image with overlay is displayed\n\t\tWhen the component is scaled down to 599px\n\t\tThen the image is <alignment> to fit content\n\t\tExamples:\n\t\t\t| value | alignment |\n\t\t\t| left | left aligned |\n\t\t\t| center | centered |\n\t\t\t| right | right aligned |\n\t\t\t| N/A | centered |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Overlay padding is configurable\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000278/squatch-assets/bTwu1Um.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"overlay\" |\n\t\t\t| padding-text | <value> |\n\t\tThen the image with overlay is displayed\n\t\tAnd <padding> is applied around header, description and button\n\t\tExamples:\n\t\t\t| value | padding |\n\t\t\t| none | no padding |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| N/A | no padding |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Overlay color and background is configurable\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000278/squatch-assets/bTwu1Um.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"overlay\" |\n\t\t\t| text-color | <textColor> |\n\t\t\t| overlay-color | <overlayColor> |\n\t\t\t| overlay-opacity | <overlayOpacity> |\n\t\tThen the image with overlay is displayed\n\t\tAnd the overlay is <overlayColor>\n\t\tAnd the overlay has <overlayOpacity>\n\t\tAnd the text is <textColor>\n\t\tExamples:\n\t\t\t| textColor | overlayColor | overlayOpacity |\n\t\t\t| #fffc4b | #ff7f7f | 0.9 |\n\t\t\t| #1d0314 | #4baa1a | 0 |\n\t\t\t| #211a27 | #aa481a | 1 |\n\n\t@motivating\n\t@ui\n\tScenario: Two-column layout displays an image on one side and on the other side a header, description, and button\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\tThen the image is displayed on the left\n\t\tAnd the following elements are displayed on the right\n\t\t\t| elements |\n\t\t\t| header |\n\t\t\t| description |\n\t\t\t| button |\n\t\tWhen the component is scaled down to 599px\n\t\tThen the two-column layout switches to a row layout\n\t\tAnd the image is displayed on top\n\t\tAnd the content is displayed below\n\n\t@motivating\n\t@ui\n\tScenario Outline: Image position is configurable for desktop and mobile\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\t\t| image-pos | <imagePos> |\n\t\t\t| image-mobile-pos | <imageMobilePos> |\n\t\tThen the image is displayed on the <imagePos>\n\t\tWhen the component is scaled down to 599px\n\t\tThen two-column layout switches to a row layout\n\t\tAnd image is displayed on the <imageMobilePos>\n\t\tExamples:\n\t\t\t| imagePos | imageMobilePos |\n\t\t\t| left | top |\n\t\t\t| right | bottom |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Padding is configurable for the image and text of two column layouts\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\t\t| padding-text | <paddingText> |\n\t\t\t| padding-image | <paddingImage> |\n\t\tThen the two column layout is displayed\n\t\tAnd the image has padding <paddingImage>\n\t\tAnd the text has padding <paddingText>\n\t\tExamples:\n\t\t\t| paddingText | paddingImage |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| none | none |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Two-column layout image division percentage is configurable\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000248/squatch-assets/MVgOJn7.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\t\t| image-percentage | <percent> |\n\t\tThen the two column layout is displayed\n\t\tAnd the image takes up <percent> of the two-column layout\n\t\tAnd the text elements take up the remainder of the space\n\t\tExamples:\n\t\t\t| percent |\n\t\t\t| 25% |\n\t\t\t| 42% |\n\t\t\t| 66% |\n\n\t@motivating\n\t@ui\n\tScenario: Two-column layout text and background color is configurable\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\t\t| text-color | <textColor> |\n\t\t\t| background-color | <backgroundColor> |\n\t\tThen the two column layout is displayed\n\t\tAnd the text has color <textColor>\n\t\tAnd the background has color <backgroundColor>\n\t\tExamples:\n\t\t\t| textColor | backgroundColor |\n\t\t\t| #fffc4b | #ff7f7f |\n\t\t\t| #1d0314 | #4baa1a |\n\t\t\t| #211a27 | #aa481a |";
12575
+ const scenario$t = "@author:kutay\n@owner:kutay\nFeature: Hero Image\n\n\tThe Hero Image component displays media images with a header, description and button using an overlay or a double column layout to offer an attrative widget page.\n\n\tBackground: A user on the portal is viewing the widget\n\t\tGiven a user viewing the Hero Image component\n\n\t@motivating\n\t@ui\n\tScenario: Overlay image displays header, description, and button with brand color\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000278/squatch-assets/bTwu1Um.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"overlay\" |\n\t\tThen they see their image\n\t\tAnd the image has no padding\n\t\tAnd it has a brand colour overlay\n\t\tAnd \"Klip Rewards\" is displayed over top of the image in xxx-large font\n\t\tAnd below \"Refer friends or complete tasks while using Klip to earn rewards\" is displayed over top of the image in x-large font\n\t\tAnd below they see a brand coloured button with text \"Start earning\"\n\t\tAnd the text section has xxx-large padding\n\t\tWhen the component is scaled down to 599px\n\t\tThen the image is scaled to fit content\n\n\t@motivating\n\t@ui\n\tScenario Outline: Overlay image crop can be aligned left, center or right\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000278/squatch-assets/bTwu1Um.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"overlay\" |\n\t\t\t| image-pos | <value> |\n\t\tThen the image with overlay is displayed\n\t\tWhen the component is scaled down to 599px\n\t\tThen the image is <alignment> to fit content\n\t\tExamples:\n\t\t\t| value | alignment |\n\t\t\t| left | left aligned |\n\t\t\t| center | centered |\n\t\t\t| right | right aligned |\n\t\t\t| N/A | centered |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Overlay padding is configurable\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000278/squatch-assets/bTwu1Um.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"overlay\" |\n\t\t\t| padding-text | <value> |\n\t\tThen the image with overlay is displayed\n\t\tAnd <padding> is applied around header, description and button\n\t\tExamples:\n\t\t\t| value | padding |\n\t\t\t| none | no padding |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| N/A | no padding |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Overlay color and background is configurable\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000278/squatch-assets/bTwu1Um.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"overlay\" |\n\t\t\t| text-color | <textColor> |\n\t\t\t| overlay-color | <overlayColor> |\n\t\t\t| overlay-opacity | <overlayOpacity> |\n\t\tThen the image with overlay is displayed\n\t\tAnd the overlay is <overlayColor>\n\t\tAnd the overlay has <overlayOpacity>\n\t\tAnd the text is <textColor>\n\t\tExamples:\n\t\t\t| textColor | overlayColor | overlayOpacity |\n\t\t\t| #fffc4b | #ff7f7f | 0.9 |\n\t\t\t| #1d0314 | #4baa1a | 0 |\n\t\t\t| #211a27 | #aa481a | 1 |\n\n\t@motivating\n\t@ui\n\tScenario: Two-column layout displays an image on one side and on the other side a header, description, and button\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\tThen the image is displayed on the left\n\t\tAnd the following elements are displayed on the right\n\t\t\t| elements |\n\t\t\t| header |\n\t\t\t| description |\n\t\t\t| button |\n\t\tWhen the component is scaled down to 599px\n\t\tThen the two-column layout switches to a row layout\n\t\tAnd the image is displayed on top\n\t\tAnd the content is displayed below\n\n\t@motivating\n\t@ui\n\tScenario Outline: Image position is configurable for desktop and mobile\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\t\t| image-pos | <imagePos> |\n\t\t\t| image-mobile-pos | <imageMobilePos> |\n\t\tThen the image is displayed on the <imagePos>\n\t\tWhen the component is scaled down to 599px\n\t\tThen two-column layout switches to a row layout\n\t\tAnd image is displayed on the <imageMobilePos>\n\t\tExamples:\n\t\t\t| imagePos | imageMobilePos |\n\t\t\t| left | top |\n\t\t\t| right | bottom |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Padding is configurable for the image and text of two column layouts\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\t\t| padding-text | <paddingText> |\n\t\t\t| padding-image | <paddingImage> |\n\t\tThen the two column layout is displayed\n\t\tAnd the image has padding <paddingImage>\n\t\tAnd the text has padding <paddingText>\n\t\tExamples:\n\t\t\t| paddingText | paddingImage |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| none | none |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Two-column layout image division percentage is configurable\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000248/squatch-assets/MVgOJn7.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\t\t| image-percentage | <percent> |\n\t\tThen the two column layout is displayed\n\t\tAnd the image takes up <percent> of the two-column layout\n\t\tAnd the text elements take up the remainder of the space\n\t\tExamples:\n\t\t\t| percent |\n\t\t\t| 25% |\n\t\t\t| 42% |\n\t\t\t| 66% |\n\n\t@motivating\n\t@ui\n\tScenario: Two-column layout text and background color is configurable\n\t\tGiven a Hero Image component configured with the following props\n\t\t\t| prop | value |\n\t\t\t| image-url | \"https://res.cloudinary.com/saasquatch/image/upload/v1644000275/squatch-assets/yr6ER3R.png\" |\n\t\t\t| header | \"Klip Rewards\" |\n\t\t\t| description | \"Refer friends or complete tasks while using Klip to earn rewards\" |\n\t\t\t| button-text | \"Start earning\" |\n\t\t\t| layout | \"columns\" |\n\t\t\t| text-color | <textColor> |\n\t\t\t| background-color | <backgroundColor> |\n\t\tThen the two column layout is displayed\n\t\tAnd the text has color <textColor>\n\t\tAnd the background has color <backgroundColor>\n\t\tExamples:\n\t\t\t| textColor | backgroundColor |\n\t\t\t| #fffc4b | #ff7f7f |\n\t\t\t| #1d0314 | #4baa1a |\n\t\t\t| #211a27 | #aa481a |";
12669
12576
 
12670
12577
  const HeroImage_stories = {
12671
12578
  title: "Components/Hero Image",
12672
12579
  parameters: {
12673
- scenario: scenario$u,
12580
+ scenario: scenario$t,
12674
12581
  },
12675
12582
  };
12676
12583
  const OverlayHeader = () => {
@@ -12743,12 +12650,12 @@ const HeroImage = /*#__PURE__*/Object.freeze({
12743
12650
  ColumnsCustomColors: ColumnsCustomColors
12744
12651
  });
12745
12652
 
12746
- const scenario$v = "@author:kutay\n@owner:kutay\nFeature: Referral Card\n\n\tThe Referral Card component takes in two slots and displays them side by side.\n\n\tBackground: A user on the portal is viewing the widget\n\t\tGiven a user viewing the Referral Card component\n\n\t@motivating\n\t@ui\n\tScenario: Referral Card component displays provided content in left and right slots side by side\n\t\tGiven a Referral Card component\n\t\tAnd a slot with the name \"left\"\n\t\tAnd a slot with the name \"right\"\n\t\tWhen the user views the referral card\n\t\tThen the slot contents are displayed the card with equal width\n\t\tWhen the component is scaled down to 499px\n\t\tThen the column layout switches to row layout\n\t\tAnd the \"left\" slot content is displayed above the \"right\" slot content\n\n\t@minutia\n\t@ui\n\tScenario: Left or right column content spans the whole card if there is no content in the other column\n\t\tGiven a Referral Card component\n\t\tAnd there content in one column\n\t\tAnd there is no content in the other column\n\t\tThen the column with content spans 100% of the card width\n\t\tAnd the column with content respects the container's padding\n\t\tAnd the column without content has zero width\n\n\t@motivating\n\t@ui\n\tScenario Outline: Referral Card component content can be vertically aligned start, center, end\n\t\tGiven a Referral Card component\n\t\tAnd a slot with the name \"left\"\n\t\tAnd a slot with the name \"right\"\n\t\tAnd the prop \"vertical-alignment\" has <value>\n\t\tThen slots contents are displayed inside the card\n\t\tAnd slots are vertically aligned to <alignment> of the card\n\t\tExamples:\n\t\t\t| value | alignment |\n\t\t\t| start | the top |\n\t\t\t| center | the center |\n\t\t\t| end | the bottom |\n\t\t\t| N/A | the top |\n\n\t@ui\n\tScenario Outline: Container border can be toggled\n\t\tGiven a user is viewing the referral card component\n\t\tThen the default value for the prop \"include-border\" is \"true\"\n\t\tWhen \"include-border\" has <value>\n\t\tThen the referral card component's border <maybe> included\n\t\tExamples:\n\t\t\t| value | maybe |\n\t\t\t| true | is |\n\t\t\t| false | isn't |\n\t\t\t| empty (no value) | is |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Component background color can be customized\n\t\tGiven a user is viewing the Referral Card component\n\t\tThen the default value is \"#ffffff\"\n\t\tWhen the prop \"background-color\" has <value>\n\t\tThen the background has color <backgroundColor>\n\t\tExamples:\n\t\t\t| value | backgroundColor |\n\t\t\t| empty (default value) | var(--sl-color-neutral-0) (#ffffff) |\n\t\t\t| aquamarine | #7fffd4 |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Container padding can be customized\n\t\tGiven a user is looking at the component\n\t\tThen the default values for \"padding-top\", \"padding-bottom\", \"padding-left\", \"padding-right\" is \"large\"\n\t\tWhen prop \"padding-top\" has <value>\n\t\tThen <padding> is applied to content\n\t\tAnd the same applies to \"padding-bottom\", \"padding-left\", \"padding-right\"\n\n\t\tExamples:\n\t\t\t| value | padding |\n\t\t\t| none | no padding |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| N/A | no padding |";
12653
+ const scenario$u = "@author:kutay\n@owner:kutay\nFeature: Referral Card\n\n\tThe Referral Card component takes in two slots and displays them side by side.\n\n\tBackground: A user on the portal is viewing the widget\n\t\tGiven a user viewing the Referral Card component\n\n\t@motivating\n\t@ui\n\tScenario: Referral Card component displays provided content in left and right slots side by side\n\t\tGiven a Referral Card component\n\t\tAnd a slot with the name \"left\"\n\t\tAnd a slot with the name \"right\"\n\t\tWhen the user views the referral card\n\t\tThen the slot contents are displayed the card with equal width\n\t\tWhen the component is scaled down to 499px\n\t\tThen the column layout switches to row layout\n\t\tAnd the \"left\" slot content is displayed above the \"right\" slot content\n\n\t@minutia\n\t@ui\n\tScenario: Left or right column content spans the whole card if there is no content in the other column\n\t\tGiven a Referral Card component\n\t\tAnd there content in one column\n\t\tAnd there is no content in the other column\n\t\tThen the column with content spans 100% of the card width\n\t\tAnd the column with content respects the container's padding\n\t\tAnd the column without content has zero width\n\n\t@motivating\n\t@ui\n\tScenario Outline: Referral Card component content can be vertically aligned start, center, end\n\t\tGiven a Referral Card component\n\t\tAnd a slot with the name \"left\"\n\t\tAnd a slot with the name \"right\"\n\t\tAnd the prop \"vertical-alignment\" has <value>\n\t\tThen slots contents are displayed inside the card\n\t\tAnd slots are vertically aligned to <alignment> of the card\n\t\tExamples:\n\t\t\t| value | alignment |\n\t\t\t| start | the top |\n\t\t\t| center | the center |\n\t\t\t| end | the bottom |\n\t\t\t| N/A | the top |\n\n\t@ui\n\tScenario Outline: Container border can be toggled\n\t\tGiven a user is viewing the referral card component\n\t\tThen the default value for the prop \"include-border\" is \"true\"\n\t\tWhen \"include-border\" has <value>\n\t\tThen the referral card component's border <maybe> included\n\t\tExamples:\n\t\t\t| value | maybe |\n\t\t\t| true | is |\n\t\t\t| false | isn't |\n\t\t\t| empty (no value) | is |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Component background color can be customized\n\t\tGiven a user is viewing the Referral Card component\n\t\tThen the default value is \"#ffffff\"\n\t\tWhen the prop \"background-color\" has <value>\n\t\tThen the background has color <backgroundColor>\n\t\tExamples:\n\t\t\t| value | backgroundColor |\n\t\t\t| empty (default value) | var(--sl-color-neutral-0) (#ffffff) |\n\t\t\t| aquamarine | #7fffd4 |\n\n\t@motivating\n\t@ui\n\tScenario Outline: Container padding can be customized\n\t\tGiven a user is looking at the component\n\t\tThen the default values for \"padding-top\", \"padding-bottom\", \"padding-left\", \"padding-right\" is \"large\"\n\t\tWhen prop \"padding-top\" has <value>\n\t\tThen <padding> is applied to content\n\t\tAnd the same applies to \"padding-bottom\", \"padding-left\", \"padding-right\"\n\n\t\tExamples:\n\t\t\t| value | padding |\n\t\t\t| none | no padding |\n\t\t\t| xxx-small | xxx-small |\n\t\t\t| xx-small | xx-small |\n\t\t\t| x-small | x-small |\n\t\t\t| small | small |\n\t\t\t| medium | medium |\n\t\t\t| large | large |\n\t\t\t| x-large | x-large |\n\t\t\t| xx-large | xx-large |\n\t\t\t| xxx-large | xxx-large |\n\t\t\t| xxxx-large | xxxx-large |\n\t\t\t| N/A | no padding |";
12747
12654
 
12748
12655
  const ReferralCard_stories = {
12749
12656
  title: "Components/Referral Card",
12750
12657
  parameters: {
12751
- scenario: scenario$v,
12658
+ scenario: scenario$u,
12752
12659
  },
12753
12660
  };
12754
12661
  const media = (slot) => {
@@ -12766,6 +12673,21 @@ const sharebutton = (slot) => {
12766
12673
  index.h("sqm-share-button", { medium: "facebook" }, "Share on Facebook"),
12767
12674
  index.h("sqm-share-button", { medium: "twitter" }, "Post about us on X"))));
12768
12675
  };
12676
+ const shareButtonsWithPromoCodes = (slot) => {
12677
+ return (index.h("sqm-portal-container", { gap: "large", slot: slot },
12678
+ index.h("sqm-text", null, "Choose how you want to share:"),
12679
+ index.h("sqm-text", null,
12680
+ index.h("sub", null, "Share with your friends:"),
12681
+ index.h("sqm-share-code", null),
12682
+ index.h("sqm-share-link", null)),
12683
+ index.h("sqm-portal-container", { gap: "x-small" },
12684
+ index.h("sqm-share-button", { medium: "email" }, "Share via email"),
12685
+ index.h("sqm-share-button", { medium: "facebook" }, "Share on Facebook"),
12686
+ index.h("sqm-share-button", { medium: "twitter" }, "Post about us on X"),
12687
+ index.h("sqm-portal-container", { gap: "x-small" },
12688
+ index.h("span", { style: { textAlign: "center", color: "var(--sl-color-gray-500)" } }, "You have copied this code before"),
12689
+ index.h("sqm-pagination", null)))));
12690
+ };
12769
12691
  const timeline = (slot, count) => {
12770
12692
  return (index.h("sqm-timeline", { slot: slot, icon: "circle" },
12771
12693
  count > 0 && (index.h("sqm-timeline-entry", { reward: "75", unit: "points", desc: "Your friends signs up for a free trial" })),
@@ -12788,6 +12710,11 @@ const TimelineAndShareButtons = () => {
12788
12710
  timeline("left", 3),
12789
12711
  sharebutton("right")));
12790
12712
  };
12713
+ const OneTimeUsePromoCodes = () => {
12714
+ return (index.h("sqm-referral-card", null,
12715
+ timeline("left", 4),
12716
+ shareButtonsWithPromoCodes("right")));
12717
+ };
12791
12718
  const StartAlignment = () => {
12792
12719
  return (index.h("sqm-referral-card", { "vertical-alignment": "start" },
12793
12720
  timeline("left", 4),
@@ -12864,6 +12791,7 @@ const ReferralCard = /*#__PURE__*/Object.freeze({
12864
12791
  ImageAndShareButtons: ImageAndShareButtons,
12865
12792
  LimitWidth: LimitWidth,
12866
12793
  TimelineAndShareButtons: TimelineAndShareButtons,
12794
+ OneTimeUsePromoCodes: OneTimeUsePromoCodes,
12867
12795
  StartAlignment: StartAlignment,
12868
12796
  CenterAlignment: CenterAlignment,
12869
12797
  EndAlignment: EndAlignment,
@@ -12881,11 +12809,11 @@ const scenarioTimeline = "@author:derek\n@owner:kutay\nFeature: Timeline\n\n
12881
12809
 
12882
12810
  const scenarioTimelineEntry = "@author:derek\n@owner:kutay\nFeature: Timeline Entry\n\n @motivating\n @ui\n Scenario: Timeline entries have an icon, a reward and an entry desciption\n Given an timeline entry with the following props\n | prop | value |\n | unit | Visa Giftcard |\n | reward | 50$ |\n | desc | Earn a 50$ Visa Giftcard for each referral you make |\n When a user views the entry\n Then they see a gift icon\n And see \"$50 VISA GIFTCARRD\" to the right\n And \"$50\" is bolded with x-large font size\n And below they see \"Earn a 50$ Visa Giftcard for each referral you make\"\n\n @motivating\n @ui\n Scenario Outline: Icon can either be a gift or a brand colour cirle\n Given a timeline entry with \"icon\" <iconPropValue>\n When a user views the entry\n Then they see an <icon>\n Examples:\n | iconPropValue 1 | icon |\n | gift | gift |\n | circle | brand colour circle |\n | | gift |\n\n @motivating\n @ui\n Scenario: A timeline entry can display a line to connect it to another entry\n Given a timeline entry with \"line\" \"true\"\n When a user views the entry\n Then they see the entry\n But it has a brand colour line connecting it to the next timeline entry\n";
12883
12811
 
12884
- const scenario$w = scenarioTimeline + scenarioTimelineEntry;
12812
+ const scenario$v = scenarioTimeline + scenarioTimelineEntry;
12885
12813
  const Timeline_stories = {
12886
12814
  title: "Components/Timeline",
12887
12815
  parameters: {
12888
- scenario: scenario$w,
12816
+ scenario: scenario$v,
12889
12817
  },
12890
12818
  };
12891
12819
  const TimelineWith1Reward = () => {
@@ -12958,12 +12886,12 @@ const Timeline = /*#__PURE__*/Object.freeze({
12958
12886
  TimelineWith4Rewards: TimelineWith4Rewards
12959
12887
  });
12960
12888
 
12961
- const scenario$x = "@author:kutay\n@owner:kutay\nFeature: Image\n\n\tBackground: A user on the portal is viewing the widget\n\t\tGiven a user viewing the image component\n\n\t@motivating\n\t@ui\n\tScenario: Image is displayed from URL\n\t\tGiven an Image component\n\t\tAnd prop \"image-url\" is provided with a valid image url\n\t\tThen the image is displayed\n\t\tAnd it is centered\n\n\t@motivating\n\t@ui\n\tScenario Outline: Images can be aligned left, center or right\n\t\tGiven an Image component\n\t\tAnd prop \"image-url\" is provided with a valid image url\n\t\tAnd prop \"align\" has <value>\n\t\tThen the image is displayed\n\t\tAnd it is aligned to the <value>\n\t\tExamples:\n\t\t\t| value |\n\t\t\t| left |\n\t\t\t| center |\n\t\t\t| right |\n\n\t@motivating\n\t@ui\n\tScenario: Image background can be assigned a color\n\t\tGiven an Image component\n\t\tAnd prop \"image-url\" is provided with a valid image url\n\t\tAnd prop \"background-color\" is provided a color\n\t\tThen the image is displayed\n\t\tAnd the background is the provided color\n\n\t@motivating\n\t@ui\n\tScenario: Image minimum height can be constrained\n\t\tGiven an Image component\n\t\tAnd prop \"image-url\" is provided\n\t\tAnd prop \"min-height\" is given a minimum value\n\t\tThen the image is displayed\n\t\tAnd the container size changes\n\t\tThen the image does not shrink below its minimum height";
12889
+ const scenario$w = "@author:kutay\n@owner:kutay\nFeature: Image\n\n\tBackground: A user on the portal is viewing the widget\n\t\tGiven a user viewing the image component\n\n\t@motivating\n\t@ui\n\tScenario: Image is displayed from URL\n\t\tGiven an Image component\n\t\tAnd prop \"image-url\" is provided with a valid image url\n\t\tThen the image is displayed\n\t\tAnd it is centered\n\n\t@motivating\n\t@ui\n\tScenario Outline: Images can be aligned left, center or right\n\t\tGiven an Image component\n\t\tAnd prop \"image-url\" is provided with a valid image url\n\t\tAnd prop \"align\" has <value>\n\t\tThen the image is displayed\n\t\tAnd it is aligned to the <value>\n\t\tExamples:\n\t\t\t| value |\n\t\t\t| left |\n\t\t\t| center |\n\t\t\t| right |\n\n\t@motivating\n\t@ui\n\tScenario: Image background can be assigned a color\n\t\tGiven an Image component\n\t\tAnd prop \"image-url\" is provided with a valid image url\n\t\tAnd prop \"background-color\" is provided a color\n\t\tThen the image is displayed\n\t\tAnd the background is the provided color\n\n\t@motivating\n\t@ui\n\tScenario: Image minimum height can be constrained\n\t\tGiven an Image component\n\t\tAnd prop \"image-url\" is provided\n\t\tAnd prop \"min-height\" is given a minimum value\n\t\tThen the image is displayed\n\t\tAnd the container size changes\n\t\tThen the image does not shrink below its minimum height";
12962
12890
 
12963
12891
  const Image_stories = {
12964
12892
  title: "Components/Image",
12965
12893
  parameters: {
12966
- scenario: scenario$x,
12894
+ scenario: scenario$w,
12967
12895
  },
12968
12896
  };
12969
12897
  const Image = () => {
@@ -12996,12 +12924,12 @@ const Image$1 = /*#__PURE__*/Object.freeze({
12996
12924
  MinimumHeight: MinimumHeight
12997
12925
  });
12998
12926
 
12999
- const scenario$y = "@author:derek\n@owner:noah\nFeature: Titled Section\n\n Background: The titled section has a label and content\n Given a titled section\n And it has a label\n And it has content in the content slot\n\n @motivating\n @ui\n Scenario: Text alignment defaults to left align but can be configured\n Given the titled section has \"text-align\" <textAlignPropValue>\n When a user views the titled section\n Then the text in the label is <aligned>\n And the text in the content is <aligned>\n Examples:\n | textAlignPropValue | aligned |\n | center | center |\n | left | left |\n | right | right |\n | | left |\n\n @minutia\n @ui\n Scenario: Label margin is configurable\n Given the titled section has \"label-margin\" <marginPropValue>\n When a user views the titled section\n Then <marginPropValue> margin is between the label and content\n Examples:\n | marginPropValue | margin |\n | none | no |\n | xxx-small | xxx-small |\n | xx-small | xx-small |\n | x-small | x-small |\n | small | small |\n | medium | medium |\n | large | large |\n | x-large | x-large |\n | xx-large | xx-large |\n | xxx-large | xxx-large |\n | xxxx-large | xxxx-large |\n | | no |\n\n @minutia\n @ui\n Scenario Outline: Titled section padding is configurable\n Given the titled section has \"padding\" <paddingPropValue>\n When a user views the titled section\n Then <paddingPropValue> padding is applied around the titled section\n Examples:\n | paddingPropValue | padding |\n | none | no |\n | xxx-small | xxx-small |\n | xx-small | xx-small |\n | x-small | x-small |\n | small | small |\n | medium | medium |\n | large | large |\n | x-large | x-large |\n | xx-large | xx-large |\n | xxx-large | xxx-large |\n | xxxx-large | xxxx-large |\n | | no |";
12927
+ const scenario$x = "@author:derek\n@owner:noah\nFeature: Titled Section\n\n Background: The titled section has a label and content\n Given a titled section\n And it has a label\n And it has content in the content slot\n\n @motivating\n @ui\n Scenario: Text alignment defaults to left align but can be configured\n Given the titled section has \"text-align\" <textAlignPropValue>\n When a user views the titled section\n Then the text in the label is <aligned>\n And the text in the content is <aligned>\n Examples:\n | textAlignPropValue | aligned |\n | center | center |\n | left | left |\n | right | right |\n | | left |\n\n @minutia\n @ui\n Scenario: Label margin is configurable\n Given the titled section has \"label-margin\" <marginPropValue>\n When a user views the titled section\n Then <marginPropValue> margin is between the label and content\n Examples:\n | marginPropValue | margin |\n | none | no |\n | xxx-small | xxx-small |\n | xx-small | xx-small |\n | x-small | x-small |\n | small | small |\n | medium | medium |\n | large | large |\n | x-large | x-large |\n | xx-large | xx-large |\n | xxx-large | xxx-large |\n | xxxx-large | xxxx-large |\n | | no |\n\n @minutia\n @ui\n Scenario Outline: Titled section padding is configurable\n Given the titled section has \"padding\" <paddingPropValue>\n When a user views the titled section\n Then <paddingPropValue> padding is applied around the titled section\n Examples:\n | paddingPropValue | padding |\n | none | no |\n | xxx-small | xxx-small |\n | xx-small | xx-small |\n | x-small | x-small |\n | small | small |\n | medium | medium |\n | large | large |\n | x-large | x-large |\n | xx-large | xx-large |\n | xxx-large | xxx-large |\n | xxxx-large | xxxx-large |\n | | no |";
13000
12928
 
13001
12929
  const TitledSection_stories = {
13002
12930
  title: "Components/Titled Section",
13003
12931
  parameters: {
13004
- scenario: scenario$y,
12932
+ scenario: scenario$x,
13005
12933
  },
13006
12934
  };
13007
12935
  const AlignLeft = () => {
@@ -13397,12 +13325,12 @@ const Scroll = /*#__PURE__*/Object.freeze({
13397
13325
  ShoelaceProps: ShoelaceProps
13398
13326
  });
13399
13327
 
13400
- const scenario$z = "@author:Zach\n@owner:Zach\nFeature: Tabs\n\n The Tabs takes in the Tab component as children and maps through to display their header and content.\n\n Background: A user on the portal is viewing the widget\n Given a user viewing the Tabs component\n\n @motivating\n Scenario: Content inside the active tab is shown\n Given the header is set to <tabHeader>\n And the content inside is <tabContent>\n And the user has clicked <tabHeader>\n Then the <tabContent> is shown\n Examples:\n | tabHeader | tabContent |\n | Settings | This is the settings tab |\n | General | This is the general tab |\n | History | This is the history tab |\n\n @motivating\n @ui\n Scenario: The placement of the tabs is configurable\n Given The placement prop has been passed a valid <placement>\n Then tabs are placed on the <placementResult>\n Examples:\n | placement | placementResult |\n | | top of the content |\n | left | left hand side of the content |\n | right | right hand side of the content |\n | bottom | bottom of the content |\n\n\n @minutia\n @ui\n Scenario Outline: Tabs are setup to use the brand color\n Given the brand color is set to darkblue\n Then the text inside the active tab is darkblue\n And the underline of the active tab is darkblue\n\n @ui\n Scenario: Tabs are responsive\n Given the user is on a mobile device\n When there are more tabs than the horizontal space allows for\n Then clickable arrows appear on the left and right of the tabs\n And the tabs are scrollable\n\n @landmine\n Scenario: Program section cannot be used inside of tabs\n Given a tabs component\n And tab containing a program section with program-id \"test123\"\n And the program section wraps a component using program context\n When the tabs component is rendered\n Then the \"sq:program-id\" event listener for the program section is removed\n And the component does not use program-id \"test123\" to source its data\n And falls back to the global program id";
13328
+ const scenario$y = "@author:Zach\n@owner:Zach\nFeature: Tabs\n\n The Tabs takes in the Tab component as children and maps through to display their header and content.\n\n Background: A user on the portal is viewing the widget\n Given a user viewing the Tabs component\n\n @motivating\n Scenario: Content inside the active tab is shown\n Given the header is set to <tabHeader>\n And the content inside is <tabContent>\n And the user has clicked <tabHeader>\n Then the <tabContent> is shown\n Examples:\n | tabHeader | tabContent |\n | Settings | This is the settings tab |\n | General | This is the general tab |\n | History | This is the history tab |\n\n @motivating\n @ui\n Scenario: The placement of the tabs is configurable\n Given The placement prop has been passed a valid <placement>\n Then tabs are placed on the <placementResult>\n Examples:\n | placement | placementResult |\n | | top of the content |\n | left | left hand side of the content |\n | right | right hand side of the content |\n | bottom | bottom of the content |\n\n\n @minutia\n @ui\n Scenario Outline: Tabs are setup to use the brand color\n Given the brand color is set to darkblue\n Then the text inside the active tab is darkblue\n And the underline of the active tab is darkblue\n\n @ui\n Scenario: Tabs are responsive\n Given the user is on a mobile device\n When there are more tabs than the horizontal space allows for\n Then clickable arrows appear on the left and right of the tabs\n And the tabs are scrollable\n\n @landmine\n Scenario: Program section cannot be used inside of tabs\n Given a tabs component\n And tab containing a program section with program-id \"test123\"\n And the program section wraps a component using program context\n When the tabs component is rendered\n Then the \"sq:program-id\" event listener for the program section is removed\n And the component does not use program-id \"test123\" to source its data\n And falls back to the global program id";
13401
13329
 
13402
13330
  const Tabs_stories = {
13403
13331
  title: "Components/Tabs",
13404
13332
  parameters: {
13405
- scenario: scenario$z,
13333
+ scenario: scenario$y,
13406
13334
  },
13407
13335
  };
13408
13336
  const SimpleTabs = () => (index.h("div", { style: { maxWidth: "700px", margin: "auto" }, innerHTML: `
@@ -13902,12 +13830,12 @@ const Tabs = /*#__PURE__*/Object.freeze({
13902
13830
  RightTabs: RightTabs
13903
13831
  });
13904
13832
 
13905
- const scenario$A = "@author:johan\n@owner:johan\nFeature: Share Code\n\n The share code component is a box that allows users to see and copy their referral code for a given program\n\n Background: Environment\n Given there is a valid program ID in the environment\n And there is a valid user ID and account ID in the environment\n\n @motivating\n Scenario: A Users referral code can be copied to their clipboard\n Given tooltiptext is \"hello tooltip\"\n When the component renders\n Then there is a textbox with the user's share code\n When the clipboard icon is clicked\n Then the code is copied to clipboard\n And a tooltip will appear for ~1 second\n\n @minutia\n Scenario: Tooltip lifespan defaults to 2000\n Given the tooltip's lifespan is set to 2000\n And there is tooltip text\n When the component renders\n And the clipboard icon is clicked\n Then a tooltip will appear for ~2 seconds\n\n @minutia\n Scenario: Demo\n Given isDemo() returns true\n Then the share code is \"SHARECODE001\"\n And the component won't be interactive\n And the tooltip is hidden\n\n @minutia\n Scenario: Program ID can be sourced from prop\n Given the programId prop is set to \"program-a\"\n And window.widgetIdent.programId is set to \"program-b\"\n When the component renders\n Then the share code is for \"program-a\"\n\n @minutia\n Scenario: Program ID can be sourced from window\n Given the programId prop is unset\n And window.widgetIdent.programId is set to \"program-b\"\n When the component renders\n Then the share code is for \"program-b\"\n\n @minutia\n Scenario: An analytic event is fired when a user copies their code\n Given a user viewing the share code component\n And the component is rendered for \"program-a\"\n When they click to copy their code\n Then an \"USER_REFERRAL_PROGRAM_ENGAGEMENT_EVENT\" analytic event is fired\n And it is for \"program-a\"\n And it has share medium \"DIRECT\"\n\n\n @ui\n Scenario Outline: user can edit the alignment of the share code text\n Given a user is editing the share code component\n Then they see \"Align text\" props\n And the default value is \"left\"\n When they change the option to <option>\n Then they see the text in <position>\n Examples:\n | option | position |\n | left | left |\n | center | center |\n | right | right |\n\n @ui\n Scenario Outline: The position of the copy button can be changed\n Given a user is editing the share code component\n Then they see \"Style\" props\n And the default value is \"icon\"\n When they change the option to <option>\n Then they see the copy button in <position>\n Examples:\n | option | position |\n | button outside | outside the input, on the right |\n | button below | outside the input, below |\n | icon | inside the input as an icon |\n";
13833
+ const scenario$z = "@author:johan\n@owner:johan\nFeature: Share Code\n\n The share code component is a box that allows users to see and copy their referral code for a given program\n\n Background: Environment\n Given there is a valid program ID in the environment\n And there is a valid user ID and account ID in the environment\n\n @motivating\n Scenario: A Users referral code can be copied to their clipboard\n Given tooltiptext is \"hello tooltip\"\n When the component renders\n Then there is a textbox with the user's share code\n When the clipboard icon is clicked\n Then the code is copied to clipboard\n And a tooltip will appear for ~1 second\n\n @minutia\n Scenario: Tooltip lifespan defaults to 2000\n Given the tooltip's lifespan is set to 2000\n And there is tooltip text\n When the component renders\n And the clipboard icon is clicked\n Then a tooltip will appear for ~2 seconds\n\n @minutia\n Scenario: Demo\n Given isDemo() returns true\n Then the share code is \"SHARECODE001\"\n And the component won't be interactive\n And the tooltip is hidden\n\n @minutia\n Scenario: Program ID can be sourced from prop\n Given the programId prop is set to \"program-a\"\n And window.widgetIdent.programId is set to \"program-b\"\n When the component renders\n Then the share code is for \"program-a\"\n\n @minutia\n Scenario: Program ID can be sourced from window\n Given the programId prop is unset\n And window.widgetIdent.programId is set to \"program-b\"\n When the component renders\n Then the share code is for \"program-b\"\n\n @minutia\n Scenario: An analytic event is fired when a user copies their code\n Given a user viewing the share code component\n And the component is rendered for \"program-a\"\n When they click to copy their code\n Then an \"USER_REFERRAL_PROGRAM_ENGAGEMENT_EVENT\" analytic event is fired\n And it is for \"program-a\"\n And it has share medium \"DIRECT\"\n\n\n @ui\n Scenario Outline: user can edit the alignment of the share code text\n Given a user is editing the share code component\n Then they see \"Align text\" props\n And the default value is \"left\"\n When they change the option to <option>\n Then they see the text in <position>\n Examples:\n | option | position |\n | left | left |\n | center | center |\n | right | right |\n\n @ui\n Scenario Outline: The position of the copy button can be changed\n Given a user is editing the share code component\n Then they see \"Style\" props\n And the default value is \"icon\"\n When they change the option to <option>\n Then they see the copy button in <position>\n Examples:\n | option | position |\n | button outside | outside the input, on the right |\n | button below | outside the input, below |\n | icon | inside the input as an icon |\n";
13906
13834
 
13907
13835
  const ShareCode_stories = {
13908
13836
  title: "Components/Share Code",
13909
13837
  parameters: {
13910
- scenario: scenario$A,
13838
+ scenario: scenario$z,
13911
13839
  },
13912
13840
  };
13913
13841
  const ShareCode = () => {
@@ -13926,7 +13854,7 @@ const CustomTooltipDuration = () => {
13926
13854
  return (index.h("sqm-share-code", { tooltiplifespan: 5000, tooltiptext: "CUSTOM TOOLTIP TEXT" }));
13927
13855
  };
13928
13856
  const CopyButton$1 = () => {
13929
- return (index.h(ShadowViewAddon.CopyTextView, Object.assign({}, {
13857
+ return (index.h(copyTextView.CopyTextView, Object.assign({}, {
13930
13858
  copyString: "https://noah.example.com",
13931
13859
  open: false,
13932
13860
  tooltiptext: "Copied!",
@@ -13934,7 +13862,7 @@ const CopyButton$1 = () => {
13934
13862
  })));
13935
13863
  };
13936
13864
  const CopyButtonBelow$1 = () => {
13937
- return (index.h(ShadowViewAddon.CopyTextView, Object.assign({}, {
13865
+ return (index.h(copyTextView.CopyTextView, Object.assign({}, {
13938
13866
  copyString: "https://noah.example.com",
13939
13867
  open: false,
13940
13868
  tooltiptext: "Copied!",
@@ -13949,7 +13877,7 @@ const Error$7 = () => {
13949
13877
  tooltiptext: "Copied!",
13950
13878
  error: true,
13951
13879
  };
13952
- return index.h(ShadowViewAddon.CopyTextView, Object.assign({}, props));
13880
+ return index.h(copyTextView.CopyTextView, Object.assign({}, props));
13953
13881
  };
13954
13882
 
13955
13883
  const ShareCode$1 = /*#__PURE__*/Object.freeze({
@@ -13965,6 +13893,82 @@ const ShareCode$1 = /*#__PURE__*/Object.freeze({
13965
13893
  Error: Error$7
13966
13894
  });
13967
13895
 
13896
+ const scenario$A = "@author:sam\n@owner:sam\nFeature: Referral Code\n\n The referral code component is a box that allows users to see and copy their referral promo code for a given program\n\n Background: Environment\n Given there is a valid program ID in the environment\n And there is a valid user ID and account ID in the environment\n\n @motivating\n Scenario: A Users referral code can be copied to their clipboard\n Given tooltiptext is \"hello tooltip\"\n When the component renders\n Then there is a textbox with the user's referral code\n When the clipboard icon is clicked\n Then the code is copied to clipboard\n And a tooltip will appear for ~1 second\n\n @minutia\n Scenario: Tooltip lifespan can be customized\n Given the tooltip's lifespan is set to 2000\n And there is tooltip text\n When the component renders\n And the clipboard icon is clicked\n Then a tooltip will appear for ~2 seconds\n\n @minutia\n Scenario: Demo\n Given isDemo() returns true\n Then the share code is \"SHARECODE001\"\n And the component won't be interactive\n And the tooltip is hidden\n\n @minutia\n Scenario: Program ID can be sourced from prop\n Given the programId prop is set to \"program-a\"\n And window.widgetIdent.programId is set to \"program-b\"\n When the component renders\n Then the share code is for \"program-a\"\n\n @minutia\n Scenario: Program ID can be sourced from window\n Given the programId prop is unset\n And window.widgetIdent.programId is set to \"program-b\"\n When the component renders\n Then the share code is for \"program-b\"\n\n @minutia\n Scenario: An analytic event is fired when a user copies their code\n Given a user viewing the referral code component\n And the component is rendered for \"program-a\"\n When they click to copy their code\n Then an \"USER_REFERRAL_PROGRAM_ENGAGEMENT_EVENT\" analytic event is fired\n And it is for \"program-a\"\n And it has share medium \"DIRECT\"\n\n @ui\n Scenario Outline: user can edit the alignment of the share code text\n Given a user is editing the referral code component\n Then they see \"Align text\" props\n And the default value is \"left\"\n When they change the option to <option>\n Then they see the text in <position>\n Examples:\n | option | position |\n | left | left |\n | center | center |\n | right | right |\n\n @ui\n Scenario Outline: The position of the copy button can be changed\n Given a user is editing the referral code component\n Then they see \"Style\" props\n And the default value is \"icon\"\n When they change the option to <option>\n Then they see the copy button in <position>\n Examples:\n | option | position |\n | button outside | outside the input, on the right |\n | button below | outside the input, below |\n | icon | inside the input as an icon |\n";
13897
+
13898
+ const ReferralCode_stories = {
13899
+ title: "Components/Referral Code",
13900
+ parameters: {
13901
+ scenario: scenario$A,
13902
+ },
13903
+ };
13904
+ const ReferralCode = () => {
13905
+ return (index.h("sqm-referral-code", { tooltiptext: "Copied to Clipboard" }));
13906
+ };
13907
+ const ShowNotificationText = () => {
13908
+ return (index.h("sqm-referral-code", { showNotificationText: true, notificationText: "You've copied this code before" }));
13909
+ };
13910
+ const ShowNotificationTextWithButton = () => {
13911
+ return (index.h("sqm-referral-code", { showNotificationText: true, notificationText: "You've copied this code before", buttonStyle: "button-outside" }));
13912
+ };
13913
+ const ShowNotificationTextWithButtonBelow = () => {
13914
+ return (index.h("sqm-referral-code", { showNotificationText: true, notificationText: "You've copied this code before", buttonStyle: "button-below" }));
13915
+ };
13916
+ const CustomTooltipText$1 = () => {
13917
+ return (index.h("sqm-referral-code", { tooltiptext: "CUSTOM TOOLTIP TEXT" }));
13918
+ };
13919
+ const TextAlignCenter$2 = () => {
13920
+ return index.h("sqm-referral-code", { textAlign: "center" });
13921
+ };
13922
+ const TextAlignRight$2 = () => {
13923
+ return index.h("sqm-referral-code", { textAlign: "right" });
13924
+ };
13925
+ const CustomTooltipDuration$1 = () => {
13926
+ return (index.h("sqm-referral-code", { tooltiplifespan: 5000, tooltiptext: "CUSTOM TOOLTIP TEXT" }));
13927
+ };
13928
+ const CopyButton$2 = () => {
13929
+ return (index.h(copyTextView.CopyTextView, Object.assign({}, {
13930
+ copyString: "https://noah.example.com",
13931
+ open: false,
13932
+ tooltiptext: "Copied!",
13933
+ isCopyIcon: false,
13934
+ buttonStyle: "button-outside",
13935
+ })));
13936
+ };
13937
+ const CopyButtonBelow$2 = () => {
13938
+ return (index.h(copyTextView.CopyTextView, Object.assign({}, {
13939
+ copyString: "https://noah.example.com",
13940
+ open: false,
13941
+ tooltiptext: "Copied!",
13942
+ buttonStyle: "button-below",
13943
+ })));
13944
+ };
13945
+ const Error$8 = () => {
13946
+ const props = {
13947
+ copyString: "https://noah.example.com",
13948
+ disabled: true,
13949
+ open: true,
13950
+ tooltiptext: "Copied!",
13951
+ error: true,
13952
+ };
13953
+ return index.h(copyTextView.CopyTextView, Object.assign({}, props));
13954
+ };
13955
+
13956
+ const ReferralCode$1 = /*#__PURE__*/Object.freeze({
13957
+ __proto__: null,
13958
+ 'default': ReferralCode_stories,
13959
+ ReferralCode: ReferralCode,
13960
+ ShowNotificationText: ShowNotificationText,
13961
+ ShowNotificationTextWithButton: ShowNotificationTextWithButton,
13962
+ ShowNotificationTextWithButtonBelow: ShowNotificationTextWithButtonBelow,
13963
+ CustomTooltipText: CustomTooltipText$1,
13964
+ TextAlignCenter: TextAlignCenter$2,
13965
+ TextAlignRight: TextAlignRight$2,
13966
+ CustomTooltipDuration: CustomTooltipDuration$1,
13967
+ CopyButton: CopyButton$2,
13968
+ CopyButtonBelow: CopyButtonBelow$2,
13969
+ Error: Error$8
13970
+ });
13971
+
13968
13972
  // import scenario from "./ShareCode.feature";
13969
13973
  const EmailRegistration_stories = {
13970
13974
  title: "Components/Email Registration",
@@ -13972,7 +13976,7 @@ const EmailRegistration_stories = {
13972
13976
  // scenario,
13973
13977
  },
13974
13978
  };
13975
- const defaultProps$e = {
13979
+ const defaultProps$d = {
13976
13980
  states: {
13977
13981
  error: "",
13978
13982
  loading: false,
@@ -13991,59 +13995,59 @@ const defaultProps$e = {
13991
13995
  fraudErrorMessageTitle: "Looks like you tried referring yourself",
13992
13996
  },
13993
13997
  };
13994
- const Default$g = () => index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, defaultProps$e));
13998
+ const Default$f = () => index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, defaultProps$d));
13995
13999
  const HasFirstNameLastName = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
13996
- ...defaultProps$e,
14000
+ ...defaultProps$d,
13997
14001
  content: {
13998
- ...defaultProps$e.content,
14002
+ ...defaultProps$d.content,
13999
14003
  includeName: true,
14000
14004
  },
14001
14005
  })));
14002
14006
  const WithSlots = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
14003
- ...defaultProps$e,
14007
+ ...defaultProps$d,
14004
14008
  content: {
14005
- ...defaultProps$e.content,
14009
+ ...defaultProps$d.content,
14006
14010
  topSlot: index.h("div", null, "Hello this is the top slot"),
14007
14011
  bottomSlot: index.h("div", null, "Hello this is the bottom slot"),
14008
14012
  },
14009
14013
  })));
14010
14014
  const NoBorder$1 = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
14011
- ...defaultProps$e,
14015
+ ...defaultProps$d,
14012
14016
  content: {
14013
- ...defaultProps$e.content,
14017
+ ...defaultProps$d.content,
14014
14018
  hideBorder: true,
14015
14019
  },
14016
14020
  })));
14017
14021
  const BackgroundColor$2 = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
14018
- ...defaultProps$e,
14022
+ ...defaultProps$d,
14019
14023
  content: {
14020
- ...defaultProps$e.content,
14024
+ ...defaultProps$d.content,
14021
14025
  backgroundColor: "aquamarine",
14022
14026
  },
14023
14027
  })));
14024
14028
  const Loading$4 = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
14025
- ...defaultProps$e,
14029
+ ...defaultProps$d,
14026
14030
  states: {
14027
14031
  error: "",
14028
14032
  loading: true,
14029
14033
  },
14030
14034
  })));
14031
- const Error$8 = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
14032
- ...defaultProps$e,
14035
+ const Error$9 = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
14036
+ ...defaultProps$d,
14033
14037
  states: {
14034
14038
  error: "Something went wrong. Please try again.",
14035
14039
  loading: false,
14036
14040
  },
14037
14041
  })));
14038
14042
  const FraudError = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
14039
- ...defaultProps$e,
14043
+ ...defaultProps$d,
14040
14044
  states: {
14041
14045
  error: "FRAUD",
14042
14046
  loading: false,
14043
14047
  },
14044
14048
  })));
14045
14049
  const EmptyEmailError = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
14046
- ...defaultProps$e,
14050
+ ...defaultProps$d,
14047
14051
  states: {
14048
14052
  error: "Something went wrong. Please try again.",
14049
14053
  loading: false,
@@ -14056,13 +14060,13 @@ const EmptyEmailError = () => (index.h(emailRegistrationView.EmailRegistrationVi
14056
14060
  const EmailRegistration = /*#__PURE__*/Object.freeze({
14057
14061
  __proto__: null,
14058
14062
  'default': EmailRegistration_stories,
14059
- Default: Default$g,
14063
+ Default: Default$f,
14060
14064
  HasFirstNameLastName: HasFirstNameLastName,
14061
14065
  WithSlots: WithSlots,
14062
14066
  NoBorder: NoBorder$1,
14063
14067
  BackgroundColor: BackgroundColor$2,
14064
14068
  Loading: Loading$4,
14065
- Error: Error$8,
14069
+ Error: Error$9,
14066
14070
  FraudError: FraudError,
14067
14071
  EmptyEmailError: EmptyEmailError
14068
14072
  });
@@ -14075,7 +14079,7 @@ const CouponCode_stories = {
14075
14079
  scenario: scenario$B,
14076
14080
  },
14077
14081
  };
14078
- const defaultProps$f = {
14082
+ const defaultProps$e = {
14079
14083
  tooltiptext: "Copied to Clipboard",
14080
14084
  copyString: "THANKSJANE125uv125",
14081
14085
  open: false,
@@ -14087,69 +14091,69 @@ const defaultProps$f = {
14087
14091
  const CouponCode = () => {
14088
14092
  return index.h("sqm-coupon-code", { tooltiptext: "Copied to Clipboard" });
14089
14093
  };
14090
- const CustomTooltipText$1 = () => {
14094
+ const CustomTooltipText$2 = () => {
14091
14095
  return index.h("sqm-coupon-code", { tooltiptext: "CUSTOM TOOLTIP TEXT" });
14092
14096
  };
14093
- const CustomTooltipDuration$1 = () => {
14097
+ const CustomTooltipDuration$2 = () => {
14094
14098
  return (index.h("sqm-coupon-code", { tooltiplifespan: 5000, tooltiptext: "CUSTOM TOOLTIP TEXT" }));
14095
14099
  };
14096
- const TextAlignCenter$2 = () => {
14100
+ const TextAlignCenter$3 = () => {
14097
14101
  return index.h("sqm-coupon-code", { textAlign: "center" });
14098
14102
  };
14099
- const TextAlignRight$2 = () => {
14103
+ const TextAlignRight$3 = () => {
14100
14104
  return index.h("sqm-coupon-code", { textAlign: "right" });
14101
14105
  };
14102
- const CopyButton$2 = () => {
14103
- return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$f, { buttonStyle: "button-outside" })));
14106
+ const CopyButton$3 = () => {
14107
+ return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$e, { buttonStyle: "button-outside" })));
14104
14108
  };
14105
14109
  const CopyButtonCustomLabel = () => {
14106
- return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$f, { buttonStyle: "button-outside", "copy-button-label": "test long custom label" })));
14110
+ return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$e, { buttonStyle: "button-outside", "copy-button-label": "test long custom label" })));
14107
14111
  };
14108
- const CopyButtonBelow$2 = () => {
14109
- return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$f, { buttonStyle: "button-below" })));
14112
+ const CopyButtonBelow$3 = () => {
14113
+ return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$e, { buttonStyle: "button-below" })));
14110
14114
  };
14111
14115
  const CopyButtonBelowCustomLabel = () => {
14112
- return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$f, { buttonStyle: "button-below", "copy-button-label": "test long custom label" })));
14116
+ return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$e, { buttonStyle: "button-below", "copy-button-label": "test long custom label" })));
14113
14117
  };
14114
14118
  const Loading$5 = () => {
14115
- return index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { loading: true }));
14119
+ return index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { loading: true }));
14116
14120
  };
14117
14121
  const CopyButtonLoading = () => {
14118
- return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { buttonStyle: "button-outside", loading: true })));
14122
+ return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { buttonStyle: "button-outside", loading: true })));
14119
14123
  };
14120
14124
  const CopyButtonBelowLoading = () => {
14121
- return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { buttonStyle: "button-below", loading: true })));
14125
+ return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { buttonStyle: "button-below", loading: true })));
14122
14126
  };
14123
14127
  const ErrorGeneric = () => {
14124
- return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { errorType: "warning", error: true, errorText: "We couldn't fetch your code. Please try again later or reach out to the Support team for help resolving this issue." })));
14128
+ return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { errorType: "warning", error: true, errorText: "We couldn't fetch your code. Please try again later or reach out to the Support team for help resolving this issue." })));
14125
14129
  };
14126
14130
  const ErrorPending = () => {
14127
- return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { errorType: "info", error: true, errorText: "Your code will be available on April 24, 2023. Mark your calendar and come back then to redeem your reward!" })));
14131
+ return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { errorType: "info", error: true, errorText: "Your code will be available on April 24, 2023. Mark your calendar and come back then to redeem your reward!" })));
14128
14132
  };
14129
14133
  const ErrorFullfillment = () => {
14130
- return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { errorType: "warning", error: true, errorText: "We couldn't fetch your code. Please try again later or reach out to the Support team for help resolving this issue." })));
14134
+ return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { errorType: "warning", error: true, errorText: "We couldn't fetch your code. Please try again later or reach out to the Support team for help resolving this issue." })));
14131
14135
  };
14132
14136
  const ErrorCancelled = () => {
14133
- return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { errorType: "warning", error: true, errorText: "This code has been cancelled. Please reach out to the Support team for help resolving this issue." })));
14137
+ return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { errorType: "warning", error: true, errorText: "This code has been cancelled. Please reach out to the Support team for help resolving this issue." })));
14134
14138
  };
14135
14139
  const ErrorExpired = () => {
14136
- return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { errorType: "warning", error: true, errorText: "Looks like this code has expired. Please reach out to the Support team for help resolving this issue." })));
14140
+ return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { errorType: "warning", error: true, errorText: "Looks like this code has expired. Please reach out to the Support team for help resolving this issue." })));
14137
14141
  };
14138
14142
  const ErrorRedeemed = () => {
14139
- return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$f, { errorType: "success", error: true, errorText: "Looks like you\u2019ve already redeemed this code." })));
14143
+ return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$e, { errorType: "success", error: true, errorText: "Looks like you\u2019ve already redeemed this code." })));
14140
14144
  };
14141
14145
 
14142
14146
  const CouponCode$1 = /*#__PURE__*/Object.freeze({
14143
14147
  __proto__: null,
14144
14148
  'default': CouponCode_stories,
14145
14149
  CouponCode: CouponCode,
14146
- CustomTooltipText: CustomTooltipText$1,
14147
- CustomTooltipDuration: CustomTooltipDuration$1,
14148
- TextAlignCenter: TextAlignCenter$2,
14149
- TextAlignRight: TextAlignRight$2,
14150
- CopyButton: CopyButton$2,
14150
+ CustomTooltipText: CustomTooltipText$2,
14151
+ CustomTooltipDuration: CustomTooltipDuration$2,
14152
+ TextAlignCenter: TextAlignCenter$3,
14153
+ TextAlignRight: TextAlignRight$3,
14154
+ CopyButton: CopyButton$3,
14151
14155
  CopyButtonCustomLabel: CopyButtonCustomLabel,
14152
- CopyButtonBelow: CopyButtonBelow$2,
14156
+ CopyButtonBelow: CopyButtonBelow$3,
14153
14157
  CopyButtonBelowCustomLabel: CopyButtonBelowCustomLabel,
14154
14158
  Loading: Loading$5,
14155
14159
  CopyButtonLoading: CopyButtonLoading,
@@ -14170,21 +14174,21 @@ const LogoutCurrentUser_stories = {
14170
14174
  scenario: scenario$C,
14171
14175
  },
14172
14176
  };
14173
- const defaultProps$g = {
14177
+ const defaultProps$f = {
14174
14178
  filledInEmailText: "Currently showing referral data for noah.clarke@saasquatch.com",
14175
14179
  onSwitchClick: () => console.log("clicked"),
14176
14180
  switchUserText: "not you?",
14177
14181
  loading: false,
14178
14182
  emailErrorText: "Error fetching email",
14179
14183
  };
14180
- const Default$h = () => {
14181
- return index.h(sqmLogoutCurrentUserView.LogoutCurrentUserView, Object.assign({}, defaultProps$g));
14184
+ const Default$g = () => {
14185
+ return index.h(sqmLogoutCurrentUserView.LogoutCurrentUserView, Object.assign({}, defaultProps$f));
14182
14186
  };
14183
14187
 
14184
14188
  const LogoutCurrentUser = /*#__PURE__*/Object.freeze({
14185
14189
  __proto__: null,
14186
14190
  'default': LogoutCurrentUser_stories,
14187
- Default: Default$h
14191
+ Default: Default$g
14188
14192
  });
14189
14193
 
14190
14194
  const scenario$D = "@author:noah\n@owner:noah\n\nFeature: Link Button\n\n\t@ui\n\tScenario: Links can be opened in the same tab\n\t\tWhen a user clicks the button\n\t\tThen a link opens in the same tab\n\t\tAnd if the component is in an iFrame then the link is opened in the parent window not the iFrame\n\n\t@ui\n\tScenario: Links can be opened in a new tab\n\t\tWhen a user clicks the button\n\t\tThen a link opens in a new tab\n\t\tAnd if the component is in an iFrame then the link is still opened in a new tab\n\n\n\t@ui\n\tScenario: Props control the link and button text\n\t\tGiven the \"link\" prop is set to \"https://www.example.com\"\n\t\tAnd the \"buttonText\" prop is set to \"Click me!\"\n\t\tThen a button is shown with the text \"Click me!\"\n\t\tAnd when clicked the button opens https://www.example.com\n\n\t@ui\n\tScenario Outline: The button type can be set\n\t\tGiven the button type is set to <value>\n\t\tThen a <buttonType> is shown\n\t\tExamples:\n\t\t\t| value | buttonType |\n\t\t\t| <null> | primary |\n\t\t\t| default | default |\n\t\t\t| primary | primary |\n\t\t\t| success | success |\n\t\t\t| neutral | neutral |\n\t\t\t| warning | warning |\n\t\t\t| danger | danger |";
@@ -14195,22 +14199,22 @@ const LinkButton_stories = {
14195
14199
  scenario: scenario$D,
14196
14200
  },
14197
14201
  };
14198
- const defaultProps$h = {
14202
+ const defaultProps$g = {
14199
14203
  link: "https://example.com",
14200
14204
  openInNewTab: false,
14201
14205
  buttonText: "Button Text",
14202
14206
  };
14203
- const Default$i = () => {
14204
- return index.h("sqm-link-button", Object.assign({}, defaultProps$h));
14207
+ const Default$h = () => {
14208
+ return index.h("sqm-link-button", Object.assign({}, defaultProps$g));
14205
14209
  };
14206
14210
  const OpenInNewTab = () => {
14207
- return (index.h("sqm-link-button", Object.assign({}, { ...defaultProps$h, openInNewTab: true })));
14211
+ return (index.h("sqm-link-button", Object.assign({}, { ...defaultProps$g, openInNewTab: true })));
14208
14212
  };
14209
14213
 
14210
14214
  const LinkButton = /*#__PURE__*/Object.freeze({
14211
14215
  __proto__: null,
14212
14216
  'default': LinkButton_stories,
14213
- Default: Default$i,
14217
+ Default: Default$h,
14214
14218
  OpenInNewTab: OpenInNewTab
14215
14219
  });
14216
14220
 
@@ -14220,7 +14224,7 @@ const CloseButton_stories = {
14220
14224
  // scenario,
14221
14225
  },
14222
14226
  };
14223
- const defaultProps$i = {};
14227
+ const defaultProps$h = {};
14224
14228
  const containerStyles = {
14225
14229
  position: "relative",
14226
14230
  width: "500px",
@@ -14228,22 +14232,22 @@ const containerStyles = {
14228
14232
  border: "1px solid black",
14229
14233
  padding: "25px",
14230
14234
  };
14231
- const Default$j = () => {
14232
- return index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, defaultProps$i));
14235
+ const Default$i = () => {
14236
+ return index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, defaultProps$h));
14233
14237
  };
14234
14238
  const InAContainer = () => {
14235
14239
  return (index.h("div", { style: containerStyles },
14236
- index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, defaultProps$i))));
14240
+ index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, defaultProps$h))));
14237
14241
  };
14238
14242
  const CustomColor$1 = () => {
14239
14243
  return (index.h("div", { style: containerStyles },
14240
- index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, { ...defaultProps$i, color: "blue" }))));
14244
+ index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, { ...defaultProps$h, color: "blue" }))));
14241
14245
  };
14242
14246
 
14243
14247
  const CloseButton = /*#__PURE__*/Object.freeze({
14244
14248
  __proto__: null,
14245
14249
  'default': CloseButton_stories,
14246
- Default: Default$j,
14250
+ Default: Default$i,
14247
14251
  InAContainer: InAContainer,
14248
14252
  CustomColor: CustomColor$1
14249
14253
  });
@@ -14433,17 +14437,17 @@ const RadioCardView = ({ title, icon, description, selected, }) => {
14433
14437
  const RadioCard_stories = {
14434
14438
  title: "Components/Radio Card",
14435
14439
  };
14436
- const defaultProps$j = {
14440
+ const defaultProps$i = {
14437
14441
  selected: false,
14438
14442
  title: "Card Title",
14439
14443
  description: "Description text goes here",
14440
14444
  icon: "apple",
14441
14445
  };
14442
14446
  const DefaultView$1 = () => {
14443
- return index.h(RadioCardView, Object.assign({}, defaultProps$j));
14447
+ return index.h(RadioCardView, Object.assign({}, defaultProps$i));
14444
14448
  };
14445
14449
  const Selected = () => {
14446
- return index.h(RadioCardView, Object.assign({}, defaultProps$j, { selected: true }));
14450
+ return index.h(RadioCardView, Object.assign({}, defaultProps$i, { selected: true }));
14447
14451
  };
14448
14452
 
14449
14453
  const RadioCard = /*#__PURE__*/Object.freeze({
@@ -14456,13 +14460,13 @@ const RadioCard = /*#__PURE__*/Object.freeze({
14456
14460
  const ProgressBar_stories = {
14457
14461
  title: "Components/Progress Bar",
14458
14462
  };
14459
- const defaultProps$k = {
14463
+ const defaultProps$j = {
14460
14464
  progress: 2,
14461
14465
  goal: 4,
14462
14466
  steps: true,
14463
14467
  };
14464
14468
  const TaxAndPayoutsProgressBar = () => {
14465
- return index.h(ShadowViewAddon.ProgressBar, Object.assign({}, defaultProps$k, { stageCount: 4, currentStage: 2 }));
14469
+ return index.h(ShadowViewAddon.ProgressBar, Object.assign({}, defaultProps$j, { stageCount: 4, currentStage: 2 }));
14466
14470
  };
14467
14471
 
14468
14472
  const ProgressBar$1 = /*#__PURE__*/Object.freeze({
@@ -14481,7 +14485,7 @@ const Loading$6 = () => {
14481
14485
  },
14482
14486
  } }));
14483
14487
  };
14484
- const Error$9 = () => {
14488
+ const Error$a = () => {
14485
14489
  return (index.h("sqm-payout-details-card", { demoData: {
14486
14490
  states: {
14487
14491
  error: true,
@@ -14522,7 +14526,7 @@ const PayoutDetailsCard = /*#__PURE__*/Object.freeze({
14522
14526
  __proto__: null,
14523
14527
  'default': PayoutDetailsCard_stories,
14524
14528
  Loading: Loading$6,
14525
- Error: Error$9,
14529
+ Error: Error$a,
14526
14530
  NextPayout: NextPayout,
14527
14531
  PayoutToday: PayoutToday,
14528
14532
  ThresholdPayout: ThresholdPayout,
@@ -15132,6 +15136,325 @@ const UseInvoiceTableCells = /*#__PURE__*/Object.freeze({
15132
15136
  InvoiceTableDemoHook: InvoiceTableDemoHook
15133
15137
  });
15134
15138
 
15139
+ const scenario$E = "@author:sam\n@owner:sam\n\nFeature: Referral Codes Component\n\n A paginated display of available and used promo codes for the user to share with others\n\n @motivating\n Scenario: Promo code can be shared using various share mediums\n Given an authenticated user\n And the program has promo codes configured\n When the promo code section is loaded\n Then the promo code can be copied directly\n And the promo code can be shared using <shareMedium>\n Examples:\n | shareMedium |\n | DIRECT |\n | EMAIL |\n | FBMESSENGER |\n | WHATSAPP |\n\n @minutia\n Scenario: Clicking any of the share mediums sets the code as copied\n Given an authenticated user\n And the program has promo codes configured\n When the promo code section is loaded\n When clicking <shareMedium> button\n Then the code is marked as copied\n And the copied notification text is shown\n Examples:\n | shareMedium |\n | DIRECT |\n | EMAIL |\n | FBMESSENGER |\n | WHATSAPP |\n\n @minutia\n Scenario Outline: User is notified if the currently viewed promo code has been copied already\n Given an authenticated user\n And the program has promo codes configured\n When the promo code section is loaded\n And the code has not been copied already\n Then no notification text is displayed\n When the code is changed to one that has been copied\n Then the <notificationText> is displayed\n Examples:\n | notificationText |\n | You've copied this code before |\n | Previously Copied |\n | foo |\n\n @minutia\n Scenario Outline: Share buttons slots use the link from referral codes instead of the default query\n Given an authenticated user\n And the program has promo codes configured\n And a <shareMedium> button is a child of `<sqm-referral-codes>`\n Then the <shareMedium> button is shown\n And the link uses <promoCode>\n Examples:\n | propName | shareMedium | promoCode |\n | hideSharelink | DIRECT | PROMOCODE1 |\n | hideEmail | EMAIL | PROMOCODE1 |\n | hideFbMessenger | FBMESSENGER | PROMOCODE1 |\n | hideWhatsApp | WHATSAPP | PROMOCODE1 |\n\n @minutia\n Scenario Outline: Number of codes is displayed in the pagination component\n Given an authenticated user\n And the program has promo codes configured\n When the promo code section is loaded\n And the user has <numCodes> available\n And the user is on <currentPage>\n Then the pagination text is <paginationText>\n Examples:\n | numCodes | currentPage | paginationText |\n | 5 | 1 | 1 of 5 |\n | 5 | 2 | 2 of 5 |\n | 5 | 3 | 3 of 5 |\n | 5 | 4 | 4 of 5 |\n | 5 | 5 | 5 of 5 |\n | 1 | 1 | 1 of 1 |\n | 0 | 0 | 0 of 0 |\n\n @minutia\n Scenario: Loading state is shown when changing code page\n Given an authenticated user\n And the program has promo codes configured\n When the promo code section is loaded\n And the user has more than 1 available\n When the next button is clicked\n Then a loading state is shown\n\n\n";
15140
+
15141
+ const ReferralCodes_stories = {
15142
+ title: "Components/Referral Codes",
15143
+ parameters: {
15144
+ scenario: scenario$E,
15145
+ },
15146
+ };
15147
+ const demoData = {
15148
+ titleText: "Start sharing",
15149
+ emptyStateHeaderText: "Your new codes and links aren’t ready yet",
15150
+ emptyStateDescriptionText: "Please contact our program support team to let them know you’re out of codes.",
15151
+ emptyStateImageUrl: "https://res.cloudinary.com/saasquatch/image/upload/v1644360953/squatch-assets/empty_leaderboard2.png",
15152
+ states: {
15153
+ noCodes: false,
15154
+ loading: false,
15155
+ },
15156
+ };
15157
+ const pagination = (slot) => {
15158
+ return index.h("sqm-pagination", { slot: slot });
15159
+ };
15160
+ const shareButtons = (slot) => {
15161
+ return (index.h("sqm-portal-container", { gap: "small", slot: slot },
15162
+ index.h("sqm-share-button", { medium: "email" }, "Share via email"),
15163
+ index.h("sqm-share-button", { medium: "facebook" }, "Share on Facebook"),
15164
+ index.h("sqm-share-button", { medium: "whatsapp" }, "Share on WhatsApp")));
15165
+ };
15166
+ const shareCodes = (slot) => {
15167
+ return index.h("sqm-referral-code", { slot: slot });
15168
+ };
15169
+ const shareCodeWithPreviouslyCopied = (slot) => {
15170
+ return (index.h("sqm-referral-code", { slot: slot, showNotificationText: true, notificationText: "You\u2019ve copied this before." }));
15171
+ };
15172
+ const ReferralCodes = () => {
15173
+ return (index.h("sqm-referral-codes", null,
15174
+ pagination("pagination"),
15175
+ shareCodes("shareCodes"),
15176
+ shareButtons("shareButtons")));
15177
+ };
15178
+ const WithPreviouslyCopiedCode = () => {
15179
+ return (index.h("sqm-referral-codes", null,
15180
+ pagination("pagination"),
15181
+ shareCodeWithPreviouslyCopied("shareCodes"),
15182
+ shareButtons("shareButtons")));
15183
+ };
15184
+ const Empty$3 = () => {
15185
+ return (index.h("sqm-referral-codes", { demoData: { states: { ...demoData.states, noCodes: true } } },
15186
+ pagination("pagination"),
15187
+ shareCodes("shareCodes"),
15188
+ shareButtons("shareButtons")));
15189
+ };
15190
+ const EmptyWithCustomTextAndImage = () => {
15191
+ return (index.h("sqm-referral-codes", { emptyStateHeaderText: "Tus nuevos c\u00F3digos y enlaces a\u00FAn no est\u00E1n listos", emptyStateDescriptionText: "Comun\u00EDquese con nuestro equipo de soporte del programa para informarles que no tiene c\u00F3digos.", emptyStateImageUrl: "https://img.freepik.com/free-vector/hand-drawn-no-data-concept_52683-127829.jpg?t=st=1738890457~exp=1738894057~hmac=2f0f32c1f0fc051f47d772a4517e2e4c4f38af5069fb855edc96d8331d9d1329&w=826", demoData: {
15192
+ states: { ...demoData.states, noCodes: true },
15193
+ } },
15194
+ pagination("pagination"),
15195
+ shareCodes("shareCodes"),
15196
+ shareButtons("shareButtons")));
15197
+ };
15198
+ const Loading$7 = () => {
15199
+ return (index.h("sqm-referral-codes", { demoData: { states: { ...demoData.states, loading: true } } },
15200
+ pagination("pagination"),
15201
+ shareCodes("shareCodes"),
15202
+ shareButtons("shareButtons")));
15203
+ };
15204
+
15205
+ const ReferralCodes$1 = /*#__PURE__*/Object.freeze({
15206
+ __proto__: null,
15207
+ 'default': ReferralCodes_stories,
15208
+ ReferralCodes: ReferralCodes,
15209
+ WithPreviouslyCopiedCode: WithPreviouslyCopiedCode,
15210
+ Empty: Empty$3,
15211
+ EmptyWithCustomTextAndImage: EmptyWithCustomTextAndImage,
15212
+ Loading: Loading$7
15213
+ });
15214
+
15215
+ const BaseRegistrationForm_stories = {
15216
+ title: "Components/Microsite Base Registration",
15217
+ };
15218
+ const defaultProps$k = {
15219
+ states: {
15220
+ error: "",
15221
+ },
15222
+ callbacks: {
15223
+ handleEmailSubmit: () => console.log("Submit!"),
15224
+ },
15225
+ content: {
15226
+ pageLabel: "Register",
15227
+ requiredFieldErrorMessage: "Cannot be empty",
15228
+ invalidEmailErrorMessage: "Must be a valid email address",
15229
+ googleButton: index.h("sl-button", null, "Register with Google"),
15230
+ secondaryButton: (index.h("span", null,
15231
+ "Already have an account?",
15232
+ " ",
15233
+ index.h("sl-button", { padding: "0", style: { width: "60px" }, size: "large", type: "text" }, "Sign in"),
15234
+ " ")),
15235
+ },
15236
+ };
15237
+ const errorProps$9 = {
15238
+ ...defaultProps$k,
15239
+ states: {
15240
+ error: "Something went wrong. Please try again.",
15241
+ },
15242
+ };
15243
+ const Default$j = () => {
15244
+ return index.h(sqmBaseRegistrationFormView.BaseRegistrationFormView, Object.assign({}, defaultProps$k));
15245
+ };
15246
+ const EmailError = () => {
15247
+ return index.h(sqmBaseRegistrationFormView.BaseRegistrationFormView, Object.assign({}, errorProps$9));
15248
+ };
15249
+
15250
+ const BaseRegistrationForm = /*#__PURE__*/Object.freeze({
15251
+ __proto__: null,
15252
+ 'default': BaseRegistrationForm_stories,
15253
+ Default: Default$j,
15254
+ EmailError: EmailError
15255
+ });
15256
+
15257
+ const PortalRegistrationForm_stories = {
15258
+ title: "Components/Microsite Portal Register",
15259
+ };
15260
+ const defaultProps$l = {
15261
+ states: {
15262
+ error: "",
15263
+ loading: false,
15264
+ confirmPassword: true,
15265
+ hideInputs: false,
15266
+ loginPath: "/login",
15267
+ },
15268
+ callbacks: {
15269
+ submit: () => console.log("Submit!"),
15270
+ inputFunction: () => { },
15271
+ },
15272
+ refs: {
15273
+ formRef: {},
15274
+ },
15275
+ content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
15276
+ };
15277
+ const errorProps$a = {
15278
+ states: {
15279
+ error: "Something went wrong. Please try again.",
15280
+ loading: false,
15281
+ confirmPassword: true,
15282
+ hideInputs: false,
15283
+ loginPath: "/login",
15284
+ },
15285
+ callbacks: {
15286
+ submit: () => console.log("Submit!"),
15287
+ inputFunction: () => { },
15288
+ },
15289
+ refs: {
15290
+ formRef: {},
15291
+ },
15292
+ content: {
15293
+ pageLabel: "Register",
15294
+ confirmPasswordLabel: "Confirm Password",
15295
+ },
15296
+ };
15297
+ const loadingProps$7 = {
15298
+ states: {
15299
+ error: "",
15300
+ loading: true,
15301
+ confirmPassword: true,
15302
+ hideInputs: false,
15303
+ loginPath: "/login",
15304
+ },
15305
+ callbacks: {
15306
+ submit: () => console.log("Submit!"),
15307
+ inputFunction: () => { },
15308
+ },
15309
+ refs: {
15310
+ formRef: {},
15311
+ },
15312
+ content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
15313
+ };
15314
+ const slottedProps$1 = {
15315
+ states: {
15316
+ error: "",
15317
+ loading: false,
15318
+ confirmPassword: true,
15319
+ hideInputs: false,
15320
+ loginPath: "/login",
15321
+ },
15322
+ callbacks: {
15323
+ submit: () => console.log("Submit!"),
15324
+ inputFunction: () => { },
15325
+ },
15326
+ refs: {
15327
+ formRef: {},
15328
+ },
15329
+ content: {
15330
+ pageLabel: "Register",
15331
+ confirmPasswordLabel: "Confirm Password",
15332
+ formData: (index.h("div", null,
15333
+ index.h("sl-input", { style: { marginBottom: "var(--sl-spacing-x-large)" }, exportparts: "label: input-label, base: input-base", label: "Slotted Input", required: true }),
15334
+ index.h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
15335
+ },
15336
+ };
15337
+ const Default$k = () => index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$l));
15338
+ const RegisterWithError$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, errorProps$a)));
15339
+ const RegisterLoading$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, loadingProps$7)));
15340
+ const FieldsHidden$1 = () => {
15341
+ return (index.h("sqm-portal-register", { demoData: {
15342
+ states: {
15343
+ error: "",
15344
+ loading: true,
15345
+ registrationFormState: {},
15346
+ confirmPassword: true,
15347
+ hideInputs: true,
15348
+ loginPath: "/login",
15349
+ },
15350
+ } }));
15351
+ };
15352
+ const SlottedInputs$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, slottedProps$1)));
15353
+ const TermsAndConditions$3 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$l, { content: {
15354
+ ...defaultProps$l.content,
15355
+ terms: (index.h("p", null,
15356
+ "By signing up you agree to the",
15357
+ " ",
15358
+ index.h("a", { href: "https://example.com", target: "_blank" }, "Terms and Conditions"))),
15359
+ } })));
15360
+
15361
+ const PortalRegistrationForm = /*#__PURE__*/Object.freeze({
15362
+ __proto__: null,
15363
+ 'default': PortalRegistrationForm_stories,
15364
+ Default: Default$k,
15365
+ RegisterWithError: RegisterWithError$1,
15366
+ RegisterLoading: RegisterLoading$1,
15367
+ FieldsHidden: FieldsHidden$1,
15368
+ SlottedInputs: SlottedInputs$1,
15369
+ TermsAndConditions: TermsAndConditions$3
15370
+ });
15371
+
15372
+ const PortalGoogleRegistrationForm_stories = {
15373
+ title: "Components/Microsite Google Register",
15374
+ };
15375
+ const defaultProps$m = {
15376
+ states: {
15377
+ error: "",
15378
+ loading: false,
15379
+ confirmPassword: false,
15380
+ hideInputs: false,
15381
+ hideNameFields: false,
15382
+ loginPath: "/login",
15383
+ hidePasswords: true,
15384
+ registrationFormState: {
15385
+ initialData: {
15386
+ email: "testuser@example.com",
15387
+ },
15388
+ },
15389
+ },
15390
+ callbacks: {
15391
+ submit: () => console.log("Submit!"),
15392
+ inputFunction: () => { },
15393
+ },
15394
+ refs: {
15395
+ formRef: {},
15396
+ },
15397
+ content: {
15398
+ pageLabel: "Register",
15399
+ passwordField: null,
15400
+ formData: (index.h("div", null,
15401
+ " ",
15402
+ index.h("sl-input", { style: { marginBottom: "var(--sl-spacing-x-large)" }, exportparts: "label: input-label, base: input-base", label: "Slotted Input", required: true }),
15403
+ index.h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
15404
+ },
15405
+ };
15406
+ const errorProps$b = {
15407
+ ...defaultProps$m,
15408
+ states: {
15409
+ error: "Something went wrong. Please try again.",
15410
+ loading: false,
15411
+ confirmPassword: false,
15412
+ hideInputs: false,
15413
+ loginPath: "/login",
15414
+ hidePasswords: true,
15415
+ registrationFormState: {
15416
+ initialData: {
15417
+ email: "testuser@example.com",
15418
+ },
15419
+ },
15420
+ },
15421
+ };
15422
+ const loadingProps$8 = {
15423
+ ...defaultProps$m,
15424
+ states: {
15425
+ error: "",
15426
+ loading: true,
15427
+ hideInputs: false,
15428
+ loginPath: "/login",
15429
+ confirmPassword: false,
15430
+ hidePasswords: true,
15431
+ registrationFormState: {
15432
+ initialData: {
15433
+ email: "testuser@example.com",
15434
+ },
15435
+ },
15436
+ },
15437
+ };
15438
+ const Default$l = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$m)));
15439
+ const RegisterWithError$2 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, errorProps$b)));
15440
+ const RegisterLoading$2 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, loadingProps$8)));
15441
+ const TermsAndConditions$4 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$m, { content: {
15442
+ ...defaultProps$m.content,
15443
+ terms: (index.h("p", null,
15444
+ "By signing up you agree to the",
15445
+ " ",
15446
+ index.h("a", { href: "https://example.com", target: "_blank" }, "Terms and Conditions"))),
15447
+ } })));
15448
+
15449
+ const PortalGoogleRegistrationFormStories = /*#__PURE__*/Object.freeze({
15450
+ __proto__: null,
15451
+ 'default': PortalGoogleRegistrationForm_stories,
15452
+ Default: Default$l,
15453
+ RegisterWithError: RegisterWithError$2,
15454
+ RegisterLoading: RegisterLoading$2,
15455
+ TermsAndConditions: TermsAndConditions$4
15456
+ });
15457
+
15135
15458
  /**
15136
15459
  *
15137
15460
  * Themes
@@ -15144,7 +15467,7 @@ const UseInvoiceTableCells = /*#__PURE__*/Object.freeze({
15144
15467
  *
15145
15468
  */
15146
15469
  //
15147
- const Default$k = `
15470
+ const Default$m = `
15148
15471
  // No CSS
15149
15472
  `;
15150
15473
  const Orangey = `
@@ -15178,7 +15501,7 @@ const Klip = `
15178
15501
 
15179
15502
  const Themes = /*#__PURE__*/Object.freeze({
15180
15503
  __proto__: null,
15181
- Default: Default$k,
15504
+ Default: Default$m,
15182
15505
  Orangey: Orangey,
15183
15506
  Netflix: Netflix,
15184
15507
  SaaSquatchCorporate: SaaSquatchCorporate,
@@ -17777,6 +18100,7 @@ const stories = [
17777
18100
  InvoiceTableCells,
17778
18101
  UseInvoiceTableCells,
17779
18102
  ShareButton,
18103
+ Pagination,
17780
18104
  ShareLink,
17781
18105
  BigStat,
17782
18106
  Leaderboard,
@@ -17822,7 +18146,6 @@ const stories = [
17822
18146
  ReferralIframe$1,
17823
18147
  NameFields$1,
17824
18148
  CheckboxField,
17825
- MarketingEmailsCheckbox,
17826
18149
  DropdownField,
17827
18150
  InputField,
17828
18151
  RewardExchangeList,
@@ -17846,6 +18169,8 @@ const stories = [
17846
18169
  Tabs,
17847
18170
  ShareCode$1,
17848
18171
  CouponCode$1,
18172
+ ReferralCode$1,
18173
+ ReferralCodes$1,
17849
18174
  LogoutCurrentUser,
17850
18175
  LinkButton,
17851
18176
  EmailRegistration,
@@ -17856,7 +18181,9 @@ const stories = [
17856
18181
  TaxFormSlots,
17857
18182
  PayoutDetailsCard,
17858
18183
  BankingInfoForm,
17859
- NewPortalRegistrationForm,
18184
+ BaseRegistrationForm,
18185
+ PortalRegistrationForm,
18186
+ PortalGoogleRegistrationFormStories,
17860
18187
  ];
17861
18188
  const StencilStorybook = class {
17862
18189
  constructor(hostRef) {