@epigraph/solutions 0.0.2-alpha → 0.0.5-alpha

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,1426 @@
1
+ import { v as C, V as R, i as x, x as p, n as r, e as S, r as B, E as b, B as W } from "./three.module-CYfxkCtM.js";
2
+ import { b as U, B as _, g as i, D as a, r as H } from "./baseUiComponent-_PPHqnvV.js";
3
+ var M = /* @__PURE__ */ ((s) => (s.IMAGE = "image", s.VIDEO = "video", s))(M || {}), v = /* @__PURE__ */ ((s) => (s.LEFT = "left", s.RIGHT = "right", s))(v || {}), D = /* @__PURE__ */ ((s) => (s.DOTS = "DOTS", s))(D || {}), d = /* @__PURE__ */ ((s) => (s.expanded = "expanded", s.collapsed = "collapsed", s))(d || {});
4
+ class T {
5
+ constructor({
6
+ config: t,
7
+ appWcRef: o,
8
+ hotspotManagerRef: n
9
+ }) {
10
+ this._cameraDirection = new C(), this.hotspotID = 0, this.header = {
11
+ preheadText: "",
12
+ headerText: "",
13
+ subheadText: "",
14
+ media: {
15
+ uri: "",
16
+ type: M.IMAGE,
17
+ mediaCaption: "",
18
+ altText: ""
19
+ }
20
+ }, this.carousel = {
21
+ // Limit to eight items in the mediaItems for carousel
22
+ mediaItems: [],
23
+ indicator: D.DOTS
24
+ }, this.details = "", this.position = new C(), this.normals = new C(0, 0, 0), this.screenPosition = new R(), this.camera = {
25
+ position: new C(),
26
+ target: new C(),
27
+ focalLength: 35
28
+ }, this.animation = [], this.desktopPlacement = v.LEFT, this.visited = !1, this.appWcRef = o, this.hotspotsManager = n, this.hotspotID = t.hotspotID, this.updateHotspotConfig(t);
29
+ }
30
+ static {
31
+ this.styles = x`
32
+ .hotspot-card {
33
+ width: 100%;
34
+ }
35
+
36
+ .hotspot-indicator {
37
+ position: absolute;
38
+ transform: translate(-50%, -50%);
39
+ transition: opacity 0.5s;
40
+ }
41
+
42
+ .hotspot-indicator.active {
43
+ opacity: 0.4;
44
+ pointer-events: none;
45
+ }
46
+
47
+ .hotspot-indicator.inactive {
48
+ opacity: 0 !important;
49
+ pointer-events: none !important;
50
+ }
51
+
52
+ .hotspot-indicator.occluded {
53
+ opacity: 0.3;
54
+ }
55
+ `;
56
+ }
57
+ _updateHotspotNormals() {
58
+ const t = new C();
59
+ this.appWcRef.dimensionsManager.getCurrentSceneBounds().getCenter(t), this.normals.subVectors(this.position, t);
60
+ }
61
+ updateHotspotConfig(t) {
62
+ this.header = t.header, this.carousel = t.carousel, this.details = t.details, this.position.set(t.position.x, t.position.y, t.position.z), this._updateHotspotNormals(), this.camera.position.set(t.camera.position.x, t.camera.position.y, t.camera.position.z), this.camera.target.set(t.camera.target.x, t.camera.target.y, t.camera.target.z), this.camera.focalLength = t.camera.focalLength, this.animation = t.animation, t.desktopPlacement && (this.desktopPlacement = t.desktopPlacement);
63
+ }
64
+ onHotspotClick() {
65
+ this.hotspotsManager.activeHotspot || (this.visited = !0, this.appWcRef.appEvents.hotspotClickedEvent.fire({ hotspot: this }));
66
+ }
67
+ _isFacingCamera() {
68
+ return this.appWcRef.cameraManager.cameras.main.getWorldDirection(this._cameraDirection), this.normals.angleTo(this._cameraDirection) > Math.PI / 2.2;
69
+ }
70
+ renderAnnotationTemplate(t) {
71
+ this.screenPosition = this.appWcRef.getScreenPositionFromWorld(this.position);
72
+ const o = t !== void 0 && t === this.hotspotID, n = t !== void 0 && t !== this.hotspotID;
73
+ let e = "top-left";
74
+ return this.screenPosition.y > this.appWcRef.getCanvasSize().height * 0.12 ? e = "top" : e = "bottom", this.screenPosition.x > this.appWcRef.getCanvasSize().width * 0.5 ? e += "-right" : e += "-left", p`
75
+ <epg-tool-hotspot
76
+ class="hotspot-indicator ${n ? "inactive" : ""} ${this._isFacingCamera() ? "" : "occluded"}"
77
+ style="left: ${this.screenPosition.x}px; top: ${this.screenPosition.y}px"
78
+ hotspot-id=${this.hotspotID}
79
+ tooltip-label=${this.header.headerText}
80
+ tooltip-placement=${e}
81
+ ?active=${o}
82
+ ?visited=${this.visited}
83
+ @epgonclick=${this.onHotspotClick.bind(this)}
84
+ size="medium"
85
+ ></epg-tool-hotspot>
86
+ `;
87
+ }
88
+ renderCardTemplate() {
89
+ return p`
90
+ <epg-card
91
+ class="hotspot-card"
92
+ .data=${{ ...this }}
93
+ .onNextHotspotButtonClick=${this.hotspotsManager.nextHotspot.bind(this.hotspotsManager)}
94
+ .onPrevHotspotButtonClick=${this.hotspotsManager.previousHotspot.bind(this.hotspotsManager)}
95
+ ></epg-card>
96
+ `;
97
+ }
98
+ }
99
+ const P = "epg-button", c = {
100
+ ...U,
101
+ ariaLabel: {
102
+ name: "aria-label",
103
+ defaultValue: "Button",
104
+ argType: {
105
+ control: "text"
106
+ }
107
+ },
108
+ label: {
109
+ name: "label",
110
+ defaultValue: "Button",
111
+ argType: {
112
+ control: "text"
113
+ }
114
+ },
115
+ isLoading: {
116
+ name: "is-loading",
117
+ defaultValue: !1,
118
+ argType: {
119
+ control: "boolean"
120
+ }
121
+ },
122
+ loadingLabel: {
123
+ name: "loading-label",
124
+ defaultValue: "Loading...",
125
+ argType: {
126
+ control: "string"
127
+ }
128
+ },
129
+ leftIcon: {
130
+ name: "left-icon",
131
+ defaultValue: "3d-select-solid",
132
+ argType: {
133
+ control: "text"
134
+ }
135
+ },
136
+ rightIcon: {
137
+ name: "right-icon",
138
+ defaultValue: "3d-select-solid",
139
+ argType: {
140
+ control: "text"
141
+ }
142
+ },
143
+ fullWidth: {
144
+ name: "full-width",
145
+ defaultValue: !1,
146
+ argType: {
147
+ control: "boolean"
148
+ }
149
+ },
150
+ tooltipPlacement: {
151
+ name: "tooltip-placement",
152
+ defaultValue: "none",
153
+ argType: {
154
+ control: "select",
155
+ options: [
156
+ "none",
157
+ "left",
158
+ "right",
159
+ "bottom-left",
160
+ "bottom-center",
161
+ "bottom-right",
162
+ "top-left",
163
+ "top-center",
164
+ "top-right"
165
+ ]
166
+ }
167
+ },
168
+ tooltipLabel: {
169
+ name: "tooltip-label",
170
+ defaultValue: "",
171
+ argType: {
172
+ control: "text"
173
+ }
174
+ }
175
+ }, L = "epg-tool-hotspot", $ = {
176
+ label: {
177
+ name: "label",
178
+ defaultValue: "Tool Control"
179
+ },
180
+ active: {
181
+ name: "active"
182
+ },
183
+ visited: {
184
+ name: "visited"
185
+ },
186
+ togglable: {
187
+ name: "togglable"
188
+ },
189
+ tooltipLabel: {
190
+ defaultValue: "HOTSPOT LABEL"
191
+ }
192
+ }, A = "epg-tooltip", I = {
193
+ placement: {
194
+ name: "placement",
195
+ defaultValue: "none"
196
+ },
197
+ theme: {
198
+ defaultValue: "dark"
199
+ }
200
+ }, z = "epg-icon", O = {
201
+ iconName: {
202
+ name: "icon-name",
203
+ defaultValue: "trash"
204
+ }
205
+ };
206
+ var X = Object.defineProperty, V = (s, t, o, n) => {
207
+ for (var e = void 0, l = s.length - 1, h; l >= 0; l--)
208
+ (h = s[l]) && (e = h(t, o, e) || e);
209
+ return e && X(t, o, e), e;
210
+ };
211
+ class E extends _ {
212
+ constructor() {
213
+ super(...arguments), this.iconName = O.iconName.defaultValue.toString();
214
+ }
215
+ static {
216
+ this.styles = [
217
+ super.styles,
218
+ x`
219
+ :host {
220
+ display: inline-block;
221
+ vertical-align: middle;
222
+ display: flex;
223
+ justify-content: center;
224
+ align-items: center;
225
+ width: 50px;
226
+ height: 50px;
227
+ aspect-ratio: 1;
228
+ }
229
+
230
+ .icon-container {
231
+ width: 100%;
232
+ height: 100%;
233
+ }
234
+ `
235
+ ];
236
+ }
237
+ hide() {
238
+ this.style.display = "none";
239
+ }
240
+ /**
241
+ * Loads an SVG from URL and appends it is a child of this component.
242
+ *
243
+ * @returns
244
+ */
245
+ async loadSVG() {
246
+ if (!this.iconName) {
247
+ this.hide();
248
+ return;
249
+ }
250
+ try {
251
+ const t = this._iconContainerRef;
252
+ if (!t) {
253
+ this.hide();
254
+ return;
255
+ }
256
+ const o = await fetch(
257
+ `https://asset.myepigraph.com/design-assets/icons/${this.iconName}.svg`
258
+ );
259
+ if (!o.ok) {
260
+ this.hide();
261
+ return;
262
+ }
263
+ let n = await o.text();
264
+ n = n.replace(
265
+ /stroke="#?[0-9A-Fa-f]{3,6}"/g,
266
+ 'stroke="currentColor"'
267
+ ), n = n.replace(/fill="#?[0-9A-Fa-f]{3,6}"/g, 'fill="currentColor"'), t.innerHTML = n;
268
+ const e = t.querySelector("svg");
269
+ e && (e.setAttribute("width", "100%"), e.setAttribute("height", "100%"), e.setAttribute("role", "img"), e.setAttribute("aria-hidden", this.iconName ? "false" : "true"), e.setAttribute("aria-label", this.iconName));
270
+ } catch (t) {
271
+ window.epigraph.logger.error(`Error loading SVG: ${this.iconName}`, t), this.hide();
272
+ }
273
+ }
274
+ updated(t) {
275
+ t.has("iconName") && this.loadSVG();
276
+ }
277
+ render() {
278
+ return p`
279
+ <div
280
+ id="iconContainer"
281
+ class="icon-container"
282
+ role="img"
283
+ aria-hidden="${this.iconName ? "false" : "true"}"
284
+ aria-label="${this.iconName || ""}"
285
+ ></div>
286
+ `;
287
+ }
288
+ }
289
+ V([
290
+ r({ type: String, attribute: O.iconName.name })
291
+ ], E.prototype, "iconName");
292
+ V([
293
+ S("#iconContainer")
294
+ ], E.prototype, "_iconContainerRef");
295
+ window.customElements.get(z) || window.customElements.define(z, E);
296
+ var j = Object.defineProperty, Y = (s, t, o, n) => {
297
+ for (var e = void 0, l = s.length - 1, h; l >= 0; l--)
298
+ (h = s[l]) && (e = h(t, o, e) || e);
299
+ return e && j(t, o, e), e;
300
+ };
301
+ class F extends _ {
302
+ constructor() {
303
+ super(...arguments), this.placement = I.placement.defaultValue.toString(), this.theme = I.theme.defaultValue.toString();
304
+ }
305
+ static {
306
+ this.styles = [
307
+ super.styles,
308
+ x`
309
+ :host {
310
+ --pointer-side-margin: 15px;
311
+ display: flex;
312
+ flex-direction: row;
313
+ font-size: 16px;
314
+ font-style: normal;
315
+ font-weight: 500;
316
+ align-items: center;
317
+ justify-content: center;
318
+ border-radius: 6px;
319
+ position: relative;
320
+ user-select: none;
321
+ width: fit-content;
322
+ white-space: nowrap;
323
+ filter: drop-shadow(0px 0px 4px rgba(50, 50, 0, 0.5));
324
+ }
325
+
326
+ :host([disabled]) {
327
+ display: none;
328
+ }
329
+
330
+ :host([theme="light"]) {
331
+ --tooltip-background-color: #fff;
332
+ --tooltip-color: ${i(a.Color.Text.NeutralSecondary.$value)};
333
+ }
334
+
335
+ :host([theme="dark"]) {
336
+ --tooltip-background-color: #6d6d6e;
337
+ --tooltip-color: ${i(a.Color.Text.Invert.$value)};
338
+ }
339
+
340
+ :host([placement="left"]) {
341
+ flex-direction: row-reverse;
342
+
343
+ .pointer {
344
+ transform: rotate(-90deg);
345
+ }
346
+ }
347
+
348
+ :host([placement="right"]) {
349
+ flex-direction: row;
350
+
351
+ .pointer {
352
+ transform: rotate(90deg);
353
+ }
354
+ }
355
+
356
+ :host([placement="bottom-left"]) {
357
+ flex-direction: column;
358
+
359
+ .pointer {
360
+ align-self: flex-start;
361
+ transform: rotate(180deg);
362
+ margin-left: var(--pointer-side-margin);
363
+ }
364
+ }
365
+
366
+ :host([placement="bottom-center"]) {
367
+ flex-direction: column;
368
+
369
+ .pointer {
370
+ align-self: center;
371
+ transform: rotate(180deg);
372
+ }
373
+ }
374
+
375
+ :host([placement="bottom-right"]) {
376
+ flex-direction: column;
377
+
378
+ .pointer {
379
+ align-self: flex-end;
380
+ transform: rotate(180deg);
381
+ margin-right: var(--pointer-side-margin);
382
+ }
383
+ }
384
+
385
+ :host([placement="top-left"]) {
386
+ flex-direction: column-reverse;
387
+
388
+ .pointer {
389
+ align-self: flex-start;
390
+ margin-left: var(--pointer-side-margin);
391
+ }
392
+ }
393
+
394
+ :host([placement="top-center"]) {
395
+ flex-direction: column-reverse;
396
+
397
+ .pointer {
398
+ align-self: center;
399
+ }
400
+ }
401
+
402
+ :host([placement="top-right"]) {
403
+ flex-direction: column-reverse;
404
+
405
+ .pointer {
406
+ align-self: flex-end;
407
+ margin-right: var(--pointer-side-margin);
408
+ }
409
+ }
410
+
411
+ .contents-container {
412
+ display: flex;
413
+ border-radius: inherit;
414
+ padding: 12px;
415
+ height: 20px;
416
+ gap: 8px;
417
+ background-color: var(--tooltip-background-color);
418
+ color: var(--tooltip-color);
419
+ outline: 3px solid var(--tooltip-background-color);
420
+ outline-offset: -2px;
421
+ align-items: center;
422
+ }
423
+
424
+ .pointer {
425
+ --pointer-width: 20px;
426
+ --pointer-height: 20px;
427
+ content: "";
428
+ width: var(--pointer-width);
429
+ height: var(--pointer-height);
430
+ background-color: var(--tooltip-background-color);
431
+ clip-path: polygon(100% 0px, 50% 70%, 0 0px);
432
+ display: none;
433
+ }
434
+
435
+ .pointer.visible {
436
+ display: block;
437
+ }
438
+
439
+ .left-icon {
440
+ height: 100%;
441
+ aspect-ratio: 3.5;
442
+ }
443
+
444
+ .right-icon {
445
+ width: auto;
446
+ height: 120%;
447
+ aspect-ratio: 3.5;
448
+ }
449
+ `
450
+ ];
451
+ }
452
+ render() {
453
+ return p`
454
+ <span class="pointer ${this.placement} ${this.placement !== "none" ? "visible" : ""}"></span>
455
+ <div class="contents-container">
456
+ <slot name="replace-all">
457
+ <div class="label">Powered by</div>
458
+ <epg-icon id="rightIcon" class="right-icon" icon-name="epigraph" alt="Right Icon"></epg-icon>
459
+ </slot>
460
+ </div>
461
+ `;
462
+ }
463
+ }
464
+ Y([
465
+ r({ attribute: I.placement.name })
466
+ ], F.prototype, "placement");
467
+ window.customElements.get(A) || window.customElements.define(A, F);
468
+ const N = "epg-loader-circle";
469
+ class G extends _ {
470
+ static {
471
+ this.styles = [
472
+ super.styles,
473
+ x`
474
+ :host {
475
+ display: flex;
476
+ width: 100px;
477
+ height: 100px;
478
+ justify-content: center;
479
+ align-items: center;
480
+ }
481
+
482
+ .loader {
483
+ animation: rotate 1s linear infinite;
484
+ }
485
+
486
+ .loader-container {
487
+ width: 100%;
488
+ height: 100%;
489
+ }
490
+
491
+ .progress {
492
+ stroke-dasharray: 251.2; /* Full circle */
493
+ stroke-dashoffset: 188.4; /* 1/4 of the circle */
494
+ transform: rotate(-90deg);
495
+ transform-origin: center;
496
+ }
497
+
498
+ @keyframes rotate {
499
+ 0% {
500
+ transform: rotate(0deg);
501
+ }
502
+ 100% {
503
+ transform: rotate(360deg);
504
+ }
505
+ }
506
+ `
507
+ ];
508
+ }
509
+ render() {
510
+ return p`
511
+ <div class="loader-container" role="status" aria-live="polite" aria-label="Loading...">
512
+ <svg
513
+ class="loader"
514
+ viewBox="0 0 100 100"
515
+ focusable="false"
516
+ aria-hidden="true"
517
+ >
518
+ <circle
519
+ cx="50"
520
+ cy="50"
521
+ r="40"
522
+ stroke=${this.theme == "light" ? "#0C0C0D1A" : "#FFFFFF66"}
523
+ stroke-width="10"
524
+ fill="none"
525
+ />
526
+ <circle
527
+ class="progress"
528
+ cx="50"
529
+ cy="50"
530
+ r="40"
531
+ stroke=${this.theme == "light" ? "#0C0C0D80" : "#FFFFFFCC"}
532
+ stroke-width="10"
533
+ fill="none"
534
+ stroke-dasharray="251.2"
535
+ stroke-dashoffset="188.4"
536
+ stroke-linecap="round"
537
+ />
538
+ </svg>
539
+ </div>
540
+ `;
541
+ }
542
+ }
543
+ window.customElements.get(N) || window.customElements.define(N, G);
544
+ var K = Object.defineProperty, m = (s, t, o, n) => {
545
+ for (var e = void 0, l = s.length - 1, h; l >= 0; l--)
546
+ (h = s[l]) && (e = h(t, o, e) || e);
547
+ return e && K(t, o, e), e;
548
+ };
549
+ const q = B(
550
+ `${i(a.Space.Padding.Small.$value)} ${i(a.Space.Padding.Medium.$value)}`
551
+ );
552
+ class u extends _ {
553
+ constructor() {
554
+ super(), this.size = c.size.defaultValue.toString(), this.ariaLabel = c.ariaLabel.defaultValue.toString(), this.label = c.label.defaultValue.toString(), this.isLoading = !1, this.loadingLabel = c.loadingLabel.defaultValue.toString(), this.leftIcon = c.leftIcon.defaultValue.toString(), this.rightIcon = c.rightIcon.defaultValue.toString(), this.fullWidth = !1, this.tooltipPlacement = c.tooltipPlacement.defaultValue.toString(), this.tooltipLabel = c.tooltipLabel.defaultValue.toString(), this._isKeyDown = !1, this.addEventListener("keydown", this.handleKeyDown), this.addEventListener("keyup", this.handleKeyUp), this.addEventListener("click", this.doClick);
555
+ }
556
+ static {
557
+ this.styles = [
558
+ super.styles,
559
+ x`
560
+ :host {
561
+ display: flex;
562
+ position: relative;
563
+ font-family: ${i(a.Font.Family.Body.$value)};
564
+ font-size: ${i(a.Size.Text.Large.$value)};
565
+ font-style: normal;
566
+ font-weight: 400;
567
+ letter-spacing: ${i(a.Font.Tracking.Normal.$value)};
568
+ width: max-content;
569
+ height: fit-content;
570
+ justify-content: center;
571
+ align-items: center;
572
+ user-select: none;
573
+ gap: ${i(a.Space.Gap.Small.$value)};
574
+ color: ${i(a.Color.Text.Invert.$value)};
575
+ padding: ${q};
576
+ box-sizing: border-box;
577
+ background-color: ${i(a.Color.Fill.Accent.$value)};
578
+ border-radius: ${i(a.Size.Radius.Medium.$value)};
579
+ cursor: pointer;
580
+ outline: none;
581
+ }
582
+
583
+ :host([full-width]) {
584
+ width: 100%;
585
+ }
586
+
587
+ :host(:hover) {
588
+ background-color: ${i(a.Color.Fill.AccentHover.$value)};
589
+
590
+ .tooltip {
591
+ opacity: 1;
592
+ }
593
+ }
594
+
595
+ :host(:active) {
596
+ background-color: ${i(a.Color.Fill.AccentPress.$value)};
597
+ }
598
+
599
+ :host(:focus-visible) {
600
+ outline: revert !important;
601
+ }
602
+
603
+ :host([disabled]) {
604
+ color: ${i(a.Color.Text.Disabled.$value)} !important;
605
+ background-color: ${i(a.Color.Fill.Disabled.$value)} !important;
606
+ pointer-events: none !important;
607
+ }
608
+
609
+ :host .tooltip {
610
+ opacity: 0;
611
+ transition: 0.15s ease-in-out;
612
+ }
613
+
614
+ :host([size="small"]) {
615
+ .icon {
616
+ width: ${i(a.Size.Icon.Small.$value)};
617
+ height: ${i(a.Size.Icon.Small.$value)};
618
+ }
619
+
620
+ .label {
621
+ font-size: ${i(a.Size.Text.Small.$value)};
622
+ height: ${i(a.Size.Icon.Small.$value)};
623
+ }
624
+ }
625
+
626
+ :host([size="medium"]) {
627
+ .icon {
628
+ width: ${i(a.Size.Icon.Medium.$value)};
629
+ height: ${i(a.Size.Icon.Medium.$value)};
630
+ }
631
+
632
+ .label {
633
+ font-size: ${i(a.Size.Text.Medium.$value)};
634
+ height: ${i(a.Size.Icon.Medium.$value)};
635
+ }
636
+ }
637
+
638
+ :host([size="large"]) {
639
+ .icon {
640
+ width: ${i(a.Size.Icon.Large.$value)};
641
+ height: ${i(a.Size.Icon.Large.$value)};
642
+ }
643
+
644
+ .label {
645
+ font-size: ${i(a.Size.Text.Large.$value)};
646
+ height: ${i(a.Size.Icon.Large.$value)};
647
+ }
648
+ }
649
+
650
+ .tooltip {
651
+ position: absolute;
652
+ pointer-events: none;
653
+ transition: opacity 0.5s ease;
654
+ opacity: 1;
655
+ z-index: 9999;
656
+ }
657
+
658
+ .tooltip.right {
659
+ right: 0;
660
+ transform: translateX(100%);
661
+ }
662
+
663
+ .tooltip.left {
664
+ left: 0;
665
+ transform: translateX(-100%);
666
+ }
667
+
668
+ .tooltip.top-left {
669
+ top: 0;
670
+ transform: translate(-10px, -100%);
671
+ left: 0;
672
+ }
673
+
674
+ .tooltip.top-center {
675
+ top: 0;
676
+ transform: translateY(-100%);
677
+ }
678
+
679
+ .tooltip.top-right {
680
+ top: 0;
681
+ transform: translate(15px, -100%);
682
+ right: 0;
683
+ }
684
+
685
+ .tooltip.bottom-left {
686
+ bottom: 0;
687
+ transform: translate(-10px, 100%);
688
+ left: 0;
689
+ }
690
+
691
+ .tooltip.bottom-center {
692
+ bottom: 0;
693
+ transform: translateY(100%);
694
+ }
695
+
696
+ .tooltip.bottom-right {
697
+ bottom: 0;
698
+ transform: translate(15px, 100%);
699
+ right: 0;
700
+ }
701
+ `
702
+ ];
703
+ }
704
+ handleKeyDown(t) {
705
+ this._isKeyDown || (this._isKeyDown = !0, (t.key === "Enter" || t.key === " ") && !this.disabled && (t.preventDefault(), this.doClick()));
706
+ }
707
+ handleKeyUp(t) {
708
+ (t.key === "Enter" || t.key === " ") && (this._isKeyDown = !1);
709
+ }
710
+ defaultContents() {
711
+ let t;
712
+ return this.isLoading ? t = p` <epg-loader-circle class="icon ${this.size}"></epg-loader-circle>
713
+ ${this.loadingLabel ? p`<div class="label ${this.size}">${this.loadingLabel}</div>` : b}` : t = p`
714
+ <epg-icon class="icon ${this.size}" icon-name=${this.leftIcon}></epg-icon>
715
+ ${this.label ? p`<div class="label ${this.size}">${this.label}</div>` : b}
716
+ <epg-icon class="icon ${this.size}" icon-name=${this.rightIcon}></epg-icon>
717
+ `, t;
718
+ }
719
+ _renderTooltip() {
720
+ const t = this.tooltipLabel ? p`<div slot="replace-all">${this.tooltipLabel}</div>` : b;
721
+ return p`
722
+ <epg-tooltip class="tooltip ${this.tooltipPlacement}" ?disabled=${this.tooltipPlacement === "none"} placement=${this.tooltipPlacement}>
723
+ ${t}
724
+ </epg-tooltip>
725
+ `;
726
+ }
727
+ render() {
728
+ return p`
729
+ <slot
730
+ name="replace-all"
731
+ role="button"
732
+ tabindex=${this.disabled ? "-1" : "0"}
733
+ aria-disabled=${this.disabled}
734
+ aria-label=${this.label ?? this.ariaLabel}
735
+ >
736
+ ${this.defaultContents()}
737
+ </slot>
738
+ ${this._renderTooltip()}
739
+ `;
740
+ }
741
+ }
742
+ m([
743
+ r({ attribute: c.ariaLabel.name })
744
+ ], u.prototype, "ariaLabel");
745
+ m([
746
+ r({ attribute: c.label.name })
747
+ ], u.prototype, "label");
748
+ m([
749
+ r({ type: Boolean, attribute: c.isLoading.name })
750
+ ], u.prototype, "isLoading");
751
+ m([
752
+ r({ attribute: c.loadingLabel.name })
753
+ ], u.prototype, "loadingLabel");
754
+ m([
755
+ r({ attribute: c.leftIcon.name })
756
+ ], u.prototype, "leftIcon");
757
+ m([
758
+ r({ attribute: c.rightIcon.name })
759
+ ], u.prototype, "rightIcon");
760
+ m([
761
+ r({ type: Boolean, attribute: c.fullWidth.name })
762
+ ], u.prototype, "fullWidth");
763
+ m([
764
+ r({ attribute: c.tooltipPlacement.name })
765
+ ], u.prototype, "tooltipPlacement");
766
+ m([
767
+ r({ attribute: c.tooltipLabel.name })
768
+ ], u.prototype, "tooltipLabel");
769
+ m([
770
+ H()
771
+ ], u.prototype, "_isKeyDown");
772
+ window.customElements.get(P) || window.customElements.define(P, u);
773
+ var J = Object.defineProperty, w = (s, t, o, n) => {
774
+ for (var e = void 0, l = s.length - 1, h; l >= 0; l--)
775
+ (h = s[l]) && (e = h(t, o, e) || e);
776
+ return e && J(t, o, e), e;
777
+ };
778
+ class y extends u {
779
+ constructor() {
780
+ super(...arguments), this.label = $.label.defaultValue.toString(), this.leftIcon = "", this.rightIcon = "", this.togglable = !1, this.visited = !1, this.active = !1, this.showLabel = !1, this.tooltipPlacement = "top-left", this.tooltipLabel = $.tooltipLabel.defaultValue.toString(), this.tooltipLeftIcon = "", this.tooltipRightIcon = "";
781
+ }
782
+ static {
783
+ this.styles = [
784
+ super.styles,
785
+ x`
786
+ :host {
787
+ all: unset;
788
+ color: #333;
789
+ gap: 8px;
790
+ padding: 0px;
791
+ box-shadow: unset;
792
+ background-color: unset;
793
+ display: block;
794
+ }
795
+
796
+ :host(:hover) {
797
+ background-color: unset;
798
+ cursor: pointer;
799
+
800
+ .hotspot-center-circle {
801
+ width: 80%;
802
+ height: 80%;
803
+ }
804
+ }
805
+
806
+ :host .hotspot-main {
807
+ display: flex;
808
+ align-items: center;
809
+ justify-content: center;
810
+ width: 100%;
811
+ height: 100%;
812
+ border-radius: 50%;
813
+ border: 2px solid rgba(204, 204, 204, 1);
814
+ background-color: ${i(a.Color.Fill.HotspotSecondary.$value)};
815
+ backdrop-filter: blur(3px);
816
+ transition: opacity 0.5s ease-in-out;
817
+ }
818
+
819
+ :host .hotspot-center-circle {
820
+ width: 30%;
821
+ height: 30%;
822
+ border-radius: 50%;
823
+ background-color: white;
824
+ transition: width 0.2s ease-in-out, height 0.2s ease-in-out, opacity 0.2s ease-in-out;
825
+ }
826
+
827
+ :host(:disabled) {
828
+ color: #b3b3b3;
829
+ border-radius: 12px;
830
+ background: #ccc;
831
+ }
832
+
833
+ :host([active]) {
834
+ .hotspot-main {
835
+ opacity: 0.5;
836
+ }
837
+
838
+ .hotspot-center-circle {
839
+ opacity: 0;
840
+ }
841
+
842
+ .tooltip {
843
+ opacity: 0 !important;
844
+ }
845
+ }
846
+
847
+ :host([size="small"]) {
848
+ width: 25px !important;
849
+ height: 25px !important;
850
+ aspect-ratio: 1 !important;
851
+ }
852
+
853
+ :host([size="medium"]) {
854
+ width: 34px !important;
855
+ height: 34px !important;
856
+ aspect-ratio: 1 !important;
857
+ }
858
+
859
+ :host([visited]) {
860
+ .hotspot-main {
861
+ border-color: transparent !important;
862
+ }
863
+ }
864
+ `
865
+ ];
866
+ }
867
+ doClick() {
868
+ if (this.disabled)
869
+ return;
870
+ this.togglable && (this.active = !this.active), typeof this.onClickCallback == "function" && this.onClickCallback.bind(this);
871
+ const t = new CustomEvent("epgonclick");
872
+ this.dispatchEvent(t);
873
+ }
874
+ updated(t) {
875
+ super.updated(t), t.has("active") && this.shadowRoot?.host.toggleAttribute("active", this.active);
876
+ }
877
+ _renderTooltip() {
878
+ const t = this.tooltipLabel ? p`<div slot="replace-all">${this.tooltipLabel}</div>` : b;
879
+ return p`
880
+ <epg-tooltip class="tooltip ${this.tooltipPlacement}" ?disabled=${this.tooltipPlacement === "none"} placement=${this.tooltipPlacement} theme="light">
881
+ ${t}
882
+ </epg-tooltip>
883
+ `;
884
+ }
885
+ defaultContents() {
886
+ return p`
887
+ <div class="hotspot-main">
888
+ <span class="hotspot-center-circle"></span>
889
+ </div>
890
+ `;
891
+ }
892
+ }
893
+ w([
894
+ r({ attribute: $.label.name })
895
+ ], y.prototype, "label");
896
+ w([
897
+ r({ attribute: !1 })
898
+ ], y.prototype, "leftIcon");
899
+ w([
900
+ r({ attribute: !1 })
901
+ ], y.prototype, "rightIcon");
902
+ w([
903
+ r({ type: Boolean, attribute: $.togglable.name })
904
+ ], y.prototype, "togglable");
905
+ w([
906
+ r({ type: Boolean, attribute: $.visited.name })
907
+ ], y.prototype, "visited");
908
+ w([
909
+ r({
910
+ type: Boolean,
911
+ attribute: $.active.name
912
+ })
913
+ ], y.prototype, "active");
914
+ window.customElements.get(L) || window.customElements.define(L, y);
915
+ var Q = Object.defineProperty, g = (s, t, o, n) => {
916
+ for (var e = void 0, l = s.length - 1, h; l >= 0; l--)
917
+ (h = s[l]) && (e = h(t, o, e) || e);
918
+ return e && Q(t, o, e), e;
919
+ };
920
+ const f = class k extends W {
921
+ constructor() {
922
+ super(), this._loggerContext = "HOTSPOTS MANAGER", this.hotspots = /* @__PURE__ */ new Map(), this.activeHotspot = void 0, this.activeHotspotIndex = -1, this.isPortrait = !0, this._cardsState = d.collapsed, this._leftCardContents = b, this._rightCardContents = b, this._allCards = [];
923
+ }
924
+ static {
925
+ this.webComponentName = "hotspots-manager";
926
+ }
927
+ updateActiveHotspotIndex() {
928
+ this.activeHotspot && (this.activeHotspotIndex = this.hotspotsOrder.indexOf(this.activeHotspot?.hotspotID));
929
+ }
930
+ static {
931
+ this.styles = [
932
+ T.styles,
933
+ x`
934
+ :host {
935
+ position: absolute;
936
+ top: 0;
937
+ left: 0;
938
+ width: 100%;
939
+ height: 100%;
940
+ pointer-events: none;
941
+ }
942
+
943
+ :host * {
944
+ pointer-events: auto;
945
+ }
946
+
947
+ .hotspot-cards-container {
948
+ --landscape-cards-offset: 40px;
949
+ width: 40%;
950
+ min-width: 320px;
951
+ height: calc(100% - (var(--landscape-cards-offset)*2));
952
+ align-self: anchor-center;
953
+ box-sizing: border-box;
954
+ position: absolute;
955
+ z-index: 1;
956
+ opacity: 0;
957
+ top: 0;
958
+ display: none;
959
+ transform: translateX(30%) translateY(30%);
960
+ flex-direction: column-reverse;
961
+ background-color: rgba(255, 255, 255, 0);
962
+ transition: opacity 0.6s ease, display 0.6s ease allow-discrete, transform 0.6s, max-height 0.5s, background-color 1s;
963
+
964
+ .close-button {
965
+ position: absolute;
966
+ top: 20px;
967
+ right: 20px;
968
+ z-index: 1;
969
+ }
970
+
971
+ .collapse-card-button {
972
+ position: absolute;
973
+ top: var(--landscape-cards-offset);
974
+ right: var(--landscape-cards-offset);
975
+ z-index: 6;
976
+ transition: opacity 0.5s;
977
+ }
978
+
979
+
980
+ &.left {
981
+ left: var(--landscape-cards-offset);
982
+ transform: translateX(-30%) translateY(0%);
983
+ }
984
+
985
+ &.right {
986
+ right: var(--landscape-cards-offset);
987
+ transform: translateX(30%) translateY(0%);
988
+ }
989
+ }
990
+
991
+ :host([is-portrait]) {
992
+ .hotspot-cards-container {
993
+ &.carousel {
994
+ width: 100%;
995
+ height: 100%;
996
+ gap: 0px;
997
+ top: unset;
998
+ bottom: 0px;
999
+ transition: transform 0.5s, opacity 0.5s, max-height 0.5s;
1000
+ box-sizing: border-box;
1001
+ align-self: end;
1002
+ transform: translateX(0%) translateY(30%);
1003
+
1004
+ &.show {
1005
+ opacity: 1;
1006
+ display: flex;
1007
+ transition: transform 0.5s, opacity 0.5s, max-height 0.5s;
1008
+ transform: translateX(0%) translateY(0%);
1009
+ }
1010
+
1011
+ .close-button {
1012
+ position: unset;
1013
+ }
1014
+
1015
+ .expand-overlay {
1016
+ width: 100%;
1017
+ height: 100%;
1018
+ display: flex;
1019
+ flex-direction: column;
1020
+ padding-bottom: 15px;
1021
+ transition: padding 0.5s;
1022
+ }
1023
+
1024
+ .cards-carousel-top-panel {
1025
+ display: flex;
1026
+ justify-content: space-between;
1027
+ align-items: center;
1028
+ z-index: 3;
1029
+ position: unset;
1030
+ padding-left: 40px;
1031
+ padding-right: 40px;
1032
+ transition: height 0.5s, opacity 0.5s;
1033
+ z-index: 2;
1034
+ }
1035
+
1036
+ .cards-carousel-top-panel .page-indicator {
1037
+ display: flex;
1038
+ position: relative;
1039
+ font-style: normal;
1040
+ font-weight: 400;
1041
+ justify-content: center;
1042
+ align-items: center;
1043
+ padding: 12px 16px;
1044
+ box-sizing: border-box;
1045
+ background-color: rgba(248, 248, 248, 0.8000);
1046
+ border-radius: 12px;
1047
+ pointer-events: none;
1048
+ }
1049
+
1050
+ &.collapsed {
1051
+ gap: 10px;
1052
+ max-height: 500px;
1053
+
1054
+ ::part(epg-card-expand-button-span) {
1055
+ opacity: 1;
1056
+ }
1057
+
1058
+ .collapse-card-button {
1059
+ opacity: 0;
1060
+ pointer-events: none;
1061
+ }
1062
+ }
1063
+
1064
+ &.expanded {
1065
+ max-height: 100%;
1066
+ background-color: rgba(255, 255, 255, 1);
1067
+
1068
+ ::part(epg-card-expand-button-span) {
1069
+ opacity: 0;
1070
+ pointer-events: none;
1071
+ height: 0px;
1072
+ }
1073
+
1074
+ .cards-carousel-top-panel {
1075
+ opacity: 0;
1076
+ height: 0px;
1077
+ pointer-events: none;
1078
+ }
1079
+
1080
+ .expand-overlay {
1081
+ pointer-events: none;
1082
+ padding-bottom: 0px;
1083
+ z-index: 4;
1084
+ }
1085
+
1086
+ ::part(swiper-slide) {
1087
+ transform: scaleX(0.9) scaleY(0.98);
1088
+ }
1089
+ }
1090
+ }
1091
+ }
1092
+ }
1093
+
1094
+ .hotspot-cards-container.show {
1095
+ opacity: 1;
1096
+ display: flex;
1097
+
1098
+ &.carousel {
1099
+ transform: translateX(0%) translateY(0%);
1100
+ }
1101
+
1102
+ &.left {
1103
+ transform: translateX(0%) translateY(0%);
1104
+ }
1105
+
1106
+ &.right {
1107
+ transform: translateX(0%) translateY(0%);
1108
+ }
1109
+ }
1110
+
1111
+ @starting-style {
1112
+ .hotspot-cards-container.show {
1113
+ opacity: 0;
1114
+
1115
+ &.carousel {
1116
+ transform: translateX(0%) translateY(30%);
1117
+ }
1118
+
1119
+ &.left {
1120
+ transform: translateX(-30%) translateY(0%);
1121
+ }
1122
+
1123
+ &.right {
1124
+ transform: translateX(30%) translateY(0%);
1125
+ }
1126
+ }
1127
+
1128
+ }
1129
+ `
1130
+ ];
1131
+ }
1132
+ /**
1133
+ * Since we do not want to define these web component at all times,
1134
+ * this method needs to be explicitly called before usage.
1135
+ */
1136
+ static setupWebComponent() {
1137
+ window.customElements.get(k.webComponentName) || window.customElements.define(k.webComponentName, k);
1138
+ }
1139
+ firstUpdated() {
1140
+ this._setupEventListeners();
1141
+ }
1142
+ createHotspots(t) {
1143
+ for (const o of t) {
1144
+ const n = new T({ config: o, appWcRef: this.appWcRef, hotspotManagerRef: this });
1145
+ this.hotspots.set(n.hotspotID, n);
1146
+ }
1147
+ this.updateHotspotsOrder(Array.from(this.hotspots.keys()));
1148
+ }
1149
+ stepHotspots(t) {
1150
+ const o = this.activeHotspotIndex;
1151
+ if (o === null)
1152
+ return;
1153
+ const n = this.hotspotsOrder.length;
1154
+ let e = o;
1155
+ t === "next" ? (e = o + 1, e >= n && (e = 0)) : t === "prev" && (e = o - 1, e < 0 && (e = n - 1));
1156
+ const l = this.hotspotsOrder[e];
1157
+ this.setActiveHotspot({ hotspotId: l });
1158
+ }
1159
+ nextHotspot() {
1160
+ return this.stepHotspots("next"), this.appWcRef.appEvents.hotspotNextEvent.fire({ hotspot: this.activeHotspot }), this.activeHotspot;
1161
+ }
1162
+ previousHotspot() {
1163
+ return this.stepHotspots("prev"), this.appWcRef.appEvents.hotspotPreviousEvent.fire({ hotspot: this.activeHotspot }), this.activeHotspot;
1164
+ }
1165
+ updateHotspots(t) {
1166
+ for (const o of t) {
1167
+ const n = this.hotspots.get(o.hotspotID);
1168
+ n && n.updateHotspotConfig(o);
1169
+ }
1170
+ this._resolveHotspotCardContents();
1171
+ }
1172
+ updateHotspotsOrder(t) {
1173
+ this.hotspotsOrder = t;
1174
+ }
1175
+ removeHotspots(t) {
1176
+ this.activeHotspot && this.closeActiveHotspot();
1177
+ for (const o of t)
1178
+ this.hotspots.delete(o);
1179
+ this.updateHotspotsOrder(Array.from(this.hotspots.keys()));
1180
+ }
1181
+ removeAllHotspots() {
1182
+ this.removeHotspots(Array.from(this.hotspots.keys()));
1183
+ }
1184
+ setActiveHotspotByIndex(t) {
1185
+ const o = this.hotspotsOrder[t];
1186
+ this.setActiveHotspot({ hotspotId: o, state: this._cardsState });
1187
+ }
1188
+ setActiveHotspot({
1189
+ hotspotId: t,
1190
+ state: o = this._cardsState
1191
+ }) {
1192
+ if (this.activeHotspot?.hotspotID === t)
1193
+ return;
1194
+ if (t === null) {
1195
+ this.activeHotspot = void 0, this.updateActiveHotspotIndex(), this.appWcRef.cameraManager.resetCurrentCameraTransformsToLastSavedState();
1196
+ return;
1197
+ }
1198
+ this.enabled === !1 && (this.enabled = !0);
1199
+ const n = !this.activeHotspot;
1200
+ if (this.activeHotspot = this.hotspots.get(t), this.updateActiveHotspotIndex(), this.setActiveHotspotState(o), this._resolveHotspotCardContents(), this.appWcRef.appEvents.cameraMoveToTransform.fire({ cameraTransforms: this.activeHotspot?.camera, saveFirst: n }), this.appWcRef.isPortraitOrientation) {
1201
+ let e = 0;
1202
+ this.activeHotspot?.desktopPlacement === v.LEFT ? e = 0.2 : this.activeHotspot?.desktopPlacement === v.RIGHT && (e = -0.2), this.appWcRef.cameraManager.mainCameraControls.setFocalOffset(e, 0.2, 0, !0);
1203
+ }
1204
+ }
1205
+ _resolveHotspotCardContents() {
1206
+ this._allCards = [];
1207
+ for (const t of this.hotspots.values()) {
1208
+ const o = p`
1209
+ <swiper-slide part="swiper-slide">
1210
+ <style>
1211
+ .expand-button {
1212
+ position: absolute;
1213
+ width: 100%;
1214
+ height: 100%;
1215
+ border-radius: 25px;
1216
+ transition: opacity 0.8s, height 0.5s;
1217
+ background-color: #f9f9f9;
1218
+ z-index: 3;
1219
+ font-family: "Helvetica Neue";
1220
+ font-weight: 400;
1221
+ display: flex;
1222
+ flex-direction: column;
1223
+ }
1224
+
1225
+ .expand-button span {
1226
+ height: 60px;
1227
+ width: 100%;
1228
+ display: flex;
1229
+ align-items: center;
1230
+ justify-content: center;
1231
+ transition: opacity 0.5s, height 0.5s;
1232
+ transition-delay: 0.25s;
1233
+ }
1234
+
1235
+ epg-card {
1236
+ box-shadow: unset;
1237
+ }
1238
+
1239
+ swiper-slide {
1240
+ box-shadow: 0px 0px 3px 3px rgba(12, 12, 13, 0.20);
1241
+ height: calc(100% - 15px) !important;
1242
+ align-self: center;
1243
+ transition: transform 0.5s;
1244
+ }
1245
+ </style>
1246
+
1247
+ <div class="expand-button" part="epg-card-expand-button">
1248
+ ${t.renderCardTemplate()}
1249
+ <span part="epg-card-expand-button-span">EXPAND</span>
1250
+ </div>
1251
+ </swiper-slide>
1252
+ `;
1253
+ this._allCards.push(o);
1254
+ }
1255
+ this.activeHotspot?.desktopPlacement === v.LEFT ? this._leftCardContents = this.activeHotspot.renderCardTemplate() : this.activeHotspot?.desktopPlacement === v.RIGHT && (this._rightCardContents = this.activeHotspot.renderCardTemplate());
1256
+ }
1257
+ expandCards() {
1258
+ this._cardsState = d.expanded;
1259
+ }
1260
+ collapseCards() {
1261
+ this._cardsState = d.collapsed;
1262
+ }
1263
+ setActiveHotspotState(t = d.collapsed) {
1264
+ if (this.activeHotspot)
1265
+ switch (t) {
1266
+ case d.collapsed:
1267
+ this.collapseCards();
1268
+ break;
1269
+ case d.expanded:
1270
+ this.expandCards();
1271
+ break;
1272
+ }
1273
+ }
1274
+ openHotspot({ hotspotId: t, state: o }) {
1275
+ this.setActiveHotspot({ hotspotId: t, state: o }), this.appWcRef.appEvents.hotspotOpenEvent.fire({ hotspot: this.activeHotspot });
1276
+ }
1277
+ closeActiveHotspot() {
1278
+ const t = this.activeHotspot?.hotspotID;
1279
+ this.setActiveHotspot({ hotspotId: null }), this.appWcRef.appEvents.hotspotClosedEvent.fire({ hotspotId: t });
1280
+ }
1281
+ recalculateHotspotPositions() {
1282
+ this.requestUpdate();
1283
+ }
1284
+ _renderHotspotIndicatorTemplates() {
1285
+ return Array.from(this.hotspots.values()).map(
1286
+ (t) => t.renderAnnotationTemplate(
1287
+ this.activeHotspot?.hotspotID
1288
+ )
1289
+ );
1290
+ }
1291
+ _onCardsCarouselSlideChange(t) {
1292
+ this.setActiveHotspotByIndex(t.detail.newSlideIndex);
1293
+ }
1294
+ _onExpandButtonClicked(t) {
1295
+ t.stopPropagation(), t.preventDefault(), this.setActiveHotspotState(d.expanded);
1296
+ }
1297
+ _renderMobileHotspotCardTemplates() {
1298
+ const t = this._cardsState === d.expanded ? d.expanded : d.collapsed;
1299
+ return p`
1300
+ <div
1301
+ id="mobileHotspotCardsContainer"
1302
+ class="hotspot-cards-container carousel ${this.activeHotspot ? "show" : ""} ${t}"
1303
+ >
1304
+ <div class="expand-overlay" @click=${this._onExpandButtonClicked}>
1305
+ <epg-carousel
1306
+ nested
1307
+ hide-pagination
1308
+ ?swipe-only-interaction=${this._cardsState === d.collapsed}
1309
+ .data=${this._allCards}
1310
+ current-index=${this.activeHotspotIndex}
1311
+ @slide-changed=${this._onCardsCarouselSlideChange}
1312
+ slides-per-view=${this._cardsState === d.collapsed ? 1.2 : 1}
1313
+ space-between=${this._cardsState === d.collapsed ? 20 : 0}
1314
+ centered-slides
1315
+ disable-interactions=${this._cardsState === d.expanded ? "true" : "false"}
1316
+ auto-height="false"
1317
+ ></epg-carousel>
1318
+ </div>
1319
+
1320
+ <div class="cards-carousel-top-panel">
1321
+ <div class="page-indicator">${this.activeHotspotIndex + 1} / ${this._allCards.length}</div>
1322
+ <epg-button-icon
1323
+ id="closeButton"
1324
+ aria-label="Close Card"
1325
+ class="close-button"
1326
+ left-icon="cancel"
1327
+ @epgonclick=${this.closeActiveHotspot}
1328
+ ></epg-button-icon>
1329
+ </div>
1330
+
1331
+ <epg-button-icon
1332
+ id="collapseCardButton"
1333
+ aria-label="Collapse Card Card"
1334
+ class="collapse-card-button"
1335
+ left-icon="cancel"
1336
+ @epgonclick=${this.collapseCards}
1337
+ part="collapse-card-button"
1338
+ ></epg-button-icon>
1339
+ </div>
1340
+ `;
1341
+ }
1342
+ _renderDesktopHotspotCardTemplates() {
1343
+ const t = `hotspot-cards-container left ${this.activeHotspot?.desktopPlacement === v.LEFT ? "show" : ""}`, o = `hotspot-cards-container right ${this.activeHotspot?.desktopPlacement === v.RIGHT ? "show" : ""}`;
1344
+ return p`
1345
+ <div id="leftHotspotCardsContainer" class=${t}>
1346
+ <div class="cards-carousel-top-panel">
1347
+ <epg-button-icon
1348
+ id="closeButton"
1349
+ aria-label="Close Card"
1350
+ class="close-button"
1351
+ left-icon="cancel"
1352
+ @epgonclick=${this.closeActiveHotspot}
1353
+ ></epg-button-icon>
1354
+ </div>
1355
+ ${this._leftCardContents}
1356
+ </div>
1357
+ <div id="rightHotspotCardsContainer" class=${o}>
1358
+ <div class="cards-carousel-top-panel">
1359
+ <epg-button-icon
1360
+ id="closeButton"
1361
+ aria-label="Close Card"
1362
+ class="close-button"
1363
+ left-icon="cancel"
1364
+ @epgonclick=${this.closeActiveHotspot}
1365
+ ></epg-button-icon>
1366
+ </div>
1367
+ ${this._rightCardContents}
1368
+ </div>
1369
+ `;
1370
+ }
1371
+ _setupEventListeners() {
1372
+ this.appWcRef.addEventListener(
1373
+ this.appWcRef.appEvents.hotspotClickedEvent.name,
1374
+ (t) => {
1375
+ this.openHotspot({ hotspotId: t.detail.hotspot.hotspotID });
1376
+ }
1377
+ );
1378
+ }
1379
+ render() {
1380
+ return this.enabled ? (this.isPortrait = this.appWcRef.isPortraitOrientation, p`
1381
+ ${this._renderHotspotIndicatorTemplates()}
1382
+
1383
+ ${this.appWcRef.isPortraitOrientation ? this._renderMobileHotspotCardTemplates() : this._renderDesktopHotspotCardTemplates()}
1384
+ `) : b;
1385
+ }
1386
+ };
1387
+ g([
1388
+ r({ attribute: !1 })
1389
+ ], f.prototype, "hotspots");
1390
+ g([
1391
+ r({ attribute: !1 })
1392
+ ], f.prototype, "hotspotsOrder");
1393
+ g([
1394
+ r({ attribute: !1 })
1395
+ ], f.prototype, "activeHotspot");
1396
+ g([
1397
+ r({ attribute: !1 })
1398
+ ], f.prototype, "activeHotspotIndex");
1399
+ g([
1400
+ r({ type: Boolean, attribute: "is-portrait", reflect: !0 })
1401
+ ], f.prototype, "isPortrait");
1402
+ g([
1403
+ H()
1404
+ ], f.prototype, "_cardsState");
1405
+ g([
1406
+ H()
1407
+ ], f.prototype, "_leftCardContents");
1408
+ g([
1409
+ H()
1410
+ ], f.prototype, "_rightCardContents");
1411
+ g([
1412
+ H()
1413
+ ], f.prototype, "_allCards");
1414
+ g([
1415
+ S("#leftHotspotCardsContainer")
1416
+ ], f.prototype, "leftHotspotCardsContainerElem");
1417
+ g([
1418
+ S("#rightHotspotCardsContainer")
1419
+ ], f.prototype, "rightHotspotCardsContainerElem");
1420
+ let et = f;
1421
+ export {
1422
+ u as E,
1423
+ et as H,
1424
+ M,
1425
+ c as U
1426
+ };