@financial-times/n-conversion-forms 31.0.1 → 31.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/.babelrc.js +7 -0
  2. package/.storybook/main.js +18 -10
  3. package/.toolkitrc.yml +7 -0
  4. package/.toolkitstate/ci.json +2 -2
  5. package/README.md +1 -1
  6. package/dist/accept-terms-business.jsx +74 -0
  7. package/dist/accept-terms-business.spec.jsx +40 -0
  8. package/dist/accept-terms-privacy-policy.jsx +71 -0
  9. package/dist/accept-terms-subscription.jsx +150 -0
  10. package/dist/accept-terms.jsx +217 -0
  11. package/dist/app-banner.jsx +51 -0
  12. package/dist/b2c-partnership-confirmation.jsx +64 -0
  13. package/dist/billing-city.jsx +58 -0
  14. package/dist/billing-country.jsx +43 -0
  15. package/dist/billing-postcode.jsx +76 -0
  16. package/dist/company-name.jsx +78 -0
  17. package/dist/confirmation.jsx +117 -0
  18. package/dist/continue-reading.jsx +45 -0
  19. package/dist/country.jsx +106 -0
  20. package/dist/customer-care.jsx +52 -0
  21. package/dist/debug.jsx +50 -0
  22. package/dist/decision-maker.jsx +72 -0
  23. package/dist/deferred-billing-terms.jsx +112 -0
  24. package/dist/delivery-address-map.jsx +184 -0
  25. package/dist/delivery-address-type.jsx +74 -0
  26. package/dist/delivery-address.jsx +123 -0
  27. package/dist/delivery-city.jsx +70 -0
  28. package/dist/delivery-county.jsx +48 -0
  29. package/dist/delivery-instructions.jsx +123 -0
  30. package/dist/delivery-option.jsx +77 -0
  31. package/dist/delivery-po-box.jsx +75 -0
  32. package/dist/delivery-postcode.jsx +116 -0
  33. package/dist/delivery-security-instructions.jsx +72 -0
  34. package/dist/delivery-start-date.jsx +77 -0
  35. package/dist/education-job-title.jsx +67 -0
  36. package/dist/email.jsx +90 -0
  37. package/dist/error-page.jsx +45 -0
  38. package/dist/fieldset.jsx +58 -0
  39. package/dist/first-name.jsx +73 -0
  40. package/dist/form.jsx +29 -0
  41. package/dist/google-sign-in.jsx +24 -0
  42. package/dist/graduation-date.jsx +112 -0
  43. package/dist/index.jsx +432 -0
  44. package/dist/industry.jsx +81 -0
  45. package/dist/job-title.jsx +65 -0
  46. package/dist/last-name.jsx +73 -0
  47. package/dist/licence-confirmation.jsx +67 -0
  48. package/dist/licence-header.jsx +52 -0
  49. package/dist/licence-sign-in.jsx +36 -0
  50. package/dist/licence-title.jsx +46 -0
  51. package/dist/lite-sub-confirmation.jsx +118 -0
  52. package/dist/loader.jsx +54 -0
  53. package/dist/message.jsx +101 -0
  54. package/dist/message.spec.jsx +96 -0
  55. package/dist/organisation.jsx +73 -0
  56. package/dist/package-change.jsx +38 -0
  57. package/dist/password.jsx +95 -0
  58. package/dist/payment-term.jsx +328 -0
  59. package/dist/payment-type.jsx +213 -0
  60. package/dist/personal-title.jsx +94 -0
  61. package/dist/phone.jsx +85 -0
  62. package/dist/position.jsx +86 -0
  63. package/dist/progress-indicator.jsx +66 -0
  64. package/dist/province.jsx +80 -0
  65. package/dist/registration-confirmation.jsx +108 -0
  66. package/dist/responsibility.jsx +84 -0
  67. package/dist/section.jsx +20 -0
  68. package/dist/seven-day-pass-experiment-confirmation.jsx +93 -0
  69. package/dist/state.jsx +80 -0
  70. package/dist/submit.jsx +52 -0
  71. package/dist/text-input.jsx +78 -0
  72. package/dist/trial-banner.jsx +29 -0
  73. package/package.json +19 -19
  74. package/toolkit/run-storybook/.toolkitrc.yml +1 -0
  75. package/toolkit/run-storybook/index.js +17 -0
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RegistrationConfirmation = RegistrationConfirmation;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var EMAIL_DEFAULT_TEXT = 'your email';
11
+ var SOCIALS = [{
12
+ name: 'instagram',
13
+ link: 'https://www.instagram.com/financialtimes'
14
+ }, {
15
+ name: 'linkedin',
16
+ link: 'https://www.linkedin.com/company/financial-times'
17
+ }, {
18
+ name: 'twitter',
19
+ link: 'https://twitter.com/FT'
20
+ }, {
21
+ name: 'facebook',
22
+ link: 'https://www.facebook.com/financialtimes'
23
+ }];
24
+ var STORES = [{
25
+ name: 'apple',
26
+ link: 'https://apps.apple.com/app/apple-store/id1200842933'
27
+ }, {
28
+ name: 'android',
29
+ link: 'https://play.google.com/store/apps/details?id=com.ft.news'
30
+ }];
31
+ function RegistrationConfirmation(_ref) {
32
+ var _ref$email = _ref.email,
33
+ email = _ref$email === void 0 ? EMAIL_DEFAULT_TEXT : _ref$email,
34
+ _ref$returnUrl = _ref.returnUrl,
35
+ returnUrl = _ref$returnUrl === void 0 ? '/' : _ref$returnUrl;
36
+ return /*#__PURE__*/_react["default"].createElement("div", {
37
+ className: "ncf"
38
+ }, /*#__PURE__*/_react["default"].createElement("div", {
39
+ className: "ncf__center ncf__margin"
40
+ }, /*#__PURE__*/_react["default"].createElement("div", {
41
+ className: "ncf__icon ncf__icon--tick ncf__icon--large"
42
+ }), /*#__PURE__*/_react["default"].createElement("h1", {
43
+ className: "ncf__header ncf__header--confirmation"
44
+ }, "Success"), /*#__PURE__*/_react["default"].createElement("p", {
45
+ className: "ncf__confirmation--message"
46
+ }, "We\u2019ve sent confirmation to ", email, ".")), /*#__PURE__*/_react["default"].createElement("div", {
47
+ className: "ncf__divider-horizontal"
48
+ }), /*#__PURE__*/_react["default"].createElement("div", {
49
+ className: "ncf__confirmation--links ncf__margin"
50
+ }, /*#__PURE__*/_react["default"].createElement("div", {
51
+ className: "ncf__confirmation--socials"
52
+ }, /*#__PURE__*/_react["default"].createElement("b", null, "Breaking news alerts, direct to your lock screen"), /*#__PURE__*/_react["default"].createElement("p", {
53
+ className: "ncf__confirmation--mobile"
54
+ }, "Download our apps or follow us on our socials"), /*#__PURE__*/_react["default"].createElement("p", {
55
+ className: "ncf__confirmation--desktop"
56
+ }, "Find us in the app and google play stores or follow us on our socials"), /*#__PURE__*/_react["default"].createElement("div", {
57
+ className: "ncf__confirmation--badges"
58
+ }, /*#__PURE__*/_react["default"].createElement("div", {
59
+ className: "o-social-follow",
60
+ "aria-label": "Follow on social media"
61
+ }, SOCIALS.map(function (_ref2) {
62
+ var name = _ref2.name,
63
+ link = _ref2.link;
64
+ return /*#__PURE__*/_react["default"].createElement("a", {
65
+ key: name,
66
+ href: link,
67
+ className: "o-social-follow-icon o-social-follow-icon--".concat(name),
68
+ target: "_blank",
69
+ rel: "noopener noreferrer",
70
+ "data-trackable": "register-social-".concat(name)
71
+ }, /*#__PURE__*/_react["default"].createElement("span", {
72
+ className: "o-social-follow-icon__label"
73
+ }, "on ", name));
74
+ })), /*#__PURE__*/_react["default"].createElement("div", {
75
+ className: "ncf__confirmation--mobile ncf__confirmation--app-badges",
76
+ "aria-label": "Download the app"
77
+ }, STORES.map(function (_ref3) {
78
+ var name = _ref3.name,
79
+ link = _ref3.link;
80
+ return /*#__PURE__*/_react["default"].createElement("a", {
81
+ key: name,
82
+ href: link,
83
+ className: "ncf-icon ncf-icon--".concat(name),
84
+ target: "_blank",
85
+ rel: "noopener noreferrer",
86
+ "data-trackable": "register-app-".concat(name)
87
+ }, /*#__PURE__*/_react["default"].createElement("span", {
88
+ className: "o-social-follow-icon__label"
89
+ }, "on ", name));
90
+ })))), /*#__PURE__*/_react["default"].createElement("div", {
91
+ className: "ncf__confirmation--alerts"
92
+ }, /*#__PURE__*/_react["default"].createElement("b", null, "Set up email alerts in", /*#__PURE__*/_react["default"].createElement("span", {
93
+ "aria-label": "myFT",
94
+ className: "ncf-icon ncf-icon--myft"
95
+ })), /*#__PURE__*/_react["default"].createElement("p", null, "Choose the content you want to follow by personalising your alerts for the most important topics and additional newsletters"), /*#__PURE__*/_react["default"].createElement("a", {
96
+ href: "/myft",
97
+ className: "margin-top-x4 ncf__button ncf__button--secondary",
98
+ "data-trackable": "register-personalise-my-alerts"
99
+ }, "Personalise my alerts"))), /*#__PURE__*/_react["default"].createElement("a", {
100
+ href: returnUrl,
101
+ target: "_parent",
102
+ className: "ncf__confirmation--finish ncf__button ncf__button--submit",
103
+ "data-trackable": "register-finish"
104
+ }, "Start reading"));
105
+ }
106
+ RegistrationConfirmation.propTypes = {
107
+ email: _propTypes["default"].string
108
+ };
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Responsibility = Responsibility;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ var _nCommonStaticData = require("n-common-static-data");
12
+ var B2CResponsibilities = _nCommonStaticData.demographics.responsibilities.responsibilities;
13
+ var B2BResponsibilities = _nCommonStaticData.b2b.demographics.responsibilities.responsibilities;
14
+ function Responsibility(_ref) {
15
+ var value = _ref.value,
16
+ _ref$isDisabled = _ref.isDisabled,
17
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
18
+ _ref$isRequired = _ref.isRequired,
19
+ isRequired = _ref$isRequired === void 0 ? true : _ref$isRequired,
20
+ _ref$hasError = _ref.hasError,
21
+ hasError = _ref$hasError === void 0 ? false : _ref$hasError,
22
+ _ref$fieldId = _ref.fieldId,
23
+ fieldId = _ref$fieldId === void 0 ? 'responsibilityField' : _ref$fieldId,
24
+ _ref$selectId = _ref.selectId,
25
+ selectId = _ref$selectId === void 0 ? 'responsibility' : _ref$selectId,
26
+ _ref$selectName = _ref.selectName,
27
+ selectName = _ref$selectName === void 0 ? 'responsibility' : _ref$selectName,
28
+ _ref$isB2B = _ref.isB2B,
29
+ isB2B = _ref$isB2B === void 0 ? false : _ref$isB2B,
30
+ _ref$options = _ref.options,
31
+ options = _ref$options === void 0 ? isB2B ? B2BResponsibilities : B2CResponsibilities : _ref$options,
32
+ _ref$fieldLabel = _ref.fieldLabel,
33
+ fieldLabel = _ref$fieldLabel === void 0 ? 'Which best describes your job responsibility?' : _ref$fieldLabel;
34
+ var inputWrapperClassName = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--select', {
35
+ 'o-forms-input--invalid': hasError
36
+ }]);
37
+ var fieldTitleClassName = (0, _classnames["default"])(['o-forms-title', {
38
+ 'o-forms-field--optional': !isRequired
39
+ }]);
40
+ return /*#__PURE__*/_react["default"].createElement("label", {
41
+ id: fieldId,
42
+ className: "o-forms-field ncf__validation-error",
43
+ "data-validate": "required",
44
+ htmlFor: selectId
45
+ }, /*#__PURE__*/_react["default"].createElement("span", {
46
+ className: fieldTitleClassName
47
+ }, /*#__PURE__*/_react["default"].createElement("span", {
48
+ className: "o-forms-title__main"
49
+ }, fieldLabel)), /*#__PURE__*/_react["default"].createElement("span", {
50
+ className: inputWrapperClassName
51
+ }, /*#__PURE__*/_react["default"].createElement("select", {
52
+ id: selectId,
53
+ name: selectName,
54
+ "data-trackable": "responsibility",
55
+ "aria-required": isRequired,
56
+ required: isRequired,
57
+ disabled: isDisabled,
58
+ defaultValue: value
59
+ }, /*#__PURE__*/_react["default"].createElement("option", {
60
+ value: ""
61
+ }, "Please select a job responsibility"), options.map(function (_ref2) {
62
+ var code = _ref2.code,
63
+ description = _ref2.description;
64
+ return /*#__PURE__*/_react["default"].createElement("option", {
65
+ key: code,
66
+ value: code
67
+ }, description);
68
+ })), /*#__PURE__*/_react["default"].createElement("span", {
69
+ className: "o-forms-input__error"
70
+ }, "Please select your responsibility")));
71
+ }
72
+ Responsibility.propTypes = {
73
+ value: _propTypes["default"].string,
74
+ isDisabled: _propTypes["default"].bool,
75
+ hasError: _propTypes["default"].bool,
76
+ fieldId: _propTypes["default"].string,
77
+ selectId: _propTypes["default"].string,
78
+ selectName: _propTypes["default"].string,
79
+ isB2B: _propTypes["default"].bool,
80
+ options: _propTypes["default"].arrayOf(_propTypes["default"].shape({
81
+ code: _propTypes["default"].string,
82
+ description: _propTypes["default"].string
83
+ }))
84
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Section = Section;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ function Section(_ref) {
11
+ var children = _ref.children;
12
+ return /*#__PURE__*/_react["default"].createElement("div", {
13
+ className: "o-forms-section o-forms-section--wide"
14
+ }, /*#__PURE__*/_react["default"].createElement("div", {
15
+ className: "o-forms-section__message"
16
+ }, children));
17
+ }
18
+ Section.propTypes = {
19
+ children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
20
+ };
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.SevenDayPassExperimentConfirmation = SevenDayPassExperimentConfirmation;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var DetailsMobileView = function DetailsMobileView(_ref) {
11
+ var details = _ref.details;
12
+ return /*#__PURE__*/_react["default"].createElement("dl", {
13
+ className: "ncf__list ncf__lite-sub__details ncf__lite-sub-confirmation--hidden-md ncf__lite-sub-confirmation--hidden-lg"
14
+ }, details.map(function (detail, index) {
15
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
16
+ key: index
17
+ }, /*#__PURE__*/_react["default"].createElement("dt", {
18
+ className: "ncf__list-title"
19
+ }, detail.title), /*#__PURE__*/_react["default"].createElement("dd", {
20
+ className: "ncf__list-data"
21
+ }, detail.data));
22
+ }));
23
+ };
24
+ function SevenDayPassExperimentConfirmation(_ref2) {
25
+ var _ref2$offerName = _ref2.offerName,
26
+ offerName = _ref2$offerName === void 0 ? '' : _ref2$offerName,
27
+ _ref2$details = _ref2.details,
28
+ details = _ref2$details === void 0 ? [] : _ref2$details;
29
+ var detailElements = details && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("h2", {
30
+ className: "ncf__header2--afterline"
31
+ }, "Your billing details"), /*#__PURE__*/_react["default"].createElement("dl", {
32
+ className: "ncf__list ncf__lite-sub-confirmation--hidden-sm"
33
+ }, details.map(function (detail, index) {
34
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
35
+ key: index
36
+ }, /*#__PURE__*/_react["default"].createElement("dt", {
37
+ className: "ncf__list-title"
38
+ }, detail.title), /*#__PURE__*/_react["default"].createElement("dd", {
39
+ className: "ncf__list-data"
40
+ }, detail.data));
41
+ })), /*#__PURE__*/_react["default"].createElement(DetailsMobileView, {
42
+ details: details
43
+ }));
44
+ return /*#__PURE__*/_react["default"].createElement("div", {
45
+ className: "ncf ncf__wrapper"
46
+ }, /*#__PURE__*/_react["default"].createElement("div", {
47
+ className: "ncf__center"
48
+ }, /*#__PURE__*/_react["default"].createElement("div", {
49
+ className: "ncf__icon ncf__icon--tick ncf__icon--large"
50
+ }), /*#__PURE__*/_react["default"].createElement("p", {
51
+ className: "ncf__paragraph--reduced-padding ncf__paragraph--subscription-confirmation"
52
+ }, "You are now subscribed to:"), /*#__PURE__*/_react["default"].createElement("h1", {
53
+ className: "ncf__header ncf__header--confirmation"
54
+ }, 'Premium Digital')), /*#__PURE__*/_react["default"].createElement("p", {
55
+ className: "ncf__paragraph"
56
+ }, "Exciting news! You are one of the first to try a", ' ', /*#__PURE__*/_react["default"].createElement("strong", null, offerName), ". As a thank you, we are pleased to extend your subscription to one month at no additional cost."), /*#__PURE__*/_react["default"].createElement("p", {
57
+ className: "ncf__center"
58
+ }, /*#__PURE__*/_react["default"].createElement("a", {
59
+ href: "/",
60
+ className: "ncf__button ncf__button--submit ncf__button--margin ncf__lite-sub-confirmation--lite-sub-cta"
61
+ }, "Go to FT.com")), /*#__PURE__*/_react["default"].createElement("p", {
62
+ className: "ncf__paragraph"
63
+ }, "Please save or print this page for your records as your purchase confirmation."), /*#__PURE__*/_react["default"].createElement("p", {
64
+ className: "ncf__paragraph"
65
+ }, "Here's a summary of your Premium Digital subscription:"), detailElements, /*#__PURE__*/_react["default"].createElement("div", {
66
+ className: "ncf__headed-paragraph"
67
+ }, /*#__PURE__*/_react["default"].createElement("h3", {
68
+ className: "ncf__header"
69
+ }, "Something not right?"), /*#__PURE__*/_react["default"].createElement("p", {
70
+ className: "ncf__paragraph"
71
+ }, "Go to your", ' ', /*#__PURE__*/_react["default"].createElement("a", {
72
+ className: "ncf__link ncf__link--external",
73
+ href: "https://www.ft.com/myaccount/personal-details",
74
+ target: "_blank",
75
+ rel: "noopener noreferrer",
76
+ "data-trackable": "yourAccount"
77
+ }, "account settings"), ' ', "to view or edit your account. If you need to get in touch call us on", ' ', /*#__PURE__*/_react["default"].createElement("a", {
78
+ href: "tel:+442077556248",
79
+ className: "ncf__link ncf__link--external"
80
+ }, "+44 20 7755 6248"), ". Or", ' ', /*#__PURE__*/_react["default"].createElement("a", {
81
+ className: "ncf__link ncf__link--external",
82
+ href: "https://help.ft.com/contact/",
83
+ target: "_blank",
84
+ rel: "noopener noreferrer"
85
+ }, "contact us"), ' ', "for additional support.")));
86
+ }
87
+ SevenDayPassExperimentConfirmation.propTypes = {
88
+ offerName: _propTypes["default"].string.isRequired,
89
+ details: _propTypes["default"].arrayOf(_propTypes["default"].shape({
90
+ title: _propTypes["default"].string.isRequired,
91
+ data: _propTypes["default"].string.isRequired
92
+ }))
93
+ };
package/dist/state.jsx ADDED
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.State = State;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ var _nCommonStaticData = require("n-common-static-data");
12
+ var defaultStates = _nCommonStaticData.americanStates.states;
13
+ function State(_ref) {
14
+ var value = _ref.value,
15
+ _ref$fieldId = _ref.fieldId,
16
+ fieldId = _ref$fieldId === void 0 ? 'stateField' : _ref$fieldId,
17
+ _ref$selectId = _ref.selectId,
18
+ selectId = _ref$selectId === void 0 ? 'state' : _ref$selectId,
19
+ _ref$hasError = _ref.hasError,
20
+ hasError = _ref$hasError === void 0 ? false : _ref$hasError,
21
+ _ref$isHidden = _ref.isHidden,
22
+ isHidden = _ref$isHidden === void 0 ? false : _ref$isHidden,
23
+ _ref$isBillingState = _ref.isBillingState,
24
+ isBillingState = _ref$isBillingState === void 0 ? false : _ref$isBillingState,
25
+ _ref$isDisabled = _ref.isDisabled,
26
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
27
+ _ref$states = _ref.states,
28
+ states = _ref$states === void 0 ? defaultStates : _ref$states;
29
+ var fieldClassNames = (0, _classnames["default"])(['o-forms-field', {
30
+ ncf__hidden: isHidden
31
+ }]);
32
+ var inputWrapperClassNames = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--select', {
33
+ 'o-forms-input--invalid': hasError
34
+ }]);
35
+ return /*#__PURE__*/_react["default"].createElement("label", {
36
+ id: fieldId,
37
+ className: fieldClassNames,
38
+ "data-validate": "required",
39
+ htmlFor: selectId
40
+ }, /*#__PURE__*/_react["default"].createElement("span", {
41
+ className: "o-forms-title"
42
+ }, /*#__PURE__*/_react["default"].createElement("span", {
43
+ className: "o-forms-title__main"
44
+ }, isBillingState ? 'Billing ' : '', "State")), /*#__PURE__*/_react["default"].createElement("span", {
45
+ className: inputWrapperClassNames
46
+ }, /*#__PURE__*/_react["default"].createElement("select", {
47
+ id: selectId,
48
+ "aria-required": "true",
49
+ required: true,
50
+ name: isBillingState ? 'billingState' : 'state',
51
+ "data-trackable": "field-state",
52
+ disabled: isDisabled,
53
+ defaultValue: value
54
+ }, /*#__PURE__*/_react["default"].createElement("option", {
55
+ disabled: true,
56
+ value: ""
57
+ }, "Please select a state"), states.map(function (_ref2) {
58
+ var code = _ref2.code,
59
+ name = _ref2.name;
60
+ return /*#__PURE__*/_react["default"].createElement("option", {
61
+ key: code,
62
+ value: code
63
+ }, name);
64
+ })), /*#__PURE__*/_react["default"].createElement("span", {
65
+ className: "o-forms-input__error"
66
+ }, "Please select your state")));
67
+ }
68
+ State.propTypes = {
69
+ value: _propTypes["default"].string,
70
+ fieldId: _propTypes["default"].string,
71
+ selectId: _propTypes["default"].string,
72
+ hasError: _propTypes["default"].bool,
73
+ isHidden: _propTypes["default"].bool,
74
+ isBillingState: _propTypes["default"].bool,
75
+ isDisabled: _propTypes["default"].bool,
76
+ states: _propTypes["default"].arrayOf(_propTypes["default"].shape({
77
+ code: _propTypes["default"].string,
78
+ name: _propTypes["default"].string
79
+ }))
80
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Submit = Submit;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ function Submit(_ref) {
12
+ var _ref$id = _ref.id,
13
+ id = _ref$id === void 0 ? 'submitButton' : _ref$id,
14
+ _ref$isCentered = _ref.isCentered,
15
+ isCentered = _ref$isCentered === void 0 ? false : _ref$isCentered,
16
+ _ref$isDisabled = _ref.isDisabled,
17
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
18
+ _ref$backButtonUrl = _ref.backButtonUrl,
19
+ backButtonUrl = _ref$backButtonUrl === void 0 ? null : _ref$backButtonUrl,
20
+ _ref$label = _ref.label,
21
+ label = _ref$label === void 0 ? 'Continue' : _ref$label;
22
+ var divClassName = (0, _classnames["default"])([
23
+ // The space at the beginning is so that we match what the handlebars
24
+ // template does. Not great I know. :/
25
+ {
26
+ ' ncf__field--center': isCentered
27
+ }, {
28
+ ' ncf__field--flex': backButtonUrl
29
+ }]);
30
+ var backButton = backButtonUrl ? /*#__PURE__*/_react["default"].createElement("a", {
31
+ className: "ncf__button",
32
+ href: backButtonUrl,
33
+ target: "_parent",
34
+ "data-trackable": "link"
35
+ }, "Back") : null;
36
+ return /*#__PURE__*/_react["default"].createElement("div", {
37
+ className: divClassName
38
+ }, backButton, /*#__PURE__*/_react["default"].createElement("button", {
39
+ id: id,
40
+ className: "ncf__button ncf__button--submit",
41
+ "data-trackable": "submit",
42
+ type: "submit",
43
+ disabled: isDisabled
44
+ }, label));
45
+ }
46
+ Submit.propTypes = {
47
+ id: _propTypes["default"].string,
48
+ isCentered: _propTypes["default"].bool,
49
+ isDisabled: _propTypes["default"].bool,
50
+ backButtonUrl: _propTypes["default"].string,
51
+ label: _propTypes["default"].string
52
+ };
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TextInput = TextInput;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ function TextInput(_ref) {
12
+ var dataTrackable = _ref.dataTrackable,
13
+ _ref$errorText = _ref.errorText,
14
+ errorText = _ref$errorText === void 0 ? 'Please enter a value' : _ref$errorText,
15
+ fieldId = _ref.fieldId,
16
+ _ref$hasError = _ref.hasError,
17
+ hasError = _ref$hasError === void 0 ? false : _ref$hasError,
18
+ inputId = _ref.inputId,
19
+ inputName = _ref.inputName,
20
+ _ref$isDisabled = _ref.isDisabled,
21
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
22
+ _ref$isRequired = _ref.isRequired,
23
+ isRequired = _ref$isRequired === void 0 ? false : _ref$isRequired,
24
+ _ref$label = _ref.label,
25
+ label = _ref$label === void 0 ? '' : _ref$label,
26
+ _ref$placeHolder = _ref.placeHolder,
27
+ placeHolder = _ref$placeHolder === void 0 ? '' : _ref$placeHolder,
28
+ _ref$value = _ref.value,
29
+ value = _ref$value === void 0 ? '' : _ref$value,
30
+ description = _ref.description;
31
+ // Use inputId if inputName is not explicitly passed.
32
+ inputName = inputName || inputId;
33
+ var inputWrapperClassNames = (0, _classnames["default"])(['o-forms-input', 'o-forms-input--text', {
34
+ 'o-forms-input--invalid': hasError
35
+ }, {
36
+ 'o-forms-field--optional': !isRequired
37
+ }]);
38
+ return /*#__PURE__*/_react["default"].createElement("label", {
39
+ id: fieldId,
40
+ className: "o-forms-field ncf__validation-error",
41
+ "data-validate": "required",
42
+ htmlFor: inputId
43
+ }, /*#__PURE__*/_react["default"].createElement("span", {
44
+ className: "o-forms-title"
45
+ }, /*#__PURE__*/_react["default"].createElement("span", {
46
+ className: "o-forms-title__main"
47
+ }, label), description ? /*#__PURE__*/_react["default"].createElement("span", {
48
+ className: "o-forms-title__prompt"
49
+ }, description) : null), /*#__PURE__*/_react["default"].createElement("span", {
50
+ className: inputWrapperClassNames
51
+ }, /*#__PURE__*/_react["default"].createElement("input", {
52
+ type: "text",
53
+ id: inputId,
54
+ name: inputName,
55
+ placeholder: placeHolder,
56
+ "data-trackable": dataTrackable,
57
+ "aria-required": isRequired,
58
+ required: isRequired,
59
+ disabled: isDisabled,
60
+ defaultValue: value
61
+ }), /*#__PURE__*/_react["default"].createElement("span", {
62
+ className: "o-forms-input__error"
63
+ }, errorText)));
64
+ }
65
+ TextInput.propTypes = {
66
+ dataTrackable: _propTypes["default"].string,
67
+ errorText: _propTypes["default"].string,
68
+ fieldId: _propTypes["default"].string,
69
+ hasError: _propTypes["default"].bool,
70
+ inputId: _propTypes["default"].string,
71
+ inputName: _propTypes["default"].string,
72
+ isDisabled: _propTypes["default"].bool,
73
+ isRequired: _propTypes["default"].bool,
74
+ label: _propTypes["default"].string,
75
+ placeHolder: _propTypes["default"].string,
76
+ value: _propTypes["default"].string,
77
+ description: _propTypes["default"].string
78
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TrialBanner = TrialBanner;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ function TrialBanner(_ref) {
11
+ var _ref$trialDuration = _ref.trialDuration,
12
+ trialDuration = _ref$trialDuration === void 0 ? '' : _ref$trialDuration;
13
+ var durationMessage = trialDuration ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
14
+ className: "ncf__strong"
15
+ }, trialDuration), ' ') : '';
16
+ return /*#__PURE__*/_react["default"].createElement("div", {
17
+ id: "trialBanner",
18
+ className: "ncf__trial-banner"
19
+ }, /*#__PURE__*/_react["default"].createElement("p", {
20
+ className: "ncf__trial-banner-content"
21
+ }, "Your free ", durationMessage, "FT.com trial", /*#__PURE__*/_react["default"].createElement("img", {
22
+ src: "https://www.ft.com/__origami/service/image/v2/images/raw/https%3A%2F%2Fwww.ft.com%2F__assets%2Fcreatives%2Fb2b%2Fmacron-desktop-banner.png?source=conversion&height=40",
23
+ alt: "Emmanuel Macron",
24
+ className: "ncf__trial-banner-img"
25
+ })));
26
+ }
27
+ TrialBanner.propTypes = {
28
+ trialDuration: _propTypes["default"].string
29
+ };
package/package.json CHANGED
@@ -2,19 +2,16 @@
2
2
  "name": "@financial-times/n-conversion-forms",
