@myop/sdk 0.1.46 → 0.2.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 (41) hide show
  1. package/dist/bundled-declarations.d.ts +61 -0
  2. package/dist/cjs/{_IframeSDK.b1e6c181.js → _IframeSDK.561df75d.js} +31 -1
  3. package/dist/cjs/_IframeSDK.561df75d.js.map +7 -0
  4. package/dist/cjs/_IframeSDK.66415fd2.min.js +1 -0
  5. package/dist/cjs/_MyopHelpers.70503082.js +2810 -0
  6. package/dist/cjs/_MyopHelpers.70503082.js.map +7 -0
  7. package/dist/cjs/_MyopHelpers.7c81005e.min.js +1 -0
  8. package/dist/cjs/_WebComponentSDK.dabe5cd1.min.js +1 -0
  9. package/dist/cjs/{_WebComponentSDK.bf4ad0dd.js → _WebComponentSDK.fd6435d3.js} +31 -1
  10. package/dist/cjs/_WebComponentSDK.fd6435d3.js.map +7 -0
  11. package/dist/cjs/_hostSDK.9b7c3010.min.js +1 -0
  12. package/dist/cjs/{_hostSDK.7c59d1ae.js → _hostSDK.b1330e44.js} +31 -1
  13. package/dist/cjs/_hostSDK.b1330e44.js.map +7 -0
  14. package/dist/cjs/myop_sdk.js +14 -14
  15. package/dist/cjs/myop_sdk.js.map +1 -1
  16. package/dist/cjs/myop_sdk.min.js +1 -1
  17. package/dist/module/Iframe/index.js +34 -2
  18. package/dist/module/Iframe/index.js.map +3 -3
  19. package/dist/module/SDK.js +123 -4
  20. package/dist/module/SDK.js.map +3 -3
  21. package/dist/module/common/index.d.ts +46 -0
  22. package/dist/module/common/index.js +1 -1
  23. package/dist/module/common/index.js.map +2 -2
  24. package/dist/module/helpers/EnableV2.d.ts +12 -0
  25. package/dist/module/helpers/index.d.ts +1 -0
  26. package/dist/module/helpers/index.js +2520 -4
  27. package/dist/module/helpers/index.js.map +4 -4
  28. package/dist/module/host/index.js +34 -2
  29. package/dist/module/host/index.js.map +3 -3
  30. package/dist/module/webcomponent/index.js +34 -2
  31. package/dist/module/webcomponent/index.js.map +3 -3
  32. package/package.json +1 -1
  33. package/dist/cjs/_IframeSDK.71663203.min.js +0 -1
  34. package/dist/cjs/_IframeSDK.b1e6c181.js.map +0 -7
  35. package/dist/cjs/_MyopHelpers.98cae3f9.js +0 -417
  36. package/dist/cjs/_MyopHelpers.98cae3f9.js.map +0 -7
  37. package/dist/cjs/_MyopHelpers.f3e207e0.min.js +0 -1
  38. package/dist/cjs/_WebComponentSDK.3474ea7a.min.js +0 -1
  39. package/dist/cjs/_WebComponentSDK.bf4ad0dd.js.map +0 -7
  40. package/dist/cjs/_hostSDK.7c59d1ae.js.map +0 -7
  41. package/dist/cjs/_hostSDK.8b543e61.min.js +0 -1
