@saasquatch/mint-components 1.12.1-4 → 1.13.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. package/dist/cjs/{GenericTableView-80d7642e.js → GenericTableView-7ef786c3.js} +2 -2
  2. package/dist/cjs/{ShadowViewAddon-67836b9c.js → ShadowViewAddon-2aa1bd99.js} +209 -246
  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_38.cjs.entry.js} +92 -107
  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-navigation-sidebar-item-view-a125ec5f.js → sqm-navigation-sidebar-item-view-38519acf.js} +4 -4
  35. package/dist/cjs/sqm-navigation-sidebar-item.cjs.entry.js +7 -7
  36. package/dist/cjs/{sqm-navigation-sidebar-view-921704fb.js → sqm-navigation-sidebar-view-37209a17.js} +1 -1
  37. package/dist/cjs/sqm-navigation-sidebar.cjs.entry.js +6 -6
  38. package/dist/cjs/sqm-pagination_3.cjs.entry.js +392 -0
  39. package/dist/cjs/sqm-password-field.cjs.entry.js +6 -6
  40. package/dist/cjs/sqm-popup-container.cjs.entry.js +6 -6
  41. package/dist/cjs/{sqm-portal-container-view-990a85a3.js → sqm-portal-container-view-9a36f5ed.js} +1 -1
  42. package/dist/cjs/{sqm-portal-email-verification-view-292b5bf4.js → sqm-portal-email-verification-view-6e1e80e7.js} +4 -4
  43. package/dist/cjs/sqm-portal-email-verification.cjs.entry.js +12 -12
  44. package/dist/cjs/{sqm-portal-forgot-password-view-969c49ed.js → sqm-portal-forgot-password-view-97903679.js} +3 -3
  45. package/dist/cjs/sqm-portal-forgot-password.cjs.entry.js +9 -9
  46. package/dist/cjs/sqm-portal-google-registration-form.cjs.entry.js +306 -0
  47. package/dist/cjs/sqm-portal-logout.cjs.entry.js +4 -4
  48. package/dist/cjs/{sqm-portal-profile-view-fde54e35.js → sqm-portal-profile-view-f4489585.js} +3 -3
  49. package/dist/cjs/sqm-portal-profile.cjs.entry.js +11 -11
  50. package/dist/cjs/sqm-portal-protected-route.cjs.entry.js +7 -7
  51. package/dist/cjs/{sqm-portal-registration-form-view-621348a6.js → sqm-portal-registration-form-view-add61eb6.js} +17 -16
  52. package/dist/cjs/sqm-portal-registration-form.cjs.entry.js +12 -222
  53. package/dist/cjs/{sqm-portal-reset-password-view-96f329ed.js → sqm-portal-reset-password-view-0ed5419e.js} +3 -3
  54. package/dist/cjs/sqm-portal-reset-password.cjs.entry.js +12 -12
  55. package/dist/cjs/{sqm-portal-verify-email-view-7ffcc0d4.js → sqm-portal-verify-email-view-cd2c3086.js} +3 -3
  56. package/dist/cjs/sqm-portal-verify-email.cjs.entry.js +12 -12
  57. package/dist/cjs/sqm-referral-table_11.cjs.entry.js +15 -13
  58. package/dist/cjs/sqm-referred-registration.cjs.entry.js +7 -7
  59. package/dist/cjs/sqm-rewards-table-customer-note-cell.cjs.entry.js +3 -3
  60. package/dist/cjs/sqm-rewards-table-customer-note-column.cjs.entry.js +4 -4
  61. package/dist/cjs/sqm-rewards-table_9.cjs.entry.js +17 -17
  62. package/dist/cjs/sqm-route.cjs.entry.js +1 -1
  63. package/dist/cjs/sqm-stencilbook.cjs.entry.js +752 -411
  64. package/dist/cjs/sqm-tab.cjs.entry.js +4 -4
  65. package/dist/cjs/sqm-tabs.cjs.entry.js +6 -6
  66. package/dist/cjs/{sqm-text-span-view-e1cd9bd3.js → sqm-text-span-view-a22f50aa.js} +1 -1
  67. package/dist/cjs/sqm-text-span.cjs.entry.js +3 -3
  68. package/dist/cjs/{stencil-hooks.module-72742a0b.js → stencil-hooks.module-ece1ee46.js} +1 -1
  69. package/dist/cjs/{useChildElements-e0d44916.js → useChildElements-438cf387.js} +3 -3
  70. package/dist/cjs/{useInstantAccessRegistration-bbe746d1.js → useInstantAccessRegistration-7d91867a.js} +4 -4
  71. package/dist/cjs/usePortalRegistrationForm-0d4fbcde.js +213 -0
  72. package/dist/cjs/{useReferralTable-a76adb0d.js → useReferralTable-6b4920f9.js} +11 -11
  73. package/dist/cjs/{useRegistrationFormState-876ed65d.js → useRegistrationFormState-5911d016.js} +3 -3
  74. package/dist/cjs/{utilities-cec9dd36.js → utilities-27e9535b.js} +2 -2
  75. package/dist/collection/collection-manifest.json +13 -2
  76. package/dist/collection/components/sqm-base-registration/BaseRegistrationForm.stories.js +25 -0
  77. package/dist/collection/components/sqm-base-registration/sqm-base-registration-form-view.js +63 -0
  78. package/dist/collection/components/sqm-checkbox-field/CheckboxField.stories.js +1 -0
  79. package/dist/collection/components/sqm-checkbox-field/sqm-checkbox-field-view.js +16 -7
  80. package/dist/collection/components/sqm-checkbox-field/sqm-checkbox-field.js +6 -6
  81. package/dist/collection/components/sqm-coupon-code/sqm-coupon-code.js +1 -1
  82. package/dist/collection/components/sqm-empty/sqm-empty.js +10 -2
  83. package/dist/collection/components/sqm-google-sign-in/sqm-google-sign-in.js +78 -0
  84. package/dist/collection/components/sqm-logout-current-user/sqm-logout-current-user.js +1 -1
  85. package/dist/collection/components/sqm-pagination/Pagination.stories.js +12 -0
  86. package/dist/collection/components/sqm-pagination/sqm-pagination-view.js +32 -0
  87. package/dist/collection/components/sqm-pagination/sqm-pagination.js +112 -0
  88. package/dist/collection/components/sqm-pagination/usePagination.js +29 -0
  89. package/dist/collection/components/sqm-portal-container/sqm-portal-container.js +0 -4
  90. package/dist/collection/components/sqm-portal-google-registration-form/PortalGoogleRegistrationForm.stories.js +112 -0
  91. package/dist/collection/components/sqm-portal-google-registration-form/small-views/RegistrationFieldsView.js +86 -0
  92. package/dist/collection/components/sqm-portal-google-registration-form/sqm-portal-google-registration-form.js +851 -0
  93. package/dist/collection/components/sqm-portal-google-registration-form/usePortalGoogleRegistrationForm.js +70 -0
  94. package/dist/collection/components/sqm-portal-login/PortalLogin.stories.js +14 -3
  95. package/dist/collection/components/sqm-portal-login/sqm-portal-login-view.js +9 -1
  96. package/dist/collection/components/sqm-portal-login/sqm-portal-login.js +81 -3
  97. package/dist/collection/components/sqm-portal-register/sqm-portal-register-view.js +6 -3
  98. package/dist/collection/components/sqm-portal-registration-form/PortalRegistrationForm.stories.js +1 -5
  99. package/dist/collection/components/sqm-portal-registration-form/sqm-portal-registration-form-view.js +14 -13
  100. package/dist/collection/components/sqm-portal-registration-form/sqm-portal-registration-form.js +2 -3
  101. package/dist/collection/components/sqm-portal-registration-form/usePortalRegistrationForm.js +0 -6
  102. package/dist/collection/components/sqm-referral-card/ReferralCard.stories.js +20 -0
  103. package/dist/collection/components/sqm-referral-code/ReferralCode.stories.js +60 -0
  104. package/dist/collection/components/sqm-referral-code/sqm-referral-code.js +317 -0
  105. package/dist/collection/components/sqm-referral-code/useReferralCode.js +63 -0
  106. package/dist/collection/components/sqm-referral-codes/ReferralCodes.stories.js +65 -0
  107. package/dist/collection/components/sqm-referral-codes/sqm-referral-codes-view.js +69 -0
  108. package/dist/collection/components/sqm-referral-codes/sqm-referral-codes.js +219 -0
  109. package/dist/collection/components/sqm-referral-codes/useReferralCodes.js +131 -0
  110. package/dist/collection/components/sqm-referral-table/cells/sqm-referral-table-rewards-cell.js +6 -2
  111. package/dist/collection/components/sqm-share-button/useShareButton.js +29 -18
  112. package/dist/collection/components/sqm-share-code/sqm-share-code.js +1 -1
  113. package/dist/collection/components/sqm-share-link/sqm-share-link.js +1 -1
  114. package/dist/collection/components/sqm-share-link/useShareLink.js +11 -4
  115. package/dist/collection/components/sqm-stencilbook/sqm-stencilbook.js +12 -4
  116. package/dist/collection/components/views/copy-text-view.js +18 -3
  117. package/dist/collection/global/mixins.js +0 -1
  118. package/dist/collection/stories/Widget.stories.js +5 -0
  119. package/dist/esm/{GenericTableView-d59d8ab4.js → GenericTableView-6aa9fac9.js} +2 -2
  120. package/dist/esm/{ShadowViewAddon-1e90c3f1.js → ShadowViewAddon-af23bc54.js} +208 -244
  121. package/dist/esm/copy-text-view-61eebf5d.js +225 -0
  122. package/dist/esm/{email-registration-view-a89a88bf.js → email-registration-view-6870d230.js} +2 -2
  123. package/dist/esm/{global-04c7d3b5.js → global-3611a2b7.js} +3 -3
  124. package/dist/esm/{index-17b4da69.js → index-60f16d0a.js} +15 -1
  125. package/dist/esm/{index.module-def4aec5.js → index.module-f3d96fbb.js} +41 -4
  126. package/dist/esm/loader.js +5 -5
  127. package/dist/esm/{luxon-7600be8d.js → luxon-9b1f9912.js} +1 -1
  128. package/dist/esm/mint-components.js +5 -5
  129. package/dist/esm/{mixins-f60a614c.js → mixins-83f90fa1.js} +0 -1
  130. package/dist/esm/{mockRewardData-0eb6e778.js → mockRewardData-8b3afd15.js} +1 -1
  131. package/dist/esm/raisins-plop-target.entry.js +1 -1
  132. package/dist/esm/{re-render-12fd274a.js → re-render-3b630de2.js} +5 -5
  133. package/dist/esm/{sqm-asset-card-view-9d93fbdd.js → sqm-asset-card-view-2157b61f.js} +1 -1
  134. package/dist/esm/sqm-asset-card.entry.js +4 -4
  135. package/dist/esm/sqm-banking-info-form_16.entry.js +67 -67
  136. package/dist/esm/sqm-base-registration-form-view-dd481f19.js +66 -0
  137. package/dist/esm/{sqm-big-stat_39.entry.js → sqm-big-stat_38.entry.js} +91 -105
  138. package/dist/esm/{sqm-close-button-view-dc65b4e3.js → sqm-close-button-view-0c0bfff8.js} +2 -2
  139. package/dist/esm/sqm-close-button.entry.js +5 -5
  140. package/dist/esm/sqm-context-router.entry.js +4 -4
  141. package/dist/esm/sqm-empty_4.entry.js +11 -7
  142. package/dist/esm/sqm-form-message.entry.js +2 -2
  143. package/dist/esm/sqm-google-sign-in.entry.js +41 -0
  144. package/dist/esm/sqm-graphql-client-provider.entry.js +7 -7
  145. package/dist/esm/sqm-header-logo.entry.js +2 -2
  146. package/dist/esm/sqm-instant-access-registration.entry.js +7 -7
  147. package/dist/esm/{sqm-invoice-table-view-6e13a323.js → sqm-invoice-table-view-b8240dc6.js} +2 -2
  148. package/dist/esm/{sqm-leaderboard-rank-view-10657658.js → sqm-leaderboard-rank-view-7cd0de83.js} +1 -1
  149. package/dist/esm/sqm-leaderboard-rank.entry.js +8 -8
  150. package/dist/esm/{sqm-logout-current-user-view-2c6122cd.js → sqm-logout-current-user-view-02e9f508.js} +1 -1
  151. package/dist/esm/sqm-logout-current-user.entry.js +7 -7
  152. package/dist/esm/{sqm-navigation-sidebar-item-view-60ef06cc.js → sqm-navigation-sidebar-item-view-a4e4edb6.js} +4 -4
  153. package/dist/esm/sqm-navigation-sidebar-item.entry.js +7 -7
  154. package/dist/esm/{sqm-navigation-sidebar-view-0312e073.js → sqm-navigation-sidebar-view-ce55d74d.js} +1 -1
  155. package/dist/esm/sqm-navigation-sidebar.entry.js +6 -6
  156. package/dist/esm/sqm-pagination_3.entry.js +386 -0
  157. package/dist/esm/sqm-password-field.entry.js +6 -6
  158. package/dist/esm/sqm-popup-container.entry.js +6 -6
  159. package/dist/esm/{sqm-portal-container-view-6c582684.js → sqm-portal-container-view-c3be4b88.js} +1 -1
  160. package/dist/esm/{sqm-portal-email-verification-view-4307c992.js → sqm-portal-email-verification-view-d500dd01.js} +4 -4
  161. package/dist/esm/sqm-portal-email-verification.entry.js +12 -12
  162. package/dist/esm/{sqm-portal-forgot-password-view-c2ed8fed.js → sqm-portal-forgot-password-view-4f6c89a7.js} +3 -3
  163. package/dist/esm/sqm-portal-forgot-password.entry.js +9 -9
  164. package/dist/esm/sqm-portal-google-registration-form.entry.js +302 -0
  165. package/dist/esm/sqm-portal-logout.entry.js +4 -4
  166. package/dist/esm/{sqm-portal-profile-view-ffe955c8.js → sqm-portal-profile-view-2997f902.js} +3 -3
  167. package/dist/esm/sqm-portal-profile.entry.js +11 -11
  168. package/dist/esm/sqm-portal-protected-route.entry.js +7 -7
  169. package/dist/esm/sqm-portal-registration-form-view-20b9c9bc.js +84 -0
  170. package/dist/esm/sqm-portal-registration-form.entry.js +11 -221
  171. package/dist/esm/{sqm-portal-reset-password-view-79a85e02.js → sqm-portal-reset-password-view-e29f1842.js} +3 -3
  172. package/dist/esm/sqm-portal-reset-password.entry.js +12 -12
  173. package/dist/esm/{sqm-portal-verify-email-view-d7ea2c56.js → sqm-portal-verify-email-view-d5dcf5c5.js} +3 -3
  174. package/dist/esm/sqm-portal-verify-email.entry.js +12 -12
  175. package/dist/esm/sqm-referral-table_11.entry.js +15 -13
  176. package/dist/esm/sqm-referred-registration.entry.js +7 -7
  177. package/dist/esm/sqm-rewards-table-customer-note-cell.entry.js +3 -3
  178. package/dist/esm/sqm-rewards-table-customer-note-column.entry.js +4 -4
  179. package/dist/esm/sqm-rewards-table_9.entry.js +17 -17
  180. package/dist/esm/sqm-route.entry.js +1 -1
  181. package/dist/esm/sqm-stencilbook.entry.js +739 -398
  182. package/dist/esm/sqm-tab.entry.js +4 -4
  183. package/dist/esm/sqm-tabs.entry.js +6 -6
  184. package/dist/esm/{sqm-text-span-view-8d140661.js → sqm-text-span-view-d1b54710.js} +1 -1
  185. package/dist/esm/sqm-text-span.entry.js +3 -3
  186. package/dist/esm/{stencil-hooks.module-ac12ca1c.js → stencil-hooks.module-e20edc0b.js} +1 -1
  187. package/dist/esm/{useChildElements-32e1bda1.js → useChildElements-d1d3fedd.js} +3 -3
  188. package/dist/esm/{useInstantAccessRegistration-46b89952.js → useInstantAccessRegistration-c5d80a2e.js} +4 -4
  189. package/dist/esm/usePortalRegistrationForm-e8ec6d4e.js +211 -0
  190. package/dist/esm/{useReferralTable-f4de0650.js → useReferralTable-fbcfc2a7.js} +11 -11
  191. package/dist/esm/{useRegistrationFormState-9fc1ac80.js → useRegistrationFormState-33f9cb24.js} +3 -3
  192. package/dist/esm/{utilities-3f5bba22.js → utilities-33996ce7.js} +2 -2
  193. package/dist/esm-es5/{GenericTableView-d59d8ab4.js → GenericTableView-6aa9fac9.js} +1 -1
  194. package/dist/esm-es5/ShadowViewAddon-af23bc54.js +1 -0
  195. package/dist/esm-es5/copy-text-view-61eebf5d.js +1 -0
  196. package/dist/esm-es5/{email-registration-view-a89a88bf.js → email-registration-view-6870d230.js} +1 -1
  197. package/dist/esm-es5/{global-04c7d3b5.js → global-3611a2b7.js} +2 -2
  198. package/dist/esm-es5/{index-17b4da69.js → index-60f16d0a.js} +1 -1
  199. package/dist/esm-es5/index.module-f3d96fbb.js +1 -0
  200. package/dist/esm-es5/loader.js +1 -1
  201. package/dist/esm-es5/{luxon-7600be8d.js → luxon-9b1f9912.js} +1 -1
  202. package/dist/esm-es5/mint-components.js +1 -1
  203. package/dist/esm-es5/{mixins-f60a614c.js → mixins-83f90fa1.js} +1 -1
  204. package/dist/esm-es5/{mockRewardData-0eb6e778.js → mockRewardData-8b3afd15.js} +1 -1
  205. package/dist/esm-es5/raisins-plop-target.entry.js +1 -1
  206. package/dist/esm-es5/{re-render-12fd274a.js → re-render-3b630de2.js} +1 -1
  207. package/dist/esm-es5/{sqm-asset-card-view-9d93fbdd.js → sqm-asset-card-view-2157b61f.js} +1 -1
  208. package/dist/esm-es5/sqm-asset-card.entry.js +1 -1
  209. package/dist/esm-es5/sqm-banking-info-form_16.entry.js +1 -1
  210. package/dist/esm-es5/sqm-base-registration-form-view-dd481f19.js +1 -0
  211. package/dist/esm-es5/sqm-big-stat_38.entry.js +1 -0
  212. package/dist/esm-es5/{sqm-close-button-view-dc65b4e3.js → sqm-close-button-view-0c0bfff8.js} +1 -1
  213. package/dist/esm-es5/sqm-close-button.entry.js +1 -1
  214. package/dist/esm-es5/sqm-context-router.entry.js +1 -1
  215. package/dist/esm-es5/sqm-empty_4.entry.js +1 -1
  216. package/dist/esm-es5/sqm-form-message.entry.js +1 -1
  217. package/dist/esm-es5/sqm-google-sign-in.entry.js +1 -0
  218. package/dist/esm-es5/sqm-graphql-client-provider.entry.js +1 -1
  219. package/dist/esm-es5/sqm-header-logo.entry.js +1 -1
  220. package/dist/esm-es5/sqm-instant-access-registration.entry.js +1 -1
  221. package/dist/esm-es5/{sqm-invoice-table-view-6e13a323.js → sqm-invoice-table-view-b8240dc6.js} +1 -1
  222. package/dist/esm-es5/sqm-leaderboard-rank-view-7cd0de83.js +1 -0
  223. package/dist/esm-es5/sqm-leaderboard-rank.entry.js +1 -1
  224. package/dist/esm-es5/{sqm-logout-current-user-view-2c6122cd.js → sqm-logout-current-user-view-02e9f508.js} +1 -1
  225. package/dist/esm-es5/sqm-logout-current-user.entry.js +1 -1
  226. package/dist/esm-es5/sqm-navigation-sidebar-item-view-a4e4edb6.js +1 -0
  227. package/dist/esm-es5/sqm-navigation-sidebar-item.entry.js +1 -1
  228. package/dist/esm-es5/{sqm-navigation-sidebar-view-0312e073.js → sqm-navigation-sidebar-view-ce55d74d.js} +1 -1
  229. package/dist/esm-es5/sqm-navigation-sidebar.entry.js +1 -1
  230. package/dist/esm-es5/sqm-pagination_3.entry.js +1 -0
  231. package/dist/esm-es5/sqm-password-field.entry.js +1 -1
  232. package/dist/esm-es5/sqm-popup-container.entry.js +1 -1
  233. package/dist/esm-es5/{sqm-portal-container-view-6c582684.js → sqm-portal-container-view-c3be4b88.js} +1 -1
  234. package/dist/esm-es5/{sqm-portal-email-verification-view-4307c992.js → sqm-portal-email-verification-view-d500dd01.js} +1 -1
  235. package/dist/esm-es5/sqm-portal-email-verification.entry.js +1 -1
  236. package/dist/esm-es5/{sqm-portal-forgot-password-view-c2ed8fed.js → sqm-portal-forgot-password-view-4f6c89a7.js} +1 -1
  237. package/dist/esm-es5/sqm-portal-forgot-password.entry.js +1 -1
  238. package/dist/esm-es5/sqm-portal-google-registration-form.entry.js +1 -0
  239. package/dist/esm-es5/sqm-portal-logout.entry.js +1 -1
  240. package/dist/esm-es5/{sqm-portal-profile-view-ffe955c8.js → sqm-portal-profile-view-2997f902.js} +1 -1
  241. package/dist/esm-es5/sqm-portal-profile.entry.js +1 -1
  242. package/dist/esm-es5/sqm-portal-protected-route.entry.js +1 -1
  243. package/dist/esm-es5/sqm-portal-registration-form-view-20b9c9bc.js +1 -0
  244. package/dist/esm-es5/sqm-portal-registration-form.entry.js +1 -1
  245. package/dist/esm-es5/{sqm-portal-reset-password-view-79a85e02.js → sqm-portal-reset-password-view-e29f1842.js} +1 -1
  246. package/dist/esm-es5/sqm-portal-reset-password.entry.js +1 -1
  247. package/dist/esm-es5/{sqm-portal-verify-email-view-d7ea2c56.js → sqm-portal-verify-email-view-d5dcf5c5.js} +1 -1
  248. package/dist/esm-es5/sqm-portal-verify-email.entry.js +1 -1
  249. package/dist/esm-es5/sqm-referral-table_11.entry.js +1 -1
  250. package/dist/esm-es5/sqm-referred-registration.entry.js +1 -1
  251. package/dist/esm-es5/sqm-rewards-table-customer-note-cell.entry.js +1 -1
  252. package/dist/esm-es5/sqm-rewards-table-customer-note-column.entry.js +1 -1
  253. package/dist/esm-es5/sqm-rewards-table_9.entry.js +1 -1
  254. package/dist/esm-es5/sqm-route.entry.js +1 -1
  255. package/dist/esm-es5/sqm-stencilbook.entry.js +1 -1
  256. package/dist/esm-es5/sqm-tab.entry.js +1 -1
  257. package/dist/esm-es5/sqm-tabs.entry.js +1 -1
  258. package/dist/esm-es5/{sqm-text-span-view-8d140661.js → sqm-text-span-view-d1b54710.js} +1 -1
  259. package/dist/esm-es5/sqm-text-span.entry.js +1 -1
  260. package/dist/esm-es5/{stencil-hooks.module-ac12ca1c.js → stencil-hooks.module-e20edc0b.js} +1 -1
  261. package/dist/esm-es5/useChildElements-d1d3fedd.js +1 -0
  262. package/dist/esm-es5/useInstantAccessRegistration-c5d80a2e.js +1 -0
  263. package/dist/esm-es5/usePortalRegistrationForm-e8ec6d4e.js +1 -0
  264. package/dist/esm-es5/{useReferralTable-f4de0650.js → useReferralTable-fbcfc2a7.js} +1 -1
  265. package/dist/esm-es5/useRegistrationFormState-33f9cb24.js +1 -0
  266. package/dist/esm-es5/{utilities-3f5bba22.js → utilities-33996ce7.js} +1 -1
  267. package/dist/mint-components/mint-components.esm.js +1 -1
  268. package/dist/mint-components/mint-components.js +1 -1
  269. package/dist/mint-components/p-003fb0ae.system.js +1 -0
  270. package/dist/mint-components/{p-56f14840.entry.js → p-070fa30d.entry.js} +1 -1
  271. package/dist/mint-components/p-0725d1a7.system.entry.js +1 -0
  272. package/dist/mint-components/{p-1c857edb.entry.js → p-0954e95d.entry.js} +2 -2
  273. package/dist/mint-components/{p-6afb4f48.system.entry.js → p-0aa76ad0.system.entry.js} +1 -1
  274. package/dist/mint-components/{p-c5d2e4ba.js → p-0b6200b3.js} +1 -1
  275. package/dist/mint-components/p-0c4c5874.js +1 -0
  276. package/dist/mint-components/{p-cf690d55.system.entry.js → p-0e89ac7f.system.entry.js} +1 -1
  277. package/dist/mint-components/{p-8679ed9f.system.entry.js → p-0fd20804.system.entry.js} +1 -1
  278. package/dist/mint-components/p-0fe8fbe1.system.entry.js +1 -0
  279. package/dist/mint-components/{p-251e7567.js → p-12d27b9b.js} +1 -1
  280. package/dist/mint-components/p-13fe7290.js +1 -0
  281. package/dist/mint-components/{p-7731f793.system.entry.js → p-14dc52dc.system.entry.js} +1 -1
  282. package/dist/mint-components/{p-c84659a3.system.js → p-15b2063c.system.js} +1 -1
  283. package/dist/mint-components/{p-021a735d.entry.js → p-1739dfb8.entry.js} +1 -1
  284. package/dist/mint-components/p-192689fc.entry.js +1 -0
  285. package/dist/mint-components/{p-6b5e355c.system.js → p-1ab3f305.system.js} +1 -1
  286. package/dist/mint-components/{p-a9050eb0.entry.js → p-1d58a8ff.entry.js} +1 -1
  287. package/dist/mint-components/{p-4d233cd4.js → p-22110634.js} +1 -1
  288. package/dist/mint-components/{p-e546347e.system.js → p-222fa722.system.js} +1 -1
  289. package/dist/mint-components/{p-5f1c4160.system.entry.js → p-273ad080.system.entry.js} +1 -1
  290. package/dist/mint-components/p-27f281f4.system.js +1 -0
  291. package/dist/mint-components/{p-509e29e6.js → p-2dff4fb2.js} +1 -1
  292. package/dist/mint-components/{p-01cfff8a.system.entry.js → p-38b8050c.system.entry.js} +1 -1
  293. package/dist/mint-components/p-38bd81d1.system.js +1 -0
  294. package/dist/mint-components/{p-370a1a73.system.js → p-3ae32130.system.js} +1 -1
  295. package/dist/mint-components/{p-88aac6a9.system.entry.js → p-3b923175.system.entry.js} +1 -1
  296. package/dist/mint-components/{p-4edde470.entry.js → p-3c00282b.entry.js} +1 -1
  297. package/dist/mint-components/p-3c04f8d1.system.js +1 -0
  298. package/dist/mint-components/p-3d4978ca.system.entry.js +1 -0
  299. package/dist/mint-components/{p-4ea58025.system.entry.js → p-3dbcd42a.system.entry.js} +1 -1
  300. package/dist/mint-components/{p-3223ba7b.entry.js → p-3dc9a448.entry.js} +1 -1
  301. package/dist/mint-components/p-3e8e2f37.system.js +1 -0
  302. package/dist/mint-components/p-3f3cd0b9.system.entry.js +1 -0
  303. package/dist/mint-components/{p-b6fc1227.system.entry.js → p-44c4a54f.system.entry.js} +1 -1
  304. package/dist/mint-components/p-455a3f54.system.entry.js +1 -0
  305. package/dist/mint-components/p-4692d45d.system.entry.js +1 -0
  306. package/dist/mint-components/p-478e8baa.system.js +1 -0
  307. package/dist/mint-components/p-500a2bff.entry.js +13 -0
  308. package/dist/mint-components/{p-3ed71bef.system.js → p-5057380a.system.js} +1 -1
  309. package/dist/mint-components/{p-e3e16c36.js → p-5309ebf3.js} +1 -1
  310. package/dist/mint-components/p-53238aee.js +1 -0
  311. package/dist/mint-components/{p-2a414b2e.system.js → p-58bcece7.system.js} +1 -1
  312. package/dist/mint-components/{p-44787d6e.system.js → p-5b6cf6cd.system.js} +1 -1
  313. package/dist/mint-components/{p-bb00db59.js → p-5c714029.js} +1 -1
  314. package/dist/mint-components/p-5dd51c6f.entry.js +9 -0
  315. package/dist/mint-components/p-5e61bdfd.entry.js +1 -0
  316. package/dist/mint-components/{p-ec41d6a4.entry.js → p-5fb1bcb5.entry.js} +6 -6
  317. package/dist/mint-components/p-6465b781.js +1 -0
  318. package/dist/mint-components/p-64af8fa4.system.js +1 -0
  319. package/dist/mint-components/p-6673a331.system.js +1 -0
  320. package/dist/mint-components/{p-2ee2ebba.js → p-682450a8.js} +2 -2
  321. package/dist/mint-components/{p-41a11a7f.js → p-683cfd07.js} +1 -1
  322. package/dist/mint-components/{p-7d5e0645.system.js → p-697d6e54.system.js} +1 -1
  323. package/dist/mint-components/p-6a95e6b7.js +52 -0
  324. package/dist/mint-components/{p-6cef104b.entry.js → p-6ac9d2cf.entry.js} +1 -1
  325. package/dist/mint-components/p-7027b14d.js +1 -0
  326. package/dist/mint-components/p-705de128.js +13 -0
  327. package/dist/mint-components/{p-be4b748a.system.entry.js → p-70eafbbd.system.entry.js} +1 -1
  328. package/dist/mint-components/{p-35d84041.system.entry.js → p-7141d536.system.entry.js} +1 -1
  329. package/dist/mint-components/{p-ce621bcc.js → p-71d6b762.js} +1 -1
  330. package/dist/mint-components/p-74d5d3d1.entry.js +1 -0
  331. package/dist/mint-components/{p-fbdf0738.entry.js → p-75956e50.entry.js} +1 -1
  332. package/dist/mint-components/p-76769baa.entry.js +223 -0
  333. package/dist/mint-components/{p-f0806232.system.entry.js → p-7bc9308c.system.entry.js} +1 -1
  334. package/dist/mint-components/{p-a1dba9a1.system.entry.js → p-7d2d59ec.system.entry.js} +1 -1
  335. package/dist/mint-components/{p-e8dde8f4.system.js → p-7e3ada1b.system.js} +1 -1
  336. package/dist/mint-components/p-7ef0cb0a.system.js +1 -0
  337. package/dist/mint-components/p-7facf5cd.system.entry.js +1 -0
  338. package/dist/mint-components/p-823f61da.entry.js +1 -0
  339. package/dist/mint-components/p-8329e1fa.system.js +1 -0
  340. package/dist/mint-components/p-8525931d.system.entry.js +1 -0
  341. package/dist/mint-components/{p-ce5afa40.entry.js → p-863340dc.entry.js} +1 -1
  342. package/dist/mint-components/{p-178d2d2e.entry.js → p-8799b28f.entry.js} +1 -1
  343. package/dist/mint-components/{p-79da7f18.js → p-88197cfd.js} +1 -1
  344. package/dist/mint-components/p-8a0a87e7.system.entry.js +1 -0
  345. package/dist/mint-components/{p-c1a47137.system.entry.js → p-8f705bea.system.entry.js} +1 -1
  346. package/dist/mint-components/p-8fb2af73.system.js +1 -0
  347. package/dist/mint-components/{p-02be1a88.js → p-91521e9d.js} +1 -1
  348. package/dist/mint-components/p-920b48ad.system.entry.js +1 -0
  349. package/dist/mint-components/p-9259fd35.system.entry.js +1 -0
  350. package/dist/mint-components/p-93124bdb.entry.js +1 -0
  351. package/dist/mint-components/p-944918d9.entry.js +1 -0
  352. package/dist/mint-components/{p-c8610d0c.js → p-9716a83b.js} +1 -1
  353. package/dist/mint-components/{p-ff17b3a4.system.js → p-989fdd2e.system.js} +1 -1
  354. package/dist/mint-components/p-9c7a031a.js +1 -0
  355. package/dist/mint-components/{p-f3053c61.js → p-9d078f60.js} +1 -1
  356. package/dist/mint-components/{p-1dd69917.system.entry.js → p-9d954277.system.entry.js} +1 -1
  357. package/dist/mint-components/{p-3036cf58.system.js → p-9e4e3d5f.system.js} +1 -1
  358. package/dist/mint-components/{p-c7fd9e16.js → p-9fff2218.js} +1 -1
  359. package/dist/mint-components/p-a1cb66c0.system.js +1 -0
  360. package/dist/mint-components/p-a2a3d9dc.entry.js +1 -0
  361. package/dist/mint-components/{p-ed095674.system.js → p-a631db44.system.js} +1 -1
  362. package/dist/mint-components/{p-59fe4ad1.system.js → p-a67e8ef4.system.js} +1 -1
  363. package/dist/mint-components/p-a8bf33fc.js +1 -0
  364. package/dist/mint-components/p-a9166b6a.entry.js +1 -0
  365. package/dist/mint-components/{p-fb93c962.js → p-aa5446c1.js} +1 -1
  366. package/dist/mint-components/p-ad00a797.system.entry.js +1 -0
  367. package/dist/mint-components/{p-4502ed11.system.entry.js → p-adc14a77.system.entry.js} +1 -1
  368. package/dist/mint-components/p-aed99250.js +391 -0
  369. package/dist/mint-components/{p-2dd67762.entry.js → p-aeea67a3.entry.js} +1 -1
  370. package/dist/mint-components/{p-a7c2ced2.system.entry.js → p-b043693d.system.entry.js} +1 -1
  371. package/dist/mint-components/{p-5d0c9424.js → p-b11f43ee.js} +1 -1
  372. package/dist/mint-components/{p-1b9e6fc6.js → p-b33381a7.js} +1 -1
  373. package/dist/mint-components/{p-639d3dd3.entry.js → p-b3499953.entry.js} +1 -1
  374. package/dist/mint-components/{p-eaada4da.js → p-b402df18.js} +1 -1
  375. package/dist/mint-components/{p-fd2c5407.js → p-b619a5e0.js} +1 -1
  376. package/dist/mint-components/p-b667d890.system.entry.js +1 -0
  377. package/dist/mint-components/p-b6a4ce83.entry.js +1 -0
  378. package/dist/mint-components/p-b6f41077.entry.js +1 -0
  379. package/dist/mint-components/p-b7edef12.system.entry.js +1 -0
  380. package/dist/mint-components/{p-9c310991.system.entry.js → p-bc305236.system.entry.js} +1 -1
  381. package/dist/mint-components/{p-7f088154.entry.js → p-bd5706ba.entry.js} +1 -1
  382. package/dist/mint-components/{p-c5577dd7.system.js → p-c1ede4f5.system.js} +1 -1
  383. package/dist/mint-components/{p-fb20eb5e.system.entry.js → p-c2bc302f.system.entry.js} +1 -1
  384. package/dist/mint-components/{p-92110eef.entry.js → p-c33ccfb7.entry.js} +1 -1
  385. package/dist/mint-components/p-c4c922fc.system.entry.js +1 -0
  386. package/dist/mint-components/p-c56b47e5.system.js +1 -0
  387. package/dist/mint-components/{p-f6934a55.system.js → p-cd1d497f.system.js} +1 -1
  388. package/dist/mint-components/p-cd39acd0.system.entry.js +1 -0
  389. package/dist/mint-components/p-d23d5113.js +1 -0
  390. package/dist/mint-components/{p-8704937c.js → p-d47569d0.js} +1 -1
  391. package/dist/mint-components/{p-ce9e7c98.system.js → p-d477a07b.system.js} +1 -1
  392. package/dist/mint-components/p-d4c0d53f.js +1 -0
  393. package/dist/mint-components/{p-b4c52c5a.entry.js → p-d59c19ba.entry.js} +2 -2
  394. package/dist/mint-components/{p-137ea86e.entry.js → p-d9dd65fd.entry.js} +1 -1
  395. package/dist/mint-components/{p-aad11a68.entry.js → p-dacefee2.entry.js} +1 -1
  396. package/dist/mint-components/{p-4f775e84.system.js → p-e0c608e4.system.js} +1 -1
  397. package/dist/mint-components/p-e10be944.entry.js +1 -0
  398. package/dist/mint-components/{p-ac1bf045.js → p-e56447fd.js} +1 -1
  399. package/dist/mint-components/{p-e3735866.entry.js → p-e605fe66.entry.js} +2 -2
  400. package/dist/mint-components/p-e64c49dd.system.js +1 -0
  401. package/dist/mint-components/{p-86990110.entry.js → p-e864a155.entry.js} +1 -1
  402. package/dist/mint-components/p-eac81420.entry.js +1 -0
  403. package/dist/mint-components/{p-88a2e66e.system.entry.js → p-ec379cf4.system.entry.js} +1 -1
  404. package/dist/mint-components/p-ec9c8ced.system.js +1 -0
  405. package/dist/mint-components/{p-0d8c53ac.system.js → p-ef7b966e.system.js} +1 -1
  406. package/dist/mint-components/{p-5cac90e8.system.entry.js → p-f7175fc2.system.entry.js} +1 -1
  407. package/dist/mint-components/p-f8047aab.entry.js +1 -0
  408. package/dist/mint-components/p-f81cc2cd.entry.js +1 -0
  409. package/dist/mint-components/{p-5b333fa8.system.entry.js → p-f8450975.system.entry.js} +1 -1
  410. package/dist/mint-components/p-f8b41805.system.js +1 -0
  411. package/dist/mint-components/p-fde23de1.entry.js +13 -0
  412. package/dist/mint-components/{p-4e48267b.system.js → p-ff19bf56.system.js} +1 -1
  413. package/dist/mint-components/p-ffe78243.js +1 -0
  414. package/dist/types/components/{sqm-marketing-emails-checkbox/MarketingEmailsCheckbox.stories.d.ts → sqm-base-registration/BaseRegistrationForm.stories.d.ts} +0 -3
  415. package/dist/types/components/sqm-base-registration/sqm-base-registration-form-view.d.ts +19 -0
  416. package/dist/types/components/sqm-checkbox-field/sqm-checkbox-field-view.d.ts +2 -1
  417. package/dist/types/components/sqm-checkbox-field/sqm-checkbox-field.d.ts +5 -5
  418. package/dist/types/components/sqm-empty/sqm-empty.d.ts +1 -1
  419. package/dist/types/components/sqm-google-sign-in/sqm-google-sign-in.d.ts +12 -0
  420. package/dist/types/components/sqm-pagination/Pagination.stories.d.ts +5 -0
  421. package/dist/types/components/sqm-pagination/sqm-pagination-view.d.ts +15 -0
  422. package/dist/types/components/sqm-pagination/sqm-pagination.d.ts +22 -0
  423. package/dist/types/components/sqm-pagination/usePagination.d.ts +16 -0
  424. package/dist/types/components/sqm-portal-container/sqm-portal-container.d.ts +0 -1
  425. package/dist/types/components/sqm-portal-google-registration-form/PortalGoogleRegistrationForm.stories.d.ts +10 -0
  426. package/dist/types/components/sqm-portal-google-registration-form/small-views/RegistrationFieldsView.d.ts +31 -0
  427. package/dist/types/components/sqm-portal-google-registration-form/sqm-portal-google-registration-form.d.ts +149 -0
  428. package/dist/types/components/sqm-portal-google-registration-form/usePortalGoogleRegistrationForm.d.ts +14 -0
  429. package/dist/types/components/sqm-portal-login/PortalLogin.stories.d.ts +1 -0
  430. package/dist/types/components/sqm-portal-login/sqm-portal-login-view.d.ts +2 -0
  431. package/dist/types/components/sqm-portal-login/sqm-portal-login.d.ts +8 -0
  432. package/dist/types/components/sqm-portal-registration-form/PortalRegistrationForm.stories.d.ts +0 -1
  433. package/dist/types/components/sqm-portal-registration-form/sqm-portal-registration-form-view.d.ts +1 -1
  434. package/dist/types/components/sqm-portal-registration-form/sqm-portal-registration-form.d.ts +1 -1
  435. package/dist/types/components/sqm-referral-card/ReferralCard.stories.d.ts +1 -0
  436. package/dist/types/components/sqm-referral-code/ReferralCode.stories.d.ts +18 -0
  437. package/dist/types/components/sqm-referral-code/sqm-referral-code.d.ts +70 -0
  438. package/dist/types/components/sqm-referral-code/useReferralCode.d.ts +3 -0
  439. package/dist/types/components/sqm-referral-codes/ReferralCodes.stories.d.ts +12 -0
  440. package/dist/types/components/sqm-referral-codes/sqm-referral-codes-view.d.ts +16 -0
  441. package/dist/types/components/sqm-referral-codes/sqm-referral-codes.d.ts +39 -0
  442. package/dist/types/components/sqm-referral-codes/useReferralCodes.d.ts +52 -0
  443. package/dist/types/components/sqm-share-link/useShareLink.d.ts +1 -0
  444. package/dist/types/components/views/copy-text-view.d.ts +3 -0
  445. package/dist/types/components.d.ts +524 -49
  446. package/dist/types/global/mixins.d.ts +0 -2
  447. package/dist/types/stories/Widget.stories.d.ts +6 -0
  448. package/docs/docs.docx +0 -0
  449. package/docs/raisins.json +1 -1
  450. package/grapesjs/grapesjs.js +1 -1
  451. package/package.json +1 -1
  452. package/dist/collection/components/sqm-marketing-emails-checkbox/MarketingEmailsCheckbox.stories.js +0 -11
  453. package/dist/collection/components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.js +0 -130
  454. package/dist/esm/sqm-portal-registration-form-view-1d3066e1.js +0 -83
  455. package/dist/esm-es5/ShadowViewAddon-1e90c3f1.js +0 -1
  456. package/dist/esm-es5/index.module-def4aec5.js +0 -1
  457. package/dist/esm-es5/sqm-big-stat_39.entry.js +0 -1
  458. package/dist/esm-es5/sqm-leaderboard-rank-view-10657658.js +0 -1
  459. package/dist/esm-es5/sqm-navigation-sidebar-item-view-60ef06cc.js +0 -1
  460. package/dist/esm-es5/sqm-portal-registration-form-view-1d3066e1.js +0 -1
  461. package/dist/esm-es5/useChildElements-32e1bda1.js +0 -1
  462. package/dist/esm-es5/useInstantAccessRegistration-46b89952.js +0 -1
  463. package/dist/esm-es5/useRegistrationFormState-9fc1ac80.js +0 -1
  464. package/dist/mint-components/p-02424350.system.js +0 -1
  465. package/dist/mint-components/p-03494732.entry.js +0 -1
  466. package/dist/mint-components/p-07f675ab.system.entry.js +0 -1
  467. package/dist/mint-components/p-0a898ab1.js +0 -1
  468. package/dist/mint-components/p-0b9fa97f.js +0 -1
  469. package/dist/mint-components/p-10e89d0a.entry.js +0 -1
  470. package/dist/mint-components/p-18a0e0d7.entry.js +0 -13
  471. package/dist/mint-components/p-21233898.system.entry.js +0 -1
  472. package/dist/mint-components/p-32d1d162.entry.js +0 -1
  473. package/dist/mint-components/p-3d4656bb.system.js +0 -1
  474. package/dist/mint-components/p-3ec16698.entry.js +0 -13
  475. package/dist/mint-components/p-40b1de58.js +0 -1
  476. package/dist/mint-components/p-4112e198.system.js +0 -1
  477. package/dist/mint-components/p-4df8f1d2.system.js +0 -1
  478. package/dist/mint-components/p-51f517a2.js +0 -1
  479. package/dist/mint-components/p-54051e76.system.entry.js +0 -1
  480. package/dist/mint-components/p-58ef25d3.system.entry.js +0 -1
  481. package/dist/mint-components/p-5be235f9.entry.js +0 -1
  482. package/dist/mint-components/p-61eab172.js +0 -1
  483. package/dist/mint-components/p-64c3217a.js +0 -1
  484. package/dist/mint-components/p-674a64fe.system.js +0 -1
  485. package/dist/mint-components/p-675e974b.system.js +0 -1
  486. package/dist/mint-components/p-7049e9b0.entry.js +0 -1
  487. package/dist/mint-components/p-711ba77e.system.entry.js +0 -1
  488. package/dist/mint-components/p-770368bc.system.js +0 -1
  489. package/dist/mint-components/p-79191f88.entry.js +0 -1
  490. package/dist/mint-components/p-80ed03b6.entry.js +0 -9
  491. package/dist/mint-components/p-8b5b78ca.entry.js +0 -1
  492. package/dist/mint-components/p-8e907ac7.system.entry.js +0 -1
  493. package/dist/mint-components/p-91669312.entry.js +0 -1
  494. package/dist/mint-components/p-9dcfa187.system.js +0 -1
  495. package/dist/mint-components/p-9f0629ba.system.entry.js +0 -1
  496. package/dist/mint-components/p-a51533cb.system.js +0 -1
  497. package/dist/mint-components/p-a6a7dcaa.js +0 -1
  498. package/dist/mint-components/p-a8f7cb95.js +0 -1
  499. package/dist/mint-components/p-af062c8f.system.entry.js +0 -1
  500. package/dist/mint-components/p-afd366ae.system.entry.js +0 -1
  501. package/dist/mint-components/p-b370fca8.system.js +0 -1
  502. package/dist/mint-components/p-b3b5b4b7.system.entry.js +0 -1
  503. package/dist/mint-components/p-b5861974.system.entry.js +0 -1
  504. package/dist/mint-components/p-c8878e79.entry.js +0 -1
  505. package/dist/mint-components/p-cb923bed.system.entry.js +0 -1
  506. package/dist/mint-components/p-d49e2f7a.js +0 -1
  507. package/dist/mint-components/p-d8d2de11.entry.js +0 -1
  508. package/dist/mint-components/p-dd0d79bf.entry.js +0 -1
  509. package/dist/mint-components/p-dd7ee007.system.js +0 -1
  510. package/dist/mint-components/p-eba44835.system.entry.js +0 -1
  511. package/dist/mint-components/p-ecdb5b0e.entry.js +0 -223
  512. package/dist/mint-components/p-ed17e637.system.js +0 -1
  513. package/dist/mint-components/p-ed6ebd60.system.js +0 -1
  514. package/dist/mint-components/p-fe66d24c.js +0 -391
  515. package/dist/types/components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.d.ts +0 -28
