@hellotext/hellotext 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.babelrc +6 -3
  2. package/.github/workflows/ci.yml +1 -1
  3. package/.prettierignore +2 -0
  4. package/README.md +30 -170
  5. package/__tests__/api/sessions_test.js +12 -0
  6. package/__tests__/builders/input_builder_test.js +117 -0
  7. package/__tests__/{event_emitter_test.js → core/event_test.js} +26 -6
  8. package/__tests__/hellotext_test.js +12 -0
  9. package/__tests__/models/business_test.js +26 -0
  10. package/__tests__/models/cookies_test.js +25 -0
  11. package/__tests__/models/form_collection_test.js +100 -0
  12. package/__tests__/models/form_test.js +29 -0
  13. package/__tests__/models/query_test.js +97 -0
  14. package/dist/hellotext.js +1 -1
  15. package/docs/forms.md +127 -0
  16. package/docs/tracking.md +155 -0
  17. package/lib/api/businesses.js +45 -0
  18. package/lib/api/events.js +54 -0
  19. package/lib/api/forms.js +65 -0
  20. package/lib/api/index.js +51 -0
  21. package/lib/api/response.js +57 -0
  22. package/lib/api/sessions.js +46 -0
  23. package/lib/api/submissions.js +61 -0
  24. package/lib/api.js +73 -0
  25. package/lib/builders/inputBuilder.js +97 -0
  26. package/lib/builders/input_builder.js +61 -0
  27. package/lib/builders/logo_builder.js +38 -0
  28. package/lib/builders/otp_builder.js +39 -0
  29. package/lib/controllers/form_controller.js +139 -0
  30. package/lib/controllers/otp_controller.js +114 -0
  31. package/lib/core/configuration.js +37 -0
  32. package/lib/core/event.js +73 -0
  33. package/lib/core/index.js +20 -0
  34. package/lib/errors/index.js +19 -0
  35. package/lib/errors/invalid_event.js +34 -0
  36. package/lib/errors/not_initialized_error.js +34 -0
  37. package/lib/event.js +159 -32
  38. package/lib/eventEmitter.js +139 -46
  39. package/lib/forms.js +133 -0
  40. package/lib/hellotext.js +64 -102
  41. package/lib/index.js +7 -0
  42. package/lib/locales/en.js +20 -0
  43. package/lib/locales/es.js +20 -0
  44. package/lib/locales/index.js +14 -0
  45. package/lib/models/business.js +57 -0
  46. package/lib/models/configuration.js +66 -0
  47. package/lib/models/cookies.js +34 -0
  48. package/lib/models/form.js +148 -0
  49. package/lib/models/form_collection.js +96 -0
  50. package/lib/models/index.js +40 -0
  51. package/lib/models/query.js +51 -0
  52. package/lib/models/step.js +45 -0
  53. package/lib/query.js +65 -32
  54. package/lib/response.js +82 -42
  55. package/package.json +7 -3
  56. package/src/api/businesses.js +18 -0
  57. package/src/api/events.js +24 -0
  58. package/src/api/forms.js +30 -0
  59. package/src/api/index.js +24 -0
  60. package/src/{response.js → api/response.js} +9 -4
  61. package/src/api/sessions.js +23 -0
  62. package/src/api/submissions.js +30 -0
  63. package/src/builders/input_builder.js +55 -0
  64. package/src/builders/logo_builder.js +25 -0
  65. package/src/builders/otp_builder.js +42 -0
  66. package/src/controllers/form_controller.js +105 -0
  67. package/src/controllers/otp_controller.js +77 -0
  68. package/src/core/configuration.js +16 -0
  69. package/src/core/event.js +54 -0
  70. package/src/core/index.js +2 -0
  71. package/src/errors/index.js +2 -0
  72. package/src/hellotext.js +50 -72
  73. package/src/index.js +10 -0
  74. package/src/locales/en.js +13 -0
  75. package/src/locales/es.js +13 -0
  76. package/src/locales/index.js +7 -0
  77. package/src/models/business.js +41 -0
  78. package/src/models/cookies.js +16 -0
  79. package/src/models/form.js +133 -0
  80. package/src/models/form_collection.js +81 -0
  81. package/src/models/index.js +5 -0
  82. package/src/models/query.js +33 -0
  83. package/styles/index.css +32 -0
  84. package/webpack.config.js +15 -9
  85. package/__tests__/event_test.js +0 -21
  86. package/__tests__/query_test.js +0 -13
  87. package/src/event.js +0 -15
  88. package/src/eventEmitter.js +0 -28
  89. package/src/query.js +0 -21
  90. /package/src/errors/{invalidEvent.js → invalid_event.js} +0 -0
  91. /package/src/errors/{notInitializedError.js → not_initialized_error.js} +0 -0
