@hellotext/hellotext 1.4.1 → 1.5.1

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 +53 -105
  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 +6 -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,15 +23,9 @@ 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
26
  var _config = /*#__PURE__*/_classPrivateFieldLooseKey("config");
30
- var _eventEmitter = /*#__PURE__*/_classPrivateFieldLooseKey("eventEmitter");
31
27
  var _query = /*#__PURE__*/_classPrivateFieldLooseKey("query");
32
- var _notInitialized = /*#__PURE__*/_classPrivateFieldLooseKey("notInitialized");
33
28
  var _mintAnonymousSession = /*#__PURE__*/_classPrivateFieldLooseKey("mintAnonymousSession");
34
- var _headers = /*#__PURE__*/_classPrivateFieldLooseKey("headers");
35
- var _setSessionCookie = /*#__PURE__*/_classPrivateFieldLooseKey("setSessionCookie");
36
- var _cookie = /*#__PURE__*/_classPrivateFieldLooseKey("cookie");
37
29
  /**
38
30
  * @typedef {Object} Config
39
31
  * @property {Boolean} autogenerateSession
@@ -54,21 +46,27 @@ var Hellotext = /*#__PURE__*/function () {
54
46
  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
55
47
  autogenerateSession: true
56
48
  };
57
- _classPrivateFieldLooseBase(this, _business)[_business] = business;
58
- _classPrivateFieldLooseBase(this, _config)[_config] = config;
59
- _classPrivateFieldLooseBase(this, _query)[_query] = new _query2.default(window.location.search);
60
- if (_classPrivateFieldLooseBase(this, _query)[_query].has("preview")) return;
61
- var session = _classPrivateFieldLooseBase(this, _query)[_query].get("session") || _classPrivateFieldLooseBase(this, _cookie)[_cookie];
62
- if (session && session !== "undefined" && session !== "null") {
63
- _classPrivateFieldLooseBase(this, _session)[_session] = session;
64
- _classPrivateFieldLooseBase(this, _setSessionCookie)[_setSessionCookie]();
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);
65
59
  } else if (config.autogenerateSession) {
66
60
  _classPrivateFieldLooseBase(this, _mintAnonymousSession)[_mintAnonymousSession]().then(response => {
67
- _classPrivateFieldLooseBase(this, _session)[_session] = response.id;
68
- _classPrivateFieldLooseBase(this, _setSessionCookie)[_setSessionCookie]();
61
+ _classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', response.id);
69
62
  });
70
63
  }
71
64
  }