@@ -1,33 +1,35 @@
1
- import { h, r as registerInstance, c as Host } from './index-17b4da69.js';
2
- import { a as commonjsGlobal, u as useMemo, k as useState, f as useEffect, c as createCommonjsModule, n as h$1 } from './stencil-hooks.module-ac12ca1c.js';
3
- import './global-04c7d3b5.js';
4
- import { $ as $n, S as Sn, b as setUserIdentity, d as dist, X as Xe, o as setProgramId } from './index.module-def4aec5.js';
1
+ import { h, r as registerInstance, c as Host } from './index-60f16d0a.js';
2
+ import { a as commonjsGlobal, u as useMemo, k as useState, f as useEffect, c as createCommonjsModule, n as h$1 } from './stencil-hooks.module-e20edc0b.js';
3
+ import './global-3611a2b7.js';
4
+ import { c as xn, j as jn, b as setUserIdentity, d as dist, q as an, r as setProgramId } from './index.module-f3d96fbb.js';
5
5
  import './cjs-bdfb4486.js';
6
- import './mixins-f60a614c.js';
7
- import { c as createStyleSheet } from './JSS-67b5cff8.js';
8
- import { G as GenericTableView } from './GenericTableView-d59d8ab4.js';
9
- import './useChildElements-32e1bda1.js';
10
- import { l as luxon } from './luxon-7600be8d.js';
11
6
  import './utils-334c1e34.js';
