@saasquatch/mint-components 1.13.3-9 → 1.13.4
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.
- package/dist/cjs/{ShadowViewAddon-3ddee92b.js → ShadowViewAddon-14a02da4.js} +138 -104
- package/dist/cjs/{useReferralCodes-82e8797b.js → copy-text-view-a5524c20.js} +93 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mint-components.cjs.js +1 -1
- package/dist/cjs/sqm-banking-info-form_17.cjs.entry.js +2 -3
- package/dist/cjs/{sqm-big-stat_39.cjs.entry.js → sqm-big-stat_41.cjs.entry.js} +221 -4
- package/dist/cjs/{sqm-invoice-table-view-16ac73d0.js → sqm-invoice-table-view-baded4af.js} +31 -2
- package/dist/cjs/sqm-pagination_3.cjs.entry.js +5 -6
- package/dist/cjs/sqm-portal-email-verification.cjs.entry.js +1 -1
- package/dist/cjs/sqm-portal-forgot-password.cjs.entry.js +1 -1
- package/dist/cjs/sqm-portal-google-registration-form.cjs.entry.js +1 -1
- package/dist/cjs/{sqm-portal-registration-form-view-ebf355a6.js → sqm-portal-registration-form-view-637a4bf4.js} +1 -0
- package/dist/cjs/sqm-portal-registration-form.cjs.entry.js +2 -1
- package/dist/cjs/sqm-portal-reset-password.cjs.entry.js +1 -1
- package/dist/cjs/sqm-portal-verify-email.cjs.entry.js +1 -1
- package/dist/cjs/sqm-stencilbook.cjs.entry.js +470 -431
- package/dist/collection/collection-manifest.json +2 -1
- package/dist/collection/components/sqm-checkbox-field/CheckboxField.stories.js +1 -1
- package/dist/collection/components/sqm-checkbox-field/sqm-checkbox-field-view.js +6 -15
- package/dist/collection/components/sqm-checkbox-field/sqm-checkbox-field.js +5 -5
- package/dist/collection/components/sqm-marketing-emails-checkbox/MarketingEmailsCheckbox.stories.js +11 -0
- package/dist/collection/components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.js +129 -0
- package/dist/collection/components/sqm-portal-change-marketing/ChangeMarketing.stories.js +54 -0
- package/dist/collection/components/sqm-portal-change-marketing/sqm-portal-change-marketing-view.js +47 -0
- package/dist/collection/components/sqm-portal-change-marketing/sqm-portal-change-marketing.js +217 -0
- package/dist/collection/components/sqm-portal-change-marketing/usePortalChangeMarketing.js +115 -0
- package/dist/collection/components/sqm-portal-email-verification/sqm-portal-email-verification.js +3 -3
- package/dist/collection/components/sqm-portal-forgot-password/sqm-portal-forgot-password.js +3 -3
- package/dist/collection/components/sqm-portal-google-registration-form/sqm-portal-google-registration-form.js +2 -2
- package/dist/collection/components/sqm-portal-login/sqm-portal-login.js +3 -3
- package/dist/collection/components/sqm-portal-registration-form/PortalRegistrationForm.stories.js +4 -0
- package/dist/collection/components/sqm-portal-registration-form/sqm-portal-registration-form-view.js +1 -0
- package/dist/collection/components/sqm-portal-registration-form/sqm-portal-registration-form.js +3 -2
- package/dist/collection/components/sqm-portal-reset-password/sqm-portal-reset-password.js +3 -3
- package/dist/collection/components/sqm-portal-verify-email/sqm-portal-verify-email.js +3 -3
- package/dist/collection/components/sqm-stencilbook/sqm-stencilbook.js +6 -2
- package/dist/collection/components/sqm-titled-section/sqm-titled-section.js +3 -0
- package/dist/esm/{ShadowViewAddon-499b1f86.js → ShadowViewAddon-23a6afab.js} +134 -101
- package/dist/esm/{useReferralCodes-8f75921a.js → copy-text-view-459a2e35.js} +93 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mint-components.js +1 -1
- package/dist/esm/sqm-banking-info-form_17.entry.js +1 -2
- package/dist/esm/{sqm-big-stat_39.entry.js → sqm-big-stat_41.entry.js} +220 -5
- package/dist/esm/{sqm-invoice-table-view-2c726568.js → sqm-invoice-table-view-af69cd33.js} +30 -2
- package/dist/esm/sqm-pagination_3.entry.js +1 -2
- package/dist/esm/sqm-portal-email-verification.entry.js +1 -1
- package/dist/esm/sqm-portal-forgot-password.entry.js +1 -1
- package/dist/esm/sqm-portal-google-registration-form.entry.js +1 -1
- package/dist/esm/{sqm-portal-registration-form-view-32c4b488.js → sqm-portal-registration-form-view-3c1f6000.js} +1 -0
- package/dist/esm/sqm-portal-registration-form.entry.js +2 -1
- package/dist/esm/sqm-portal-reset-password.entry.js +1 -1
- package/dist/esm/sqm-portal-verify-email.entry.js +1 -1
- package/dist/esm/sqm-stencilbook.entry.js +470 -431
- package/dist/esm-es5/ShadowViewAddon-23a6afab.js +1 -0
- package/dist/esm-es5/copy-text-view-459a2e35.js +1 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/mint-components.js +1 -1
- package/dist/esm-es5/sqm-banking-info-form_17.entry.js +1 -1
- package/dist/esm-es5/sqm-big-stat_41.entry.js +1 -0
- package/dist/esm-es5/sqm-invoice-table-view-af69cd33.js +1 -0
- package/dist/esm-es5/sqm-pagination_3.entry.js +1 -1
- package/dist/esm-es5/sqm-portal-google-registration-form.entry.js +1 -1
- package/dist/esm-es5/{sqm-portal-registration-form-view-32c4b488.js → sqm-portal-registration-form-view-3c1f6000.js} +1 -1
- package/dist/esm-es5/sqm-portal-registration-form.entry.js +1 -1
- package/dist/esm-es5/sqm-stencilbook.entry.js +1 -1
- package/dist/mint-components/mint-components.esm.js +1 -1
- package/dist/mint-components/p-01010af0.entry.js +258 -0
- package/dist/mint-components/{p-079405ff.entry.js → p-0d2d0b6d.entry.js} +1 -1
- package/dist/mint-components/p-33ed6f1c.system.entry.js +1 -0
- package/dist/mint-components/p-37996351.system.js +1 -1
- package/dist/mint-components/p-38b5f028.system.entry.js +1 -0
- package/dist/mint-components/p-717cc8ac.system.js +1 -0
- package/dist/mint-components/p-71bc04d2.system.entry.js +1 -0
- package/dist/mint-components/p-7e7cbccf.system.js +1 -0
- package/dist/mint-components/p-7f2d4212.js +52 -0
- package/dist/mint-components/{p-e6045498.entry.js → p-7f80a9d7.entry.js} +1 -1
- package/dist/mint-components/{p-793d2130.js → p-91ab3da1.js} +1 -1
- package/dist/mint-components/p-9320582e.system.js +1 -0
- package/dist/mint-components/{p-51d3cde7.system.entry.js → p-9386ad84.system.entry.js} +1 -1
- package/dist/mint-components/p-962f3200.js +1 -0
- package/dist/mint-components/{p-54adee71.system.entry.js → p-9bfd9bed.system.entry.js} +1 -1
- package/dist/mint-components/{p-7846937e.entry.js → p-b51e79b3.entry.js} +2 -2
- package/dist/mint-components/p-b93fd99c.system.entry.js +1 -0
- package/dist/mint-components/p-d3d74266.js +394 -0
- package/dist/mint-components/{p-bb0f585c.system.js → p-e5d0375e.system.js} +1 -1
- package/dist/mint-components/{p-012af236.entry.js → p-f29eda2f.entry.js} +4 -4
- package/dist/mint-components/p-f2cc6a6f.entry.js +9 -0
- package/dist/types/components/sqm-checkbox-field/sqm-checkbox-field-view.d.ts +1 -1
- package/dist/types/components/sqm-checkbox-field/sqm-checkbox-field.d.ts +4 -4
- package/dist/types/components/sqm-marketing-emails-checkbox/MarketingEmailsCheckbox.stories.d.ts +8 -0
- package/dist/types/components/sqm-marketing-emails-checkbox/sqm-marketing-emails-checkbox.d.ts +27 -0
- package/dist/types/components/{sqm-qr-code/QRCode.stories.d.ts → sqm-portal-change-marketing/ChangeMarketing.stories.d.ts} +2 -2
- package/dist/types/components/sqm-portal-change-marketing/sqm-portal-change-marketing-view.d.ts +28 -0
- package/dist/types/components/sqm-portal-change-marketing/sqm-portal-change-marketing.d.ts +39 -0
- package/dist/types/components/sqm-portal-change-marketing/usePortalChangeMarketing.d.ts +3 -0
- package/dist/types/components/sqm-portal-email-verification/sqm-portal-email-verification.d.ts +1 -1
- package/dist/types/components/sqm-portal-forgot-password/sqm-portal-forgot-password.d.ts +1 -1
- package/dist/types/components/sqm-portal-login/sqm-portal-login.d.ts +1 -1
- package/dist/types/components/sqm-portal-registration-form/PortalRegistrationForm.stories.d.ts +1 -0
- package/dist/types/components/sqm-portal-registration-form/sqm-portal-registration-form-view.d.ts +1 -0
- package/dist/types/components/sqm-portal-registration-form/sqm-portal-registration-form.d.ts +1 -1
- package/dist/types/components/sqm-portal-reset-password/sqm-portal-reset-password.d.ts +1 -1
- package/dist/types/components/sqm-portal-verify-email/sqm-portal-verify-email.d.ts +1 -1
- package/dist/types/components/sqm-titled-section/sqm-titled-section.d.ts +1 -0
- package/dist/types/components.d.ts +132 -85
- package/docs/docs.docx +0 -0
- package/docs/raisins.json +1 -1
- package/grapesjs/grapesjs.js +1 -1
- package/package.json +1 -1
- package/dist/cjs/ErrorView-b2fcf954.js +0 -35
- package/dist/cjs/copy-text-view-c85acaaa.js +0 -96
- package/dist/cjs/sqm-qr-code-view-82b14685.js +0 -89
- package/dist/cjs/sqm-qr-code.cjs.entry.js +0 -199
- package/dist/collection/components/sqm-qr-code/QRCode.stories.js +0 -37
- package/dist/collection/components/sqm-qr-code/sqm-qr-code-view.js +0 -84
- package/dist/collection/components/sqm-qr-code/sqm-qr-code.js +0 -229
- package/dist/collection/components/sqm-qr-code/useQRCode.js +0 -129
- package/dist/esm/ErrorView-48e2b969.js +0 -33
- package/dist/esm/copy-text-view-782137ba.js +0 -94
- package/dist/esm/sqm-qr-code-view-2dff1823.js +0 -87
- package/dist/esm/sqm-qr-code.entry.js +0 -195
- package/dist/esm-es5/ErrorView-48e2b969.js +0 -1
- package/dist/esm-es5/ShadowViewAddon-499b1f86.js +0 -1
- package/dist/esm-es5/copy-text-view-782137ba.js +0 -1
- package/dist/esm-es5/sqm-big-stat_39.entry.js +0 -1
- package/dist/esm-es5/sqm-invoice-table-view-2c726568.js +0 -1
- package/dist/esm-es5/sqm-qr-code-view-2dff1823.js +0 -1
- package/dist/esm-es5/sqm-qr-code.entry.js +0 -1
- package/dist/esm-es5/useReferralCodes-8f75921a.js +0 -1
- package/dist/mint-components/p-31015791.js +0 -1
- package/dist/mint-components/p-31c73e3a.system.entry.js +0 -1
- package/dist/mint-components/p-3a62a7e2.system.js +0 -1
- package/dist/mint-components/p-3b90e01b.system.js +0 -1
- package/dist/mint-components/p-3edc9c8a.entry.js +0 -9
- package/dist/mint-components/p-3f067fd5.js +0 -1
- package/dist/mint-components/p-3f7b81b8.js +0 -52
- package/dist/mint-components/p-4f6bb357.system.js +0 -1
- package/dist/mint-components/p-5afd7e38.system.entry.js +0 -1
- package/dist/mint-components/p-5cb7f9fc.system.entry.js +0 -1
- package/dist/mint-components/p-7c434c65.js +0 -1
- package/dist/mint-components/p-97038074.system.entry.js +0 -1
- package/dist/mint-components/p-9acb5038.js +0 -1
- package/dist/mint-components/p-a7746488.system.js +0 -1
- package/dist/mint-components/p-d78298a5.entry.js +0 -17
- package/dist/mint-components/p-da4ff3b4.system.js +0 -1
- package/dist/mint-components/p-dbc0e4f8.system.js +0 -1
- package/dist/mint-components/p-e2d5cd22.js +0 -394
- package/dist/mint-components/p-f15c1a53.entry.js +0 -241
- package/dist/mint-components/p-f4ba6e2b.system.entry.js +0 -1
- package/dist/types/components/sqm-qr-code/sqm-qr-code-view.d.ts +0 -17
- package/dist/types/components/sqm-qr-code/sqm-qr-code.d.ts +0 -41
- package/dist/types/components/sqm-qr-code/useQRCode.d.ts +0 -3
- package/dist/types/global/android.d.ts +0 -7
- package/dist/types/global/demo.d.ts +0 -2
- package/dist/types/stories/features.d.ts +0 -4
- package/dist/types/stories/templates.d.ts +0 -4
|
@@ -9,9 +9,8 @@ const index_module = require('./index.module-ee84433d.js');
|
|
|
9
9
|
require('./cjs-1066ec21.js');
|
|
10
10
|
require('./utils-6847bc06.js');
|
|
11
11
|
const JSS = require('./JSS-8503a151.js');
|
|
12
|
-
require('./
|
|
12
|
+
const copyTextView = require('./copy-text-view-a5524c20.js');
|
|
13
13
|
require('./mixins-f7e0377a.js');
|
|
14
|
-
const copyTextView = require('./copy-text-view-c85acaaa.js');
|
|
15
14
|
const GenericTableView = require('./GenericTableView-a9f4ba75.js');
|
|
16
15
|
require('./useChildElements-1b35d945.js');
|
|
17
16
|
const luxon = require('./luxon-2926d85f.js');
|
|
@@ -28,16 +27,14 @@ const sqmPortalEmailVerificationView = require('./sqm-portal-email-verification-
|
|
|
28
27
|
const sqmPortalForgotPasswordView = require('./sqm-portal-forgot-password-view-78f19ef9.js');
|
|
29
28
|
const sqmPortalLoginView = require('./sqm-portal-login-view-761a4d8e.js');
|
|
30
29
|
const sqmBaseRegistrationFormView = require('./sqm-base-registration-form-view-8a2c8763.js');
|
|
31
|
-
const sqmPortalRegistrationFormView = require('./sqm-portal-registration-form-view-
|
|
30
|
+
const sqmPortalRegistrationFormView = require('./sqm-portal-registration-form-view-637a4bf4.js');
|
|
32
31
|
const sqmPortalProfileView = require('./sqm-portal-profile-view-33164798.js');
|
|
33
32
|
require('./utilities-78f5e169.js');
|
|
34
33
|
const sqmPortalResetPasswordView = require('./sqm-portal-reset-password-view-fe602822.js');
|
|
35
34
|
const sqmPortalVerifyEmailView = require('./sqm-portal-verify-email-view-7b678f34.js');
|
|
36
|
-
require('./
|
|
37
|
-
const sqmQrCodeView = require('./sqm-qr-code-view-82b14685.js');
|
|
38
|
-
const ShadowViewAddon = require('./ShadowViewAddon-3ddee92b.js');
|
|
35
|
+
const ShadowViewAddon = require('./ShadowViewAddon-14a02da4.js');
|
|
39
36
|
const sqmPortalContainerView = require('./sqm-portal-container-view-4f15143a.js');
|
|
40
|
-
const sqmInvoiceTableView = require('./sqm-invoice-table-view-
|
|
37
|
+
const sqmInvoiceTableView = require('./sqm-invoice-table-view-baded4af.js');
|
|
41
38
|
|
|
42
39
|
/**
|
|
43
40
|
* lodash (Custom Build) <https://lodash.com/>
|
|
@@ -7478,6 +7475,126 @@ const PortalRegister = /*#__PURE__*/Object.freeze({
|
|
|
7478
7475
|
TermsAndConditions: TermsAndConditions
|
|
7479
7476
|
});
|
|
7480
7477
|
|
|
7478
|
+
const PortalRegistrationForm_stories = {
|
|
7479
|
+
title: "Components/Microsite Portal Register",
|
|
7480
|
+
};
|
|
7481
|
+
const defaultProps$4 = {
|
|
7482
|
+
states: {
|
|
7483
|
+
error: "",
|
|
7484
|
+
loading: false,
|
|
7485
|
+
confirmPassword: true,
|
|
7486
|
+
hideInputs: false,
|
|
7487
|
+
loginPath: "/login",
|
|
7488
|
+
},
|
|
7489
|
+
callbacks: {
|
|
7490
|
+
submit: () => console.log("Submit!"),
|
|
7491
|
+
inputFunction: () => { },
|
|
7492
|
+
},
|
|
7493
|
+
refs: {
|
|
7494
|
+
formRef: {},
|
|
7495
|
+
},
|
|
7496
|
+
content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
|
|
7497
|
+
};
|
|
7498
|
+
const errorProps$2 = {
|
|
7499
|
+
states: {
|
|
7500
|
+
error: "Something went wrong. Please try again.",
|
|
7501
|
+
loading: false,
|
|
7502
|
+
confirmPassword: true,
|
|
7503
|
+
hideInputs: false,
|
|
7504
|
+
loginPath: "/login",
|
|
7505
|
+
},
|
|
7506
|
+
callbacks: {
|
|
7507
|
+
submit: () => console.log("Submit!"),
|
|
7508
|
+
inputFunction: () => { },
|
|
7509
|
+
},
|
|
7510
|
+
refs: {
|
|
7511
|
+
formRef: {},
|
|
7512
|
+
},
|
|
7513
|
+
content: {
|
|
7514
|
+
pageLabel: "Register",
|
|
7515
|
+
confirmPasswordLabel: "Confirm Password",
|
|
7516
|
+
},
|
|
7517
|
+
};
|
|
7518
|
+
const loadingProps$2 = {
|
|
7519
|
+
states: {
|
|
7520
|
+
error: "",
|
|
7521
|
+
loading: true,
|
|
7522
|
+
confirmPassword: true,
|
|
7523
|
+
hideInputs: false,
|
|
7524
|
+
loginPath: "/login",
|
|
7525
|
+
},
|
|
7526
|
+
callbacks: {
|
|
7527
|
+
submit: () => console.log("Submit!"),
|
|
7528
|
+
inputFunction: () => { },
|
|
7529
|
+
},
|
|
7530
|
+
refs: {
|
|
7531
|
+
formRef: {},
|
|
7532
|
+
},
|
|
7533
|
+
content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
|
|
7534
|
+
};
|
|
7535
|
+
const slottedProps$1 = {
|
|
7536
|
+
states: {
|
|
7537
|
+
error: "",
|
|
7538
|
+
loading: false,
|
|
7539
|
+
confirmPassword: true,
|
|
7540
|
+
hideInputs: false,
|
|
7541
|
+
loginPath: "/login",
|
|
7542
|
+
},
|
|
7543
|
+
callbacks: {
|
|
7544
|
+
submit: () => console.log("Submit!"),
|
|
7545
|
+
inputFunction: () => { },
|
|
7546
|
+
},
|
|
7547
|
+
refs: {
|
|
7548
|
+
formRef: {},
|
|
7549
|
+
},
|
|
7550
|
+
content: {
|
|
7551
|
+
pageLabel: "Register",
|
|
7552
|
+
confirmPasswordLabel: "Confirm Password",
|
|
7553
|
+
formData: (index.h("div", null,
|
|
7554
|
+
index.h("sl-input", { style: { marginBottom: "var(--sl-spacing-x-large)" }, exportparts: "label: input-label, base: input-base", label: "Slotted Input", required: true }),
|
|
7555
|
+
index.h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
|
|
7556
|
+
},
|
|
7557
|
+
};
|
|
7558
|
+
const Default$5 = () => index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$4));
|
|
7559
|
+
const RegisterWithError$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, errorProps$2)));
|
|
7560
|
+
const RegisterLoading$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, loadingProps$2)));
|
|
7561
|
+
const FieldsHidden$1 = () => {
|
|
7562
|
+
return (index.h("sqm-portal-register", { demoData: {
|
|
7563
|
+
states: {
|
|
7564
|
+
error: "",
|
|
7565
|
+
loading: true,
|
|
7566
|
+
registrationFormState: {},
|
|
7567
|
+
confirmPassword: true,
|
|
7568
|
+
hideInputs: true,
|
|
7569
|
+
loginPath: "/login",
|
|
7570
|
+
},
|
|
7571
|
+
} }));
|
|
7572
|
+
};
|
|
7573
|
+
const SlottedInputs$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, slottedProps$1)));
|
|
7574
|
+
const RegisterWithMarketingEmailsCheckbox = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$4, { content: {
|
|
7575
|
+
...defaultProps$4.content,
|
|
7576
|
+
emailOptIn: (index.h("sqm-checkbox-field", { checkboxLabel: "I would like to receive marketing and promotional emails for this referral program" })),
|
|
7577
|
+
} })));
|
|
7578
|
+
const TermsAndConditions$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$4, { content: {
|
|
7579
|
+
...defaultProps$4.content,
|
|
7580
|
+
terms: (index.h("p", null,
|
|
7581
|
+
"By signing up you agree to the",
|
|
7582
|
+
" ",
|
|
7583
|
+
index.h("a", { href: "https://example.com", target: "_blank" }, "Terms and Conditions"))),
|
|
7584
|
+
} })));
|
|
7585
|
+
|
|
7586
|
+
const PortalRegistrationForm = /*#__PURE__*/Object.freeze({
|
|
7587
|
+
__proto__: null,
|
|
7588
|
+
'default': PortalRegistrationForm_stories,
|
|
7589
|
+
Default: Default$5,
|
|
7590
|
+
RegisterWithError: RegisterWithError$1,
|
|
7591
|
+
RegisterLoading: RegisterLoading$1,
|
|
7592
|
+
FieldsHidden: FieldsHidden$1,
|
|
7593
|
+
SlottedInputs: SlottedInputs$1,
|
|
7594
|
+
RegisterWithMarketingEmailsCheckbox: RegisterWithMarketingEmailsCheckbox,
|
|
7595
|
+
TermsAndConditions: TermsAndConditions$1
|
|
7596
|
+
});
|
|
7597
|
+
|
|
7481
7598
|
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 |";
|
|
7482
7599
|
|
|
7483
7600
|
const PortalForgotPassword_stories = {
|
|
@@ -7486,7 +7603,7 @@ const PortalForgotPassword_stories = {
|
|
|
7486
7603
|
scenario: scenario$6,
|
|
7487
7604
|
},
|
|
7488
7605
|
};
|
|
7489
|
-
const defaultProps$
|
|
7606
|
+
const defaultProps$5 = {
|
|
7490
7607
|
states: {
|
|
7491
7608
|
error: "",
|
|
7492
7609
|
loading: false,
|
|
@@ -7501,7 +7618,7 @@ const defaultProps$4 = {
|
|
|
7501
7618
|
messageSlot: "Enter your email below to receive a password reset link.",
|
|
7502
7619
|
},
|
|
7503
7620
|
};
|
|
7504
|
-
const errorProps$
|
|
7621
|
+
const errorProps$3 = {
|
|
7505
7622
|
states: {
|
|
7506
7623
|
error: "Something went wrong. Please try again.",
|
|
7507
7624
|
loading: false,
|
|
@@ -7516,7 +7633,7 @@ const errorProps$2 = {
|
|
|
7516
7633
|
messageSlot: "Enter your email below to receive a password reset link.",
|
|
7517
7634
|
},
|
|
7518
7635
|
};
|
|
7519
|
-
const loadingProps$
|
|
7636
|
+
const loadingProps$3 = {
|
|
7520
7637
|
states: {
|
|
7521
7638
|
error: "",
|
|
7522
7639
|
loading: true,
|
|
@@ -7546,15 +7663,15 @@ const successProps = {
|
|
|
7546
7663
|
messageSlot: "Enter your email below to receive a password reset link.",
|
|
7547
7664
|
},
|
|
7548
7665
|
};
|
|
7549
|
-
const Default$
|
|
7550
|
-
const ForgotPasswordWithError = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, errorProps$
|
|
7551
|
-
const ForgotPasswordLoading = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, loadingProps$
|
|
7666
|
+
const Default$6 = () => index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, defaultProps$5));
|
|
7667
|
+
const ForgotPasswordWithError = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, errorProps$3)));
|
|
7668
|
+
const ForgotPasswordLoading = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, loadingProps$3)));
|
|
7552
7669
|
const ForgotPasswordSuccess = () => (index.h(sqmPortalForgotPasswordView.PortalForgotPasswordView, Object.assign({}, successProps)));
|
|
7553
7670
|
|
|
7554
7671
|
const PortalForgotPassword = /*#__PURE__*/Object.freeze({
|
|
7555
7672
|
__proto__: null,
|
|
7556
7673
|
'default': PortalForgotPassword_stories,
|
|
7557
|
-
Default: Default$
|
|
7674
|
+
Default: Default$6,
|
|
7558
7675
|
ForgotPasswordWithError: ForgotPasswordWithError,
|
|
7559
7676
|
ForgotPasswordLoading: ForgotPasswordLoading,
|
|
7560
7677
|
ForgotPasswordSuccess: ForgotPasswordSuccess
|
|
@@ -7587,12 +7704,12 @@ const defaultStates = {
|
|
|
7587
7704
|
loadingVerification: false,
|
|
7588
7705
|
countdown: 10,
|
|
7589
7706
|
};
|
|
7590
|
-
const defaultProps$
|
|
7707
|
+
const defaultProps$6 = {
|
|
7591
7708
|
states: defaultStates,
|
|
7592
7709
|
callbacks: defaultCallbacks,
|
|
7593
7710
|
content: defaultContent,
|
|
7594
7711
|
};
|
|
7595
|
-
const errorProps$
|
|
7712
|
+
const errorProps$4 = {
|
|
7596
7713
|
states: {
|
|
7597
7714
|
...defaultStates,
|
|
7598
7715
|
error: "Something went wrong. Please try again.",
|
|
@@ -7600,7 +7717,7 @@ const errorProps$3 = {
|
|
|
7600
7717
|
callbacks: defaultCallbacks,
|
|
7601
7718
|
content: defaultContent,
|
|
7602
7719
|
};
|
|
7603
|
-
const loadingProps$
|
|
7720
|
+
const loadingProps$4 = {
|
|
7604
7721
|
states: {
|
|
7605
7722
|
...defaultStates,
|
|
7606
7723
|
loading: true,
|
|
@@ -7625,16 +7742,16 @@ const loadingVerificationProps = {
|
|
|
7625
7742
|
callbacks: defaultCallbacks,
|
|
7626
7743
|
content: defaultContent,
|
|
7627
7744
|
};
|
|
7628
|
-
const Default$
|
|
7629
|
-
const EmailVerificationWithError = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, errorProps$
|
|
7630
|
-
const EmailVerificationLoading = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, loadingProps$
|
|
7745
|
+
const Default$7 = () => index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, defaultProps$6));
|
|
7746
|
+
const EmailVerificationWithError = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, errorProps$4)));
|
|
7747
|
+
const EmailVerificationLoading = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, loadingProps$4)));
|
|
7631
7748
|
const EmailVerificationCheckingVerification = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, loadingVerificationProps)));
|
|
7632
7749
|
const EmailVerificationSuccess = () => (index.h(sqmPortalEmailVerificationView.PortalEmailVerificationView, Object.assign({}, successProps$1)));
|
|
7633
7750
|
|
|
7634
7751
|
const PortalEmailVerification = /*#__PURE__*/Object.freeze({
|
|
7635
7752
|
__proto__: null,
|
|
7636
7753
|
'default': PortalEmailVerification_stories,
|
|
7637
|
-
Default: Default$
|
|
7754
|
+
Default: Default$7,
|
|
7638
7755
|
EmailVerificationWithError: EmailVerificationWithError,
|
|
7639
7756
|
EmailVerificationLoading: EmailVerificationLoading,
|
|
7640
7757
|
EmailVerificationCheckingVerification: EmailVerificationCheckingVerification,
|
|
@@ -7649,7 +7766,7 @@ const PortalResetPassword_stories = {
|
|
|
7649
7766
|
scenario: scenario$8,
|
|
7650
7767
|
},
|
|
7651
7768
|
};
|
|
7652
|
-
const defaultProps$
|
|
7769
|
+
const defaultProps$7 = {
|
|
7653
7770
|
states: {
|
|
7654
7771
|
error: "",
|
|
7655
7772
|
loading: false,
|
|
@@ -7695,7 +7812,7 @@ const defaultPropsNoConfirm = {
|
|
|
7695
7812
|
failed: () => console.log("failed"),
|
|
7696
7813
|
},
|
|
7697
7814
|
};
|
|
7698
|
-
const errorProps$
|
|
7815
|
+
const errorProps$5 = {
|
|
7699
7816
|
states: {
|
|
7700
7817
|
error: "Something went wrong. Please try again.",
|
|
7701
7818
|
loading: false,
|
|
@@ -7718,7 +7835,7 @@ const errorProps$4 = {
|
|
|
7718
7835
|
failed: () => console.log("failed"),
|
|
7719
7836
|
},
|
|
7720
7837
|
};
|
|
7721
|
-
const loadingProps$
|
|
7838
|
+
const loadingProps$5 = {
|
|
7722
7839
|
states: {
|
|
7723
7840
|
error: "",
|
|
7724
7841
|
loading: true,
|
|
@@ -7787,17 +7904,17 @@ const validatingCodeProps = {
|
|
|
7787
7904
|
failed: () => console.log("failed"),
|
|
7788
7905
|
},
|
|
7789
7906
|
};
|
|
7790
|
-
const Default$
|
|
7907
|
+
const Default$8 = () => index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, defaultProps$7));
|
|
7791
7908
|
const DefaultWithoutConfirmField = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, defaultPropsNoConfirm)));
|
|
7792
|
-
const ResetPasswordWithError = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, errorProps$
|
|
7793
|
-
const ResetPasswordLoading = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, loadingProps$
|
|
7909
|
+
const ResetPasswordWithError = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, errorProps$5)));
|
|
7910
|
+
const ResetPasswordLoading = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, loadingProps$5)));
|
|
7794
7911
|
const ResetPasswordSuccess = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, successProps$2)));
|
|
7795
7912
|
const CodeValidating = () => (index.h(sqmPortalResetPasswordView.PortalResetPasswordView, Object.assign({}, validatingCodeProps)));
|
|
7796
7913
|
|
|
7797
7914
|
const PortalResetPassword = /*#__PURE__*/Object.freeze({
|
|
7798
7915
|
__proto__: null,
|
|
7799
7916
|
'default': PortalResetPassword_stories,
|
|
7800
|
-
Default: Default$
|
|
7917
|
+
Default: Default$8,
|
|
7801
7918
|
DefaultWithoutConfirmField: DefaultWithoutConfirmField,
|
|
7802
7919
|
ResetPasswordWithError: ResetPasswordWithError,
|
|
7803
7920
|
ResetPasswordLoading: ResetPasswordLoading,
|
|
@@ -7813,7 +7930,7 @@ const PortalVerifyEmail_stories = {
|
|
|
7813
7930
|
scenario: scenario$9,
|
|
7814
7931
|
},
|
|
7815
7932
|
};
|
|
7816
|
-
const errorProps$
|
|
7933
|
+
const errorProps$6 = {
|
|
7817
7934
|
states: {
|
|
7818
7935
|
error: "Something went wrong. Please try again.",
|
|
7819
7936
|
loading: false,
|
|
@@ -7847,7 +7964,7 @@ const verifiedProps = {
|
|
|
7847
7964
|
},
|
|
7848
7965
|
content: {},
|
|
7849
7966
|
};
|
|
7850
|
-
const EmailVerificationWithError$1 = () => (index.h(sqmPortalVerifyEmailView.PortalVerifyEmailView, Object.assign({}, errorProps$
|
|
7967
|
+
const EmailVerificationWithError$1 = () => (index.h(sqmPortalVerifyEmailView.PortalVerifyEmailView, Object.assign({}, errorProps$6)));
|
|
7851
7968
|
const EmailVerificationSuccess$1 = () => (index.h(sqmPortalVerifyEmailView.PortalVerifyEmailView, Object.assign({}, verifiedProps)));
|
|
7852
7969
|
|
|
7853
7970
|
const PortalVerifyEmail = /*#__PURE__*/Object.freeze({
|
|
@@ -7860,7 +7977,7 @@ const PortalVerifyEmail = /*#__PURE__*/Object.freeze({
|
|
|
7860
7977
|
const AssetCard_stories = {
|
|
7861
7978
|
title: "Components/Asset Card",
|
|
7862
7979
|
};
|
|
7863
|
-
const Default$
|
|
7980
|
+
const Default$9 = () => {
|
|
7864
7981
|
const props = {
|
|
7865
7982
|
text: { titleText: "Marketing Banner" },
|
|
7866
7983
|
imgUrl: "https://res.cloudinary.com/saasquatch/image/upload/v1634255445/squatch-assets/Copy_of_saasquatch-logo-tree-large-horizontal.png",
|
|
@@ -7888,7 +8005,7 @@ const CardWithNoImg = () => {
|
|
|
7888
8005
|
const AssetCard = /*#__PURE__*/Object.freeze({
|
|
7889
8006
|
__proto__: null,
|
|
7890
8007
|
'default': AssetCard_stories,
|
|
7891
|
-
Default: Default$
|
|
8008
|
+
Default: Default$9,
|
|
7892
8009
|
CardWithLongText: CardWithLongText,
|
|
7893
8010
|
CardWithNoImg: CardWithNoImg
|
|
7894
8011
|
});
|
|
@@ -7977,7 +8094,7 @@ const ChangePassword_stories = {
|
|
|
7977
8094
|
scenario: scenario$a,
|
|
7978
8095
|
},
|
|
7979
8096
|
};
|
|
7980
|
-
const defaultProps$
|
|
8097
|
+
const defaultProps$8 = {
|
|
7981
8098
|
states: {
|
|
7982
8099
|
open: false,
|
|
7983
8100
|
loading: false,
|
|
@@ -8021,7 +8138,7 @@ const openProps = {
|
|
|
8021
8138
|
submit: (e) => console.log("Submit", e),
|
|
8022
8139
|
},
|
|
8023
8140
|
};
|
|
8024
|
-
const errorProps$
|
|
8141
|
+
const errorProps$7 = {
|
|
8025
8142
|
states: {
|
|
8026
8143
|
open: true,
|
|
8027
8144
|
loading: false,
|
|
@@ -8065,7 +8182,7 @@ const passwordErrorProps = {
|
|
|
8065
8182
|
submit: (e) => console.log("Submit", e),
|
|
8066
8183
|
},
|
|
8067
8184
|
};
|
|
8068
|
-
const loadingProps$
|
|
8185
|
+
const loadingProps$6 = {
|
|
8069
8186
|
states: {
|
|
8070
8187
|
open: true,
|
|
8071
8188
|
loading: true,
|
|
@@ -8109,17 +8226,17 @@ const successProps$3 = {
|
|
|
8109
8226
|
submit: (e) => console.log("Submit", e),
|
|
8110
8227
|
},
|
|
8111
8228
|
};
|
|
8112
|
-
const Default$
|
|
8229
|
+
const Default$a = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, defaultProps$8));
|
|
8113
8230
|
const Open = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, openProps));
|
|
8114
|
-
const Error$2 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, errorProps$
|
|
8231
|
+
const Error$2 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, errorProps$7));
|
|
8115
8232
|
const PaswordError = () => (index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, passwordErrorProps)));
|
|
8116
|
-
const Loading$1 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, loadingProps$
|
|
8233
|
+
const Loading$1 = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, loadingProps$6));
|
|
8117
8234
|
const Success = () => index.h(ShadowViewAddon.PortalChangePasswordView, Object.assign({}, successProps$3));
|
|
8118
8235
|
|
|
8119
8236
|
const ChangePassword = /*#__PURE__*/Object.freeze({
|
|
8120
8237
|
__proto__: null,
|
|
8121
8238
|
'default': ChangePassword_stories,
|
|
8122
|
-
Default: Default$
|
|
8239
|
+
Default: Default$a,
|
|
8123
8240
|
Open: Open,
|
|
8124
8241
|
Error: Error$2,
|
|
8125
8242
|
PaswordError: PaswordError,
|
|
@@ -8127,10 +8244,72 @@ const ChangePassword = /*#__PURE__*/Object.freeze({
|
|
|
8127
8244
|
Success: Success
|
|
8128
8245
|
});
|
|
8129
8246
|
|
|
8247
|
+
const ChangeMarketing_stories = {
|
|
8248
|
+
title: "Components/Change Marketing Emails Status",
|
|
8249
|
+
};
|
|
8250
|
+
const defaultProps$9 = {
|
|
8251
|
+
states: {
|
|
8252
|
+
success: false,
|
|
8253
|
+
loading: false,
|
|
8254
|
+
submitDisabled: false,
|
|
8255
|
+
formState: {
|
|
8256
|
+
marketingEmailOptIn: false,
|
|
8257
|
+
errors: null,
|
|
8258
|
+
error: "",
|
|
8259
|
+
},
|
|
8260
|
+
user: {
|
|
8261
|
+
id: "zach",
|
|
8262
|
+
accountId: "zach",
|
|
8263
|
+
marketingEmailOptIn: false,
|
|
8264
|
+
},
|
|
8265
|
+
text: {
|
|
8266
|
+
emailPreferencesHeader: "Email preferences",
|
|
8267
|
+
marketingCheckboxLabel: "I want to receive marketing emails and promotions for this referral program from impact.com",
|
|
8268
|
+
submitChangeButtonText: "Save",
|
|
8269
|
+
successMessage: "Opt-in preference has been changed.",
|
|
8270
|
+
},
|
|
8271
|
+
},
|
|
8272
|
+
callbacks: {
|
|
8273
|
+
onSubmit: (props) => console.log(props),
|
|
8274
|
+
setChecked: (value) => console.log(value),
|
|
8275
|
+
},
|
|
8276
|
+
};
|
|
8277
|
+
const Default$b = () => {
|
|
8278
|
+
return index.h("sqm-portal-change-marketing", null);
|
|
8279
|
+
};
|
|
8280
|
+
const Loading$2 = () => {
|
|
8281
|
+
return (index.h(ShadowViewAddon.ChangeMarktingView, Object.assign({}, defaultProps$9, { states: { ...defaultProps$9.states, loading: true } })));
|
|
8282
|
+
};
|
|
8283
|
+
const Error$3 = () => {
|
|
8284
|
+
return (index.h(ShadowViewAddon.ChangeMarktingView, Object.assign({}, defaultProps$9, { states: {
|
|
8285
|
+
...defaultProps$9.states,
|
|
8286
|
+
formState: {
|
|
8287
|
+
...defaultProps$9.states.formState,
|
|
8288
|
+
errors: { error: true },
|
|
8289
|
+
error: "An error string",
|
|
8290
|
+
},
|
|
8291
|
+
} })));
|
|
8292
|
+
};
|
|
8293
|
+
const Success$1 = () => {
|
|
8294
|
+
return (index.h(ShadowViewAddon.ChangeMarktingView, Object.assign({}, defaultProps$9, { states: {
|
|
8295
|
+
...defaultProps$9.states,
|
|
8296
|
+
success: true,
|
|
8297
|
+
} })));
|
|
8298
|
+
};
|
|
8299
|
+
|
|
8300
|
+
const ChangeMarketing = /*#__PURE__*/Object.freeze({
|
|
8301
|
+
__proto__: null,
|
|
8302
|
+
'default': ChangeMarketing_stories,
|
|
8303
|
+
Default: Default$b,
|
|
8304
|
+
Loading: Loading$2,
|
|
8305
|
+
Error: Error$3,
|
|
8306
|
+
Success: Success$1
|
|
8307
|
+
});
|
|
8308
|
+
|
|
8130
8309
|
const PortalProfile_stories = {
|
|
8131
8310
|
title: "Components/Microsite Profile",
|
|
8132
8311
|
};
|
|
8133
|
-
const defaultProps$
|
|
8312
|
+
const defaultProps$a = {
|
|
8134
8313
|
states: {
|
|
8135
8314
|
success: false,
|
|
8136
8315
|
loading: false,
|
|
@@ -8202,7 +8381,7 @@ const noCountry = {
|
|
|
8202
8381
|
onChange: (e) => console.log(e),
|
|
8203
8382
|
},
|
|
8204
8383
|
};
|
|
8205
|
-
const loadingProps$
|
|
8384
|
+
const loadingProps$7 = {
|
|
8206
8385
|
states: {
|
|
8207
8386
|
success: false,
|
|
8208
8387
|
loading: true,
|
|
@@ -8274,7 +8453,7 @@ const disabledProps = {
|
|
|
8274
8453
|
onChange: (e) => console.log(e),
|
|
8275
8454
|
},
|
|
8276
8455
|
};
|
|
8277
|
-
const errorProps$
|
|
8456
|
+
const errorProps$8 = {
|
|
8278
8457
|
states: {
|
|
8279
8458
|
success: false,
|
|
8280
8459
|
loading: false,
|
|
@@ -8346,22 +8525,22 @@ const successProps$4 = {
|
|
|
8346
8525
|
onChange: (e) => console.log(e),
|
|
8347
8526
|
},
|
|
8348
8527
|
};
|
|
8349
|
-
const Default$
|
|
8528
|
+
const Default$c = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, defaultProps$a));
|
|
8350
8529
|
const DefaultNoCountry = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, noCountry));
|
|
8351
|
-
const Loading$
|
|
8530
|
+
const Loading$3 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, loadingProps$7));
|
|
8352
8531
|
const Disabled$1 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, disabledProps));
|
|
8353
|
-
const Error$
|
|
8354
|
-
const Success$
|
|
8532
|
+
const Error$4 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, errorProps$8));
|
|
8533
|
+
const Success$2 = () => index.h(sqmPortalProfileView.PortalProfileView, Object.assign({}, successProps$4));
|
|
8355
8534
|
|
|
8356
8535
|
const PortalProfile = /*#__PURE__*/Object.freeze({
|
|
8357
8536
|
__proto__: null,
|
|
8358
8537
|
'default': PortalProfile_stories,
|
|
8359
|
-
Default: Default$
|
|
8538
|
+
Default: Default$c,
|
|
8360
8539
|
DefaultNoCountry: DefaultNoCountry,
|
|
8361
|
-
Loading: Loading$
|
|
8540
|
+
Loading: Loading$3,
|
|
8362
8541
|
Disabled: Disabled$1,
|
|
8363
|
-
Error: Error$
|
|
8364
|
-
Success: Success$
|
|
8542
|
+
Error: Error$4,
|
|
8543
|
+
Success: Success$2
|
|
8365
8544
|
});
|
|
8366
8545
|
|
|
8367
8546
|
const column = "@author:noah\n@owner:noah\nFeature: Referral Table User Column\n\n Shows the same custom content for each referral\n\n Background:\n Given the column in included in the referral table\n\n @motivating\n Scenario: The title of the date column is configurable\n Given the \"column-title\" prop is set to \"My column title\"\n Then the date column is shown with \"My column title\"\n\n @motivating\n Scenario: The same custom content is shown for each referral\n Given there is at least one referral\n Then for each referral custom content is shown\n And the custom content is provided as slot content";
|
|
@@ -10138,7 +10317,7 @@ const dashboardTemplate = "<sqm-portal-container direction=\"column\" padding=\"
|
|
|
10138
10317
|
|
|
10139
10318
|
const leadSubmitTemplate = "<sqm-referral-iframe></sqm-referral-iframe>\n";
|
|
10140
10319
|
|
|
10141
|
-
const editProfileTemplate = "<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";
|
|
10320
|
+
const editProfileTemplate = "<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<sqm-portal-container direction=\"column\" gap=\"xxx-large\">\n <sqm-portal-change-marketing></sqm-portal-change-marketing>\n</sqm-portal-container>\n";
|
|
10142
10321
|
|
|
10143
10322
|
const activityTemplate = "<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\" padding=\"xxx-large\" gap=\"xxx-large\">\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";
|
|
10144
10323
|
|
|
@@ -10164,17 +10343,17 @@ const LoginReadme = "# sqm-portal-login\n\n\n\n<!-- Auto Generated Below -->\n\n
|
|
|
10164
10343
|
|
|
10165
10344
|
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";
|
|
10166
10345
|
|
|
10167
|
-
const ForgotPasswordReadme = "# sqm-portal-forgot-password\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description
|
|
10346
|
+
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` | Displayed when the forgot password action fails due to a network error. The participant can try refreshing the page. | `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";
|
|
10168
10347
|
|
|
10169
10348
|
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";
|
|
10170
10349
|
|
|
10171
10350
|
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";
|
|
10172
10351
|
|
|
10173
|
-
const ResetPasswordReadme = "# sqm-portal-reset-password\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| ----------------------------- | --------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |\n| `codeInvalidText` | `code-invalid-text` | | `string` | `\"The password reset code is invalid or has expired, please try again.\"` |\n| `confirmPassword` | `confirm-password` | | `boolean` | `false` |\n| `confirmPasswordFieldLabel` | `confirm-password-field-label` | | `string` | `\"Confirm Password\"` |\n| `continueButtonText` | `continue-button-text` | Button text displayed after a successful password reset. | `string` | `\"Continue\"` |\n| `demoData` | -- | | `{ states?: { error: string; loading: boolean; reset: boolean; confirmPassword: boolean; oobCodeValidating: boolean; oobCodeValid: boolean; passwordDemoData?: PasswordFieldViewDemoProps; content: { passwordResetHeader: string; resetPasswordHeader: string; continueButtonText: string; resetPasswordButtonText: string; confirmPasswordFieldLabel: string; passwordFieldLabel: string; meetsRequirementsText?: string; doesNotMeetRequirementsText?: string; minErrorText?: string; uppercaseErrorText?: string; lowercaseErrorText?: string; hasErrorText?: string; resetSuccessText?: string; passwordMismatchText?: string; codeInvalidText?: string; }; }; }` | `undefined` |\n| `doesNotMeetRequirementsText` | `does-not-meet-requirements-text` | | `string` | `\"Password must meet the following requirements:\"` |\n| `failedPage` | `failed-page` | Redirect participants to this page if password reset fails due to an outdated reset attempt. | `string` | `\"/\"` |\n| `hasErrorText` | `has-error-text` | | `string` | `\"contain at least 1 number or symbol\"` |\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` | | `string` | `\"An error occurred while resetting your password. Please refresh the page and try again.\"` |\n| `nextPage` | `next-page` | Redirect participants to this page when they successfully reset their password. | `string` | `\"/\"` |\n| `passwordFieldLabel` | `password-field-label` | | `string` | `\"New Password\"` |\n| `passwordMismatchText` | `password-mismatch-text` | | `string` | `\"Passwords do not match.\"` |\n| `passwordResetHeader` | `password-reset-header` | Displayed after a successful password reset. | `string` | `\"Password reset\"` |\n| `resetPasswordButtonText` | `reset-password-button-text` | | `string` | `\"Reset Password\"` |\n| `resetPasswordHeader` | `reset-password-header` | | `string` | `\"Reset your password\"` |\n| `resetSuccessText` | `reset-success-text` | | `string` | `\"Your password has been reset and you are being redirected. If you are not redirected, please click Continue.\"` |\n| `uppercaseErrorText` | `uppercase-error-text` | | `string` | `\"contain at least 1 uppercase character\"` |\n\n\n## Dependencies\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-reset-password --> sqm-form-message\n sqm-portal-reset-password --> sqm-password-field\n style sqm-portal-reset-password fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
|
|
10352
|
+
const ResetPasswordReadme = "# sqm-portal-reset-password\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| ----------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |\n| `codeInvalidText` | `code-invalid-text` | | `string` | `\"The password reset code is invalid or has expired, please try again.\"` |\n| `confirmPassword` | `confirm-password` | | `boolean` | `false` |\n| `confirmPasswordFieldLabel` | `confirm-password-field-label` | | `string` | `\"Confirm Password\"` |\n| `continueButtonText` | `continue-button-text` | Button text displayed after a successful password reset. | `string` | `\"Continue\"` |\n| `demoData` | -- | | `{ states?: { error: string; loading: boolean; reset: boolean; confirmPassword: boolean; oobCodeValidating: boolean; oobCodeValid: boolean; passwordDemoData?: PasswordFieldViewDemoProps; content: { passwordResetHeader: string; resetPasswordHeader: string; continueButtonText: string; resetPasswordButtonText: string; confirmPasswordFieldLabel: string; passwordFieldLabel: string; meetsRequirementsText?: string; doesNotMeetRequirementsText?: string; minErrorText?: string; uppercaseErrorText?: string; lowercaseErrorText?: string; hasErrorText?: string; resetSuccessText?: string; passwordMismatchText?: string; codeInvalidText?: string; }; }; }` | `undefined` |\n| `doesNotMeetRequirementsText` | `does-not-meet-requirements-text` | | `string` | `\"Password must meet the following requirements:\"` |\n| `failedPage` | `failed-page` | Redirect participants to this page if password reset fails due to an outdated reset attempt. | `string` | `\"/\"` |\n| `hasErrorText` | `has-error-text` | | `string` | `\"contain at least 1 number or symbol\"` |\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` | Displayed when the password reset fails due to a network error. The participant can try refreshing the page. | `string` | `\"An error occurred while resetting your password. Please refresh the page and try again.\"` |\n| `nextPage` | `next-page` | Redirect participants to this page when they successfully reset their password. | `string` | `\"/\"` |\n| `passwordFieldLabel` | `password-field-label` | | `string` | `\"New Password\"` |\n| `passwordMismatchText` | `password-mismatch-text` | | `string` | `\"Passwords do not match.\"` |\n| `passwordResetHeader` | `password-reset-header` | Displayed after a successful password reset. | `string` | `\"Password reset\"` |\n| `resetPasswordButtonText` | `reset-password-button-text` | | `string` | `\"Reset Password\"` |\n| `resetPasswordHeader` | `reset-password-header` | | `string` | `\"Reset your password\"` |\n| `resetSuccessText` | `reset-success-text` | | `string` | `\"Your password has been reset and you are being redirected. If you are not redirected, please click Continue.\"` |\n| `uppercaseErrorText` | `uppercase-error-text` | | `string` | `\"contain at least 1 uppercase character\"` |\n\n\n## Dependencies\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-reset-password --> sqm-form-message\n sqm-portal-reset-password --> sqm-password-field\n style sqm-portal-reset-password fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
|
|
10174
10353
|
|
|
10175
|
-
const EmailVerificationReadme = "# sqm-portal-email-verification\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description
|
|
10354
|
+
const EmailVerificationReadme = "# sqm-portal-email-verification\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; isVerified?: boolean; loadingVerification?: boolean; countdown?: number; }; content?: { email: string; verifyMessage: string; emailVerificationHeader: string; resendEmailButtonText: string; verificationStatusMessage?: string; verificationLoadingMessage?: string; verificationResentMessage?: string; }; }` | `undefined` |\n| `emailVerificationHeader` | `email-verification-header` | | `string` | `\"Verify your email\"` |\n| `networkErrorMessage` | `network-error-message` | Displayed when your verification email fails to send due to a network error. The participant can try refreshing the page. | `string` | `\"An error occurred while verifying your password. Please refresh the page.\"` |\n| `redirectPath` | `redirect-path` | Redirect participants to this page from their verification email. | `string` | `\"/verifyEmail\"` |\n| `resendEmailButtonText` | `resend-email-button-text` | | `string` | `\"Re-send Email\"` |\n| `verificationLoadingMessage` | `verification-loading-message` | | `string` | `\"Checking verification status\"` |\n| `verificationResentMessage` | `verification-resent-message` | | `string` | `\"Your verification email has been resent successfully\"` |\n| `verificationStatusMessage` | `verification-status-message` | | `string` | `\"Checking verification status in {countdown}\"` |\n| `verifyMessage` | `verify-message` | | `string` | `\"A verification email was sent to {email}. Please verify your email to continue to the portal. Resending an email will invalidate the previous email.\"` |\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-email-verification --> sqm-form-message\n style sqm-portal-email-verification fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
|
|
10176
10355
|
|
|
10177
|
-
const EmailVerifiedReadme = "# sqm-portal-verify-email\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description
|
|
10356
|
+
const EmailVerifiedReadme = "# sqm-portal-verify-email\n\n\n\n<!-- Auto Generated Below -->\n\n\n## Properties\n\n| Property | Attribute | Description | Type | Default |\n| --------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |\n| `continueText` | `continue-text` | | `string` | `\"Continue\"` |\n| `demoData` | -- | | `{ states?: { error: string; loading: boolean; success: boolean; }; data?: { oobCode: string; }; content?: { verifySuccessText?: string; verifyEmailText?: string; verifyInvalidText?: string; continueText?: string; }; }` | `undefined` |\n| `failedPage` | `failed-page` | Redirect participants to this page if verification fails due to an outdated verification attempt. | `string` | `\"/\"` |\n| `networkErrorMessage` | `network-error-message` | Displayed when the email verification fails due to a network error. The participant can try refreshing the page. | `string` | `\"An error occurred while verifying your email. Please refresh the page and try again.\"` |\n| `nextPage` | `next-page` | Redirect participants to this page when they successfully verify their email. | `string` | `\"/\"` |\n| `verifyEmailText` | `verify-email-text` | | `string` | `\"Verify your email\"` |\n| `verifyInvalidText` | `verify-invalid-text` | | `string` | `\"The email verification code is invalid or has expired, please try again.\"` |\n| `verifySuccessText` | `verify-success-text` | | `string` | `\"Your email has been verified and you are being redirected. If you are not redirected, please click Continue.\"` |\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-verify-email --> sqm-form-message\n style sqm-portal-verify-email fill:#f9f,stroke:#333,stroke-width:4px\n```\n\n----------------------------------------------\n\n*Built with [StencilJS](https://stenciljs.com/)*\n";
|
|
10178
10357
|
|
|
10179
10358
|
const PortalTemplates_stories = {
|
|
10180
10359
|
title: "Templates / Microsite",
|
|
@@ -10335,7 +10514,7 @@ const ProgramMenu = /*#__PURE__*/Object.freeze({
|
|
|
10335
10514
|
const PoweredByImg_stories = {
|
|
10336
10515
|
title: "Powered By",
|
|
10337
10516
|
};
|
|
10338
|
-
const Default$
|
|
10517
|
+
const Default$d = () => {
|
|
10339
10518
|
return index.h(ShadowViewAddon.PoweredByImg, null);
|
|
10340
10519
|
};
|
|
10341
10520
|
const CustomColor = () => {
|
|
@@ -10348,7 +10527,7 @@ const CustomWidthAndHeight = () => {
|
|
|
10348
10527
|
const PoweredByImg = /*#__PURE__*/Object.freeze({
|
|
10349
10528
|
__proto__: null,
|
|
10350
10529
|
'default': PoweredByImg_stories,
|
|
10351
|
-
Default: Default$
|
|
10530
|
+
Default: Default$d,
|
|
10352
10531
|
CustomColor: CustomColor,
|
|
10353
10532
|
CustomWidthAndHeight: CustomWidthAndHeight
|
|
10354
10533
|
});
|
|
@@ -10361,7 +10540,7 @@ const PortalFooter_stories = {
|
|
|
10361
10540
|
scenario: scenario$f,
|
|
10362
10541
|
},
|
|
10363
10542
|
};
|
|
10364
|
-
const defaultProps$
|
|
10543
|
+
const defaultProps$b = {
|
|
10365
10544
|
supportEmail: "support@example.com",
|
|
10366
10545
|
supportText: "For program support, contact {email}",
|
|
10367
10546
|
hidePoweredBy: false,
|
|
@@ -10371,12 +10550,12 @@ const defaultProps$9 = {
|
|
|
10371
10550
|
paddingBottom: "large",
|
|
10372
10551
|
paddingLeft: "large",
|
|
10373
10552
|
};
|
|
10374
|
-
const DefaultFooter = () => index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$
|
|
10375
|
-
const FooterWithTerms = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$
|
|
10376
|
-
const FooterWithFAQ = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$
|
|
10377
|
-
const FooterWithTermsAndFAQ = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$
|
|
10378
|
-
const FooterNoPoweredBy = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$
|
|
10379
|
-
const FooterNoSupportText = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$
|
|
10553
|
+
const DefaultFooter = () => index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$b));
|
|
10554
|
+
const FooterWithTerms = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$b, { termsLink: "https://example.com", termsText: "Terms and Conditions" })));
|
|
10555
|
+
const FooterWithFAQ = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$b, { faqLink: "https://example.com", faqText: "FAQ" })));
|
|
10556
|
+
const FooterWithTermsAndFAQ = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$b, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ" })));
|
|
10557
|
+
const FooterNoPoweredBy = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$b, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hidePoweredBy: true })));
|
|
10558
|
+
const FooterNoSupportText = () => (index.h(ShadowViewAddon.PortalFooterView, Object.assign({}, defaultProps$b, { termsLink: "https://example.com", termsText: "Terms and Conditions", faqLink: "https://example.com", faqText: "FAQ", hideSupportText: true })));
|
|
10380
10559
|
|
|
10381
10560
|
const PortalFooter = /*#__PURE__*/Object.freeze({
|
|
10382
10561
|
__proto__: null,
|
|
@@ -10658,7 +10837,7 @@ const props$1 = {
|
|
|
10658
10837
|
},
|
|
10659
10838
|
},
|
|
10660
10839
|
};
|
|
10661
|
-
const errorProps$
|
|
10840
|
+
const errorProps$9 = {
|
|
10662
10841
|
states: {
|
|
10663
10842
|
registrationFormState: {
|
|
10664
10843
|
validationErrors: {
|
|
@@ -10676,7 +10855,7 @@ const NameFields = () => {
|
|
|
10676
10855
|
return index.h(ShadowViewAddon.NameFieldsView, Object.assign({}, props$1));
|
|
10677
10856
|
};
|
|
10678
10857
|
const NameFieldsWithErrors = () => {
|
|
10679
|
-
return index.h(ShadowViewAddon.NameFieldsView, Object.assign({}, errorProps$
|
|
10858
|
+
return index.h(ShadowViewAddon.NameFieldsView, Object.assign({}, errorProps$9));
|
|
10680
10859
|
};
|
|
10681
10860
|
|
|
10682
10861
|
const NameFields$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -10694,7 +10873,7 @@ const CheckboxField_stories = {
|
|
|
10694
10873
|
scenario: scenario$j,
|
|
10695
10874
|
},
|
|
10696
10875
|
};
|
|
10697
|
-
const defaultProps$
|
|
10876
|
+
const defaultProps$c = {
|
|
10698
10877
|
states: {
|
|
10699
10878
|
registrationFormState: {
|
|
10700
10879
|
validationErrors: {},
|
|
@@ -10702,7 +10881,7 @@ const defaultProps$a = {
|
|
|
10702
10881
|
checked: false,
|
|
10703
10882
|
},
|
|
10704
10883
|
content: {
|
|
10705
|
-
checkboxName: "
|
|
10884
|
+
checkboxName: "terms",
|
|
10706
10885
|
checkboxLabel: "By signing up you agree to the {labelLink}",
|
|
10707
10886
|
checkboxLabelLink: "https://example.com",
|
|
10708
10887
|
checkboxLabelLinkText: "Terms and Conditions",
|
|
@@ -10735,35 +10914,35 @@ const defaultRegisterProps = {
|
|
|
10735
10914
|
invalidEmailErrorMessage: "Must be a valid email address",
|
|
10736
10915
|
},
|
|
10737
10916
|
};
|
|
10738
|
-
const Default$
|
|
10739
|
-
const DefaultChecked = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$
|
|
10740
|
-
...defaultProps$
|
|
10917
|
+
const Default$e = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$c))));
|
|
10918
|
+
const DefaultChecked = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$c, { states: {
|
|
10919
|
+
...defaultProps$c.states,
|
|
10741
10920
|
checked: true,
|
|
10742
10921
|
} }))));
|
|
10743
|
-
const CustomLabel = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$
|
|
10744
|
-
...defaultProps$
|
|
10922
|
+
const CustomLabel = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$c, { content: {
|
|
10923
|
+
...defaultProps$c.content,
|
|
10745
10924
|
checkboxLabel: "I Agree",
|
|
10746
10925
|
} }))));
|
|
10747
|
-
const Error$
|
|
10748
|
-
...defaultProps$
|
|
10926
|
+
const Error$5 = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$c, { states: {
|
|
10927
|
+
...defaultProps$c.states,
|
|
10749
10928
|
registrationFormState: {
|
|
10750
10929
|
validationErrors: {
|
|
10751
10930
|
agree: "Must be checked",
|
|
10752
10931
|
},
|
|
10753
10932
|
},
|
|
10754
10933
|
} }))));
|
|
10755
|
-
const CustomError = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$
|
|
10756
|
-
...defaultProps$
|
|
10934
|
+
const CustomError = createHookStory(() => (index.h(ShadowViewAddon.CheckboxFieldView, Object.assign({}, defaultProps$c, { states: {
|
|
10935
|
+
...defaultProps$c.states,
|
|
10757
10936
|
registrationFormState: {
|
|
10758
10937
|
validationErrors: {
|
|
10759
10938
|
agree: "Must be checked",
|
|
10760
10939
|
},
|
|
10761
10940
|
},
|
|
10762
10941
|
}, content: {
|
|
10763
|
-
...defaultProps$
|
|
10942
|
+
...defaultProps$c.content,
|
|
10764
10943
|
errorMessage: "This checkbox must be checked to continue",
|
|
10765
10944
|
} }))));
|
|
10766
|
-
const TermsAndConditions$
|
|
10945
|
+
const TermsAndConditions$2 = createHookStory(() => (index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultRegisterProps, {
|
|
10767
10946
|
//@ts-ignore
|
|
10768
10947
|
content: {
|
|
10769
10948
|
...defaultRegisterProps.content,
|
|
@@ -10790,16 +10969,34 @@ const TermsAndConditionsLongCustomLabel = createHookStory(() => (index.h(ShadowV
|
|
|
10790
10969
|
const CheckboxField = /*#__PURE__*/Object.freeze({
|
|
10791
10970
|
__proto__: null,
|
|
10792
10971
|
'default': CheckboxField_stories,
|
|
10793
|
-
Default: Default$
|
|
10972
|
+
Default: Default$e,
|
|
10794
10973
|
DefaultChecked: DefaultChecked,
|
|
10795
10974
|
CustomLabel: CustomLabel,
|
|
10796
|
-
Error: Error$
|
|
10975
|
+
Error: Error$5,
|
|
10797
10976
|
CustomError: CustomError,
|
|
10798
|
-
TermsAndConditions: TermsAndConditions$
|
|
10977
|
+
TermsAndConditions: TermsAndConditions$2,
|
|
10799
10978
|
TermsAndConditionsCustomLabel: TermsAndConditionsCustomLabel,
|
|
10800
10979
|
TermsAndConditionsLongCustomLabel: TermsAndConditionsLongCustomLabel
|
|
10801
10980
|
});
|
|
10802
10981
|
|
|
10982
|
+
const scenario$k = "@owner:zach\n@author:zach\nFeature: Marketing Emails Checkbox\n\n A checkbox that is used to opt in for marketing emails.\n\n Background: The microsite registration form contains a marketing emails checkbox\n\n Scenario: The registration form can be configured to include a marketing emails checkbox\n Given a user is viewing the \"/register\"\n And \"/register\" contains the registration form\n And they have added a marketing emails checkbox to the form in the content editor\n Then 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\n Scenario: The user can opt in to marketing emails\n Given the user is filling out the registration form\n And the fields have valid input\n And the marketing emails checkbox is checked\n When they try to register\n Then the form is submitted\n And there are no errors\n And the \"marketingEmailOptIn\" value is set to true\n And the user is opted in to marketing emails\n\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 \"marketingEmailOptIn\"\n And the name is not configurable";
|
|
10983
|
+
|
|
10984
|
+
const MarketingEmailsCheckbox_stories = {
|
|
10985
|
+
title: "Components/Marketing Emails Checkbox",
|
|
10986
|
+
parameters: {
|
|
10987
|
+
scenario: scenario$k,
|
|
10988
|
+
},
|
|
10989
|
+
};
|
|
10990
|
+
const Default$f = () => {
|
|
10991
|
+
return index.h("sqm-marketing-emails-checkbox", null);
|
|
10992
|
+
};
|
|
10993
|
+
|
|
10994
|
+
const MarketingEmailsCheckbox = /*#__PURE__*/Object.freeze({
|
|
10995
|
+
__proto__: null,
|
|
10996
|
+
'default': MarketingEmailsCheckbox_stories,
|
|
10997
|
+
Default: Default$f
|
|
10998
|
+
});
|
|
10999
|
+
|
|
10803
11000
|
const UseCheckboxField_stories = {
|
|
10804
11001
|
title: "Hooks / useCheckboxField",
|
|
10805
11002
|
parameters: {
|
|
@@ -10829,7 +11026,7 @@ function setupGraphQL$9() {
|
|
|
10829
11026
|
}, []);
|
|
10830
11027
|
return { id, accountId };
|
|
10831
11028
|
}
|
|
10832
|
-
const TermsAndConditions$
|
|
11029
|
+
const TermsAndConditions$3 = createHookStory(() => {
|
|
10833
11030
|
setupGraphQL$9();
|
|
10834
11031
|
return (index.h("sqm-portal-register", null,
|
|
10835
11032
|
index.h("div", { slot: "terms" },
|
|
@@ -10867,7 +11064,7 @@ const MissingName = createHookStory(() => {
|
|
|
10867
11064
|
const UseCheckboxField = /*#__PURE__*/Object.freeze({
|
|
10868
11065
|
__proto__: null,
|
|
10869
11066
|
'default': UseCheckboxField_stories,
|
|
10870
|
-
TermsAndConditions: TermsAndConditions$
|
|
11067
|
+
TermsAndConditions: TermsAndConditions$3,
|
|
10871
11068
|
TermsAndConditionsWithLabel: TermsAndConditionsWithLabel,
|
|
10872
11069
|
MultipleCheckboxes: MultipleCheckboxes,
|
|
10873
11070
|
OptionalCheckboxes: OptionalCheckboxes,
|
|
@@ -10877,7 +11074,7 @@ const UseCheckboxField = /*#__PURE__*/Object.freeze({
|
|
|
10877
11074
|
const DropdownField_stories = {
|
|
10878
11075
|
title: "Components/Dropdown Field",
|
|
10879
11076
|
};
|
|
10880
|
-
const defaultProps$
|
|
11077
|
+
const defaultProps$d = {
|
|
10881
11078
|
states: {
|
|
10882
11079
|
registrationFormState: {},
|
|
10883
11080
|
},
|
|
@@ -10892,24 +11089,24 @@ const defaultProps$b = {
|
|
|
10892
11089
|
],
|
|
10893
11090
|
},
|
|
10894
11091
|
};
|
|
10895
|
-
const Default$
|
|
10896
|
-
const CustomLabel$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$
|
|
10897
|
-
...defaultProps$
|
|
11092
|
+
const Default$g = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$d))));
|
|
11093
|
+
const CustomLabel$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$d, { content: {
|
|
11094
|
+
...defaultProps$d.content,
|
|
10898
11095
|
dropdownLabel: "Pick your favorite",
|
|
10899
11096
|
} }))));
|
|
10900
|
-
const Error$
|
|
10901
|
-
...defaultProps$
|
|
11097
|
+
const Error$6 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$d, { states: {
|
|
11098
|
+
...defaultProps$d.states,
|
|
10902
11099
|
registrationFormState: {
|
|
10903
11100
|
validationErrors: {
|
|
10904
11101
|
options: "Must select an option",
|
|
10905
11102
|
},
|
|
10906
11103
|
},
|
|
10907
11104
|
} }))));
|
|
10908
|
-
const CustomError$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$
|
|
10909
|
-
...defaultProps$
|
|
11105
|
+
const CustomError$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFieldView, Object.assign({}, defaultProps$d, { content: {
|
|
11106
|
+
...defaultProps$d.content,
|
|
10910
11107
|
errorMessage: "An option must be selected to continue",
|
|
10911
11108
|
}, states: {
|
|
10912
|
-
...defaultProps$
|
|
11109
|
+
...defaultProps$d.states,
|
|
10913
11110
|
registrationFormState: {
|
|
10914
11111
|
validationErrors: {
|
|
10915
11112
|
options: "Must select an option",
|
|
@@ -10920,9 +11117,9 @@ const CustomError$1 = createHookStory(() => (index.h(ShadowViewAddon.DropdownFie
|
|
|
10920
11117
|
const DropdownField = /*#__PURE__*/Object.freeze({
|
|
10921
11118
|
__proto__: null,
|
|
10922
11119
|
'default': DropdownField_stories,
|
|
10923
|
-
Default: Default$
|
|
11120
|
+
Default: Default$g,
|
|
10924
11121
|
CustomLabel: CustomLabel$1,
|
|
10925
|
-
Error: Error$
|
|
11122
|
+
Error: Error$6,
|
|
10926
11123
|
CustomError: CustomError$1
|
|
10927
11124
|
});
|
|
10928
11125
|
|
|
@@ -10985,15 +11182,15 @@ const UseDropdownField = /*#__PURE__*/Object.freeze({
|
|
|
10985
11182
|
MissingName: MissingName$1
|
|
10986
11183
|
});
|
|
10987
11184
|
|
|
10988
|
-
const scenario$
|
|
11185
|
+
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 | |";
|
|
10989
11186
|
|
|
10990
11187
|
const InputField_stories = {
|
|
10991
11188
|
title: "Components/Input Field",
|
|
10992
11189
|
parameters: {
|
|
10993
|
-
scenario: scenario$
|
|
11190
|
+
scenario: scenario$l,
|
|
10994
11191
|
},
|
|
10995
11192
|
};
|
|
10996
|
-
const defaultProps$
|
|
11193
|
+
const defaultProps$e = {
|
|
10997
11194
|
states: {
|
|
10998
11195
|
registrationFormState: {
|
|
10999
11196
|
validationErrors: {},
|
|
@@ -11030,21 +11227,21 @@ const defaultRegisterProps$1 = {
|
|
|
11030
11227
|
invalidEmailErrorMessage: "Must be a valid email address",
|
|
11031
11228
|
},
|
|
11032
11229
|
};
|
|
11033
|
-
const Default$
|
|
11034
|
-
const CustomLabel$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$
|
|
11035
|
-
const Error$
|
|
11036
|
-
...defaultProps$
|
|
11230
|
+
const Default$h = () => index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$e));
|
|
11231
|
+
const CustomLabel$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$e, { content: { ...defaultProps$e.content, fieldLabel: "My Label" } })));
|
|
11232
|
+
const Error$7 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$e, { states: {
|
|
11233
|
+
...defaultProps$e.states,
|
|
11037
11234
|
registrationFormState: {
|
|
11038
11235
|
validationErrors: {
|
|
11039
11236
|
field: "Cannot be empty",
|
|
11040
11237
|
},
|
|
11041
11238
|
},
|
|
11042
11239
|
} })));
|
|
11043
|
-
const CustomError$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$
|
|
11044
|
-
...defaultProps$
|
|
11240
|
+
const CustomError$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$e, { content: {
|
|
11241
|
+
...defaultProps$e.content,
|
|
11045
11242
|
errorMessage: "A value must be entered to continue",
|
|
11046
11243
|
}, states: {
|
|
11047
|
-
...defaultProps$
|
|
11244
|
+
...defaultProps$e.states,
|
|
11048
11245
|
registrationFormState: {
|
|
11049
11246
|
validationErrors: {
|
|
11050
11247
|
field: "Cannot be empty",
|
|
@@ -11052,27 +11249,27 @@ const CustomError$2 = () => (index.h(ShadowViewAddon.InputFieldView, Object.assi
|
|
|
11052
11249
|
},
|
|
11053
11250
|
} })));
|
|
11054
11251
|
const DateType = () => {
|
|
11055
|
-
return (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$
|
|
11056
|
-
...defaultProps$
|
|
11252
|
+
return (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$e, { content: {
|
|
11253
|
+
...defaultProps$e.content,
|
|
11057
11254
|
fieldLabel: "Date",
|
|
11058
11255
|
fieldType: "date",
|
|
11059
11256
|
} })));
|
|
11060
11257
|
};
|
|
11061
11258
|
const TelType = () => {
|
|
11062
|
-
return (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$
|
|
11063
|
-
...defaultProps$
|
|
11259
|
+
return (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$e, { content: {
|
|
11260
|
+
...defaultProps$e.content,
|
|
11064
11261
|
fieldLabel: "Phone Number",
|
|
11065
11262
|
fieldType: "tel",
|
|
11066
11263
|
} })));
|
|
11067
11264
|
};
|
|
11068
11265
|
const RegistrationField = () => (index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultRegisterProps$1, { content: {
|
|
11069
11266
|
...defaultRegisterProps$1.content,
|
|
11070
|
-
formData: index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$
|
|
11267
|
+
formData: index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$e)),
|
|
11071
11268
|
} })));
|
|
11072
11269
|
const RegistrationFieldCustomLabel = () => (index.h(ShadowViewAddon.PortalRegisterView, Object.assign({}, defaultRegisterProps$1, { content: {
|
|
11073
11270
|
...defaultRegisterProps$1.content,
|
|
11074
|
-
formData: (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$
|
|
11075
|
-
...defaultProps$
|
|
11271
|
+
formData: (index.h(ShadowViewAddon.InputFieldView, Object.assign({}, defaultProps$e, { content: {
|
|
11272
|
+
...defaultProps$e.content,
|
|
11076
11273
|
fieldLabel: "Data",
|
|
11077
11274
|
} }))),
|
|
11078
11275
|
} })));
|
|
@@ -11080,9 +11277,9 @@ const RegistrationFieldCustomLabel = () => (index.h(ShadowViewAddon.PortalRegist
|
|
|
11080
11277
|
const InputField = /*#__PURE__*/Object.freeze({
|
|
11081
11278
|
__proto__: null,
|
|
11082
11279
|
'default': InputField_stories,
|
|
11083
|
-
Default: Default$
|
|
11280
|
+
Default: Default$h,
|
|
11084
11281
|
CustomLabel: CustomLabel$2,
|
|
11085
|
-
Error: Error$
|
|
11282
|
+
Error: Error$7,
|
|
11086
11283
|
CustomError: CustomError$2,
|
|
11087
11284
|
DateType: DateType,
|
|
11088
11285
|
TelType: TelType,
|
|
@@ -11093,7 +11290,7 @@ const InputField = /*#__PURE__*/Object.freeze({
|
|
|
11093
11290
|
const UseInputField_stories = {
|
|
11094
11291
|
title: "Hooks / useInputField",
|
|
11095
11292
|
parameters: {
|
|
11096
|
-
scenario: scenario$
|
|
11293
|
+
scenario: scenario$l,
|
|
11097
11294
|
},
|
|
11098
11295
|
};
|
|
11099
11296
|
function setupGraphQL$b() {
|
|
@@ -11175,12 +11372,12 @@ const UseInputField = /*#__PURE__*/Object.freeze({
|
|
|
11175
11372
|
MissingName: MissingName$2
|
|
11176
11373
|
});
|
|
11177
11374
|
|
|
11178
|
-
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 |";
|
|
11375
|
+
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 |";
|
|
11179
11376
|
|
|
11180
11377
|
const RewardExchangeList_stories = {
|
|
11181
11378
|
title: "Components/Reward Exchange List",
|
|
11182
11379
|
parameters: {
|
|
11183
|
-
scenario: scenario$
|
|
11380
|
+
scenario: scenario$m,
|
|
11184
11381
|
},
|
|
11185
11382
|
};
|
|
11186
11383
|
const StoryBase = (props) => () => {
|
|
@@ -11202,7 +11399,7 @@ const RedemptionError = StoryBase(ShadowViewAddon.redemptionError);
|
|
|
11202
11399
|
const QueryError = StoryBase(ShadowViewAddon.queryError);
|
|
11203
11400
|
const SuccessPromo = StoryBase(ShadowViewAddon.success);
|
|
11204
11401
|
const SuccessVariableAndStepped = StoryBase(ShadowViewAddon.successVariable);
|
|
11205
|
-
const Loading$
|
|
11402
|
+
const Loading$4 = StoryBase(ShadowViewAddon.loading);
|
|
11206
11403
|
const Empty$2 = StoryBase(ShadowViewAddon.empty);
|
|
11207
11404
|
|
|
11208
11405
|
const RewardExchangeList = /*#__PURE__*/Object.freeze({
|
|
@@ -11224,16 +11421,16 @@ const RewardExchangeList = /*#__PURE__*/Object.freeze({
|
|
|
11224
11421
|
QueryError: QueryError,
|
|
11225
11422
|
SuccessPromo: SuccessPromo,
|
|
11226
11423
|
SuccessVariableAndStepped: SuccessVariableAndStepped,
|
|
11227
|
-
Loading: Loading$
|
|
11424
|
+
Loading: Loading$4,
|
|
11228
11425
|
Empty: Empty$2
|
|
11229
11426
|
});
|
|
11230
11427
|
|
|
11231
|
-
const scenario$
|
|
11428
|
+
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";
|
|
11232
11429
|
|
|
11233
11430
|
const ProgramExplainer_stories = {
|
|
11234
11431
|
title: "Components/Program Explainer",
|
|
11235
11432
|
parameters: {
|
|
11236
|
-
scenario: scenario$
|
|
11433
|
+
scenario: scenario$n,
|
|
11237
11434
|
},
|
|
11238
11435
|
};
|
|
11239
11436
|
const OneStep = () => {
|
|
@@ -11289,12 +11486,12 @@ const ProgramExplainer = /*#__PURE__*/Object.freeze({
|
|
|
11289
11486
|
ProgramExplainerGeneric: ProgramExplainerGeneric
|
|
11290
11487
|
});
|
|
11291
11488
|
|
|
11292
|
-
const scenario$
|
|
11489
|
+
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";
|
|
11293
11490
|
|
|
11294
11491
|
const ProgramExplainerStep_stories = {
|
|
11295
11492
|
title: "Components/Program Explainer Step",
|
|
11296
11493
|
parameters: {
|
|
11297
|
-
scenario: scenario$
|
|
11494
|
+
scenario: scenario$o,
|
|
11298
11495
|
},
|
|
11299
11496
|
};
|
|
11300
11497
|
const ProgramExplainerStep = () => {
|
|
@@ -11311,12 +11508,12 @@ const ProgramExplainerStep$1 = /*#__PURE__*/Object.freeze({
|
|
|
11311
11508
|
ProgramExplainerStepCustom: ProgramExplainerStepCustom
|
|
11312
11509
|
});
|
|
11313
11510
|
|
|
11314
|
-
const scenario$
|
|
11511
|
+
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\"";
|
|
11315
11512
|
|
|
11316
11513
|
const SqmBrand_stories = {
|
|
11317
11514
|
title: "Components/Brand",
|
|
11318
11515
|
parameters: {
|
|
11319
|
-
scenario: scenario$
|
|
11516
|
+
scenario: scenario$p,
|
|
11320
11517
|
},
|
|
11321
11518
|
};
|
|
11322
11519
|
const SampleComponents = () => (index.h("div", { style: { padding: "10px", border: "5px solid #EEE" } },
|
|
@@ -11417,12 +11614,12 @@ const BrandStories = /*#__PURE__*/Object.freeze({
|
|
|
11417
11614
|
Fonts: Fonts
|
|
11418
11615
|
});
|
|
11419
11616
|
|
|
11420
|
-
const scenario$
|
|
11617
|
+
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 |";
|
|
11421
11618
|
|
|
11422
11619
|
const CardFeed_stories = {
|
|
11423
11620
|
title: "Components/Card Feed",
|
|
11424
11621
|
parameters: {
|
|
11425
|
-
scenario: scenario$
|
|
11622
|
+
scenario: scenario$q,
|
|
11426
11623
|
},
|
|
11427
11624
|
};
|
|
11428
11625
|
const oneAction$1 = {
|
|
@@ -11659,12 +11856,12 @@ const CardFeed = /*#__PURE__*/Object.freeze({
|
|
|
11659
11856
|
CardFeedGeneric: CardFeedGeneric
|
|
11660
11857
|
});
|
|
11661
11858
|
|
|
11662
|
-
const scenario$
|
|
11859
|
+
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";
|
|
11663
11860
|
|
|
11664
11861
|
const PortalContainer_stories = {
|
|
11665
11862
|
title: "Components/Microsite Container",
|
|
11666
11863
|
parameters: {
|
|
11667
|
-
scenario: scenario$
|
|
11864
|
+
scenario: scenario$r,
|
|
11668
11865
|
},
|
|
11669
11866
|
};
|
|
11670
11867
|
const TooWideColumn = () => (index.h("div", { style: { width: "200px", border: "1px dashed grey" } },
|
|
@@ -11832,11 +12029,11 @@ const scenario3 = "@author:derek @owner:derek\nFeature: Reward Table Status Colu
|
|
|
11832
12029
|
|
|
11833
12030
|
const scenario4 = "@author:derek @owner:derek\nFeature: Reward Table Source Column\n Shows the source of each reward\n\n @motivating @ui\n Scenario Outline: The title of the source column is configurable\n Given the \"column-title\" prop is set to <value>\n Then the source column is shown with <columnTitle>\n\n Examples:\n | value | columnTitle |\n | Source | |\n | My column title | My column title |\n\n @motivating @ui\n Scenario: The source column displays manual if the reward is caused by a manual action\n Given a user with a \"MANUAL\" reward\n When they view the rewards table\n Then the source of their reward is displayed as \"Manual\"\n\n @motivating @ui\n Scenario: The source column displays the program name if the reward is caused automatically by a program\n Given a user with a \"AUTOMATED\" program reward\n And the program has name \"Loyalty Program\"\n When they view the rewards table\n Then the source of their reward is displayed as \"Loyalty Program\"\n\n @motivating @ui\n Scenario Outline: The source column displays customizable reward exchange text with amount if the reward is caused by reward exchange\n Given the \"reward-exchange-text\" prop is <propValue>\n And a user with a \"MANUAL\" reward\n But it was created by a reward exchange\n Then they view the rewards table\n Then the source displays <exchangeText>\n And under it displays the following\n | prettyRedeemedCredit → prettyValue |\n\n Examples:\n | propValue | exchangeText |\n | | Reward Exchange |\n | Exchanged | Exchanged |\n\n @motivating @ui\n Scenario Outline: The source column displays customizable referral information if the reward is from a referral\n Given the \"reward-source-text\" prop is <propValue>\n And a user with a referral reward\n And that reward has <rewardSource>\n When they view the rewards table\n Then then source displays <referralText>\n And under it displays the full name of the <referralUser>\n\n Examples:\n | propValue | rewardSource | referralText | referralUser |\n | | REFERRED | Referred by | referrer user |\n | | FRIEND_SIGNUP | Referral to | referred user |\n | {rewardSource, select, FRIEND_SIGNUP {You Referred} REFERRED {Referred you} other {}} | REFERRED | Referred you | referrer user |\n | {rewardSource, select, FRIEND_SIGNUP {You Referred} REFERRED {Referred you} other {}} | FRIEND_SIGNUP | You Referred | referred user |\n\n @motivating @ui\n Scenario Outline: The source column displays the existing name for a referral if either the first name or last name does not exist\n Given a user with a referral reward\n And referral user exists\n And referral user has <name>\n But referral user has no <otherName>\n When they view the rewards table\n Then referral user's name is displayed as <name>\n\n Examples:\n | name | otherName |\n | first.name | last.name |\n | last.name | first.name |\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Anonymous User\" if the referral user has no names\n Given a user with a referral reward\n And that reward has <rewardSource>\n And the <referralUser> has no first name\n And the <referralUser> has no last name\n When they view the rewards table\n Then then source displays <sourceText>\n And under it displays \"Anonymous User\"\n\n Examples:\n | rewardSource | referralUser | sourceText |\n | FRIEND_SIGNUP | referrer | Referral to |\n | REFERRED | referred user | Referred by |\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Deleted User\" if the referral user is deleted in the system\n Given a user with a referral reward\n And that reward has <rewardSource>\n But <referral> user was deleted\n When they view the rewards table\n Then the source displays <sourceText>\n And under it displays \"Deleted User\"\n\n Examples:\n | rewardSource | referral | sourceText |\n | \"FRIEND_SIGNUP\" | referrer | Referral to |\n | \"REFERRED\" | referred | Referred by |\n\n @motivating @ui\n Scenario Outline: The source column displays referral as \"Deleted referral\" if the referral user is deleted in the system\n Given a user with a referral reward\n And that reward has <rewardSource>\n But <referral> user was deleted\n When they view the rewards table\n Then the source displays <sourceText>\n And under it displays \"Deleted referral\"\n\n Examples:\n | rewardSource | referral | sourceText |\n | \"FRIEND_SIGNUP\" | referrer | Referral to |\n | \"REFERRED\" | referred | Referred by |\n\n @minutia @ui\n Scenario Outline: Name fallbacks for referral users without names are customizable\n Given <prop> with <value>\n And a user with a referral reward\n But the referral user <hadAction>\n When they view the rewards table\n Then the source displays <value> as the referral user\n\n Examples:\n | prop | value | hadAction |\n | deleted-user | Former Customer | was deleted |\n | anonymous-user | Nameless User | had first and last name deleted |\n\n @motivating\n Scenario Outline: Source text can be customized\n Given the \"reward-source-text\" prop is \"{rewardSource, select, MANUAL {Support} AUTOMATED {Loyalty Program} other {}}\"\n And a user with a <rewardSource> reward\n When they view the rewards table\n Then the source is <sourceText>\n\n Examples:\n | rewardSource | sourceText |\n | MANUAL | Support |\n | AUTOMATED | Loyalty Program |\n";
|
|
11834
12031
|
|
|
11835
|
-
const scenario$
|
|
12032
|
+
const scenario$s = scenario1 + scenario2 + scenario3 + scenario4;
|
|
11836
12033
|
const RewardsTableCell_stories = {
|
|
11837
12034
|
title: "Components/Rewards Table Cell",
|
|
11838
12035
|
parameters: {
|
|
11839
|
-
scenario: scenario$
|
|
12036
|
+
scenario: scenario$s,
|
|
11840
12037
|
},
|
|
11841
12038
|
};
|
|
11842
12039
|
const rewardsData$1 = {
|
|
@@ -12279,12 +12476,12 @@ const RewardsTableCell = /*#__PURE__*/Object.freeze({
|
|
|
12279
12476
|
EmptyCell: EmptyCell$2
|
|
12280
12477
|
});
|
|
12281
12478
|
|
|
12282
|
-
const scenario$
|
|
12479
|
+
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";
|
|
12283
12480
|
|
|
12284
12481
|
const RewardsTable_stories = {
|
|
12285
12482
|
title: "Components/Rewards Table",
|
|
12286
12483
|
parameters: {
|
|
12287
|
-
scenario: scenario$
|
|
12484
|
+
scenario: scenario$t,
|
|
12288
12485
|
},
|
|
12289
12486
|
};
|
|
12290
12487
|
const loadingElement$1 = (index.h("div", { slot: "loading", style: { display: "contents" } },
|
|
@@ -12596,12 +12793,12 @@ const UseReferralTable = /*#__PURE__*/Object.freeze({
|
|
|
12596
12793
|
ReferralTableFr: ReferralTableFr
|
|
12597
12794
|
});
|
|
12598
12795
|
|
|
12599
|
-
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 |";
|
|
12796
|
+
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 |";
|
|
12600
12797
|
|
|
12601
12798
|
const HeroImage_stories = {
|
|
12602
12799
|
title: "Components/Hero Image",
|
|
12603
12800
|
parameters: {
|
|
12604
|
-
scenario: scenario$
|
|
12801
|
+
scenario: scenario$u,
|
|
12605
12802
|
},
|
|
12606
12803
|
};
|
|
12607
12804
|
const OverlayHeader = () => {
|
|
@@ -12674,12 +12871,12 @@ const HeroImage = /*#__PURE__*/Object.freeze({
|
|
|
12674
12871
|
ColumnsCustomColors: ColumnsCustomColors
|
|
12675
12872
|
});
|
|
12676
12873
|
|
|
12677
|
-
const scenario$
|
|
12874
|
+
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 |";
|
|
12678
12875
|
|
|
12679
12876
|
const ReferralCard_stories = {
|
|
12680
12877
|
title: "Components/Referral Card",
|
|
12681
12878
|
parameters: {
|
|
12682
|
-
scenario: scenario$
|
|
12879
|
+
scenario: scenario$v,
|
|
12683
12880
|
},
|
|
12684
12881
|
};
|
|
12685
12882
|
const media = (slot) => {
|
|
@@ -12833,11 +13030,11 @@ const scenarioTimeline = "@author:derek\n@owner:kutay\nFeature: Timeline\n\n
|
|
|
12833
13030
|
|
|
12834
13031
|
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";
|
|
12835
13032
|
|
|
12836
|
-
const scenario$
|
|
13033
|
+
const scenario$w = scenarioTimeline + scenarioTimelineEntry;
|
|
12837
13034
|
const Timeline_stories = {
|
|
12838
13035
|
title: "Components/Timeline",
|
|
12839
13036
|
parameters: {
|
|
12840
|
-
scenario: scenario$
|
|
13037
|
+
scenario: scenario$w,
|
|
12841
13038
|
},
|
|
12842
13039
|
};
|
|
12843
13040
|
const TimelineWith1Reward = () => {
|
|
@@ -12910,12 +13107,12 @@ const Timeline = /*#__PURE__*/Object.freeze({
|
|
|
12910
13107
|
TimelineWith4Rewards: TimelineWith4Rewards
|
|
12911
13108
|
});
|
|
12912
13109
|
|
|
12913
|
-
const scenario$
|
|
13110
|
+
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";
|
|
12914
13111
|
|
|
12915
13112
|
const Image_stories = {
|
|
12916
13113
|
title: "Components/Image",
|
|
12917
13114
|
parameters: {
|
|
12918
|
-
scenario: scenario$
|
|
13115
|
+
scenario: scenario$x,
|
|
12919
13116
|
},
|
|
12920
13117
|
};
|
|
12921
13118
|
const Image = () => {
|
|
@@ -12948,12 +13145,12 @@ const Image$1 = /*#__PURE__*/Object.freeze({
|
|
|
12948
13145
|
MinimumHeight: MinimumHeight
|
|
12949
13146
|
});
|
|
12950
13147
|
|
|
12951
|
-
const scenario$
|
|
13148
|
+
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 |";
|
|
12952
13149
|
|
|
12953
13150
|
const TitledSection_stories = {
|
|
12954
13151
|
title: "Components/Titled Section",
|
|
12955
13152
|
parameters: {
|
|
12956
|
-
scenario: scenario$
|
|
13153
|
+
scenario: scenario$y,
|
|
12957
13154
|
},
|
|
12958
13155
|
};
|
|
12959
13156
|
const AlignLeft = () => {
|
|
@@ -13349,12 +13546,12 @@ const Scroll = /*#__PURE__*/Object.freeze({
|
|
|
13349
13546
|
ShoelaceProps: ShoelaceProps
|
|
13350
13547
|
});
|
|
13351
13548
|
|
|
13352
|
-
const scenario$
|
|
13549
|
+
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";
|
|
13353
13550
|
|
|
13354
13551
|
const Tabs_stories = {
|
|
13355
13552
|
title: "Components/Tabs",
|
|
13356
13553
|
parameters: {
|
|
13357
|
-
scenario: scenario$
|
|
13554
|
+
scenario: scenario$z,
|
|
13358
13555
|
},
|
|
13359
13556
|
};
|
|
13360
13557
|
const SimpleTabs = () => (index.h("div", { style: { maxWidth: "700px", margin: "auto" }, innerHTML: `
|
|
@@ -13854,12 +14051,12 @@ const Tabs = /*#__PURE__*/Object.freeze({
|
|
|
13854
14051
|
RightTabs: RightTabs
|
|
13855
14052
|
});
|
|
13856
14053
|
|
|
13857
|
-
const scenario$
|
|
14054
|
+
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";
|
|
13858
14055
|
|
|
13859
14056
|
const ShareCode_stories = {
|
|
13860
14057
|
title: "Components/Share Code",
|
|
13861
14058
|
parameters: {
|
|
13862
|
-
scenario: scenario$
|
|
14059
|
+
scenario: scenario$A,
|
|
13863
14060
|
},
|
|
13864
14061
|
};
|
|
13865
14062
|
const ShareCode = () => {
|
|
@@ -13893,7 +14090,7 @@ const CopyButtonBelow$1 = () => {
|
|
|
13893
14090
|
buttonStyle: "button-below",
|
|
13894
14091
|
})));
|
|
13895
14092
|
};
|
|
13896
|
-
const Error$
|
|
14093
|
+
const Error$8 = () => {
|
|
13897
14094
|
const props = {
|
|
13898
14095
|
copyString: "https://noah.example.com",
|
|
13899
14096
|
disabled: true,
|
|
@@ -13914,15 +14111,15 @@ const ShareCode$1 = /*#__PURE__*/Object.freeze({
|
|
|
13914
14111
|
CustomTooltipDuration: CustomTooltipDuration,
|
|
13915
14112
|
CopyButton: CopyButton$1,
|
|
13916
14113
|
CopyButtonBelow: CopyButtonBelow$1,
|
|
13917
|
-
Error: Error$
|
|
14114
|
+
Error: Error$8
|
|
13918
14115
|
});
|
|
13919
14116
|
|
|
13920
|
-
const scenario$
|
|
14117
|
+
const scenario$B = "@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";
|
|
13921
14118
|
|
|
13922
14119
|
const ReferralCode_stories = {
|
|
13923
14120
|
title: "Components/Referral Code",
|
|
13924
14121
|
parameters: {
|
|
13925
|
-
scenario: scenario$
|
|
14122
|
+
scenario: scenario$B,
|
|
13926
14123
|
},
|
|
13927
14124
|
};
|
|
13928
14125
|
const ReferralCode = () => {
|
|
@@ -13966,7 +14163,7 @@ const CopyButtonBelow$2 = () => {
|
|
|
13966
14163
|
buttonStyle: "button-below",
|
|
13967
14164
|
})));
|
|
13968
14165
|
};
|
|
13969
|
-
const Error$
|
|
14166
|
+
const Error$9 = () => {
|
|
13970
14167
|
const props = {
|
|
13971
14168
|
copyString: "https://noah.example.com",
|
|
13972
14169
|
disabled: true,
|
|
@@ -13990,7 +14187,7 @@ const ReferralCode$1 = /*#__PURE__*/Object.freeze({
|
|
|
13990
14187
|
CustomTooltipDuration: CustomTooltipDuration$1,
|
|
13991
14188
|
CopyButton: CopyButton$2,
|
|
13992
14189
|
CopyButtonBelow: CopyButtonBelow$2,
|
|
13993
|
-
Error: Error$
|
|
14190
|
+
Error: Error$9
|
|
13994
14191
|
});
|
|
13995
14192
|
|
|
13996
14193
|
// import scenario from "./ShareCode.feature";
|
|
@@ -14000,7 +14197,7 @@ const EmailRegistration_stories = {
|
|
|
14000
14197
|
// scenario,
|
|
14001
14198
|
},
|
|
14002
14199
|
};
|
|
14003
|
-
const defaultProps$
|
|
14200
|
+
const defaultProps$f = {
|
|
14004
14201
|
states: {
|
|
14005
14202
|
error: "",
|
|
14006
14203
|
loading: false,
|
|
@@ -14019,59 +14216,59 @@ const defaultProps$d = {
|
|
|
14019
14216
|
fraudErrorMessageTitle: "Looks like you tried referring yourself",
|
|
14020
14217
|
},
|
|
14021
14218
|
};
|
|
14022
|
-
const Default$
|
|
14219
|
+
const Default$i = () => index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, defaultProps$f));
|
|
14023
14220
|
const HasFirstNameLastName = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
|
|
14024
|
-
...defaultProps$
|
|
14221
|
+
...defaultProps$f,
|
|
14025
14222
|
content: {
|
|
14026
|
-
...defaultProps$
|
|
14223
|
+
...defaultProps$f.content,
|
|
14027
14224
|
includeName: true,
|
|
14028
14225
|
},
|
|
14029
14226
|
})));
|
|
14030
14227
|
const WithSlots = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
|
|
14031
|
-
...defaultProps$
|
|
14228
|
+
...defaultProps$f,
|
|
14032
14229
|
content: {
|
|
14033
|
-
...defaultProps$
|
|
14230
|
+
...defaultProps$f.content,
|
|
14034
14231
|
topSlot: index.h("div", null, "Hello this is the top slot"),
|
|
14035
14232
|
bottomSlot: index.h("div", null, "Hello this is the bottom slot"),
|
|
14036
14233
|
},
|
|
14037
14234
|
})));
|
|
14038
14235
|
const NoBorder$1 = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
|
|
14039
|
-
...defaultProps$
|
|
14236
|
+
...defaultProps$f,
|
|
14040
14237
|
content: {
|
|
14041
|
-
...defaultProps$
|
|
14238
|
+
...defaultProps$f.content,
|
|
14042
14239
|
hideBorder: true,
|
|
14043
14240
|
},
|
|
14044
14241
|
})));
|
|
14045
14242
|
const BackgroundColor$2 = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
|
|
14046
|
-
...defaultProps$
|
|
14243
|
+
...defaultProps$f,
|
|
14047
14244
|
content: {
|
|
14048
|
-
...defaultProps$
|
|
14245
|
+
...defaultProps$f.content,
|
|
14049
14246
|
backgroundColor: "aquamarine",
|
|
14050
14247
|
},
|
|
14051
14248
|
})));
|
|
14052
|
-
const Loading$
|
|
14053
|
-
...defaultProps$
|
|
14249
|
+
const Loading$5 = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
|
|
14250
|
+
...defaultProps$f,
|
|
14054
14251
|
states: {
|
|
14055
14252
|
error: "",
|
|
14056
14253
|
loading: true,
|
|
14057
14254
|
},
|
|
14058
14255
|
})));
|
|
14059
|
-
const Error$
|
|
14060
|
-
...defaultProps$
|
|
14256
|
+
const Error$a = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
|
|
14257
|
+
...defaultProps$f,
|
|
14061
14258
|
states: {
|
|
14062
14259
|
error: "Something went wrong. Please try again.",
|
|
14063
14260
|
loading: false,
|
|
14064
14261
|
},
|
|
14065
14262
|
})));
|
|
14066
14263
|
const FraudError = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
|
|
14067
|
-
...defaultProps$
|
|
14264
|
+
...defaultProps$f,
|
|
14068
14265
|
states: {
|
|
14069
14266
|
error: "FRAUD",
|
|
14070
14267
|
loading: false,
|
|
14071
14268
|
},
|
|
14072
14269
|
})));
|
|
14073
14270
|
const EmptyEmailError = () => (index.h(emailRegistrationView.EmailRegistrationView, Object.assign({}, {
|
|
14074
|
-
...defaultProps$
|
|
14271
|
+
...defaultProps$f,
|
|
14075
14272
|
states: {
|
|
14076
14273
|
error: "Something went wrong. Please try again.",
|
|
14077
14274
|
loading: false,
|
|
@@ -14084,26 +14281,26 @@ const EmptyEmailError = () => (index.h(emailRegistrationView.EmailRegistrationVi
|
|
|
14084
14281
|
const EmailRegistration = /*#__PURE__*/Object.freeze({
|
|
14085
14282
|
__proto__: null,
|
|
14086
14283
|
'default': EmailRegistration_stories,
|
|
14087
|
-
Default: Default$
|
|
14284
|
+
Default: Default$i,
|
|
14088
14285
|
HasFirstNameLastName: HasFirstNameLastName,
|
|
14089
14286
|
WithSlots: WithSlots,
|
|
14090
14287
|
NoBorder: NoBorder$1,
|
|
14091
14288
|
BackgroundColor: BackgroundColor$2,
|
|
14092
|
-
Loading: Loading$
|
|
14093
|
-
Error: Error$
|
|
14289
|
+
Loading: Loading$5,
|
|
14290
|
+
Error: Error$a,
|
|
14094
14291
|
FraudError: FraudError,
|
|
14095
14292
|
EmptyEmailError: EmptyEmailError
|
|
14096
14293
|
});
|
|
14097
14294
|
|
|
14098
|
-
const scenario$
|
|
14295
|
+
const scenario$C = "@author:truman\n@owner:truman\nFeature: Coupon Code\n\n The coupon code component is a box that allows users to see and copy their coupon code for a given program\n\n @motivating\n Scenario: Component only fetches codes from current program\n Given a user has multiple rewards from various programs\n When the component is loaded\n Then it fetches the user's rewards from only the program associated with the widget\n\n @motivating\n Scenario: Component only looks at fueltank rewards\n Given a user has multiple rewards of different types\n When the component is loaded\n Then it filters the user's reward to only return FUELTANK rewards\n\n\n @motivating\n Scenario: The first (i.e. most recently received) reward is the reward that is displayed\n Given a user has at least one fueltank reward\n And the fueltank reward is available\n Then the coupon code component shows the first reward returned\n And this reward is the most recently received reward by the user\n\n @motivating\n Scenario Outline: Coupon code has multiple states depending on reward status\n Given a user has at least one fueltank reward\n And the reward has most recent status <status>\n And the dateScheduledFor field is <dateScheduledFor>\n Then the component's status is set to <componentStatus>\n And the <errorMessageTextProp> is displayed under the input field\n\n Examples:\n | status | dateScheduledFor | componentStatus | errorMessageTextProp |\n | AVAILABLE | null | AVAILABLE | N/A |\n | EXPIRED | null | EXPIRED | expiredErrorMessage |\n | REDEEMED | null | REDEEMED | redeemedMessage |\n | CANCELLED | null | CANCELLED | cancelledErrorMessage |\n | PENDING | null | EMPTY_TANK | fullfillmentErrorMessage |\n | PENDING | 123412341234 | PENDING | pendingErrorMessage |\n | null | null | ERROR | genericErrorMessage |\n\n Scenario Outline: Coupon code's error message text props are grouped\n Given an end user is viewing the coupon code component in the widget editor\n And they are looking at the component's properties\n Then they see <prop>\n And <prop> is grouped under \"Coupon code error\"\n Examples:\n | prop |\n | N/A |\n | expiredErrorMessage |\n | redeemedMessage |\n | cancelledErrorMessage |\n | fullfillmentErrorMessage |\n | pendingErrorMessage |\n | genericErrorMessage |\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 @ui\n Scenario: Component shows an error state when there is an error\n Given a user is viewing the coupon code component\n When there is an error in the coupon code\n Then in place of the coupon code is an alert banner\n And the alert banner gives information about the error to the user\n\n @ui\n Scenario: Component shows an loading state\n Given a user is viewing the coupon code component\n When the coupon code is loading in\n Then the text inside the input is \"Loading...\"\n And the coupon code input box has a gray background\n And the cursor is set to \"default\"\n And the user cannot copy the text\n\n @ui\n Scenario Outline: User can edit the alignment of the coupon code text\n Given a user is editing the coupon 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 coupon 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\n @minutia\n Scenario: ICU string converts to a date\n Given a user is viewing a live coupon code code component\n And the \"pendingErrorText\" has the \"{unpendDate}\" ICU string\n And the program is configured for rewards to be pending\n Then the user will see an info alert banner\n And the ICU string is converted to the unpend date\n";
|
|
14099
14296
|
|
|
14100
14297
|
const CouponCode_stories = {
|
|
14101
14298
|
title: "Components/Coupon Code",
|
|
14102
14299
|
parameters: {
|
|
14103
|
-
scenario: scenario$
|
|
14300
|
+
scenario: scenario$C,
|
|
14104
14301
|
},
|
|
14105
14302
|
};
|
|
14106
|
-
const defaultProps$
|
|
14303
|
+
const defaultProps$g = {
|
|
14107
14304
|
tooltiptext: "Copied to Clipboard",
|
|
14108
14305
|
copyString: "THANKSJANE125uv125",
|
|
14109
14306
|
open: false,
|
|
@@ -14128,43 +14325,43 @@ const TextAlignRight$3 = () => {
|
|
|
14128
14325
|
return index.h("sqm-coupon-code", { textAlign: "right" });
|
|
14129
14326
|
};
|
|
14130
14327
|
const CopyButton$3 = () => {
|
|
14131
|
-
return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$
|
|
14328
|
+
return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$g, { buttonStyle: "button-outside" })));
|
|
14132
14329
|
};
|
|
14133
14330
|
const CopyButtonCustomLabel = () => {
|
|
14134
|
-
return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$
|
|
14331
|
+
return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$g, { buttonStyle: "button-outside", "copy-button-label": "test long custom label" })));
|
|
14135
14332
|
};
|
|
14136
14333
|
const CopyButtonBelow$3 = () => {
|
|
14137
|
-
return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$
|
|
14334
|
+
return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$g, { buttonStyle: "button-below" })));
|
|
14138
14335
|
};
|
|
14139
14336
|
const CopyButtonBelowCustomLabel = () => {
|
|
14140
|
-
return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$
|
|
14337
|
+
return (index.h("sqm-coupon-code", Object.assign({}, defaultProps$g, { buttonStyle: "button-below", "copy-button-label": "test long custom label" })));
|
|
14141
14338
|
};
|
|
14142
|
-
const Loading$
|
|
14143
|
-
return index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14339
|
+
const Loading$6 = () => {
|
|
14340
|
+
return index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { loading: true }));
|
|
14144
14341
|
};
|
|
14145
14342
|
const CopyButtonLoading = () => {
|
|
14146
|
-
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14343
|
+
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { buttonStyle: "button-outside", loading: true })));
|
|
14147
14344
|
};
|
|
14148
14345
|
const CopyButtonBelowLoading = () => {
|
|
14149
|
-
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14346
|
+
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { buttonStyle: "button-below", loading: true })));
|
|
14150
14347
|
};
|
|
14151
14348
|
const ErrorGeneric = () => {
|
|
14152
|
-
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14349
|
+
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { 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." })));
|
|
14153
14350
|
};
|
|
14154
14351
|
const ErrorPending = () => {
|
|
14155
|
-
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14352
|
+
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { 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!" })));
|
|
14156
14353
|
};
|
|
14157
14354
|
const ErrorFullfillment = () => {
|
|
14158
|
-
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14355
|
+
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { 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." })));
|
|
14159
14356
|
};
|
|
14160
14357
|
const ErrorCancelled = () => {
|
|
14161
|
-
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14358
|
+
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { errorType: "warning", error: true, errorText: "This code has been cancelled. Please reach out to the Support team for help resolving this issue." })));
|
|
14162
14359
|
};
|
|
14163
14360
|
const ErrorExpired = () => {
|
|
14164
|
-
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14361
|
+
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { errorType: "warning", error: true, errorText: "Looks like this code has expired. Please reach out to the Support team for help resolving this issue." })));
|
|
14165
14362
|
};
|
|
14166
14363
|
const ErrorRedeemed = () => {
|
|
14167
|
-
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$
|
|
14364
|
+
return (index.h(ShadowViewAddon.CouponCodeView, Object.assign({}, defaultProps$g, { errorType: "success", error: true, errorText: "Looks like you\u2019ve already redeemed this code." })));
|
|
14168
14365
|
};
|
|
14169
14366
|
|
|
14170
14367
|
const CouponCode$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -14179,7 +14376,7 @@ const CouponCode$1 = /*#__PURE__*/Object.freeze({
|
|
|
14179
14376
|
CopyButtonCustomLabel: CopyButtonCustomLabel,
|
|
14180
14377
|
CopyButtonBelow: CopyButtonBelow$3,
|
|
14181
14378
|
CopyButtonBelowCustomLabel: CopyButtonBelowCustomLabel,
|
|
14182
|
-
Loading: Loading$
|
|
14379
|
+
Loading: Loading$6,
|
|
14183
14380
|
CopyButtonLoading: CopyButtonLoading,
|
|
14184
14381
|
CopyButtonBelowLoading: CopyButtonBelowLoading,
|
|
14185
14382
|
ErrorGeneric: ErrorGeneric,
|
|
@@ -14190,55 +14387,55 @@ const CouponCode$1 = /*#__PURE__*/Object.freeze({
|
|
|
14190
14387
|
ErrorRedeemed: ErrorRedeemed
|
|
14191
14388
|
});
|
|
14192
14389
|
|
|
14193
|
-
const scenario$
|
|
14390
|
+
const scenario$D = "@author:noah\n@owner:noah\n\nFeature: Logout Current User\n\n Background:\n Given a user viewing an instant access widget\n\n @motivating\n @ui\n Scenario: A user on an instant access widget\n Given the user is identified\n And the user is logged in\n Then the component identifies the user by displaying their email in an ICU string\n And the users email displayed in the ICU string using hte \"{email}\" variable\n\n @motivating\n @ui\n Scenario: Users can switch who they are identified as through a link\n Given the user is identified\n And the user is logged in\n When the user clicks the link in the component\n Then the saved user identity is emptied\n And they are sent back to the registration form to re-identify themselves\n\n @minutia\n Scenario: Logout link empties the saved User Identity\n Given a valid user identity\n And the user is viewing the \"logged-in\" template\n When they click the logout link\n Then the user identity is set to \"undefined\"\n And the user is returned to the \"logged-out\" template";
|
|
14194
14391
|
|
|
14195
14392
|
const LogoutCurrentUser_stories = {
|
|
14196
14393
|
title: "Components/Logout Current User",
|
|
14197
14394
|
parameters: {
|
|
14198
|
-
scenario: scenario$
|
|
14395
|
+
scenario: scenario$D,
|
|
14199
14396
|
},
|
|
14200
14397
|
};
|
|
14201
|
-
const defaultProps$
|
|
14398
|
+
const defaultProps$h = {
|
|
14202
14399
|
filledInEmailText: "Currently showing referral data for noah.clarke@saasquatch.com",
|
|
14203
14400
|
onSwitchClick: () => console.log("clicked"),
|
|
14204
14401
|
switchUserText: "not you?",
|
|
14205
14402
|
loading: false,
|
|
14206
14403
|
emailErrorText: "Error fetching email",
|
|
14207
14404
|
};
|
|
14208
|
-
const Default$
|
|
14209
|
-
return index.h(sqmLogoutCurrentUserView.LogoutCurrentUserView, Object.assign({}, defaultProps$
|
|
14405
|
+
const Default$j = () => {
|
|
14406
|
+
return index.h(sqmLogoutCurrentUserView.LogoutCurrentUserView, Object.assign({}, defaultProps$h));
|
|
14210
14407
|
};
|
|
14211
14408
|
|
|
14212
14409
|
const LogoutCurrentUser = /*#__PURE__*/Object.freeze({
|
|
14213
14410
|
__proto__: null,
|
|
14214
14411
|
'default': LogoutCurrentUser_stories,
|
|
14215
|
-
Default: Default$
|
|
14412
|
+
Default: Default$j
|
|
14216
14413
|
});
|
|
14217
14414
|
|
|
14218
|
-
const scenario$
|
|
14415
|
+
const scenario$E = "@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 |";
|
|
14219
14416
|
|
|
14220
14417
|
const LinkButton_stories = {
|
|
14221
14418
|
title: "Components/Link Button",
|
|
14222
14419
|
parameters: {
|
|
14223
|
-
scenario: scenario$
|
|
14420
|
+
scenario: scenario$E,
|
|
14224
14421
|
},
|
|
14225
14422
|
};
|
|
14226
|
-
const defaultProps$
|
|
14423
|
+
const defaultProps$i = {
|
|
14227
14424
|
link: "https://example.com",
|
|
14228
14425
|
openInNewTab: false,
|
|
14229
14426
|
buttonText: "Button Text",
|
|
14230
14427
|
};
|
|
14231
|
-
const Default$
|
|
14232
|
-
return index.h("sqm-link-button", Object.assign({}, defaultProps$
|
|
14428
|
+
const Default$k = () => {
|
|
14429
|
+
return index.h("sqm-link-button", Object.assign({}, defaultProps$i));
|
|
14233
14430
|
};
|
|
14234
14431
|
const OpenInNewTab = () => {
|
|
14235
|
-
return (index.h("sqm-link-button", Object.assign({}, { ...defaultProps$
|
|
14432
|
+
return (index.h("sqm-link-button", Object.assign({}, { ...defaultProps$i, openInNewTab: true })));
|
|
14236
14433
|
};
|
|
14237
14434
|
|
|
14238
14435
|
const LinkButton = /*#__PURE__*/Object.freeze({
|
|
14239
14436
|
__proto__: null,
|
|
14240
14437
|
'default': LinkButton_stories,
|
|
14241
|
-
Default: Default$
|
|
14438
|
+
Default: Default$k,
|
|
14242
14439
|
OpenInNewTab: OpenInNewTab
|
|
14243
14440
|
});
|
|
14244
14441
|
|
|
@@ -14248,7 +14445,7 @@ const CloseButton_stories = {
|
|
|
14248
14445
|
// scenario,
|
|
14249
14446
|
},
|
|
14250
14447
|
};
|
|
14251
|
-
const defaultProps$
|
|
14448
|
+
const defaultProps$j = {};
|
|
14252
14449
|
const containerStyles = {
|
|
14253
14450
|
position: "relative",
|
|
14254
14451
|
width: "500px",
|
|
@@ -14256,22 +14453,22 @@ const containerStyles = {
|
|
|
14256
14453
|
border: "1px solid black",
|
|
14257
14454
|
padding: "25px",
|
|
14258
14455
|
};
|
|
14259
|
-
const Default$
|
|
14260
|
-
return index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, defaultProps$
|
|
14456
|
+
const Default$l = () => {
|
|
14457
|
+
return index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, defaultProps$j));
|
|
14261
14458
|
};
|
|
14262
14459
|
const InAContainer = () => {
|
|
14263
14460
|
return (index.h("div", { style: containerStyles },
|
|
14264
|
-
index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, defaultProps$
|
|
14461
|
+
index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, defaultProps$j))));
|
|
14265
14462
|
};
|
|
14266
14463
|
const CustomColor$1 = () => {
|
|
14267
14464
|
return (index.h("div", { style: containerStyles },
|
|
14268
|
-
index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, { ...defaultProps$
|
|
14465
|
+
index.h(sqmCloseButtonView.CloseButtonView, Object.assign({}, { ...defaultProps$j, color: "blue" }))));
|
|
14269
14466
|
};
|
|
14270
14467
|
|
|
14271
14468
|
const CloseButton = /*#__PURE__*/Object.freeze({
|
|
14272
14469
|
__proto__: null,
|
|
14273
14470
|
'default': CloseButton_stories,
|
|
14274
|
-
Default: Default$
|
|
14471
|
+
Default: Default$l,
|
|
14275
14472
|
InAContainer: InAContainer,
|
|
14276
14473
|
CustomColor: CustomColor$1
|
|
14277
14474
|
});
|
|
@@ -14461,17 +14658,17 @@ const RadioCardView = ({ title, icon, description, selected, }) => {
|
|
|
14461
14658
|
const RadioCard_stories = {
|
|
14462
14659
|
title: "Components/Radio Card",
|
|
14463
14660
|
};
|
|
14464
|
-
const defaultProps$
|
|
14661
|
+
const defaultProps$k = {
|
|
14465
14662
|
selected: false,
|
|
14466
14663
|
title: "Card Title",
|
|
14467
14664
|
description: "Description text goes here",
|
|
14468
14665
|
icon: "apple",
|
|
14469
14666
|
};
|
|
14470
14667
|
const DefaultView$1 = () => {
|
|
14471
|
-
return index.h(RadioCardView, Object.assign({}, defaultProps$
|
|
14668
|
+
return index.h(RadioCardView, Object.assign({}, defaultProps$k));
|
|
14472
14669
|
};
|
|
14473
14670
|
const Selected = () => {
|
|
14474
|
-
return index.h(RadioCardView, Object.assign({}, defaultProps$
|
|
14671
|
+
return index.h(RadioCardView, Object.assign({}, defaultProps$k, { selected: true }));
|
|
14475
14672
|
};
|
|
14476
14673
|
|
|
14477
14674
|
const RadioCard = /*#__PURE__*/Object.freeze({
|
|
@@ -14484,13 +14681,13 @@ const RadioCard = /*#__PURE__*/Object.freeze({
|
|
|
14484
14681
|
const ProgressBar_stories = {
|
|
14485
14682
|
title: "Components/Progress Bar",
|
|
14486
14683
|
};
|
|
14487
|
-
const defaultProps$
|
|
14684
|
+
const defaultProps$l = {
|
|
14488
14685
|
progress: 2,
|
|
14489
14686
|
goal: 4,
|
|
14490
14687
|
steps: true,
|
|
14491
14688
|
};
|
|
14492
14689
|
const TaxAndPayoutsProgressBar = () => {
|
|
14493
|
-
return index.h(ShadowViewAddon.ProgressBar, Object.assign({}, defaultProps$
|
|
14690
|
+
return index.h(ShadowViewAddon.ProgressBar, Object.assign({}, defaultProps$l, { stageCount: 4, currentStage: 2 }));
|
|
14494
14691
|
};
|
|
14495
14692
|
|
|
14496
14693
|
const ProgressBar$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -14502,7 +14699,7 @@ const ProgressBar$1 = /*#__PURE__*/Object.freeze({
|
|
|
14502
14699
|
const PayoutDetailsCard_stories = {
|
|
14503
14700
|
title: "Components/Payout Details Card",
|
|
14504
14701
|
};
|
|
14505
|
-
const Loading$
|
|
14702
|
+
const Loading$7 = () => {
|
|
14506
14703
|
return (index.h("sqm-payout-details-card", { demoData: {
|
|
14507
14704
|
states: {
|
|
14508
14705
|
loading: true,
|
|
@@ -14542,7 +14739,7 @@ const PaypalPayout = () => {
|
|
|
14542
14739
|
const PayoutDetailsCard = /*#__PURE__*/Object.freeze({
|
|
14543
14740
|
__proto__: null,
|
|
14544
14741
|
'default': PayoutDetailsCard_stories,
|
|
14545
|
-
Loading: Loading$
|
|
14742
|
+
Loading: Loading$7,
|
|
14546
14743
|
NextPayout: NextPayout,
|
|
14547
14744
|
PayoutToday: PayoutToday,
|
|
14548
14745
|
ThresholdPayout: ThresholdPayout,
|
|
@@ -15176,14 +15373,14 @@ const UseInvoiceTableCells = /*#__PURE__*/Object.freeze({
|
|
|
15176
15373
|
const WidgetEmailVerification_stories = {
|
|
15177
15374
|
title: "Components/Widget Email Verification",
|
|
15178
15375
|
};
|
|
15179
|
-
const defaultProps$
|
|
15376
|
+
const defaultProps$m = {
|
|
15180
15377
|
email: "",
|
|
15181
15378
|
error: false,
|
|
15182
15379
|
loading: false,
|
|
15183
15380
|
initialLoading: false,
|
|
15184
15381
|
sendCodeError: false,
|
|
15185
15382
|
};
|
|
15186
|
-
const Default$
|
|
15383
|
+
const Default$m = () => (index.h("sqm-email-verification", { demoData: {} }));
|
|
15187
15384
|
const EmailIsPrefilled = () => (index.h("div", null,
|
|
15188
15385
|
index.h("sqm-text", null,
|
|
15189
15386
|
index.h("h4", null, "Verify your email")),
|
|
@@ -15191,19 +15388,19 @@ const EmailIsPrefilled = () => (index.h("div", null,
|
|
|
15191
15388
|
index.h("sub", null, "To get your cash paid out directly to your bank account, please complete your account setup")),
|
|
15192
15389
|
index.h("sqm-email-verification", { demoData: {
|
|
15193
15390
|
states: {
|
|
15194
|
-
...defaultProps$
|
|
15391
|
+
...defaultProps$m,
|
|
15195
15392
|
email: "test@example.com",
|
|
15196
15393
|
},
|
|
15197
15394
|
} })));
|
|
15198
|
-
const Loading$
|
|
15395
|
+
const Loading$8 = () => (index.h("sqm-email-verification", { demoData: {
|
|
15199
15396
|
states: {
|
|
15200
|
-
...defaultProps$
|
|
15397
|
+
...defaultProps$m,
|
|
15201
15398
|
initialLoading: true,
|
|
15202
15399
|
},
|
|
15203
15400
|
} }));
|
|
15204
15401
|
const SaveLoading = () => (index.h("sqm-email-verification", { demoData: {
|
|
15205
15402
|
states: {
|
|
15206
|
-
...defaultProps$
|
|
15403
|
+
...defaultProps$m,
|
|
15207
15404
|
loading: true,
|
|
15208
15405
|
},
|
|
15209
15406
|
} }));
|
|
@@ -15214,19 +15411,19 @@ const WithHeader$1 = () => (index.h("div", null,
|
|
|
15214
15411
|
index.h("sub", null, "To get your cash paid out directly to your bank account, please complete your account setup")),
|
|
15215
15412
|
index.h("sqm-email-verification", { demoData: {
|
|
15216
15413
|
states: {
|
|
15217
|
-
...defaultProps$
|
|
15414
|
+
...defaultProps$m,
|
|
15218
15415
|
email: "test@example.com",
|
|
15219
15416
|
},
|
|
15220
15417
|
} })));
|
|
15221
15418
|
const InvalidEmail = () => (index.h("sqm-email-verification", { demoData: {
|
|
15222
15419
|
states: {
|
|
15223
|
-
...defaultProps$
|
|
15420
|
+
...defaultProps$m,
|
|
15224
15421
|
error: true,
|
|
15225
15422
|
},
|
|
15226
15423
|
} }));
|
|
15227
15424
|
const SendCodeError = () => (index.h("sqm-email-verification", { demoData: {
|
|
15228
15425
|
states: {
|
|
15229
|
-
...defaultProps$
|
|
15426
|
+
...defaultProps$m,
|
|
15230
15427
|
sendCodeError: true,
|
|
15231
15428
|
},
|
|
15232
15429
|
} }));
|
|
@@ -15234,9 +15431,9 @@ const SendCodeError = () => (index.h("sqm-email-verification", { demoData: {
|
|
|
15234
15431
|
const WidgetEmailVerification = /*#__PURE__*/Object.freeze({
|
|
15235
15432
|
__proto__: null,
|
|
15236
15433
|
'default': WidgetEmailVerification_stories,
|
|
15237
|
-
Default: Default$
|
|
15434
|
+
Default: Default$m,
|
|
15238
15435
|
EmailIsPrefilled: EmailIsPrefilled,
|
|
15239
|
-
Loading: Loading$
|
|
15436
|
+
Loading: Loading$8,
|
|
15240
15437
|
SaveLoading: SaveLoading,
|
|
15241
15438
|
WithHeader: WithHeader$1,
|
|
15242
15439
|
InvalidEmail: InvalidEmail,
|
|
@@ -15246,35 +15443,35 @@ const WidgetEmailVerification = /*#__PURE__*/Object.freeze({
|
|
|
15246
15443
|
const WidgetCodeVerification_stories = {
|
|
15247
15444
|
title: "Components/Widget Code Verification",
|
|
15248
15445
|
};
|
|
15249
|
-
const defaultProps$
|
|
15446
|
+
const defaultProps$n = {
|
|
15250
15447
|
initialiseLoading: false,
|
|
15251
15448
|
email: "testemail@example.com",
|
|
15252
15449
|
loading: false,
|
|
15253
15450
|
verifyFailed: false,
|
|
15254
15451
|
emailResent: false,
|
|
15255
15452
|
};
|
|
15256
|
-
const Default$
|
|
15453
|
+
const Default$n = () => (index.h("sqm-code-verification", { demoData: { states: defaultProps$n } }));
|
|
15257
15454
|
const InitialLoading = () => (index.h("sqm-code-verification", { demoData: {
|
|
15258
15455
|
states: {
|
|
15259
|
-
...defaultProps$
|
|
15456
|
+
...defaultProps$n,
|
|
15260
15457
|
initialiseLoading: true,
|
|
15261
15458
|
},
|
|
15262
15459
|
} }));
|
|
15263
|
-
const Loading$
|
|
15460
|
+
const Loading$9 = () => (index.h("sqm-code-verification", { demoData: {
|
|
15264
15461
|
states: {
|
|
15265
|
-
...defaultProps$
|
|
15462
|
+
...defaultProps$n,
|
|
15266
15463
|
loading: true,
|
|
15267
15464
|
},
|
|
15268
15465
|
} }));
|
|
15269
15466
|
const CodeResent = () => (index.h("sqm-code-verification", { demoData: {
|
|
15270
15467
|
states: {
|
|
15271
|
-
...defaultProps$
|
|
15468
|
+
...defaultProps$n,
|
|
15272
15469
|
emailResent: true,
|
|
15273
15470
|
},
|
|
15274
15471
|
} }));
|
|
15275
15472
|
const VerificationFailed = () => (index.h("sqm-code-verification", { demoData: {
|
|
15276
15473
|
states: {
|
|
15277
|
-
...defaultProps$
|
|
15474
|
+
...defaultProps$n,
|
|
15278
15475
|
verifyFailed: true,
|
|
15279
15476
|
},
|
|
15280
15477
|
} }));
|
|
@@ -15282,9 +15479,9 @@ const VerificationFailed = () => (index.h("sqm-code-verification", { demoData: {
|
|
|
15282
15479
|
const WidgetCodeVerification = /*#__PURE__*/Object.freeze({
|
|
15283
15480
|
__proto__: null,
|
|
15284
15481
|
'default': WidgetCodeVerification_stories,
|
|
15285
|
-
Default: Default$
|
|
15482
|
+
Default: Default$n,
|
|
15286
15483
|
InitialLoading: InitialLoading,
|
|
15287
|
-
Loading: Loading$
|
|
15484
|
+
Loading: Loading$9,
|
|
15288
15485
|
CodeResent: CodeResent,
|
|
15289
15486
|
VerificationFailed: VerificationFailed
|
|
15290
15487
|
});
|
|
@@ -15292,17 +15489,17 @@ const WidgetCodeVerification = /*#__PURE__*/Object.freeze({
|
|
|
15292
15489
|
const PayoutButtonScroll_stories = {
|
|
15293
15490
|
title: "Components/Payout Scroll Button",
|
|
15294
15491
|
};
|
|
15295
|
-
const defaultProps$
|
|
15492
|
+
const defaultProps$o = {
|
|
15296
15493
|
payoutSettingsComplete: true,
|
|
15297
15494
|
};
|
|
15298
|
-
const CompletedTaxForm = () => (index.h("sqm-payout-button-scroll", { demoData: { states: { ...defaultProps$
|
|
15495
|
+
const CompletedTaxForm = () => (index.h("sqm-payout-button-scroll", { demoData: { states: { ...defaultProps$o, payoutSettingsComplete: true } } }));
|
|
15299
15496
|
const CompletedTaxFormWithStatsContainer = () => (index.h("sqm-portal-container", { display: "flex", maxWidth: "100%", minWidth: "100%", "justify-content": "space-between", flexWrap: "nowrap" },
|
|
15300
15497
|
index.h("sqm-portal-container", { display: "flex", "max-width": "fit-content" },
|
|
15301
15498
|
index.h("sqm-big-stat", { "flex-reverse": "true", alignment: "left", "stat-type": "/referralsCount" },
|
|
15302
15499
|
index.h("p", null, "Referrals")),
|
|
15303
15500
|
index.h("sqm-big-stat", { "flex-reverse": "true", alignment: "left", "stat-type": "/payoutBalance" },
|
|
15304
15501
|
index.h("p", null, "Cash Balance"))),
|
|
15305
|
-
index.h("sqm-payout-button-scroll", { demoData: { states: { ...defaultProps$
|
|
15502
|
+
index.h("sqm-payout-button-scroll", { demoData: { states: { ...defaultProps$o, payoutSettingsComplete: true } } })));
|
|
15306
15503
|
|
|
15307
15504
|
const PayoutButtonScroll = /*#__PURE__*/Object.freeze({
|
|
15308
15505
|
__proto__: null,
|
|
@@ -15314,20 +15511,20 @@ const PayoutButtonScroll = /*#__PURE__*/Object.freeze({
|
|
|
15314
15511
|
const PayoutStatusAlert_stories = {
|
|
15315
15512
|
title: "Components/Payout Status Alert",
|
|
15316
15513
|
};
|
|
15317
|
-
const defaultProps$
|
|
15514
|
+
const defaultProps$p = {
|
|
15318
15515
|
error: false,
|
|
15319
15516
|
status: "INFORMATION_REQUIRED",
|
|
15320
15517
|
loading: false,
|
|
15321
15518
|
veriffLoading: false,
|
|
15322
15519
|
};
|
|
15323
|
-
const InformationRequired = () => (index.h("sqm-payout-status-alert", { demoData: { states: defaultProps$
|
|
15324
|
-
const VerifyIdentity = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$
|
|
15325
|
-
const VerifyIdentityRequiredInternal = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$
|
|
15326
|
-
const VerifyIdentityReviewInternal = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$
|
|
15327
|
-
const VerifyIdentityFailedInternal = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$
|
|
15328
|
-
const Hold = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$
|
|
15329
|
-
const Loading$
|
|
15330
|
-
const Error$
|
|
15520
|
+
const InformationRequired = () => (index.h("sqm-payout-status-alert", { demoData: { states: defaultProps$p } }));
|
|
15521
|
+
const VerifyIdentity = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$p, status: "VERIFICATION:REQUIRED" } } }));
|
|
15522
|
+
const VerifyIdentityRequiredInternal = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$p, status: "VERIFICATION:INTERNAL" } } }));
|
|
15523
|
+
const VerifyIdentityReviewInternal = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$p, status: "VERIFICATION:REVIEW" } } }));
|
|
15524
|
+
const VerifyIdentityFailedInternal = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$p, status: "VERIFICATION:FAILED" } } }));
|
|
15525
|
+
const Hold = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$p, status: "HOLD" } } }));
|
|
15526
|
+
const Loading$a = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$p, loading: true } } }));
|
|
15527
|
+
const Error$b = () => (index.h("sqm-payout-status-alert", { demoData: { states: { ...defaultProps$p, error: true } } }));
|
|
15331
15528
|
|
|
15332
15529
|
const PayoutStatusAlert = /*#__PURE__*/Object.freeze({
|
|
15333
15530
|
__proto__: null,
|
|
@@ -15338,16 +15535,16 @@ const PayoutStatusAlert = /*#__PURE__*/Object.freeze({
|
|
|
15338
15535
|
VerifyIdentityReviewInternal: VerifyIdentityReviewInternal,
|
|
15339
15536
|
VerifyIdentityFailedInternal: VerifyIdentityFailedInternal,
|
|
15340
15537
|
Hold: Hold,
|
|
15341
|
-
Loading: Loading$
|
|
15342
|
-
Error: Error$
|
|
15538
|
+
Loading: Loading$a,
|
|
15539
|
+
Error: Error$b
|
|
15343
15540
|
});
|
|
15344
15541
|
|
|
15345
|
-
const scenario$
|
|
15542
|
+
const scenario$F = "@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";
|
|
15346
15543
|
|
|
15347
15544
|
const ReferralCodes_stories = {
|
|
15348
15545
|
title: "Components/Referral Codes",
|
|
15349
15546
|
parameters: {
|
|
15350
|
-
scenario: scenario$
|
|
15547
|
+
scenario: scenario$F,
|
|
15351
15548
|
},
|
|
15352
15549
|
};
|
|
15353
15550
|
const demoData = {
|
|
@@ -15401,7 +15598,7 @@ const EmptyWithCustomTextAndImage = () => {
|
|
|
15401
15598
|
shareCodes("shareCodes"),
|
|
15402
15599
|
shareButtons("shareButtons")));
|
|
15403
15600
|
};
|
|
15404
|
-
const Loading$
|
|
15601
|
+
const Loading$b = () => {
|
|
15405
15602
|
return (index.h("sqm-referral-codes", { demoData: { states: { ...demoData.states, loading: true } } },
|
|
15406
15603
|
pagination("pagination"),
|
|
15407
15604
|
shareCodes("shareCodes"),
|
|
@@ -15415,13 +15612,13 @@ const ReferralCodes$1 = /*#__PURE__*/Object.freeze({
|
|
|
15415
15612
|
WithPreviouslyCopiedCode: WithPreviouslyCopiedCode,
|
|
15416
15613
|
Empty: Empty$3,
|
|
15417
15614
|
EmptyWithCustomTextAndImage: EmptyWithCustomTextAndImage,
|
|
15418
|
-
Loading: Loading$
|
|
15615
|
+
Loading: Loading$b
|
|
15419
15616
|
});
|
|
15420
15617
|
|
|
15421
15618
|
const BaseRegistrationForm_stories = {
|
|
15422
15619
|
title: "Components/Microsite Base Registration",
|
|
15423
15620
|
};
|
|
15424
|
-
const defaultProps$
|
|
15621
|
+
const defaultProps$q = {
|
|
15425
15622
|
states: {
|
|
15426
15623
|
error: "",
|
|
15427
15624
|
},
|
|
@@ -15440,145 +15637,30 @@ const defaultProps$o = {
|
|
|
15440
15637
|
" ")),
|
|
15441
15638
|
},
|
|
15442
15639
|
};
|
|
15443
|
-
const errorProps$
|
|
15444
|
-
...defaultProps$
|
|
15640
|
+
const errorProps$a = {
|
|
15641
|
+
...defaultProps$q,
|
|
15445
15642
|
states: {
|
|
15446
15643
|
error: "Something went wrong. Please try again.",
|
|
15447
15644
|
},
|
|
15448
15645
|
};
|
|
15449
|
-
const Default$
|
|
15450
|
-
return index.h(sqmBaseRegistrationFormView.BaseRegistrationFormView, Object.assign({}, defaultProps$
|
|
15646
|
+
const Default$o = () => {
|
|
15647
|
+
return index.h(sqmBaseRegistrationFormView.BaseRegistrationFormView, Object.assign({}, defaultProps$q));
|
|
15451
15648
|
};
|
|
15452
15649
|
const EmailError = () => {
|
|
15453
|
-
return index.h(sqmBaseRegistrationFormView.BaseRegistrationFormView, Object.assign({}, errorProps$
|
|
15650
|
+
return index.h(sqmBaseRegistrationFormView.BaseRegistrationFormView, Object.assign({}, errorProps$a));
|
|
15454
15651
|
};
|
|
15455
15652
|
|
|
15456
15653
|
const BaseRegistrationForm = /*#__PURE__*/Object.freeze({
|
|
15457
15654
|
__proto__: null,
|
|
15458
15655
|
'default': BaseRegistrationForm_stories,
|
|
15459
|
-
Default: Default$
|
|
15656
|
+
Default: Default$o,
|
|
15460
15657
|
EmailError: EmailError
|
|
15461
15658
|
});
|
|
15462
15659
|
|
|
15463
|
-
const PortalRegistrationForm_stories = {
|
|
15464
|
-
title: "Components/Microsite Portal Register",
|
|
15465
|
-
};
|
|
15466
|
-
const defaultProps$p = {
|
|
15467
|
-
states: {
|
|
15468
|
-
error: "",
|
|
15469
|
-
loading: false,
|
|
15470
|
-
confirmPassword: true,
|
|
15471
|
-
hideInputs: false,
|
|
15472
|
-
loginPath: "/login",
|
|
15473
|
-
},
|
|
15474
|
-
callbacks: {
|
|
15475
|
-
submit: () => console.log("Submit!"),
|
|
15476
|
-
inputFunction: () => { },
|
|
15477
|
-
},
|
|
15478
|
-
refs: {
|
|
15479
|
-
formRef: {},
|
|
15480
|
-
},
|
|
15481
|
-
content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
|
|
15482
|
-
};
|
|
15483
|
-
const errorProps$a = {
|
|
15484
|
-
states: {
|
|
15485
|
-
error: "Something went wrong. Please try again.",
|
|
15486
|
-
loading: false,
|
|
15487
|
-
confirmPassword: true,
|
|
15488
|
-
hideInputs: false,
|
|
15489
|
-
loginPath: "/login",
|
|
15490
|
-
},
|
|
15491
|
-
callbacks: {
|
|
15492
|
-
submit: () => console.log("Submit!"),
|
|
15493
|
-
inputFunction: () => { },
|
|
15494
|
-
},
|
|
15495
|
-
refs: {
|
|
15496
|
-
formRef: {},
|
|
15497
|
-
},
|
|
15498
|
-
content: {
|
|
15499
|
-
pageLabel: "Register",
|
|
15500
|
-
confirmPasswordLabel: "Confirm Password",
|
|
15501
|
-
},
|
|
15502
|
-
};
|
|
15503
|
-
const loadingProps$7 = {
|
|
15504
|
-
states: {
|
|
15505
|
-
error: "",
|
|
15506
|
-
loading: true,
|
|
15507
|
-
confirmPassword: true,
|
|
15508
|
-
hideInputs: false,
|
|
15509
|
-
loginPath: "/login",
|
|
15510
|
-
},
|
|
15511
|
-
callbacks: {
|
|
15512
|
-
submit: () => console.log("Submit!"),
|
|
15513
|
-
inputFunction: () => { },
|
|
15514
|
-
},
|
|
15515
|
-
refs: {
|
|
15516
|
-
formRef: {},
|
|
15517
|
-
},
|
|
15518
|
-
content: { pageLabel: "Register", confirmPasswordLabel: "Confirm Password" },
|
|
15519
|
-
};
|
|
15520
|
-
const slottedProps$1 = {
|
|
15521
|
-
states: {
|
|
15522
|
-
error: "",
|
|
15523
|
-
loading: false,
|
|
15524
|
-
confirmPassword: true,
|
|
15525
|
-
hideInputs: false,
|
|
15526
|
-
loginPath: "/login",
|
|
15527
|
-
},
|
|
15528
|
-
callbacks: {
|
|
15529
|
-
submit: () => console.log("Submit!"),
|
|
15530
|
-
inputFunction: () => { },
|
|
15531
|
-
},
|
|
15532
|
-
refs: {
|
|
15533
|
-
formRef: {},
|
|
15534
|
-
},
|
|
15535
|
-
content: {
|
|
15536
|
-
pageLabel: "Register",
|
|
15537
|
-
confirmPasswordLabel: "Confirm Password",
|
|
15538
|
-
formData: (index.h("div", null,
|
|
15539
|
-
index.h("sl-input", { style: { marginBottom: "var(--sl-spacing-x-large)" }, exportparts: "label: input-label, base: input-base", label: "Slotted Input", required: true }),
|
|
15540
|
-
index.h("sl-input", { exportparts: "label: input-label, base: input-base", label: "Slotted Input 2", required: true }))),
|
|
15541
|
-
},
|
|
15542
|
-
};
|
|
15543
|
-
const Default$m = () => index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$p));
|
|
15544
|
-
const RegisterWithError$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, errorProps$a)));
|
|
15545
|
-
const RegisterLoading$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, loadingProps$7)));
|
|
15546
|
-
const FieldsHidden$1 = () => {
|
|
15547
|
-
return (index.h("sqm-portal-register", { demoData: {
|
|
15548
|
-
states: {
|
|
15549
|
-
error: "",
|
|
15550
|
-
loading: true,
|
|
15551
|
-
registrationFormState: {},
|
|
15552
|
-
confirmPassword: true,
|
|
15553
|
-
hideInputs: true,
|
|
15554
|
-
loginPath: "/login",
|
|
15555
|
-
},
|
|
15556
|
-
} }));
|
|
15557
|
-
};
|
|
15558
|
-
const SlottedInputs$1 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, slottedProps$1)));
|
|
15559
|
-
const TermsAndConditions$3 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$p, { content: {
|
|
15560
|
-
...defaultProps$p.content,
|
|
15561
|
-
terms: (index.h("p", null,
|
|
15562
|
-
"By signing up you agree to the",
|
|
15563
|
-
" ",
|
|
15564
|
-
index.h("a", { href: "https://example.com", target: "_blank" }, "Terms and Conditions"))),
|
|
15565
|
-
} })));
|
|
15566
|
-
|
|
15567
|
-
const PortalRegistrationForm = /*#__PURE__*/Object.freeze({
|
|
15568
|
-
__proto__: null,
|
|
15569
|
-
'default': PortalRegistrationForm_stories,
|
|
15570
|
-
Default: Default$m,
|
|
15571
|
-
RegisterWithError: RegisterWithError$1,
|
|
15572
|
-
RegisterLoading: RegisterLoading$1,
|
|
15573
|
-
FieldsHidden: FieldsHidden$1,
|
|
15574
|
-
SlottedInputs: SlottedInputs$1,
|
|
15575
|
-
TermsAndConditions: TermsAndConditions$3
|
|
15576
|
-
});
|
|
15577
|
-
|
|
15578
15660
|
const PortalGoogleRegistrationForm_stories = {
|
|
15579
15661
|
title: "Components/Microsite Google Register",
|
|
15580
15662
|
};
|
|
15581
|
-
const defaultProps$
|
|
15663
|
+
const defaultProps$r = {
|
|
15582
15664
|
states: {
|
|
15583
15665
|
error: "",
|
|
15584
15666
|
loading: false,
|
|
@@ -15623,7 +15705,7 @@ const defaultProps$q = {
|
|
|
15623
15705
|
},
|
|
15624
15706
|
};
|
|
15625
15707
|
const errorProps$b = {
|
|
15626
|
-
...defaultProps$
|
|
15708
|
+
...defaultProps$r,
|
|
15627
15709
|
states: {
|
|
15628
15710
|
error: "Something went wrong. Please try again.",
|
|
15629
15711
|
loading: false,
|
|
@@ -15639,7 +15721,7 @@ const errorProps$b = {
|
|
|
15639
15721
|
},
|
|
15640
15722
|
};
|
|
15641
15723
|
const loadingProps$8 = {
|
|
15642
|
-
...defaultProps$
|
|
15724
|
+
...defaultProps$r,
|
|
15643
15725
|
states: {
|
|
15644
15726
|
error: "",
|
|
15645
15727
|
loading: true,
|
|
@@ -15654,11 +15736,11 @@ const loadingProps$8 = {
|
|
|
15654
15736
|
},
|
|
15655
15737
|
},
|
|
15656
15738
|
};
|
|
15657
|
-
const Default$
|
|
15739
|
+
const Default$p = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$r)));
|
|
15658
15740
|
const RegisterWithError$2 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, errorProps$b)));
|
|
15659
15741
|
const RegisterLoading$2 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, loadingProps$8)));
|
|
15660
|
-
const TermsAndConditions$4 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$
|
|
15661
|
-
...defaultProps$
|
|
15742
|
+
const TermsAndConditions$4 = () => (index.h(sqmPortalRegistrationFormView.PortalRegistrationFormView, Object.assign({}, defaultProps$r, { content: {
|
|
15743
|
+
...defaultProps$r.content,
|
|
15662
15744
|
terms: (index.h("p", null,
|
|
15663
15745
|
"By signing up you agree to the",
|
|
15664
15746
|
" ",
|
|
@@ -15668,57 +15750,12 @@ const TermsAndConditions$4 = () => (index.h(sqmPortalRegistrationFormView.Portal
|
|
|
15668
15750
|
const PortalGoogleRegistrationFormStories = /*#__PURE__*/Object.freeze({
|
|
15669
15751
|
__proto__: null,
|
|
15670
15752
|
'default': PortalGoogleRegistrationForm_stories,
|
|
15671
|
-
Default: Default$
|
|
15753
|
+
Default: Default$p,
|
|
15672
15754
|
RegisterWithError: RegisterWithError$2,
|
|
15673
15755
|
RegisterLoading: RegisterLoading$2,
|
|
15674
15756
|
TermsAndConditions: TermsAndConditions$4
|
|
15675
15757
|
});
|
|
15676
15758
|
|
|
15677
|
-
const QRCode_stories = {
|
|
15678
|
-
title: "Components/QR Code",
|
|
15679
|
-
};
|
|
15680
|
-
const defaultProps$r = {
|
|
15681
|
-
dialogIsOpen: false,
|
|
15682
|
-
error: false,
|
|
15683
|
-
viewError: false,
|
|
15684
|
-
showDialog: () => void 0,
|
|
15685
|
-
hideDialog: () => void 0,
|
|
15686
|
-
qrLink: "https://media.istockphoto.com/id/1251071788/vector/qr-code-bar-code-black-icon-digital-technology.jpg?s=612x612&w=0&k=20&c=maw4OqMSEegAdSo8Drm9HO7i1ddddvP2YaL1UuWbRig=",
|
|
15687
|
-
createDownloadable: async () => {
|
|
15688
|
-
console.log("Download QR Code clicked");
|
|
15689
|
-
},
|
|
15690
|
-
createPrintable: async () => {
|
|
15691
|
-
console.log("Print QR Code clicked");
|
|
15692
|
-
},
|
|
15693
|
-
titleText: "Share your QR code",
|
|
15694
|
-
viewCodeText: "View QR code",
|
|
15695
|
-
downloadCodeText: "Download",
|
|
15696
|
-
printCodeText: "Print",
|
|
15697
|
-
errorHeaderText: "There was an error loading your QR code",
|
|
15698
|
-
errorDescriptionText: "Please refresh this page and try again",
|
|
15699
|
-
};
|
|
15700
|
-
const Default$o = () => {
|
|
15701
|
-
return index.h(sqmQrCodeView.QrCodeView, Object.assign({}, defaultProps$r));
|
|
15702
|
-
};
|
|
15703
|
-
const Expanded = () => {
|
|
15704
|
-
return index.h(sqmQrCodeView.QrCodeView, Object.assign({}, defaultProps$r, { dialogIsOpen: true }));
|
|
15705
|
-
};
|
|
15706
|
-
const Error$b = () => {
|
|
15707
|
-
return (index.h(sqmQrCodeView.QrCodeView, Object.assign({}, defaultProps$r, { dialogIsOpen: true, viewError: true })));
|
|
15708
|
-
};
|
|
15709
|
-
const DownloadError = () => {
|
|
15710
|
-
return (index.h(sqmQrCodeView.QrCodeView, Object.assign({}, defaultProps$r, { dialogIsOpen: false, error: true })));
|
|
15711
|
-
};
|
|
15712
|
-
|
|
15713
|
-
const QRCode = /*#__PURE__*/Object.freeze({
|
|
15714
|
-
__proto__: null,
|
|
15715
|
-
'default': QRCode_stories,
|
|
15716
|
-
Default: Default$o,
|
|
15717
|
-
Expanded: Expanded,
|
|
15718
|
-
Error: Error$b,
|
|
15719
|
-
DownloadError: DownloadError
|
|
15720
|
-
});
|
|
15721
|
-
|
|
15722
15759
|
/**
|
|
15723
15760
|
*
|
|
15724
15761
|
* Themes
|
|
@@ -15731,7 +15768,7 @@ const QRCode = /*#__PURE__*/Object.freeze({
|
|
|
15731
15768
|
*
|
|
15732
15769
|
*/
|
|
15733
15770
|
//
|
|
15734
|
-
const Default$
|
|
15771
|
+
const Default$q = `
|
|
15735
15772
|
// No CSS
|
|
15736
15773
|
`;
|
|
15737
15774
|
const Orangey = `
|
|
@@ -15765,7 +15802,7 @@ const Klip = `
|
|
|
15765
15802
|
|
|
15766
15803
|
const Themes = /*#__PURE__*/Object.freeze({
|
|
15767
15804
|
__proto__: null,
|
|
15768
|
-
Default: Default$
|
|
15805
|
+
Default: Default$q,
|
|
15769
15806
|
Orangey: Orangey,
|
|
15770
15807
|
Netflix: Netflix,
|
|
15771
15808
|
SaaSquatchCorporate: SaaSquatchCorporate,
|
|
@@ -18410,6 +18447,7 @@ const stories = [
|
|
|
18410
18447
|
ReferralIframe$1,
|
|
18411
18448
|
NameFields$1,
|
|
18412
18449
|
CheckboxField,
|
|
18450
|
+
MarketingEmailsCheckbox,
|
|
18413
18451
|
DropdownField,
|
|
18414
18452
|
InputField,
|
|
18415
18453
|
RewardExchangeList,
|
|
@@ -18445,6 +18483,8 @@ const stories = [
|
|
|
18445
18483
|
TaxFormSlots,
|
|
18446
18484
|
PayoutDetailsCard,
|
|
18447
18485
|
BankingInfoForm,
|
|
18486
|
+
PortalRegistrationForm,
|
|
18487
|
+
ChangeMarketing,
|
|
18448
18488
|
BaseRegistrationForm,
|
|
18449
18489
|
PortalRegistrationForm,
|
|
18450
18490
|
PortalGoogleRegistrationFormStories,
|
|
@@ -18452,7 +18492,6 @@ const stories = [
|
|
|
18452
18492
|
WidgetCodeVerification,
|
|
18453
18493
|
PayoutButtonScroll,
|
|
18454
18494
|
PayoutStatusAlert,
|
|
18455
|
-
QRCode,
|
|
18456
18495
|
];
|
|
18457
18496
|
const StencilStorybook = class {
|
|
18458
18497
|
constructor(hostRef) {
|