65
+ }, {
66
+ key: "setSession",
67
+ value: function setSession(value) {
68
+ _classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', value);
69
+ }
72
70
 
73
71
  /**
74
72
  * Tracks an action that has happened on the page
@@ -82,25 +80,18 @@ var Hellotext = /*#__PURE__*/function () {
82
80
  value: function () {
83
81
  var _track = _asyncToGenerator(function* (action) {
84
82
  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
85
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
86
- throw new _notInitializedError.NotInitializedError();
87
- }
88
- if (_classPrivateFieldLooseBase(this, _query)[_query].has("preview")) {
89
- return new _response.default(true, {
90
- received: true
91
- });
83
+ if (this.notInitialized) {
84
+ throw new _errors.NotInitializedError();
92
85
  }
93
- var response = yield fetch(this.__apiURL + 'track/events', {
94
- headers: _classPrivateFieldLooseBase(this, _headers)[_headers],
95
- method: 'post',
96
- body: JSON.stringify(_objectSpread(_objectSpread({
86
+ return yield _api.default.events.create({
87
+ headers: this.headers,
88
+ body: _objectSpread(_objectSpread({
97
89
  session: this.session,
98
90
  action
99
91
  }, params), {}, {
100
92
  url: params && params.url || window.location.href
101
- }))
93
+ })
102
94
  });
103
- return new _response.default(response.status === 200, yield response.json());
104
95
  });
105
96
  function track(_x) {
106
97
  return _track.apply(this, arguments);
@@ -115,10 +106,7 @@ var Hellotext = /*#__PURE__*/function () {
115
106
  }, {
116
107
  key: "on",
117
108
  value: function on(event, callback) {
118
- if (_event.default.invalid(event)) {
119
- throw new _invalidEvent.InvalidEvent(event);
120
- }
121
- _classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].addSubscriber(event, callback);
109
+ this.eventEmitter.addSubscriber(event, callback);
122
110
  }
123
111
 
124
112
  /**
@@ -129,10 +117,7 @@ var Hellotext = /*#__PURE__*/function () {
129
117
  }, {
130
118
  key: "removeEventListener",
131
119
  value: function removeEventListener(event, callback) {
132
- if (_event.default.invalid(event)) {
133
- throw new _invalidEvent.InvalidEvent(event);
134
- }
135
- _classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].removeSubscriber(event, callback);
120
+ this.eventEmitter.removeSubscriber(event, callback);
136
121
  }
137
122
 
138
123
  /**
@@ -142,8 +127,8 @@ var Hellotext = /*#__PURE__*/function () {
142
127
  }, {
143
128
  key: "session",
144
129
  get: function get() {
145
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
146
- throw new _notInitializedError.NotInitializedError();
130
+ if (this.notInitialized) {
131
+ throw new _errors.NotInitializedError();
147
132
  }
148
133
  return _classPrivateFieldLooseBase(this, _session)[_session];
149
134
  }
@@ -159,92 +144,55 @@ var Hellotext = /*#__PURE__*/function () {
159
144
  }
160
145
 
161
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
+ }
162
164
  }]);
163
165
  return Hellotext;
164
166
  }();
165
- function _get_notInitialized() {
166
- return _classPrivateFieldLooseBase(this, _business)[_business] === undefined;
167
- }
168
167
  function _mintAnonymousSession2() {
169
168
  return _mintAnonymousSession3.apply(this, arguments);
170
169
  }
171
170
  function _mintAnonymousSession3() {
172
171
  _mintAnonymousSession3 = _asyncToGenerator(function* () {
173
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
174
- throw new _notInitializedError.NotInitializedError();
172
+ if (this.notInitialized) {
173
+ throw new _errors.NotInitializedError();
175
174
  }
176
- var trackingUrl = this.__apiURL + 'track/sessions';
177
- this.mintingPromise = yield fetch(trackingUrl, {
178
- method: 'post',
179
- headers: {
180
- Authorization: "Bearer ".concat(_classPrivateFieldLooseBase(this, _business)[_business])
181
- }
182
- });
183
- return this.mintingPromise.json();
175
+ return _api.default.sessions(this.business.id).create();
184
176
  });
185
177
  return _mintAnonymousSession3.apply(this, arguments);
186
178
  }
187
- function _get_headers() {
188
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
189
- throw new _notInitializedError.NotInitializedError();
190
- }
191
- return {
192
- Authorization: "Bearer ".concat(_classPrivateFieldLooseBase(this, _business)[_business]),
193
- Accept: 'application.json',
194
- 'Content-Type': 'application/json'
195
- };
196
- }
197
- function _setSessionCookie2() {
198
- if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
199
- throw new _notInitializedError.NotInitializedError();
200
- }
201
- if (_classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].listeners) {
202
- _classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].emit("session-set", _classPrivateFieldLooseBase(this, _session)[_session]);
203
- }
204
- document.cookie = "hello_session=".concat(_classPrivateFieldLooseBase(this, _session)[_session]);
205
- }
206
- function _get_cookie() {
207
- var _document$cookie$matc;
208
- return (_document$cookie$matc = document.cookie.match('(^|;)\\s*' + 'hello_session' + '\\s*=\\s*([^;]+)')) === null || _document$cookie$matc === void 0 ? void 0 : _document$cookie$matc.pop();
209
- }
210
- Object.defineProperty(Hellotext, _cookie, {
211
- get: _get_cookie,
212
- set: void 0
213
- });
214
- Object.defineProperty(Hellotext, _setSessionCookie, {
215
- value: _setSessionCookie2
216
- });
217
- Object.defineProperty(Hellotext, _headers, {
218
- get: _get_headers,
219
- set: void 0
220
- });
221
179
  Object.defineProperty(Hellotext, _mintAnonymousSession, {
222
180
  value: _mintAnonymousSession2
223
181
  });
224
- Object.defineProperty(Hellotext, _notInitialized, {
225
- get: _get_notInitialized,
226
- set: void 0
227
- });
228
- Hellotext.__apiURL = 'https://api.hellotext.com/v1/';
229
182
  Object.defineProperty(Hellotext, _session, {
230
183
  writable: true,
231
184
  value: void 0
232
185
  });
233
- Object.defineProperty(Hellotext, _business, {
234
- writable: true,
235
- value: void 0
236
- });
237
186
  Object.defineProperty(Hellotext, _config, {
238
187
  writable: true,
239
188
  value: void 0
240
189
  });
241
- Object.defineProperty(Hellotext, _eventEmitter, {
242
- writable: true,
243
- value: new _eventEmitter2.default()
244
- });
245
190
  Object.defineProperty(Hellotext, _query, {
246
191
  writable: true,
247
192
  value: void 0
248
193
  });
194
+ Hellotext.eventEmitter = new _core.Event();
195
+ Hellotext.forms = void 0;
196
+ Hellotext.business = void 0;
249
197
  var _default = Hellotext;
250
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
+ }