12
- import './sqm-text-span-view-8d140661.js';
13
- import { A as AssetCardView } from './sqm-asset-card-view-9d93fbdd.js';
14
- import { C as CloseButtonView } from './sqm-close-button-view-dc65b4e3.js';
7
+ import { c as createStyleSheet } from './JSS-67b5cff8.js';
8
+ import { C as CopyTextView } from './copy-text-view-61eebf5d.js';
9
+ import './mixins-83f90fa1.js';
10
+ import { G as GenericTableView } from './GenericTableView-6aa9fac9.js';
11
+ import './useChildElements-d1d3fedd.js';
12
+ import { l as luxon } from './luxon-9b1f9912.js';
13
+ import './sqm-text-span-view-d1b54710.js';
14
+ import { A as AssetCardView } from './sqm-asset-card-view-2157b61f.js';
15
+ import { C as CloseButtonView } from './sqm-close-button-view-0c0bfff8.js';
15
16
  import './index-ffa26b43.js';
16
- import { E as EmailRegistrationView } from './email-registration-view-a89a88bf.js';
17
- import { L as LeaderboardRankView } from './sqm-leaderboard-rank-view-10657658.js';
18
- import { L as LogoutCurrentUserView } from './sqm-logout-current-user-view-2c6122cd.js';
19
- import { N as NavigationSidebarView } from './sqm-navigation-sidebar-view-0312e073.js';
20
- import { N as NavigationSidebarItemView } from './sqm-navigation-sidebar-item-view-60ef06cc.js';
21
- import { P as PortalEmailVerificationView } from './sqm-portal-email-verification-view-4307c992.js';
22
- import { P as PortalForgotPasswordView } from './sqm-portal-forgot-password-view-c2ed8fed.js';
23
- import { P as PortalProfileView } from './sqm-portal-profile-view-ffe955c8.js';
24
- import './utilities-3f5bba22.js';
25
- import { P as PortalRegistrationFormView } from './sqm-portal-registration-form-view-1d3066e1.js';
26
- import { P as PortalResetPasswordView } from './sqm-portal-reset-password-view-79a85e02.js';
27
- import { P as PortalVerifyEmailView } from './sqm-portal-verify-email-view-d7ea2c56.js';
28
- import { S as ShareButtonView, L as LeaderboardView, C as CopyTextView, B as BigStatView, P as PortalFrameView, E as EditProfileView, u as useShareLink, a as useShareButton, b as useDemoBigStat, c as StatContainerView, d as PortalChangePasswordView, e as PortalLoginView, f as PortalRegisterView, T as TaskCardView, g as ProgressBarView, h as PoweredByImg$1, i as PortalFooterView, H as HeroView, R as ReferralIframeView, N as NameFieldsView, j as CheckboxFieldView, D as DropdownFieldView, I as InputFieldView, k as RewardExchangeView, r as rewardExchangeCustomErrorMsg, l as rewardExchangeLongText, m as rewardExchangeSelected, n as chooseAmountFixed, o as chooseAmountFixedNoDescription, p as chooseAmountVariable, q as chooseAmountVariableNoDescription, s as chooseAmountVariableDisabled, t as chooseAmountVariableUnavailable, v as confirmFixed, w as confirmVariable, x as redemptionError, y as queryError, z as success, A as successVariable, F as loading, G as empty$1, J as rewardExchange, K as CardFeedView, M as CouponCodeView, O as ProgressBar$2, Q as autoColorScaleCss, U as ShadowViewAddon } from './ShadowViewAddon-1e90c3f1.js';
29
- import { P as PortalContainerView, a as PortalSectionView } from './sqm-portal-container-view-6c582684.js';
30
- import { O as OtherRegionSlotView, I as InvoiceTableView, T as TaxForm } from './sqm-invoice-table-view-6e13a323.js';
17
+ import { E as EmailRegistrationView } from './email-registration-view-6870d230.js';
18
+ import { L as LeaderboardRankView } from './sqm-leaderboard-rank-view-7cd0de83.js';
19
+ import { L as LogoutCurrentUserView } from './sqm-logout-current-user-view-02e9f508.js';
20
+ import { N as NavigationSidebarView } from './sqm-navigation-sidebar-view-ce55d74d.js';
21
+ import { N as NavigationSidebarItemView } from './sqm-navigation-sidebar-item-view-a4e4edb6.js';
22
+ import { P as PortalEmailVerificationView } from './sqm-portal-email-verification-view-d500dd01.js';
23
+ import { P as PortalForgotPasswordView } from './sqm-portal-forgot-password-view-4f6c89a7.js';
24
+ import { B as BaseRegistrationFormView } from './sqm-base-registration-form-view-dd481f19.js';
25
+ import { P as PortalRegistrationFormView } from './sqm-portal-registration-form-view-20b9c9bc.js';
26
+ import { P as PortalProfileView } from './sqm-portal-profile-view-2997f902.js';
27
+ import './utilities-33996ce7.js';
28
+ import { P as PortalResetPasswordView } from './sqm-portal-reset-password-view-e29f1842.js';
29
+ import { P as PortalVerifyEmailView } from './sqm-portal-verify-email-view-d5dcf5c5.js';
30
+ import { S as ShareButtonView, L as LeaderboardView, B as BigStatView, P as PortalFrameView, E as EditProfileView, u as useShareLink, a as useShareButton, b as useDemoBigStat, c as StatContainerView, d as PortalChangePasswordView, e as PortalLoginView, f as PortalRegisterView, T as TaskCardView, g as ProgressBarView, h as PoweredByImg$1, i as PortalFooterView, H as HeroView, R as ReferralIframeView, N as NameFieldsView, C as CheckboxFieldView, D as DropdownFieldView, I as InputFieldView, j as RewardExchangeView, r as rewardExchangeCustomErrorMsg, k as rewardExchangeLongText, l as rewardExchangeSelected, m as chooseAmountFixed, n as chooseAmountFixedNoDescription, o as chooseAmountVariable, p as chooseAmountVariableNoDescription, q as chooseAmountVariableDisabled, s as chooseAmountVariableUnavailable, t as confirmFixed, v as confirmVariable, w as redemptionError, x as queryError, y as success, z as successVariable, A as loading, F as empty$1, G as rewardExchange, J as CardFeedView, K as CouponCodeView, M as ProgressBar$2, O as autoColorScaleCss, Q as ShadowViewAddon } from './ShadowViewAddon-af23bc54.js';
31
+ import { P as PortalContainerView, a as PortalSectionView } from './sqm-portal-container-view-c3be4b88.js';
32
+ import { O as OtherRegionSlotView, I as InvoiceTableView, T as TaxForm } from './sqm-invoice-table-view-b8240dc6.js';
31
33
 
32
34
  /**
33
35
  * lodash (Custom Build) <https://lodash.com/>
@@ -1625,6 +1627,19 @@ const EmptyState = /*#__PURE__*/Object.freeze({
1625
1627
  SlottedIntoComponent: SlottedIntoComponent
1626
1628
  });
1627
1629
 
1630
+ const Pagination_stories = {
1631
+ title: "Components/Link Button",
1632
+ };
1633
+ const Default = () => {
1634
+ return h("sqm-pagination", null);
1635
+ };
1636
+
1637
+ const Pagination = /*#__PURE__*/Object.freeze({
1638
+ __proto__: null,
1639
+ 'default': Pagination_stories,
1640
+ Default: Default
1641
+ });
1642
+
1628
1643
  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";
1629
1644
 
1630
1645
  const ShareLink_stories = {
@@ -1633,7 +1648,7 @@ const ShareLink_stories = {
1633
1648
  scenario: scenario$2,
1634
1649
  },
1635
1650
  };