3
3
  "version": "0.0.0",
4
4
  "description": "Containing jsx components and styles for forms included on Accounts and Acqusition apps (next-signup, next-profile, next-retention, etc).",
5
- "main": "dist/index.js",
5
+ "main": "./dist/index.js",
6
6
  "scripts": {
7
- "heroku-postbuild": "dotcom-tool-kit build:remote release:remote cleanup:remote",
8
- "prepare": "snyk-protect || snyk-protect -d || true",
9
- "build": "dotcom-tool-kit build:local",
10
7
  "test": "dotcom-tool-kit test:local",
8
+ "prepare": "snyk-protect || snyk-protect -d || true",
9
+ "build": "npm run clean && dotcom-tool-kit build:local",
11
10
  "start": "dotcom-tool-kit run:local",
12
- "format": "dotcom-tool-kit format:local",
13
- "storybook": "NODE_OPTIONS=--openssl-legacy-provider start-storybook -p 5005",
14
- "build-storybook": "NODE_OPTIONS=--openssl-legacy-provider build-storybook --docs --output-dir docs",
15
- "lint": "eslint . --ext .jsx,.js",
16
- "lint-fix": "eslint . --ext .jsx,.js --fix",
17
- "prettier": "prettier --write '**/*.{js,jsx,json,scss}'"
11
+ "storybook": "storybook dev -p 5005",
12
+ "build-storybook": "storybook build --docs --output-dir docs",
13
+ "clean": "rm -rf ./dist",
14
+ "format": "dotcom-tool-kit format:local"
18
15
  },