@@ -0,0 +1,2810 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __export = (target, all) => {
21
+ for (var name in all)
22
+ __defProp(target, name, { get: all[name], enumerable: true });
23
+ };
24
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
25
+
26
+ // src/dynamicImport/defineDynamicImport.ts
27
+ var __federation__ = "__federation__";
28
+ var onLoadKey = "onLoad";
29
+ var defineDynamicImport = (globalName, module) => {
30
+ if (window[__federation__] && window[__federation__][globalName] && window[__federation__][globalName][onLoadKey]) {
31
+ window[__federation__][globalName][onLoadKey]({ [globalName]: module });
32
+ } else {
33
+ }
34
+ };
35
+
36
+ // src/helpers/index.ts
37
+ var helpers_exports = {};
38
+ __export(helpers_exports, {
39
+ CloudRepository: () => CloudRepository,
40
+ ComponentConfig: () => ComponentConfig,
41
+ SkinConfig: () => SkinConfig,
42
+ addClass: () => addClass,
43
+ applyStylesheet: () => applyStylesheet,
44
+ applyStylesheetLink: () => applyStylesheetLink,
45
+ changeSkinUrlByTokenizer: () => changeSkinUrlByTokenizer,
46
+ createIframeSkinByTokenizer: () => createIframeSkinByTokenizer,
47
+ enableV2: () => enableV2,
48
+ exec: () => exec,
49
+ removeClass: () => removeClass,
50
+ v2_CloudRepository: () => v2_CloudRepository
51
+ });
52
+
53
+ // src/utils/uuid.ts
54
+ var uuidv4 = () => {
55
+ return "10000000-1000-4000-8000-100000000000".replace(
56
+ /[018]/g,
57
+ (c) => (+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
58
+ );
59
+ };
60
+ var bytesToUuid = (bytes) => {
61
+ const hex = [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
62
+ return [
63
+ hex.slice(0, 8),
64
+ hex.slice(8, 12),
65
+ hex.slice(12, 16),
66
+ hex.slice(16, 20),
67
+ hex.slice(20)
68
+ ].join("-");
69
+ };
70
+ var base64UrlDecode = (str) => {
71
+ let base64 = str.replace(/-/g, "+").replace(/_/g, "/");
72
+ while (base64.length % 4) base64 += "=";
73
+ const binary = atob(base64);
74
+ return Uint8Array.from(binary, (char) => char.charCodeAt(0));
75
+ };
76
+ var decompressUUIDs = (encoded) => {
77
+ const bytes = base64UrlDecode(encoded);
78
+ if (bytes.length % 16 !== 0) throw new Error("Invalid input length");
79
+ const uuids = [];
80
+ for (let i = 0; i < bytes.length; i += 16) {
81
+ uuids.push(bytesToUuid(bytes.slice(i, i + 16)));
82
+ }
83
+ return uuids;
84
+ };
85
+
86
+ // src/utils/utils.ts
87
+ var wait = (ms) => {
88
+ return new Promise((resolve) => setTimeout(resolve, ms));
89
+ };
90
+
91
+ // src/messages/index.ts
92
+ var messages_exports = {};
93
+ __export(messages_exports, {
94
+ AddEventListenerMessage: () => AddEventListenerMessage,
95
+ BaseMyopMessage: () => BaseMyopMessage,
96
+ BindClickMessage: () => BindClickMessage,
97
+ ChangeTextMessage: () => ChangeTextMessage,
98
+ CleanupMessage: () => CleanupMessage,
99
+ CleanupReplayMessage: () => CleanupReplayMessage,
100
+ ClickReplayMessage: () => ClickReplayMessage,
101
+ CreateRefComponentMessage: () => CreateRefComponentMessage,
102
+ CustomRefMessage: () => CustomRefMessage,
103
+ DetectMyopRefsMessage: () => DetectMyopRefsMessage,
104
+ DetectedMyopRefsMessage: () => DetectedMyopRefsMessage,
105
+ DisposeMessage: () => DisposeMessage,
106
+ ElementValueReplayMessage: () => ElementValueReplayMessage,
107
+ EnvelopedMessage: () => EnvelopedMessage,
108
+ EventListenerCallbackMessage: () => EventListenerCallbackMessage,
109
+ ExecuteComponentMethod: () => ExecuteComponentMethod,
110
+ ExecuteScriptMessage: () => ExecuteScriptMessage,
111
+ ExecuteScriptReplyMessage: () => ExecuteScriptReplyMessage,
112
+ GetAttributeMessage: () => GetAttributeMessage,
113
+ GetAttributeReplayMessage: () => GetAttributeReplayMessage,
114
+ GetElementValueMessage: () => GetElementValueMessage,
115
+ InitMessage: () => InitMessage,
116
+ InitRequest: () => InitRequest,
117
+ InitResponse: () => InitResponse,
118
+ MessageDirection: () => MessageDirection,
119
+ MutationObserverMessage: () => MutationObserverMessage,
120
+ MyopBindMessage: () => MyopBindMessage,
121
+ MyopBindReplayMessage: () => MyopBindReplayMessage,
122
+ MyopElementMessage: () => MyopElementMessage,
123
+ Ref: () => Ref,
124
+ RefComponentCreatedMessage: () => RefComponentCreatedMessage,
125
+ ResizeObserverMessage: () => ResizeObserverMessage,
126
+ SetAttributeMessage: () => SetAttributeMessage,
127
+ SetInnerHtml: () => SetInnerHtml,
128
+ SetMutationObserverMessage: () => SetMutationObserverMessage,
129
+ SetResizeObserverMessage: () => SetResizeObserverMessage,
130
+ stripFunction: () => stripFunction
131
+ });
132
+
133
+ // src/messages/BaseMessage.ts
134
+ var MessageDirection = class {
135
+ };
136
+ __publicField(MessageDirection, "down", "down");
137
+ __publicField(MessageDirection, "up", "up");
138
+ var BaseMyopMessage = class {
139
+ constructor() {
140
+ __publicField(this, "id", uuidv4());
141
+ __publicField(this, "myop", true);
142
+ __publicField(this, "content");
143
+ // TODO : cant be optional
144
+ __publicField(this, "source");
145
+ __publicField(this, "destination");
146
+ __publicField(this, "route");
147
+ __publicField(this, "ref");
148
+ __publicField(this, "direction");
149
+ __publicField(this, "cleanable", false);
150
+ }
151
+ static create(...args) {
152
+ return new this(...args);
153
+ }
154
+ isTypeof(msg) {
155
+ return msg.messageType === this.messageType;
156
+ }
157
+ };
158
+ var MyopElementMessage = class extends BaseMyopMessage {
159
+ constructor(ref) {
160
+ super();
161
+ this.ref = ref;
162
+ }
163
+ };
164
+ var MyopBindReplayMessage = class extends BaseMyopMessage {
165
+ constructor(replayToHandler) {
166
+ super();
167
+ this.replayToHandler = replayToHandler;
168
+ }
169
+ };
170
+ var MyopBindMessage = class extends BaseMyopMessage {
171
+ constructor(handler) {
172
+ super();
173
+ this.handler = handler;
174
+ __publicField(this, "handlerUniqueId", uuidv4());
175
+ }
176
+ };
177
+ var Ref = class _Ref {
178
+ constructor(refConfig, component) {
179
+ this.refConfig = refConfig;
180
+ this.component = component;
181
+ __publicField(this, "myop", true);
182
+ __publicField(this, "__nonProxied");
183
+ this.__nonProxied = __spreadProps(__spreadValues({}, this), {
184
+ component: null
185
+ // in order to be serializable
186
+ });
187
+ }
188
+ static create(selector, refConfig, component) {
189
+ let _refConfig = refConfig;
190
+ if (!_refConfig) {
191
+ _refConfig = {
192
+ id: "",
193
+ name: "",
194
+ description: "",
195
+ selectorType: "id-attribute",
196
+ selector,
197
+ behavior: {
198
+ type: "code"
199
+ }
200
+ };
201
+ }
202
+ return new _Ref(_refConfig, component);
203
+ }
204
+ };
205
+
206
+ // src/messages/BindClickMessage.ts
207
+ var ReplayMessageKey = "ClickReplayMessage";
208
+ var BindClickMessage = class extends MyopBindMessage {
209
+ constructor(ref, handler) {
210
+ super(handler);
211
+ this.ref = ref;
212
+ __publicField(this, "replyMessageKey", ReplayMessageKey);
213
+ __publicField(this, "messageType", "BindClickMessage");
214
+ __publicField(this, "cleanable", true);
215
+ }
216
+ };
217
+ var ClickReplayMessage = class extends MyopBindReplayMessage {
218
+ constructor() {
219
+ super(...arguments);
220
+ __publicField(this, "messageType", ReplayMessageKey);
221
+ }
222
+ };
223
+
224
+ // src/messages/ChangeTextMessage.ts
225
+ var ChangeTextMessage = class extends BaseMyopMessage {
226
+ constructor(ref, text) {
227
+ super();
228
+ this.ref = ref;
229
+ __publicField(this, "messageType", "ChangeTextMessage");
230
+ this.content = text;
231
+ }
232
+ };
233
+
234
+ // src/messages/ExecuteScriptMessage.ts
235
+ var ReplayMessageKey2 = "ExecuteScriptReplyMessage";
236
+ var functionBodyRegex = /(?:function\s*\w*\s*\([^)]*\)\s*\{([\s\S]*?)\}|(\([^)]*\)\s*=>\s*\{([\s\S]*?)\}))\s*$/;
237
+ var expressionBodyRegex = /\(\s*[^)]+\s*\)\s*=>\s*(.+)/;
238
+ var stripFunction = (content) => {
239
+ let match = content.match(functionBodyRegex);
240
+ if (match) {
241
+ return match[1] || match[3];
242
+ } else {
243
+ let match2 = content.match(expressionBodyRegex);
244
+ if (match2)
245
+ return match2[1].trim();
246
+ }
247
+ };
248
+ var ExecuteScriptMessage = class extends MyopBindMessage {
249
+ constructor(script, handler = () => {
250
+ }, scriptInputs2) {
251
+ super(handler);
252
+ this.scriptInputs = scriptInputs2;
253
+ __publicField(this, "replyMessageKey", ReplayMessageKey2);
254
+ __publicField(this, "messageType", "ExecuteScriptMessage");
255
+ __publicField(this, "script", "");
256
+ this.script = script.toString();
257
+ this.content = script.toString();
258
+ this.content = stripFunction(this.content);
259
+ }
260
+ };
261
+ __publicField(ExecuteScriptMessage, "replierKey", "send");
262
+ __publicField(ExecuteScriptMessage, "completeStreamKey", "completeStream");
263
+ var ExecuteScriptReplyMessage = class extends MyopBindReplayMessage {
264
+ constructor(replayToHandler, content) {
265
+ super(replayToHandler);
266
+ this.replayToHandler = replayToHandler;
267
+ this.content = content;
268
+ __publicField(this, "messageType", ReplayMessageKey2);
269
+ }
270
+ };
271
+
272
+ // src/messages/CustomRefMessage.ts
273
+ var CustomRefMessage = class extends ExecuteScriptMessage {
274
+ constructor(script, scriptInputs2, handler = () => {
275
+ }) {
276
+ super(({ rootRef, elementId, _script, __scriptInputs }) => {
277
+ const refs = (rootRef.shadowRoot || rootRef.container).querySelectorAll("[".concat("myop-id", "='").concat(elementId, "']"));
278
+ if (refs.length) {
279
+ __scriptInputs.ref = refs[0];
280
+ const dynamicFunction = new Function("return (".concat(_script, ")(...arguments)"));
281
+ return dynamicFunction(__scriptInputs);
282
+ }
283
+ return null;
284
+ }, handler);
285
+ this.scriptInputs = scriptInputs2;
286
+ this.scriptInputs = __spreadProps(__spreadValues({}, scriptInputs2), {
287
+ //_script: stripFunction(script.toString()),
288
+ _script: script.toString()
289
+ });
290
+ }
291
+ };
292
+
293
+ // src/messages/AddEventListenerMessage.ts
294
+ var ReplayMessageKey3 = "EventListenerCallbackMessage";
295
+ var AddEventListenerMessage = class extends MyopBindMessage {
296
+ // {} // empty
297
+ constructor(ref, type, handler) {
298
+ super(handler);
299
+ this.ref = ref;
300
+ this.type = type;
301
+ this.handler = handler;
302
+ __publicField(this, "replyMessageKey", ReplayMessageKey3);
303
+ __publicField(this, "messageType", "AddEventListenerMessage");
304
+ __publicField(this, "cleanable", true);
305
+ __publicField(this, "serializableSkeleton", false);
306
+ }
307
+ withSerializableSkeleton(serializableSkeleton) {
308
+ this.serializableSkeleton = serializableSkeleton;
309
+ return this;
310
+ }
311
+ };
312
+ var EventListenerCallbackMessage = class extends MyopBindReplayMessage {
313
+ constructor(replayToHandler, e) {
314
+ super(replayToHandler);
315
+ this.replayToHandler = replayToHandler;
316
+ this.e = e;
317
+ __publicField(this, "messageType", ReplayMessageKey3);
318
+ this.content = {
319
+ e
320
+ };
321
+ }
322
+ };
323
+
324
+ // src/messages/SetAttributeMessage.ts
325
+ var SetAttributeMessage = class extends BaseMyopMessage {
326
+ constructor(ref, name, value) {
327
+ super();
328
+ this.ref = ref;
329
+ this.name = name;
330
+ this.value = value;
331
+ __publicField(this, "messageType", "SetAttributeMessage");
332
+ }
333
+ };
334
+
335
+ // src/messages/GetElementValueMessage.ts
336
+ var ReplayMessageKey4 = "ElementValueReplayMessage";
337
+ var GetElementValueMessage = class extends MyopBindMessage {
338
+ constructor(ref, handler) {
339
+ super(handler);
340
+ this.ref = ref;
341
+ __publicField(this, "replyMessageKey", ReplayMessageKey4);
342
+ __publicField(this, "messageType", "GetElementValueMessage");
343
+ }
344
+ };
345
+ var ElementValueReplayMessage = class extends MyopBindReplayMessage {
346
+ constructor(content) {
347
+ super();
348
+ this.content = content;
349
+ __publicField(this, "messageType", ReplayMessageKey4);
350
+ }
351
+ };
352
+
353
+ // src/messages/SetInnerHtml.ts
354
+ var SetInnerHtml = class extends BaseMyopMessage {
355
+ constructor(ref, innerHtml) {
356
+ super();
357
+ this.ref = ref;
358
+ __publicField(this, "messageType", "SetInnerHtml");
359
+ this.content = innerHtml;
360
+ }
361
+ };
362
+
363
+ // src/messages/InitMessage.ts
364
+ var InitMessage = class extends BaseMyopMessage {
365
+ constructor(id) {
366
+ super();
367
+ __publicField(this, "messageType", "InitMessage");
368
+ this.content = { id };
369
+ }
370
+ isTypeof(msg) {
371
+ return msg.messageType === this.messageType;
372
+ }
373
+ };
374
+ var InitResponse = class extends InitMessage {
375
+ constructor() {
376
+ super(...arguments);
377
+ __publicField(this, "messageType", "InitResponse");
378
+ }
379
+ };
380
+ var InitRequest = class extends BaseMyopMessage {
381
+ constructor() {
382
+ super(...arguments);
383
+ __publicField(this, "messageType", "InitRequest");
384
+ }
385
+ };
386
+
387
+ // src/messages/CreateRefComponentMessage.ts
388
+ var ReplayMessageKey5 = "RefComponentCreatedMessage";
389
+ var CreateRefComponentMessage = class extends MyopBindMessage {
390
+ constructor(refConfig, nestedComponentConfig, options, handler) {
391
+ super(handler);
392
+ this.refConfig = refConfig;
393
+ this.nestedComponentConfig = nestedComponentConfig;
394
+ this.options = options;
395
+ __publicField(this, "replyMessageKey", ReplayMessageKey5);
396
+ __publicField(this, "messageType", "CreateRefComponentMessage");
397
+ }
398
+ };
399
+ var RefComponentCreatedMessage = class extends MyopBindReplayMessage {
400
+ constructor(replayToHandler, nestedRefs, failed) {
401
+ super(replayToHandler);
402
+ this.replayToHandler = replayToHandler;
403
+ this.nestedRefs = nestedRefs;
404
+ this.failed = failed;
405
+ __publicField(this, "messageType", ReplayMessageKey5);
406
+ }
407
+ };
408
+
409
+ // src/messages/EnvelopedMessage.ts
410
+ var EnvelopedMessage = class extends BaseMyopMessage {
411
+ constructor(destination, message) {
412
+ super();
413
+ this.destination = destination;
414
+ this.message = message;
415
+ __publicField(this, "messageType", "EnvelopedMessage");
416
+ const innerEnvelopedMessage = message;
417
+ this.route = [destination, ...innerEnvelopedMessage.route ? innerEnvelopedMessage.route : []];
418
+ }
419
+ };
420
+
421
+ // src/messages/DetectMyopRefsMessage.ts
422
+ var ReplayMessageKey6 = "DetectedMyopRefsMessage";
423
+ var DetectMyopRefsMessage = class extends MyopBindMessage {
424
+ constructor() {
425
+ super(...arguments);
426
+ __publicField(this, "messageType", "DetectMyopRefsMessage");
427
+ __publicField(this, "replyMessageKey", ReplayMessageKey6);
428
+ }
429
+ };
430
+ var DetectedMyopRefsMessage = class extends MyopBindReplayMessage {
431
+ constructor(replayToHandler, myopElementRefs) {
432
+ super(replayToHandler);
433
+ this.replayToHandler = replayToHandler;
434
+ __publicField(this, "messageType", ReplayMessageKey6);
435
+ this.content = myopElementRefs;
436
+ }
437
+ isTypeof(msg) {
438
+ return msg.messageType === this.messageType;
439
+ }
440
+ };
441
+
442
+ // src/messages/GetAttributeMessage.ts
443
+ var ReplayMessageKey7 = "GetAttributeReplayMessage";
444
+ var GetAttributeMessage = class extends MyopBindMessage {
445
+ constructor(ref, name, handler) {
446
+ super(handler);
447
+ this.ref = ref;
448
+ this.name = name;
449
+ __publicField(this, "replyMessageKey", ReplayMessageKey7);
450
+ __publicField(this, "messageType", "GetAttributeMessage");
451
+ }
452
+ };
453
+ var GetAttributeReplayMessage = class extends MyopBindReplayMessage {
454
+ constructor(content) {
455
+ super();
456
+ this.content = content;
457
+ __publicField(this, "messageType", ReplayMessageKey7);
458
+ }
459
+ };
460
+
461
+ // src/messages/componentMessages/ExecuteComponentMethod.ts
462
+ var ExecuteComponentMethod = class extends BaseMyopMessage {
463
+ constructor(method) {
464
+ super();
465
+ this.method = method;
466
+ __publicField(this, "messageType", "ExecuteComponentMethod");
467
+ }
468
+ };
469
+
470
+ // src/messages/componentMessages/SetMutationObserverMessage.ts
471
+ var SetMutationObserverMessage = class extends BaseMyopMessage {
472
+ constructor() {
473
+ super(...arguments);
474
+ __publicField(this, "messageType", "SetMutationObserverMessage");
475
+ }
476
+ };
477
+ var MutationObserverMessage = class extends BaseMyopMessage {
478
+ constructor() {
479
+ super(...arguments);
480
+ __publicField(this, "messageType", "MutationObserverMessage");
481
+ }
482
+ };
483
+
484
+ // src/messages/CleanupMessage.ts
485
+ var ReplayMessageKey8 = "CleanupReplayMessage";
486
+ var CleanupMessage = class extends MyopBindMessage {
487
+ constructor(cleanupForMessageId, handler) {
488
+ super(handler);
489
+ this.cleanupForMessageId = cleanupForMessageId;
490
+ __publicField(this, "replyMessageKey", ReplayMessageKey8);
491
+ __publicField(this, "messageType", "CleanupMessage");
492
+ }
493
+ };
494
+ var CleanupReplayMessage = class extends MyopBindReplayMessage {
495
+ constructor(customCleanup) {
496
+ super();
497
+ this.customCleanup = customCleanup;
498
+ __publicField(this, "messageType", ReplayMessageKey8);
499
+ }
500
+ };
501
+
502
+ // src/messages/DisposeMessage.ts
503
+ var DisposeMessage = class extends BaseMyopMessage {
504
+ constructor() {
505
+ super(...arguments);
506
+ __publicField(this, "messageType", "DisposeMessage");
507
+ }
508
+ };
509
+
510
+ // src/messages/componentMessages/SetResizeObserverMessage.ts
511
+ var SetResizeObserverMessage = class extends BaseMyopMessage {
512
+ constructor() {
513
+ super(...arguments);
514
+ __publicField(this, "cleanable", true);
515
+ __publicField(this, "messageType", "SetResizeObserverMessage");
516
+ }
517
+ };
518
+ var ResizeObserverMessage = class extends BaseMyopMessage {
519
+ constructor() {
520
+ super(...arguments);
521
+ __publicField(this, "messageType", "ResizeObserverMessage");
522
+ }
523
+ };
524
+
525
+ // src/helpers/applyStylesheet.ts
526
+ var applyStylesheet = (component, stylesheet, css) => {
527
+ const tagId = "myop-css-".concat(uuidv4());
528
+ component.send(new ExecuteScriptMessage(({ rootRef, _stylesheet, _tagId, _css }) => {
529
+ const styleTag = document.createElement("style");
530
+ styleTag.type = "text/css";
531
+ let cssString = _css;
532
+ for (const selector in _stylesheet) {
533
+ cssString += "".concat(selector, " { ");
534
+ const properties = _stylesheet[selector];
535
+ for (const property in properties) {
536
+ cssString += "".concat(property, ": ").concat(properties[property], "; ");
537
+ }
538
+ cssString += "} ";
539
+ }
540
+ styleTag.appendChild(document.createTextNode(cssString));
541
+ styleTag.id = _tagId;
542
+ (rootRef.shadowRoot || rootRef.container).appendChild(styleTag);
543
+ }, () => {
544
+ }, {
545
+ _stylesheet: stylesheet,
546
+ _css: css ? css : "",
547
+ _tagId: tagId
548
+ }));
549
+ return () => {
550
+ component.send(new ExecuteScriptMessage(({ rootRef, _tagId }) => {
551
+ const element = (rootRef.shadowRoot || document).getElementById(_tagId);
552
+ if (element) {
553
+ element.remove();
554
+ }
555
+ }, () => {
556
+ }, {
557
+ _tagId: tagId
558
+ }));
559
+ };
560
+ };
561
+ var applyStylesheetLink = (component, link) => {
562
+ const tagId = "myop-css-".concat(uuidv4());
563
+ component.send(new ExecuteScriptMessage(({ rootRef, _tagId, _link }) => {
564
+ const linkElement = document.createElement("link");
565
+ linkElement.id = _tagId;
566
+ linkElement.rel = "stylesheet";
567
+ linkElement.href = _link;
568
+ document.head.appendChild(linkElement);
569
+ (rootRef.shadowRoot || rootRef.container).appendChild(linkElement);
570
+ }, () => {
571
+ }, {
572
+ _link: link,
573
+ _tagId: tagId
574
+ }));
575
+ return () => {
576
+ component.send(new ExecuteScriptMessage(({ rootRef, _tagId }) => {
577
+ const element = (rootRef.shadowRoot || document).getElementById(_tagId);
578
+ if (element) {
579
+ element.remove();
580
+ }
581
+ }, () => {
582
+ }, {
583
+ _tagId: tagId
584
+ }));
585
+ };
586
+ };
587
+
588
+ // src/helpers/iframeSkinUrlTokenizer.ts
589
+ var replaceTokens = (input, tokenMap) => {
590
+ const pattern = new RegExp(Object.keys(tokenMap).join("|"), "g");
591
+ return input.replace(pattern, (matched) => {
592
+ return (tokenMap[matched] || matched).toString();
593
+ });
594
+ };
595
+ var createIframeSkinByTokenizer = (selectedSkin, tokenMap) => {
596
+ const typedSkinConfig = selectedSkin.loader;
597
+ if (typedSkinConfig.type !== "IframeLoader") {
598
+ throw new Error('iframeSkinUrlTokenizer received skin with loader type "'.concat(typedSkinConfig.type, '", currently only "IframeLoader" is supported'));
599
+ }
600
+ selectedSkin.loader = __spreadValues({}, selectedSkin.loader);
601
+ selectedSkin.loader.url = replaceTokens(selectedSkin.loader.url, tokenMap);
602
+ return selectedSkin;
603
+ };
604
+ var changeSkinUrlByTokenizer = (tokenMap) => {
605
+ return async (selectedSkin) => {
606
+ return createIframeSkinByTokenizer(selectedSkin, tokenMap);
607
+ };
608
+ };
609
+
610
+ // src/helpers/classList.ts
611
+ var addClass = (component, className, myopId) => {
612
+ component.send(new CustomRefMessage(({ ref, _className }) => {
613
+ ref == null ? void 0 : ref.classList.add(_className);
614
+ }, {
615
+ elementId: myopId,
616
+ _className: className
617
+ }));
618
+ };
619
+ var removeClass = (component, className, myopId) => {
620
+ component.send(new CustomRefMessage(({ ref, _className }) => {
621
+ ref == null ? void 0 : ref.classList.remove(_className);
622
+ }, {
623
+ elementId: myopId,
624
+ _className: className
625
+ }));
626
+ };
627
+
628
+ // src/helpers/configBuilder.ts
629
+ var _SkinConfig = class _SkinConfig {
630
+ constructor() {
631
+ __publicField(this, "_runTimeInstanceId", "runtime-instance-id-" + uuidv4());
632
+ __publicField(this, "_runTimeId", "runtime-id-" + uuidv4());
633
+ __publicField(this, "_runTimeName", "runtime-name-" + uuidv4());
634
+ __publicField(this, "id", this._runTimeId);
635
+ __publicField(this, "name", this._runTimeName);
636
+ __publicField(this, "description", "");
637
+ __publicField(this, "loader", null);
638
+ __publicField(this, "withLoader", (loader) => {
639
+ this.loader = loader;
640
+ return this;
641
+ });
642
+ __publicField(this, "withHTMLLoader", (loader) => {
643
+ loader.type = "HTMLLoader";
644
+ this.loader = loader;
645
+ return this;
646
+ });
647
+ __publicField(this, "build", () => {
648
+ return this;
649
+ });
650
+ }
651
+ };
652
+ __publicField(_SkinConfig, "create", () => {
653
+ return new _SkinConfig();
654
+ });
655
+ var SkinConfig = _SkinConfig;
656
+ var _ComponentConfig = class _ComponentConfig {
657
+ constructor() {
658
+ __publicField(this, "_runTimeInstanceId", "runtime-instance-id-" + uuidv4());
659
+ __publicField(this, "_runTimeId", "runtime-id-" + uuidv4());
660
+ __publicField(this, "_runTimeName", "runtime-name-" + uuidv4());
661
+ __publicField(this, "instance", {
662
+ id: this._runTimeInstanceId,
663
+ componentId: this._runTimeId,
664
+ componentName: this._runTimeName,
665
+ skinSelector: null
666
+ });
667
+ __publicField(this, "name", this._runTimeName);
668
+ __publicField(this, "type", {
669
+ id: this._runTimeId,
670
+ name: this._runTimeName,
671
+ description: "",
672
+ props: [],
673
+ refs: [],
674
+ skins: [],
675
+ defaultSkin: 0
676
+ });
677
+ __publicField(this, "withInstance", (instance) => {
678
+ this.instance = instance;
679
+ return this;
680
+ });
681
+ __publicField(this, "withType", (type) => {
682
+ this.type = type;
683
+ return this;
684
+ });
685
+ __publicField(this, "withName", (name) => {
686
+ this.name = name;
687
+ return this;
688
+ });
689
+ __publicField(this, "withDefaultSkin", (defaultSkin) => {
690
+ this.type.skins.push(defaultSkin);
691
+ this.type.defaultSkin = this.type.skins.length - 1;
692
+ this.instance.skinSelector = {
693
+ type: "Dedicated",
694
+ skin: {
695
+ id: defaultSkin.id
696
+ }
697
+ };
698
+ return this;
699
+ });
700
+ __publicField(this, "withRef", (ref) => {
701
+ this.type.refs.push(ref);
702
+ return this;
703
+ });
704
+ __publicField(this, "withBasicRef", (refSelector) => {
705
+ const newBasicRef = {
706
+ id: "",
707
+ name: refSelector,
708
+ description: "",
709
+ selectorType: "id-attribute",
710
+ selector: refSelector,
711
+ behavior: {
712
+ type: "code"
713
+ }
714
+ };
715
+ this.type.refs.push(newBasicRef);
716
+ return this;
717
+ });
718
+ __publicField(this, "build", () => {
719
+ return JSON.parse(JSON.stringify(this));
720
+ });
721
+ }
722
+ };
723
+ __publicField(_ComponentConfig, "create", () => {
724
+ return new _ComponentConfig();
725
+ });
726
+ var ComponentConfig = _ComponentConfig;
727
+
728
+ // src/helpers/CloudRepository.ts
729
+ var _CloudRepository = class _CloudRepository {
730
+ // private components: Record<string, Promise<IUserFlow>> = {};
731
+ constructor(_baseUrl = "https://cloud.myop.dev") {
732
+ this._baseUrl = _baseUrl;
733
+ __publicField(this, "userFlows", {});
734
+ }
735
+ async fetchComponent(componentId, flowId) {
736
+ if (flowId) {
737
+ const flow = await this.fetchFlow(flowId);
738
+ return flow.components.find((c) => c.type.id === componentId);
739
+ } else {
740
+ const flow = await this.fetchAutoFlow(componentId);
741
+ return flow.components[0];
742
+ }
743
+ }
744
+ async fetchAutoFlow(componentId) {
745
+ if (!this.userFlows[componentId]) {
746
+ this.userFlows[componentId] = new Promise(
747
+ async (resolve, reject) => {
748
+ try {
749
+ const res = await fetch(
750
+ "".concat(this._baseUrl, "/flow?id=").concat(componentId, "&auto=true")
751
+ );
752
+ const json = await res.json();
753
+ resolve(json.item);
754
+ } catch (e) {
755
+ reject(e);
756
+ }
757
+ }
758
+ );
759
+ }
760
+ return await this.userFlows[componentId];
761
+ }
762
+ async fetchFlow(flowId) {
763
+ if (!this.userFlows[flowId]) {
764
+ this.userFlows[flowId] = new Promise(
765
+ async (resolve, reject) => {
766
+ try {
767
+ const res = await fetch(
768
+ "".concat(this._baseUrl, "/flow?id=").concat(flowId, "&resolve=components")
769
+ );
770
+ const json = await res.json();
771
+ resolve(json.item);
772
+ } catch (e) {
773
+ reject(e);
774
+ }
775
+ }
776
+ );
777
+ }
778
+ return await this.userFlows[flowId];
779
+ }
780
+ };
781
+ __publicField(_CloudRepository, "Main", new _CloudRepository());
782
+ var CloudRepository = _CloudRepository;
783
+
784
+ // src/helpers/exec.ts
785
+ var exec = async (getter) => {
786
+ return await getter();
787
+ };
788
+
789
+ // src/common/MyopMessages.ts
790
+ var MyopMessages = {
791
+ //host to component
792
+ "InitRequest": "InitRequest",
793
+ "InitResponse": "InitResponse",
794
+ "InitMessage": "InitMessage",
795
+ "DisposeMessage": "DisposeMessage",
796
+ "ChangeTextMessage": "ChangeTextMessage",
797
+ "BindClickMessage": "BindClickMessage",
798
+ "DetectMyopRefsMessage": "DetectMyopRefsMessage",
799
+ "ExecuteScriptMessage": "ExecuteScriptMessage",
800
+ "AddEventListenerMessage": "AddEventListenerMessage",
801
+ "SetAttributeMessage": "SetAttributeMessage",
802
+ "CreateRefComponentMessage": "CreateRefComponentMessage",
803
+ "EnvelopedMessage": "EnvelopedMessage",
804
+ "GetElementValueMessage": "GetElementValueMessage",
805
+ "GetAttributeMessage": "GetAttributeMessage",
806
+ "SetInnerHtml": "SetInnerHtml",
807
+ //component messages
808
+ "ExecuteComponentMethod": "ExecuteComponentMethod",
809
+ "SetMutationObserverMessage": "SetMutationObserverMessage",
810
+ "SetResizeObserverMessage": "SetResizeObserverMessage",
811
+ "CleanupMessage": "CleanupMessage",
812
+ // external to host :
813
+ In: {
814
+ "DetectedMyopRefsMessage": "DetectedMyopRefsMessage",
815
+ "ClickReplayMessage": "ClickReplayMessage",
816
+ "ExecuteScriptReplyMessage": "ExecuteScriptReplyMessage",
817
+ "EventListenerCallbackMessage": "EventListenerCallbackMessage",
818
+ "ElementValueReplayMessage": "ElementValueReplayMessage",
819
+ "GetAttributeReplayMessage": "GetAttributeReplayMessage",
820
+ "RefComponentCreatedMessage": "RefComponentCreatedMessage",
821
+ "EnvelopedMessage": "EnvelopedMessage",
822
+ "MutationObserverMessage": "MutationObserverMessage",
823
+ "CleanupReplayMessage": "CleanupReplayMessage",
824
+ "ResizeObserverMessage": "ResizeObserverMessage"
825
+ }
826
+ };
827
+
828
+ // src/host/components/IMyopComponent.ts
829
+ var BaseMyopComponent = class {
830
+ constructor(componentDefinition, container, options) {
831
+ this.componentDefinition = componentDefinition;
832
+ this.container = container;
833
+ __publicField(this, "id", "");
834
+ __publicField(this, "messageHandlers", {});
835
+ __publicField(this, "element");
836
+ __publicField(this, "_markedForDisposed", false);
837
+ //TODO: use bindWhen with return true predicate ...
838
+ __publicField(this, "bind", (messageType, handler) => {
839
+ if (!this.messageHandlers[messageType]) {
840
+ this.messageHandlers[messageType] = [];
841
+ }
842
+ if (!this.messageHandlers[messageType].includes(handler)) {
843
+ this.messageHandlers[messageType].push(handler);
844
+ }
845
+ });
846
+ __publicField(this, "bindWhen", (messageType, predicate, handler) => {
847
+ if (!handler) {
848
+ throw new Error("can't use component.bindWhen without an handler");
849
+ }
850
+ if (!this.messageHandlers[messageType]) {
851
+ this.messageHandlers[messageType] = [];
852
+ }
853
+ const handlers = this.messageHandlers[messageType];
854
+ const predicateWrappedHandler = (e) => {
855
+ if (predicate(e)) {
856
+ handler(e);
857
+ return true;
858
+ }
859
+ return false;
860
+ };
861
+ handlers.push(predicateWrappedHandler);
862
+ return () => {
863
+ const index = handlers.indexOf(predicateWrappedHandler);
864
+ if (index > -1) {
865
+ handlers.splice(index, 1);
866
+ }
867
+ };
868
+ });
869
+ __publicField(this, "setInitiated", () => {
870
+ this.isInitiated = true;
871
+ if (this._whenInitiatedResolve)
872
+ this._whenInitiatedResolve();
873
+ });
874
+ __publicField(this, "isInitiated", false);
875
+ __publicField(this, "_whenInitiatedResolve");
876
+ __publicField(this, "_whenInitiatedReject");
877
+ __publicField(this, "_whenInitiated", new Promise((resolve, reject) => {
878
+ this._whenInitiatedResolve = resolve;
879
+ this._whenInitiatedReject = reject;
880
+ }));
881
+ __publicField(this, "initiated", () => {
882
+ return this._whenInitiated;
883
+ });
884
+ __publicField(this, "props", {});
885
+ __publicField(this, "refs", {});
886
+ this.id = (options == null ? void 0 : options.id) || HostSDK.Instance().assignId(componentDefinition);
887
+ const timeout = (options == null ? void 0 : options.timeout) ? options == null ? void 0 : options.timeout : 5 * 1e3;
888
+ setTimeout(() => {
889
+ if (!this.isInitiated && this._whenInitiatedReject && !this._markedForDisposed) {
890
+ this._whenInitiatedReject("timeout_".concat(timeout, " ").concat(this.id));
891
+ }
892
+ }, timeout);
893
+ this.initiated().then(() => {
894
+ if (window.myop.hostSDK.inspected) {
895
+ this.inspect();
896
+ }
897
+ });
898
+ }
899
+ get markedForDisposed() {
900
+ return this._markedForDisposed;
901
+ }
902
+ set markedForDisposed(value) {
903
+ if (this._markedForDisposed) {
904
+ throw new Error("InvalidOperationException: The component is already in the process of being disposed. Dispose operation cannot be performed again until the current disposal process is complete.");
905
+ }
906
+ this._markedForDisposed = value;
907
+ }
908
+ onMessageReceived(incomeMessage) {
909
+ if (incomeMessage.messageType === MyopMessages.ExecuteComponentMethod) {
910
+ const typedMessage = incomeMessage;
911
+ if (this[typedMessage.method]) {
912
+ this[typedMessage.method](typedMessage.content);
913
+ } else {
914
+ console.log("method not found ".concat(typedMessage.method, " on component"), this);
915
+ }
916
+ return true;
917
+ }
918
+ const handlers = this.messageHandlers[incomeMessage.messageType];
919
+ if (handlers && handlers.length) {
920
+ let handled = false;
921
+ handlers.forEach((handler) => {
922
+ handled = handled || handler(incomeMessage);
923
+ });
924
+ return handled;
925
+ } else {
926
+ }
927
+ return false;
928
+ }
929
+ sendCleanupMessage(message) {
930
+ message.source = this.id;
931
+ message.destination = this.id;
932
+ message.direction = MessageDirection.down;
933
+ const cleanupHandler = this.bindWhen(message.replyMessageKey, (msg) => {
934
+ return msg.replayToHandler === message.handlerUniqueId;
935
+ }, (m) => {
936
+ message.handler(m);
937
+ cleanupHandler();
938
+ });
939
+ const handler = message.handler;
940
+ delete message.handler;
941
+ this.send(message);
942
+ message.handler = handler;
943
+ }
944
+ send(message) {
945
+ if (!message.source)
946
+ message.source = this.id;
947
+ if (!message.destination)
948
+ message.destination = this.id;
949
+ message.direction = MessageDirection.down;
950
+ let cleanupHandler;
951
+ if (message.handler) {
952
+ const typedMessage = message;
953
+ cleanupHandler = this.bindWhen(typedMessage.replyMessageKey, (msg) => {
954
+ return msg.replayToHandler === typedMessage.handlerUniqueId;
955
+ }, typedMessage.handler);
956
+ delete message.handler;
957
+ }
958
+ if (message.ref) {
959
+ message.ref = message.ref.__nonProxied || message.ref;
960
+ }
961
+ if (message.cleanable) {
962
+ return () => {
963
+ this.sendCleanupMessage(new CleanupMessage(message.id, (replay) => {
964
+ }));
965
+ if (cleanupHandler) {
966
+ cleanupHandler();
967
+ }
968
+ };
969
+ } else {
970
+ return () => {
971
+ };
972
+ }
973
+ }
974
+ dispose() {
975
+ this.markedForDisposed = true;
976
+ if (!this.isInitiated) {
977
+ return;
978
+ }
979
+ console.log("disposing component", this.id);
980
+ this.send(new DisposeMessage());
981
+ const onDisposeHandlers = this.messageHandlers["onDispose"];
982
+ if (onDisposeHandlers) {
983
+ onDisposeHandlers.forEach((disposeHandler) => {
984
+ disposeHandler(null);
985
+ });
986
+ }
987
+ this.messageHandlers = {};
988
+ this.id += "_disposed";
989
+ this.isInitiated = false;
990
+ }
991
+ };
992
+
993
+ // src/common/MyopElementRef.ts
994
+ var MyopElementRef = class {
995
+ constructor(myopId, htmlTagName, BoundingRect, offsetTop, offsetLeft) {
996
+ this.myopId = myopId;
997
+ this.htmlTagName = htmlTagName;
998
+ this.BoundingRect = BoundingRect;
999
+ this.offsetTop = offsetTop;
1000
+ this.offsetLeft = offsetLeft;
1001
+ __publicField(this, "type", "MyopElementRef");
1002
+ }
1003
+ };
1004
+
1005
+ // src/common/baseMessageHandler.ts
1006
+ var runExecutorCleanup = async (task) => {
1007
+ if (typeof task === "function") {
1008
+ task();
1009
+ } else if (task instanceof Promise) {
1010
+ const result = await task;
1011
+ if (typeof result === "function") {
1012
+ result();
1013
+ }
1014
+ }
1015
+ };
1016
+ var BaseMessageHandler = class {
1017
+ //TODO : add dispose method
1018
+ constructor(messageToHost) {
1019
+ this.messageToHost = messageToHost;
1020
+ }
1021
+ };
1022
+ var BaseContextMessageHandler = class extends BaseMessageHandler {
1023
+ constructor(messageToHost, context) {
1024
+ super(messageToHost);
1025
+ this.messageToHost = messageToHost;
1026
+ this.context = context;
1027
+ }
1028
+ };
1029
+
1030
+ // src/common/BaseMyopSDK.ts
1031
+ var HostedComponent = class {
1032
+ //onMessageReceived: (msg: IMyopMessage) => void;
1033
+ constructor(id, context) {
1034
+ this.id = id;
1035
+ this.context = context;
1036
+ __publicField(this, "send", (message) => {
1037
+ });
1038
+ }
1039
+ };
1040
+ var BaseMyopSDK = class {
1041
+ constructor() {
1042
+ __publicField(this, "messageToHandleAfterInit", []);
1043
+ __publicField(this, "components", {});
1044
+ __publicField(this, "alwaysPassEnvelopesToHost", false);
1045
+ __publicField(this, "messageCleanupCache", {});
1046
+ }
1047
+ handleIncomeMessages(event) {
1048
+ const eventContent = event.data ? event.data : event.detail;
1049
+ if (!eventContent || !eventContent.myop) {
1050
+ return;
1051
+ } else {
1052
+ let message = eventContent;
1053
+ if (message.direction !== MessageDirection.down) {
1054
+ return;
1055
+ }
1056
+ if (message.messageType === MyopMessages.DisposeMessage) {
1057
+ if (message.destination)
1058
+ delete this.components[message.destination];
1059
+ return;
1060
+ }
1061
+ if (message.messageType === MyopMessages.InitMessage) {
1062
+ const newComponentId = message.content.id;
1063
+ if (this.components[newComponentId]) {
1064
+ return;
1065
+ }
1066
+ this.components[newComponentId] = new HostedComponent(newComponentId);
1067
+ this.messageToHost(new InitResponse(newComponentId));
1068
+ return;
1069
+ }
1070
+ if (message.messageType === MyopMessages.EnvelopedMessage) {
1071
+ const envelopedMessage = message;
1072
+ const innerMessage = envelopedMessage.message;
1073
+ message = innerMessage;
1074
+ if (this.alwaysPassEnvelopesToHost || this.components[message.destination]) {
1075
+ const destinationComponent = myop.hostSDK.components.find((c) => c.id === innerMessage.destination);
1076
+ if (destinationComponent) {
1077
+ destinationComponent.send(innerMessage);
1078
+ return;
1079
+ }
1080
+ const envelopedDestinationComponent = myop.hostSDK.components.find((c) => c.id === envelopedMessage.destination);
1081
+ if (envelopedDestinationComponent) {
1082
+ envelopedDestinationComponent.send(innerMessage);
1083
+ return;
1084
+ }
1085
+ } else {
1086
+ return;
1087
+ }
1088
+ }
1089
+ if (message.messageType) {
1090
+ if (message.messageType === MyopMessages.CleanupMessage) {
1091
+ const typedMessage = message;
1092
+ const cleanup = this.messageCleanupCache[typedMessage.cleanupForMessageId];
1093
+ const cleanupMessage = new CleanupReplayMessage(!!cleanup);
1094
+ cleanupMessage.destination = message.destination;
1095
+ if (!!cleanup) {
1096
+ delete this.messageCleanupCache[typedMessage.cleanupForMessageId];
1097
+ runExecutorCleanup(cleanup).then(() => {
1098
+ this.messageToHost(cleanupMessage, typedMessage);
1099
+ }).catch(() => {
1100
+ });
1101
+ } else {
1102
+ this.messageToHost(cleanupMessage, typedMessage);
1103
+ }
1104
+ return;
1105
+ }
1106
+ let actionHandlerFound = false;
1107
+ this.supportedHandlers.forEach((handler) => {
1108
+ if (handler.messageType === message.messageType) {
1109
+ actionHandlerFound = true;
1110
+ const cleanup = handler.executor(message);
1111
+ if (message.cleanable && cleanup) {
1112
+ this.messageCleanupCache[message.id] = cleanup;
1113
+ }
1114
+ if (cleanup && !message.cleanable) {
1115
+ throw new Error("Cleanup handler generated for non-cleanable message. \nmessageType - ".concat(message.messageType, ", handler executor was - ").concat(handler.executor, "\n\nPlease review the message definition object & message handler.\nTo ensure cleanup properly set 'cleanable' true at message definition and return IMessageExecutorCleanup from your handlers."));
1116
+ }
1117
+ if (!cleanup && message.cleanable) {
1118
+ throw new Error("No cleanup handler generated for a cleanable message. \nmessageType - ".concat(message.messageType, ", handler executor was - ").concat(handler.executor, "\n\nPlease review the message definition object & message handler.\nTo ensure cleanup properly set 'cleanable' true at message definition and return IMessageExecutorCleanup from your handlers."));
1119
+ }
1120
+ }
1121
+ });
1122
+ if (!actionHandlerFound) {
1123
+ }
1124
+ } else {
1125
+ console.log("unsupported message type");
1126
+ }
1127
+ }
1128
+ }
1129
+ };
1130
+
1131
+ // src/common/index.ts
1132
+ var SkinLoaders = {
1133
+ "IframeLoader": "IframeLoader",
1134
+ "WebComponentLoader": "WebComponentLoader",
1135
+ "HTMLLoader": "HTMLLoader",
1136
+ "MinimizedLoader": "MinimizedLoader"
1137
+ };
1138
+ var ShadowRootModeType = {
1139
+ "open": "open",
1140
+ "closed": "closed",
1141
+ "none": "none",
1142
+ "localFrame": "localFrame"
1143
+ };
1144
+ var PropConfigBehaviorTypes = {
1145
+ "message": "message",
1146
+ "code": "code"
1147
+ };
1148
+ var RefBehaviorType = class {
1149
+ };
1150
+ __publicField(RefBehaviorType, "code", "code");
1151
+ __publicField(RefBehaviorType, "component", "component");
1152
+ var SkinSelectorTypes = {
1153
+ "Segmented": "Segmented",
1154
+ "Dedicated": "Dedicated",
1155
+ /**
1156
+ * This Selector Type is not yet supported but will be added in a future release.
1157
+ * Please check the documentation for updates.
1158
+ *
1159
+ * @type {string}
1160
+ */
1161
+ "Default": "Default"
1162
+ };
1163
+ var ExperienceTypes = {
1164
+ "Segment": "Segment",
1165
+ "Promo": "Promo",
1166
+ "AB": "AB"
1167
+ };
1168
+ var RootRef = class {
1169
+ constructor(container, shadowRoot) {
1170
+ this.container = container;
1171
+ this.shadowRoot = shadowRoot;
1172
+ __publicField(this, "getRootDiv", () => {
1173
+ return (this.shadowRoot || this.container).querySelector("div");
1174
+ });
1175
+ __publicField(this, "getRoot", () => {
1176
+ return this.shadowRoot || this.container;
1177
+ });
1178
+ }
1179
+ };
1180
+
1181
+ // src/common/utils/serialization.ts
1182
+ var isPrimitive = (value) => {
1183
+ return value !== Object(value);
1184
+ };
1185
+ var isFunction = (value) => {
1186
+ return typeof value === "function";
1187
+ };
1188
+ var containsPrimitivesOnly = (obj) => {
1189
+ if (isPrimitive(obj)) {
1190
+ return true;
1191
+ }
1192
+ if (isFunction(obj)) {
1193
+ return false;
1194
+ }
1195
+ if (Object.getPrototypeOf(obj)) {
1196
+ return false;
1197
+ }
1198
+ for (const key in obj) {
1199
+ const value = obj[key];
1200
+ if (typeof value === "object") {
1201
+ if (!containsPrimitivesOnly(value)) {
1202
+ return false;
1203
+ }
1204
+ } else if (isPrimitive(value)) {
1205
+ continue;
1206
+ } else {
1207
+ return false;
1208
+ }
1209
+ }
1210
+ return true;
1211
+ };
1212
+ var makeSerializable = (obj, skeleton = {}, includeFalsyKeys = true, seen3 = /* @__PURE__ */ new WeakMap()) => {
1213
+ if (isPrimitive(obj)) {
1214
+ return obj;
1215
+ }
1216
+ if (Array.isArray(obj)) {
1217
+ if (seen3.has(obj)) {
1218
+ return seen3.get(obj);
1219
+ }
1220
+ const serializableArray = [];
1221
+ seen3.set(obj, serializableArray);
1222
+ for (let index = 0; index < obj.length; index++) {
1223
+ const element = obj[index];
1224
+ serializableArray[index] = makeSerializable(element, skeleton, includeFalsyKeys, seen3);
1225
+ }
1226
+ return serializableArray;
1227
+ }
1228
+ if (obj !== null && typeof obj === "object") {
1229
+ if (seen3.has(obj)) {
1230
+ return seen3.get(obj);
1231
+ }
1232
+ const serializableObject = {};
1233
+ seen3.set(obj, serializableObject);
1234
+ for (const key in obj) {
1235
+ const keyInSkeleton = typeof skeleton == "boolean" ? skeleton : skeleton[key];
1236
+ if (keyInSkeleton) {
1237
+ if (keyInSkeleton === true) {
1238
+ if (includeFalsyKeys ? obj[key] !== void 0 : obj[key]) {
1239
+ serializableObject[key] = makeSerializable(obj[key], true, includeFalsyKeys, seen3);
1240
+ }
1241
+ } else if (typeof keyInSkeleton === "object") {
1242
+ serializableObject[key] = makeSerializable(obj[key], keyInSkeleton, includeFalsyKeys, seen3);
1243
+ }
1244
+ }
1245
+ }
1246
+ return serializableObject;
1247
+ }
1248
+ return {};
1249
+ };
1250
+
1251
+ // src/host/logMessages.ts
1252
+ var Errors = {
1253
+ notSerializableRefCall: (prop, arg) => {
1254
+ throw new Error("\nThe input provided to '".concat(prop.toString(), "' is not serializable. Serialization is required to ensure that the data can be safely transferred to the skin implementation. \nThe following types of data are considered non-serializable and cannot be processed:\n\n- Functions\n- DOM elements\n- Class instances\n- Circular references\n- Symbols\n- BigInt values\n\nIn the following execution we detected :\n~~~~~~~~\n").concat(arg, " \n~~~~~~~~\nas not serializable.\n\nTo resolve this issue, please ensure that all inputs passed to '").concat(prop.toString(), "' are in a serializable format.\nThis typically includes primitive types (strings, numbers, booleans), arrays, and plain objects. \nIf you need to include complex data types, consider converting them to a serializable structure before passing them to the function.\nOr use Myop message that support it: CustomRefMessage, AddEventListenerMessage or ExecuteScriptMessage.\n\nSuggested Fix:\n1. Remove or replace non-serializable values from your input.\n2. If using objects, ensure they do not contain any functions or circular references.\n3. Convert any class instances to plain objects or JSON-compatible formats.\n4. Use dedicated Myop message.\n\nFor more details on serialization and Myop message examples, refer to https://docs.myop.dev.\n\n"));
1255
+ }
1256
+ };
1257
+
1258
+ // src/host/components/myopRefComponent.ts
1259
+ var MyopRefComponent = class extends BaseMyopComponent {
1260
+ constructor(componentDefinition, parent, options) {
1261
+ super(componentDefinition, parent.container, options);
1262
+ this.componentDefinition = componentDefinition;
1263
+ this.parent = parent;
1264
+ __publicField(this, "send", (message) => {
1265
+ const handler = message.handler;
1266
+ const cleanupHandler = super.send(message);
1267
+ this.parent.send(new EnvelopedMessage(this.id, message));
1268
+ message.handler = handler;
1269
+ return cleanupHandler;
1270
+ });
1271
+ __publicField(this, "dispose", () => {
1272
+ if (this.isInitiated)
1273
+ this.send(new ExecuteComponentMethod("dispose"));
1274
+ super.dispose();
1275
+ });
1276
+ }
1277
+ hide() {
1278
+ this.send(new ExecuteComponentMethod("hide"));
1279
+ }
1280
+ show() {
1281
+ this.send(new ExecuteComponentMethod("show"));
1282
+ }
1283
+ inspect() {
1284
+ return this.send(new ExecuteComponentMethod("inspect"));
1285
+ }
1286
+ setHeightBasedOnDocumentElement() {
1287
+ this.send(new ExecuteComponentMethod("setHeightBasedOnDocumentElement"));
1288
+ }
1289
+ setHeightBasedOnScrollHeight() {
1290
+ this.send(new ExecuteComponentMethod("setHeightBasedOnScrollHeight"));
1291
+ }
1292
+ onMessageReceived(incomeMessage) {
1293
+ return super.onMessageReceived(incomeMessage);
1294
+ }
1295
+ };
1296
+
1297
+ // src/host/componentCore.ts
1298
+ var createDebugTitle = (text, top, componentDefinitionConfig) => {
1299
+ const titleEl = document.createElement("a");
1300
+ titleEl.textContent = text;
1301
+ titleEl.style.position = "relative";
1302
+ titleEl.style.padding = "0 5px";
1303
+ titleEl.style.fontSize = "14px";
1304
+ titleEl.style["top"] = "0";
1305
+ titleEl.style.top = "".concat(top, "px");
1306
+ titleEl.style.transform = "translateX(-50%)";
1307
+ titleEl.target = "_blank";
1308
+ titleEl.href = "https://dashboard.myop.dev/dashboard/component/".concat(componentDefinitionConfig.id);
1309
+ return titleEl;
1310
+ };
1311
+ var setDebugStyle = (id, type, top, container, componentElement, componentDefinitionConfig) => {
1312
+ const topText = createDebugTitle("".concat(componentDefinitionConfig.name, " : ").concat(type), top, componentDefinitionConfig);
1313
+ container.insertBefore(topText, componentElement);
1314
+ componentElement.style.border = "1px solid #007BFF";
1315
+ componentElement.style.display = "block";
1316
+ return () => {
1317
+ componentElement.style.border = "unset";
1318
+ container.removeChild(topText);
1319
+ };
1320
+ };
1321
+ var reportError = (propConfig, propName, component) => {
1322
+ if (!propConfig) {
1323
+ console.error(
1324
+ // throw new Error(
1325
+ "Error: Undefined Prop\n\nIt looks like you've tried to use a prop that hasn't been defined.\nPlease check the prop name for any typos or ensure that it is properly defined in the component's prop list.\n\n" + "Prop Name: ".concat(propName, "\n") + "Component: ".concat(component.componentDefinition.name, ", ID: ").concat(component.componentDefinition.id, "\n\n") + "For more information, refer to the component page https://dashboard.myop.dev/dashboard/component/".concat(component.componentDefinition.id, " or consult the developer guide.")
1326
+ );
1327
+ return true;
1328
+ }
1329
+ return false;
1330
+ };
1331
+ var reportUnsupported = (propConfig, propName, component) => {
1332
+ console.error(
1333
+ "Error: Code Prop Not Supported\n\nCurrently, code props are only supported in local frame components.\n\u26A0\uFE0F This is a work in progress feature \u2014 code props will be supported in upcoming versions.\n\nIn the meantime, you can use message props.\n\n" + "Prop Name: ".concat(propName, "\n") + "Component: ".concat(component.componentDefinition.name, ", ID: ").concat(component.componentDefinition.id, "\n\n") + "For more information, refer to the component page https://dashboard.myop.dev/dashboard/component/".concat(component.componentDefinition.id, " or consult the developer guide.")
1334
+ );
1335
+ };
1336
+ var connectProps = (component, propsConfig, selectedSkin) => {
1337
+ const propsMap = propsConfig.reduce((previousValue, currentValue) => {
1338
+ return __spreadProps(__spreadValues({}, previousValue), {
1339
+ [currentValue.name]: __spreadValues({}, currentValue)
1340
+ });
1341
+ }, {});
1342
+ const propsHandler = {
1343
+ get: (_, prop) => {
1344
+ const propConfig = propsMap[prop];
1345
+ if (reportError(propConfig, prop, component)) {
1346
+ return false;
1347
+ }
1348
+ if (propConfig.behavior.type === PropConfigBehaviorTypes.code) {
1349
+ if (selectedSkin.loader.type === SkinLoaders.HTMLLoader) {
1350
+ const typedLoader = selectedSkin.loader;
1351
+ if (typedLoader.shadowRootMode === ShadowRootModeType.localFrame) {
1352
+ const typedPropBehavior = propConfig.behavior;
1353
+ return component.element.contentWindow[typedPropBehavior.remap || prop];
1354
+ }
1355
+ }
1356
+ reportUnsupported(propConfig, prop, component);
1357
+ return false;
1358
+ }
1359
+ if (propConfig.mode === "output") {
1360
+ return new Promise((resolve) => {
1361
+ const messageParams = [];
1362
+ if (propConfig.behavior.ref) {
1363
+ messageParams.push(Ref.create(propConfig.behavior.ref));
1364
+ }
1365
+ messageParams.push((data) => {
1366
+ resolve(data);
1367
+ });
1368
+ if (propConfig.behavior.params) {
1369
+ messageParams.push(...propConfig.behavior.params);
1370
+ }
1371
+ const messageCtor = messages_exports[propConfig.behavior.message];
1372
+ component.send(new messageCtor(...messageParams));
1373
+ });
1374
+ }
1375
+ return null;
1376
+ },
1377
+ set: (_, prop, value) => {
1378
+ const propConfig = propsMap[prop];
1379
+ if (reportError(propConfig, prop, component)) {
1380
+ return false;
1381
+ }
1382
+ if (propConfig.behavior.type === PropConfigBehaviorTypes.code) {
1383
+ if (selectedSkin.loader.type === SkinLoaders.HTMLLoader) {
1384
+ const typedLoader = selectedSkin.loader;
1385
+ if (typedLoader.shadowRootMode === ShadowRootModeType.localFrame) {
1386
+ const typedPropBehavior = propConfig.behavior;
1387
+ component.element.contentWindow[typedPropBehavior.remap || prop] = value;
1388
+ return true;
1389
+ }
1390
+ }
1391
+ reportUnsupported(propConfig, prop, component);
1392
+ return false;
1393
+ } else {
1394
+ if (propConfig.mode === "input") {
1395
+ if (propConfig.behavior.type === "message") {
1396
+ const messageParams = [];
1397
+ if (propConfig.behavior.ref) {
1398
+ messageParams.push(Ref.create(propConfig.behavior.ref));
1399
+ }
1400
+ messageParams.push(value);
1401
+ if (propConfig.behavior.params) {
1402
+ messageParams.push(...propConfig.behavior.params);
1403
+ }
1404
+ const messageCtor = messages_exports[propConfig.behavior.message];
1405
+ component.send(new messageCtor(...messageParams));
1406
+ return true;
1407
+ } else {
1408
+ throw new Error(
1409
+ "Error: Unsupported Behavior\n\nThe 'behavior' field provided is not supported.\n" + "Component: ".concat(component.componentDefinition.name, ", ID: ").concat(component.componentDefinition.id, "\n\n") + "Prop Name: ".concat(prop, "\n") + "Behavior Field: ".concat(propConfig.behavior.type, "\n\n") + "Check the documentation for valid behavior options."
1410
+ );
1411
+ return false;
1412
+ }
1413
+ }
1414
+ }
1415
+ return false;
1416
+ }
1417
+ };
1418
+ component.props = {};
1419
+ component.props = new Proxy(component.props, propsHandler);
1420
+ return component;
1421
+ };
1422
+ var createRefProxy = (target, component) => {
1423
+ return new Proxy(target, {
1424
+ get(target2, prop) {
1425
+ if (target2[prop]) {
1426
+ return target2[prop];
1427
+ }
1428
+ const getterFunction = (...args) => {
1429
+ return new Promise((resolve) => {
1430
+ args.forEach((arg) => {
1431
+ if (!containsPrimitivesOnly(arg)) {
1432
+ Errors.notSerializableRefCall(prop, arg);
1433
+ }
1434
+ });
1435
+ component.send(new CustomRefMessage(
1436
+ ({ ref, propName, functionArgs, makeSerializable: makeSerializable2 }) => {
1437
+ if (ref) {
1438
+ const value = ref[propName];
1439
+ if (typeof value === "function") {
1440
+ return makeSerializable2(ref[propName](...functionArgs), true);
1441
+ } else {
1442
+ return makeSerializable2(value, true);
1443
+ }
1444
+ }
1445
+ return null;
1446
+ },
1447
+ {
1448
+ //TODO : turn it to config
1449
+ elementId: target2.refConfig.selector,
1450
+ propName: prop,
1451
+ functionArgs: args
1452
+ },
1453
+ (msg) => {
1454
+ resolve(msg.content);
1455
+ }
1456
+ ));
1457
+ });
1458
+ };
1459
+ return getterFunction;
1460
+ },
1461
+ set(target2, prop, value) {
1462
+ component.send(new CustomRefMessage(
1463
+ ({ ref, propName, propValue }) => {
1464
+ if (ref)
1465
+ ref[propName] = propValue;
1466
+ },
1467
+ {
1468
+ //TODO : fix that
1469
+ elementId: target2.refConfig.selector,
1470
+ propValue: value,
1471
+ propName: prop
1472
+ },
1473
+ (msg) => {
1474
+ }
1475
+ ));
1476
+ return true;
1477
+ }
1478
+ });
1479
+ };
1480
+ var createRefComponent = async (ref, componentConfig, components, options) => {
1481
+ const component = ref.component;
1482
+ if (!component)
1483
+ throw new Error("cant createRefComponent with detached ref");
1484
+ return new Promise(async (resolve, reject) => {
1485
+ const refComponent = new MyopRefComponent(componentConfig.type, component, options);
1486
+ components.push(refComponent);
1487
+ await component.initiated();
1488
+ const timeout = setTimeout(() => {
1489
+ reject("timeout");
1490
+ }, 5e3);
1491
+ component.send(new CreateRefComponentMessage(
1492
+ ref.refConfig,
1493
+ componentConfig,
1494
+ __spreadProps(__spreadValues({}, options ? options : {}), {
1495
+ id: refComponent.id,
1496
+ _hasParent: true
1497
+ }),
1498
+ async (message) => {
1499
+ clearTimeout(timeout);
1500
+ if (message.failed) {
1501
+ reject("CreateRefComponentMessage failed");
1502
+ return;
1503
+ }
1504
+ const implementationComponent = components.find((c) => c.id == refComponent.id);
1505
+ if (implementationComponent !== refComponent) {
1506
+ component.refs[ref.refConfig.name] = implementationComponent;
1507
+ resolve(implementationComponent);
1508
+ return;
1509
+ } else {
1510
+ refComponent.setInitiated();
1511
+ component.refs[ref.refConfig.name] = refComponent;
1512
+ }
1513
+ message.nestedRefs.forEach((nestedRefConfig) => {
1514
+ const nestedComponentDefinition = componentConfig.instance.resolvedNestedComponents.find((c) => c.type.id === nestedRefConfig.componentDefinitionId).type;
1515
+ const nestedComponent = new MyopRefComponent(nestedComponentDefinition, refComponent);
1516
+ nestedComponent.setInitiated();
1517
+ refComponent.refs[nestedRefConfig.refName] = nestedComponent;
1518
+ components.push(nestedComponent);
1519
+ });
1520
+ try {
1521
+ await connectRefs(refComponent, componentConfig, components, true);
1522
+ if (component.setHeightBasedOnScrollHeight)
1523
+ component.setHeightBasedOnScrollHeight();
1524
+ resolve(refComponent);
1525
+ } catch (e) {
1526
+ reject(e);
1527
+ }
1528
+ }
1529
+ ));
1530
+ });
1531
+ };
1532
+ var connectRefs = async (component, componentConfig, components, withoutRefComponents = false) => {
1533
+ if (!component.refs)
1534
+ component.refs = {};
1535
+ const waitFor = Object.values(component.componentDefinition.refs).map((ref) => {
1536
+ return new Promise(async (resolve, reject) => {
1537
+ var _a;
1538
+ if (ref.behavior.type == RefBehaviorType.component) {
1539
+ if (withoutRefComponents) {
1540
+ resolve();
1541
+ return;
1542
+ }
1543
+ let refComponentId = ref.behavior.componentId;
1544
+ if (!refComponentId)
1545
+ refComponentId = ref.behavior.instance.componentId;
1546
+ const nestedComponentConfig = (_a = componentConfig.instance.resolvedNestedComponents) == null ? void 0 : _a.find((nestedComponent) => nestedComponent.type.id === refComponentId);
1547
+ if (!nestedComponentConfig) {
1548
+ throw new Error("componentConfig provided without nestedComponentConfig check the config object");
1549
+ return;
1550
+ }
1551
+ const _ref = Ref.create("", ref, component);
1552
+ try {
1553
+ const nestedComponent = await createRefComponent(_ref, nestedComponentConfig, components);
1554
+ component.refs[ref.name] = nestedComponent;
1555
+ resolve();
1556
+ } catch (e) {
1557
+ reject(e);
1558
+ }
1559
+ } else {
1560
+ try {
1561
+ const __nonProxied = Ref.create("", ref, component);
1562
+ component.refs[ref.name] = createRefProxy(__nonProxied, component);
1563
+ resolve();
1564
+ } catch (e) {
1565
+ }
1566
+ }
1567
+ });
1568
+ });
1569
+ try {
1570
+ await Promise.all(waitFor);
1571
+ } catch (e) {
1572
+ throw e;
1573
+ }
1574
+ };
1575
+
1576
+ // src/host/components/myopIframeComponent.ts
1577
+ var MyopIframeComponent = class extends BaseMyopComponent {
1578
+ constructor(componentConfig, skin, container, IframeElement, options) {
1579
+ super(componentConfig, container, options);
1580
+ this.componentConfig = componentConfig;
1581
+ this.container = container;
1582
+ this.IframeElement = IframeElement;
1583
+ __publicField(this, "cleanupInspect");
1584
+ __publicField(this, "setHeightBasedOnDocumentElement", () => {
1585
+ const cleanupHandler = this.send(new ExecuteScriptMessage(() => {
1586
+ return window.document.documentElement.scrollHeight;
1587
+ }, (ret) => {
1588
+ this.IframeElement.style.height = "".concat(ret.content, "px");
1589
+ cleanupHandler();
1590
+ }));
1591
+ });
1592
+ __publicField(this, "observeSizeBasedOnDocumentElement", () => {
1593
+ const cleanupHandler = this.send(new ExecuteScriptMessage(({ send }) => {
1594
+ const { height, width } = document.documentElement.getBoundingClientRect();
1595
+ const observer = new ResizeObserver(() => {
1596
+ const { height: height2, width: width2 } = document.documentElement.getBoundingClientRect();
1597
+ send({ height: height2, width: width2 });
1598
+ });
1599
+ observer.observe(document.documentElement);
1600
+ observer.observe(document.body);
1601
+ return { height, width };
1602
+ }, (ret) => {
1603
+ this.IframeElement.style.width = "".concat(ret.content.width, "px");
1604
+ this.IframeElement.style.height = "".concat(ret.content.height, "px");
1605
+ }));
1606
+ return cleanupHandler;
1607
+ });
1608
+ __publicField(this, "setSizeBasedOnDocumentElement", () => {
1609
+ const cleanupHandler = this.send(new ExecuteScriptMessage(() => {
1610
+ const { height, width } = document.documentElement.getBoundingClientRect();
1611
+ return { height, width };
1612
+ }, (ret) => {
1613
+ this.IframeElement.style.width = "".concat(ret.content.width, "px");
1614
+ this.IframeElement.style.height = "".concat(ret.content.height, "px");
1615
+ cleanupHandler();
1616
+ }));
1617
+ });
1618
+ __publicField(this, "setHeightBasedOnScrollHeight", () => {
1619
+ const cleanupHandler = this.send(new ExecuteScriptMessage(() => {
1620
+ const noOp = () => {
1621
+ return 0;
1622
+ };
1623
+ let x = noOp();
1624
+ x++;
1625
+ x--;
1626
+ return Math.max(
1627
+ Math.max(
1628
+ window.document.body.clientHeight,
1629
+ window.document.body.scrollHeight
1630
+ ),
1631
+ window.document.body.offsetHeight
1632
+ ) + x + "px";
1633
+ }, (ret) => {
1634
+ this.IframeElement.style.height = ret.content;
1635
+ cleanupHandler();
1636
+ }));
1637
+ });
1638
+ __publicField(this, "send", (message) => {
1639
+ var _a, _b;
1640
+ let message_ = __spreadValues({}, message);
1641
+ if (message_.messageType === MyopMessages.ExecuteComponentMethod) {
1642
+ const typedMessage = message_;
1643
+ this[typedMessage.method]();
1644
+ return () => {
1645
+ };
1646
+ }
1647
+ message_.direction = MessageDirection.down;
1648
+ const cleanupHandler = super.send(message_);
1649
+ (_b = (_a = this.IframeElement) == null ? void 0 : _a.contentWindow) == null ? void 0 : _b.postMessage(message_, "*");
1650
+ return cleanupHandler;
1651
+ });
1652
+ __publicField(this, "dispose", () => {
1653
+ if (this.cleanupInspect)
1654
+ this.cleanupInspect();
1655
+ super.dispose();
1656
+ this.IframeElement.parentNode.removeChild(this.IframeElement);
1657
+ });
1658
+ if (skin.loader.autoHeight) {
1659
+ this.initiated().then(() => {
1660
+ this.setHeightBasedOnScrollHeight();
1661
+ });
1662
+ }
1663
+ this.element = this.IframeElement;
1664
+ }
1665
+ inspect() {
1666
+ if (this.cleanupInspect) {
1667
+ return this.cleanupInspect;
1668
+ }
1669
+ this.cleanupInspect = setDebugStyle(this.id, "MyopIframeComponent", 10, this.container, this.IframeElement, this.componentDefinition);
1670
+ return () => {
1671
+ this.cleanupInspect();
1672
+ this.cleanupInspect = void 0;
1673
+ };
1674
+ }
1675
+ hide() {
1676
+ this.IframeElement.style.opacity = "0";
1677
+ this.IframeElement.style.position = "absolute";
1678
+ this.IframeElement.style.pointerEvents = "none";
1679
+ this.IframeElement.style.visibility = "hidden";
1680
+ }
1681
+ show() {
1682
+ this.IframeElement.style.opacity = "1";
1683
+ this.IframeElement.style.position = "unset";
1684
+ this.IframeElement.style.pointerEvents = "all";
1685
+ this.IframeElement.style.visibility = "visible";
1686
+ }
1687
+ onMessageReceived(incomeMessage) {
1688
+ if (incomeMessage.messageType === MyopMessages.In.MutationObserverMessage || incomeMessage.messageType === MyopMessages.In.ResizeObserverMessage) {
1689
+ this.setHeightBasedOnScrollHeight();
1690
+ return true;
1691
+ }
1692
+ return super.onMessageReceived(incomeMessage);
1693
+ }
1694
+ };
1695
+
1696
+ // src/host/loaders/IMyopLoader.ts
1697
+ var BaseMyopLoader = class {
1698
+ constructor() {
1699
+ __publicField(this, "appendChild", (container, element, options) => {
1700
+ var _a;
1701
+ if (options == null ? void 0 : options.relative) {
1702
+ if (options.relative.direction === "before") {
1703
+ return container.insertBefore(element, options.relative.child);
1704
+ }
1705
+ if (options.relative.direction === "after") {
1706
+ const nextSibling = (_a = options.relative.child) == null ? void 0 : _a.nextSibling;
1707
+ return container.insertBefore(element, nextSibling ? nextSibling : null);
1708
+ }
1709
+ } else {
1710
+ return container.appendChild(element);
1711
+ }
1712
+ });
1713
+ }
1714
+ };
1715
+
1716
+ // src/host/loaders/iframeLoader.ts
1717
+ var addQueryParam = (url, param, value) => {
1718
+ const urlObj = new URL(url);
1719
+ urlObj.searchParams.append(param, value);
1720
+ return urlObj.toString();
1721
+ };
1722
+ var MyopIframeLoader = class extends BaseMyopLoader {
1723
+ constructor() {
1724
+ super(...arguments);
1725
+ __publicField(this, "type", SkinLoaders.IframeLoader);
1726
+ // @ts-ignore
1727
+ __publicField(this, "load", async (componentDefinition, skin, container, options) => {
1728
+ let IframeElement;
1729
+ const typedLoaderConfig = skin.loader;
1730
+ if ((container == null ? void 0 : container.nodeName) === "IFRAME") {
1731
+ console.log("needs to load into an exsisting Iframe...", typedLoaderConfig.url, container);
1732
+ IframeElement = container;
1733
+ IframeElement.src = typedLoaderConfig.url;
1734
+ } else {
1735
+ const uniqId = uuidv4();
1736
+ const domId = "myop-comp-".concat(uniqId);
1737
+ IframeElement = document.createElement("iframe");
1738
+ if (!container.querySelector('[id^="myop-comp-"]'))
1739
+ container.innerHTML = "";
1740
+ if (options == null ? void 0 : options.hidden) {
1741
+ IframeElement.style.visibility = "hidden";
1742
+ }
1743
+ IframeElement = this.appendChild(container, IframeElement, options);
1744
+ let url2load = skin.loader.url;
1745
+ if (options == null ? void 0 : options._hasParent)
1746
+ url2load = addQueryParam(url2load, "_myop-comp", uniqId);
1747
+ let elementAttributesString = "";
1748
+ if (options == null ? void 0 : options.elementAttributes)
1749
+ elementAttributesString = Object.entries(options == null ? void 0 : options.elementAttributes).map(([key, value]) => {
1750
+ if (value === "" || value === null || value === void 0) {
1751
+ return key;
1752
+ }
1753
+ return "".concat(key, '="').concat(String(value), '"');
1754
+ }).join(" ");
1755
+ IframeElement.outerHTML = '<iframe \n id="'.concat(domId, '"\n style="\n padding: 0;\n margin: 0;\n height: ').concat(typedLoaderConfig.autoHeight || !typedLoaderConfig.height ? "" : typedLoaderConfig.height, "; \n width : 100%;\n overflow: hidden;\n border: none;\n opacity: ").concat((options == null ? void 0 : options.hidden) ? "0" : "1", ";\n position: ").concat((options == null ? void 0 : options.hidden) ? "absolute" : "static", ";\n pointer-events: ").concat((options == null ? void 0 : options.hidden) ? "none" : "all", ';\n "\n src="').concat(url2load, '"\n ').concat(elementAttributesString, "\n ></iframe>");
1756
+ IframeElement = container.querySelector("#".concat(domId));
1757
+ }
1758
+ return new MyopIframeComponent(componentDefinition, skin, container, IframeElement, options);
1759
+ });
1760
+ }
1761
+ };
1762
+
1763
+ // src/webcomponent/consts.ts
1764
+ var myopWebcomponentConsts = {
1765
+ webcomponent_message_key: "myop_webcomponent_message"
1766
+ };
1767
+
1768
+ // src/host/components/myopWebcomponent.ts
1769
+ var MyopWebComponent = class extends BaseMyopComponent {
1770
+ constructor(componentDefinition, skin, container, customElement, options) {
1771
+ super(componentDefinition, container, options);
1772
+ this.container = container;
1773
+ this.customElement = customElement;
1774
+ __publicField(this, "cleanupInspect", () => {
1775
+ });
1776
+ __publicField(this, "send", (message) => {
1777
+ let message_ = __spreadValues({}, message);
1778
+ const cleanupHandler = super.send(message_);
1779
+ const msg = new CustomEvent(myopWebcomponentConsts.webcomponent_message_key, {
1780
+ // @ts-ignore
1781
+ detail: message_
1782
+ // bubbles: true,
1783
+ // cancelable: false,
1784
+ // composed: true
1785
+ });
1786
+ try {
1787
+ this.customElement.dispatchEvent(msg);
1788
+ } catch (e) {
1789
+ console.log("error while trying to dispatchEvent", e);
1790
+ }
1791
+ return cleanupHandler;
1792
+ });
1793
+ __publicField(this, "dispose", () => {
1794
+ var _a;
1795
+ super.dispose();
1796
+ (_a = this.customElement.parentNode) == null ? void 0 : _a.removeChild(this.customElement);
1797
+ });
1798
+ this.element = customElement;
1799
+ }
1800
+ inspect() {
1801
+ this.cleanupInspect = setDebugStyle(this.id, "MyopWebComponent", 0, this.container, this.customElement, this.componentDefinition);
1802
+ return this.cleanupInspect;
1803
+ }
1804
+ hide() {
1805
+ this.customElement.style.opacity = "0";
1806
+ this.customElement.style.position = "absolute";
1807
+ this.customElement.style.pointerEvents = "none";
1808
+ this.customElement.style.visibility = "hidden";
1809
+ this.customElement.style.height = "0";
1810
+ this.customElement.style.width = "0";
1811
+ }
1812
+ show() {
1813
+ this.customElement.style.opacity = "1";
1814
+ this.customElement.style.position = "unset";
1815
+ this.customElement.style.pointerEvents = "all";
1816
+ this.customElement.style.visibility = "visible";
1817
+ this.customElement.style.height = "";
1818
+ this.customElement.style.width = "";
1819
+ }
1820
+ };
1821
+
1822
+ // src/host/loaders/webcomponentLoader.ts
1823
+ var seen = {};
1824
+ var WebcomponentLoader = class extends BaseMyopLoader {
1825
+ constructor() {
1826
+ super(...arguments);
1827
+ __publicField(this, "type", SkinLoaders.WebComponentLoader);
1828
+ __publicField(this, "load", async (componentDefinition, skin, container, options) => {
1829
+ const loaderConfig = skin.loader;
1830
+ if (!seen[loaderConfig.url]) {
1831
+ seen[loaderConfig.url] = new Promise((resolve, reject) => {
1832
+ const webComponentLoadUrl = loaderConfig.url;
1833
+ const script = document.createElement("script");
1834
+ script.type = "module";
1835
+ script.src = webComponentLoadUrl;
1836
+ script.onload = () => {
1837
+ resolve();
1838
+ };
1839
+ script.onerror = () => {
1840
+ reject();
1841
+ };
1842
+ document.head.appendChild(script);
1843
+ });
1844
+ } else {
1845
+ console.log("Module alreday loaded or in loading process");
1846
+ }
1847
+ await seen[loaderConfig.url];
1848
+ await wait(1);
1849
+ let domId = "myop-comp-".concat(uuidv4());
1850
+ const element = document.createElement(loaderConfig.tag);
1851
+ if (!container.querySelector('[id^="myop-comp-"]'))
1852
+ container.innerHTML = "";
1853
+ element.id = domId;
1854
+ if (options == null ? void 0 : options.hidden) {
1855
+ element.style.opacity = "0";
1856
+ element.style.position = "absolute";
1857
+ element.style.height = "0";
1858
+ element.style.width = "0";
1859
+ element.style.pointerEvents = "none";
1860
+ element.style.visibility = "hidden";
1861
+ }
1862
+ if (options == null ? void 0 : options._environment) {
1863
+ element._myopEnvironment = options == null ? void 0 : options._environment;
1864
+ }
1865
+ this.appendChild(container, element, options);
1866
+ return new MyopWebComponent(componentDefinition, skin, container, element, options);
1867
+ });
1868
+ }
1869
+ };
1870
+
1871
+ // version:myop-sdk-version
1872
+ var myop_sdk_version_default = "0.2.1";
1873
+
1874
+ // src/webcomponent/messageHandlers/BaseWebComponentMessageHandler.ts
1875
+ var BaseWebComponentMessageHandler = class extends BaseContextMessageHandler {
1876
+ constructor(messageToHost, context) {
1877
+ super(messageToHost);
1878
+ this.context = context;
1879
+ __publicField(this, "executor", (event) => {
1880
+ if (event.destination) {
1881
+ const destination = event.destination;
1882
+ if (this.context[destination].context) {
1883
+ const _messageToHost = (message, replayTo) => {
1884
+ this.messageToHost(__spreadProps(__spreadValues({}, message), {
1885
+ source: event.destination ? event.destination : event.source,
1886
+ destination: event.source ? event.source : event.destination
1887
+ }), replayTo);
1888
+ };
1889
+ return this.innerExecutor(event, this.context[destination].context, _messageToHost);
1890
+ } else {
1891
+ debugger;
1892
+ }
1893
+ } else {
1894
+ debugger;
1895
+ }
1896
+ });
1897
+ }
1898
+ };
1899
+
1900
+ // src/consts.ts
1901
+ var myopAttributes = {
1902
+ id: "myop-id"
1903
+ };
1904
+
1905
+ // src/common/messageHandlers/helpers.ts
1906
+ var getElementsByRef = (ref, el) => {
1907
+ return el.querySelectorAll("[".concat(myopAttributes.id, "='").concat(ref.refConfig.selector, "']"));
1908
+ };
1909
+
1910
+ // src/webcomponent/messageHandlers/bindOnClickHandler.ts
1911
+ var BindOnClickHandler = class extends BaseWebComponentMessageHandler {
1912
+ constructor() {
1913
+ super(...arguments);
1914
+ __publicField(this, "messageType", MyopMessages.BindClickMessage);
1915
+ __publicField(this, "innerExecutor", (event, shadowRootRef, messageToHost) => {
1916
+ const items = getElementsByRef(event.ref, shadowRootRef.shadowRoot);
1917
+ const cleanupTasks = [];
1918
+ items.forEach((item) => {
1919
+ const handler = () => {
1920
+ messageToHost(new ClickReplayMessage(event.handlerUniqueId));
1921
+ };
1922
+ item.addEventListener("click", handler);
1923
+ cleanupTasks.push(() => {
1924
+ item.removeEventListener("click", handler);
1925
+ });
1926
+ });
1927
+ return () => {
1928
+ cleanupTasks.forEach((task) => task());
1929
+ };
1930
+ });
1931
+ }
1932
+ };
1933
+
1934
+ // src/webcomponent/messageHandlers/changeTextHandler.ts
1935
+ var ChangeTextHandler = class extends BaseWebComponentMessageHandler {
1936
+ constructor() {
1937
+ super(...arguments);
1938
+ __publicField(this, "messageType", MyopMessages.ChangeTextMessage);
1939
+ __publicField(this, "innerExecutor", (event, shadowRootRef) => {
1940
+ const items = getElementsByRef(event.ref, shadowRootRef.shadowRoot);
1941
+ items.forEach((item) => {
1942
+ item.textContent = event.content;
1943
+ });
1944
+ });
1945
+ }
1946
+ };
1947
+
1948
+ // src/webcomponent/shadowRootRef.ts
1949
+ var ShadowRootRef = class extends RootRef {
1950
+ constructor(container, shadowRoot) {
1951
+ super(container, shadowRoot);
1952
+ this.container = container;
1953
+ this.shadowRoot = shadowRoot;
1954
+ }
1955
+ };
1956
+
1957
+ // src/webcomponent/messageHandlers/DetectMyopRefsMessageHandler.ts
1958
+ var DetectMyopRefsMessageHandler = class extends BaseWebComponentMessageHandler {
1959
+ constructor() {
1960
+ super(...arguments);
1961
+ __publicField(this, "innerExecutor", (event, shadowRootRef) => {
1962
+ const allMyopItems = shadowRootRef.shadowRoot.querySelectorAll("[".concat(myopAttributes.id, "]"));
1963
+ let myopRefs = [];
1964
+ allMyopItems.forEach((item) => {
1965
+ const myopId = item.getAttribute(myopAttributes.id);
1966
+ if (myopId) {
1967
+ myopRefs.push(new MyopElementRef(myopId, item.tagName, item.getBoundingClientRect(), item.offsetTop, item.offsetLeft));
1968
+ }
1969
+ });
1970
+ this.messageToHost(new DetectedMyopRefsMessage(event.handlerUniqueId, myopRefs));
1971
+ });
1972
+ __publicField(this, "messageType", MyopMessages.DetectMyopRefsMessage);
1973
+ }
1974
+ };
1975
+
1976
+ // src/webcomponent/messageHandlers/setAttributeHandler.ts
1977
+ var setAttributeHandler = class extends BaseWebComponentMessageHandler {
1978
+ constructor() {
1979
+ super(...arguments);
1980
+ __publicField(this, "messageType", MyopMessages.SetAttributeMessage);
1981
+ __publicField(this, "innerExecutor", (event, shadowRootRef) => {
1982
+ const items = getElementsByRef(event.ref, shadowRootRef.shadowRoot);
1983
+ items.forEach((item) => {
1984
+ item.setAttribute(event.name, event.value);
1985
+ });
1986
+ });
1987
+ }
1988
+ };
1989
+
1990
+ // src/webcomponent/messageHandlers/addEventListenerHandler.ts
1991
+ var AddEventListenerHandler = class extends BaseWebComponentMessageHandler {
1992
+ constructor() {
1993
+ super(...arguments);
1994
+ __publicField(this, "messageType", MyopMessages.AddEventListenerMessage);
1995
+ __publicField(this, "innerExecutor", (event, shadowRootRef, messageToHost) => {
1996
+ const items = getElementsByRef(event.ref, shadowRootRef.shadowRoot);
1997
+ const cleanupTasks = [];
1998
+ items.forEach((item) => {
1999
+ const handler = (e) => {
2000
+ messageToHost(new EventListenerCallbackMessage(event.handlerUniqueId, makeSerializable(e, event.serializableSkeleton)));
2001
+ };
2002
+ item.addEventListener(event.type, handler);
2003
+ cleanupTasks.push(() => {
2004
+ item.removeEventListener(event.type, handler);
2005
+ });
2006
+ });
2007
+ return () => {
2008
+ cleanupTasks.forEach((task) => task());
2009
+ };
2010
+ });
2011
+ }
2012
+ };
2013
+
2014
+ // src/webcomponent/messageHandlers/CreateRefComponentMessageHandler.ts
2015
+ var CreateRefComponentMessageHandler = class extends BaseWebComponentMessageHandler {
2016
+ constructor() {
2017
+ super(...arguments);
2018
+ __publicField(this, "messageType", MyopMessages.CreateRefComponentMessage);
2019
+ __publicField(this, "innerExecutor", (event, shadowRootRef, messageToHost) => {
2020
+ const createRef = async () => {
2021
+ const allItems = shadowRootRef.shadowRoot.querySelectorAll("[".concat(myopAttributes.id, "='").concat(event.refConfig.selector, "']"));
2022
+ if (allItems.length === 1) {
2023
+ const hostSDK2 = HostSDK.Instance();
2024
+ const refComponent = hostSDK2.components.find((c) => c.id === event.options.id);
2025
+ if (refComponent) {
2026
+ refComponent.dispose();
2027
+ } else {
2028
+ }
2029
+ const index = hostSDK2.components.indexOf(refComponent);
2030
+ if (index !== -1) {
2031
+ hostSDK2.components.splice(index, 1);
2032
+ } else {
2033
+ }
2034
+ const implementationComponent = await hostSDK2.loadComponent(
2035
+ event.nestedComponentConfig,
2036
+ allItems.item(0),
2037
+ event.options
2038
+ );
2039
+ const nestedRefConfig = [];
2040
+ Object.keys(implementationComponent.refs).forEach((refName) => {
2041
+ let ref = implementationComponent.refs[refName];
2042
+ ref = ref.__nonProxied || ref;
2043
+ if (ref.componentDefinition) {
2044
+ nestedRefConfig.push({
2045
+ refName,
2046
+ componentDefinitionId: ref.componentDefinition.id
2047
+ });
2048
+ }
2049
+ });
2050
+ messageToHost(new RefComponentCreatedMessage(event.handlerUniqueId, nestedRefConfig));
2051
+ } else {
2052
+ console.error("CreateRefComponentMessageHandler - DOM element not found");
2053
+ this.messageToHost(new RefComponentCreatedMessage(event.handlerUniqueId, [], true));
2054
+ debugger;
2055
+ }
2056
+ };
2057
+ createRef().then();
2058
+ });
2059
+ }
2060
+ };
2061
+
2062
+ // src/common/messageHandlers/executeScriptHandler.ts
2063
+ var ExecuteScriptHandlerExecutor = (event, replier, rootRef) => {
2064
+ const __scriptInputs = event.scriptInputs ? event.scriptInputs : {};
2065
+ __scriptInputs.makeSerializable = makeSerializable;
2066
+ __scriptInputs.send = replier;
2067
+ __scriptInputs.rootRef = rootRef;
2068
+ __scriptInputs.__scriptInputs = __scriptInputs;
2069
+ const dynamicFunction = new Function("return (".concat(event.script, ")(...arguments)"));
2070
+ const ret = dynamicFunction(__scriptInputs);
2071
+ replier(ret);
2072
+ };
2073
+
2074
+ // src/webcomponent/messageHandlers/executeScriptHandler.ts
2075
+ var ExecuteScriptHandler = class extends BaseWebComponentMessageHandler {
2076
+ constructor() {
2077
+ super(...arguments);
2078
+ __publicField(this, "messageType", MyopMessages.ExecuteScriptMessage);
2079
+ __publicField(this, "innerExecutor", (event, shadowRootRef, messageToHost) => {
2080
+ const replier = (data) => {
2081
+ messageToHost(new ExecuteScriptReplyMessage(event.handlerUniqueId, data));
2082
+ };
2083
+ ExecuteScriptHandlerExecutor(event, replier, shadowRootRef);
2084
+ });
2085
+ }
2086
+ };
2087
+
2088
+ // src/webcomponent/messageHandlers/GetElementValueHandler.ts
2089
+ var getInputValue = (element) => {
2090
+ if (!element) return null;
2091
+ if (element.tagName === "FORM") {
2092
+ const formData = new FormData(element);
2093
+ const dataObject = {
2094
+ formData: {},
2095
+ unmappedData: []
2096
+ };
2097
+ const elements = element.querySelectorAll("input, select, textarea");
2098
+ let autoNameIndexer = -1;
2099
+ elements.forEach((element2) => {
2100
+ if (typeof element2.value === "string") {
2101
+ const myopId = element2.getAttribute(myopAttributes.id);
2102
+ let key = element2.getAttribute("name");
2103
+ const nodeData = {
2104
+ id: element2.id,
2105
+ name: key,
2106
+ value: getInputValue(element2),
2107
+ required: element2.required,
2108
+ validity: makeSerializable(element2.validity, true),
2109
+ myopId
2110
+ };
2111
+ if (!key) {
2112
+ dataObject.unmappedData.push(nodeData);
2113
+ } else {
2114
+ if (dataObject.formData[key]) {
2115
+ if (dataObject.formData[key].value) {
2116
+ dataObject.unmappedData.push(nodeData);
2117
+ } else {
2118
+ dataObject.unmappedData.push(dataObject.formData[key]);
2119
+ dataObject.formData[key] = nodeData;
2120
+ }
2121
+ } else {
2122
+ dataObject.formData[key] = nodeData;
2123
+ }
2124
+ }
2125
+ }
2126
+ });
2127
+ return dataObject;
2128
+ }
2129
+ if (element.type === "checkbox" || element.type === "radio") {
2130
+ return element.checked ? element.value : null;
2131
+ }
2132
+ if (element.tagName === "INPUT" || element.tagName === "TEXTAREA") {
2133
+ return element.value;
2134
+ }
2135
+ if (element.tagName === "SELECT") {
2136
+ return element.value;
2137
+ }
2138
+ if (element.isContentEditable) {
2139
+ return element.innerText || element.textContent;
2140
+ }
2141
+ return null;
2142
+ };
2143
+ var GetElementValueHandler = class extends BaseWebComponentMessageHandler {
2144
+ constructor() {
2145
+ super(...arguments);
2146
+ __publicField(this, "messageType", MyopMessages.GetElementValueMessage);
2147
+ __publicField(this, "innerExecutor", (event, shadowRootRef, messageToHost) => {
2148
+ const items = getElementsByRef(event.ref, shadowRootRef.shadowRoot);
2149
+ items.forEach((item) => {
2150
+ messageToHost(new ElementValueReplayMessage(getInputValue(item)), event);
2151
+ });
2152
+ });
2153
+ }
2154
+ };
2155
+
2156
+ // src/webcomponent/messageHandlers/setInnerHtmlHandler.ts
2157
+ var SetInnerHtmlHandler = class extends BaseWebComponentMessageHandler {
2158
+ constructor() {
2159
+ super(...arguments);
2160
+ __publicField(this, "messageType", MyopMessages.SetInnerHtml);
2161
+ __publicField(this, "innerExecutor", (event, shadowRootRef) => {
2162
+ const items = getElementsByRef(event.ref, shadowRootRef.shadowRoot);
2163
+ items.forEach((item) => {
2164
+ item.innerHTML = event.content;
2165
+ });
2166
+ });
2167
+ }
2168
+ };
2169
+
2170
+ // src/webcomponent/WebComponentSDK.ts
2171
+ var WebComponentSDK = class extends BaseMyopSDK {
2172
+ constructor() {
2173
+ super(...arguments);
2174
+ __publicField(this, "alwaysPassEnvelopesToHost", true);
2175
+ //when new web component created.
2176
+ __publicField(this, "connectedCallback", (container, shadow) => {
2177
+ container.addEventListener(myopWebcomponentConsts.webcomponent_message_key, (e) => {
2178
+ const eventContent = e.data ? e.data : e.detail;
2179
+ if (!eventContent || !eventContent.myop) {
2180
+ debugger;
2181
+ throw new Error("recvied webcomponent_message with wrong type");
2182
+ } else {
2183
+ const message = eventContent;
2184
+ this.handleIncomeMessages(e);
2185
+ if (message.messageType === MyopMessages.InitMessage) {
2186
+ const newComponentId = message.content.id;
2187
+ this.components[newComponentId].context = new ShadowRootRef(container, shadow);
2188
+ }
2189
+ }
2190
+ });
2191
+ setTimeout(() => {
2192
+ this.messageToHost(new InitRequest());
2193
+ }, 1);
2194
+ });
2195
+ __publicField(this, "messageToHost", (message, replayTo) => {
2196
+ message.direction = MessageDirection.up;
2197
+ if (!message.replayToHandler && (replayTo == null ? void 0 : replayTo.handlerUniqueId))
2198
+ message.replayToHandler = replayTo.handlerUniqueId;
2199
+ window.myop.hostSDK.send(message);
2200
+ });
2201
+ __publicField(this, "supportedHandlers", [
2202
+ new ChangeTextHandler(this.messageToHost, this.components),
2203
+ new SetInnerHtmlHandler(this.messageToHost, this.components),
2204
+ new BindOnClickHandler(this.messageToHost, this.components),
2205
+ new DetectMyopRefsMessageHandler(this.messageToHost, this.components),
2206
+ new setAttributeHandler(this.messageToHost, this.components),
2207
+ new AddEventListenerHandler(this.messageToHost, this.components),
2208
+ new ExecuteScriptHandler(this.messageToHost, this.components),
2209
+ new GetElementValueHandler(this.messageToHost, this.components),
2210
+ //
2211
+ new CreateRefComponentMessageHandler(this.messageToHost, this.components)
2212
+ ]);
2213
+ __publicField(this, "init", () => {
2214
+ });
2215
+ }
2216
+ };
2217
+ defineDynamicImport("WebComponentSDK", WebComponentSDK);
2218
+
2219
+ // src/host/loaders/HTMLComponentLoader.ts
2220
+ var seen2 = [];
2221
+ var sdk;
2222
+ var getInitiatedSdk = async () => {
2223
+ if (!sdk) {
2224
+ sdk = new WebComponentSDK();
2225
+ sdk.init();
2226
+ }
2227
+ return sdk;
2228
+ };
2229
+ function createHTMLElementConstructor(htmlString, ShadowRootMode) {
2230
+ return class extends HTMLElement {
2231
+ connectedCallback() {
2232
+ const mode = ShadowRootMode === ShadowRootModeType.open ? "open" : "closed";
2233
+ const shadow = this.attachShadow({ mode });
2234
+ getInitiatedSdk().then((sdk2) => {
2235
+ sdk2.connectedCallback(this, shadow);
2236
+ shadow.innerHTML = htmlString;
2237
+ });
2238
+ }
2239
+ };
2240
+ }
2241
+ var createCustomWebComponent = (componentName, html, ShadowRootMode) => {
2242
+ customElements.define(componentName, createHTMLElementConstructor(html, ShadowRootMode));
2243
+ console.log("define('".concat(componentName, "') was called, web component ready to use"));
2244
+ };
2245
+ var toWebComponentName = (str) => {
2246
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/(\d+)/g, "-$1").toLowerCase();
2247
+ };
2248
+ var toCustomElementName = (name) => {
2249
+ name = toWebComponentName(name);
2250
+ return name.replace(/_/g, "-");
2251
+ };
2252
+ var HTMLComponentLoader = class extends BaseMyopLoader {
2253
+ constructor() {
2254
+ super(...arguments);
2255
+ __publicField(this, "type", SkinLoaders.HTMLLoader);
2256
+ __publicField(this, "load", async (componentDefinition, skin, container, options) => {
2257
+ const loaderConfig = skin.loader;
2258
+ let domId = "myop-comp-".concat(uuidv4());
2259
+ let element;
2260
+ if (loaderConfig.shadowRootMode === ShadowRootModeType.localFrame) {
2261
+ const uniqId = uuidv4();
2262
+ const domId2 = "myop-comp-".concat(uniqId);
2263
+ let IframeElement = document.createElement("iframe");
2264
+ if (!container.querySelector('[id^="myop-comp-"]'))
2265
+ container.innerHTML = "";
2266
+ if (options == null ? void 0 : options.hidden) {
2267
+ IframeElement.style.visibility = "hidden";
2268
+ }
2269
+ IframeElement = this.appendChild(container, IframeElement, options);
2270
+ IframeElement.id = domId2;
2271
+ IframeElement.setAttribute("style", "\n padding: 0;\n margin: 0;\n overflow: hidden;\n border: none;\n opacity: ".concat((options == null ? void 0 : options.hidden) ? "0" : "1", ";\n width: 100%;\n height: 100%;\n position: ").concat((options == null ? void 0 : options.hidden) ? "absolute" : "static", ";\n pointer-events: ").concat((options == null ? void 0 : options.hidden) ? "none" : "all", ";\n "));
2272
+ container.appendChild(IframeElement);
2273
+ const doc = IframeElement.contentDocument || IframeElement.contentWindow.document;
2274
+ doc.open();
2275
+ let HTML2Render = loaderConfig.HTML;
2276
+ if (options == null ? void 0 : options._inspection) {
2277
+ const parser = new DOMParser();
2278
+ const _doc = parser.parseFromString(loaderConfig.HTML, "text/html");
2279
+ const myop_preview_script = _doc.getElementById("myop_preview");
2280
+ myop_preview_script == null ? void 0 : myop_preview_script.removeAttribute("type");
2281
+ const temp = _doc.implementation.createHTMLDocument();
2282
+ temp.body.innerHTML = "<script>\n const beforeKeysWindow = new Set(Object.keys(window));\n window.myopState = {\n beforeKeysWindow,\n };\n <\/script>";
2283
+ const node = temp.body.firstChild;
2284
+ if (node && _doc.head) {
2285
+ _doc.head.insertBefore(_doc.importNode(node, true), _doc.head.firstChild);
2286
+ }
2287
+ HTML2Render = _doc.documentElement.outerHTML;
2288
+ }
2289
+ doc.writeln(HTML2Render);
2290
+ doc.writeln('<script src="'.concat(window.myop.__ROOT_SDK_PUBLIC_URL__, '"><\/script>\n <script>\n \n window.__federation__.__public_path__ = window.__federation__.__public_path__;\n \n const __myop_init = async () => {\n const {IframeSDK} = (await window.myop.rootSDK.getIframeModule());\n const sdk = new IframeSDK()\n sdk.init();\n }\n \n __myop_init().then();\n \n <\/script>'));
2291
+ doc.close();
2292
+ const comp = new MyopIframeComponent(componentDefinition, skin, container, IframeElement, options);
2293
+ if (loaderConfig.autoHeight) {
2294
+ IframeElement.onload = () => {
2295
+ comp.observeSizeBasedOnDocumentElement();
2296
+ };
2297
+ }
2298
+ return comp;
2299
+ }
2300
+ if (loaderConfig.shadowRootMode === ShadowRootModeType.none) {
2301
+ const template = document.createElement("template");
2302
+ template.innerHTML = loaderConfig.HTML;
2303
+ element = template.content.firstElementChild;
2304
+ getInitiatedSdk().then((sdk2) => {
2305
+ sdk2.connectedCallback(element, element);
2306
+ });
2307
+ } else {
2308
+ const customElementName = toCustomElementName(componentDefinition.name + skin.id);
2309
+ if (!seen2.includes(customElementName)) {
2310
+ createCustomWebComponent(customElementName, loaderConfig.HTML, loaderConfig.shadowRootMode);
2311
+ seen2.push(customElementName);
2312
+ }
2313
+ element = document.createElement(customElementName);
2314
+ }
2315
+ if (!container.querySelector('[id^="myop-comp-"]'))
2316
+ container.innerHTML = "";
2317
+ element.id = domId;
2318
+ if (options == null ? void 0 : options.hidden) {
2319
+ element.style.opacity = "0";
2320
+ element.style.position = "absolute";
2321
+ element.style.height = "0";
2322
+ element.style.width = "0";
2323
+ element.style.pointerEvents = "none";
2324
+ element.style.visibility = "hidden";
2325
+ }
2326
+ this.appendChild(container, element, options);
2327
+ return new MyopWebComponent(componentDefinition, skin, container, element, options);
2328
+ });
2329
+ }
2330
+ };
2331
+
2332
+ // src/host/myopOverride.ts
2333
+ var checkMyopOverride = async (componentConfig) => {
2334
+ try {
2335
+ const url = new URL(window.location.href);
2336
+ const params = new URLSearchParams(url.search);
2337
+ const myopOverride = params.get("myopOverride");
2338
+ if (myopOverride) {
2339
+ const [source, ...uuids] = decompressUUIDs(myopOverride);
2340
+ switch (source) {
2341
+ case "component":
2342
+ {
2343
+ const [componentId, skinId] = uuids;
2344
+ const componentToOverride = await CloudRepository.Main.fetchComponent(componentId);
2345
+ if (componentToOverride) {
2346
+ const skin = componentToOverride.type.skins.find((skin2) => skin2.id === skinId);
2347
+ if (skin) {
2348
+ componentToOverride.instance.skinSelector = {
2349
+ type: SkinSelectorTypes.Dedicated,
2350
+ skin: {
2351
+ id: skinId
2352
+ }
2353
+ };
2354
+ return componentToOverride;
2355
+ }
2356
+ }
2357
+ }
2358
+ break;
2359
+ // case 'flow': {
2360
+ default:
2361
+ {
2362
+ const [flowId, experimentId] = decompressUUIDs(myopOverride);
2363
+ const flow = await CloudRepository.Main.fetchFlow(flowId);
2364
+ const componentToOverride = flow.components.find((c) => c.type.id === componentConfig.type.id);
2365
+ if (componentToOverride) {
2366
+ if (componentToOverride.instance.skinSelector.type === SkinSelectorTypes.Segmented) {
2367
+ if (componentToOverride.instance.resolvedExperiences) {
2368
+ const resolvedExperience = componentToOverride.instance.resolvedExperiences.find((e) => e.id === experimentId);
2369
+ if ((resolvedExperience == null ? void 0 : resolvedExperience.type) === ExperienceTypes.Segment) {
2370
+ const typedResolvedExperience = resolvedExperience;
2371
+ const typedSkinSelector = componentToOverride.instance.skinSelector;
2372
+ const segment = typedSkinSelector.segments.find((s) => s.segmentId === typedResolvedExperience.segment.id);
2373
+ if (segment) {
2374
+ componentToOverride.instance.skinSelector = segment == null ? void 0 : segment.skinSelector;
2375
+ return componentToOverride;
2376
+ }
2377
+ }
2378
+ }
2379
+ }
2380
+ }
2381
+ }
2382
+ break;
2383
+ }
2384
+ }
2385
+ } finally {
2386
+ return null;
2387
+ }
2388
+ };
2389
+
2390
+ // src/host/hostSDK.ts
2391
+ var __ROOT_SDK_PUBLIC_URL__ = "https://cdn.myop.dev/sdk/next/myop_sdk.min.js";
2392
+ var HostSDK = class {
2393
+ constructor() {
2394
+ __publicField(this, "components2init", []);
2395
+ __publicField(this, "components", []);
2396
+ __publicField(this, "componentsLoaders", []);
2397
+ __publicField(this, "initiated", false);
2398
+ __publicField(this, "version", myop_sdk_version_default);
2399
+ __publicField(this, "type2InstanceCount", {});
2400
+ __publicField(this, "assignId", (componentDefinition) => {
2401
+ if (!this.type2InstanceCount[componentDefinition.id]) {
2402
+ this.type2InstanceCount[componentDefinition.id] = 0;
2403
+ }
2404
+ return "".concat(componentDefinition.id, "_").concat(++this.type2InstanceCount[componentDefinition.id]);
2405
+ });
2406
+ //TODO : fix the inspect implementation inside refComponent
2407
+ //then inspected maybe can be dropped
2408
+ __publicField(this, "inspected", false);
2409
+ __publicField(this, "inspect", () => {
2410
+ if (this.inspected)
2411
+ return;
2412
+ this.inspected = true;
2413
+ this.components.forEach((component) => {
2414
+ if (component.inspect) {
2415
+ component.inspect();
2416
+ }
2417
+ });
2418
+ });
2419
+ __publicField(this, "incomingMessageHandler", (event) => {
2420
+ if (event.origin === document.location.origin) {
2421
+ }
2422
+ if (event.data.myop) {
2423
+ if (event.data.direction !== MessageDirection.up && event.data.messageType !== MyopMessages.EnvelopedMessage) {
2424
+ return;
2425
+ }
2426
+ const myopMessage = event.data;
2427
+ if (myopMessage.messageType === MyopMessages.InitRequest) {
2428
+ this.components2init.forEach((component2) => {
2429
+ component2.send(new InitMessage(component2.id));
2430
+ });
2431
+ return;
2432
+ }
2433
+ if (myopMessage.messageType === MyopMessages.InitResponse) {
2434
+ this.components2init = this.components2init.filter((component2) => component2.id !== myopMessage.content.id);
2435
+ const initiatedComponent = this.components.find((component2) => {
2436
+ var _a;
2437
+ return component2.id === ((_a = myopMessage.content) == null ? void 0 : _a.id);
2438
+ });
2439
+ initiatedComponent == null ? void 0 : initiatedComponent.setInitiated();
2440
+ return;
2441
+ }
2442
+ if (myopMessage.messageType === MyopMessages.EnvelopedMessage) {
2443
+ const typedMessage = myopMessage;
2444
+ const refComponent = this.components.find((component2) => component2.id === typedMessage.destination);
2445
+ if (refComponent) {
2446
+ if (typedMessage.direction === MessageDirection.down) {
2447
+ if (typedMessage.message.messageType === ExecuteComponentMethod.name) {
2448
+ refComponent.onMessageReceived(typedMessage.message);
2449
+ } else {
2450
+ typedMessage.message.route = typedMessage.route;
2451
+ refComponent.send(typedMessage.message);
2452
+ }
2453
+ return;
2454
+ }
2455
+ } else {
2456
+ const innerComponent = this.components.find((component2) => component2.id === typedMessage.message.destination);
2457
+ if (innerComponent) {
2458
+ innerComponent.send(typedMessage.message);
2459
+ } else {
2460
+ }
2461
+ }
2462
+ return;
2463
+ }
2464
+ const component = this.components.find((component2) => component2.id === myopMessage.destination);
2465
+ if (!component) {
2466
+ if (window.myop.IframeSDK) {
2467
+ window.myop.IframeSDK.messageToHost(myopMessage);
2468
+ }
2469
+ return;
2470
+ }
2471
+ if (component) {
2472
+ if (component.onMessageReceived(myopMessage)) {
2473
+ return;
2474
+ } else {
2475
+ if (window.myop.IframeSDK)
2476
+ window.myop.IframeSDK.messageToHost(myopMessage);
2477
+ }
2478
+ }
2479
+ }
2480
+ });
2481
+ __publicField(this, "send", (message) => {
2482
+ const syntheticEvent = new MessageEvent(
2483
+ "",
2484
+ { data: message }
2485
+ );
2486
+ this.incomingMessageHandler(syntheticEvent);
2487
+ });
2488
+ __publicField(this, "init", (customComponentLoaderCreators) => {
2489
+ if (this.initiated) {
2490
+ throw new Error("hostSDK already initiated");
2491
+ }
2492
+ const basicLoaders = [
2493
+ new MyopIframeLoader(),
2494
+ new WebcomponentLoader(),
2495
+ new HTMLComponentLoader()
2496
+ ];
2497
+ this.componentsLoaders = [
2498
+ ...basicLoaders
2499
+ ];
2500
+ if (customComponentLoaderCreators) {
2501
+ const loaderByType = {};
2502
+ customComponentLoaderCreators.forEach((customComponentLoaderCreator) => {
2503
+ const customLoader = new customComponentLoaderCreator(this.componentsLoaders);
2504
+ loaderByType[customLoader.type] = customLoader;
2505
+ });
2506
+ this.componentsLoaders.forEach((loader) => {
2507
+ if (!loaderByType[loader.type])
2508
+ loaderByType[loader.type] = loader;
2509
+ });
2510
+ this.componentsLoaders = Object.values(loaderByType);
2511
+ }
2512
+ window.addEventListener(
2513
+ "message",
2514
+ this.incomingMessageHandler,
2515
+ false
2516
+ );
2517
+ console.log("myop hostSDK initiated", document.location.href);
2518
+ this.initiated = true;
2519
+ });
2520
+ __publicField(this, "_getSkinIdBySkinSelector", async (skinSelector, experiences = [], hooks) => {
2521
+ var _a;
2522
+ async function asyncFind(array, predicate) {
2523
+ for (const item of array) {
2524
+ if (await predicate(item)) {
2525
+ return item;
2526
+ }
2527
+ }
2528
+ return void 0;
2529
+ }
2530
+ switch (skinSelector.type) {
2531
+ // @ts-ignore
2532
+ case "DedicatedSkin":
2533
+ //backward compatibility
2534
+ case SkinSelectorTypes.Dedicated:
2535
+ {
2536
+ let selectedSkinId = ((_a = skinSelector.skin) == null ? void 0 : _a.id) || skinSelector.skins[0].id;
2537
+ return selectedSkinId;
2538
+ }
2539
+ break;
2540
+ case SkinSelectorTypes.Segmented:
2541
+ {
2542
+ const typedSkinSelector = skinSelector;
2543
+ const segment = await asyncFind(typedSkinSelector.segments, async (segment2) => {
2544
+ if (segment2.segmentId === "Default") {
2545
+ return true;
2546
+ }
2547
+ const experience = experiences.find((experience2) => {
2548
+ if (experience2.type === ExperienceTypes.Segment) {
2549
+ return experience2.segment.id === segment2.segmentId;
2550
+ }
2551
+ return false;
2552
+ });
2553
+ if (!experience) {
2554
+ throw new Error("experience not found");
2555
+ }
2556
+ const typedExperience = experience;
2557
+ const typedSegment = typedExperience.segment;
2558
+ const segmentFunction = (hooks ? hooks : {})[typedSegment.function];
2559
+ if (segmentFunction) {
2560
+ const results = await segmentFunction();
2561
+ return results;
2562
+ } else {
2563
+ console.warn("segmentId:".concat(segment2.segmentId, ", ").concat(typedSegment.function, " function not provided !"));
2564
+ }
2565
+ return false;
2566
+ });
2567
+ if (segment)
2568
+ return this._getSkinIdBySkinSelector(segment.skinSelector, experiences);
2569
+ else {
2570
+ debugger;
2571
+ }
2572
+ }
2573
+ break;
2574
+ default: {
2575
+ debugger;
2576
+ }
2577
+ }
2578
+ return "";
2579
+ });
2580
+ __publicField(this, "runSkinSelector", async (componentConfig, hooks) => {
2581
+ const skinId = await this._getSkinIdBySkinSelector(componentConfig.instance.skinSelector, componentConfig.instance.resolvedExperiences, hooks);
2582
+ return componentConfig.type.skins.find((skin) => skin.id === skinId);
2583
+ });
2584
+ __publicField(this, "loaderHooks");
2585
+ __publicField(this, "loadComponent", async (componentConfig, container, options) => {
2586
+ var _a, _b, _c, _d;
2587
+ if (!container) {
2588
+ debugger;
2589
+ throw new Error("no container was found for this component");
2590
+ }
2591
+ const overriddenConfig = await checkMyopOverride(componentConfig);
2592
+ if (overriddenConfig) {
2593
+ componentConfig = overriddenConfig;
2594
+ }
2595
+ const hooks = __spreadValues(__spreadValues({}, (_a = this.loaderHooks) != null ? _a : {}), (_b = options == null ? void 0 : options.hooks) != null ? _b : {});
2596
+ const ref = container;
2597
+ if (ref.myop) {
2598
+ if (ref.component) {
2599
+ componentConfig = __spreadValues({}, componentConfig);
2600
+ componentConfig.instance = __spreadValues({}, componentConfig.instance);
2601
+ let selectedSkin2 = await this.runSkinSelector(componentConfig, hooks);
2602
+ if (!selectedSkin2) {
2603
+ throw new Error("runSkinSelector failed to choose skin, check the provided config");
2604
+ }
2605
+ if ((_c = options == null ? void 0 : options.hooks) == null ? void 0 : _c.afterSkinSelected) {
2606
+ selectedSkin2 = await options.hooks.afterSkinSelected(__spreadValues({}, selectedSkin2));
2607
+ }
2608
+ componentConfig.instance.skinSelector = {
2609
+ type: SkinSelectorTypes.Dedicated,
2610
+ skin: selectedSkin2
2611
+ // skins: [selectedSkin]
2612
+ };
2613
+ if (options) {
2614
+ options = __spreadValues({}, options);
2615
+ delete options.hooks;
2616
+ }
2617
+ const refComponent = await createRefComponent(ref, componentConfig, this.components, options);
2618
+ return refComponent;
2619
+ } else {
2620
+ throw new Error("load component got a detached ref.");
2621
+ }
2622
+ }
2623
+ container = container;
2624
+ let selectedSkin = await this.runSkinSelector(componentConfig, hooks);
2625
+ if (!selectedSkin) {
2626
+ throw new Error("runSkinSelector failed to choose skin, check the provided config");
2627
+ }
2628
+ if ((_d = options == null ? void 0 : options.hooks) == null ? void 0 : _d.afterSkinSelected) {
2629
+ selectedSkin = await options.hooks.afterSkinSelected(__spreadValues({}, selectedSkin));
2630
+ }
2631
+ const componentLoader = this.componentsLoaders.find((loader) => loader.type === selectedSkin.loader.type);
2632
+ if (!componentLoader) {
2633
+ debugger;
2634
+ throw new Error('no loader "'.concat(selectedSkin.loader.type, '" was found for component'));
2635
+ }
2636
+ let component = await componentLoader.load(componentConfig.type, selectedSkin, container, options);
2637
+ if (!component.isInitiated)
2638
+ this.components2init.push(component);
2639
+ component.bind("onDispose", () => {
2640
+ this.components = this.components.filter((c) => c !== component);
2641
+ this.components2init = this.components2init.filter((c) => c !== component);
2642
+ return true;
2643
+ });
2644
+ this.components.push(component);
2645
+ if (!options || options.connectProps !== false) {
2646
+ component = connectProps(component, componentConfig.type.props, selectedSkin);
2647
+ }
2648
+ try {
2649
+ await connectRefs(component, componentConfig, this.components);
2650
+ } catch (e) {
2651
+ throw e;
2652
+ }
2653
+ if (!(options == null ? void 0 : options.skipInit))
2654
+ await component.initiated();
2655
+ return component;
2656
+ });
2657
+ __publicField(this, "navigate", async (component, newComponentConfig, options) => {
2658
+ if (component.parent) {
2659
+ throw new Error("Navigating on remote ref components is not implemented yet");
2660
+ }
2661
+ if (options == null ? void 0 : options.staged) {
2662
+ let newComponent = await this.loadComponent(newComponentConfig, component.container, __spreadValues({
2663
+ hidden: true,
2664
+ relative: { direction: "after", child: component.element }
2665
+ }, options));
2666
+ if (options.init)
2667
+ await options.init(newComponent);
2668
+ newComponent.show();
2669
+ component.dispose();
2670
+ return newComponent;
2671
+ } else {
2672
+ const nextSibling = component.element.nextSibling;
2673
+ component.dispose();
2674
+ return this.loadComponent(newComponentConfig, component.container, __spreadValues({
2675
+ relative: {
2676
+ direction: "before",
2677
+ child: nextSibling
2678
+ }
2679
+ }, options));
2680
+ }
2681
+ });
2682
+ }
2683
+ };
2684
+ __publicField(HostSDK, "Instance", () => window.myop.hostSDK);
2685
+ if (!window.myop) {
2686
+ window.myop = {
2687
+ __ROOT_SDK_PUBLIC_URL__
2688
+ };
2689
+ }
2690
+ if (!window.myop.hostSDK) {
2691
+ const _hostSDK = new HostSDK();
2692
+ _hostSDK.init();
2693
+ if (!window.myop) {
2694
+ window.myop = {
2695
+ __ROOT_SDK_PUBLIC_URL__
2696
+ };
2697
+ }
2698
+ window.myop.hostSDK = _hostSDK;
2699
+ }
2700
+ var hostSDK = window.myop.hostSDK;
2701
+ defineDynamicImport("hostSDK", hostSDK);
2702
+
2703
+ // src/helpers/EnableV2.ts
2704
+ var _v2_CloudRepository = class _v2_CloudRepository {
2705
+ constructor(_baseUrl = "https://cloud.myop.dev") {
2706
+ this._baseUrl = _baseUrl;
2707
+ __publicField(this, "variants", {});
2708
+ }
2709
+ async fetchComponent(componentId, environmentIdentifier) {
2710
+ if (!this.variants[componentId]) {
2711
+ this.variants[componentId] = new Promise(
2712
+ async (resolve, reject) => {
2713
+ try {
2714
+ const res = await fetch(
2715
+ "".concat(this._baseUrl, "/consume?id=").concat(componentId, "&env=").concat(environmentIdentifier)
2716
+ );
2717
+ const json = await res.json();
2718
+ resolve(json.item);
2719
+ } catch (e) {
2720
+ reject(e);
2721
+ }
2722
+ }
2723
+ );
2724
+ }
2725
+ return await this.variants[componentId];
2726
+ }
2727
+ };
2728
+ __publicField(_v2_CloudRepository, "Main", new _v2_CloudRepository());
2729
+ var v2_CloudRepository = _v2_CloudRepository;
2730
+ var enableV2 = (environmentIdentifier, cloudRepository) => {
2731
+ const _cloudRepository = cloudRepository ? cloudRepository : new v2_CloudRepository();
2732
+ return {
2733
+ loadComponent: async (componentId, container, options) => {
2734
+ const config = await _cloudRepository.fetchComponent(componentId, environmentIdentifier);
2735
+ if (!config.consume_variant || !config.consume_variant.length) {
2736
+ console.warn(
2737
+ '[Myop Warning] Component "'.concat(componentId, '" has no implementation for environment "').concat(environmentIdentifier, '".')
2738
+ );
2739
+ }
2740
+ const componentConfig = {
2741
+ instance: {
2742
+ id: "auto",
2743
+ componentId: config.componentId,
2744
+ componentName: config.name,
2745
+ skinSelector: {
2746
+ type: "Dedicated",
2747
+ skin: {
2748
+ id: "skin_auto_v2_converted"
2749
+ }
2750
+ }
2751
+ },
2752
+ type: {
2753
+ id: config.id,
2754
+ name: config.name,
2755
+ description: config.description,
2756
+ props: [
2757
+ {
2758
+ id: "in_auto_v2_converted",
2759
+ name: "myop_init_interface",
2760
+ type: "any",
2761
+ behavior: {
2762
+ type: PropConfigBehaviorTypes.code
2763
+ }
2764
+ },
2765
+ {
2766
+ id: "out_auto_v2_converted",
2767
+ name: "myop_cta_handler",
2768
+ type: "any",
2769
+ behavior: {
2770
+ type: PropConfigBehaviorTypes.code
2771
+ }
2772
+ }
2773
+ ],
2774
+ refs: [],
2775
+ skins: [
2776
+ {
2777
+ id: "skin_auto_v2_converted",
2778
+ name: "auto_v2_converted",
2779
+ description: "",
2780
+ //TODO : handle empty :
2781
+ // @ts-ignore
2782
+ loader: config.consume_variant[0].loader
2783
+ }
2784
+ ],
2785
+ defaultSkin: 0
2786
+ },
2787
+ name: config.name
2788
+ };
2789
+ return await hostSDK.loadComponent(componentConfig, container, options);
2790
+ }
2791
+ };
2792
+ };
2793
+
2794
+ // src/helpers/MyopHelpers.ts
2795
+ defineDynamicImport("MyopHelpers", helpers_exports);
2796
+ export {
2797
+ CloudRepository,
2798
+ ComponentConfig,
2799
+ SkinConfig,
2800
+ addClass,
2801
+ applyStylesheet,
2802
+ applyStylesheetLink,
2803
+ changeSkinUrlByTokenizer,
2804
+ createIframeSkinByTokenizer,
2805
+ enableV2,
2806
+ exec,
2807
+ removeClass,
2808
+ v2_CloudRepository
2809
+ };
2810
+ //# sourceMappingURL=_MyopHelpers.js.map