package/lib/hellotext.js CHANGED
@@ -4,12 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _event = _interopRequireDefault(require("./event"));
8
- var _eventEmitter2 = _interopRequireDefault(require("./eventEmitter"));
9
- var _response = _interopRequireDefault(require("./response"));
10
- var _query2 = _interopRequireDefault(require("./query"));
11
- var _notInitializedError = require("./errors/notInitializedError");
12
- var _invalidEvent = require("./errors/invalidEvent");
7
+ var _core = require("./core");
8
+ var _api = _interopRequireDefault(require("./api"));
9
+ var _models = require("./models");
10
+ var _errors = require("./errors");
13
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -25,14 +23,13 @@ function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototy
25
23
  var id = 0;
26
24
  function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
27
25
  var _session = /*#__PURE__*/_classPrivateFieldLooseKey("session");
28
- var _business = /*#__PURE__*/_classPrivateFieldLooseKey("business");
29
- var _eventEmitter = /*#__PURE__*/_classPrivateFieldLooseKey("eventEmitter");
26
+ var _config = /*#__PURE__*/_classPrivateFieldLooseKey("config");
30
27
  var _query = /*#__PURE__*/_classPrivateFieldLooseKey("query");
31
- var _notInitialized = /*#__PURE__*/_classPrivateFieldLooseKey("notInitialized");
32
28
  var _mintAnonymousSession = /*#__PURE__*/_classPrivateFieldLooseKey("mintAnonymousSession");