1636
- const Default = () => {
1651
+ const Default$1 = () => {
1637
1652
  const props = {
1638
1653
  copyString: "https://noah.example.com",
1639
1654
  open: false,
@@ -1697,7 +1712,7 @@ const FullStack = () => {
1697
1712
  const ShareLink = /*#__PURE__*/Object.freeze({
1698
1713
  __proto__: null,
1699
1714
  'default': ShareLink_stories,
1700
- Default: Default,
1715
+ Default: Default$1,
1701
1716
  Tooltip: Tooltip,
1702
1717
  Disabled: Disabled,
1703
1718
  Error: Error$1,
@@ -1716,7 +1731,7 @@ const BigStat_stories = {
1716
1731
  scenario: scenario$3,
1717
1732
  },
1718
1733
  };
1719
- const Default$1 = () => {
1734
+ const Default$2 = () => {
1720
1735
  const props = { value: 990000, statvalue: "9.900,00", loading: false };
1721
1736
  return h(BigStatView, Object.assign({}, props), "Big stat");
1722
1737
  };
@@ -1799,7 +1814,7 @@ const MultipleStats = () => {
1799
1814
  const BigStat = /*#__PURE__*/Object.freeze({
1800
1815
  __proto__: null,
1801
1816
  'default': BigStat_stories,
1802
- Default: Default$1,
1817
+ Default: Default$2,
1803
1818
  LeftAlign: LeftAlign,
1804
1819
  RightAlign: RightAlign,
1805
1820
  FlexReverse: FlexReverse,
@@ -2536,36 +2551,36 @@ const routes = `
2536
2551
  `;
2537
2552
  const TemplateNavigation = createHookStory(() => {
2538
2553
  return (h("div", null,
2539
- h("button", { onClick: () => $n.push("/") }, "/"),
2540
- h("button", { onClick: () => $n.push("/foo") }, "/foo"),
2541
- h("button", { onClick: () => $n.push("/bar") }, "/bar"),
2542
- h("button", { onClick: () => $n.push("/baz/bang") }, "/baz/bang"),
2543
- h("button", { onClick: () => $n.push("/refer") }, "/refer"),
2544
- h("button", { onClick: () => $n.push("/refer/1") }, "/refer/1"),
2545
- h("button", { onClick: () => $n.push("/refer/2") }, "/refer/2"),
2546
- h("button", { onClick: () => $n.back() }, "Back"),
2547
- h("button", { onClick: () => $n.forward() }, "Forward"),
2554
+ h("button", { onClick: () => xn.push("/") }, "/"),
2555
+ h("button", { onClick: () => xn.push("/foo") }, "/foo"),
2556
+ h("button", { onClick: () => xn.push("/bar") }, "/bar"),
2557
+ h("button", { onClick: () => xn.push("/baz/bang") }, "/baz/bang"),
2558
+ h("button", { onClick: () => xn.push("/refer") }, "/refer"),
2559
+ h("button", { onClick: () => xn.push("/refer/1") }, "/refer/1"),
2560
+ h("button", { onClick: () => xn.push("/refer/2") }, "/refer/2"),
2561
+ h("button", { onClick: () => xn.back() }, "Back"),
2562
+ h("button", { onClick: () => xn.forward() }, "Forward"),
2548
2563
  h("hr", null),
2549
2564
  h("sqm-router", { innerHTML: templates })));
2550
2565
  });
2551
2566
  const RouteNavigation = createHookStory(() => {
2552
2567
  return (h("div", null,
2553
- h("button", { onClick: () => $n.push("/") }, "/"),
2554
- h("button", { onClick: () => $n.push("/foo") }, "/foo"),
2555
- h("button", { onClick: () => $n.push("/bar") }, "/bar"),
2556
- h("button", { onClick: () => $n.push("/baz/bang") }, "/baz/bang"),
2557
- h("button", { onClick: () => $n.push("/refer") }, "/refer"),
2558
- h("button", { onClick: () => $n.push("/refer/1") }, "/refer/1"),
2559
- h("button", { onClick: () => $n.push("/refer/2") }, "/refer/2"),
2560
- h("button", { onClick: () => $n.back() }, "Back"),
2561
- h("button", { onClick: () => $n.forward() }, "Forward"),
2568
+ h("button", { onClick: () => xn.push("/") }, "/"),
2569
+ h("button", { onClick: () => xn.push("/foo") }, "/foo"),
2570
+ h("button", { onClick: () => xn.push("/bar") }, "/bar"),
2571
+ h("button", { onClick: () => xn.push("/baz/bang") }, "/baz/bang"),
2572
+ h("button", { onClick: () => xn.push("/refer") }, "/refer"),
2573
+ h("button", { onClick: () => xn.push("/refer/1") }, "/refer/1"),
2574
+ h("button", { onClick: () => xn.push("/refer/2") }, "/refer/2"),
2575
+ h("button", { onClick: () => xn.back() }, "Back"),
2576
+ h("button", { onClick: () => xn.forward() }, "Forward"),
2562
2577
  h("hr", null),
2563
2578
  h("sqm-router", { innerHTML: routes })));
2564
2579
  });
2565
2580
  const Styling = createHookStory(() => {
2566
2581
  return (h("div", null,
2567
- h("button", { onClick: () => $n.push("/") }, "/"),
2568
- h("button", { onClick: () => $n.push("/foo") }, "/foo"),
2582
+ h("button", { onClick: () => xn.push("/") }, "/"),
2583
+ h("button", { onClick: () => xn.push("/foo") }, "/foo"),
2569
2584
  h("hr", null),
2570
2585
  h("div", { style: { display: "flex", justifyContent: "space-around" } },
2571
2586
  h("sqm-router", { innerHTML: `<template path="/">
@@ -2579,7 +2594,7 @@ function useTemplate(templateString) {
2579
2594
  const [previewTemplate, setPreviewTemplate] = useState(templateString);
2580
2595
  function setPath(e) {
2581
2596
  //@ts-ignore
2582
- $n.push(e.target.value);
2597
+ xn.push(e.target.value);
2583
2598
  }
2584
2599
  return {
2585
2600
  states: { previewTemplate, editedTemplate },
@@ -2743,8 +2758,8 @@ const FullStackFrame = () => {
2743
2758
  "Current path:",
2744
2759
  " ",
2745
2760
  h("code", null,
2746
- h("strong", null, (_a = Sn()) === null || _a === void 0 ? void 0 : _a.pathname))),
2747
- h("button", { onClick: $n.back }, "Go Back")));
2761
+ h("strong", null, (_a = jn()) === null || _a === void 0 ? void 0 : _a.pathname))),
2762
+ h("button", { onClick: xn.back }, "Go Back")));
2748
2763
  };
2749
2764
  const FullStackFrameLoggedOut = () => {
2750
2765
  var _a;
@@ -2768,8 +2783,8 @@ const FullStackFrameLoggedOut = () => {
2768
2783
  "Current path:",
2769
2784
  " ",
2770
2785
  h("code", null,
2771
- h("strong", null, (_a = Sn()) === null || _a === void 0 ? void 0 : _a.pathname))),
2772
- h("button", { onClick: $n.back }, "Go Back")));
2786
+ h("strong", null, (_a = jn()) === null || _a === void 0 ? void 0 : _a.pathname))),
2787
+ h("button", { onClick: xn.back }, "Go Back")));
2773
2788
  };
2774
2789
 
2775
2790
  const PortalFrame = /*#__PURE__*/Object.freeze({
@@ -3496,7 +3511,7 @@ function useExchangeButton() {
3496
3511
  const { id, accountId } = setupGraphQL$6();
3497
3512
  const [points, setPoints] = useState(10);
3498
3513
  const [rate, setRate] = useState(100);
3499
- const [exchange, { data, errors }] = Xe(EXCHANGE);
3514
+ const [exchange, { data, errors }] = an(EXCHANGE);
3500
3515
  return {
3501
3516
  states: {
3502
3517
  points,
@@ -4067,6 +4082,8 @@ const referralWidget = "<sqm-brand brand-color=\"#4225c4\" brand-font=\"Nunito S
4067
4082
 
4068
4083
  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";
4069
4084
 
4085
+ 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";
4086
+
4070
4087
  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";
4071
4088
 
4072
4089
  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";
@@ -4097,16 +4114,16 @@ function DefaultTemplateView(props) {
4097
4114
  gridTemplateColumns: "repeat(9, 80px)",
4098
4115
  gridGap: "10px",
4099
4116
  } },
4100
- h("button", { onClick: () => $n.push("/") }, "Dashboard"),
4101
- props.leadSubmit && (h("button", { onClick: () => $n.push("/refer") }, "Submit a Referral")),
4102
- h("button", { onClick: () => $n.push("/activity") }, "Activity"),
4103
- h("button", { onClick: () => $n.push("/editProfile") }, "Edit Profile"),
4104
- h("button", { onClick: () => $n.push("/login") }, "Login"),
4105
- h("button", { onClick: () => $n.push("/register") }, "Register"),
4106
- h("button", { onClick: () => $n.push("/emailVerification") }, "Email Verification"),
4107
- h("button", { onClick: () => $n.push("/verifyEmail") }, "Verify Email"),
4108
- h("button", { onClick: () => $n.push("/forgotPassword") }, "Forgot Password"),
4109
- h("button", { onClick: () => $n.push("/resetPassword") }, "Reset Password")),
4117
+ h("button", { onClick: () => xn.push("/") }, "Dashboard"),
4118
+ props.leadSubmit && (h("button", { onClick: () => xn.push("/refer") }, "Submit a Referral")),
4119
+ h("button", { onClick: () => xn.push("/activity") }, "Activity"),
4120
+ h("button", { onClick: () => xn.push("/editProfile") }, "Edit Profile"),
4121
+ h("button", { onClick: () => xn.push("/login") }, "Login"),
4122
+ h("button", { onClick: () => xn.push("/register") }, "Register"),
4123
+ h("button", { onClick: () => xn.push("/emailVerification") }, "Email Verification"),
4124
+ h("button", { onClick: () => xn.push("/verifyEmail") }, "Verify Email"),
4125
+ h("button", { onClick: () => xn.push("/forgotPassword") }, "Forgot Password"),
4126
+ h("button", { onClick: () => xn.push("/resetPassword") }, "Reset Password")),
4110
4127
  h("br", null),
4111
4128
  h("div", { innerHTML: states.previewTemplate })));
4112
4129
  }
@@ -7123,6 +7140,10 @@ const Loyalty = createHookStory(() => {
7123
7140
  const { states, callbacks } = useTemplate$1(loyaltyWidget);
7124
7141
  return (h(DefaultTemplateView, { states: states, callbacks: callbacks, template: loyaltyWidget }));
7125
7142
  });
7143
+ const PromoCodeReferralWidget = createHookStory(() => {
7144
+ const { states, callbacks } = useTemplate$1(promoCodeReferralWidget);
7145
+ return (h(DefaultTemplateView, { states: states, callbacks: callbacks, template: referralWidget }));
7146
+ });
7126
7147
  const InstantAccessReferrerShareWidget = createHookStory(() => {
7127
7148
  const { states, callbacks } = useTemplate$1(instantAccessReferrerShareWidget);
7128
7149
  return h(TemplateView$1, { states: states, callbacks: callbacks });
@@ -7154,6 +7175,7 @@ const Widget = /*#__PURE__*/Object.freeze({
7154
7175
  ReferralWidget: ReferralWidget,
7155
7176
  MonoWidget: MonoWidget,
7156
7177
  Loyalty: Loyalty,
7178
+ PromoCodeReferralWidget: PromoCodeReferralWidget,
7157
7179
  InstantAccessReferrerShareWidget: InstantAccessReferrerShareWidget,
7158
7180
  PaypalMonoWidget: PaypalMonoWidget,
7159
7181
  PaypalReferralWidget: PaypalReferralWidget,
@@ -7247,7 +7269,9 @@ const defaultProps$2 = {
7247
7269
  callbacks: {
7248
7270
  submit: async (e) => await e,
7249
7271
  },
7250
- content: { pageLabel: "Sign in to your account" },
7272
+ content: {
7273
+ pageLabel: "Sign in to your account",
7274
+ },
7251
7275
  };
7252
7276
  const errorProps = {
7253
7277
  states: {
@@ -7271,16 +7295,26 @@ const loadingProps = {
7271
7295
  callbacks: {
7272
7296
  submit: async (e) => await e,
7273
7297
  },
7274
- content: { pageLabel: "Sign in to your account" },
7298
+ content: {
7299
+ pageLabel: "Sign in to your account",
7300
+ },
7275
7301
  };
7276
- const Default$2 = () => h(PortalLoginView, Object.assign({}, defaultProps$2));
7302
+ const Default$3 = () => (h("sqm-portal-login", { showGoogleLogin: false, demoData: { ...defaultProps$2 } }));
7303
+ const IsGoogle = () => (h("sqm-portal-login", { showGoogleLogin: true, demoData: {
7304
+ ...defaultProps$2,
7305
+ content: {
7306
+ googleButton: h("sl-button", null, "Sign in with Google"),
7307
+ },
7308
+ states: { ...defaultProps$2.states },
7309
+ } }));
7277
7310
  const LoginWithError = () => h(PortalLoginView, Object.assign({}, errorProps));
7278
7311
  const LoginLoading = () => h(PortalLoginView, Object.assign({}, loadingProps));
7279
7312
 
7280
7313
  const PortalLogin = /*#__PURE__*/Object.freeze({
7281
7314
  __proto__: null,
7282
7315
  'default': PortalLogin_stories,
7283
- Default: Default$2,
7316
+ Default: Default$3,
7317
+ IsGoogle: IsGoogle,
7284
7318
  LoginWithError: LoginWithError,
7285
7319
  LoginLoading: LoginLoading
7286
7320
  });
@@ -7383,7 +7417,7 @@ const slottedProps = {
7383
7417
  h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
7384
7418
  },
7385
7419
  };
7386
- const Default$3 = () => h(PortalRegisterView, Object.assign({}, defaultProps$3));
7420
+ const Default$4 = () => h(PortalRegisterView, Object.assign({}, defaultProps$3));
7387
7421
  const RegisterWithError = () => h(PortalRegisterView, Object.assign({}, errorProps$1));
7388
7422
  const RegisterLoading = () => h(PortalRegisterView, Object.assign({}, loadingProps$1));
7389
7423
  const FieldsHidden = () => {
@@ -7410,7 +7444,7 @@ const TermsAndConditions = () => (h(PortalRegisterView, Object.assign({}, defaul
7410
7444
  const PortalRegister = /*#__PURE__*/Object.freeze({
7411
7445
  __proto__: null,
7412
7446
  'default': PortalRegister_stories,
7413
- Default: Default$3,
7447
+ Default: Default$4,
7414
7448
  RegisterWithError: RegisterWithError,
7415
7449
  RegisterLoading: RegisterLoading,
7416
7450
  FieldsHidden: FieldsHidden,
@@ -7418,126 +7452,6 @@ const PortalRegister = /*#__PURE__*/Object.freeze({
7418
7452
  TermsAndConditions: TermsAndConditions
7419
7453
  });
7420
7454
 
7421
- const PortalRegistrationForm_stories = {
7422
- title: "Components/Microsite Register Form New",
7423
- };
7424
- const defaultProps$4 = {
7425
- states: {
7426
- error: "",
7427
- loading: false,
7428
- confirmPassword: true,
7429
- hideInputs: false,
7430
- loginPath: "/login",
7431
- },
7432
- callbacks: {
7433
- submit: () => console.log("Submit!"),
7434
- inputFunction: () => { },
7435
- },
7436
- refs: {
7437
- formRef: {},
7438
- },
7439
- content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
7440
- };
7441
- const errorProps$2 = {
7442
- states: {
7443
- error: "Something went wrong. Please try again.",
7444
- loading: false,
7445
- confirmPassword: true,
7446
- hideInputs: false,
7447
- loginPath: "/login",
7448
- },
7449
- callbacks: {
7450
- submit: () => console.log("Submit!"),
7451
- inputFunction: () => { },
7452
- },
7453
- refs: {
7454
- formRef: {},
7455
- },
7456
- content: {
7457
- pageLabel: "Register",
7458
- confirmPasswordLabel: "Confirm Password",
7459
- },
7460
- };
7461
- const loadingProps$2 = {
7462
- states: {
7463
- error: "",
7464
- loading: true,
7465
- confirmPassword: true,
7466
- hideInputs: false,
7467
- loginPath: "/login",
7468
- },
7469
- callbacks: {
7470
- submit: () => console.log("Submit!"),
7471
- inputFunction: () => { },
7472
- },
7473
- refs: {
7474
- formRef: {},
7475
- },
7476
- content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
7477
- };
7478
- const slottedProps$1 = {
7479
- states: {
7480
- error: "",
7481
- loading: false,
7482
- confirmPassword: true,
7483
- hideInputs: false,
7484
- loginPath: "/login",
7485
- },
7486
- callbacks: {
7487
- submit: () => console.log("Submit!"),
7488
- inputFunction: () => { },
7489
- },
7490
- refs: {
7491
- formRef: {},
7492
- },
7493
- content: {
7494
- pageLabel: "Register",
7495
- confirmPasswordLabel: "Confirm Password",
7496
- formData: (h("div", null,
7497
- h("sl-input", { style: { marginBottom: "var(--sl-spacing-x-large)" }, exportparts: "label: input-label, base: input-base", label: "Slotted Input", required: true }),
7498
- h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
7499
- },
7500
- };
7501
- const Default$4 = () => h(PortalRegistrationFormView, Object.assign({}, defaultProps$4));
7502
- const RegisterWithError$1 = () => (h(PortalRegistrationFormView, Object.assign({}, errorProps$2)));
7503
- const RegisterLoading$1 = () => (h(PortalRegistrationFormView, Object.assign({}, loadingProps$2)));
7504
- const FieldsHidden$1 = () => {
7505
- return (h("sqm-portal-register", { demoData: {
7506
- states: {
7507
- error: "",
7508
- loading: true,
7509
- registrationFormState: {},
7510
- confirmPassword: true,
7511
- hideInputs: true,
7512
- loginPath: "/login",
7513
- },
7514
- } }));
7515
- };
7516
- const SlottedInputs$1 = () => (h(PortalRegistrationFormView, Object.assign({}, slottedProps$1)));
7517
- const RegisterWithMarketingEmailsCheckbox = () => (h(PortalRegistrationFormView, Object.assign({}, defaultProps$4, { content: {
7518
- ...defaultProps$4.content,
7519
- emailOptIn: (h("sqm-checkbox-field", { checkboxLabel: "I would like to receive marketing and promotional emails for this referral program" })),
7520
- } })));
7521
- const TermsAndConditions$1 = () => (h(PortalRegistrationFormView, Object.assign({}, defaultProps$4, { content: {
7522
- ...defaultProps$4.content,
7523
- terms: (h("p", null,
7524
- "By signing up you agree to the",
7525
- " ",
7526
- h("a", { href: "https://example.com", target: "_blank" }, "Terms and Conditions"))),
7527
- } })));
7528
-
7529
- const NewPortalRegistrationForm = /*#__PURE__*/Object.freeze({
7530
- __proto__: null,
7531
- 'default': PortalRegistrationForm_stories,
7532
- Default: Default$4,
7533
- RegisterWithError: RegisterWithError$1,
7534
- RegisterLoading: RegisterLoading$1,
7535
- FieldsHidden: FieldsHidden$1,
7536
- SlottedInputs: SlottedInputs$1,
7537
- RegisterWithMarketingEmailsCheckbox: RegisterWithMarketingEmailsCheckbox,
7538
- TermsAndConditions: TermsAndConditions$1
7539
- });
7540
-
7541
7455
  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 |";
7542
7456
 
7543
7457
  const PortalForgotPassword_stories = {
@@ -7546,7 +7460,7 @@ const PortalForgotPassword_stories = {
7546
7460
  scenario: scenario$6,
7547
7461
  },
7548
7462
  };
7549
- const defaultProps$5 = {
7463
+ const defaultProps$4 = {
7550
7464
  states: {
7551
7465
  error: "",
7552
7466
  loading: false,
@@ -7561,7 +7475,7 @@ const defaultProps$5 = {
7561
7475
  messageSlot: "Enter your email below to receive a password reset link.",
7562
7476
  },
7563
7477
  };
7564
- const errorProps$3 = {
7478
+ const errorProps$2 = {
7565
7479
  states: {
7566
7480
  error: "Something went wrong. Please try again.",
7567
7481
  loading: false,
@@ -7576,7 +7490,7 @@ const errorProps$3 = {
7576
7490
  messageSlot: "Enter your email below to receive a password reset link.",
7577
7491
  },
7578
7492
  };
7579
- const loadingProps$3 = {
7493
+ const loadingProps$2 = {
7580
7494
  states: {
7581
7495
  error: "",
7582
7496
  loading: true,
@@ -7606,9 +7520,9 @@ const successProps = {
7606
7520
  messageSlot: "Enter your email below to receive a password reset link.",
7607
7521
  },
7608
7522
  };
7609
- const Default$5 = () => h(PortalForgotPasswordView, Object.assign({}, defaultProps$5));
7610
- const ForgotPasswordWithError = () => (h(PortalForgotPasswordView, Object.assign({}, errorProps$3)));
7611
- const ForgotPasswordLoading = () => (h(PortalForgotPasswordView, Object.assign({}, loadingProps$3)));
7523
+ const Default$5 = () => h(PortalForgotPasswordView, Object.assign({}, defaultProps$4));
7524
+ const ForgotPasswordWithError = () => (h(PortalForgotPasswordView, Object.assign({}, errorProps$2)));
7525
+ const ForgotPasswordLoading = () => (h(PortalForgotPasswordView, Object.assign({}, loadingProps$2)));
7612
7526
  const ForgotPasswordSuccess = () => (h(PortalForgotPasswordView, Object.assign({}, successProps)));
7613
7527
 
7614
7528
  const PortalForgotPassword = /*#__PURE__*/Object.freeze({
@@ -7647,12 +7561,12 @@ const defaultStates = {
7647
7561
  loadingVerification: false,
7648
7562
  countdown: 10,
7649
7563
  };
7650
- const defaultProps$6 = {
7564
+ const defaultProps$5 = {
7651
7565
  states: defaultStates,
7652
7566
  callbacks: defaultCallbacks,
7653
7567
  content: defaultContent,
7654
7568
  };
7655
- const errorProps$4 = {
7569
+ const errorProps$3 = {
7656
7570
  states: {
7657
7571
  ...defaultStates,
7658
7572
  error: "Something went wrong. Please try again.",
@@ -7660,7 +7574,7 @@ const errorProps$4 = {
7660
7574
  callbacks: defaultCallbacks,
7661
7575
  content: defaultContent,
7662
7576
  };
7663
- const loadingProps$4 = {
7577
+ const loadingProps$3 = {
7664
7578
  states: {
7665
7579
  ...defaultStates,
7666
7580
  loading: true,
@@ -7685,9 +7599,9 @@ const loadingVerificationProps = {
7685
7599
  callbacks: defaultCallbacks,
7686
7600
  content: defaultContent,
7687
7601
  };
7688
- const Default$6 = () => h(PortalEmailVerificationView, Object.assign({}, defaultProps$6));
7689
- const EmailVerificationWithError = () => (h(PortalEmailVerificationView, Object.assign({}, errorProps$4)));
7690
- const EmailVerificationLoading = () => (h(PortalEmailVerificationView, Object.assign({}, loadingProps$4)));
7602
+ const Default$6 = () => h(PortalEmailVerificationView, Object.assign({}, defaultProps$5));
7603
+ const EmailVerificationWithError = () => (h(PortalEmailVerificationView, Object.assign({}, errorProps$3)));
7604
+ const EmailVerificationLoading = () => (h(PortalEmailVerificationView, Object.assign({}, loadingProps$3)));
7691
7605
  const EmailVerificationCheckingVerification = () => (h(PortalEmailVerificationView, Object.assign({}, loadingVerificationProps)));
7692
7606
  const EmailVerificationSuccess = () => (h(PortalEmailVerificationView, Object.assign({}, successProps$1)));
7693
7607
 
@@ -7709,7 +7623,7 @@ const PortalResetPassword_stories = {
7709
7623
  scenario: scenario$8,
7710
7624
  },
7711
7625
  };
7712
- const defaultProps$7 = {
7626
+ const defaultProps$6 = {
7713
7627
  states: {
7714
7628
  error: "",
7715
7629
  loading: false,
@@ -7755,7 +7669,7 @@ const defaultPropsNoConfirm = {
7755
7669
  failed: () => console.log("failed"),
7756
7670
  },
7757
7671
  };
7758
- const errorProps$5 = {
7672
+ const errorProps$4 = {
7759
7673
  states: {
7760
7674
  error: "Something went wrong. Please try again.",
7761
7675
  loading: false,
@@ -7778,7 +7692,7 @@ const errorProps$5 = {
7778
7692
  failed: () => console.log("failed"),
7779
7693
  },
7780
7694
  };
7781
- const loadingProps$5 = {
7695
+ const loadingProps$4 = {
7782
7696
  states: {
7783
7697
  error: "",
7784
7698
  loading: true,
@@ -7847,10 +7761,10 @@ const validatingCodeProps = {
7847
7761
  failed: () => console.log("failed"),
7848
7762
  },
7849
7763
  };
7850
- const Default$7 = () => h(PortalResetPasswordView, Object.assign({}, defaultProps$7));
7764
+ const Default$7 = () => h(PortalResetPasswordView, Object.assign({}, defaultProps$6));
7851
7765
  const DefaultWithoutConfirmField = () => (h(PortalResetPasswordView, Object.assign({}, defaultPropsNoConfirm)));
7852
- const ResetPasswordWithError = () => (h(PortalResetPasswordView, Object.assign({}, errorProps$5)));
7853
- const ResetPasswordLoading = () => (h(PortalResetPasswordView, Object.assign({}, loadingProps$5)));
7766
+ const ResetPasswordWithError = () => (h(PortalResetPasswordView, Object.assign({}, errorProps$4)));
7767
+ const ResetPasswordLoading = () => (h(PortalResetPasswordView, Object.assign({}, loadingProps$4)));
7854
7768
  const ResetPasswordSuccess = () => (h(PortalResetPasswordView, Object.assign({}, successProps$2)));
7855
7769
  const CodeValidating = () => (h(PortalResetPasswordView, Object.assign({}, validatingCodeProps)));
7856
7770
 
@@ -7873,7 +7787,7 @@ const PortalVerifyEmail_stories = {
7873
7787
  scenario: scenario$9,
7874
7788
  },
7875
7789
  };
7876
- const errorProps$6 = {
7790
+ const errorProps$5 = {
7877
7791
  states: {
7878
7792
  error: "Something went wrong. Please try again.",
7879
7793
  loading: false,
@@ -7907,7 +7821,7 @@ const verifiedProps = {
7907
7821
  },
7908
7822
  content: {},
7909
7823
  };
7910
- const EmailVerificationWithError$1 = () => (h(PortalVerifyEmailView, Object.assign({}, errorProps$6)));
7824
+ const EmailVerificationWithError$1 = () => (h(PortalVerifyEmailView, Object.assign({}, errorProps$5)));
7911
7825
  const EmailVerificationSuccess$1 = () => (h(PortalVerifyEmailView, Object.assign({}, verifiedProps)));
7912
7826
 
7913
7827
  const PortalVerifyEmail = /*#__PURE__*/Object.freeze({
@@ -8037,7 +7951,7 @@ const ChangePassword_stories = {
8037
7951
  scenario: scenario$a,
8038
7952
  },
8039
7953
  };
8040
- const defaultProps$8 = {
7954
+ const defaultProps$7 = {
8041
7955
  states: {
8042
7956
  open: false,
8043
7957
  loading: false,
@@ -8081,7 +7995,7 @@ const openProps = {
8081
7995
  submit: (e) => console.log("Submit", e),
8082
7996
  },
8083
7997
  };
8084
- const errorProps$7 = {
7998
+ const errorProps$6 = {
8085
7999
  states: {
8086
8000
  open: true,
8087
8001
  loading: false,
@@ -8125,7 +8039,7 @@ const passwordErrorProps = {
8125
8039
  submit: (e) => console.log("Submit", e),
8126
8040
  },
8127
8041
  };
8128
- const loadingProps$6 = {
8042
+ const loadingProps$5 = {
8129
8043
  states: {
8130
8044
  open: true,
8131
8045
  loading: true,
@@ -8169,11 +8083,11 @@ const successProps$3 = {
8169
8083
  submit: (e) => console.log("Submit", e),
8170
8084
  },
8171
8085
  };
8172
- const Default$9 = () => h(PortalChangePasswordView, Object.assign({}, defaultProps$8));
8086
+ const Default$9 = () => h(PortalChangePasswordView, Object.assign({}, defaultProps$7));
8173
8087
  const Open = () => h(PortalChangePasswordView, Object.assign({}, openProps));
8174
- const Error$2 = () => h(PortalChangePasswordView, Object.assign({}, errorProps$7));
8088
+ const Error$2 = () => h(PortalChangePasswordView, Object.assign({}, errorProps$6));
8175
8089
  const PaswordError = () => (h(PortalChangePasswordView, Object.assign({}, passwordErrorProps)));
8176
- const Loading$1 = () => h(PortalChangePasswordView, Object.assign({}, loadingProps$6));
8090
+ const Loading$1 = () => h(PortalChangePasswordView, Object.assign({}, loadingProps$5));
8177
8091
  const Success = () => h(PortalChangePasswordView, Object.assign({}, successProps$3));
8178
8092
 
8179
8093
  const ChangePassword = /*#__PURE__*/Object.freeze({
@@ -8190,7 +8104,7 @@ const ChangePassword = /*#__PURE__*/Object.freeze({
8190
8104
  const PortalProfile_stories = {
8191
8105
  title: "Components/Microsite Profile",
8192
8106
  };
8193
- const defaultProps$9 = {
8107
+ const defaultProps$8 = {
8194
8108
  states: {
8195
8109
  success: false,
8196
8110
  loading: false,
@@ -8262,7 +8176,7 @@ const noCountry = {
8262
8176
  onChange: (e) => console.log(e),
8263
8177
  },
8264
8178
  };
8265
- const loadingProps$7 = {
8179
+ const loadingProps$6 = {
8266
8180
  states: {
8267
8181
  success: false,
8268
8182
  loading: true,
@@ -8334,7 +8248,7 @@ const disabledProps = {
8334
8248
  onChange: (e) => console.log(e),
8335
8249
  },
8336
8250
  };
8337
- const errorProps$8 = {
8251
+ const errorProps$7 = {
8338
8252
  states: {
8339
8253
  success: false,
8340
8254
  loading: false,
@@ -8406,11 +8320,11 @@ const successProps$4 = {
8406
8320
  onChange: (e) => console.log(e),
8407
8321
  },
8408
8322
  };
8409
- const Default$a = () => h(PortalProfileView, Object.assign({}, defaultProps$9));
8323
+ const Default$a = () => h(PortalProfileView, Object.assign({}, defaultProps$8));
8410
8324
  const DefaultNoCountry = () => h(PortalProfileView, Object.assign({}, noCountry));
8411
- const Loading$2 = () => h(PortalProfileView, Object.assign({}, loadingProps$7));
8325
+ const Loading$2 = () => h(PortalProfileView, Object.assign({}, loadingProps$6));
8412
8326
  const Disabled$1 = () => h(PortalProfileView, Object.assign({}, disabledProps));
8413
- const Error$3 = () => h(PortalProfileView, Object.assign({}, errorProps$8));
8327
+ const Error$3 = () => h(PortalProfileView, Object.assign({}, errorProps$7));
8414
8328
  const Success$1 = () => h(PortalProfileView, Object.assign({}, successProps$4));
8415
8329
 
8416
8330
  const PortalProfile = /*#__PURE__*/Object.freeze({
@@ -10165,7 +10079,7 @@ const portalTemplate = "<sqm-portal-frame>\n <a slot=\"header\" href=\"/\">\n
10165
10079
 
10166
10080
  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";
10167
10081
 
10168
- 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";
10082
+ 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";
10169
10083
 
10170
10084
  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";
10171
10085
 
@@ -10201,13 +10115,13 @@ const emailVerifiedTemplate = "<sqm-portal-verify-email></sqm-portal-verify-emai
10201
10115
 
10202
10116
  const emailVerificationTemplate = "<sqm-portal-protected-route redirect-to=\"/login\"></sqm-portal-protected-route>\n<sqm-portal-email-verification></sqm-portal-email-verification>\n";
10203
10117
 
10204
- 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";
10118
+ 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";
10205
10119
 
10206
10120
  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";
10207
10121
 
10208
10122
  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";
10209
10123
 
10210
- 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";
10124
+ 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";
10211
10125
 
10212
10126
  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";
10213
10127
 
@@ -10402,7 +10316,7 @@ const PortalFooter_stories = {
10402
10316
  scenario: scenario$f,
10403
10317
  },
10404
10318
  };
10405
- const defaultProps$a = {
10319
+ const defaultProps$9 = {
10406
10320
  supportEmail: "support@example.com",
10407
10321
  supportText: "For program support, contact {email}",
10408
10322
  hidePoweredBy: false,
@@ -10412,12 +10326,12 @@ const defaultProps$a = {
10412
10326
  paddingBottom: "large",
10413
10327
  paddingLeft: "large",
10414
10328
  };
10415
- const DefaultFooter = () => h(PortalFooterView, Object.assign({}, defaultProps$a));
10416
- const FooterWithTerms = () => (h(PortalFooterView, Object.assign({}, defaultProps$a, { termsLink: "https://example.com", termsText: "Terms and Conditions" })));
10417
- const FooterWithFAQ = () => (h(PortalFooterView, Object.assign({}, defaultProps$a, { faqLink: "https://example.com", faqText: "FAQ" })));
10418
- const FooterWithTermsAndFAQ = () => (h(PortalFooterView, Object.assign({}, defaultProps$a, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ" })));
10419
- const FooterNoPoweredBy = () => (h(PortalFooterView, Object.assign({}, defaultProps$a, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hidePoweredBy: true })));
10420
- const FooterNoSupportText = () => (h(PortalFooterView, Object.assign({}, defaultProps$a, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hideSupportText: true })));
10329
+ const DefaultFooter = () => h(PortalFooterView, Object.assign({}, defaultProps$9));
10330
+ const FooterWithTerms = () => (h(PortalFooterView, Object.assign({}, defaultProps$9, { termsLink: "https://example.com", termsText: "Terms and Conditions" })));
10331
+ const FooterWithFAQ = () => (h(PortalFooterView, Object.assign({}, defaultProps$9, { faqLink: "https://example.com", faqText: "FAQ" })));
10332
+ const FooterWithTermsAndFAQ = () => (h(PortalFooterView, Object.assign({}, defaultProps$9, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ" })));
10333
+ const FooterNoPoweredBy = () => (h(PortalFooterView, Object.assign({}, defaultProps$9, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hidePoweredBy: true })));
10334
+ const FooterNoSupportText = () => (h(PortalFooterView, Object.assign({}, defaultProps$9, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hideSupportText: true })));
10421
10335
 
10422
10336
  const PortalFooter = /*#__PURE__*/Object.freeze({
10423
10337
  __proto__: null,
@@ -10699,7 +10613,7 @@ const props$1 = {
10699
10613
  },
10700
10614
  },
10701
10615
  };
10702
- const errorProps$9 = {
10616
+ const errorProps$8 = {
10703
10617
  states: {
10704
10618
  registrationFormState: {
10705
10619
  validationErrors: {
@@ -10717,7 +10631,7 @@ const NameFields = () => {
10717
10631
  return h(NameFieldsView, Object.assign({}, props$1));
10718
10632
  };
10719
10633
  const NameFieldsWithErrors = () => {
10720
- return h(NameFieldsView, Object.assign({}, errorProps$9));
10634
+ return h(NameFieldsView, Object.assign({}, errorProps$8));
10721
10635
  };
10722
10636
 
10723
10637
  const NameFields$1 = /*#__PURE__*/Object.freeze({
@@ -10735,7 +10649,7 @@ const CheckboxField_stories = {
10735
10649
  scenario: scenario$j,
10736
10650
  },
10737
10651
  };
10738
- const defaultProps$b = {
10652
+ const defaultProps$a = {
10739
10653
  states: {
10740
10654
  registrationFormState: {
10741
10655
  validationErrors: {},
@@ -10743,6 +10657,7 @@ const defaultProps$b = {
10743
10657
  checked: false,
10744
10658
  },
10745
10659
  content: {
10660
+ checkboxName: "agree",
10746
10661
  checkboxLabel: "By signing up you agree to the {labelLink}",
10747
10662
  checkboxLabelLink: "https://example.com",
10748
10663
  checkboxLabelLinkText: "Terms and Conditions",
@@ -10775,35 +10690,35 @@ const defaultRegisterProps = {
10775
10690
  invalidEmailErrorMessage: "Must be a valid email address",
10776
10691
  },
10777
10692
  };
10778
- const Default$c = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$b))));
10779
- const DefaultChecked = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$b, { states: {
10780
- ...defaultProps$b.states,
10693
+ const Default$c = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$a))));
10694
+ const DefaultChecked = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$a, { states: {
10695
+ ...defaultProps$a.states,
10781
10696
  checked: true,
10782
10697
  } }))));
10783
- const CustomLabel = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$b, { content: {
10784
- ...defaultProps$b.content,
10698
+ const CustomLabel = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$a, { content: {
10699
+ ...defaultProps$a.content,
10785
10700
  checkboxLabel: "I Agree",
10786
10701
  } }))));
10787
- const Error$4 = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$b, { states: {
10788
- ...defaultProps$b.states,
10702
+ const Error$4 = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$a, { states: {
10703
+ ...defaultProps$a.states,
10789
10704
  registrationFormState: {
10790
10705
  validationErrors: {
10791
10706
  agree: "Must be checked",
10792
10707
  },
10793
10708
  },
10794
10709
  } }))));
10795
- const CustomError = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$b, { states: {
10796
- ...defaultProps$b.states,
10710
+ const CustomError = createHookStory(() => (h(CheckboxFieldView, Object.assign({}, defaultProps$a, { states: {
10711
+ ...defaultProps$a.states,
10797
10712
  registrationFormState: {
10798
10713
  validationErrors: {
10799
10714
  agree: "Must be checked",
10800
10715
  },
10801
10716
  },
10802
10717
  }, content: {
10803
- ...defaultProps$b.content,
10718
+ ...defaultProps$a.content,
10804
10719
  errorMessage: "This checkbox must be checked to continue",
10805
10720
  } }))));
10806
- const TermsAndConditions$2 = createHookStory(() => (h(PortalRegisterView, Object.assign({}, defaultRegisterProps, {
10721
+ const TermsAndConditions$1 = createHookStory(() => (h(PortalRegisterView, Object.assign({}, defaultRegisterProps, {
10807
10722
  //@ts-ignore
10808
10723
  content: {
10809
10724
  ...defaultRegisterProps.content,
@@ -10835,29 +10750,11 @@ const CheckboxField = /*#__PURE__*/Object.freeze({
10835
10750
  CustomLabel: CustomLabel,
10836
10751
  Error: Error$4,
10837
10752
  CustomError: CustomError,
10838
- TermsAndConditions: TermsAndConditions$2,
10753
+ TermsAndConditions: TermsAndConditions$1,
10839
10754
  TermsAndConditionsCustomLabel: TermsAndConditionsCustomLabel,
10840
10755
  TermsAndConditionsLongCustomLabel: TermsAndConditionsLongCustomLabel
10841
10756
  });
10842
10757
 
10843
- 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 ";
10844
-
10845
- const MarketingEmailsCheckbox_stories = {
10846
- title: "Components/Marketing Emails Checkbox",
10847
- parameters: {
10848
- scenario: scenario$k,
10849
- },
10850
- };
10851
- const Default$d = () => {
10852
- return h("sqm-marketing-emails-checkbox", null);
10853
- };
10854
-
10855
- const MarketingEmailsCheckbox = /*#__PURE__*/Object.freeze({
10856
- __proto__: null,
10857
- 'default': MarketingEmailsCheckbox_stories,
10858
- Default: Default$d
10859
- });
10860
-
10861
10758
  const UseCheckboxField_stories = {
10862
10759
  title: "Hooks / useCheckboxField",
10863
10760
  parameters: {
@@ -10887,7 +10784,7 @@ function setupGraphQL$9() {
10887
10784
  }, []);
10888
10785
  return { id, accountId };
10889
10786
  }
10890
- const TermsAndConditions$3 = createHookStory(() => {
10787
+ const TermsAndConditions$2 = createHookStory(() => {
10891
10788
  setupGraphQL$9();
10892
10789
  return (h("sqm-portal-register", null,
10893
10790
  h("div", { slot: "terms" },
@@ -10925,7 +10822,7 @@ const MissingName = createHookStory(() => {
10925
10822
  const UseCheckboxField = /*#__PURE__*/Object.freeze({
10926
10823
  __proto__: null,
10927
10824
  'default': UseCheckboxField_stories,
10928
- TermsAndConditions: TermsAndConditions$3,
10825
+ TermsAndConditions: TermsAndConditions$2,
10929
10826
  TermsAndConditionsWithLabel: TermsAndConditionsWithLabel,
10930
10827
  MultipleCheckboxes: MultipleCheckboxes,
10931
10828
  OptionalCheckboxes: OptionalCheckboxes,
@@ -10935,7 +10832,7 @@ const UseCheckboxField = /*#__PURE__*/Object.freeze({
10935
10832
  const DropdownField_stories = {
10936
10833
  title: "Components/Dropdown Field",
10937
10834
  };
10938
- const defaultProps$c = {
10835
+ const defaultProps$b = {
10939
10836
  states: {
10940
10837
  registrationFormState: {},
10941
10838
  },
@@ -10950,24 +10847,24 @@ const defaultProps$c = {
10950
10847
  ],
10951
10848
  },
10952
10849
  };
10953
- const Default$e = createHookStory(() => (h(DropdownFieldView, Object.assign({}, defaultProps$c))));
10954
- const CustomLabel$1 = createHookStory(() => (h(DropdownFieldView, Object.assign({}, defaultProps$c, { content: {
10955
- ...defaultProps$c.content,
10850
+ const Default$d = createHookStory(() => (h(DropdownFieldView, Object.assign({}, defaultProps$b))));
10851
+ const CustomLabel$1 = createHookStory(() => (h(DropdownFieldView, Object.assign({}, defaultProps$b, { content: {
10852
+ ...defaultProps$b.content,
10956
10853
  dropdownLabel: "Pick your favorite",
10957
10854
  } }))));
10958
- const Error$5 = createHookStory(() => (h(DropdownFieldView, Object.assign({}, defaultProps$c, { states: {
10959
- ...defaultProps$c.states,
10855
+ const Error$5 = createHookStory(() => (h(DropdownFieldView, Object.assign({}, defaultProps$b, { states: {
10856
+ ...defaultProps$b.states,
10960
10857
  registrationFormState: {
10961
10858
  validationErrors: {
10962
10859
  options: "Must select an option",
10963
10860
  },
10964
10861
  },
10965
10862
  } }))));
10966
- const CustomError$1 = createHookStory(() => (h(DropdownFieldView, Object.assign({}, defaultProps$c, { content: {
10967
- ...defaultProps$c.content,
10863
+ const CustomError$1 = createHookStory(() => (h(DropdownFieldView, Object.assign({}, defaultProps$b, { content: {
10864
+ ...defaultProps$b.content,
10968
10865
  errorMessage: "An option must be selected to continue",
10969
10866
  }, states: {
10970
- ...defaultProps$c.states,
10867
+ ...defaultProps$b.states,
10971
10868
  registrationFormState: {
10972
10869
  validationErrors: {
10973
10870
  options: "Must select an option",
@@ -10978,7 +10875,7 @@ const CustomError$1 = createHookStory(() => (h(DropdownFieldView, Object.assign(
10978
10875
  const DropdownField = /*#__PURE__*/Object.freeze({
10979
10876
  __proto__: null,
10980
10877
  'default': DropdownField_stories,
10981
- Default: Default$e,
10878
+ Default: Default$d,
10982
10879
  CustomLabel: CustomLabel$1,
10983
10880
  Error: Error$5,
10984
10881
  CustomError: CustomError$1
@@ -11043,15 +10940,15 @@ const UseDropdownField = /*#__PURE__*/Object.freeze({
11043
10940
  MissingName: MissingName$1
11044
10941
  });
11045
10942
 
11046
- 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 | |";
10943
+ 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 | |";
11047
10944
 
11048
10945
  const InputField_stories = {
11049
10946
  title: "Components/Input Field",
11050
10947
  parameters: {
11051
- scenario: scenario$l,
10948
+ scenario: scenario$k,
11052
10949
  },
11053
10950
  };
11054
- const defaultProps$d = {
10951
+ const defaultProps$c = {
11055
10952
  states: {
11056
10953
  registrationFormState: {
11057
10954
  validationErrors: {},
@@ -11088,21 +10985,21 @@ const defaultRegisterProps$1 = {
11088
10985
  invalidEmailErrorMessage: "Must be a valid email address",
11089
10986
  },
11090
10987
  };
11091
- const Default$f = () => h(InputFieldView, Object.assign({}, defaultProps$d));
11092
- const CustomLabel$2 = () => (h(InputFieldView, Object.assign({}, defaultProps$d, { content: { ...defaultProps$d.content, fieldLabel: "My Label" } })));
11093
- const Error$6 = () => (h(InputFieldView, Object.assign({}, defaultProps$d, { states: {
11094
- ...defaultProps$d.states,
10988
+ const Default$e = () => h(InputFieldView, Object.assign({}, defaultProps$c));
10989
+ const CustomLabel$2 = () => (h(InputFieldView, Object.assign({}, defaultProps$c, { content: { ...defaultProps$c.content, fieldLabel: "My Label" } })));
10990
+ const Error$6 = () => (h(InputFieldView, Object.assign({}, defaultProps$c, { states: {
10991
+ ...defaultProps$c.states,
11095
10992
  registrationFormState: {
11096
10993
  validationErrors: {
11097
10994
  field: "Cannot be empty",
11098
10995
  },
11099
10996
  },
11100
10997
  } })));
11101
- const CustomError$2 = () => (h(InputFieldView, Object.assign({}, defaultProps$d, { content: {
11102
- ...defaultProps$d.content,
10998
+ const CustomError$2 = () => (h(InputFieldView, Object.assign({}, defaultProps$c, { content: {
10999
+ ...defaultProps$c.content,
11103
11000
  errorMessage: "A value must be entered to continue",
11104
11001
  }, states: {
11105
- ...defaultProps$d.states,
11002
+ ...defaultProps$c.states,
11106
11003
  registrationFormState: {
11107
11004
  validationErrors: {
11108
11005
  field: "Cannot be empty",
@@ -11110,27 +11007,27 @@ const CustomError$2 = () => (h(InputFieldView, Object.assign({}, defaultProps$d,
11110
11007
  },
11111
11008
  } })));
11112
11009
  const DateType = () => {
11113
- return (h(InputFieldView, Object.assign({}, defaultProps$d, { content: {
11114
- ...defaultProps$d.content,
11010
+ return (h(InputFieldView, Object.assign({}, defaultProps$c, { content: {
11011
+ ...defaultProps$c.content,
11115
11012
  fieldLabel: "Date",
11116
11013
  fieldType: "date",
11117
11014
  } })));
11118
11015
  };
11119
11016
  const TelType = () => {
11120
- return (h(InputFieldView, Object.assign({}, defaultProps$d, { content: {
11121
- ...defaultProps$d.content,
11017
+ return (h(InputFieldView, Object.assign({}, defaultProps$c, { content: {
11018
+ ...defaultProps$c.content,
11122
11019
  fieldLabel: "Phone Number",
11123
11020
  fieldType: "tel",
11124
11021
  } })));
11125
11022
  };
11126
11023
  const RegistrationField = () => (h(PortalRegisterView, Object.assign({}, defaultRegisterProps$1, { content: {
11127
11024
  ...defaultRegisterProps$1.content,
11128
- formData: h(InputFieldView, Object.assign({}, defaultProps$d)),
11025
+ formData: h(InputFieldView, Object.assign({}, defaultProps$c)),
11129
11026
  } })));
11130
11027
  const RegistrationFieldCustomLabel = () => (h(PortalRegisterView, Object.assign({}, defaultRegisterProps$1, { content: {
11131
11028
  ...defaultRegisterProps$1.content,
11132
- formData: (h(InputFieldView, Object.assign({}, defaultProps$d, { content: {
11133
- ...defaultProps$d.content,
11029
+ formData: (h(InputFieldView, Object.assign({}, defaultProps$c, { content: {
11030
+ ...defaultProps$c.content,
11134
11031
  fieldLabel: "Data",
11135
11032
  } }))),
11136
11033
  } })));
@@ -11138,7 +11035,7 @@ const RegistrationFieldCustomLabel = () => (h(PortalRegisterView, Object.assign(
11138
11035
  const InputField = /*#__PURE__*/Object.freeze({
11139
11036
  __proto__: null,
11140
11037
  'default': InputField_stories,
11141
- Default: Default$f,
11038
+ Default: Default$e,
11142
11039
  CustomLabel: CustomLabel$2,
11143
11040
  Error: Error$6,
11144
11041
  CustomError: CustomError$2,
@@ -11151,7 +11048,7 @@ const InputField = /*#__PURE__*/Object.freeze({
11151
11048
  const UseInputField_stories = {
11152
11049
  title: "Hooks / useInputField",
11153
11050
  parameters: {
11154
- scenario: scenario$l,
11051
+ scenario: scenario$k,
11155
11052
  },
11156
11053
  };
11157
11054
  function setupGraphQL$b() {
@@ -11233,12 +11130,12 @@ const UseInputField = /*#__PURE__*/Object.freeze({
11233
11130
  MissingName: MissingName$2
11234
11131
  });
11235
11132
 
11236
- 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 |";
11133
+ 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 |";
11237
11134
 
11238
11135
  const RewardExchangeList_stories = {
11239
11136
  title: "Components/Reward Exchange List",
11240
11137
  parameters: {
11241
- scenario: scenario$m,
11138
+ scenario: scenario$l,
11242
11139
  },
11243
11140
  };
11244
11141
  const StoryBase = (props) => () => {
@@ -11286,12 +11183,12 @@ const RewardExchangeList = /*#__PURE__*/Object.freeze({
11286
11183
  Empty: Empty$2
11287
11184
  });
11288
11185
 
11289
- 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";
11186
+ 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";
11290
11187
 
11291
11188
  const ProgramExplainer_stories = {
11292
11189
  title: "Components/Program Explainer",
11293
11190
  parameters: {
11294
- scenario: scenario$n,
11191
+ scenario: scenario$m,
11295
11192
  },
11296
11193
  };
11297
11194
  const OneStep = () => {
@@ -11347,12 +11244,12 @@ const ProgramExplainer = /*#__PURE__*/Object.freeze({
11347
11244
  ProgramExplainerGeneric: ProgramExplainerGeneric
11348
11245
  });
11349
11246
 
11350
- 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";
11247
+ 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";
11351
11248
 
11352
11249
  const ProgramExplainerStep_stories = {
11353
11250
  title: "Components/Program Explainer Step",
11354
11251
  parameters: {
11355
- scenario: scenario$o,
11252
+ scenario: scenario$n,
11356
11253
  },
11357
11254
  };
11358
11255
  const ProgramExplainerStep = () => {
@@ -11369,12 +11266,12 @@ const ProgramExplainerStep$1 = /*#__PURE__*/Object.freeze({
11369
11266
  ProgramExplainerStepCustom: ProgramExplainerStepCustom
11370
11267
  });
11371
11268
 
11372
- 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\"";
11269
+ 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\"";
11373
11270
 
11374
11271
  const SqmBrand_stories = {
11375
11272
  title: "Components/Brand",
11376
11273
  parameters: {
11377
- scenario: scenario$p,
11274
+ scenario: scenario$o,
11378
11275
  },
11379
11276
  };
11380
11277
  const SampleComponents = () => (h("div", { style: { padding: "10px", border: "5px solid #EEE" } },
@@ -11475,12 +11372,12 @@ const BrandStories = /*#__PURE__*/Object.freeze({
11475
11372
  Fonts: Fonts
11476
11373
  });
11477
11374
 
11478
- 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 |";
11375
+ 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 |";
11479
11376
 
11480
11377
  const CardFeed_stories = {
11481
11378
  title: "Components/Card Feed",
11482
11379
  parameters: {
11483
- scenario: scenario$q,
11380
+ scenario: scenario$p,
11484
11381
  },
11485
11382
  };
11486
11383
  const oneAction$1 = {
@@ -11717,12 +11614,12 @@ const CardFeed = /*#__PURE__*/Object.freeze({
11717
11614
  CardFeedGeneric: CardFeedGeneric
11718
11615
  });
11719
11616
 
11720
- 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";
11617
+ 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";
11721
11618
 
11722
11619
  const PortalContainer_stories = {
11723
11620
  title: "Components/Microsite Container",
11724
11621
  parameters: {
11725
- scenario: scenario$r,
11622
+ scenario: scenario$q,
11726
11623
  },
11727
11624
  };
11728
11625
  const TooWideColumn = () => (h("div", { style: { width: "200px", border: "1px dashed grey" } },
@@ -11890,11 +11787,11 @@ const scenario3 = "@author:derek @owner:derek\nFeature: Reward Table Status Colu
11890
11787
 
11891
11788
  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";
11892
11789
 
11893
- const scenario$s = scenario1 + scenario2 + scenario3 + scenario4;
11790
+ const scenario$r = scenario1 + scenario2 + scenario3 + scenario4;
11894
11791
  const RewardsTableCell_stories = {
11895
11792
  title: "Components/Rewards Table Cell",
11896
11793
  parameters: {
11897
- scenario: scenario$s,
11794
+ scenario: scenario$r,
11898
11795
  },
11899
11796
  };
11900
11797
  const rewardsData$1 = {
@@ -12343,12 +12240,12 @@ const RewardsTableCell = /*#__PURE__*/Object.freeze({
12343
12240
  EmptyCell: EmptyCell$2
12344
12241
  });
12345
12242
 
12346
- 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";
12243
+ 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";
12347
12244
 
12348
12245
  const RewardsTable_stories = {
12349
12246
  title: "Components/Rewards Table",
12350
12247
  parameters: {
12351
- scenario: scenario$t,
12248
+ scenario: scenario$s,
12352
12249
  },
12353
12250
  };
12354
12251
  const loadingElement$1 = (h("div", { slot: "loading", style: { display: "contents" } },
@@ -12660,12 +12557,12 @@ const UseReferralTable = /*#__PURE__*/Object.freeze({
12660
12557
  ReferralTableFr: ReferralTableFr
12661
12558
  });
12662
12559
 
12663
- 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 |";
12560
+ 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 |";
12664
12561
 
12665
12562
  const HeroImage_stories = {
12666
12563
  title: "Components/Hero Image",
12667
12564
  parameters: {
12668
- scenario: scenario$u,
12565
+ scenario: scenario$t,
12669
12566
  },
12670
12567
  };
12671
12568
  const OverlayHeader = () => {
@@ -12738,12 +12635,12 @@ const HeroImage = /*#__PURE__*/Object.freeze({
12738
12635
  ColumnsCustomColors: ColumnsCustomColors
12739
12636
  });
12740
12637
 
12741
- 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 |";
12638
+ 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 |";
12742
12639
 
12743
12640
  const ReferralCard_stories = {
12744
12641
  title: "Components/Referral Card",
12745
12642
  parameters: {
12746
- scenario: scenario$v,
12643
+ scenario: scenario$u,
12747
12644
  },
12748
12645
  };
12749
12646
  const media = (slot) => {
@@ -12761,6 +12658,21 @@ const sharebutton = (slot) => {
12761
12658
  h("sqm-share-button", { medium: "facebook" }, "Share on Facebook"),
12762
12659
  h("sqm-share-button", { medium: "twitter" }, "Post about us on X"))));
12763
12660
  };
12661
+ const shareButtonsWithPromoCodes = (slot) => {
12662
+ return (h("sqm-portal-container", { gap: "large", slot: slot },
12663
+ h("sqm-text", null, "Choose how you want to share:"),
12664
+ h("sqm-text", null,
12665
+ h("sub", null, "Share with your friends:"),
12666
+ h("sqm-share-code", null),
12667
+ h("sqm-share-link", null)),
12668
+ h("sqm-portal-container", { gap: "x-small" },
12669
+ h("sqm-share-button", { medium: "email" }, "Share via email"),
12670
+ h("sqm-share-button", { medium: "facebook" }, "Share on Facebook"),
12671
+ h("sqm-share-button", { medium: "twitter" }, "Post about us on X"),
12672
+ h("sqm-portal-container", { gap: "x-small" },
12673
+ h("span", { style: { textAlign: "center", color: "var(--sl-color-gray-500)" } }, "You have copied this code before"),
12674
+ h("sqm-pagination", null)))));
12675
+ };
12764
12676
  const timeline = (slot, count) => {
12765
12677
  return (h("sqm-timeline", { slot: slot, icon: "circle" },
12766
12678
  count > 0 && (h("sqm-timeline-entry", { reward: "75", unit: "points", desc: "Your friends signs up for a free trial" })),
@@ -12783,6 +12695,11 @@ const TimelineAndShareButtons = () => {
12783
12695
  timeline("left", 3),
12784
12696
  sharebutton("right")));
12785
12697
  };
12698
+ const OneTimeUsePromoCodes = () => {
12699
+ return (h("sqm-referral-card", null,
12700
+ timeline("left", 4),
12701
+ shareButtonsWithPromoCodes("right")));
12702
+ };
12786
12703
  const StartAlignment = () => {
12787
12704
  return (h("sqm-referral-card", { "vertical-alignment": "start" },
12788
12705
  timeline("left", 4),
@@ -12859,6 +12776,7 @@ const ReferralCard = /*#__PURE__*/Object.freeze({
12859
12776
  ImageAndShareButtons: ImageAndShareButtons,
12860
12777
  LimitWidth: LimitWidth,
12861
12778
  TimelineAndShareButtons: TimelineAndShareButtons,
12779
+ OneTimeUsePromoCodes: OneTimeUsePromoCodes,
12862
12780
  StartAlignment: StartAlignment,
12863
12781
  CenterAlignment: CenterAlignment,
12864
12782
  EndAlignment: EndAlignment,
@@ -12876,11 +12794,11 @@ const scenarioTimeline = "@author:derek\n@owner:kutay\nFeature: Timeline\n\n
12876
12794
 
12877
12795
  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";
12878
12796
 
12879
- const scenario$w = scenarioTimeline + scenarioTimelineEntry;
12797
+ const scenario$v = scenarioTimeline + scenarioTimelineEntry;
12880
12798
  const Timeline_stories = {
12881
12799
  title: "Components/Timeline",
12882
12800
  parameters: {
12883
- scenario: scenario$w,
12801
+ scenario: scenario$v,
12884
12802
  },
12885
12803
  };
12886
12804
  const TimelineWith1Reward = () => {
@@ -12953,12 +12871,12 @@ const Timeline = /*#__PURE__*/Object.freeze({
12953
12871
  TimelineWith4Rewards: TimelineWith4Rewards
12954
12872
  });
12955
12873
 
12956
- 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";
12874
+ 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";
12957
12875
 
12958
12876
  const Image_stories = {
12959
12877
  title: "Components/Image",
12960
12878
  parameters: {
12961
- scenario: scenario$x,
12879
+ scenario: scenario$w,
12962
12880
  },
12963
12881
  };
12964
12882
  const Image = () => {
@@ -12991,12 +12909,12 @@ const Image$1 = /*#__PURE__*/Object.freeze({
12991
12909
  MinimumHeight: MinimumHeight
12992
12910
  });
12993
12911
 
12994
- 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 |";
12912
+ 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 |";
12995
12913
 
12996
12914
  const TitledSection_stories = {
12997
12915
  title: "Components/Titled Section",
12998
12916
  parameters: {
12999
- scenario: scenario$y,
12917
+ scenario: scenario$x,
13000
12918
  },
13001
12919
  };
13002
12920
  const AlignLeft = () => {
@@ -13392,12 +13310,12 @@ const Scroll = /*#__PURE__*/Object.freeze({
13392
13310
  ShoelaceProps: ShoelaceProps
13393
13311
  });
13394
13312
 
13395
- 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";
13313
+ 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";
13396
13314
 
13397
13315
  const Tabs_stories = {
13398
13316
  title: "Components/Tabs",
13399
13317
  parameters: {
13400
- scenario: scenario$z,
13318
+ scenario: scenario$y,
13401
13319
  },
13402
13320
  };
13403
13321
  const SimpleTabs = () => (h("div", { style: { maxWidth: "700px", margin: "auto" }, innerHTML: `
@@ -13897,12 +13815,12 @@ const Tabs = /*#__PURE__*/Object.freeze({
13897
13815
  RightTabs: RightTabs
13898
13816
  });
13899
13817
 
13900
- 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";
13818
+ 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";
13901
13819
 
13902
13820
  const ShareCode_stories = {
13903
13821
  title: "Components/Share Code",
13904
13822
  parameters: {
13905
- scenario: scenario$A,
13823
+ scenario: scenario$z,
13906
13824
  },
13907
13825
  };
13908
13826
  const ShareCode = () => {
@@ -13960,6 +13878,82 @@ const ShareCode$1 = /*#__PURE__*/Object.freeze({
13960
13878
  Error: Error$7
13961
13879
  });
13962
13880
 
13881
+ 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";
13882
+
13883
+ const ReferralCode_stories = {
13884
+ title: "Components/Referral Code",
13885
+ parameters: {
13886
+ scenario: scenario$A,
13887
+ },
13888
+ };
13889
+ const ReferralCode = () => {
13890
+ return (h("sqm-referral-code", { tooltiptext: "Copied to Clipboard" }));
13891
+ };
13892
+ const ShowNotificationText = () => {
13893
+ return (h("sqm-referral-code", { showNotificationText: true, notificationText: "You've copied this code before" }));
13894
+ };
13895
+ const ShowNotificationTextWithButton = () => {
13896
+ return (h("sqm-referral-code", { showNotificationText: true, notificationText: "You've copied this code before", buttonStyle: "button-outside" }));
13897
+ };
13898
+ const ShowNotificationTextWithButtonBelow = () => {
13899
+ return (h("sqm-referral-code", { showNotificationText: true, notificationText: "You've copied this code before", buttonStyle: "button-below" }));
13900
+ };
13901
+ const CustomTooltipText$1 = () => {
13902
+ return (h("sqm-referral-code", { tooltiptext: "CUSTOM TOOLTIP TEXT" }));
13903
+ };
13904
+ const TextAlignCenter$2 = () => {
13905
+ return h("sqm-referral-code", { textAlign: "center" });
13906
+ };
13907
+ const TextAlignRight$2 = () => {
13908
+ return h("sqm-referral-code", { textAlign: "right" });
13909
+ };
13910
+ const CustomTooltipDuration$1 = () => {
13911
+ return (h("sqm-referral-code", { tooltiplifespan: 5000, tooltiptext: "CUSTOM TOOLTIP TEXT" }));
13912
+ };
13913
+ const CopyButton$2 = () => {
13914
+ return (h(CopyTextView, Object.assign({}, {
13915
+ copyString: "https://noah.example.com",
13916
+ open: false,
13917
+ tooltiptext: "Copied!",
13918
+ isCopyIcon: false,
13919
+ buttonStyle: "button-outside",
13920
+ })));
13921
+ };
13922
+ const CopyButtonBelow$2 = () => {
13923
+ return (h(CopyTextView, Object.assign({}, {
13924
+ copyString: "https://noah.example.com",
13925
+ open: false,
13926
+ tooltiptext: "Copied!",
13927
+ buttonStyle: "button-below",
13928
+ })));
13929
+ };
13930
+ const Error$8 = () => {
13931
+ const props = {
13932
+ copyString: "https://noah.example.com",
13933
+ disabled: true,
13934
+ open: true,
13935
+ tooltiptext: "Copied!",
13936
+ error: true,
13937
+ };
13938
+ return h(CopyTextView, Object.assign({}, props));
13939
+ };
13940
+
13941
+ const ReferralCode$1 = /*#__PURE__*/Object.freeze({
13942
+ __proto__: null,
13943
+ 'default': ReferralCode_stories,
13944
+ ReferralCode: ReferralCode,
13945
+ ShowNotificationText: ShowNotificationText,
13946
+ ShowNotificationTextWithButton: ShowNotificationTextWithButton,
13947
+ ShowNotificationTextWithButtonBelow: ShowNotificationTextWithButtonBelow,
13948
+ CustomTooltipText: CustomTooltipText$1,
13949
+ TextAlignCenter: TextAlignCenter$2,
13950
+ TextAlignRight: TextAlignRight$2,
13951
+ CustomTooltipDuration: CustomTooltipDuration$1,
13952
+ CopyButton: CopyButton$2,
13953
+ CopyButtonBelow: CopyButtonBelow$2,
13954
+ Error: Error$8
13955
+ });
13956
+
13963
13957
  // import scenario from "./ShareCode.feature";
13964
13958
  const EmailRegistration_stories = {
13965
13959
  title: "Components/Email Registration",
@@ -13967,7 +13961,7 @@ const EmailRegistration_stories = {
13967
13961
  // scenario,
13968
13962
  },
13969
13963
  };
13970
- const defaultProps$e = {
13964
+ const defaultProps$d = {
13971
13965
  states: {
13972
13966
  error: "",
13973
13967
  loading: false,
@@ -13986,59 +13980,59 @@ const defaultProps$e = {
13986
13980
  fraudErrorMessageTitle: "Looks like you tried referring yourself",
13987
13981
  },
13988
13982
  };
13989
- const Default$g = () => h(EmailRegistrationView, Object.assign({}, defaultProps$e));
13983
+ const Default$f = () => h(EmailRegistrationView, Object.assign({}, defaultProps$d));
13990
13984
  const HasFirstNameLastName = () => (h(EmailRegistrationView, Object.assign({}, {
13991
- ...defaultProps$e,
13985
+ ...defaultProps$d,
13992
13986
  content: {
13993
- ...defaultProps$e.content,
13987
+ ...defaultProps$d.content,
13994
13988
  includeName: true,
13995
13989
  },
13996
13990
  })));
13997
13991
  const WithSlots = () => (h(EmailRegistrationView, Object.assign({}, {
13998
- ...defaultProps$e,
13992
+ ...defaultProps$d,
13999
13993
  content: {
14000
- ...defaultProps$e.content,
13994
+ ...defaultProps$d.content,
14001
13995
  topSlot: h("div", null, "Hello this is the top slot"),
14002
13996
  bottomSlot: h("div", null, "Hello this is the bottom slot"),
14003
13997
  },
14004
13998
  })));
14005
13999
  const NoBorder$1 = () => (h(EmailRegistrationView, Object.assign({}, {
14006
- ...defaultProps$e,
14000
+ ...defaultProps$d,
14007
14001
  content: {
14008
- ...defaultProps$e.content,
14002
+ ...defaultProps$d.content,
14009
14003
  hideBorder: true,
14010
14004
  },
14011
14005
  })));
14012
14006
  const BackgroundColor$2 = () => (h(EmailRegistrationView, Object.assign({}, {
14013
- ...defaultProps$e,
14007
+ ...defaultProps$d,
14014
14008
  content: {
14015
- ...defaultProps$e.content,
14009
+ ...defaultProps$d.content,
14016
14010
  backgroundColor: "aquamarine",
14017
14011
  },
14018
14012
  })));
14019
14013
  const Loading$4 = () => (h(EmailRegistrationView, Object.assign({}, {
14020
- ...defaultProps$e,
14014
+ ...defaultProps$d,
14021
14015
  states: {
14022
14016
  error: "",
14023
14017
  loading: true,
14024
14018
  },
14025
14019
  })));
14026
- const Error$8 = () => (h(EmailRegistrationView, Object.assign({}, {
14027
- ...defaultProps$e,
14020
+ const Error$9 = () => (h(EmailRegistrationView, Object.assign({}, {
14021
+ ...defaultProps$d,
14028
14022
  states: {
14029
14023
  error: "Something went wrong. Please try again.",
14030
14024
  loading: false,
14031
14025
  },
14032
14026
  })));
14033
14027
  const FraudError = () => (h(EmailRegistrationView, Object.assign({}, {
14034
- ...defaultProps$e,
14028
+ ...defaultProps$d,
14035
14029
  states: {
14036
14030
  error: "FRAUD",
14037
14031
  loading: false,
14038
14032
  },
14039
14033
  })));
14040
14034
  const EmptyEmailError = () => (h(EmailRegistrationView, Object.assign({}, {
14041
- ...defaultProps$e,
14035
+ ...defaultProps$d,
14042
14036
  states: {
14043
14037
  error: "Something went wrong. Please try again.",
14044
14038
  loading: false,
@@ -14051,13 +14045,13 @@ const EmptyEmailError = () => (h(EmailRegistrationView, Object.assign({}, {
14051
14045
  const EmailRegistration = /*#__PURE__*/Object.freeze({
14052
14046
  __proto__: null,
14053
14047
  'default': EmailRegistration_stories,
14054
- Default: Default$g,
14048
+ Default: Default$f,
14055
14049
  HasFirstNameLastName: HasFirstNameLastName,
14056
14050
  WithSlots: WithSlots,
14057
14051
  NoBorder: NoBorder$1,
14058
14052
  BackgroundColor: BackgroundColor$2,
14059
14053
  Loading: Loading$4,
14060
- Error: Error$8,
14054
+ Error: Error$9,
14061
14055
  FraudError: FraudError,
14062
14056
  EmptyEmailError: EmptyEmailError
14063
14057
  });
@@ -14070,7 +14064,7 @@ const CouponCode_stories = {
14070
14064
  scenario: scenario$B,
14071
14065
  },
14072
14066
  };
14073
- const defaultProps$f = {
14067
+ const defaultProps$e = {
14074
14068
  tooltiptext: "Copied to Clipboard",
14075
14069
  copyString: "THANKSJANE125uv125",
14076
14070
  open: false,
@@ -14082,69 +14076,69 @@ const defaultProps$f = {
14082
14076
  const CouponCode = () => {
14083
14077
  return h("sqm-coupon-code", { tooltiptext: "Copied to Clipboard" });
14084
14078
  };
14085
- const CustomTooltipText$1 = () => {
14079
+ const CustomTooltipText$2 = () => {
14086
14080
  return h("sqm-coupon-code", { tooltiptext: "CUSTOM TOOLTIP TEXT" });
14087
14081
  };
14088
- const CustomTooltipDuration$1 = () => {
14082
+ const CustomTooltipDuration$2 = () => {
14089
14083
  return (h("sqm-coupon-code", { tooltiplifespan: 5000, tooltiptext: "CUSTOM TOOLTIP TEXT" }));
14090
14084
  };
14091
- const TextAlignCenter$2 = () => {
14085
+ const TextAlignCenter$3 = () => {
14092
14086
  return h("sqm-coupon-code", { textAlign: "center" });
14093
14087
  };
14094
- const TextAlignRight$2 = () => {
14088
+ const TextAlignRight$3 = () => {
14095
14089
  return h("sqm-coupon-code", { textAlign: "right" });
14096
14090
  };
14097
- const CopyButton$2 = () => {
14098
- return (h("sqm-coupon-code", Object.assign({}, defaultProps$f, { buttonStyle: "button-outside" })));
14091
+ const CopyButton$3 = () => {
14092
+ return (h("sqm-coupon-code", Object.assign({}, defaultProps$e, { buttonStyle: "button-outside" })));
14099
14093
  };
14100
14094
  const CopyButtonCustomLabel = () => {
14101
- return (h("sqm-coupon-code", Object.assign({}, defaultProps$f, { buttonStyle: "button-outside", "copy-button-label": "test long custom label" })));
14095
+ return (h("sqm-coupon-code", Object.assign({}, defaultProps$e, { buttonStyle: "button-outside", "copy-button-label": "test long custom label" })));
14102
14096
  };
14103
- const CopyButtonBelow$2 = () => {
14104
- return (h("sqm-coupon-code", Object.assign({}, defaultProps$f, { buttonStyle: "button-below" })));
14097
+ const CopyButtonBelow$3 = () => {
14098
+ return (h("sqm-coupon-code", Object.assign({}, defaultProps$e, { buttonStyle: "button-below" })));
14105
14099
  };
14106
14100
  const CopyButtonBelowCustomLabel = () => {
14107
- return (h("sqm-coupon-code", Object.assign({}, defaultProps$f, { buttonStyle: "button-below", "copy-button-label": "test long custom label" })));
14101
+ return (h("sqm-coupon-code", Object.assign({}, defaultProps$e, { buttonStyle: "button-below", "copy-button-label": "test long custom label" })));
14108
14102
  };
14109
14103
  const Loading$5 = () => {
14110
- return h(CouponCodeView, Object.assign({}, defaultProps$f, { loading: true }));
14104
+ return h(CouponCodeView, Object.assign({}, defaultProps$e, { loading: true }));
14111
14105
  };
14112
14106
  const CopyButtonLoading = () => {
14113
- return (h(CouponCodeView, Object.assign({}, defaultProps$f, { buttonStyle: "button-outside", loading: true })));
14107
+ return (h(CouponCodeView, Object.assign({}, defaultProps$e, { buttonStyle: "button-outside", loading: true })));
14114
14108
  };
14115
14109
  const CopyButtonBelowLoading = () => {
14116
- return (h(CouponCodeView, Object.assign({}, defaultProps$f, { buttonStyle: "button-below", loading: true })));
14110
+ return (h(CouponCodeView, Object.assign({}, defaultProps$e, { buttonStyle: "button-below", loading: true })));
14117
14111
  };
14118
14112
  const ErrorGeneric = () => {
14119
- return (h(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." })));
14113
+ return (h(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." })));
14120
14114
  };
14121
14115
  const ErrorPending = () => {
14122
- return (h(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!" })));
14116
+ return (h(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!" })));
14123
14117
  };
14124
14118
  const ErrorFullfillment = () => {
14125
- return (h(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." })));
14119
+ return (h(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." })));
14126
14120
  };
14127
14121
  const ErrorCancelled = () => {
14128
- return (h(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." })));
14122
+ return (h(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." })));
14129
14123
  };
14130
14124
  const ErrorExpired = () => {
14131
- return (h(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." })));
14125
+ return (h(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." })));
14132
14126
  };
14133
14127
  const ErrorRedeemed = () => {
14134
- return (h(CouponCodeView, Object.assign({}, defaultProps$f, { errorType: "success", error: true, errorText: "Looks like you\u2019ve already redeemed this code." })));
14128
+ return (h(CouponCodeView, Object.assign({}, defaultProps$e, { errorType: "success", error: true, errorText: "Looks like you\u2019ve already redeemed this code." })));
14135
14129
  };
14136
14130
 
14137
14131
  const CouponCode$1 = /*#__PURE__*/Object.freeze({
14138
14132
  __proto__: null,
14139
14133
  'default': CouponCode_stories,
14140
14134
  CouponCode: CouponCode,
14141
- CustomTooltipText: CustomTooltipText$1,
14142
- CustomTooltipDuration: CustomTooltipDuration$1,
14143
- TextAlignCenter: TextAlignCenter$2,
14144
- TextAlignRight: TextAlignRight$2,
14145
- CopyButton: CopyButton$2,
14135
+ CustomTooltipText: CustomTooltipText$2,
14136
+ CustomTooltipDuration: CustomTooltipDuration$2,
14137
+ TextAlignCenter: TextAlignCenter$3,
14138
+ TextAlignRight: TextAlignRight$3,
14139
+ CopyButton: CopyButton$3,
14146
14140
  CopyButtonCustomLabel: CopyButtonCustomLabel,
14147
- CopyButtonBelow: CopyButtonBelow$2,
14141
+ CopyButtonBelow: CopyButtonBelow$3,
14148
14142
  CopyButtonBelowCustomLabel: CopyButtonBelowCustomLabel,
14149
14143
  Loading: Loading$5,
14150
14144
  CopyButtonLoading: CopyButtonLoading,
@@ -14165,21 +14159,21 @@ const LogoutCurrentUser_stories = {
14165
14159
  scenario: scenario$C,
14166
14160
  },
14167
14161
  };
14168
- const defaultProps$g = {
14162
+ const defaultProps$f = {
14169
14163
  filledInEmailText: "Currently showing referral data for noah.clarke@saasquatch.com",
14170
14164
  onSwitchClick: () => console.log("clicked"),
14171
14165
  switchUserText: "not you?",
14172
14166
  loading: false,
14173
14167
  emailErrorText: "Error fetching email",
14174
14168
  };
14175
- const Default$h = () => {
14176
- return h(LogoutCurrentUserView, Object.assign({}, defaultProps$g));
14169
+ const Default$g = () => {
14170
+ return h(LogoutCurrentUserView, Object.assign({}, defaultProps$f));
14177
14171
  };
14178
14172
 
14179
14173
  const LogoutCurrentUser = /*#__PURE__*/Object.freeze({
14180
14174
  __proto__: null,
14181
14175
  'default': LogoutCurrentUser_stories,
14182
- Default: Default$h
14176
+ Default: Default$g
14183
14177
  });
14184
14178
 
14185
14179
  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 |";
@@ -14190,22 +14184,22 @@ const LinkButton_stories = {
14190
14184
  scenario: scenario$D,
14191
14185
  },
14192
14186
  };
14193
- const defaultProps$h = {
14187
+ const defaultProps$g = {
14194
14188
  link: "https://example.com",
14195
14189
  openInNewTab: false,
14196
14190
  buttonText: "Button Text",
14197
14191
  };
14198
- const Default$i = () => {
14199
- return h("sqm-link-button", Object.assign({}, defaultProps$h));
14192
+ const Default$h = () => {
14193
+ return h("sqm-link-button", Object.assign({}, defaultProps$g));
14200
14194
  };
14201
14195
  const OpenInNewTab = () => {
14202
- return (h("sqm-link-button", Object.assign({}, { ...defaultProps$h, openInNewTab: true })));
14196
+ return (h("sqm-link-button", Object.assign({}, { ...defaultProps$g, openInNewTab: true })));
14203
14197
  };
14204
14198
 
14205
14199
  const LinkButton = /*#__PURE__*/Object.freeze({
14206
14200
  __proto__: null,
14207
14201
  'default': LinkButton_stories,
14208
- Default: Default$i,
14202
+ Default: Default$h,
14209
14203
  OpenInNewTab: OpenInNewTab
14210
14204
  });
14211
14205
 
@@ -14215,7 +14209,7 @@ const CloseButton_stories = {
14215
14209
  // scenario,
14216
14210
  },
14217
14211
  };
14218
- const defaultProps$i = {};
14212
+ const defaultProps$h = {};
14219
14213
  const containerStyles = {
14220
14214
  position: "relative",
14221
14215
  width: "500px",
@@ -14223,22 +14217,22 @@ const containerStyles = {
14223
14217
  border: "1px solid black",
14224
14218
  padding: "25px",
14225
14219
  };
14226
- const Default$j = () => {
14227
- return h(CloseButtonView, Object.assign({}, defaultProps$i));
14220
+ const Default$i = () => {
14221
+ return h(CloseButtonView, Object.assign({}, defaultProps$h));
14228
14222
  };
14229
14223
  const InAContainer = () => {
14230
14224
  return (h("div", { style: containerStyles },
14231
- h(CloseButtonView, Object.assign({}, defaultProps$i))));
14225
+ h(CloseButtonView, Object.assign({}, defaultProps$h))));
14232
14226
  };
14233
14227
  const CustomColor$1 = () => {
14234
14228
  return (h("div", { style: containerStyles },
14235
- h(CloseButtonView, Object.assign({}, { ...defaultProps$i, color: "blue" }))));
14229
+ h(CloseButtonView, Object.assign({}, { ...defaultProps$h, color: "blue" }))));
14236
14230
  };
14237
14231
 
14238
14232
  const CloseButton = /*#__PURE__*/Object.freeze({
14239
14233
  __proto__: null,
14240
14234
  'default': CloseButton_stories,
14241
- Default: Default$j,
14235
+ Default: Default$i,
14242
14236
  InAContainer: InAContainer,
14243
14237
  CustomColor: CustomColor$1
14244
14238
  });
@@ -14428,17 +14422,17 @@ const RadioCardView = ({ title, icon, description, selected, }) => {
14428
14422
  const RadioCard_stories = {
14429
14423
  title: "Components/Radio Card",
14430
14424
  };
14431
- const defaultProps$j = {
14425
+ const defaultProps$i = {
14432
14426
  selected: false,
14433
14427
  title: "Card Title",
14434
14428
  description: "Description text goes here",
14435
14429
  icon: "apple",
14436
14430
  };
14437
14431
  const DefaultView$1 = () => {
14438
- return h(RadioCardView, Object.assign({}, defaultProps$j));
14432
+ return h(RadioCardView, Object.assign({}, defaultProps$i));
14439
14433
  };
14440
14434
  const Selected = () => {
14441
- return h(RadioCardView, Object.assign({}, defaultProps$j, { selected: true }));
14435
+ return h(RadioCardView, Object.assign({}, defaultProps$i, { selected: true }));
14442
14436
  };
14443
14437
 
14444
14438
  const RadioCard = /*#__PURE__*/Object.freeze({
@@ -14451,13 +14445,13 @@ const RadioCard = /*#__PURE__*/Object.freeze({
14451
14445
  const ProgressBar_stories = {
14452
14446
  title: "Components/Progress Bar",
14453
14447
  };
14454
- const defaultProps$k = {
14448
+ const defaultProps$j = {
14455
14449
  progress: 2,
14456
14450
  goal: 4,
14457
14451
  steps: true,
14458
14452
  };
14459
14453
  const TaxAndPayoutsProgressBar = () => {
14460
- return h(ProgressBar$2, Object.assign({}, defaultProps$k, { stageCount: 4, currentStage: 2 }));
14454
+ return h(ProgressBar$2, Object.assign({}, defaultProps$j, { stageCount: 4, currentStage: 2 }));
14461
14455
  };
14462
14456
 
14463
14457
  const ProgressBar$1 = /*#__PURE__*/Object.freeze({
@@ -14476,7 +14470,7 @@ const Loading$6 = () => {
14476
14470
  },
14477
14471
  } }));
14478
14472
  };
14479
- const Error$9 = () => {
14473
+ const Error$a = () => {
14480
14474
  return (h("sqm-payout-details-card", { demoData: {
14481
14475
  states: {
14482
14476
  error: true,
@@ -14517,7 +14511,7 @@ const PayoutDetailsCard = /*#__PURE__*/Object.freeze({
14517
14511
  __proto__: null,
14518
14512
  'default': PayoutDetailsCard_stories,
14519
14513
  Loading: Loading$6,
14520
- Error: Error$9,
14514
+ Error: Error$a,
14521
14515
  NextPayout: NextPayout,
14522
14516
  PayoutToday: PayoutToday,
14523
14517
  ThresholdPayout: ThresholdPayout,
@@ -15127,6 +15121,349 @@ const UseInvoiceTableCells = /*#__PURE__*/Object.freeze({
15127
15121
  InvoiceTableDemoHook: InvoiceTableDemoHook
15128
15122
  });
15129
15123
 
15124
+ 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";
15125
+
15126
+ const ReferralCodes_stories = {
15127
+ title: "Components/Referral Codes",
15128
+ parameters: {
15129
+ scenario: scenario$E,
15130
+ },
15131
+ };
15132
+ const demoData = {
15133
+ titleText: "Start sharing",
15134
+ emptyStateHeaderText: "Your new codes and links aren’t ready yet",
15135
+ emptyStateDescriptionText: "Please contact our program support team to let them know you’re out of codes.",
15136
+ emptyStateImageUrl: "https://res.cloudinary.com/saasquatch/image/upload/v1644360953/squatch-assets/empty_leaderboard2.png",
15137
+ states: {
15138
+ noCodes: false,
15139
+ loading: false,
15140
+ },
15141
+ };
15142
+ const pagination = (slot) => {
15143
+ return h("sqm-pagination", { slot: slot });
15144
+ };
15145
+ const shareButtons = (slot) => {
15146
+ return (h("sqm-portal-container", { gap: "small", slot: slot },
15147
+ h("sqm-share-button", { medium: "email" }, "Share via email"),
15148
+ h("sqm-share-button", { medium: "facebook" }, "Share on Facebook"),
15149
+ h("sqm-share-button", { medium: "whatsapp" }, "Share on WhatsApp")));
15150
+ };
15151
+ const shareCodes = (slot) => {
15152
+ return h("sqm-referral-code", { slot: slot });
15153
+ };
15154
+ const shareCodeWithPreviouslyCopied = (slot) => {
15155
+ return (h("sqm-referral-code", { slot: slot, showNotificationText: true, notificationText: "You\u2019ve copied this before." }));
15156
+ };
15157
+ const ReferralCodes = () => {
15158
+ return (h("sqm-referral-codes", null,
15159
+ pagination("pagination"),
15160
+ shareCodes("shareCodes"),
15161
+ shareButtons("shareButtons")));
15162
+ };
15163
+ const WithPreviouslyCopiedCode = () => {
15164
+ return (h("sqm-referral-codes", null,
15165
+ pagination("pagination"),
15166
+ shareCodeWithPreviouslyCopied("shareCodes"),
15167
+ shareButtons("shareButtons")));
15168
+ };
15169
+ const Empty$3 = () => {
15170
+ return (h("sqm-referral-codes", { demoData: { states: { ...demoData.states, noCodes: true } } },
15171
+ pagination("pagination"),
15172
+ shareCodes("shareCodes"),
15173
+ shareButtons("shareButtons")));
15174
+ };
15175
+ const EmptyWithCustomTextAndImage = () => {
15176
+ return (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: {
15177
+ states: { ...demoData.states, noCodes: true },
15178
+ } },
15179
+ pagination("pagination"),
15180
+ shareCodes("shareCodes"),
15181
+ shareButtons("shareButtons")));
15182
+ };
15183
+ const Loading$7 = () => {
15184
+ return (h("sqm-referral-codes", { demoData: { states: { ...demoData.states, loading: true } } },
15185
+ pagination("pagination"),
15186
+ shareCodes("shareCodes"),
15187
+ shareButtons("shareButtons")));
15188
+ };
15189
+
15190
+ const ReferralCodes$1 = /*#__PURE__*/Object.freeze({
15191
+ __proto__: null,
15192
+ 'default': ReferralCodes_stories,
15193
+ ReferralCodes: ReferralCodes,
15194
+ WithPreviouslyCopiedCode: WithPreviouslyCopiedCode,
15195
+ Empty: Empty$3,
15196
+ EmptyWithCustomTextAndImage: EmptyWithCustomTextAndImage,
15197
+ Loading: Loading$7
15198
+ });
15199
+
15200
+ const BaseRegistrationForm_stories = {
15201
+ title: "Components/Microsite Base Registration",
15202
+ };
15203
+ const defaultProps$k = {
15204
+ states: {
15205
+ // AL: TODO
15206
+ // registrationFormState: {},
15207
+ error: "",
15208
+ },
15209
+ callbacks: {
15210
+ handleEmailSubmit: () => console.log("Submit!"),
15211
+ },
15212
+ content: {
15213
+ pageLabel: "Register",
15214
+ requiredFieldErrorMessage: "Cannot be empty",
15215
+ invalidEmailErrorMessage: "Must be a valid email address",
15216
+ googleButton: h("sl-button", null, "Register with Google"),
15217
+ secondaryButton: h("sl-button", null, "Sign in"),
15218
+ },
15219
+ };
15220
+ const Default$j = () => {
15221
+ return h(BaseRegistrationFormView, Object.assign({}, defaultProps$k));
15222
+ };
15223
+
15224
+ const BaseRegistrationForm = /*#__PURE__*/Object.freeze({
15225
+ __proto__: null,
15226
+ 'default': BaseRegistrationForm_stories,
15227
+ Default: Default$j
15228
+ });
15229
+
15230
+ const PortalRegistrationForm_stories = {
15231
+ title: "Components/Microsite Portal Register",
15232
+ };
15233
+ const defaultProps$l = {
15234
+ states: {
15235
+ error: "",
15236
+ loading: false,
15237
+ confirmPassword: true,
15238
+ hideInputs: false,
15239
+ loginPath: "/login",
15240
+ },
15241
+ callbacks: {
15242
+ submit: () => console.log("Submit!"),
15243
+ inputFunction: () => { },
15244
+ },
15245
+ refs: {
15246
+ formRef: {},
15247
+ },
15248
+ content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
15249
+ };
15250
+ const errorProps$9 = {
15251
+ states: {
15252
+ error: "Something went wrong. Please try again.",
15253
+ loading: false,
15254
+ confirmPassword: true,
15255
+ hideInputs: false,
15256
+ loginPath: "/login",
15257
+ },
15258
+ callbacks: {
15259
+ submit: () => console.log("Submit!"),
15260
+ inputFunction: () => { },
15261
+ },
15262
+ refs: {
15263
+ formRef: {},
15264
+ },
15265
+ content: {
15266
+ pageLabel: "Register",
15267
+ confirmPasswordLabel: "Confirm Password",
15268
+ },
15269
+ };
15270
+ const loadingProps$7 = {
15271
+ states: {
15272
+ error: "",
15273
+ loading: true,
15274
+ confirmPassword: true,
15275
+ hideInputs: false,
15276
+ loginPath: "/login",
15277
+ },
15278
+ callbacks: {
15279
+ submit: () => console.log("Submit!"),
15280
+ inputFunction: () => { },
15281
+ },
15282
+ refs: {
15283
+ formRef: {},
15284
+ },
15285
+ content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
15286
+ };
15287
+ const slottedProps$1 = {
15288
+ states: {
15289
+ error: "",
15290
+ loading: false,
15291
+ confirmPassword: true,
15292
+ hideInputs: false,
15293
+ loginPath: "/login",
15294
+ },
15295
+ callbacks: {
15296
+ submit: () => console.log("Submit!"),
15297
+ inputFunction: () => { },
15298
+ },
15299
+ refs: {
15300
+ formRef: {},
15301
+ },
15302
+ content: {
15303
+ pageLabel: "Register",
15304
+ confirmPasswordLabel: "Confirm Password",
15305
+ formData: (h("div", null,
15306
+ h("sl-input", { style: { marginBottom: "var(--sl-spacing-x-large)" }, exportparts: "label: input-label, base: input-base", label: "Slotted Input", required: true }),
15307
+ h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
15308
+ },
15309
+ };
15310
+ const Default$k = () => h(PortalRegistrationFormView, Object.assign({}, defaultProps$l));
15311
+ const RegisterWithError$1 = () => (h(PortalRegistrationFormView, Object.assign({}, errorProps$9)));
15312
+ const RegisterLoading$1 = () => (h(PortalRegistrationFormView, Object.assign({}, loadingProps$7)));
15313
+ const FieldsHidden$1 = () => {
15314
+ return (h("sqm-portal-register", { demoData: {
15315
+ states: {
15316
+ error: "",
15317
+ loading: true,
15318
+ registrationFormState: {},
15319
+ confirmPassword: true,
15320
+ hideInputs: true,
15321
+ loginPath: "/login",
15322
+ },
15323
+ } }));
15324
+ };
15325
+ const SlottedInputs$1 = () => (h(PortalRegistrationFormView, Object.assign({}, slottedProps$1)));
15326
+ const TermsAndConditions$3 = () => (h(PortalRegistrationFormView, Object.assign({}, defaultProps$l, { content: {
15327
+ ...defaultProps$l.content,
15328
+ terms: (h("p", null,
15329
+ "By signing up you agree to the",
15330
+ " ",
15331
+ h("a", { href: "https://example.com", target: "_blank" }, "Terms and Conditions"))),
15332
+ } })));
15333
+
15334
+ const PortalRegistrationForm = /*#__PURE__*/Object.freeze({
15335
+ __proto__: null,
15336
+ 'default': PortalRegistrationForm_stories,
15337
+ Default: Default$k,
15338
+ RegisterWithError: RegisterWithError$1,
15339
+ RegisterLoading: RegisterLoading$1,
15340
+ FieldsHidden: FieldsHidden$1,
15341
+ SlottedInputs: SlottedInputs$1,
15342
+ TermsAndConditions: TermsAndConditions$3
15343
+ });
15344
+
15345
+ const PortalGoogleRegistrationForm_stories = {
15346
+ title: "Components/Microsite Google Register",
15347
+ };
15348
+ const defaultProps$m = {
15349
+ states: {
15350
+ error: "",
15351
+ loading: false,
15352
+ confirmPassword: true,
15353
+ hideInputs: false,
15354
+ loginPath: "/login",
15355
+ },
15356
+ callbacks: {
15357
+ submit: () => console.log("Submit!"),
15358
+ inputFunction: () => { },
15359
+ },
15360
+ refs: {
15361
+ formRef: {},
15362
+ },
15363
+ content: {
15364
+ pageLabel: "Register",
15365
+ confirmPasswordLabel: "Confirm Password",
15366
+ secondaryButton: (h("span", null,
15367
+ "Already have an account?",
15368
+ h("sl-button", { type: "text" }, "Sign in"),
15369
+ " ")),
15370
+ },
15371
+ };
15372
+ const errorProps$a = {
15373
+ states: {
15374
+ error: "Something went wrong. Please try again.",
15375
+ loading: false,
15376
+ confirmPassword: true,
15377
+ hideInputs: false,
15378
+ loginPath: "/login",
15379
+ },
15380
+ callbacks: {
15381
+ submit: () => console.log("Submit!"),
15382
+ inputFunction: () => { },
15383
+ },
15384
+ refs: {
15385
+ formRef: {},
15386
+ },
15387
+ content: {
15388
+ pageLabel: "Register",
15389
+ confirmPasswordLabel: "Confirm Password",
15390
+ },
15391
+ };
15392
+ const loadingProps$8 = {
15393
+ states: {
15394
+ error: "",
15395
+ loading: true,
15396
+ confirmPassword: true,
15397
+ hideInputs: false,
15398
+ loginPath: "/login",
15399
+ },
15400
+ callbacks: {
15401
+ submit: () => console.log("Submit!"),
15402
+ inputFunction: () => { },
15403
+ },
15404
+ refs: {
15405
+ formRef: {},
15406
+ },
15407
+ content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
15408
+ };
15409
+ const slottedProps$2 = {
15410
+ states: {
15411
+ error: "",
15412
+ loading: false,
15413
+ confirmPassword: true,
15414
+ hideInputs: false,
15415
+ loginPath: "/login",
15416
+ },
15417
+ callbacks: {
15418
+ submit: () => console.log("Submit!"),
15419
+ inputFunction: () => { },
15420
+ },
15421
+ refs: {
15422
+ formRef: {},
15423
+ },
15424
+ content: {
15425
+ pageLabel: "Register",
15426
+ confirmPasswordLabel: "Confirm Password",
15427
+ formData: (h("div", null,
15428
+ h("sl-input", { style: { marginBottom: "var(--sl-spacing-x-large)" }, exportparts: "label: input-label, base: input-base", label: "Slotted Input", required: true }),
15429
+ h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
15430
+ },
15431
+ };
15432
+ const Default$l = () => (h(PortalRegistrationFormView, Object.assign({}, defaultProps$m)));
15433
+ const RegisterWithError$2 = () => (h(PortalRegistrationFormView, Object.assign({}, errorProps$a)));
15434
+ const RegisterLoading$2 = () => (h(PortalRegistrationFormView, Object.assign({}, loadingProps$8)));
15435
+ const FieldsHidden$2 = () => {
15436
+ return (h("sqm-portal-registration", { demoData: {
15437
+ states: {
15438
+ error: "",
15439
+ loading: true,
15440
+ registrationFormState: {},
15441
+ confirmPassword: true,
15442
+ hideInputs: true,
15443
+ loginPath: "/login",
15444
+ },
15445
+ } }));
15446
+ };
15447
+ const SlottedInputs$2 = () => (h(PortalRegistrationFormView, Object.assign({}, slottedProps$2)));
15448
+ const TermsAndConditions$4 = () => (h(PortalRegistrationFormView, Object.assign({}, defaultProps$m, { content: {
15449
+ ...defaultProps$m.content,
15450
+ terms: (h("p", null,
15451
+ "By signing up you agree to the",
15452
+ " ",
15453
+ h("a", { href: "https://example.com", target: "_blank" }, "Terms and Conditions"))),
15454
+ } })));
15455
+
15456
+ const PortalGoogleRegistrationFormStories = /*#__PURE__*/Object.freeze({
15457
+ __proto__: null,
15458
+ 'default': PortalGoogleRegistrationForm_stories,
15459
+ Default: Default$l,
15460
+ RegisterWithError: RegisterWithError$2,
15461
+ RegisterLoading: RegisterLoading$2,
15462
+ FieldsHidden: FieldsHidden$2,
15463
+ SlottedInputs: SlottedInputs$2,
15464
+ TermsAndConditions: TermsAndConditions$4
15465
+ });
15466
+
15130
15467
  /**
15131
15468
  *
15132
15469
  * Themes
@@ -15139,7 +15476,7 @@ const UseInvoiceTableCells = /*#__PURE__*/Object.freeze({
15139
15476
  *
15140
15477
  */
15141
15478
  //
15142
- const Default$k = `
15479
+ const Default$m = `
15143
15480
  // No CSS
15144
15481
  `;
15145
15482
  const Orangey = `
@@ -15173,7 +15510,7 @@ const Klip = `
15173
15510
 
15174
15511
  const Themes = /*#__PURE__*/Object.freeze({
15175
15512
  __proto__: null,
15176
- Default: Default$k,
15513
+ Default: Default$m,
15177
15514
  Orangey: Orangey,
15178
15515
  Netflix: Netflix,
15179
15516
  SaaSquatchCorporate: SaaSquatchCorporate,
@@ -17772,6 +18109,7 @@ const stories = [
17772
18109
  InvoiceTableCells,
17773
18110
  UseInvoiceTableCells,
17774
18111
  ShareButton,
18112
+ Pagination,
17775
18113
  ShareLink,
17776
18114
  BigStat,
17777
18115
  Leaderboard,
@@ -17817,7 +18155,6 @@ const stories = [
17817
18155
  ReferralIframe$1,
17818
18156
  NameFields$1,
17819
18157
  CheckboxField,
17820
- MarketingEmailsCheckbox,
17821
18158
  DropdownField,
17822
18159
  InputField,
17823
18160
  RewardExchangeList,
@@ -17841,6 +18178,8 @@ const stories = [
17841
18178
  Tabs,
17842
18179
  ShareCode$1,
17843
18180
  CouponCode$1,
18181
+ ReferralCode$1,
18182
+ ReferralCodes$1,
17844
18183
  LogoutCurrentUser,
17845
18184
  LinkButton,
17846
18185
  EmailRegistration,
@@ -17851,7 +18190,9 @@ const stories = [
17851
18190
  TaxFormSlots,
17852
18191
  PayoutDetailsCard,
17853
18192
  BankingInfoForm,
17854
- NewPortalRegistrationForm,
18193
+ BaseRegistrationForm,
18194
+ PortalRegistrationForm,
18195
+ PortalGoogleRegistrationFormStories,
17855
18196
  ];
17856
18197
  const StencilStorybook = class {
17857
18198
  constructor(hostRef) {