@financial-times/custom-code-component 1.11.2 → 2.0.1-alpha.11

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.
@@ -0,0 +1,3 @@
1
+ export declare const init: () => void;
2
+
3
+ export { }
@@ -0,0 +1,592 @@
1
+ function l(o) {
2
+ this.listenerMap = [{}, {}], o && this.root(o), this.handle = l.prototype.handle.bind(this), this._removedListeners = [];
3
+ }
4
+ l.prototype.root = function(o) {
5
+ const t = this.listenerMap;
6
+ let e;
7
+ if (this.rootElement) {
8
+ for (e in t[1])
9
+ t[1].hasOwnProperty(e) && this.rootElement.removeEventListener(e, this.handle, !0);
10
+ for (e in t[0])
11
+ t[0].hasOwnProperty(e) && this.rootElement.removeEventListener(e, this.handle, !1);
12
+ }
13
+ if (!o || !o.addEventListener)
14
+ return this.rootElement && delete this.rootElement, this;
15
+ this.rootElement = o;
16
+ for (e in t[1])
17
+ t[1].hasOwnProperty(e) && this.rootElement.addEventListener(e, this.handle, !0);
18
+ for (e in t[0])
19
+ t[0].hasOwnProperty(e) && this.rootElement.addEventListener(e, this.handle, !1);
20
+ return this;
21
+ };
22
+ l.prototype.captureForType = function(o) {
23
+ return ["blur", "error", "focus", "load", "resize", "scroll"].indexOf(o) !== -1;
24
+ };
25
+ l.prototype.on = function(o, t, e, n) {
26
+ let s, r, i, c;
27
+ if (!o)
28
+ throw new TypeError("Invalid event type: " + o);
29
+ if (typeof t == "function" && (n = e, e = t, t = null), n === void 0 && (n = this.captureForType(o)), typeof e != "function")
30
+ throw new TypeError("Handler must be a type of Function");
31
+ return s = this.rootElement, r = this.listenerMap[n ? 1 : 0], r[o] || (s && s.addEventListener(o, this.handle, n), r[o] = []), t ? /^[a-z]+$/i.test(t) ? (c = t, i = C) : /^#[a-z0-9\-_]+$/i.test(t) ? (c = t.slice(1), i = S) : (c = t, i = Element.prototype.matches) : (c = null, i = $.bind(this)), r[o].push({
32
+ selector: t,
33
+ handler: e,
34
+ matcher: i,
35
+ matcherParam: c
36
+ }), this;
37
+ };
38
+ l.prototype.off = function(o, t, e, n) {
39
+ let s, r, i, c, h;
40
+ if (typeof t == "function" && (n = e, e = t, t = null), n === void 0)
41
+ return this.off(o, t, e, !0), this.off(o, t, e, !1), this;
42
+ if (i = this.listenerMap[n ? 1 : 0], !o) {
43
+ for (h in i)
44
+ i.hasOwnProperty(h) && this.off(h, t, e);
45
+ return this;
46
+ }
47
+ if (c = i[o], !c || !c.length)
48
+ return this;
49
+ for (s = c.length - 1; s >= 0; s--)
50
+ r = c[s], (!t || t === r.selector) && (!e || e === r.handler) && (this._removedListeners.push(r), c.splice(s, 1));
51
+ return c.length || (delete i[o], this.rootElement && this.rootElement.removeEventListener(o, this.handle, n)), this;
52
+ };
53
+ l.prototype.handle = function(o) {
54
+ let t, e;
55
+ const n = o.type;
56
+ let s, r, i, c, h = [], a;
57
+ const m = "ftLabsDelegateIgnore";
58
+ if (o[m] === !0)
59
+ return;
60
+ switch (a = o.target, a.nodeType === 3 && (a = a.parentNode), a.correspondingUseElement && (a = a.correspondingUseElement), s = this.rootElement, r = o.eventPhase || (o.target !== o.currentTarget ? 3 : 2), r) {
61
+ case 1:
62
+ h = this.listenerMap[1][n];
63
+ break;
64
+ case 2:
65
+ this.listenerMap[0] && this.listenerMap[0][n] && (h = h.concat(this.listenerMap[0][n])), this.listenerMap[1] && this.listenerMap[1][n] && (h = h.concat(this.listenerMap[1][n]));
66
+ break;
67
+ case 3:
68
+ h = this.listenerMap[0][n];
69
+ break;
70
+ }
71
+ let u = [];
72
+ for (e = h.length; a && e; ) {
73
+ for (t = 0; t < e && (i = h[t], !!i); t++)
74
+ a.tagName && ["button", "input", "select", "textarea"].indexOf(a.tagName.toLowerCase()) > -1 && a.hasAttribute("disabled") ? u = [] : i.matcher.call(a, i.matcherParam, a) && u.push([o, a, i]);
75
+ if (a === s || (e = h.length, a = a.parentElement || a.parentNode, a instanceof HTMLDocument))
76
+ break;
77
+ }
78
+ let v;
79
+ for (t = 0; t < u.length; t++)
80
+ if (!(this._removedListeners.indexOf(u[t][2]) > -1) && (c = this.fire.apply(this, u[t]), c === !1)) {
81
+ u[t][0][m] = !0, u[t][0].preventDefault(), v = !1;
82
+ break;
83
+ }
84
+ return v;
85
+ };
86
+ l.prototype.fire = function(o, t, e) {
87
+ return e.handler.call(t, o, t);
88
+ };
89
+ function C(o, t) {
90
+ return o.toLowerCase() === t.tagName.toLowerCase();
91
+ }
92
+ function $(o, t) {
93
+ return this.rootElement === window ? (
94
+ // Match the outer document (dispatched from document)
95
+ t === document || // The <html> element (dispatched from document.body or document.documentElement)
96
+ t === document.documentElement || // Or the window itself (dispatched from window)
97
+ t === window
98
+ ) : this.rootElement === t;
99
+ }
100
+ function S(o, t) {
101
+ return o === t.id;
102
+ }
103
+ l.prototype.destroy = function() {
104
+ this.off(), this.root();
105
+ };
106
+ function k(o) {
107
+ return typeof o == "string" ? o.trim() : o;
108
+ }
109
+ function R(o, t) {
110
+ for (const e in o)
111
+ t[e] ? console.warn(`You can't set a custom property called ${e}`) : t[e] = o[e];
112
+ }
113
+ const p = Object.freeze({
114
+ DEBUG: 0,
115
+ INFO: 1,
116
+ WARN: 2,
117
+ ERROR: 3,
118
+ TEST: 4,
119
+ DEFAULT: 2
120
+ });
121
+ function N(o) {
122
+ const t = o == null ? void 0 : o.toLowerCase();
123
+ return t === "debug" ? p.DEBUG : t === "info" ? p.INFO : t === "warn" ? p.WARN : t === "error" ? p.ERROR : t === "test" ? p.TEST : p.DEFAULT;
124
+ }
125
+ class A {
126
+ constructor({ level: t = p.DEFAULT } = {
127
+ level: p.DEFAULT
128
+ }) {
129
+ this.log = this.debug, this.level = t;
130
+ }
131
+ debug(...t) {
132
+ this.level <= p.DEBUG && console.info(...t);
133
+ }
134
+ info(...t) {
135
+ this.level <= p.INFO && console.info(...t);
136
+ }
137
+ warn(...t) {
138
+ this.level <= p.WARN && console.warn(...t);
139
+ }
140
+ error(...t) {
141
+ this.level <= p.ERROR && console.error(...t);
142
+ }
143
+ }
144
+ const L = (o, t, e) => {
145
+ const n = Array.from((o == null ? void 0 : o.querySelectorAll(e)) ?? []), s = n.findIndex((r) => r === t);
146
+ if (s !== -1)
147
+ return {
148
+ siblings: n.length,
149
+ position: s
150
+ };
151
+ }, T = [
152
+ "nodeName",
153
+ "className",
154
+ "id",
155
+ "href",
156
+ "text",
157
+ "role"
158
+ ], O = (o) => {
159
+ const t = {};
160
+ for (const e of T) {
161
+ const n = o[e] || o.getAttribute(e) || o.hasAttribute(e);
162
+ n !== void 0 && (typeof n == "boolean" ? t[e] = n : t[e] = k(n));
163
+ }
164
+ return t;
165
+ }, P = (o) => {
166
+ try {
167
+ const t = JSON.parse(o), e = Object.prototype.toString.call(t);
168
+ return [e === "[object Object]" || e === "[object Array]", t];
169
+ } catch {
170
+ return [!1, null];
171
+ }
172
+ }, x = (o) => {
173
+ const [t, e] = P(o);
174
+ return t ? e : o;
175
+ }, I = (o, t) => (o.filter(
176
+ (e) => e.name.match(/^data-trackable|^data-o-|^aria-/i)
177
+ ).forEach((e) => {
178
+ t[e.name] = e.value;
179
+ }), t), M = (o, t, e) => {
180
+ const n = {};
181
+ return e && T.forEach((s) => {
182
+ typeof t[s] < "u" && s !== "id" && (n[s] = t[s]);
183
+ }), o.filter((s) => s.name.match(/^data-trackable-context-/i)).forEach((s) => {
184
+ n[s.name.replace("data-trackable-context-", "")] = x(s.value);
185
+ }), n;
186
+ };
187
+ function D(o, t) {
188
+ const e = o, n = e != null && e.getAttribute("data-trackable") ? `[data-trackable="${e.getAttribute("data-trackable")}"]` : e == null ? void 0 : e.nodeName, s = [], r = {};
189
+ for (; o && o !== t; ) {
190
+ const i = O(o), c = Array.from(o.attributes);
191
+ let h = I(c, i);
192
+ h["data-trackable"] && (h = Object.assign(
193
+ h,
194
+ L(o, e, n)
195
+ )), s.push(h);
196
+ const a = M(c, i, o === e);
197
+ R(a, r), o = o.parentNode;
198
+ }
199
+ return { trace: s, customContext: r };
200
+ }
201
+ const U = ["ctrlKey", "altKey", "shiftKey", "metaKey"];
202
+ class F {
203
+ constructor({
204
+ id: t = "00000000-0000-0000-0000-000000000000",
205
+ name: e = "ccc-component",
206
+ subtype: n = "interactive",
207
+ teamName: s = "djd",
208
+ shadowRoot: r = null,
209
+ category: i = "cta",
210
+ elements: c = 'a, button, input, [role="button"]',
211
+ logger: h
212
+ }) {
213
+ this.cccId = t, this.cccName = e, this.subtype = n, this.teamName = s, this.shadowRoot = r, this.category = i, this.elements = c, this.isInitialised = !1, this.log = h ?? new A();
214
+ }
215
+ // Get properties for the event (as opposed to properties of the clicked element)
216
+ getEventProperties(t) {
217
+ const e = {};
218
+ for (const n of U)
219
+ if (t[n])
220
+ try {
221
+ e[n] = k(t[n]);
222
+ } catch (s) {
223
+ this.log.info(s);
224
+ }
225
+ return e;
226
+ }
227
+ // Controller for handling click events
228
+ handleClickEvent(t, e) {
229
+ return (n, s) => {
230
+ const r = this.getEventProperties(n), { trace: i, customContext: c } = D(s, e);
231
+ r.custom = s.dataset && s.dataset.custom ? JSON.parse(s.dataset.custom) : null, r.domPathTokens = i, r.component = {
232
+ id: this.cccId,
233
+ name: this.cccName,
234
+ type: "custom-code-component",
235
+ subtype: this.subtype
236
+ }, r.teamName = this.teamName, r.url = document.URL, R(c, r), r.method = "ftCustomAnalytics", t = { ...t, ...r }, document.body.dispatchEvent(
237
+ new CustomEvent("oTracking.event", {
238
+ detail: t,
239
+ bubbles: !0,
240
+ composed: !0
241
+ })
242
+ );
243
+ };
244
+ }
245
+ sendSpoorEvent(t, e) {
246
+ const n = {
247
+ category: "component",
248
+ action: "act",
249
+ component: {
250
+ id: this.cccId,
251
+ name: this.cccName,
252
+ type: "custom-code-component",
253
+ subtype: this.subtype
254
+ },
255
+ teamName: this.teamName,
256
+ trigger_action: t,
257
+ custom: e,
258
+ method: "ftCustomAnalytics"
259
+ };
260
+ document.body.dispatchEvent(
261
+ new CustomEvent("oTracking.event", {
262
+ detail: n,
263
+ bubbles: !0,
264
+ composed: !0
265
+ })
266
+ );
267
+ }
268
+ init(t) {
269
+ var e;
270
+ if (!this.isInitialised) {
271
+ this.isInitialised = !0, this.cccId = t || this.cccId;
272
+ const n = {
273
+ action: "click",
274
+ category: this.category
275
+ }, s = (e = this.shadowRoot) == null ? void 0 : e.querySelector("[data-component-root]");
276
+ s && new l(s).on(
277
+ "click",
278
+ this.elements,
279
+ this.handleClickEvent(n, s),
280
+ !0
281
+ );
282
+ }
283
+ }
284
+ }
285
+ class f {
286
+ constructor(t) {
287
+ const { org: e, repo: n, component: s, versionRange: r } = b(
288
+ t
289
+ ) ? t : f.fromString(t);
290
+ this.org = e, this.repo = n, this.component = s, this.versionRange = r;
291
+ }
292
+ set path(t) {
293
+ const { org: e, repo: n, component: s, versionRange: r } = b(
294
+ t
295
+ ) ? t : f.fromString(t);
296
+ this.org = e, this.repo = n, this.component = s, this.versionRange = r;
297
+ }
298
+ get path() {
299
+ return `${this.org}/${this.repo}@${this.versionRange}/${this.component}`;
300
+ }
301
+ toString() {
302
+ return this.path;
303
+ }
304
+ static fromString(t, e) {
305
+ var c;
306
+ if (!t) throw new d("No path specified");
307
+ const n = e ?? ((c = t.match(/@[^\/]+/)) == null ? void 0 : c.toString().replace("@", "")) ?? "unknown";
308
+ if (!n) throw new d("No version specified");
309
+ const [s, r, i] = t.replace(/@[^\/]+/, "").split("/").reverse();
310
+ return new f({ org: i, repo: r, component: s, versionRange: n });
311
+ }
312
+ }
313
+ function b(o) {
314
+ return typeof o == "object" && o !== null ? "org" in o && "repo" in o && "component" in o : !1;
315
+ }
316
+ class d extends Error {
317
+ constructor(t, e) {
318
+ !e && t ? (super(t), this.component = null) : typeof (e == null ? void 0 : e.component) == "string" ? (super(
319
+ t ?? `${e.cause ?? "Unknown error"} in ${e.component} imported from ${e.source ?? "an undefined source"}.`
320
+ ), this.component = f.fromString(e.component)) : b(e == null ? void 0 : e.component) ? (super(
321
+ t ?? `${e.cause ?? "Unknown error"} in ${e.component.org}/${e.component.repo}/${e.component.component}@${e.component.versionRange} imported from ${e.source ?? "an undefined source"}.`
322
+ ), this.component = new f(e.component)) : (super(
323
+ `${(e == null ? void 0 : e.cause) ?? "Unknown error"} in unknown component imported from ${(e == null ? void 0 : e.source) ?? "unknown source"}.`
324
+ ), this.component = null), this.source = e == null ? void 0 : e.source, Error.captureStackTrace && Error.captureStackTrace(this, d), this.name = "CCCError";
325
+ }
326
+ }
327
+ class g extends d {
328
+ constructor(t, e) {
329
+ super(t, { ...e, cause: "Import error" }), this.name = "CCCImportError";
330
+ }
331
+ }
332
+ class W extends d {
333
+ constructor(t) {
334
+ super(null, { ...t, cause: "Timeout error" }), this.name = "CCCTimeoutError";
335
+ }
336
+ }
337
+ const w = class w extends Event {
338
+ constructor(t, e) {
339
+ super(w.eventType, {
340
+ bubbles: !0,
341
+ cancelable: !1,
342
+ composed: !0,
343
+ ...e
344
+ }), this.component = t.component, this.source = t.source;
345
+ }
346
+ };
347
+ w.eventType = "ccc:ConnectedEvent";
348
+ let E = w;
349
+ const j = (o) => o.replace(
350
+ /[A-Z]+(?![a-z])|[A-Z]/g,
351
+ (t, e) => (e ? "-" : "") + t.toLowerCase()
352
+ );
353
+ function V(o) {
354
+ return y([
355
+ "localhost",
356
+ "local.ft.com",
357
+ /^.*\.apps\.in\.ft\.com$/
358
+ ], o);
359
+ }
360
+ function z() {
361
+ return y([
362
+ "localhost",
363
+ "local.ft.com",
364
+ /^.*\.in\.ft\.com$/
365
+ ], window.location.hostname);
366
+ }
367
+ function J() {
368
+ return y([
369
+ "spark.ft.com",
370
+ "spark-staging.ft.com"
371
+ ], window.location.host);
372
+ }
373
+ function y(o, t) {
374
+ return t ? o.some((e) => typeof e == "string" ? e === t : e.test(t)) : !1;
375
+ }
376
+ function H(o) {
377
+ if (o === null)
378
+ return;
379
+ let t;
380
+ const e = new URL("http://localhost:5173");
381
+ try {
382
+ if (typeof o == "string") {
383
+ if ((o === "" || o.toLowerCase() === "true") && z())
384
+ t = e;
385
+ else if (t = o.startsWith("http://") || o.startsWith("https://") ? new URL(o) : void 0, t && !V(t == null ? void 0 : t.hostname))
386
+ throw new Error("Unsafe testing host override");
387
+ } else J() && (t = e);
388
+ } catch {
389
+ return t;
390
+ }
391
+ return t;
392
+ }
393
+ async function K(o) {
394
+ if (!o)
395
+ return !1;
396
+ function t(n) {
397
+ try {
398
+ return new Promise((s) => {
399
+ const r = new WebSocket(`ws://${n}`, "vite-hmr"), i = setTimeout(() => {
400
+ s(r.readyState === WebSocket.OPEN), r.close();
401
+ }, 50);
402
+ r.addEventListener("error", () => {
403
+ clearTimeout(i), r.close(), s(!1);
404
+ }, { once: !0 });
405
+ });
406
+ } catch {
407
+ return Promise.resolve(!1);
408
+ }
409
+ }
410
+ return await t(o == null ? void 0 : o.host);
411
+ }
412
+ class _ extends HTMLElement {
413
+ constructor() {
414
+ super(), this.mode = "open", this.RESERVED_ATTRS = /* @__PURE__ */ new Set([
415
+ "iframe",
416
+ "path",
417
+ "version",
418
+ "data-component-props",
419
+ "data-asset-type",
420
+ "shadow-open",
421
+ "env",
422
+ "load-timeout"
423
+ ]), this.channel = new MessageChannel(), this.initTracking = async () => {
424
+ var e;
425
+ try {
426
+ (e = this.tracking) == null || e.init(this.id);
427
+ } catch (n) {
428
+ const s = this.getAttribute("path"), r = this.getAttribute("version");
429
+ this.log.info(
430
+ `Error initialising tracking on <custom-code-component> ${s}@${r}`
431
+ ), this.log.error(n);
432
+ }
433
+ }, this.log = new A({
434
+ level: N(this.getAttribute("log"))
435
+ });
436
+ const t = HTMLElement.prototype.hasOwnProperty("attachInternals");
437
+ try {
438
+ const e = t && this.attachInternals();
439
+ } catch (e) {
440
+ this.log.error(e);
441
+ }
442
+ }
443
+ async connectedCallback() {
444
+ try {
445
+ const t = this.getAttribute("path"), e = this.getAttribute("version");
446
+ this.component = f.fromString(t, e), this.lightRoot = Array.from(this.childNodes), this.app = await this.load(), await this.mount(), await this.initTracking();
447
+ } catch (t) {
448
+ t instanceof Error && requestAnimationFrame(() => {
449
+ this.emitError(t);
450
+ }), this.unmount(t);
451
+ }
452
+ }
453
+ emitError(t) {
454
+ var n;
455
+ let e;
456
+ if (t instanceof d && ((n = t.name) != null && n.startsWith("CCC")) ? e = t.name.replace(/^CCC/, "ccc:") : e = `ccc:${(t == null ? void 0 : t.name) ?? "UnknownError"}`, !e)
457
+ return this.log.debug(t);
458
+ this.dispatchEvent(
459
+ new ErrorEvent(e, {
460
+ bubbles: !0,
461
+ cancelable: !1,
462
+ composed: !0,
463
+ error: t,
464
+ message: t.message
465
+ })
466
+ );
467
+ }
468
+ disconnectedCallback() {
469
+ const t = this.getAttribute("path");
470
+ this.log.info(`<custom-code-component:${t}> disconnected`), typeof this.onunmount == "function" && this.onunmount();
471
+ }
472
+ onmessage() {
473
+ }
474
+ onunmount(t) {
475
+ }
476
+ async onready(t) {
477
+ try {
478
+ await t;
479
+ } catch (e) {
480
+ e instanceof Error && this.emitError(e);
481
+ }
482
+ }
483
+ postMessage(t) {
484
+ this.channel.port1.postMessage(t);
485
+ }
486
+ async mount(t) {
487
+ var e, n;
488
+ try {
489
+ if (this.mode = this.getAttribute("shadow-open") == "false" ? "closed" : "open", this.component) {
490
+ if (this.dispatchEvent(
491
+ new E({
492
+ component: this.component,
493
+ source: this.source
494
+ })
495
+ ), this.dataset.cccReady = "true", delete this.dataset.cccError, !this.app)
496
+ throw new Error("CCC mounted without App");
497
+ const s = this.shadowRoot !== null, r = this.shadowRoot ?? this.attachShadow({ mode: this.mode }), i = JSON.parse(this.getAttribute("data-component-props")), c = Object.fromEntries(
498
+ [...this.attributes].filter((u) => !this.RESERVED_ATTRS.has(u.name)).map((u) => [u.name, u.value])
499
+ );
500
+ this.tracking = new F({
501
+ name: (e = this.component) == null ? void 0 : e.toString(),
502
+ subtype: "interactive",
503
+ teamName: "djd",
504
+ shadowRoot: this.shadowRoot,
505
+ logger: this.log
506
+ });
507
+ const { unmount: h, onmessage: a, ready: m } = this.app(
508
+ r,
509
+ {
510
+ ...c,
511
+ data: i,
512
+ port: this.channel.port2,
513
+ tracking: this.tracking,
514
+ prerendered: !!t,
515
+ children: this.children
516
+ },
517
+ s
518
+ ) || {};
519
+ h && (this.onunmount = h), a && (this.onmessage = a), m && this.onready(m);
520
+ }
521
+ } catch (s) {
522
+ throw this.log.info(
523
+ `<custom-code-component> uncaught error during mount from ${(n = this.component) == null ? void 0 : n.toString()}`
524
+ ), this.log.error(s), s;
525
+ }
526
+ }
527
+ // Called in top-level error handler
528
+ // Replace shadow root with light DOM children on error
529
+ unmount(t) {
530
+ var e;
531
+ this.lightRoot && (this.onunmount(), (e = this.shadowRoot) == null || e.replaceChildren(...this.lightRoot), this.dataset.cccError || (this.dataset.cccError = j(t.name.replace("CCC", ""))), delete this.dataset.cccReady);
532
+ }
533
+ async load() {
534
+ if (!this.component)
535
+ throw new Error("No path found");
536
+ const t = this.getAttribute("path"), e = this.getAttribute("version"), n = Number(this.getAttribute("load-timeout") || 1e4), s = this.getAttribute("testEnv"), r = H(s), i = await K(r), c = this.getAttribute("id");
537
+ this.source = i ? `${r == null ? void 0 : r.origin}/src/${this.component.component}/index.jsx?id=${c}` : `https://www.ft.com/__component/${this.component.org}/${this.component.repo}${e ? `@${e}` : "@latest"}/${this.component.component}/${this.component.component}.js?id=${c}`;
538
+ try {
539
+ return await new Promise(
540
+ (h, a) => {
541
+ const m = setTimeout(() => {
542
+ this.log.error("CCC import timeout error"), a(
543
+ new W({
544
+ component: this.component,
545
+ source: this.source
546
+ })
547
+ );
548
+ }, Number(n));
549
+ if (this.source)
550
+ import(
551
+ /* webpackIgnore: true */
552
+ this.source
553
+ /* @vite-ignore */
554
+ ).then(({ default: u }) => {
555
+ if (u)
556
+ clearTimeout(m), h(u);
557
+ else
558
+ throw new g(
559
+ "No component renderer default export found",
560
+ {
561
+ component: this.component,
562
+ source: this.source
563
+ }
564
+ );
565
+ }).catch((u) => {
566
+ clearTimeout(m), this.log.error(u), u instanceof Error && !(u instanceof g) ? a(
567
+ new g(u.message, {
568
+ component: this.component,
569
+ source: this.source
570
+ })
571
+ ) : a(u);
572
+ });
573
+ else
574
+ throw clearTimeout(m), new g(`Unable to mount ${t}`, {
575
+ component: this.component,
576
+ source: this.source
577
+ });
578
+ }
579
+ );
580
+ } catch (h) {
581
+ throw this.log.error(
582
+ `<custom-code-component> error during import from ${t}@${e}`
583
+ ), h;
584
+ }
585
+ }
586
+ }
587
+ const q = () => customElements.define("custom-code-component", _);
588
+ customElements && !customElements.get("custom-code-component") && q();
589
+ export {
590
+ q as init
591
+ };
592
+ //# sourceMappingURL=CustomCodeComponent.js.map