33
- var _headers = /*#__PURE__*/_classPrivateFieldLooseKey("headers");
34
- var _setSessionCookie = /*#__PURE__*/_classPrivateFieldLooseKey("setSessionCookie");
35
- var _cookie = /*#__PURE__*/_classPrivateFieldLooseKey("cookie");
29
+ /**
30
+ * @typedef {Object} Config
31
+ * @property {Boolean} autogenerateSession
32
+ */
36
33
  var Hellotext = /*#__PURE__*/function () {
37
34
  function Hellotext() {
38
35
  _classCallCheck(this, Hellotext);
@@ -43,22 +40,33 @@ var Hellotext = /*#__PURE__*/function () {
43
40
  /**
44
41
  * initialize the module.
45
42
  * @param business public business id
43
+ * @param { Config } config
46
44
  */
47
45
  function initialize(business) {
48
- _classPrivateFieldLooseBase(this, _business)[_business] = business;
49
- _classPrivateFieldLooseBase(this, _query)[_query] = new _query2.default(window.location.search);
50
- if (_classPrivateFieldLooseBase(this, _query)[_query].has("preview")) return;
51
- var session = _classPrivateFieldLooseBase(this, _query)[_query].get("session") || _classPrivateFieldLooseBase(this, _cookie)[_cookie];
52
- if (session && session !== "undefined" && session !== "null") {
53
- _classPrivateFieldLooseBase(this, _session)[_session] = session;
54
- _classPrivateFieldLooseBase(this, _setSessionCookie)[_setSessionCookie]();
55
- } else {
46
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
47
+ autogenerateSession: true
48
+ };
49
+ this.business = new _models.Business(business);
50
+ this.forms = new _models.FormCollection();
51
+ _classPrivateFieldLooseBase(this, _config)[_config] = _core.Configuration.assign(config);
52
+ _classPrivateFieldLooseBase(this, _query)[_query] = new _models.Query();
53
+ addEventListener('load', () => {
54
+ this.forms.collect();
55
+ });
56
+ if (_classPrivateFieldLooseBase(this, _query)[_query].inPreviewMode) return;
57
+ if (_classPrivateFieldLooseBase(this, _query)[_query].session) {
58
+ _classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', _classPrivateFieldLooseBase(this, _query)[_query].session);
59
+ } else if (config.autogenerateSession) {
56
60
  _classPrivateFieldLooseBase(this, _mintAnonymousSession)[_mintAnonymousSession]().then(response => {
57
- _classPrivateFieldLooseBase(this, _session)[_session] = response.id;
58
- _classPrivateFieldLooseBase(this, _setSessionCookie)[_setSessionCookie]();
61
+ _classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', response.id);
59
62
  });
60
63
  }
61
64
  }
65
+ }, {
66
+ key: "setSession",
67
+ value: function setSession(value) {
68
+ _classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', value);
69
+ }
62
70
 
63
71
  /**
64
72
  * Tracks an action that has happened on the page
@@ -72,25 +80,18 @@ var Hellotext = /*#__PURE__*/function () {
72
80
  value: function () {
73
81
  var _track = _asyncToGenerator(function* (action) {
74
82
  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
75
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
76
- throw new _notInitializedError.NotInitializedError();
77
- }
78
- if (_classPrivateFieldLooseBase(this, _query)[_query].has("preview")) {
79
- return new _response.default(true, {
80
- received: true
81
- });
83
+ if (this.notInitialized) {
84
+ throw new _errors.NotInitializedError();
82
85
  }
83
- var response = yield fetch(this.__apiURL + 'track/events', {
84
- headers: _classPrivateFieldLooseBase(this, _headers)[_headers],
85
- method: 'post',
86
- body: JSON.stringify(_objectSpread(_objectSpread({
86
+ return yield _api.default.events.create({
87
+ headers: this.headers,
88
+ body: _objectSpread(_objectSpread({
87
89
  session: this.session,
88
90
  action
89
91
  }, params), {}, {
90
92
  url: params && params.url || window.location.href
91
- }))
93
+ })
92
94
  });
93
- return new _response.default(response.status === 200, yield response.json());
94
95
  });
95
96
  function track(_x) {
96
97
  return _track.apply(this, arguments);
@@ -105,10 +106,7 @@ var Hellotext = /*#__PURE__*/function () {
105
106
  }, {
106
107
  key: "on",
107
108
  value: function on(event, callback) {
108
- if (_event.default.invalid(event)) {
109
- throw new _invalidEvent.InvalidEvent(event);
110
- }
111
- _classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].addSubscriber(event, callback);
109
+ this.eventEmitter.addSubscriber(event, callback);
112
110
  }
113
111
 
114
112
  /**
@@ -119,10 +117,7 @@ var Hellotext = /*#__PURE__*/function () {
119
117
  }, {
120
118
  key: "removeEventListener",
121
119
  value: function removeEventListener(event, callback) {
122
- if (_event.default.invalid(event)) {
123
- throw new _invalidEvent.InvalidEvent(event);
124
- }
125
- _classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].removeSubscriber(event, callback);
120
+ this.eventEmitter.removeSubscriber(event, callback);
126
121
  }
127
122
 
128
123
  /**
@@ -132,8 +127,8 @@ var Hellotext = /*#__PURE__*/function () {
132
127
  }, {
133
128
  key: "session",
134
129
  get: function get() {
135
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
136
- throw new _notInitializedError.NotInitializedError();
130
+ if (this.notInitialized) {
131
+ throw new _errors.NotInitializedError();
137
132
  }
138
133
  return _classPrivateFieldLooseBase(this, _session)[_session];
139
134
  }
@@ -149,88 +144,55 @@ var Hellotext = /*#__PURE__*/function () {
149
144
  }
150
145
 
151
146
  // private
147
+ }, {
148
+ key: "notInitialized",
149
+ get: function get() {
150
+ return this.business.id === undefined;
151
+ }
152
+ }, {
153
+ key: "headers",
154
+ get: function get() {
155
+ if (this.notInitialized) {
156
+ throw new _errors.NotInitializedError();
157
+ }
158
+ return {
159
+ Authorization: "Bearer ".concat(this.business.id),
160
+ Accept: 'application.json',
161
+ 'Content-Type': 'application/json'
162
+ };
163
+ }
152
164
  }]);
153
165
  return Hellotext;
154
166
  }();
155
- function _get_notInitialized() {
156
- return _classPrivateFieldLooseBase(this, _business)[_business] === undefined;
157
- }
158
167
  function _mintAnonymousSession2() {
159
168
  return _mintAnonymousSession3.apply(this, arguments);
160
169
  }
161
170
  function _mintAnonymousSession3() {
162
171
  _mintAnonymousSession3 = _asyncToGenerator(function* () {
163
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
164
- throw new _notInitializedError.NotInitializedError();
172
+ if (this.notInitialized) {
173
+ throw new _errors.NotInitializedError();
165
174
  }
166
- var trackingUrl = this.__apiURL + 'track/sessions';
167
- this.mintingPromise = yield fetch(trackingUrl, {
168
- method: 'post',
169
- headers: {
170
- Authorization: "Bearer ".concat(_classPrivateFieldLooseBase(this, _business)[_business])
171
- }
172
- });
173
- return this.mintingPromise.json();
175
+ return _api.default.sessions(this.business.id).create();
174
176
  });
175
177
  return _mintAnonymousSession3.apply(this, arguments);
176
178
  }
177
- function _get_headers() {
178
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
179
- throw new _notInitializedError.NotInitializedError();
180
- }
181
- return {
182
- Authorization: "Bearer ".concat(_classPrivateFieldLooseBase(this, _business)[_business]),
183
- Accept: 'application.json',
184
- 'Content-Type': 'application/json'
185
- };
186
- }
187
- function _setSessionCookie2() {
188
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
189
- throw new _notInitializedError.NotInitializedError();
190
- }
191
- if (_classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].listeners) {
192
- _classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].emit("session-set", _classPrivateFieldLooseBase(this, _session)[_session]);
193
- }
194
- document.cookie = "hello_session=".concat(_classPrivateFieldLooseBase(this, _session)[_session]);
195
- }
196
- function _get_cookie() {
197
- var _document$cookie$matc;
198
- return (_document$cookie$matc = document.cookie.match('(^|;)\\s*' + 'hello_session' + '\\s*=\\s*([^;]+)')) === null || _document$cookie$matc === void 0 ? void 0 : _document$cookie$matc.pop();
199
- }
200
- Object.defineProperty(Hellotext, _cookie, {
201
- get: _get_cookie,
202
- set: void 0
203
- });
204
- Object.defineProperty(Hellotext, _setSessionCookie, {
205
- value: _setSessionCookie2
206
- });
207
- Object.defineProperty(Hellotext, _headers, {
208
- get: _get_headers,
209
- set: void 0
210
- });
211
179
  Object.defineProperty(Hellotext, _mintAnonymousSession, {
212
180
  value: _mintAnonymousSession2
213
181
  });
214
- Object.defineProperty(Hellotext, _notInitialized, {
215
- get: _get_notInitialized,
216
- set: void 0
217
- });
218
- Hellotext.__apiURL = 'https://api.hellotext.com/v1/';
219
182
  Object.defineProperty(Hellotext, _session, {
220
183
  writable: true,
221
184
  value: void 0
222
185
  });
223
- Object.defineProperty(Hellotext, _business, {
186
+ Object.defineProperty(Hellotext, _config, {
224
187
  writable: true,
225
188
  value: void 0
226
189
  });
227
- Object.defineProperty(Hellotext, _eventEmitter, {
228
- writable: true,
229
- value: new _eventEmitter2.default()
230
- });
231
190
  Object.defineProperty(Hellotext, _query, {
232
191
  writable: true,
233
192
  value: void 0
234
193
  });
194
+ Hellotext.eventEmitter = new _core.Event();
195
+ Hellotext.forms = void 0;
196
+ Hellotext.business = void 0;
235
197
  var _default = Hellotext;
236
198
  exports.default = _default;
package/lib/index.js CHANGED
@@ -4,7 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ var _stimulus = require("@hotwired/stimulus");
7
8
  var _hellotext = _interopRequireDefault(require("./hellotext"));
9
+ var _form_controller = _interopRequireDefault(require("./controllers/form_controller"));
10
+ var _otp_controller = _interopRequireDefault(require("./controllers/otp_controller"));
11
+ require("../styles/index.css");
8
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ var application = _stimulus.Application.start();
14
+ application.register('hellotext--form', _form_controller.default);
15
+ application.register('hellotext--otp', _otp_controller.default);
9
16
  var _default = _hellotext.default;
10
17
  exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = {
8
+ otp: {
9
+ sent_to_email: 'A One-Time Password has been sent to your email address',
10
+ sent_to_phone: 'An One-Time Password has been sent to your phone number',
11
+ resend_successful: 'The One-Time Password has been resent successfully',
12
+ invalid: 'Invalid One-Time Password',
13
+ resend: 'Resend OTP',
14
+ throttled: 'You have reached the maximum number of attempts. Please try again in 1 minute.'
15
+ },
16
+ white_label: {
17
+ powered_by: "Powered by"
18
+ }
19
+ };
20
+ exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = {
8
+ otp: {
9
+ sent_to_email: 'Un código de un solo uso ha sido enviado a tu correo electrónico',
10
+ sent_to_phone: 'Un código de un solo uso ha sido enviado a tu número de teléfono',
11
+ resend_successful: 'El código de un solo uso ha sido reenviado exitosamente',
12
+ invalid: 'Código de un solo uso inválido',
13
+ resend: 'Reenviar OTP',
14
+ throttled: 'Has alcanzado el número máximo de intentos. Por favor intenta de nuevo en 1 minuto.'
15
+ },
16
+ white_label: {
17
+ powered_by: "Desarrollado por"
18
+ }
19
+ };
20
+ exports.default = _default;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _en = _interopRequireDefault(require("./en"));
8
+ var _es = _interopRequireDefault(require("./es"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ var _default = {
11
+ en: _en.default,
12
+ es: _es.default
13
+ };
14
+ exports.default = _default;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Business = void 0;
7
+ var _businesses = _interopRequireDefault(require("../api/businesses"));
8
+ var _locales = _interopRequireDefault(require("../locales"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
12
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
13
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
14
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
15
+ var Business = /*#__PURE__*/function () {
16
+ function Business(id) {
17
+ _classCallCheck(this, Business);
18
+ this.id = id;
19
+ this.data = {};
20
+ this.fetchPublicData();
21
+ }
22
+ _createClass(Business, [{
23
+ key: "subscription",
24
+ get: function get() {
25
+ return this.data.subscription;
26
+ }
27
+ }, {
28
+ key: "country",
29
+ get: function get() {
30
+ return this.data.country;
31
+ }
32
+ }, {
33
+ key: "enabledWhitelist",
34
+ get: function get() {
35
+ return this.data.whitelist !== 'disabled';
36
+ }
37
+ }, {
38
+ key: "locale",
39
+ get: function get() {
40
+ return _locales.default[this.data.locale];
41
+ }
42
+ }, {
43
+ key: "features",
44
+ get: function get() {
45
+ return this.data.features;
46
+ }
47
+
48
+ // private
49
+ }, {
50
+ key: "fetchPublicData",
51
+ value: function fetchPublicData() {
52
+ _businesses.default.get(this.id).then(response => response.json()).then(data => this.data = data);
53
+ }
54
+ }]);
55
+ return Business;
56
+ }();
57
+ exports.Business = Business;
@@ -0,0 +1,66 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true,
5
+ })
6
+ exports.Configuration = void 0
7
+ function _classCallCheck(instance, Constructor) {
8
+ if (!(instance instanceof Constructor)) {
9
+ throw new TypeError('Cannot call a class as a function')
10
+ }
11
+ }
12
+ function _defineProperties(target, props) {
13
+ for (var i = 0; i < props.length; i++) {
14
+ var descriptor = props[i]
15
+ descriptor.enumerable = descriptor.enumerable || false
16
+ descriptor.configurable = true
17
+ if ('value' in descriptor) descriptor.writable = true
18
+ Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor)
19
+ }
20
+ }
21
+ function _createClass(Constructor, protoProps, staticProps) {
22
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps)
23
+ if (staticProps) _defineProperties(Constructor, staticProps)
24
+ Object.defineProperty(Constructor, 'prototype', { writable: false })
25
+ return Constructor
26
+ }
27
+ function _toPropertyKey(arg) {
28
+ var key = _toPrimitive(arg, 'string')
29
+ return typeof key === 'symbol' ? key : String(key)
30
+ }
31
+ function _toPrimitive(input, hint) {
32
+ if (typeof input !== 'object' || input === null) return input
33
+ var prim = input[Symbol.toPrimitive]
34
+ if (prim !== undefined) {
35
+ var res = prim.call(input, hint || 'default')
36
+ if (typeof res !== 'object') return res
37
+ throw new TypeError('@@toPrimitive must return a primitive value.')
38
+ }
39
+ return (hint === 'string' ? String : Number)(input)
40
+ }
41
+ var Configuration = /*#__PURE__*/ (function () {
42
+ function Configuration() {
43
+ _classCallCheck(this, Configuration)
44
+ }
45
+ _createClass(Configuration, null, [
46
+ {
47
+ key: 'assign',
48
+ value: function assign(_ref) {
49
+ var { apiRoot, autoGenerateSession } = _ref
50
+ this.apiRoot = apiRoot
51
+ this.autoGenerateSession = autoGenerateSession
52
+ return this
53
+ },
54
+ },
55
+ {
56
+ key: 'endpoint',
57
+ value: function endpoint(path) {
58
+ return ''.concat(this.apiRoot, '/').concat(path)
59
+ },
60
+ },
61
+ ])
62
+ return Configuration
63
+ })()
64
+ exports.Configuration = Configuration
65
+ Configuration.apiRoot = 'http://api.lvh.me:3000/v1/'
66
+ Configuration.autoGenerateSession = true
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Cookies = void 0;
7
+ var _hellotext = _interopRequireDefault(require("../hellotext"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
11
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
12
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
13
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
+ var Cookies = /*#__PURE__*/function () {
15
+ function Cookies() {
16
+ _classCallCheck(this, Cookies);
17
+ }
18
+ _createClass(Cookies, null, [{
19
+ key: "set",
20
+ value: function set(name, value) {
21
+ document.cookie = "".concat(name, "=").concat(value);
22
+ _hellotext.default.eventEmitter.dispatch('session-set', value);
23
+ return value;
24
+ }
25
+ }, {
26
+ key: "get",
27
+ value: function get(name) {
28
+ var _document$cookie$matc;
29
+ return (_document$cookie$matc = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)')) === null || _document$cookie$matc === void 0 ? void 0 : _document$cookie$matc.pop();
30
+ }
31
+ }]);
32
+ return Cookies;
33
+ }();
34
+ exports.Cookies = Cookies;
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Form = void 0;
7
+ var _hellotext = _interopRequireDefault(require("../hellotext"));
8
+ var _input_builder = require("../builders/input_builder");
9
+ var _logo_builder = require("../builders/logo_builder");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
15
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
16
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
17
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
18
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
19
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
20
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
21
+ function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
22
+ var id = 0;
23
+ function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
24
+ var _findOrCreateComponent = /*#__PURE__*/_classPrivateFieldLooseKey("findOrCreateComponent");
25
+ var Form = /*#__PURE__*/function () {
26
+ function Form(data) {
27
+ var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
28
+ _classCallCheck(this, Form);
29
+ Object.defineProperty(this, _findOrCreateComponent, {
30
+ value: _findOrCreateComponent2
31
+ });
32
+ this.data = data;
33
+ this.element = element || document.querySelector("[data-hello-form=\"".concat(this.id, "\"]")) || document.createElement('form');
34
+ }
35
+ _createClass(Form, [{
36
+ key: "mount",
37
+ value: function () {
38
+ var _mount = _asyncToGenerator(function* () {
39
+ var firstStep = this.data.steps[0];
40
+ this.buildHeader(firstStep.header);
41
+ this.buildInputs(firstStep.inputs);
42
+ this.buildButton(firstStep.button);
43
+ this.buildFooter(firstStep.footer);
44
+ this.elementAttributes.forEach(attribute => {
45
+ this.element.setAttribute(attribute.name, attribute.value);
46
+ });
47
+ if (!document.contains(this.element)) {
48
+ document.body.appendChild(this.element);
49
+ }
50
+ if (!_hellotext.default.business.features.white_label) {
51
+ this.element.prepend(_logo_builder.LogoBuilder.build());
52
+ }
53
+ });
54
+ function mount() {
55
+ return _mount.apply(this, arguments);
56
+ }
57
+ return mount;
58
+ }()
59
+ }, {
60
+ key: "buildHeader",
61
+ value: function buildHeader(header) {
62
+ var headerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-header]', 'header');
63
+ headerElement.innerHTML = header.content;
64
+ if (this.element.querySelector('[data-form-header]')) {
65
+ this.element.querySelector('[data-form-header]').replaceWith(headerElement);
66
+ } else {
67
+ this.element.prepend(headerElement);
68
+ }
69
+ }
70
+ }, {
71
+ key: "buildInputs",
72
+ value: function buildInputs(inputs) {
73
+ var inputsContainerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-inputs]', 'main');
74
+ var inputElements = inputs.map(input => _input_builder.InputBuilder.build(input));
75
+ inputElements.forEach(inputElement => inputsContainerElement.appendChild(inputElement));
76
+ if (this.element.querySelector('[data-form-inputs]')) {
77
+ this.element.querySelector('[data-form-inputs]').replaceWith(inputsContainerElement);
78
+ } else {
79
+ this.element.querySelector('[data-form-header]').insertAdjacentHTML('afterend', inputsContainerElement.outerHTML);
80
+ }
81
+ }
82
+ }, {
83
+ key: "buildButton",
84
+ value: function buildButton(button) {
85
+ var buttonElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-button]', 'button');
86
+ buttonElement.innerText = button.text;
87
+ buttonElement.setAttribute('data-action', 'click->hellotext--form#submit');
88
+ buttonElement.setAttribute('data-hellotext--form-target', 'button');
89
+ if (this.element.querySelector('[data-form-button]')) {
90
+ this.element.querySelector('[data-form-button]').replaceWith(buttonElement);
91
+ } else {
92
+ this.element.querySelector('[data-form-inputs]').insertAdjacentHTML('afterend', buttonElement.outerHTML);
93
+ }
94
+ }
95
+ }, {
96
+ key: "buildFooter",
97
+ value: function buildFooter(footer) {
98
+ var element = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-footer]', 'footer');
99
+ element.innerHTML = footer.content;
100
+ if (this.element.querySelector('[data-form-footer]')) {
101
+ this.element.querySelector('[data-form-footer]').replaceWith(element);
102
+ } else {
103
+ this.element.appendChild(element);
104
+ }
105
+ }
106
+ }, {
107
+ key: "markAsCompleted",
108
+ value: function markAsCompleted(data) {
109
+ localStorage.setItem("hello-form-".concat(this.id), 'completed');
110
+ _hellotext.default.eventEmitter.dispatch('form:completed', _objectSpread({
111
+ id: this.id
112
+ }, data));
113
+ }
114
+ }, {
115
+ key: "id",
116
+ get: function get() {
117
+ return this.data.id;
118
+ }
119
+ }, {
120
+ key: "elementAttributes",
121
+ get: function get() {
122
+ return [{
123
+ name: 'data-controller',
124
+ value: 'hellotext--form'
125
+ }, {
126
+ name: 'data-hello-form',
127
+ value: this.id
128
+ }, {
129
+ name: 'data-hellotext--form-data-value',
130
+ value: JSON.stringify(this.data)
131
+ }, {
132
+ name: 'data-action',
133
+ value: 'hellotext--otp:verified->hellotext--form#completed'
134
+ }];
135
+ }
136
+ }]);
137
+ return Form;
138
+ }();
139
+ exports.Form = Form;
140
+ function _findOrCreateComponent2(selector, tag) {
141
+ var existingElement = this.element.querySelector(selector);
142
+ if (existingElement) {
143
+ return existingElement.cloneNode(true);
144
+ }
145
+ var createdElement = document.createElement(tag);
146
+ createdElement.setAttribute(selector.replace('[', '').replace(']', ''), '');
147
+ return createdElement;
148
+ }