19
16
  "repository": {
20
17
  "type": "git",
@@ -35,24 +32,25 @@
35
32
  "n-common-static-data": "github:Financial-Times/n-common-static-data#v2.0.0"
36
33
  },
37
34
  "devDependencies": {
38
- "@babel/cli": "^7.10.5",
39
- "@babel/core": "^7.11.1",
40
- "@babel/plugin-transform-runtime": "^7.11.0",
41
- "@babel/preset-env": "^7.11.0",
42
- "@babel/preset-react": "^7.10.4",
35
+ "@babel/core": "^7.22.15",
36
+ "@babel/plugin-transform-runtime": "^7.22.15",
37
+ "@babel/preset-env": "^7.22.15",
38
+ "@babel/preset-react": "^7.22.15",
39
+ "@dotcom-tool-kit/babel": "^3.1.3",
43
40
  "@dotcom-tool-kit/component": "^3.1.8",
44
41
  "@dotcom-tool-kit/eslint": "^3.1.3",
45
42
  "@dotcom-tool-kit/frontend-app": "^3.1.9",
46
43
  "@dotcom-tool-kit/jest": "^3.2.0",
47
44
  "@dotcom-tool-kit/lint-staged": "^4.1.3",
45
+ "@dotcom-tool-kit/logger": "^3.1.1",
48
46
  "@dotcom-tool-kit/prettier": "^3.1.3",
49
- "@dotcom-tool-kit/webpack": "^3.1.4",
50
47
  "@financial-times/eslint-config-next": "^6.0.0",
51
48
  "@financial-times/jest-browser-resolver": "^1.0.2",
52
49
  "@snyk/protect": "1.1193.0",
53
- "@storybook/addon-a11y": "^6.5.13",
54
- "@storybook/addon-essentials": "6.5.13",
55
- "@storybook/react": "^6.5.13",
50
+ "@storybook/addon-a11y": "^7.4.0",
51
+ "@storybook/addon-essentials": "7.4.0",
52
+ "@storybook/react": "^7.4.0",
53
+ "@storybook/react-webpack5": "^7.4.0",
56
54
  "@sucrase/jest-plugin": "^3.0.0",
57
55
  "check-engines": "^1.5.0",
58
56
  "dotcom-tool-kit": "^3.2.1",
@@ -63,6 +61,7 @@
63
61
  "eslint-plugin-jest": "^27.2.3",
64
62
  "eslint-plugin-prettier": "^4.2.1",
65
63
  "eslint-plugin-react": "^7.31.1",
64
+ "eslint-plugin-storybook": "^0.6.13",
66
65
  "fetch-mock": "^7.2.0",
67
66
  "html-webpack-plugin": "^5.5.3",
68
67
  "jest": "^29.6.4",
@@ -80,6 +79,7 @@
80
79
  "react-is": "^16.13.1",
81
80
  "sass": "^1.55.0",
82
81
  "sass-loader": "^10.2.1",
82
+ "storybook": "^7.4.0",
83
83
  "webpack": "^5.88.2",
84
84
  "webpack-cli": "^5.1.4"
85
85
  },
@@ -0,0 +1 @@
1
+ // Need any empty for plugin to work, based on this link https://github.com/Financial-Times/dotcom-tool-kit/blob/35a6f7754c33f58789b201594ed5d1000e029f1c/docs/custom-plugins.md#common-plugin-structure
@@ -0,0 +1,17 @@
1
+ const { Task } = require('@dotcom-tool-kit/types');
2
+ const { exec } = require('child_process');
3
+ const { hookFork, waitOnExit } = require('@dotcom-tool-kit/logger');
4
+
5
+ class RunStorybook extends Task {
6
+ async run() {
7
+ this.logger.info('running storybook');
8
+
9
+ const child = await exec('storybook dev -p 5005');
10
+ hookFork(this.logger, 'storybook', child);
11
+ return waitOnExit('storybook', child);
12
+ }
13
+ }
14
+
15
+ RunStorybook.description = 'Run storybook';
16
+
17
+ exports.tasks = [RunStorybook];