@lvble/core 2.0.30 → 2.0.32

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.
@@ -32,14 +32,10 @@ declare enum EventType {
32
32
  export interface InitOptions {
33
33
  environment: Environment;
34
34
  token: string;
35
+ onEvent: (eventType: string, data: any) => void;
35
36
  }
36
37
  export interface OpenOptions {
37
38
  mode?: Mode;
38
- onEvent: (eventType: string, data: any) => void;
39
- }
40
- export interface CreateWidgetOptions extends OpenOptions {
41
- mode?: Extract<Mode, "onboarding" | "repay">;
42
- onEvent: (eventType: string, data: any) => void;
43
39
  }
44
40
  declare class LvbleWidget extends HTMLElement {
45
41
  _typeToEvent: {
@@ -50,8 +46,6 @@ declare class LvbleWidget extends HTMLElement {
50
46
  };
51
47
  _iframe?: HTMLIFrameElement;
52
48
  constructor();
53
- get mode(): Mode;
54
- set mode(val: Mode | undefined);
55
49
  get environment(): Environment;
56
50
  set environment(val: Environment);
57
51
  get token(): string;
@@ -63,14 +57,12 @@ declare const lvble: (initOptions: InitOptions) => {
63
57
  /**
64
58
  * This function creates a widget that can be embedded in your website.
65
59
  *
66
- * @param createOptions The options for creating the widget. See CreateWidgetOptions for more information.
67
- * @returns The widget.
60
+ * @returns A lvble widget. Note that it detects mode automagically.
68
61
  */
69
- createWidget: (createOptions: CreateWidgetOptions) => LvbleWidget;
62
+ createWidget: () => LvbleWidget;
70
63
  /**
71
- * This function opens a popup with the relevant mode.
72
- * @param openOptions The options for opening the widget. See OpenOptions for more information.
73
- * @returns undefined.
64
+ * This function opens a modal with the relevant mode.
65
+ * @param openOptions The options for opening the modal. See `OpenOptions` for more information.
74
66
  */
75
67
  open: (openOptions: OpenOptions) => void;
76
68
  };
@@ -79,14 +71,12 @@ export declare const Lvble: (initOptions: InitOptions) => {
79
71
  /**
80
72
  * This function creates a widget that can be embedded in your website.
81
73
  *
82
- * @param createOptions The options for creating the widget. See CreateWidgetOptions for more information.
83
- * @returns The widget.
74
+ * @returns A lvble widget. Note that it detects mode automagically.
84
75
  */
85
- createWidget: (createOptions: CreateWidgetOptions) => LvbleWidget;
76
+ createWidget: () => LvbleWidget;
86
77
  /**
87
- * This function opens a popup with the relevant mode.
88
- * @param openOptions The options for opening the widget. See OpenOptions for more information.
89
- * @returns undefined.
78
+ * This function opens a modal with the relevant mode.
79
+ * @param openOptions The options for opening the modal. See `OpenOptions` for more information.
90
80
  */
91
81
  open: (openOptions: OpenOptions) => void;
92
82
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lvble.d.ts","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,GAAG,gBAAgB;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;CAC1B;AAeD,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,cAAc,GACtB,SAAS,GACT;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACN,MAAM,MAAM,SAAS,GACjB,SAAS,GACT;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACN,MAAM,MAAM,SAAS,GACjB,SAAS,GACT;IACE,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/D,aAAK,SAAS;IACZ,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;CAC5B;AASD,MAAM,WAAW,WAAW;IAE1B,WAAW,EAAE,WAAW,CAAC;IAEzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC;IAE7C,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CACjD;AAED,cAAM,WAAY,SAAQ,WAAW;IACnC,YAAY;;;;;MAKV;IACF,OAAO,CAAC,EAAE,iBAAiB,CAAC;;IAO5B,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,SAAS,EAM7B;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,WAAW,CAAC,GAAG,EAJA,WAIA,EAMlB;IAED,IAAI,KAAK,IAIM,MAAM,CAFpB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAMpB;IAED,iBAAiB;IAiBjB,oBAAoB;CAGrB;AAgBD,QAAA,MAAM,KAAK,gBAAiB,WAAW;IAEnC;;;;;OAKG;kCAE2B,mBAAmB;IAoCjD;;;;OAIG;wBACiB,WAAW;CA6DlC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEjD,eAAO,MAAM,KAAK,gBAnHU,WAAW;IAEnC;;;;;OAKG;kCAE2B,mBAAmB;IAoCjD;;;;OAIG;wBACiB,WAAW;CAiET,CAAC"}
1
+ {"version":3,"file":"lvble.d.ts","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,GAAG,gBAAgB;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;CAC1B;AAeD,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,cAAc,GACtB,SAAS,GACT;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACN,MAAM,MAAM,SAAS,GACjB,SAAS,GACT;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACN,MAAM,MAAM,SAAS,GACjB,SAAS,GACT;IACE,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAGN,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/D,aAAK,SAAS;IACZ,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;CAC5B;AASD,MAAM,WAAW,WAAW;IAE1B,WAAW,EAAE,WAAW,CAAC;IAEzB,KAAK,EAAE,MAAM,CAAC;IAEd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,cAAM,WAAY,SAAQ,WAAW;IACnC,YAAY;;;;;MAKV;IACF,OAAO,CAAC,EAAE,iBAAiB,CAAC;;IAO5B,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,WAAW,CAAC,GAAG,EAJA,WAIA,EAMlB;IAED,IAAI,KAAK,IAIM,MAAM,CAFpB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAMpB;IAED,iBAAiB;IAiBjB,oBAAoB;CAGrB;AAyCD,QAAA,MAAM,KAAK,gBAAiB,WAAW;IA+BnC;;;;OAIG;;IAuCH;;;OAGG;wBACiB,WAAW;CAyDlC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEjD,eAAO,MAAM,KAAK,gBA3IU,WAAW;IA+BnC;;;;OAIG;;IAuCH;;;OAGG;wBACiB,WAAW;CA6DT,CAAC"}
package/dist/lib/lvble.js CHANGED
@@ -16,7 +16,7 @@ const envToBaseUrlMapWidget = {
16
16
  [Environment.Production]: "https://widget.pms.production.nowlvble.com",
17
17
  };
18
18
  const envToBaseUrlMapExperience = {
19
- [Environment.Local]: "http://localhost:3000",
19
+ [Environment.Local]: "http://localhost:3001",
20
20
  [Environment.Dev]: "https://experience.pms.development.nowlvble.com",
21
21
  [Environment.Sandbox]: "https://experience.pms.sandbox.nowlvble.com",
22
22
  [Environment.Production]: "https://experience.pms.production.nowlvble.com",
@@ -56,17 +56,6 @@ class LvbleWidget extends HTMLElement {
56
56
  });
57
57
  this.attachShadow({ mode: "open" });
58
58
  }
59
- get mode() {
60
- return this.getAttribute("mode");
61
- }
62
- set mode(val) {
63
- if (val) {
64
- this.setAttribute("mode", val);
65
- }
66
- else {
67
- this.removeAttribute("mode");
68
- }
69
- }
70
59
  get environment() {
71
60
  return this.getAttribute("environment");
72
61
  }
@@ -108,94 +97,130 @@ class LvbleWidget extends HTMLElement {
108
97
  }
109
98
  }
110
99
  customElements.define("lvble-widget", LvbleWidget);
111
- const modeWidgetMap = {
112
- onboarding: customElements.get("lvble-widget"),
113
- repay: customElements.get("lvble-widget"),
114
- };
115
- let _popup;
116
100
  let eventListenerLvbleAdded = false;
117
101
  let eventListenerOpenAdded = false;
102
+ const createModal = () => {
103
+ const modalIframe = document.createElement("iframe");
104
+ const w = 360;
105
+ const h = 95;
106
+ const t = `calc(50vh + 10px)`;
107
+ const l = `50vw`;
108
+ modalIframe.style.position = "absolute";
109
+ modalIframe.style.top = t;
110
+ modalIframe.style.left = l;
111
+ modalIframe.style.transform = `translate(-50%, -50%)`;
112
+ modalIframe.style.width = `min(95vw, ${w}px)`;
113
+ modalIframe.style.height = `min(${h}vh, 750px)`;
114
+ modalIframe.style.backgroundColor = "white";
115
+ modalIframe.style.borderRadius = "10px";
116
+ modalIframe.style.borderStyle = "solid";
117
+ modalIframe.style.borderColor = "transparent";
118
+ modalIframe.style.borderWidth = "1px";
119
+ // modalIframe.style.padding = "1.5rem";
120
+ const modalBackground = document.createElement("div");
121
+ modalBackground.style.position = "fixed";
122
+ modalBackground.style.top = "0";
123
+ modalBackground.style.left = "0";
124
+ modalBackground.style.height = "100%";
125
+ modalBackground.style.width = "100%";
126
+ modalBackground.style.zIndex = "100";
127
+ modalBackground.style.backgroundColor = "rgba(0, 0, 0, 0.5)";
128
+ return { modalBackground, modalIframe };
129
+ };
118
130
  const lvble = (initOptions) => {
119
- return {
131
+ /**
132
+ * Note: you can only register for onEvent once.
133
+ */
134
+ if (!initOptions.onEvent) {
135
+ throw new Error("onEvent callback is required");
136
+ }
137
+ if (!initOptions.token) {
138
+ throw new Error("token is required");
139
+ }
140
+ if (!initOptions.environment) {
141
+ throw new Error("environment is required");
142
+ }
143
+ const modeUrlMap = {
144
+ onboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
145
+ offboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
146
+ split: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
147
+ repay: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
148
+ };
149
+ const { modalBackground, modalIframe } = createModal();
150
+ const l = {
120
151
  /**
121
152
  * This function creates a widget that can be embedded in your website.
122
153
  *
123
- * @param createOptions The options for creating the widget. See CreateWidgetOptions for more information.
124
- * @returns The widget.
154
+ * @returns A lvble widget. Note that it detects mode automagically.
125
155
  */
126
- // TODO: Add support for no mode
127
- createWidget: (createOptions) => {
156
+ createWidget: () => {
128
157
  const widget = new LvbleWidget();
129
- // (
130
- // createOptions.mode
131
- // ? new modeWidgetMap[createOptions.mode]!()
132
- // : new (customElements.get(
133
- // "lvble-widget"
134
- // ) as CustomElementConstructor)()
135
- // ) as LvbleWidget;
136
158
  widget.environment = initOptions.environment;
137
159
  widget.token = initOptions.token;
138
- widget.mode = createOptions.mode;
160
+ modalBackground.appendChild(modalIframe);
139
161
  const messageListener = (message) => {
140
162
  if (message.origin != envToBaseUrlMapWidget[initOptions.environment]) {
141
163
  console.debug(`Received message from unknown origin: ${message.origin}`);
142
164
  return;
143
165
  }
144
- const data = message.data;
145
- mixpanel_browser_1.default.track('BEFORE_INVOKE_ON_EVENT', data.data);
146
- createOptions.onEvent(data.eventType, data.data);
147
- mixpanel_browser_1.default.track('AFTER_INVOKE_ON_EVENT', data.data);
166
+ const eventData = message.data;
167
+ if (eventData.eventType === "OPEN_EXPERIENCE_REQUEST") {
168
+ modalIframe.src = `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`;
169
+ const openOptions = {
170
+ mode: "onboarding", // Replace with the desired mode
171
+ };
172
+ l.open(openOptions);
173
+ }
148
174
  };
149
175
  if (!eventListenerLvbleAdded) {
150
176
  window.addEventListener("message", messageListener);
151
177
  eventListenerLvbleAdded = true;
152
- mixpanel_browser_1.default.init('9ad1530a57a977ab9d4005e2ba11ab4a', { debug: true });
178
+ mixpanel_browser_1.default.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
153
179
  }
154
180
  return widget;
155
181
  },
156
182
  /**
157
- * This function opens a popup with the relevant mode.
158
- * @param openOptions The options for opening the widget. See OpenOptions for more information.
159
- * @returns undefined.
183
+ * This function opens a modal with the relevant mode.
184
+ * @param openOptions The options for opening the modal. See `OpenOptions` for more information.
160
185
  */
161
186
  open: (openOptions) => {
162
- const modeUrlMap = {
163
- onboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
164
- offboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
165
- split: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
166
- repay: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
167
- };
168
- const modeUrl = openOptions.mode ?
169
- modeUrlMap[openOptions.mode] :
170
- `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`;
171
- const w = 450;
172
- const h = 800;
173
- const l = screen.width / 2 - w / 2;
174
- const t = screen.height / 2 - h / 2;
175
- _popup = window.open(modeUrl, "LvblePopup", "width=" + w + ",height=" + h + ",location=no,left=" + l + ",top=" + t);
187
+ if (!openOptions.mode) {
188
+ throw new Error("mode is required");
189
+ }
190
+ const modeUrl = openOptions.mode
191
+ ? modeUrlMap[openOptions.mode]
192
+ : `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`;
193
+ modalIframe.src = modeUrl;
194
+ modalBackground.appendChild(modalIframe);
195
+ document.body.appendChild(modalBackground);
176
196
  const messageListener = (message) => {
177
197
  if (message.origin != envToBaseUrlMapExperience[initOptions.environment]) {
178
- console.debug(`Received message from unknown origin: ${message.origin}`);
198
+ console.debug(`Received message from unknown origin: ${message.origin} Expecting only ${envToBaseUrlMapExperience[initOptions.environment]}`);
179
199
  return;
180
200
  }
181
201
  const eventData = message.data;
202
+ if (eventData.eventType === "CLOSE_EXPERIENCE_REQUEST") {
203
+ document.body.removeChild(modalBackground);
204
+ return;
205
+ }
206
+ // TODO: Consider using websocket in iframes instead of posting messages to them.
182
207
  const iframes = document.querySelectorAll("lvble-widget");
183
- message = JSON.parse(JSON.stringify(message));
184
208
  iframes.forEach((w) => {
185
209
  var _a, _b;
186
210
  (_b = ((_a = w.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector("iframe")).contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(eventData, "*");
187
211
  });
188
- mixpanel_browser_1.default.track('BEFORE_INVOKE_ON_EVENT', eventData.data);
189
- openOptions.onEvent(eventData.eventType, eventData.data);
190
- mixpanel_browser_1.default.track('AFTER_INVOKE_ON_EVENT', eventData.data);
212
+ mixpanel_browser_1.default.track("BEFORE_INVOKE_ON_EVENT", eventData);
213
+ initOptions.onEvent(eventData.eventType, eventData.data);
214
+ mixpanel_browser_1.default.track("AFTER_INVOKE_ON_EVENT", eventData);
191
215
  };
192
216
  if (!eventListenerOpenAdded) {
193
217
  window.addEventListener("message", messageListener);
194
218
  eventListenerOpenAdded = true;
195
- mixpanel_browser_1.default.init('9ad1530a57a977ab9d4005e2ba11ab4a', { debug: true });
219
+ mixpanel_browser_1.default.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
196
220
  }
197
221
  },
198
222
  };
223
+ return l;
199
224
  };
200
225
  exports.Lvble = lvble;
201
226
  //# sourceMappingURL=lvble.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lvble.js","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lvble.js","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"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"}
@@ -32,14 +32,10 @@ declare enum EventType {
32
32
  export interface InitOptions {
33
33
  environment: Environment;
34
34
  token: string;
35
+ onEvent: (eventType: string, data: any) => void;
35
36
  }
36
37
  export interface OpenOptions {
37
38
  mode?: Mode;
38
- onEvent: (eventType: string, data: any) => void;
39
- }
40
- export interface CreateWidgetOptions extends OpenOptions {
41
- mode?: Extract<Mode, "onboarding" | "repay">;
42
- onEvent: (eventType: string, data: any) => void;
43
39
  }
44
40
  declare class LvbleWidget extends HTMLElement {
45
41
  _typeToEvent: {
@@ -50,8 +46,6 @@ declare class LvbleWidget extends HTMLElement {
50
46
  };
51
47
  _iframe?: HTMLIFrameElement;
52
48
  constructor();
53
- get mode(): Mode;
54
- set mode(val: Mode | undefined);
55
49
  get environment(): Environment;
56
50
  set environment(val: Environment);
57
51
  get token(): string;
@@ -63,14 +57,12 @@ declare const lvble: (initOptions: InitOptions) => {
63
57
  /**
64
58
  * This function creates a widget that can be embedded in your website.
65
59
  *
66
- * @param createOptions The options for creating the widget. See CreateWidgetOptions for more information.
67
- * @returns The widget.
60
+ * @returns A lvble widget. Note that it detects mode automagically.
68
61
  */
69
- createWidget: (createOptions: CreateWidgetOptions) => LvbleWidget;
62
+ createWidget: () => LvbleWidget;
70
63
  /**
71
- * This function opens a popup with the relevant mode.
72
- * @param openOptions The options for opening the widget. See OpenOptions for more information.
73
- * @returns undefined.
64
+ * This function opens a modal with the relevant mode.
65
+ * @param openOptions The options for opening the modal. See `OpenOptions` for more information.
74
66
  */
75
67
  open: (openOptions: OpenOptions) => void;
76
68
  };
@@ -79,14 +71,12 @@ export declare const Lvble: (initOptions: InitOptions) => {
79
71
  /**
80
72
  * This function creates a widget that can be embedded in your website.
81
73
  *
82
- * @param createOptions The options for creating the widget. See CreateWidgetOptions for more information.
83
- * @returns The widget.
74
+ * @returns A lvble widget. Note that it detects mode automagically.
84
75
  */
85
- createWidget: (createOptions: CreateWidgetOptions) => LvbleWidget;
76
+ createWidget: () => LvbleWidget;
86
77
  /**
87
- * This function opens a popup with the relevant mode.
88
- * @param openOptions The options for opening the widget. See OpenOptions for more information.
89
- * @returns undefined.
78
+ * This function opens a modal with the relevant mode.
79
+ * @param openOptions The options for opening the modal. See `OpenOptions` for more information.
90
80
  */
91
81
  open: (openOptions: OpenOptions) => void;
92
82
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lvble.d.ts","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,GAAG,gBAAgB;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;CAC1B;AAeD,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,cAAc,GACtB,SAAS,GACT;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACN,MAAM,MAAM,SAAS,GACjB,SAAS,GACT;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACN,MAAM,MAAM,SAAS,GACjB,SAAS,GACT;IACE,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/D,aAAK,SAAS;IACZ,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;CAC5B;AASD,MAAM,WAAW,WAAW;IAE1B,WAAW,EAAE,WAAW,CAAC;IAEzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC;IAE7C,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CACjD;AAED,cAAM,WAAY,SAAQ,WAAW;IACnC,YAAY;;;;;MAKV;IACF,OAAO,CAAC,EAAE,iBAAiB,CAAC;;IAO5B,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,SAAS,EAM7B;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,WAAW,CAAC,GAAG,EAJA,WAIA,EAMlB;IAED,IAAI,KAAK,IAIM,MAAM,CAFpB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAMpB;IAED,iBAAiB;IAiBjB,oBAAoB;CAGrB;AAgBD,QAAA,MAAM,KAAK,gBAAiB,WAAW;IAEnC;;;;;OAKG;kCAE2B,mBAAmB;IAoCjD;;;;OAIG;wBACiB,WAAW;CA6DlC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEjD,eAAO,MAAM,KAAK,gBAnHU,WAAW;IAEnC;;;;;OAKG;kCAE2B,mBAAmB;IAoCjD;;;;OAIG;wBACiB,WAAW;CAiET,CAAC"}
1
+ {"version":3,"file":"lvble.d.ts","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,GAAG,gBAAgB;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;CAC1B;AAeD,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,cAAc,GACtB,SAAS,GACT;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACN,MAAM,MAAM,SAAS,GACjB,SAAS,GACT;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACN,MAAM,MAAM,SAAS,GACjB,SAAS,GACT;IACE,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAGN,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/D,aAAK,SAAS;IACZ,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;CAC5B;AASD,MAAM,WAAW,WAAW;IAE1B,WAAW,EAAE,WAAW,CAAC;IAEzB,KAAK,EAAE,MAAM,CAAC;IAEd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,cAAM,WAAY,SAAQ,WAAW;IACnC,YAAY;;;;;MAKV;IACF,OAAO,CAAC,EAAE,iBAAiB,CAAC;;IAO5B,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,WAAW,CAAC,GAAG,EAJA,WAIA,EAMlB;IAED,IAAI,KAAK,IAIM,MAAM,CAFpB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAMpB;IAED,iBAAiB;IAiBjB,oBAAoB;CAGrB;AAyCD,QAAA,MAAM,KAAK,gBAAiB,WAAW;IA+BnC;;;;OAIG;;IAuCH;;;OAGG;wBACiB,WAAW;CAyDlC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEjD,eAAO,MAAM,KAAK,gBA3IU,WAAW;IA+BnC;;;;OAIG;;IAuCH;;;OAGG;wBACiB,WAAW;CA6DT,CAAC"}
@@ -1,4 +1,4 @@
1
- import mixpanel from 'mixpanel-browser';
1
+ import mixpanel from "mixpanel-browser";
2
2
  export var Environment;
3
3
  (function (Environment) {
4
4
  Environment["Local"] = "local";
@@ -13,7 +13,7 @@ const envToBaseUrlMapWidget = {
13
13
  [Environment.Production]: "https://widget.pms.production.nowlvble.com",
14
14
  };
15
15
  const envToBaseUrlMapExperience = {
16
- [Environment.Local]: "http://localhost:3000",
16
+ [Environment.Local]: "http://localhost:3001",
17
17
  [Environment.Dev]: "https://experience.pms.development.nowlvble.com",
18
18
  [Environment.Sandbox]: "https://experience.pms.sandbox.nowlvble.com",
19
19
  [Environment.Production]: "https://experience.pms.production.nowlvble.com",
@@ -53,17 +53,6 @@ class LvbleWidget extends HTMLElement {
53
53
  });
54
54
  this.attachShadow({ mode: "open" });
55
55
  }
56
- get mode() {
57
- return this.getAttribute("mode");
58
- }
59
- set mode(val) {
60
- if (val) {
61
- this.setAttribute("mode", val);
62
- }
63
- else {
64
- this.removeAttribute("mode");
65
- }
66
- }
67
56
  get environment() {
68
57
  return this.getAttribute("environment");
69
58
  }
@@ -105,94 +94,130 @@ class LvbleWidget extends HTMLElement {
105
94
  }
106
95
  }
107
96
  customElements.define("lvble-widget", LvbleWidget);
108
- const modeWidgetMap = {
109
- onboarding: customElements.get("lvble-widget"),
110
- repay: customElements.get("lvble-widget"),
111
- };
112
- let _popup;
113
97
  let eventListenerLvbleAdded = false;
114
98
  let eventListenerOpenAdded = false;
99
+ const createModal = () => {
100
+ const modalIframe = document.createElement("iframe");
101
+ const w = 360;
102
+ const h = 95;
103
+ const t = `calc(50vh + 10px)`;
104
+ const l = `50vw`;
105
+ modalIframe.style.position = "absolute";
106
+ modalIframe.style.top = t;
107
+ modalIframe.style.left = l;
108
+ modalIframe.style.transform = `translate(-50%, -50%)`;
109
+ modalIframe.style.width = `min(95vw, ${w}px)`;
110
+ modalIframe.style.height = `min(${h}vh, 750px)`;
111
+ modalIframe.style.backgroundColor = "white";
112
+ modalIframe.style.borderRadius = "10px";
113
+ modalIframe.style.borderStyle = "solid";
114
+ modalIframe.style.borderColor = "transparent";
115
+ modalIframe.style.borderWidth = "1px";
116
+ // modalIframe.style.padding = "1.5rem";
117
+ const modalBackground = document.createElement("div");
118
+ modalBackground.style.position = "fixed";
119
+ modalBackground.style.top = "0";
120
+ modalBackground.style.left = "0";
121
+ modalBackground.style.height = "100%";
122
+ modalBackground.style.width = "100%";
123
+ modalBackground.style.zIndex = "100";
124
+ modalBackground.style.backgroundColor = "rgba(0, 0, 0, 0.5)";
125
+ return { modalBackground, modalIframe };
126
+ };
115
127
  const lvble = (initOptions) => {
116
- return {
128
+ /**
129
+ * Note: you can only register for onEvent once.
130
+ */
131
+ if (!initOptions.onEvent) {
132
+ throw new Error("onEvent callback is required");
133
+ }
134
+ if (!initOptions.token) {
135
+ throw new Error("token is required");
136
+ }
137
+ if (!initOptions.environment) {
138
+ throw new Error("environment is required");
139
+ }
140
+ const modeUrlMap = {
141
+ onboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
142
+ offboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
143
+ split: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
144
+ repay: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
145
+ };
146
+ const { modalBackground, modalIframe } = createModal();
147
+ const l = {
117
148
  /**
118
149
  * This function creates a widget that can be embedded in your website.
119
150
  *
120
- * @param createOptions The options for creating the widget. See CreateWidgetOptions for more information.
121
- * @returns The widget.
151
+ * @returns A lvble widget. Note that it detects mode automagically.
122
152
  */
123
- // TODO: Add support for no mode
124
- createWidget: (createOptions) => {
153
+ createWidget: () => {
125
154
  const widget = new LvbleWidget();
126
- // (
127
- // createOptions.mode
128
- // ? new modeWidgetMap[createOptions.mode]!()
129
- // : new (customElements.get(
130
- // "lvble-widget"
131
- // ) as CustomElementConstructor)()
132
- // ) as LvbleWidget;
133
155
  widget.environment = initOptions.environment;
134
156
  widget.token = initOptions.token;
135
- widget.mode = createOptions.mode;
157
+ modalBackground.appendChild(modalIframe);
136
158
  const messageListener = (message) => {
137
159
  if (message.origin != envToBaseUrlMapWidget[initOptions.environment]) {
138
160
  console.debug(`Received message from unknown origin: ${message.origin}`);
139
161
  return;
140
162
  }
141
- const data = message.data;
142
- mixpanel.track('BEFORE_INVOKE_ON_EVENT', data.data);
143
- createOptions.onEvent(data.eventType, data.data);
144
- mixpanel.track('AFTER_INVOKE_ON_EVENT', data.data);
163
+ const eventData = message.data;
164
+ if (eventData.eventType === "OPEN_EXPERIENCE_REQUEST") {
165
+ modalIframe.src = `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`;
166
+ const openOptions = {
167
+ mode: "onboarding", // Replace with the desired mode
168
+ };
169
+ l.open(openOptions);
170
+ }
145
171
  };
146
172
  if (!eventListenerLvbleAdded) {
147
173
  window.addEventListener("message", messageListener);
148
174
  eventListenerLvbleAdded = true;
149
- mixpanel.init('9ad1530a57a977ab9d4005e2ba11ab4a', { debug: true });
175
+ mixpanel.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
150
176
  }
151
177
  return widget;
152
178
  },
153
179
  /**
154
- * This function opens a popup with the relevant mode.
155
- * @param openOptions The options for opening the widget. See OpenOptions for more information.
156
- * @returns undefined.
180
+ * This function opens a modal with the relevant mode.
181
+ * @param openOptions The options for opening the modal. See `OpenOptions` for more information.
157
182
  */
158
183
  open: (openOptions) => {
159
- const modeUrlMap = {
160
- onboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
161
- offboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
162
- split: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
163
- repay: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`,
164
- };
165
- const modeUrl = openOptions.mode ?
166
- modeUrlMap[openOptions.mode] :
167
- `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`;
168
- const w = 450;
169
- const h = 800;
170
- const l = screen.width / 2 - w / 2;
171
- const t = screen.height / 2 - h / 2;
172
- _popup = window.open(modeUrl, "LvblePopup", "width=" + w + ",height=" + h + ",location=no,left=" + l + ",top=" + t);
184
+ if (!openOptions.mode) {
185
+ throw new Error("mode is required");
186
+ }
187
+ const modeUrl = openOptions.mode
188
+ ? modeUrlMap[openOptions.mode]
189
+ : `${envToBaseUrlMapExperience[initOptions.environment]}?token=${initOptions.token}`;
190
+ modalIframe.src = modeUrl;
191
+ modalBackground.appendChild(modalIframe);
192
+ document.body.appendChild(modalBackground);
173
193
  const messageListener = (message) => {
174
194
  if (message.origin != envToBaseUrlMapExperience[initOptions.environment]) {
175
- console.debug(`Received message from unknown origin: ${message.origin}`);
195
+ console.debug(`Received message from unknown origin: ${message.origin} Expecting only ${envToBaseUrlMapExperience[initOptions.environment]}`);
176
196
  return;
177
197
  }
178
198
  const eventData = message.data;
199
+ if (eventData.eventType === "CLOSE_EXPERIENCE_REQUEST") {
200
+ document.body.removeChild(modalBackground);
201
+ return;
202
+ }
203
+ // TODO: Consider using websocket in iframes instead of posting messages to them.
179
204
  const iframes = document.querySelectorAll("lvble-widget");
180
- message = JSON.parse(JSON.stringify(message));
181
205
  iframes.forEach((w) => {
182
206
  var _a, _b;
183
207
  (_b = ((_a = w.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector("iframe")).contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(eventData, "*");
184
208
  });
185
- mixpanel.track('BEFORE_INVOKE_ON_EVENT', eventData.data);
186
- openOptions.onEvent(eventData.eventType, eventData.data);
187
- mixpanel.track('AFTER_INVOKE_ON_EVENT', eventData.data);
209
+ mixpanel.track("BEFORE_INVOKE_ON_EVENT", eventData);
210
+ initOptions.onEvent(eventData.eventType, eventData.data);
211
+ mixpanel.track("AFTER_INVOKE_ON_EVENT", eventData);
188
212
  };
189
213
  if (!eventListenerOpenAdded) {
190
214
  window.addEventListener("message", messageListener);
191
215
  eventListenerOpenAdded = true;
192
- mixpanel.init('9ad1530a57a977ab9d4005e2ba11ab4a', { debug: true });
216
+ mixpanel.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
193
217
  }
194
218
  },
195
219
  };
220
+ return l;
196
221
  };
197
222
  export const Lvble = lvble;
198
223
  //# sourceMappingURL=lvble.js.map