@ericchen1990/pano-view 3.1.0 → 3.1.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.
package/dist/index.mjs CHANGED
@@ -40,7 +40,7 @@ var require_howler = __commonJS({
40
40
  * @return {Howler}
41
41
  */
42
42
  init: function() {
43
- var self = this || Howler3;
43
+ var self = this || Howler4;
44
44
  self._counter = 1e3;
45
45
  self._html5AudioPool = [];
46
46
  self.html5PoolSize = 10;
@@ -65,7 +65,7 @@ var require_howler = __commonJS({
65
65
  * @return {Howler/Float} Returns self or current volume.
66
66
  */
67
67
  volume: function(vol) {
68
- var self = this || Howler3;
68
+ var self = this || Howler4;
69
69
  vol = parseFloat(vol);
70
70
  if (!self.ctx) {
71
71
  setupAudioContext();
@@ -76,7 +76,7 @@ var require_howler = __commonJS({
76
76
  return self;
77
77
  }
78
78
  if (self.usingWebAudio) {
79
- self.masterGain.gain.setValueAtTime(vol, Howler3.ctx.currentTime);
79
+ self.masterGain.gain.setValueAtTime(vol, Howler4.ctx.currentTime);
80
80
  }
81
81
  for (var i = 0; i < self._howls.length; i++) {
82
82
  if (!self._howls[i]._webAudio) {
@@ -98,13 +98,13 @@ var require_howler = __commonJS({
98
98
  * @param {Boolean} muted Is muted or not.
99
99
  */
100
100
  mute: function(muted) {
101
- var self = this || Howler3;
101
+ var self = this || Howler4;
102
102
  if (!self.ctx) {
103
103
  setupAudioContext();
104
104
  }
105
105
  self._muted = muted;
106
106
  if (self.usingWebAudio) {
107
- self.masterGain.gain.setValueAtTime(muted ? 0 : self._volume, Howler3.ctx.currentTime);
107
+ self.masterGain.gain.setValueAtTime(muted ? 0 : self._volume, Howler4.ctx.currentTime);
108
108
  }
109
109
  for (var i = 0; i < self._howls.length; i++) {
110
110
  if (!self._howls[i]._webAudio) {
@@ -123,7 +123,7 @@ var require_howler = __commonJS({
123
123
  * Handle stopping all sounds globally.
124
124
  */
125
125
  stop: function() {
126
- var self = this || Howler3;
126
+ var self = this || Howler4;
127
127
  for (var i = 0; i < self._howls.length; i++) {
128
128
  self._howls[i].stop();
129
129
  }
@@ -134,7 +134,7 @@ var require_howler = __commonJS({
134
134
  * @return {Howler}
135
135
  */
136
136
  unload: function() {
137
- var self = this || Howler3;
137
+ var self = this || Howler4;
138
138
  for (var i = self._howls.length - 1; i >= 0; i--) {
139
139
  self._howls[i].unload();
140
140
  }
@@ -151,14 +151,14 @@ var require_howler = __commonJS({
151
151
  * @return {Boolean}
152
152
  */
153
153
  codecs: function(ext) {
154
- return (this || Howler3)._codecs[ext.replace(/^x-/, "")];
154
+ return (this || Howler4)._codecs[ext.replace(/^x-/, "")];
155
155
  },
156
156
  /**
157
157
  * Setup various state values for global tracking.
158
158
  * @return {Howler}
159
159
  */
160
160
  _setup: function() {
161
- var self = this || Howler3;
161
+ var self = this || Howler4;
162
162
  self.state = self.ctx ? self.ctx.state || "suspended" : "suspended";
163
163
  self._autoSuspend();
164
164
  if (!self.usingWebAudio) {
@@ -192,7 +192,7 @@ var require_howler = __commonJS({
192
192
  * @return {Howler}
193
193
  */
194
194
  _setupCodecs: function() {
195
- var self = this || Howler3;
195
+ var self = this || Howler4;
196
196
  var audioTest = null;
197
197
  try {
198
198
  audioTest = typeof Audio !== "undefined" ? new Audio() : null;
@@ -235,7 +235,7 @@ var require_howler = __commonJS({
235
235
  * @return {Howler}
236
236
  */
237
237
  _unlockAudio: function() {
238
- var self = this || Howler3;
238
+ var self = this || Howler4;
239
239
  if (self._audioUnlocked || !self.ctx) {
240
240
  return;
241
241
  }
@@ -305,7 +305,7 @@ var require_howler = __commonJS({
305
305
  * @return {Audio} HTML5 Audio object.
306
306
  */
307
307
  _obtainHtml5Audio: function() {
308
- var self = this || Howler3;
308
+ var self = this || Howler4;
309
309
  if (self._html5AudioPool.length) {
310
310
  return self._html5AudioPool.pop();
311
311
  }
@@ -322,7 +322,7 @@ var require_howler = __commonJS({
322
322
  * @return {Howler}
323
323
  */
324
324
  _releaseHtml5Audio: function(audio) {
325
- var self = this || Howler3;
325
+ var self = this || Howler4;
326
326
  if (audio._unlocked) {
327
327
  self._html5AudioPool.push(audio);
328
328
  }
@@ -335,7 +335,7 @@ var require_howler = __commonJS({
335
335
  */
336
336
  _autoSuspend: function() {
337
337
  var self = this;
338
- if (!self.autoSuspend || !self.ctx || typeof self.ctx.suspend === "undefined" || !Howler3.usingWebAudio) {
338
+ if (!self.autoSuspend || !self.ctx || typeof self.ctx.suspend === "undefined" || !Howler4.usingWebAudio) {
339
339
  return;
340
340
  }
341
341
  for (var i = 0; i < self._howls.length; i++) {
@@ -373,7 +373,7 @@ var require_howler = __commonJS({
373
373
  */
374
374
  _autoResume: function() {
375
375
  var self = this;
376
- if (!self.ctx || typeof self.ctx.resume === "undefined" || !Howler3.usingWebAudio) {
376
+ if (!self.ctx || typeof self.ctx.resume === "undefined" || !Howler4.usingWebAudio) {
377
377
  return;
378
378
  }
379
379
  if (self.state === "running" && self.ctx.state !== "interrupted" && self._suspendTimer) {
@@ -396,7 +396,7 @@ var require_howler = __commonJS({
396
396
  return self;
397
397
  }
398
398
  };
399
- var Howler3 = new HowlerGlobal2();
399
+ var Howler4 = new HowlerGlobal2();
400
400
  var Howl3 = function(o) {
401
401
  var self = this;
402
402
  if (!o.src || o.src.length === 0) {
@@ -413,7 +413,7 @@ var require_howler = __commonJS({
413
413
  */
414
414
  init: function(o) {
415
415
  var self = this;
416
- if (!Howler3.ctx) {
416
+ if (!Howler4.ctx) {
417
417
  setupAudioContext();
418
418
  }
419
419
  self._autoplay = o.autoplay || false;
@@ -452,11 +452,11 @@ var require_howler = __commonJS({
452
452
  self._onseek = o.onseek ? [{ fn: o.onseek }] : [];
453
453
  self._onunlock = o.onunlock ? [{ fn: o.onunlock }] : [];
454
454
  self._onresume = [];
455
- self._webAudio = Howler3.usingWebAudio && !self._html5;
456
- if (typeof Howler3.ctx !== "undefined" && Howler3.ctx && Howler3.autoUnlock) {
457
- Howler3._unlockAudio();
455
+ self._webAudio = Howler4.usingWebAudio && !self._html5;
456
+ if (typeof Howler4.ctx !== "undefined" && Howler4.ctx && Howler4.autoUnlock) {
457
+ Howler4._unlockAudio();
458
458
  }
459
- Howler3._howls.push(self);
459
+ Howler4._howls.push(self);
460
460
  if (self._autoplay) {
461
461
  self._queue.push({
462
462
  event: "play",
@@ -477,7 +477,7 @@ var require_howler = __commonJS({
477
477
  load: function() {
478
478
  var self = this;
479
479
  var url = null;
480
- if (Howler3.noAudio) {
480
+ if (Howler4.noAudio) {
481
481
  self._emit("loaderror", null, "No audio support.");
482
482
  return;
483
483
  }
@@ -505,7 +505,7 @@ var require_howler = __commonJS({
505
505
  if (!ext) {
506
506
  console.warn('No file extension was found. Consider using the "format" property or specify an extension.');
507
507
  }
508
- if (ext && Howler3.codecs(ext)) {
508
+ if (ext && Howler4.codecs(ext)) {
509
509
  url = self._src[i];
510
510
  break;
511
511
  }
@@ -583,7 +583,7 @@ var require_howler = __commonJS({
583
583
  return sound._id;
584
584
  }
585
585
  if (self._webAudio) {
586
- Howler3._autoResume();
586
+ Howler4._autoResume();
587
587
  }
588
588
  var seek = Math.max(0, sound._seek > 0 ? sound._seek : self._sprite[sprite][0] / 1e3);
589
589
  var duration = Math.max(0, (self._sprite[sprite][0] + self._sprite[sprite][1]) / 1e3 - seek);
@@ -610,8 +610,8 @@ var require_howler = __commonJS({
610
610
  setParams();
611
611
  self._refreshBuffer(sound);
612
612
  var vol = sound._muted || self._muted ? 0 : sound._volume;
613
- node.gain.setValueAtTime(vol, Howler3.ctx.currentTime);
614
- sound._playStart = Howler3.ctx.currentTime;
613
+ node.gain.setValueAtTime(vol, Howler4.ctx.currentTime);
614
+ sound._playStart = Howler4.ctx.currentTime;
615
615
  if (typeof node.bufferSource.start === "undefined") {
616
616
  sound._loop ? node.bufferSource.noteGrainOn(0, seek, 86400) : node.bufferSource.noteGrainOn(0, seek, duration);
617
617
  } else {
@@ -627,7 +627,7 @@ var require_howler = __commonJS({
627
627
  }, 0);
628
628
  }
629
629
  };
630
- if (Howler3.state === "running" && Howler3.ctx.state !== "interrupted") {
630
+ if (Howler4.state === "running" && Howler4.ctx.state !== "interrupted") {
631
631
  playWebAudio();
632
632
  } else {
633
633
  self._playLock = true;
@@ -637,8 +637,8 @@ var require_howler = __commonJS({
637
637
  } else {
638
638
  var playHtml5 = function() {
639
639
  node.currentTime = seek;
640
- node.muted = sound._muted || self._muted || Howler3._muted || node.muted;
641
- node.volume = sound._volume * Howler3.volume();
640
+ node.muted = sound._muted || self._muted || Howler4._muted || node.muted;
641
+ node.volume = sound._volume * Howler4.volume();
642
642
  node.playbackRate = sound._rate;
643
643
  try {
644
644
  var play = node.play();
@@ -686,7 +686,7 @@ var require_howler = __commonJS({
686
686
  node.src = self._src;
687
687
  node.load();
688
688
  }
689
- var loadedNoReadyState = window && window.ejecta || !node.readyState && Howler3._navigator.isCocoonJS;
689
+ var loadedNoReadyState = window && window.ejecta || !node.readyState && Howler4._navigator.isCocoonJS;
690
690
  if (node.readyState >= 3 || loadedNoReadyState) {
691
691
  playHtml5();
692
692
  } else {
@@ -695,9 +695,9 @@ var require_howler = __commonJS({
695
695
  var listener = function() {
696
696
  self._state = "loaded";
697
697
  playHtml5();
698
- node.removeEventListener(Howler3._canPlayEvent, listener, false);
698
+ node.removeEventListener(Howler4._canPlayEvent, listener, false);
699
699
  };
700
- node.addEventListener(Howler3._canPlayEvent, listener, false);
700
+ node.addEventListener(Howler4._canPlayEvent, listener, false);
701
701
  self._clearTimer(sound._id);
702
702
  }
703
703
  }
@@ -835,9 +835,9 @@ var require_howler = __commonJS({
835
835
  self._stopFade(sound._id);
836
836
  }
837
837
  if (self._webAudio && sound._node) {
838
- sound._node.gain.setValueAtTime(muted ? 0 : sound._volume, Howler3.ctx.currentTime);
838
+ sound._node.gain.setValueAtTime(muted ? 0 : sound._volume, Howler4.ctx.currentTime);
839
839
  } else if (sound._node) {
840
- sound._node.muted = Howler3._muted ? true : muted;
840
+ sound._node.muted = Howler4._muted ? true : muted;
841
841
  }
842
842
  self._emit("mute", sound._id);
843
843
  }
@@ -893,9 +893,9 @@ var require_howler = __commonJS({
893
893
  self._stopFade(id[i]);
894
894
  }
895
895
  if (self._webAudio && sound._node && !sound._muted) {
896
- sound._node.gain.setValueAtTime(vol, Howler3.ctx.currentTime);
896
+ sound._node.gain.setValueAtTime(vol, Howler4.ctx.currentTime);
897
897
  } else if (sound._node && !sound._muted) {
898
- sound._node.volume = vol * Howler3.volume();
898
+ sound._node.volume = vol * Howler4.volume();
899
899
  }
900
900
  self._emit("volume", sound._id);
901
901
  }
@@ -937,7 +937,7 @@ var require_howler = __commonJS({
937
937
  self._stopFade(ids[i]);
938
938
  }
939
939
  if (self._webAudio && !sound._muted) {
940
- var currentTime = Howler3.ctx.currentTime;
940
+ var currentTime = Howler4.ctx.currentTime;
941
941
  var end = currentTime + len / 1e3;
942
942
  sound._volume = from;
943
943
  sound._node.gain.setValueAtTime(from, currentTime);
@@ -1003,7 +1003,7 @@ var require_howler = __commonJS({
1003
1003
  var sound = self._soundById(id);
1004
1004
  if (sound && sound._interval) {
1005
1005
  if (self._webAudio) {
1006
- sound._node.gain.cancelScheduledValues(Howler3.ctx.currentTime);
1006
+ sound._node.gain.cancelScheduledValues(Howler4.ctx.currentTime);
1007
1007
  }
1008
1008
  clearInterval(sound._interval);
1009
1009
  sound._interval = null;
@@ -1105,11 +1105,11 @@ var require_howler = __commonJS({
1105
1105
  if (sound) {
1106
1106
  if (self.playing(id[i])) {
1107
1107
  sound._rateSeek = self.seek(id[i]);
1108
- sound._playStart = self._webAudio ? Howler3.ctx.currentTime : sound._playStart;
1108
+ sound._playStart = self._webAudio ? Howler4.ctx.currentTime : sound._playStart;
1109
1109
  }
1110
1110
  sound._rate = rate;
1111
1111
  if (self._webAudio && sound._node && sound._node.bufferSource) {
1112
- sound._node.bufferSource.playbackRate.setValueAtTime(rate, Howler3.ctx.currentTime);
1112
+ sound._node.bufferSource.playbackRate.setValueAtTime(rate, Howler4.ctx.currentTime);
1113
1113
  } else if (sound._node) {
1114
1114
  sound._node.playbackRate = rate;
1115
1115
  }
@@ -1203,7 +1203,7 @@ var require_howler = __commonJS({
1203
1203
  }
1204
1204
  } else {
1205
1205
  if (self._webAudio) {
1206
- var realTime = self.playing(id) ? Howler3.ctx.currentTime - sound._playStart : 0;
1206
+ var realTime = self.playing(id) ? Howler4.ctx.currentTime - sound._playStart : 0;
1207
1207
  var rateSeek = sound._rateSeek ? sound._rateSeek - sound._seek : 0;
1208
1208
  return sound._seek + (rateSeek + realTime * Math.abs(sound._rate));
1209
1209
  } else {
@@ -1266,20 +1266,20 @@ var require_howler = __commonJS({
1266
1266
  if (!self._webAudio) {
1267
1267
  self._clearSound(sounds[i]._node);
1268
1268
  sounds[i]._node.removeEventListener("error", sounds[i]._errorFn, false);
1269
- sounds[i]._node.removeEventListener(Howler3._canPlayEvent, sounds[i]._loadFn, false);
1269
+ sounds[i]._node.removeEventListener(Howler4._canPlayEvent, sounds[i]._loadFn, false);
1270
1270
  sounds[i]._node.removeEventListener("ended", sounds[i]._endFn, false);
1271
- Howler3._releaseHtml5Audio(sounds[i]._node);
1271
+ Howler4._releaseHtml5Audio(sounds[i]._node);
1272
1272
  }
1273
1273
  delete sounds[i]._node;
1274
1274
  self._clearTimer(sounds[i]._id);
1275
1275
  }
1276
- var index = Howler3._howls.indexOf(self);
1276
+ var index = Howler4._howls.indexOf(self);
1277
1277
  if (index >= 0) {
1278
- Howler3._howls.splice(index, 1);
1278
+ Howler4._howls.splice(index, 1);
1279
1279
  }
1280
1280
  var remCache = true;
1281
- for (i = 0; i < Howler3._howls.length; i++) {
1282
- if (Howler3._howls[i]._src === self._src || self._src.indexOf(Howler3._howls[i]._src) >= 0) {
1281
+ for (i = 0; i < Howler4._howls.length; i++) {
1282
+ if (Howler4._howls[i]._src === self._src || self._src.indexOf(Howler4._howls[i]._src) >= 0) {
1283
1283
  remCache = false;
1284
1284
  break;
1285
1285
  }
@@ -1287,7 +1287,7 @@ var require_howler = __commonJS({
1287
1287
  if (cache && remCache) {
1288
1288
  delete cache[self._src];
1289
1289
  }
1290
- Howler3.noAudio = false;
1290
+ Howler4.noAudio = false;
1291
1291
  self._state = "unloaded";
1292
1292
  self._sounds = [];
1293
1293
  self = null;
@@ -1420,7 +1420,7 @@ var require_howler = __commonJS({
1420
1420
  self._emit("play", sound._id);
1421
1421
  sound._seek = sound._start || 0;
1422
1422
  sound._rateSeek = 0;
1423
- sound._playStart = Howler3.ctx.currentTime;
1423
+ sound._playStart = Howler4.ctx.currentTime;
1424
1424
  var timeout = (sound._stop - sound._start) * 1e3 / Math.abs(sound._rate);
1425
1425
  self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);
1426
1426
  }
@@ -1431,7 +1431,7 @@ var require_howler = __commonJS({
1431
1431
  sound._rateSeek = 0;
1432
1432
  self._clearTimer(sound._id);
1433
1433
  self._cleanBuffer(sound._node);
1434
- Howler3._autoSuspend();
1434
+ Howler4._autoSuspend();
1435
1435
  }
1436
1436
  if (!self._webAudio && !loop) {
1437
1437
  self.stop(sound._id, true);
@@ -1539,7 +1539,7 @@ var require_howler = __commonJS({
1539
1539
  */
1540
1540
  _refreshBuffer: function(sound) {
1541
1541
  var self = this;
1542
- sound._node.bufferSource = Howler3.ctx.createBufferSource();
1542
+ sound._node.bufferSource = Howler4.ctx.createBufferSource();
1543
1543
  sound._node.bufferSource.buffer = cache[self._src];
1544
1544
  if (sound._panner) {
1545
1545
  sound._node.bufferSource.connect(sound._panner);
@@ -1551,7 +1551,7 @@ var require_howler = __commonJS({
1551
1551
  sound._node.bufferSource.loopStart = sound._start || 0;
1552
1552
  sound._node.bufferSource.loopEnd = sound._stop || 0;
1553
1553
  }
1554
- sound._node.bufferSource.playbackRate.setValueAtTime(sound._rate, Howler3.ctx.currentTime);
1554
+ sound._node.bufferSource.playbackRate.setValueAtTime(sound._rate, Howler4.ctx.currentTime);
1555
1555
  return self;
1556
1556
  },
1557
1557
  /**
@@ -1561,16 +1561,16 @@ var require_howler = __commonJS({
1561
1561
  */
1562
1562
  _cleanBuffer: function(node) {
1563
1563
  var self = this;
1564
- var isIOS = Howler3._navigator && Howler3._navigator.vendor.indexOf("Apple") >= 0;
1564
+ var isIOS = Howler4._navigator && Howler4._navigator.vendor.indexOf("Apple") >= 0;
1565
1565
  if (!node.bufferSource) {
1566
1566
  return self;
1567
1567
  }
1568
- if (Howler3._scratchBuffer && node.bufferSource) {
1568
+ if (Howler4._scratchBuffer && node.bufferSource) {
1569
1569
  node.bufferSource.onended = null;
1570
1570
  node.bufferSource.disconnect(0);
1571
1571
  if (isIOS) {
1572
1572
  try {
1573
- node.bufferSource.buffer = Howler3._scratchBuffer;
1573
+ node.bufferSource.buffer = Howler4._scratchBuffer;
1574
1574
  } catch (e) {
1575
1575
  }
1576
1576
  }
@@ -1583,7 +1583,7 @@ var require_howler = __commonJS({
1583
1583
  * @param {Object} node Audio node to clear.
1584
1584
  */
1585
1585
  _clearSound: function(node) {
1586
- var checkIE = /MSIE |Trident\//.test(Howler3._navigator && Howler3._navigator.userAgent);
1586
+ var checkIE = /MSIE |Trident\//.test(Howler4._navigator && Howler4._navigator.userAgent);
1587
1587
  if (!checkIE) {
1588
1588
  node.src = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA";
1589
1589
  }
@@ -1609,7 +1609,7 @@ var require_howler = __commonJS({
1609
1609
  self._paused = true;
1610
1610
  self._ended = true;
1611
1611
  self._sprite = "__default";
1612
- self._id = ++Howler3._counter;
1612
+ self._id = ++Howler4._counter;
1613
1613
  parent._sounds.push(self);
1614
1614
  self.create();
1615
1615
  return self;
@@ -1621,23 +1621,23 @@ var require_howler = __commonJS({
1621
1621
  create: function() {
1622
1622
  var self = this;
1623
1623
  var parent = self._parent;
1624
- var volume = Howler3._muted || self._muted || self._parent._muted ? 0 : self._volume;
1624
+ var volume = Howler4._muted || self._muted || self._parent._muted ? 0 : self._volume;
1625
1625
  if (parent._webAudio) {
1626
- self._node = typeof Howler3.ctx.createGain === "undefined" ? Howler3.ctx.createGainNode() : Howler3.ctx.createGain();
1627
- self._node.gain.setValueAtTime(volume, Howler3.ctx.currentTime);
1626
+ self._node = typeof Howler4.ctx.createGain === "undefined" ? Howler4.ctx.createGainNode() : Howler4.ctx.createGain();
1627
+ self._node.gain.setValueAtTime(volume, Howler4.ctx.currentTime);
1628
1628
  self._node.paused = true;
1629
- self._node.connect(Howler3.masterGain);
1630
- } else if (!Howler3.noAudio) {
1631
- self._node = Howler3._obtainHtml5Audio();
1629
+ self._node.connect(Howler4.masterGain);
1630
+ } else if (!Howler4.noAudio) {
1631
+ self._node = Howler4._obtainHtml5Audio();
1632
1632
  self._errorFn = self._errorListener.bind(self);
1633
1633
  self._node.addEventListener("error", self._errorFn, false);
1634
1634
  self._loadFn = self._loadListener.bind(self);
1635
- self._node.addEventListener(Howler3._canPlayEvent, self._loadFn, false);
1635
+ self._node.addEventListener(Howler4._canPlayEvent, self._loadFn, false);
1636
1636
  self._endFn = self._endListener.bind(self);
1637
1637
  self._node.addEventListener("ended", self._endFn, false);
1638
1638
  self._node.src = parent._src;
1639
1639
  self._node.preload = parent._preload === true ? "auto" : parent._preload;
1640
- self._node.volume = volume * Howler3.volume();
1640
+ self._node.volume = volume * Howler4.volume();
1641
1641
  self._node.load();
1642
1642
  }
1643
1643
  return self;
@@ -1658,7 +1658,7 @@ var require_howler = __commonJS({
1658
1658
  self._paused = true;
1659
1659
  self._ended = true;
1660
1660
  self._sprite = "__default";
1661
- self._id = ++Howler3._counter;
1661
+ self._id = ++Howler4._counter;
1662
1662
  return self;
1663
1663
  },
1664
1664
  /**
@@ -1684,7 +1684,7 @@ var require_howler = __commonJS({
1684
1684
  parent._emit("load");
1685
1685
  parent._loadQueue();
1686
1686
  }
1687
- self._node.removeEventListener(Howler3._canPlayEvent, self._loadFn, false);
1687
+ self._node.removeEventListener(Howler4._canPlayEvent, self._loadFn, false);
1688
1688
  },
1689
1689
  /**
1690
1690
  * HTML5 Audio ended listener callback.
@@ -1766,10 +1766,10 @@ var require_howler = __commonJS({
1766
1766
  error();
1767
1767
  }
1768
1768
  };
1769
- if (typeof Promise !== "undefined" && Howler3.ctx.decodeAudioData.length === 1) {
1770
- Howler3.ctx.decodeAudioData(arraybuffer).then(success).catch(error);
1769
+ if (typeof Promise !== "undefined" && Howler4.ctx.decodeAudioData.length === 1) {
1770
+ Howler4.ctx.decodeAudioData(arraybuffer).then(success).catch(error);
1771
1771
  } else {
1772
- Howler3.ctx.decodeAudioData(arraybuffer, success, error);
1772
+ Howler4.ctx.decodeAudioData(arraybuffer, success, error);
1773
1773
  }
1774
1774
  };
1775
1775
  var loadSound = function(self, buffer) {
@@ -1786,59 +1786,59 @@ var require_howler = __commonJS({
1786
1786
  }
1787
1787
  };
1788
1788
  var setupAudioContext = function() {
1789
- if (!Howler3.usingWebAudio) {
1789
+ if (!Howler4.usingWebAudio) {
1790
1790
  return;
1791
1791
  }
1792
1792
  try {
1793
1793
  if (typeof AudioContext !== "undefined") {
1794
- Howler3.ctx = new AudioContext();
1794
+ Howler4.ctx = new AudioContext();
1795
1795
  } else if (typeof webkitAudioContext !== "undefined") {
1796
- Howler3.ctx = new webkitAudioContext();
1796
+ Howler4.ctx = new webkitAudioContext();
1797
1797
  } else {
1798
- Howler3.usingWebAudio = false;
1798
+ Howler4.usingWebAudio = false;
1799
1799
  }
1800
1800
  } catch (e) {
1801
- Howler3.usingWebAudio = false;
1801
+ Howler4.usingWebAudio = false;
1802
1802
  }
1803
- if (!Howler3.ctx) {
1804
- Howler3.usingWebAudio = false;
1803
+ if (!Howler4.ctx) {
1804
+ Howler4.usingWebAudio = false;
1805
1805
  }
1806
- var iOS = /iP(hone|od|ad)/.test(Howler3._navigator && Howler3._navigator.platform);
1807
- var appVersion = Howler3._navigator && Howler3._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
1806
+ var iOS = /iP(hone|od|ad)/.test(Howler4._navigator && Howler4._navigator.platform);
1807
+ var appVersion = Howler4._navigator && Howler4._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
1808
1808
  var version = appVersion ? parseInt(appVersion[1], 10) : null;
1809
1809
  if (iOS && version && version < 9) {
1810
- var safari = /safari/.test(Howler3._navigator && Howler3._navigator.userAgent.toLowerCase());
1811
- if (Howler3._navigator && !safari) {
1812
- Howler3.usingWebAudio = false;
1810
+ var safari = /safari/.test(Howler4._navigator && Howler4._navigator.userAgent.toLowerCase());
1811
+ if (Howler4._navigator && !safari) {
1812
+ Howler4.usingWebAudio = false;
1813
1813
  }
1814
1814
  }
1815
- if (Howler3.usingWebAudio) {
1816
- Howler3.masterGain = typeof Howler3.ctx.createGain === "undefined" ? Howler3.ctx.createGainNode() : Howler3.ctx.createGain();
1817
- Howler3.masterGain.gain.setValueAtTime(Howler3._muted ? 0 : Howler3._volume, Howler3.ctx.currentTime);
1818
- Howler3.masterGain.connect(Howler3.ctx.destination);
1815
+ if (Howler4.usingWebAudio) {
1816
+ Howler4.masterGain = typeof Howler4.ctx.createGain === "undefined" ? Howler4.ctx.createGainNode() : Howler4.ctx.createGain();
1817
+ Howler4.masterGain.gain.setValueAtTime(Howler4._muted ? 0 : Howler4._volume, Howler4.ctx.currentTime);
1818
+ Howler4.masterGain.connect(Howler4.ctx.destination);
1819
1819
  }
1820
- Howler3._setup();
1820
+ Howler4._setup();
1821
1821
  };
1822
1822
  if (typeof define === "function" && define.amd) {
1823
1823
  define([], function() {
1824
1824
  return {
1825
- Howler: Howler3,
1825
+ Howler: Howler4,
1826
1826
  Howl: Howl3
1827
1827
  };
1828
1828
  });
1829
1829
  }
1830
1830
  if (typeof exports !== "undefined") {
1831
- exports.Howler = Howler3;
1831
+ exports.Howler = Howler4;
1832
1832
  exports.Howl = Howl3;
1833
1833
  }
1834
1834
  if (typeof global !== "undefined") {
1835
1835
  global.HowlerGlobal = HowlerGlobal2;
1836
- global.Howler = Howler3;
1836
+ global.Howler = Howler4;
1837
1837
  global.Howl = Howl3;
1838
1838
  global.Sound = Sound2;
1839
1839
  } else if (typeof window !== "undefined") {
1840
1840
  window.HowlerGlobal = HowlerGlobal2;
1841
- window.Howler = Howler3;
1841
+ window.Howler = Howler4;
1842
1842
  window.Howl = Howl3;
1843
1843
  window.Sound = Sound2;
1844
1844
  }
@@ -3807,8 +3807,8 @@ function isProduction2() {
3807
3807
  }
3808
3808
 
3809
3809
  // src/media-activation.tsx
3810
+ var import_howler2 = __toESM(require_howler());
3810
3811
  import { createContext as createContext8, useContext as useContext7, useEffect as useEffect6, useRef as useRef6 } from "react";
3811
- import { jsx as jsx2 } from "react/jsx-runtime";
3812
3812
  var PanoMediaActivationHostContext = createContext8(null);
3813
3813
  function createPanoMediaActivationHost() {
3814
3814
  return { intents: /* @__PURE__ */ new Set(), listeners: /* @__PURE__ */ new Set(), revision: 0 };
@@ -3831,6 +3831,15 @@ function subscribePanoMediaActivation(host, listener) {
3831
3831
  function hasPanoMediaActivationIntent(host) {
3832
3832
  return host.intents.size > 0;
3833
3833
  }
3834
+ function needsMediaGesture() {
3835
+ if (typeof navigator !== "undefined" && navigator.userActivation?.hasBeenActive) {
3836
+ return false;
3837
+ }
3838
+ if (import_howler2.Howler.ctx?.state === "running") {
3839
+ return false;
3840
+ }
3841
+ return true;
3842
+ }
3834
3843
  function usePanoMediaActivationIntent(required) {
3835
3844
  const host = useContext7(PanoMediaActivationHostContext);
3836
3845
  const keyRef = useRef6(null);
@@ -3850,23 +3859,6 @@ function usePanoMediaActivationIntent(required) {
3850
3859
  };
3851
3860
  }, [host, required]);
3852
3861
  }
3853
- function PanoMediaActivationOverlay({
3854
- ariaLabel = "Enable sound",
3855
- className,
3856
- message = "Tap to enable sound",
3857
- onActivate
3858
- }) {
3859
- return /* @__PURE__ */ jsx2("div", { className: cn("pano-media-activation", className), children: /* @__PURE__ */ jsx2(
3860
- "button",
3861
- {
3862
- "aria-label": ariaLabel,
3863
- className: "pano-media-activation-button",
3864
- onClick: onActivate,
3865
- type: "button",
3866
- children: message
3867
- }
3868
- ) });
3869
- }
3870
3862
 
3871
3863
  // src/pano-context-menu.tsx
3872
3864
  import {
@@ -3880,7 +3872,7 @@ import {
3880
3872
  useRef as useRef7,
3881
3873
  useState as useState2
3882
3874
  } from "react";
3883
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
3875
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
3884
3876
  var DEFAULT_ICON_SIZE = 16;
3885
3877
  var MENU_EDGE_PADDING = 8;
3886
3878
  var MIN_PANO_CONTEXT_MENU_BACKGROUND_OPACITY = 0.4;
@@ -4054,7 +4046,7 @@ function DefaultContextMenuPanel({
4054
4046
  style: panelStyle,
4055
4047
  tabIndex: -1,
4056
4048
  children: [
4057
- /* @__PURE__ */ jsx3(
4049
+ /* @__PURE__ */ jsx2(
4058
4050
  "div",
4059
4051
  {
4060
4052
  "aria-hidden": true,
@@ -4066,9 +4058,9 @@ function DefaultContextMenuPanel({
4066
4058
  }
4067
4059
  }
4068
4060
  ),
4069
- /* @__PURE__ */ jsx3("div", { className: "pano-context-menu-items", children: visibleItems.map((item, index) => {
4061
+ /* @__PURE__ */ jsx2("div", { className: "pano-context-menu-items", children: visibleItems.map((item, index) => {
4070
4062
  if (!isActionItem(item)) {
4071
- return /* @__PURE__ */ jsx3(
4063
+ return /* @__PURE__ */ jsx2(
4072
4064
  "div",
4073
4065
  {
4074
4066
  "aria-hidden": true,
@@ -4085,7 +4077,7 @@ function DefaultContextMenuPanel({
4085
4077
  );
4086
4078
  }
4087
4079
  const disabled = item.disabled === true;
4088
- const iconNode = item.icon ?? (item.image ? /* @__PURE__ */ jsx3(
4080
+ const iconNode = item.icon ?? (item.image ? /* @__PURE__ */ jsx2(
4089
4081
  "img",
4090
4082
  {
4091
4083
  alt: item.imageAlt ?? "",
@@ -4135,7 +4127,7 @@ function DefaultContextMenuPanel({
4135
4127
  tabIndex: disabled ? -1 : activeIndex === index ? 0 : -1,
4136
4128
  type: "button",
4137
4129
  children: [
4138
- /* @__PURE__ */ jsx3(
4130
+ /* @__PURE__ */ jsx2(
4139
4131
  "span",
4140
4132
  {
4141
4133
  "aria-hidden": true,
@@ -4147,7 +4139,7 @@ function DefaultContextMenuPanel({
4147
4139
  children: iconNode
4148
4140
  }
4149
4141
  ),
4150
- /* @__PURE__ */ jsx3("span", { style: { flex: 1 }, children: item.label })
4142
+ /* @__PURE__ */ jsx2("span", { style: { flex: 1 }, children: item.label })
4151
4143
  ]
4152
4144
  },
4153
4145
  item.id
@@ -4200,7 +4192,7 @@ function PositionedMenuShell({
4200
4192
  top: Math.min(Math.max(rawTop, MENU_EDGE_PADDING), maxTop)
4201
4193
  });
4202
4194
  }, [clientX, clientY, overlayElement, children, viewportRevision]);
4203
- return /* @__PURE__ */ jsx3(
4195
+ return /* @__PURE__ */ jsx2(
4204
4196
  "div",
4205
4197
  {
4206
4198
  className: "pano-context-menu-shell",
@@ -4259,7 +4251,7 @@ function usePanoContextMenuOverlay() {
4259
4251
  document.removeEventListener("keydown", handleKeyDown);
4260
4252
  };
4261
4253
  }, [session2]);
4262
- const overlay = /* @__PURE__ */ jsx3(
4254
+ const overlay = /* @__PURE__ */ jsx2(
4263
4255
  "div",
4264
4256
  {
4265
4257
  ref: setOverlayNode,
@@ -4270,7 +4262,7 @@ function usePanoContextMenuOverlay() {
4270
4262
  position: "absolute",
4271
4263
  zIndex: 20
4272
4264
  },
4273
- children: session2 ? /* @__PURE__ */ jsx3(
4265
+ children: session2 ? /* @__PURE__ */ jsx2(
4274
4266
  PositionedMenuShell,
4275
4267
  {
4276
4268
  clientX: session2.event.clientX,
@@ -4363,9 +4355,9 @@ function PanoContextMenu({
4363
4355
  view,
4364
4356
  render: () => {
4365
4357
  if (hasCustomChildren && current.children) {
4366
- return /* @__PURE__ */ jsx3("div", { "data-pano-context-menu": true, style: { pointerEvents: "auto" }, children: current.children({ event, view, close }) });
4358
+ return /* @__PURE__ */ jsx2("div", { "data-pano-context-menu": true, style: { pointerEvents: "auto" }, children: current.children({ event, view, close }) });
4367
4359
  }
4368
- return /* @__PURE__ */ jsx3(
4360
+ return /* @__PURE__ */ jsx2(
4369
4361
  DefaultContextMenuPanel,
4370
4362
  {
4371
4363
  appearance: current.appearance,
@@ -4416,14 +4408,14 @@ function ResetViewIcon() {
4416
4408
  viewBox: "0 0 16 16",
4417
4409
  width: "100%",
4418
4410
  children: [
4419
- /* @__PURE__ */ jsx3("path", { d: "M3.5 6.5A4.5 4.5 0 1 1 4 10" }),
4420
- /* @__PURE__ */ jsx3("path", { d: "M3.5 3.5v3h3" })
4411
+ /* @__PURE__ */ jsx2("path", { d: "M3.5 6.5A4.5 4.5 0 1 1 4 10" }),
4412
+ /* @__PURE__ */ jsx2("path", { d: "M3.5 3.5v3h3" })
4421
4413
  ]
4422
4414
  }
4423
4415
  );
4424
4416
  }
4425
4417
  function FullscreenIcon() {
4426
- return /* @__PURE__ */ jsx3(
4418
+ return /* @__PURE__ */ jsx2(
4427
4419
  "svg",
4428
4420
  {
4429
4421
  "aria-hidden": true,
@@ -4435,12 +4427,12 @@ function FullscreenIcon() {
4435
4427
  strokeWidth: "1.75",
4436
4428
  viewBox: "0 0 16 16",
4437
4429
  width: "100%",
4438
- children: /* @__PURE__ */ jsx3("path", { d: "M3 6V3h3M10 3h3v3M13 10v3h-3M6 13H3v-3" })
4430
+ children: /* @__PURE__ */ jsx2("path", { d: "M3 6V3h3M10 3h3v3M13 10v3h-3M6 13H3v-3" })
4439
4431
  }
4440
4432
  );
4441
4433
  }
4442
4434
  function ExitFullscreenIcon() {
4443
- return /* @__PURE__ */ jsx3(
4435
+ return /* @__PURE__ */ jsx2(
4444
4436
  "svg",
4445
4437
  {
4446
4438
  "aria-hidden": true,
@@ -4452,7 +4444,7 @@ function ExitFullscreenIcon() {
4452
4444
  strokeWidth: "1.75",
4453
4445
  viewBox: "0 0 16 16",
4454
4446
  width: "100%",
4455
- children: /* @__PURE__ */ jsx3("path", { d: "M6 3v3H3M10 3v3h3M3 10h3v3M10 10h3v3" })
4447
+ children: /* @__PURE__ */ jsx2("path", { d: "M6 3v3H3M10 3v3h3M3 10h3v3M10 10h3v3" })
4456
4448
  }
4457
4449
  );
4458
4450
  }
@@ -4461,7 +4453,7 @@ function createPanoContextMenuPresets(actions) {
4461
4453
  const resetView = {
4462
4454
  id: "pano-reset-view",
4463
4455
  label: "Reset view",
4464
- icon: /* @__PURE__ */ jsx3(ResetViewIcon, {}),
4456
+ icon: /* @__PURE__ */ jsx2(ResetViewIcon, {}),
4465
4457
  onSelect: () => {
4466
4458
  actions.reset();
4467
4459
  }
@@ -4469,7 +4461,7 @@ function createPanoContextMenuPresets(actions) {
4469
4461
  const fullscreen = {
4470
4462
  id: "pano-fullscreen",
4471
4463
  label: isFullscreen ? "Exit fullscreen" : "Enter fullscreen",
4472
- icon: isFullscreen ? /* @__PURE__ */ jsx3(ExitFullscreenIcon, {}) : /* @__PURE__ */ jsx3(FullscreenIcon, {}),
4464
+ icon: isFullscreen ? /* @__PURE__ */ jsx2(ExitFullscreenIcon, {}) : /* @__PURE__ */ jsx2(FullscreenIcon, {}),
4473
4465
  onSelect: () => {
4474
4466
  actions.toggleFullscreen();
4475
4467
  }
@@ -4574,7 +4566,7 @@ import {
4574
4566
  useMemo as useMemo4,
4575
4567
  useRef as useRef8
4576
4568
  } from "react";
4577
- import { jsx as jsx4 } from "react/jsx-runtime";
4569
+ import { jsx as jsx3 } from "react/jsx-runtime";
4578
4570
  var DEFAULT_PANO_CURSORS = {
4579
4571
  default: "grab",
4580
4572
  dragging: "grabbing",
@@ -4716,7 +4708,7 @@ function PanoCursorController({
4716
4708
  release(PANO_DRAG_CLAIM_ID);
4717
4709
  };
4718
4710
  }, [claim, eventBus, release]);
4719
- return /* @__PURE__ */ jsx4(PanoCursorContext.Provider, { value: api, children });
4711
+ return /* @__PURE__ */ jsx3(PanoCursorContext.Provider, { value: api, children });
4720
4712
  }
4721
4713
 
4722
4714
  // src/pano-events.tsx
@@ -5077,7 +5069,7 @@ var DEFAULT_PANORAMA_CAMERA_NEAR = 0.1;
5077
5069
  var DEFAULT_PANORAMA_CAMERA_FAR = DEFAULT_PANORAMA_RADIUS * 2;
5078
5070
 
5079
5071
  // src/panorama-event-surface.tsx
5080
- import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
5072
+ import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
5081
5073
  var EVENT_SURFACE_RADIUS = DEFAULT_PANORAMA_RADIUS - 1;
5082
5074
  function makePanoramaPointerEvent(event) {
5083
5075
  const nativeEvent = event.nativeEvent;
@@ -5145,8 +5137,8 @@ function PanoramaEventSurface() {
5145
5137
  onPointerUp: (event) => emit("pointerup", event),
5146
5138
  onPointerMove: (event) => emit("pointermove", event),
5147
5139
  children: [
5148
- /* @__PURE__ */ jsx5("sphereGeometry", { args: [EVENT_SURFACE_RADIUS, 64, 32] }),
5149
- /* @__PURE__ */ jsx5(
5140
+ /* @__PURE__ */ jsx4("sphereGeometry", { args: [EVENT_SURFACE_RADIUS, 64, 32] }),
5141
+ /* @__PURE__ */ jsx4(
5150
5142
  "meshBasicMaterial",
5151
5143
  {
5152
5144
  colorWrite: false,
@@ -5328,7 +5320,7 @@ function TouchControls({
5328
5320
 
5329
5321
  // src/video/chrome-overlay.tsx
5330
5322
  import { createContext as createContext12, useCallback as useCallback4, useMemo as useMemo5, useState as useState3 } from "react";
5331
- import { jsx as jsx6 } from "react/jsx-runtime";
5323
+ import { jsx as jsx5 } from "react/jsx-runtime";
5332
5324
  var PanoChromeOverlayContext = createContext12(null);
5333
5325
  function usePanoChromeOverlay() {
5334
5326
  const [overlayElement, setOverlayElement] = useState3(
@@ -5341,7 +5333,7 @@ function usePanoChromeOverlay() {
5341
5333
  () => ({ overlayElement }),
5342
5334
  [overlayElement]
5343
5335
  );
5344
- const overlay = /* @__PURE__ */ jsx6(
5336
+ const overlay = /* @__PURE__ */ jsx5(
5345
5337
  "div",
5346
5338
  {
5347
5339
  className: "pano-chrome-overlay",
@@ -5418,7 +5410,7 @@ import { useSyncExternalStore as useSyncExternalStore4 } from "react";
5418
5410
 
5419
5411
  // src/video/pano-video-captions.tsx
5420
5412
  import { useSyncExternalStore as useSyncExternalStore2 } from "react";
5421
- import { jsx as jsx7 } from "react/jsx-runtime";
5413
+ import { jsx as jsx6 } from "react/jsx-runtime";
5422
5414
  var DEFAULT_PANO_VIDEO_CAPTION_APPEARANCE = {
5423
5415
  color: "#ffffff",
5424
5416
  background: "rgba(0, 0, 0, 0.55)",
@@ -5466,13 +5458,13 @@ function PanoVideoCaptionsOverlay({
5466
5458
  textShadow: snapshot.captionAppearance.textShadow,
5467
5459
  whiteSpace: "pre-wrap"
5468
5460
  };
5469
- return /* @__PURE__ */ jsx7(
5461
+ return /* @__PURE__ */ jsx6(
5470
5462
  "div",
5471
5463
  {
5472
5464
  className: "pano-video-captions",
5473
5465
  "data-pano-video-captions": "",
5474
5466
  style: wrapperStyle,
5475
- children: /* @__PURE__ */ jsx7("div", { style: textStyle, children: snapshot.captionText })
5467
+ children: /* @__PURE__ */ jsx6("div", { style: textStyle, children: snapshot.captionText })
5476
5468
  }
5477
5469
  );
5478
5470
  }
@@ -5624,7 +5616,7 @@ function cueText(cue) {
5624
5616
  }
5625
5617
 
5626
5618
  // src/video/pano-video-controls.tsx
5627
- import { Fragment, jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
5619
+ import { Fragment, jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
5628
5620
  var DEFAULT_PANO_VIDEO_CONTROLS_APPEARANCE = {
5629
5621
  background: "rgba(16, 16, 16, 0.88)",
5630
5622
  color: "#f4f4f4",
@@ -5685,7 +5677,7 @@ function volumeFromClientY(clientY, track) {
5685
5677
  return Math.max(0, Math.min(1, (rect.bottom - clientY) / rect.height));
5686
5678
  }
5687
5679
  function Icon({ path }) {
5688
- return /* @__PURE__ */ jsx8(
5680
+ return /* @__PURE__ */ jsx7(
5689
5681
  "svg",
5690
5682
  {
5691
5683
  "aria-hidden": true,
@@ -5697,7 +5689,7 @@ function Icon({ path }) {
5697
5689
  strokeWidth: "1.75",
5698
5690
  viewBox: "0 0 16 16",
5699
5691
  width: "16",
5700
- children: /* @__PURE__ */ jsx8("path", { d: path })
5692
+ children: /* @__PURE__ */ jsx7("path", { d: path })
5701
5693
  }
5702
5694
  );
5703
5695
  }
@@ -5709,7 +5701,7 @@ function ChromeButton({
5709
5701
  label,
5710
5702
  onClick
5711
5703
  }) {
5712
- return /* @__PURE__ */ jsx8(
5704
+ return /* @__PURE__ */ jsx7(
5713
5705
  "button",
5714
5706
  {
5715
5707
  "aria-label": label,
@@ -5735,14 +5727,14 @@ function ChromeMenu({
5735
5727
  labelledBy,
5736
5728
  items
5737
5729
  }) {
5738
- return /* @__PURE__ */ jsx8(
5730
+ return /* @__PURE__ */ jsx7(
5739
5731
  ChromeMenuSurface,
5740
5732
  {
5741
5733
  appearance,
5742
5734
  id,
5743
5735
  labelledBy,
5744
5736
  role: "menu",
5745
- children: items.map((item) => /* @__PURE__ */ jsx8(
5737
+ children: items.map((item) => /* @__PURE__ */ jsx7(
5746
5738
  ChromeMenuRadioItem,
5747
5739
  {
5748
5740
  active: item.active,
@@ -5762,7 +5754,7 @@ function ChromeMenuSurface({
5762
5754
  labelledBy,
5763
5755
  role
5764
5756
  }) {
5765
- return /* @__PURE__ */ jsx8(
5757
+ return /* @__PURE__ */ jsx7(
5766
5758
  "div",
5767
5759
  {
5768
5760
  "aria-labelledby": labelledBy,
@@ -5786,7 +5778,7 @@ function ChromeMenuRadioItem({
5786
5778
  label,
5787
5779
  onClick
5788
5780
  }) {
5789
- return /* @__PURE__ */ jsx8(
5781
+ return /* @__PURE__ */ jsx7(
5790
5782
  "button",
5791
5783
  {
5792
5784
  "aria-checked": active,
@@ -5826,7 +5818,7 @@ function ChromeMenuActionItem({
5826
5818
  },
5827
5819
  type: "button",
5828
5820
  children: [
5829
- /* @__PURE__ */ jsx8("span", { children: label }),
5821
+ /* @__PURE__ */ jsx7("span", { children: label }),
5830
5822
  secondary
5831
5823
  ]
5832
5824
  }
@@ -5835,10 +5827,10 @@ function ChromeMenuActionItem({
5835
5827
  function ChromeMenuSectionLabel({
5836
5828
  children
5837
5829
  }) {
5838
- return /* @__PURE__ */ jsx8("div", { className: "pano-video-chrome-menu-label", children });
5830
+ return /* @__PURE__ */ jsx7("div", { className: "pano-video-chrome-menu-label", children });
5839
5831
  }
5840
5832
  function ChromeMenuDivider() {
5841
- return /* @__PURE__ */ jsx8("div", { className: "pano-video-chrome-menu-divider" });
5833
+ return /* @__PURE__ */ jsx7("div", { className: "pano-video-chrome-menu-divider" });
5842
5834
  }
5843
5835
  function CaptionsMenu({
5844
5836
  appearance,
@@ -5851,7 +5843,7 @@ function CaptionsMenu({
5851
5843
  panel,
5852
5844
  snapshot
5853
5845
  }) {
5854
- return /* @__PURE__ */ jsx8(
5846
+ return /* @__PURE__ */ jsx7(
5855
5847
  ChromeMenuSurface,
5856
5848
  {
5857
5849
  appearance,
@@ -5860,7 +5852,7 @@ function CaptionsMenu({
5860
5852
  role: "menu",
5861
5853
  children: panel === "tracks" ? /* @__PURE__ */ jsxs3(Fragment, { children: [
5862
5854
  /* @__PURE__ */ jsxs3("div", { className: "pano-video-chrome-menu-list", children: [
5863
- /* @__PURE__ */ jsx8(
5855
+ /* @__PURE__ */ jsx7(
5864
5856
  ChromeMenuRadioItem,
5865
5857
  {
5866
5858
  active: snapshot.trackId === null,
@@ -5873,7 +5865,7 @@ function CaptionsMenu({
5873
5865
  ),
5874
5866
  snapshot.tracks.map((track) => {
5875
5867
  const trackItemId = panoVideoTrackId(track);
5876
- return /* @__PURE__ */ jsx8(
5868
+ return /* @__PURE__ */ jsx7(
5877
5869
  ChromeMenuRadioItem,
5878
5870
  {
5879
5871
  active: snapshot.trackId === trackItemId,
@@ -5887,29 +5879,29 @@ function CaptionsMenu({
5887
5879
  );
5888
5880
  })
5889
5881
  ] }),
5890
- /* @__PURE__ */ jsx8(ChromeMenuDivider, {}),
5891
- /* @__PURE__ */ jsx8(
5882
+ /* @__PURE__ */ jsx7(ChromeMenuDivider, {}),
5883
+ /* @__PURE__ */ jsx7(
5892
5884
  ChromeMenuActionItem,
5893
5885
  {
5894
5886
  appearance,
5895
5887
  label: "Settings",
5896
5888
  onClick: onOpenSettings,
5897
- secondary: /* @__PURE__ */ jsx8("span", { "aria-hidden": true, children: "\u203A" })
5889
+ secondary: /* @__PURE__ */ jsx7("span", { "aria-hidden": true, children: "\u203A" })
5898
5890
  }
5899
5891
  )
5900
5892
  ] }) : /* @__PURE__ */ jsxs3(Fragment, { children: [
5901
- /* @__PURE__ */ jsx8(
5893
+ /* @__PURE__ */ jsx7(
5902
5894
  ChromeMenuActionItem,
5903
5895
  {
5904
5896
  appearance,
5905
5897
  label: "Back",
5906
5898
  onClick: onShowTracks,
5907
- secondary: /* @__PURE__ */ jsx8("span", { "aria-hidden": true, children: "\u2039" })
5899
+ secondary: /* @__PURE__ */ jsx7("span", { "aria-hidden": true, children: "\u2039" })
5908
5900
  }
5909
5901
  ),
5910
- /* @__PURE__ */ jsx8(ChromeMenuDivider, {}),
5911
- /* @__PURE__ */ jsx8(ChromeMenuSectionLabel, { children: "Font size" }),
5912
- CAPTION_SIZE_OPTIONS.map((option) => /* @__PURE__ */ jsx8(
5902
+ /* @__PURE__ */ jsx7(ChromeMenuDivider, {}),
5903
+ /* @__PURE__ */ jsx7(ChromeMenuSectionLabel, { children: "Font size" }),
5904
+ CAPTION_SIZE_OPTIONS.map((option) => /* @__PURE__ */ jsx7(
5913
5905
  ChromeMenuRadioItem,
5914
5906
  {
5915
5907
  active: Number(snapshot.captionAppearance.fontSize) === option.value,
@@ -5921,9 +5913,9 @@ function CaptionsMenu({
5921
5913
  },
5922
5914
  option.id
5923
5915
  )),
5924
- /* @__PURE__ */ jsx8(ChromeMenuDivider, {}),
5925
- /* @__PURE__ */ jsx8(ChromeMenuSectionLabel, { children: "Background" }),
5926
- CAPTION_BACKGROUND_OPTIONS.map((option) => /* @__PURE__ */ jsx8(
5916
+ /* @__PURE__ */ jsx7(ChromeMenuDivider, {}),
5917
+ /* @__PURE__ */ jsx7(ChromeMenuSectionLabel, { children: "Background" }),
5918
+ CAPTION_BACKGROUND_OPTIONS.map((option) => /* @__PURE__ */ jsx7(
5927
5919
  ChromeMenuRadioItem,
5928
5920
  {
5929
5921
  active: snapshot.captionAppearance.background === option.value,
@@ -5978,7 +5970,7 @@ function VerticalVolumeSlider({
5978
5970
  pointerEvents: "auto"
5979
5971
  },
5980
5972
  children: [
5981
- /* @__PURE__ */ jsx8(
5973
+ /* @__PURE__ */ jsx7(
5982
5974
  "span",
5983
5975
  {
5984
5976
  "aria-hidden": true,
@@ -5990,7 +5982,7 @@ function VerticalVolumeSlider({
5990
5982
  children: percentLabel
5991
5983
  }
5992
5984
  ),
5993
- /* @__PURE__ */ jsx8(
5985
+ /* @__PURE__ */ jsx7(
5994
5986
  "div",
5995
5987
  {
5996
5988
  style: {
@@ -6030,7 +6022,7 @@ function VerticalVolumeSlider({
6030
6022
  },
6031
6023
  tabIndex: 0,
6032
6024
  children: [
6033
- /* @__PURE__ */ jsx8(
6025
+ /* @__PURE__ */ jsx7(
6034
6026
  "div",
6035
6027
  {
6036
6028
  style: {
@@ -6045,7 +6037,7 @@ function VerticalVolumeSlider({
6045
6037
  }
6046
6038
  }
6047
6039
  ),
6048
- /* @__PURE__ */ jsx8(
6040
+ /* @__PURE__ */ jsx7(
6049
6041
  "div",
6050
6042
  {
6051
6043
  style: {
@@ -6104,13 +6096,13 @@ function VolumeControl({
6104
6096
  };
6105
6097
  }, [open, volumeAdjustable]);
6106
6098
  if (!volumeAdjustable) {
6107
- return /* @__PURE__ */ jsx8(
6099
+ return /* @__PURE__ */ jsx7(
6108
6100
  ChromeButton,
6109
6101
  {
6110
6102
  appearance,
6111
6103
  label: mutedOrSilent ? "Unmute" : "Mute",
6112
6104
  onClick: onToggleMuted,
6113
- children: mutedOrSilent ? /* @__PURE__ */ jsx8(Icon, { path: "M3 6.5h2.2L8.5 4v8L5.2 9.5H3zM10.2 6.2l3.2 3.6M13.4 6.2l-3.2 3.6" }) : /* @__PURE__ */ jsx8(Icon, { path: "M3 6.5h2.2L8.5 4v8L5.2 9.5H3zM10.5 5.5a3 3 0 0 1 0 5" })
6105
+ children: mutedOrSilent ? /* @__PURE__ */ jsx7(Icon, { path: "M3 6.5h2.2L8.5 4v8L5.2 9.5H3zM10.2 6.2l3.2 3.6M13.4 6.2l-3.2 3.6" }) : /* @__PURE__ */ jsx7(Icon, { path: "M3 6.5h2.2L8.5 4v8L5.2 9.5H3zM10.5 5.5a3 3 0 0 1 0 5" })
6114
6106
  }
6115
6107
  );
6116
6108
  }
@@ -6142,7 +6134,7 @@ function VolumeControl({
6142
6134
  },
6143
6135
  ref: rootRef,
6144
6136
  children: [
6145
- open ? /* @__PURE__ */ jsx8(
6137
+ open ? /* @__PURE__ */ jsx7(
6146
6138
  VerticalVolumeSlider,
6147
6139
  {
6148
6140
  appearance,
@@ -6150,7 +6142,7 @@ function VolumeControl({
6150
6142
  volume: displayVolume
6151
6143
  }
6152
6144
  ) : null,
6153
- /* @__PURE__ */ jsx8(
6145
+ /* @__PURE__ */ jsx7(
6154
6146
  ChromeButton,
6155
6147
  {
6156
6148
  appearance,
@@ -6161,7 +6153,7 @@ function VolumeControl({
6161
6153
  }
6162
6154
  onToggleMuted();
6163
6155
  },
6164
- children: mutedOrSilent ? /* @__PURE__ */ jsx8(Icon, { path: "M3 6.5h2.2L8.5 4v8L5.2 9.5H3zM10.2 6.2l3.2 3.6M13.4 6.2l-3.2 3.6" }) : /* @__PURE__ */ jsx8(Icon, { path: "M3 6.5h2.2L8.5 4v8L5.2 9.5H3zM10.5 5.5a3 3 0 0 1 0 5" })
6156
+ children: mutedOrSilent ? /* @__PURE__ */ jsx7(Icon, { path: "M3 6.5h2.2L8.5 4v8L5.2 9.5H3zM10.2 6.2l3.2 3.6M13.4 6.2l-3.2 3.6" }) : /* @__PURE__ */ jsx7(Icon, { path: "M3 6.5h2.2L8.5 4v8L5.2 9.5H3zM10.5 5.5a3 3 0 0 1 0 5" })
6165
6157
  }
6166
6158
  )
6167
6159
  ]
@@ -6321,7 +6313,7 @@ function PanoVideoControlsHud({
6321
6313
  let menuNode = null;
6322
6314
  switch (menu) {
6323
6315
  case "rate":
6324
- menuNode = /* @__PURE__ */ jsx8(
6316
+ menuNode = /* @__PURE__ */ jsx7(
6325
6317
  ChromeMenu,
6326
6318
  {
6327
6319
  appearance: resolved,
@@ -6340,7 +6332,7 @@ function PanoVideoControlsHud({
6340
6332
  );
6341
6333
  break;
6342
6334
  case "variant":
6343
- menuNode = /* @__PURE__ */ jsx8(
6335
+ menuNode = /* @__PURE__ */ jsx7(
6344
6336
  ChromeMenu,
6345
6337
  {
6346
6338
  appearance: resolved,
@@ -6359,7 +6351,7 @@ function PanoVideoControlsHud({
6359
6351
  );
6360
6352
  break;
6361
6353
  case "captions":
6362
- menuNode = /* @__PURE__ */ jsx8(
6354
+ menuNode = /* @__PURE__ */ jsx7(
6363
6355
  CaptionsMenu,
6364
6356
  {
6365
6357
  appearance: resolved,
@@ -6383,7 +6375,7 @@ function PanoVideoControlsHud({
6383
6375
  );
6384
6376
  break;
6385
6377
  case "more":
6386
- menuNode = /* @__PURE__ */ jsx8(
6378
+ menuNode = /* @__PURE__ */ jsx7(
6387
6379
  ChromeMenu,
6388
6380
  {
6389
6381
  appearance: resolved,
@@ -6451,7 +6443,7 @@ function PanoVideoControlsHud({
6451
6443
  };
6452
6444
  const rateButton = /* @__PURE__ */ jsxs3("div", { className: "pano-video-menu", "data-pano-video-menu": "rate", children: [
6453
6445
  !compact && menu === "rate" ? menuNode : null,
6454
- /* @__PURE__ */ jsx8(
6446
+ /* @__PURE__ */ jsx7(
6455
6447
  ChromeButton,
6456
6448
  {
6457
6449
  appearance: resolved,
@@ -6459,13 +6451,13 @@ function PanoVideoControlsHud({
6459
6451
  onClick: () => {
6460
6452
  toggleMenu("rate");
6461
6453
  },
6462
- children: /* @__PURE__ */ jsx8("span", { className: "pano-video-chrome-label", id: `${barId}-rate-btn`, children: snapshot.playbackRate === 1 ? "1x" : `${snapshot.playbackRate}x` })
6454
+ children: /* @__PURE__ */ jsx7("span", { className: "pano-video-chrome-label", id: `${barId}-rate-btn`, children: snapshot.playbackRate === 1 ? "1x" : `${snapshot.playbackRate}x` })
6463
6455
  }
6464
6456
  )
6465
6457
  ] });
6466
6458
  const variantButton = canSwitchVariant ? /* @__PURE__ */ jsxs3("div", { className: "pano-video-menu", "data-pano-video-menu": "variant", children: [
6467
6459
  !compact && menu === "variant" ? menuNode : null,
6468
- /* @__PURE__ */ jsx8(
6460
+ /* @__PURE__ */ jsx7(
6469
6461
  ChromeButton,
6470
6462
  {
6471
6463
  appearance: resolved,
@@ -6473,13 +6465,13 @@ function PanoVideoControlsHud({
6473
6465
  onClick: () => {
6474
6466
  toggleMenu("variant");
6475
6467
  },
6476
- children: /* @__PURE__ */ jsx8("span", { className: "pano-video-chrome-label", id: `${barId}-variant-btn`, children: snapshot.variants.find((variant) => variant.id === snapshot.variantId)?.label ?? "Quality" })
6468
+ children: /* @__PURE__ */ jsx7("span", { className: "pano-video-chrome-label", id: `${barId}-variant-btn`, children: snapshot.variants.find((variant) => variant.id === snapshot.variantId)?.label ?? "Quality" })
6477
6469
  }
6478
6470
  )
6479
6471
  ] }) : null;
6480
6472
  const captionsButton = showCaptionsMenu ? /* @__PURE__ */ jsxs3("div", { className: "pano-video-menu", "data-pano-video-menu": "captions", children: [
6481
6473
  !compact && menu === "captions" ? menuNode : null,
6482
- /* @__PURE__ */ jsx8(
6474
+ /* @__PURE__ */ jsx7(
6483
6475
  ChromeButton,
6484
6476
  {
6485
6477
  appearance: resolved,
@@ -6487,7 +6479,7 @@ function PanoVideoControlsHud({
6487
6479
  onClick: () => {
6488
6480
  toggleMenu("captions");
6489
6481
  },
6490
- children: /* @__PURE__ */ jsx8("span", { id: `${barId}-captions-btn`, children: /* @__PURE__ */ jsx8(Icon, { path: "M2.5 4.5h11v7h-11zM5 7.2h2.4M5 9.2h5.5" }) })
6482
+ children: /* @__PURE__ */ jsx7("span", { id: `${barId}-captions-btn`, children: /* @__PURE__ */ jsx7(Icon, { path: "M2.5 4.5h11v7h-11zM5 7.2h2.4M5 9.2h5.5" }) })
6491
6483
  }
6492
6484
  )
6493
6485
  ] }) : null;
@@ -6498,7 +6490,7 @@ function PanoVideoControlsHud({
6498
6490
  "data-pano-video-controls": "",
6499
6491
  style: barStyle,
6500
6492
  children: [
6501
- /* @__PURE__ */ jsx8(
6493
+ /* @__PURE__ */ jsx7(
6502
6494
  ChromeButton,
6503
6495
  {
6504
6496
  appearance: resolved,
@@ -6506,11 +6498,11 @@ function PanoVideoControlsHud({
6506
6498
  onClick: () => {
6507
6499
  controller.togglePlay();
6508
6500
  },
6509
- children: snapshot.playing ? /* @__PURE__ */ jsx8(Icon, { path: "M5 3.5h2.2v9H5zM8.8 3.5H11v9H8.8z" }) : /* @__PURE__ */ jsx8(Icon, { path: "M5 3.2v9.6L13 8z" })
6501
+ children: snapshot.playing ? /* @__PURE__ */ jsx7(Icon, { path: "M5 3.5h2.2v9H5zM8.8 3.5H11v9H8.8z" }) : /* @__PURE__ */ jsx7(Icon, { path: "M5 3.2v9.6L13 8z" })
6510
6502
  }
6511
6503
  ),
6512
- hideTime ? null : /* @__PURE__ */ jsx8("span", { className: "pano-video-time", children: formatMediaTime(snapshot.currentTime) }),
6513
- /* @__PURE__ */ jsx8(
6504
+ hideTime ? null : /* @__PURE__ */ jsx7("span", { className: "pano-video-time", children: formatMediaTime(snapshot.currentTime) }),
6505
+ /* @__PURE__ */ jsx7(
6514
6506
  "input",
6515
6507
  {
6516
6508
  "aria-label": "Seek",
@@ -6532,8 +6524,8 @@ function PanoVideoControlsHud({
6532
6524
  value: duration > 0 ? snapshot.currentTime : 0
6533
6525
  }
6534
6526
  ),
6535
- hideTime ? null : /* @__PURE__ */ jsx8("span", { className: "pano-video-time", children: formatMediaTime(duration) }),
6536
- /* @__PURE__ */ jsx8(
6527
+ hideTime ? null : /* @__PURE__ */ jsx7("span", { className: "pano-video-time", children: formatMediaTime(duration) }),
6528
+ /* @__PURE__ */ jsx7(
6537
6529
  VolumeControl,
6538
6530
  {
6539
6531
  appearance: resolved,
@@ -6551,7 +6543,7 @@ function PanoVideoControlsHud({
6551
6543
  ),
6552
6544
  compact ? /* @__PURE__ */ jsxs3("div", { className: "pano-video-menu", "data-pano-video-menu": "more", children: [
6553
6545
  menu !== null ? menuNode : null,
6554
- /* @__PURE__ */ jsx8(
6546
+ /* @__PURE__ */ jsx7(
6555
6547
  ChromeButton,
6556
6548
  {
6557
6549
  appearance: resolved,
@@ -6560,7 +6552,7 @@ function PanoVideoControlsHud({
6560
6552
  onClick: () => {
6561
6553
  toggleMenu("more");
6562
6554
  },
6563
- children: /* @__PURE__ */ jsx8(Icon, { path: "M3 8a1 1 0 1 0 2 0 1 1 0 1 0-2 0M7 8a1 1 0 1 0 2 0 1 1 0 1 0-2 0M11 8a1 1 0 1 0 2 0 1 1 0 1 0-2 0" })
6555
+ children: /* @__PURE__ */ jsx7(Icon, { path: "M3 8a1 1 0 1 0 2 0 1 1 0 1 0-2 0M7 8a1 1 0 1 0 2 0 1 1 0 1 0-2 0M11 8a1 1 0 1 0 2 0 1 1 0 1 0-2 0" })
6564
6556
  }
6565
6557
  )
6566
6558
  ] }) : /* @__PURE__ */ jsxs3(Fragment, { children: [
@@ -6568,7 +6560,7 @@ function PanoVideoControlsHud({
6568
6560
  variantButton,
6569
6561
  captionsButton
6570
6562
  ] }),
6571
- showFullscreen ? /* @__PURE__ */ jsx8(
6563
+ showFullscreen ? /* @__PURE__ */ jsx7(
6572
6564
  ChromeButton,
6573
6565
  {
6574
6566
  appearance: resolved,
@@ -6576,7 +6568,7 @@ function PanoVideoControlsHud({
6576
6568
  onClick: () => {
6577
6569
  fullscreen?.toggleFullscreen();
6578
6570
  },
6579
- children: fullscreen?.isFullscreen ? /* @__PURE__ */ jsx8(Icon, { path: "M6 3.5H3.5V6M10 3.5h2.5V6M6 12.5H3.5V10M10 12.5h2.5V10" }) : /* @__PURE__ */ jsx8(Icon, { path: "M3.5 6V3.5H6M10 3.5h2.5V6M3.5 10v2.5H6M10 12.5h2.5V10" })
6571
+ children: fullscreen?.isFullscreen ? /* @__PURE__ */ jsx7(Icon, { path: "M6 3.5H3.5V6M10 3.5h2.5V6M6 12.5H3.5V10M10 12.5h2.5V10" }) : /* @__PURE__ */ jsx7(Icon, { path: "M3.5 6V3.5H6M10 3.5h2.5V6M3.5 10v2.5H6M10 12.5h2.5V10" })
6580
6572
  }
6581
6573
  ) : null
6582
6574
  ]
@@ -6593,7 +6585,7 @@ function PanoVideoControls({ appearance }) {
6593
6585
  }
6594
6586
 
6595
6587
  // src/video/pano-video-chrome-bridge.tsx
6596
- import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
6588
+ import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
6597
6589
  function PanoVideoChromeBridge({
6598
6590
  fullscreen,
6599
6591
  host,
@@ -6609,7 +6601,7 @@ function PanoVideoChromeBridge({
6609
6601
  }
6610
6602
  const showDefaultControls = host.controller !== null && host.controls !== false && host.controlClaims === 0;
6611
6603
  return /* @__PURE__ */ jsxs4(Fragment2, { children: [
6612
- showDefaultControls ? /* @__PURE__ */ jsx9(
6604
+ showDefaultControls ? /* @__PURE__ */ jsx8(
6613
6605
  PanoVideoControlsHud,
6614
6606
  {
6615
6607
  appearance: typeof host.controls === "object" ? host.controls : void 0,
@@ -6618,7 +6610,7 @@ function PanoVideoChromeBridge({
6618
6610
  overlayElement
6619
6611
  }
6620
6612
  ) : null,
6621
- host.captions !== false && host.controller ? /* @__PURE__ */ jsx9(PanoVideoCaptionsOverlay, { controller: host.controller }) : null
6613
+ host.captions !== false && host.controller ? /* @__PURE__ */ jsx8(PanoVideoCaptionsOverlay, { controller: host.controller }) : null
6622
6614
  ] });
6623
6615
  }
6624
6616
 
@@ -6771,7 +6763,7 @@ function clamp2(value, min, max) {
6771
6763
  }
6772
6764
 
6773
6765
  // src/webvr/chrome.tsx
6774
- import { Fragment as Fragment3, jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
6766
+ import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
6775
6767
  function resolveAppearance(value) {
6776
6768
  return {
6777
6769
  ...DEFAULT_WEBVR_CHROME_APPEARANCE,
@@ -6783,7 +6775,7 @@ function ChromeButton2({
6783
6775
  children,
6784
6776
  onClick
6785
6777
  }) {
6786
- return /* @__PURE__ */ jsx10(
6778
+ return /* @__PURE__ */ jsx9(
6787
6779
  "button",
6788
6780
  {
6789
6781
  className: "pano-webvr-button",
@@ -6828,11 +6820,11 @@ function SetupPanel({
6828
6820
  role: "dialog",
6829
6821
  style: panelStyle,
6830
6822
  children: [
6831
- /* @__PURE__ */ jsx10("h2", { className: "pano-webvr-setup-title", children: appearance.setupTitle ?? "MobileVR Setup" }),
6823
+ /* @__PURE__ */ jsx9("h2", { className: "pano-webvr-setup-title", children: appearance.setupTitle ?? "MobileVR Setup" }),
6832
6824
  /* @__PURE__ */ jsxs5("label", { className: "pano-webvr-setup-field", children: [
6833
6825
  "Screen size (inch)",
6834
6826
  /* @__PURE__ */ jsxs5("div", { className: "pano-webvr-setup-row", children: [
6835
- /* @__PURE__ */ jsx10(
6827
+ /* @__PURE__ */ jsx9(
6836
6828
  "button",
6837
6829
  {
6838
6830
  "aria-label": "Decrease screen size",
@@ -6844,8 +6836,8 @@ function SetupPanel({
6844
6836
  children: "\u2039"
6845
6837
  }
6846
6838
  ),
6847
- /* @__PURE__ */ jsx10("strong", { className: "pano-webvr-setup-value", children: settings.screensize === "auto" ? "Auto" : settings.screensize.toFixed(1) }),
6848
- /* @__PURE__ */ jsx10(
6839
+ /* @__PURE__ */ jsx9("strong", { className: "pano-webvr-setup-value", children: settings.screensize === "auto" ? "Auto" : settings.screensize.toFixed(1) }),
6840
+ /* @__PURE__ */ jsx9(
6849
6841
  "button",
6850
6842
  {
6851
6843
  "aria-label": "Increase screen size",
@@ -6860,9 +6852,9 @@ function SetupPanel({
6860
6852
  ] })
6861
6853
  ] }),
6862
6854
  /* @__PURE__ */ jsxs5("fieldset", { className: "pano-webvr-setup-fieldset", children: [
6863
- /* @__PURE__ */ jsx10("legend", { className: "pano-webvr-setup-legend", children: "VR headset preset" }),
6855
+ /* @__PURE__ */ jsx9("legend", { className: "pano-webvr-setup-legend", children: "VR headset preset" }),
6864
6856
  /* @__PURE__ */ jsxs5("div", { className: "pano-webvr-setup-row", children: [
6865
- /* @__PURE__ */ jsx10(
6857
+ /* @__PURE__ */ jsx9(
6866
6858
  "button",
6867
6859
  {
6868
6860
  "aria-label": "Previous headset preset",
@@ -6872,8 +6864,8 @@ function SetupPanel({
6872
6864
  children: "\u2039"
6873
6865
  }
6874
6866
  ),
6875
- /* @__PURE__ */ jsx10("strong", { className: "pano-webvr-setup-value-wide", children: WEBVR_PROFILES[settings.profileId].label }),
6876
- /* @__PURE__ */ jsx10(
6867
+ /* @__PURE__ */ jsx9("strong", { className: "pano-webvr-setup-value-wide", children: WEBVR_PROFILES[settings.profileId].label }),
6868
+ /* @__PURE__ */ jsx9(
6877
6869
  "button",
6878
6870
  {
6879
6871
  "aria-label": "Next headset preset",
@@ -6885,7 +6877,7 @@ function SetupPanel({
6885
6877
  )
6886
6878
  ] })
6887
6879
  ] }),
6888
- /* @__PURE__ */ jsx10(
6880
+ /* @__PURE__ */ jsx9(
6889
6881
  ChromeButton2,
6890
6882
  {
6891
6883
  appearance,
@@ -6909,8 +6901,8 @@ function WebVRChromeBridge({ host }) {
6909
6901
  }
6910
6902
  const appearance = resolveAppearance(chrome);
6911
6903
  return /* @__PURE__ */ jsxs5(Fragment3, { children: [
6912
- /* @__PURE__ */ jsx10("div", { className: "pano-webvr-toolbar", children: mode ? /* @__PURE__ */ jsxs5("div", { className: "pano-webvr-toolbar-actions", children: [
6913
- mode !== "webxr" ? /* @__PURE__ */ jsx10(
6904
+ /* @__PURE__ */ jsx9("div", { className: "pano-webvr-toolbar", children: mode ? /* @__PURE__ */ jsxs5("div", { className: "pano-webvr-toolbar-actions", children: [
6905
+ mode !== "webxr" ? /* @__PURE__ */ jsx9(
6914
6906
  ChromeButton2,
6915
6907
  {
6916
6908
  appearance,
@@ -6918,7 +6910,7 @@ function WebVRChromeBridge({ host }) {
6918
6910
  children: "VR Setup"
6919
6911
  }
6920
6912
  ) : null,
6921
- /* @__PURE__ */ jsx10(
6913
+ /* @__PURE__ */ jsx9(
6922
6914
  ChromeButton2,
6923
6915
  {
6924
6916
  appearance,
@@ -6926,7 +6918,7 @@ function WebVRChromeBridge({ host }) {
6926
6918
  children: "Exit VR"
6927
6919
  }
6928
6920
  )
6929
- ] }) : /* @__PURE__ */ jsx10(
6921
+ ] }) : /* @__PURE__ */ jsx9(
6930
6922
  ChromeButton2,
6931
6923
  {
6932
6924
  appearance,
@@ -6934,7 +6926,7 @@ function WebVRChromeBridge({ host }) {
6934
6926
  children: available ? "Enter VR" : "VR unavailable"
6935
6927
  }
6936
6928
  ) }),
6937
- mode === "fake" ? /* @__PURE__ */ jsx10(
6929
+ mode === "fake" ? /* @__PURE__ */ jsx9(
6938
6930
  "p",
6939
6931
  {
6940
6932
  className: "pano-webvr-hint",
@@ -6942,7 +6934,7 @@ function WebVRChromeBridge({ host }) {
6942
6934
  children: "Simulated VR Mode \xB7 Click the view to lock the mouse, then move to look around. Use a headset or phone for real VR."
6943
6935
  }
6944
6936
  ) : null,
6945
- setupOpen ? /* @__PURE__ */ jsx10(
6937
+ setupOpen ? /* @__PURE__ */ jsx9(
6946
6938
  SetupPanel,
6947
6939
  {
6948
6940
  appearance,
@@ -6984,7 +6976,7 @@ import { useFrame as useFrame5, useThree as useThree8 } from "@react-three/fiber
6984
6976
  import { useXR as useXR2, XROrigin } from "@react-three/xr";
6985
6977
  import { useRef as useRef12 } from "react";
6986
6978
  import { Vector3 as Vector34 } from "three";
6987
- import { jsx as jsx11 } from "react/jsx-runtime";
6979
+ import { jsx as jsx10 } from "react/jsx-runtime";
6988
6980
  function PanoramaXROrigin() {
6989
6981
  const originRef = useRef12(null);
6990
6982
  const localHeadPositionRef = useRef12(new Vector34());
@@ -7000,11 +6992,11 @@ function PanoramaXROrigin() {
7000
6992
  origin.position.copy(localHeadPositionRef.current).multiplyScalar(-1);
7001
6993
  origin.updateMatrixWorld();
7002
6994
  }, -100);
7003
- return /* @__PURE__ */ jsx11(XROrigin, { ref: originRef });
6995
+ return /* @__PURE__ */ jsx10(XROrigin, { ref: originRef });
7004
6996
  }
7005
6997
 
7006
6998
  // src/pano-viewer.tsx
7007
- import { jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
6999
+ import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
7008
7000
  var DEFAULT_VIEW = {
7009
7001
  yaw: 0,
7010
7002
  pitch: 0,
@@ -7049,7 +7041,7 @@ function PanoCursorTree({
7049
7041
  if (!cursors) {
7050
7042
  return children;
7051
7043
  }
7052
- return /* @__PURE__ */ jsx12(PanoCursorController, { cursors, children });
7044
+ return /* @__PURE__ */ jsx11(PanoCursorController, { cursors, children });
7053
7045
  }
7054
7046
  function PanoVideoHostReset() {
7055
7047
  const host = useContext15(PanoVideoHostContext);
@@ -7070,9 +7062,9 @@ function DefaultControlChannels({
7070
7062
  return null;
7071
7063
  }
7072
7064
  return /* @__PURE__ */ jsxs6(DefaultControlChannelContext.Provider, { value: true, children: [
7073
- userControlsEnabled && mouseChannel.mount && claims.mouse === 0 ? /* @__PURE__ */ jsx12(MouseControls, { ...mouseChannel.props, fovSpeed }) : null,
7074
- userControlsEnabled && touchChannel.mount && claims.touch === 0 ? /* @__PURE__ */ jsx12(TouchControls, { ...touchChannel.props }) : null,
7075
- userControlsEnabled && keyboardChannel.mount && claims.keyboard === 0 ? /* @__PURE__ */ jsx12(
7065
+ userControlsEnabled && mouseChannel.mount && claims.mouse === 0 ? /* @__PURE__ */ jsx11(MouseControls, { ...mouseChannel.props, fovSpeed }) : null,
7066
+ userControlsEnabled && touchChannel.mount && claims.touch === 0 ? /* @__PURE__ */ jsx11(TouchControls, { ...touchChannel.props }) : null,
7067
+ userControlsEnabled && keyboardChannel.mount && claims.keyboard === 0 ? /* @__PURE__ */ jsx11(
7076
7068
  KeyboardControls,
7077
7069
  {
7078
7070
  ...keyboardChannel.props,
@@ -7165,7 +7157,27 @@ var PanoViewer = forwardRef2(
7165
7157
  return resume;
7166
7158
  }, [mediaActivationControls, mediaActivationOptions]);
7167
7159
  const hasMediaActivationIntent = mediaActivationRevision >= 0 && hasPanoMediaActivationIntent(mediaActivationHost);
7168
- const shouldShowMediaActivation = mediaActivationOptions !== null && hasMediaActivationIntent && !mediaActivated;
7160
+ const shouldActivateMedia = mediaActivationOptions !== null && hasMediaActivationIntent && !mediaActivated;
7161
+ useEffect13(() => {
7162
+ if (!shouldActivateMedia) {
7163
+ return;
7164
+ }
7165
+ if (!needsMediaGesture()) {
7166
+ void activateMedia();
7167
+ return;
7168
+ }
7169
+ const handleGesture = () => {
7170
+ removeListeners();
7171
+ void activateMedia();
7172
+ };
7173
+ const removeListeners = () => {
7174
+ window.removeEventListener("pointerdown", handleGesture, true);
7175
+ window.removeEventListener("keydown", handleGesture, true);
7176
+ };
7177
+ window.addEventListener("pointerdown", handleGesture, { capture: true });
7178
+ window.addEventListener("keydown", handleGesture, { capture: true });
7179
+ return removeListeners;
7180
+ }, [activateMedia, shouldActivateMedia]);
7169
7181
  const fallbackViewRef = useRef13(DEFAULT_VIEW);
7170
7182
  const normalizedMinFov = Math.max(1, Math.min(minFov, maxFov - 1));
7171
7183
  const normalizedMaxFov = Math.min(
@@ -7428,7 +7440,7 @@ var PanoViewer = forwardRef2(
7428
7440
  "aria-label": ariaLabel,
7429
7441
  style: rootStyle,
7430
7442
  children: [
7431
- /* @__PURE__ */ jsx12(
7443
+ /* @__PURE__ */ jsx11(
7432
7444
  Canvas,
7433
7445
  {
7434
7446
  "aria-label": `${ariaLabel} canvas`,
@@ -7450,23 +7462,23 @@ var PanoViewer = forwardRef2(
7450
7462
  ...DEFAULT_CANVAS_STYLE,
7451
7463
  touchAction: userControlsEnabled ? "none" : "auto"
7452
7464
  },
7453
- children: /* @__PURE__ */ jsx12(XR, { store: xrStore, children: /* @__PURE__ */ jsxs6(
7465
+ children: /* @__PURE__ */ jsx11(XR, { store: xrStore, children: /* @__PURE__ */ jsxs6(
7454
7466
  WebVRRuntimeContext.Provider,
7455
7467
  {
7456
7468
  value: { host: webVRHost, xrStore, stereoView },
7457
7469
  children: [
7458
- /* @__PURE__ */ jsx12(PanoramaXROrigin, {}),
7459
- /* @__PURE__ */ jsx12(HotspotAccessibilityContext.Provider, { value: registry, children: /* @__PURE__ */ jsx12(HotspotTargetRegistryContext.Provider, { value: hotspotTargetRegistry, children: /* @__PURE__ */ jsx12(PanoEventBusContext.Provider, { value: eventBus, children: /* @__PURE__ */ jsx12(PanoCursorTree, { cursors: resolvedCursors, children: /* @__PURE__ */ jsx12(PanoramaViewContext.Provider, { value: controlsRef, children: /* @__PURE__ */ jsx12(
7470
+ /* @__PURE__ */ jsx11(PanoramaXROrigin, {}),
7471
+ /* @__PURE__ */ jsx11(HotspotAccessibilityContext.Provider, { value: registry, children: /* @__PURE__ */ jsx11(HotspotTargetRegistryContext.Provider, { value: hotspotTargetRegistry, children: /* @__PURE__ */ jsx11(PanoEventBusContext.Provider, { value: eventBus, children: /* @__PURE__ */ jsx11(PanoCursorTree, { cursors: resolvedCursors, children: /* @__PURE__ */ jsx11(PanoramaViewContext.Provider, { value: controlsRef, children: /* @__PURE__ */ jsx11(
7460
7472
  PanoContextMenuOverlayContext.Provider,
7461
7473
  {
7462
7474
  value: contextMenuOverlayApi,
7463
- children: /* @__PURE__ */ jsx12(PanoChromeOverlayContext.Provider, { value: chromeOverlayApi, children: /* @__PURE__ */ jsx12(PanoVideoHostContext.Provider, { value: videoHost, children: /* @__PURE__ */ jsx12(PanoFilterHostContext.Provider, { value: filterHost, children: /* @__PURE__ */ jsx12(
7475
+ children: /* @__PURE__ */ jsx11(PanoChromeOverlayContext.Provider, { value: chromeOverlayApi, children: /* @__PURE__ */ jsx11(PanoVideoHostContext.Provider, { value: videoHost, children: /* @__PURE__ */ jsx11(PanoFilterHostContext.Provider, { value: filterHost, children: /* @__PURE__ */ jsx11(
7464
7476
  PanoContextMenuActionsContext.Provider,
7465
7477
  {
7466
7478
  value: contextMenuActions,
7467
- children: /* @__PURE__ */ jsx12(ScenesHostContext.Provider, { value: scenesHost, children: /* @__PURE__ */ jsx12(BackgroundAudioHostContext.Provider, { value: bgmHost, children: /* @__PURE__ */ jsxs6(PanoMediaActivationHostContext.Provider, { value: mediaActivationHost, children: [
7468
- /* @__PURE__ */ jsx12(PanoVideoHostReset, {}),
7469
- /* @__PURE__ */ jsx12(
7479
+ children: /* @__PURE__ */ jsx11(ScenesHostContext.Provider, { value: scenesHost, children: /* @__PURE__ */ jsx11(BackgroundAudioHostContext.Provider, { value: bgmHost, children: /* @__PURE__ */ jsxs6(PanoMediaActivationHostContext.Provider, { value: mediaActivationHost, children: [
7480
+ /* @__PURE__ */ jsx11(PanoVideoHostReset, {}),
7481
+ /* @__PURE__ */ jsx11(
7470
7482
  PanoramaViewRuntime,
7471
7483
  {
7472
7484
  ref: controlsRef,
@@ -7477,7 +7489,7 @@ var PanoViewer = forwardRef2(
7477
7489
  options: controlOptions
7478
7490
  }
7479
7491
  ),
7480
- (onViewChange || onPanoramaClick || onPanoramaDoubleClick || onPanoramaPointerMove) && /* @__PURE__ */ jsx12(
7492
+ (onViewChange || onPanoramaClick || onPanoramaDoubleClick || onPanoramaPointerMove) && /* @__PURE__ */ jsx11(
7481
7493
  PanoEvents,
7482
7494
  {
7483
7495
  onViewChange,
@@ -7486,18 +7498,18 @@ var PanoViewer = forwardRef2(
7486
7498
  onPointerMove: onPanoramaPointerMove
7487
7499
  }
7488
7500
  ),
7489
- /* @__PURE__ */ jsx12(
7501
+ /* @__PURE__ */ jsx11(
7490
7502
  AutoRotate,
7491
7503
  {
7492
7504
  enabled: legacyAutoRotate,
7493
7505
  speed: legacyAutoRotateOptions.autoRotateSpeed
7494
7506
  }
7495
7507
  ),
7496
- /* @__PURE__ */ jsx12(PanoramaEventSurface, {}),
7497
- contextMenuChannel.mount ? /* @__PURE__ */ jsx12(PanoContextMenu, { ...contextMenuChannel.props }) : null,
7508
+ /* @__PURE__ */ jsx11(PanoramaEventSurface, {}),
7509
+ contextMenuChannel.mount ? /* @__PURE__ */ jsx11(PanoContextMenu, { ...contextMenuChannel.props }) : null,
7498
7510
  /* @__PURE__ */ jsxs6(ControlClaimsContext.Provider, { value: controlClaims, children: [
7499
7511
  children,
7500
- /* @__PURE__ */ jsx12(
7512
+ /* @__PURE__ */ jsx11(
7501
7513
  DefaultControlChannels,
7502
7514
  {
7503
7515
  fovSpeed: controlOptions.fovSpeed,
@@ -7525,7 +7537,7 @@ var PanoViewer = forwardRef2(
7525
7537
  "data-pano-chrome-overlay": "",
7526
7538
  ref: setOverlayNode,
7527
7539
  children: [
7528
- /* @__PURE__ */ jsx12(
7540
+ /* @__PURE__ */ jsx11(
7529
7541
  PanoVideoChromeBridge,
7530
7542
  {
7531
7543
  fullscreen: contextMenuActions,
@@ -7533,21 +7545,12 @@ var PanoViewer = forwardRef2(
7533
7545
  overlayElement
7534
7546
  }
7535
7547
  ),
7536
- /* @__PURE__ */ jsx12(WebVRChromeBridge, { host: webVRHost })
7548
+ /* @__PURE__ */ jsx11(WebVRChromeBridge, { host: webVRHost })
7537
7549
  ]
7538
7550
  }
7539
7551
  ),
7540
7552
  contextMenuOverlay,
7541
- hotspotAccessibilityControls,
7542
- shouldShowMediaActivation ? /* @__PURE__ */ jsx12(
7543
- PanoMediaActivationOverlay,
7544
- {
7545
- ...mediaActivationOptions,
7546
- onActivate: () => {
7547
- void activateMedia();
7548
- }
7549
- }
7550
- ) : null
7553
+ hotspotAccessibilityControls
7551
7554
  ]
7552
7555
  }
7553
7556
  );
@@ -8477,7 +8480,7 @@ import {
8477
8480
  Vector2 as Vector22,
8478
8481
  Vector3 as Vector37
8479
8482
  } from "three";
8480
- import { jsx as jsx13, jsxs as jsxs7 } from "react/jsx-runtime";
8483
+ import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
8481
8484
  var CENTER_NDC = new Vector22(0, 0);
8482
8485
  var HUD_DISTANCE = 2;
8483
8486
  var RETICLE_SCALE = 1;
@@ -8652,8 +8655,8 @@ function WebVRReticle({
8652
8655
  raycast: noopRaycast,
8653
8656
  renderOrder: RETICLE_RENDER_ORDER + 1,
8654
8657
  children: [
8655
- /* @__PURE__ */ jsx13("boxGeometry", { args: [CROSSHAIR_LENGTH, CROSSHAIR_THICKNESS, 1e-3] }),
8656
- /* @__PURE__ */ jsx13(
8658
+ /* @__PURE__ */ jsx12("boxGeometry", { args: [CROSSHAIR_LENGTH, CROSSHAIR_THICKNESS, 1e-3] }),
8659
+ /* @__PURE__ */ jsx12(
8657
8660
  "meshBasicMaterial",
8658
8661
  {
8659
8662
  color: "#ffffff",
@@ -8673,8 +8676,8 @@ function WebVRReticle({
8673
8676
  raycast: noopRaycast,
8674
8677
  renderOrder: RETICLE_RENDER_ORDER + 1,
8675
8678
  children: [
8676
- /* @__PURE__ */ jsx13("boxGeometry", { args: [CROSSHAIR_THICKNESS, CROSSHAIR_LENGTH, 1e-3] }),
8677
- /* @__PURE__ */ jsx13(
8679
+ /* @__PURE__ */ jsx12("boxGeometry", { args: [CROSSHAIR_THICKNESS, CROSSHAIR_LENGTH, 1e-3] }),
8680
+ /* @__PURE__ */ jsx12(
8678
8681
  "meshBasicMaterial",
8679
8682
  {
8680
8683
  color: "#ffffff",
@@ -8696,7 +8699,7 @@ function WebVRReticle({
8696
8699
  renderOrder: RETICLE_RENDER_ORDER + 2,
8697
8700
  visible: false,
8698
8701
  children: [
8699
- /* @__PURE__ */ jsx13(
8702
+ /* @__PURE__ */ jsx12(
8700
8703
  "ringGeometry",
8701
8704
  {
8702
8705
  args: [
@@ -8709,7 +8712,7 @@ function WebVRReticle({
8709
8712
  ]
8710
8713
  }
8711
8714
  ),
8712
- /* @__PURE__ */ jsx13(
8715
+ /* @__PURE__ */ jsx12(
8713
8716
  "meshBasicMaterial",
8714
8717
  {
8715
8718
  color: "#ffffff",
@@ -9161,7 +9164,7 @@ function useWebVRWakeLock(enabled) {
9161
9164
  }
9162
9165
 
9163
9166
  // src/webvr/webvr.tsx
9164
- import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs8 } from "react/jsx-runtime";
9167
+ import { Fragment as Fragment4, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
9165
9168
  function initializeSettings(screensize, profile) {
9166
9169
  const stored = loadWebVRSettings();
9167
9170
  return {
@@ -9495,7 +9498,7 @@ var WebVR = forwardRef4(function WebVR2({
9495
9498
  wakelock && (mode === "mobilevr" || mode === "fake")
9496
9499
  );
9497
9500
  return /* @__PURE__ */ jsxs8(Fragment4, { children: [
9498
- /* @__PURE__ */ jsx14(
9501
+ /* @__PURE__ */ jsx13(
9499
9502
  Gyro,
9500
9503
  {
9501
9504
  ref: gyroRef,
@@ -9509,7 +9512,7 @@ var WebVR = forwardRef4(function WebVR2({
9509
9512
  touchMode: "off"
9510
9513
  }
9511
9514
  ),
9512
- /* @__PURE__ */ jsx14(
9515
+ /* @__PURE__ */ jsx13(
9513
9516
  WebVRStereoRenderer,
9514
9517
  {
9515
9518
  mode,
@@ -9517,7 +9520,7 @@ var WebVR = forwardRef4(function WebVR2({
9517
9520
  screensize: settings.screensize
9518
9521
  }
9519
9522
  ),
9520
- /* @__PURE__ */ jsx14(
9523
+ /* @__PURE__ */ jsx13(
9521
9524
  WebVRReticle,
9522
9525
  {
9523
9526
  dwellMs: cursorDwellMs,
@@ -9801,7 +9804,7 @@ diffuseColor.rgb = mix(diffuseColor.rgb, applyPanoFilter(diffuseColor.rgb), clam
9801
9804
  }
9802
9805
 
9803
9806
  // src/pano-filter/pano-basic-material.tsx
9804
- import { jsx as jsx15 } from "react/jsx-runtime";
9807
+ import { jsx as jsx14 } from "react/jsx-runtime";
9805
9808
  function PanoBasicMaterial({
9806
9809
  map,
9807
9810
  side,
@@ -9848,7 +9851,7 @@ function PanoBasicMaterial({
9848
9851
  intensityUniformRef.current.value = snapshot.intensity;
9849
9852
  }
9850
9853
  }, [snapshot.intensity]);
9851
- return /* @__PURE__ */ jsx15(
9854
+ return /* @__PURE__ */ jsx14(
9852
9855
  "meshBasicMaterial",
9853
9856
  {
9854
9857
  ref: materialRef,
@@ -9864,7 +9867,7 @@ function PanoBasicMaterial({
9864
9867
  }
9865
9868
 
9866
9869
  // src/sphere.tsx
9867
- import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
9870
+ import { jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
9868
9871
  function useEquirectTexture(url, anisotropy, generateMipmaps, onLoad, onError) {
9869
9872
  const [texture, setTexture] = useState9(null);
9870
9873
  const onLoadRef = useRef22(onLoad);
@@ -9969,8 +9972,8 @@ function Sphere({
9969
9972
  rotation: [0, MathUtils5.degToRad(90 + yawOffset), 0],
9970
9973
  visible,
9971
9974
  children: [
9972
- /* @__PURE__ */ jsx16("sphereGeometry", { args: [DEFAULT_PANORAMA_RADIUS, 128, 64] }),
9973
- /* @__PURE__ */ jsx16(
9975
+ /* @__PURE__ */ jsx15("sphereGeometry", { args: [DEFAULT_PANORAMA_RADIUS, 128, 64] }),
9976
+ /* @__PURE__ */ jsx15(
9974
9977
  PanoBasicMaterial,
9975
9978
  {
9976
9979
  map: displayTexture,
@@ -10004,7 +10007,7 @@ import {
10004
10007
  TextureLoader as TextureLoader2,
10005
10008
  VideoTexture
10006
10009
  } from "three";
10007
- import { Fragment as Fragment5, jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
10010
+ import { Fragment as Fragment5, jsx as jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
10008
10011
  var EMPTY_TRACKS = [];
10009
10012
  var EMPTY_RATES = DEFAULT_PANO_VIDEO_PLAYBACK_RATES;
10010
10013
  function createEmptySnapshot() {
@@ -10725,8 +10728,8 @@ function PanoVideo({
10725
10728
  rotation: [0, MathUtils6.degToRad(90 + yawOffset), 0],
10726
10729
  visible,
10727
10730
  children: [
10728
- /* @__PURE__ */ jsx17("sphereGeometry", { args: [DEFAULT_PANORAMA_RADIUS, 128, 64] }),
10729
- /* @__PURE__ */ jsx17(
10731
+ /* @__PURE__ */ jsx16("sphereGeometry", { args: [DEFAULT_PANORAMA_RADIUS, 128, 64] }),
10732
+ /* @__PURE__ */ jsx16(
10730
10733
  PanoBasicMaterial,
10731
10734
  {
10732
10735
  map: activeTexture,
@@ -10737,7 +10740,7 @@ function PanoVideo({
10737
10740
  ]
10738
10741
  }
10739
10742
  ) : null,
10740
- captionsEnabled ? /* @__PURE__ */ jsx17(PanoVideoCaptions, { appearance: typeof captions === "object" ? captions : void 0 }) : null
10743
+ captionsEnabled ? /* @__PURE__ */ jsx16(PanoVideoCaptions, { appearance: typeof captions === "object" ? captions : void 0 }) : null
10741
10744
  ] });
10742
10745
  }
10743
10746
 
@@ -10869,7 +10872,7 @@ function overlayProgress(elapsedTime, duration, startTime) {
10869
10872
  }
10870
10873
 
10871
10874
  // src/scene-transitions/particle-overlay.tsx
10872
- import { jsx as jsx18 } from "react/jsx-runtime";
10875
+ import { jsx as jsx17 } from "react/jsx-runtime";
10873
10876
  var PARTICLE_GRID = 48;
10874
10877
  var PARTICLE_COUNT = PARTICLE_GRID * PARTICLE_GRID;
10875
10878
  var PARTICLE_VERTEX_SHADER = `
@@ -10991,7 +10994,7 @@ function ParticleOverlay({
10991
10994
  onFinish();
10992
10995
  }
10993
10996
  });
10994
- return /* @__PURE__ */ jsx18(
10997
+ return /* @__PURE__ */ jsx17(
10995
10998
  "mesh",
10996
10999
  {
10997
11000
  ref: meshRef,
@@ -11285,7 +11288,7 @@ function createSnapshotMaterial(preset, texture) {
11285
11288
  }
11286
11289
 
11287
11290
  // src/scene-transitions/snapshot-overlay.tsx
11288
- import { jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
11291
+ import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
11289
11292
  function SnapshotOverlay({
11290
11293
  snapshot,
11291
11294
  transition,
@@ -11335,20 +11338,20 @@ function SnapshotOverlay({
11335
11338
  return null;
11336
11339
  }
11337
11340
  return /* @__PURE__ */ jsxs11("mesh", { ref: meshRef, renderOrder: OVERLAY_RENDER_ORDER, frustumCulled: false, children: [
11338
- /* @__PURE__ */ jsx19("primitive", { attach: "geometry", object: FULLSCREEN_PLANE }),
11339
- /* @__PURE__ */ jsx19("primitive", { attach: "material", object: material })
11341
+ /* @__PURE__ */ jsx18("primitive", { attach: "geometry", object: FULLSCREEN_PLANE }),
11342
+ /* @__PURE__ */ jsx18("primitive", { attach: "material", object: material })
11340
11343
  ] });
11341
11344
  }
11342
11345
 
11343
11346
  // src/scene-transitions/transition-overlay.tsx
11344
- import { jsx as jsx20 } from "react/jsx-runtime";
11347
+ import { jsx as jsx19 } from "react/jsx-runtime";
11345
11348
  function TransitionOverlay(props) {
11346
11349
  const { preset } = props.transition;
11347
11350
  switch (preset) {
11348
11351
  case "none":
11349
11352
  return null;
11350
11353
  case "particles":
11351
- return /* @__PURE__ */ jsx20(ParticleOverlay, { ...props });
11354
+ return /* @__PURE__ */ jsx19(ParticleOverlay, { ...props });
11352
11355
  case "crossfade":
11353
11356
  case "zoom":
11354
11357
  case "blackout":
@@ -11376,7 +11379,7 @@ function TransitionOverlay(props) {
11376
11379
  case "zoomBlur":
11377
11380
  case "hexDissolve":
11378
11381
  case "filmBurn":
11379
- return /* @__PURE__ */ jsx20(SnapshotOverlay, { ...props });
11382
+ return /* @__PURE__ */ jsx19(SnapshotOverlay, { ...props });
11380
11383
  default: {
11381
11384
  const exhaustive = preset;
11382
11385
  void exhaustive;
@@ -11621,7 +11624,7 @@ var TileTextureManager = class {
11621
11624
  };
11622
11625
 
11623
11626
  // src/tile/texture-manager-context.tsx
11624
- import { jsx as jsx21 } from "react/jsx-runtime";
11627
+ import { jsx as jsx20 } from "react/jsx-runtime";
11625
11628
  var TileTextureManagerContext = createContext15(
11626
11629
  null
11627
11630
  );
@@ -11645,7 +11648,7 @@ function TileTextureManagerProvider({
11645
11648
  manager.resume();
11646
11649
  return () => manager.dispose();
11647
11650
  }, [manager]);
11648
- return /* @__PURE__ */ jsx21(TileTextureManagerContext.Provider, { value: manager, children });
11651
+ return /* @__PURE__ */ jsx20(TileTextureManagerContext.Provider, { value: manager, children });
11649
11652
  }
11650
11653
  function useSharedTileTextureManager() {
11651
11654
  return useContext22(TileTextureManagerContext);
@@ -11854,7 +11857,7 @@ function resolveTemplateUrl(template, address) {
11854
11857
  }
11855
11858
 
11856
11859
  // src/tile/tile.tsx
11857
- import { jsx as jsx22, jsxs as jsxs12 } from "react/jsx-runtime";
11860
+ import { jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
11858
11861
  var MAX_LOD_UPDATE_INTERVAL_MS = 100;
11859
11862
  var FAST_ROTATION_THRESHOLD_RADIANS = Math.PI / 180;
11860
11863
  var FAST_FOV_THRESHOLD_DEGREES = 0.5;
@@ -11941,14 +11944,14 @@ function PreviewFace({
11941
11944
  [geometry]
11942
11945
  );
11943
11946
  const transform = getFaceTransform(face, PREVIEW_RADIUS);
11944
- return /* @__PURE__ */ jsx22(
11947
+ return /* @__PURE__ */ jsx21(
11945
11948
  "mesh",
11946
11949
  {
11947
11950
  geometry,
11948
11951
  position: transform.position,
11949
11952
  renderOrder: -100,
11950
11953
  rotation: transform.rotation,
11951
- children: /* @__PURE__ */ jsx22(
11954
+ children: /* @__PURE__ */ jsx21(
11952
11955
  PanoBasicMaterial,
11953
11956
  {
11954
11957
  depthTest: false,
@@ -11964,7 +11967,7 @@ function PreviewCube({
11964
11967
  texture,
11965
11968
  faceOrder
11966
11969
  }) {
11967
- return CUBE_FACES.map((face) => /* @__PURE__ */ jsx22(
11970
+ return CUBE_FACES.map((face) => /* @__PURE__ */ jsx21(
11968
11971
  PreviewFace,
11969
11972
  {
11970
11973
  face,
@@ -12009,14 +12012,14 @@ var TileMesh = memo(function TileMesh2({
12009
12012
  if (!snapshot.texture) {
12010
12013
  return null;
12011
12014
  }
12012
- return /* @__PURE__ */ jsx22("group", { position: transform.position, rotation: transform.rotation, children: /* @__PURE__ */ jsx22(
12015
+ return /* @__PURE__ */ jsx21("group", { position: transform.position, rotation: transform.rotation, children: /* @__PURE__ */ jsx21(
12013
12016
  "mesh",
12014
12017
  {
12015
12018
  geometry: SHARED_TILE_GEOMETRY,
12016
12019
  position: [layout.x, layout.y, 0],
12017
12020
  renderOrder,
12018
12021
  scale: [layout.width, layout.height, 1],
12019
- children: /* @__PURE__ */ jsx22(
12022
+ children: /* @__PURE__ */ jsx21(
12020
12023
  PanoBasicMaterial,
12021
12024
  {
12022
12025
  depthTest: false,
@@ -12033,7 +12036,7 @@ var TileLayerMeshes = memo(function TileLayerMeshes2({
12033
12036
  manager,
12034
12037
  resolveUrl
12035
12038
  }) {
12036
- return layer.addresses.map((address) => /* @__PURE__ */ jsx22(
12039
+ return layer.addresses.map((address) => /* @__PURE__ */ jsx21(
12037
12040
  TileMesh,
12038
12041
  {
12039
12042
  address,
@@ -12371,14 +12374,14 @@ function Tile({
12371
12374
  commitLayers(nextLayers);
12372
12375
  });
12373
12376
  return /* @__PURE__ */ jsxs12("group", { visible, children: [
12374
- previewTexture ? /* @__PURE__ */ jsx22(
12377
+ previewTexture ? /* @__PURE__ */ jsx21(
12375
12378
  PreviewCube,
12376
12379
  {
12377
12380
  texture: previewTexture,
12378
12381
  faceOrder: previewFaceOrder
12379
12382
  }
12380
12383
  ) : null,
12381
- layers.map((layer) => /* @__PURE__ */ jsx22(
12384
+ layers.map((layer) => /* @__PURE__ */ jsx21(
12382
12385
  TileLayerMeshes,
12383
12386
  {
12384
12387
  layer,
@@ -12391,7 +12394,7 @@ function Tile({
12391
12394
  }
12392
12395
 
12393
12396
  // src/scenes.tsx
12394
- import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
12397
+ import { jsx as jsx22, jsxs as jsxs13 } from "react/jsx-runtime";
12395
12398
  function SceneSource({
12396
12399
  scene,
12397
12400
  visible,
@@ -12404,7 +12407,7 @@ function SceneSource({
12404
12407
  }
12405
12408
  switch (scene.type) {
12406
12409
  case "sphere":
12407
- return /* @__PURE__ */ jsx23(
12410
+ return /* @__PURE__ */ jsx22(
12408
12411
  Sphere,
12409
12412
  {
12410
12413
  src: scene.src,
@@ -12417,7 +12420,7 @@ function SceneSource({
12417
12420
  );
12418
12421
  case "tile": {
12419
12422
  const { id: _id, type: _type, ...tileProps } = scene;
12420
- return /* @__PURE__ */ jsx23(
12423
+ return /* @__PURE__ */ jsx22(
12421
12424
  Tile,
12422
12425
  {
12423
12426
  ...tileProps,
@@ -12685,7 +12688,7 @@ function ScenesController({
12685
12688
  const renderedScene = slots[liveSlot];
12686
12689
  const snapshotVisible = snapshot !== null && (phase === "transitioning" || phase === "recapturing" || phase === "preloading");
12687
12690
  return /* @__PURE__ */ jsxs13(Fragment6, { children: [
12688
- /* @__PURE__ */ jsx23(
12691
+ /* @__PURE__ */ jsx22(
12689
12692
  SnapshotCapture,
12690
12693
  {
12691
12694
  requestId: captureRequestId,
@@ -12697,7 +12700,7 @@ function ScenesController({
12697
12700
  const source = slots[slot];
12698
12701
  const isLive = slot === liveSlot;
12699
12702
  const isPending = slot === pendingSlot;
12700
- return /* @__PURE__ */ jsx23(
12703
+ return /* @__PURE__ */ jsx22(
12701
12704
  SceneSource,
12702
12705
  {
12703
12706
  scene: source,
@@ -12713,7 +12716,7 @@ function ScenesController({
12713
12716
  `${slot}:${source?.id ?? "empty"}:${recoveryKey}`
12714
12717
  );
12715
12718
  }),
12716
- snapshotVisible ? /* @__PURE__ */ jsx23(
12719
+ snapshotVisible ? /* @__PURE__ */ jsx22(
12717
12720
  TransitionOverlay,
12718
12721
  {
12719
12722
  snapshot,
@@ -12806,12 +12809,12 @@ function Scenes({
12806
12809
  }
12807
12810
  };
12808
12811
  }, [host, requestSceneChange]);
12809
- return /* @__PURE__ */ jsx23(
12812
+ return /* @__PURE__ */ jsx22(
12810
12813
  TileTextureManagerProvider,
12811
12814
  {
12812
12815
  maxTextureMemoryMb,
12813
12816
  maxConcurrentLoads: maxConcurrentTileLoads,
12814
- children: /* @__PURE__ */ jsx23(
12817
+ children: /* @__PURE__ */ jsx22(
12815
12818
  ScenesController,
12816
12819
  {
12817
12820
  ...rest,
@@ -12864,7 +12867,7 @@ import { useEffect as useEffect28, useMemo as useMemo21, useState as useState13
12864
12867
  // src/webvr/stereo-html.tsx
12865
12868
  import { Html } from "@react-three/drei";
12866
12869
  import { useContext as useContext24, useSyncExternalStore as useSyncExternalStore7 } from "react";
12867
- import { Fragment as Fragment7, jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
12870
+ import { Fragment as Fragment7, jsx as jsx23, jsxs as jsxs14 } from "react/jsx-runtime";
12868
12871
  function useFallbackStereoView() {
12869
12872
  const runtime = useContext24(WebVRRuntimeContext);
12870
12873
  const host = runtime?.host ?? null;
@@ -12889,10 +12892,10 @@ function stereoCalculatePosition(eye, stereoView) {
12889
12892
  function PanoHtml({ children, ...htmlProps }) {
12890
12893
  const stereoView = useFallbackStereoView();
12891
12894
  if (!stereoView) {
12892
- return /* @__PURE__ */ jsx24(Html, { ...htmlProps, children });
12895
+ return /* @__PURE__ */ jsx23(Html, { ...htmlProps, children });
12893
12896
  }
12894
12897
  return /* @__PURE__ */ jsxs14(Fragment7, { children: [
12895
- /* @__PURE__ */ jsx24(
12898
+ /* @__PURE__ */ jsx23(
12896
12899
  Html,
12897
12900
  {
12898
12901
  ...htmlProps,
@@ -12900,7 +12903,7 @@ function PanoHtml({ children, ...htmlProps }) {
12900
12903
  children
12901
12904
  }
12902
12905
  ),
12903
- /* @__PURE__ */ jsx24(
12906
+ /* @__PURE__ */ jsx23(
12904
12907
  Html,
12905
12908
  {
12906
12909
  ...htmlProps,
@@ -12913,7 +12916,7 @@ function PanoHtml({ children, ...htmlProps }) {
12913
12916
  }
12914
12917
 
12915
12918
  // src/hotspot/hotspot-tooltip.tsx
12916
- import { jsx as jsx25, jsxs as jsxs15 } from "react/jsx-runtime";
12919
+ import { jsx as jsx24, jsxs as jsxs15 } from "react/jsx-runtime";
12917
12920
  var DEFAULT_HOTSPOT_TOOLTIP_OFFSET = 12;
12918
12921
  var DEFAULT_HOTSPOT_TOOLTIP_APPEARANCE = {
12919
12922
  background: "rgba(22, 22, 22, 0.72)",
@@ -13010,14 +13013,14 @@ function HotspotTooltip({
13010
13013
  if (!showImage && !content.text) {
13011
13014
  return null;
13012
13015
  }
13013
- return /* @__PURE__ */ jsx25(PanoHtml, { pointerEvents: "none", style: WRAPPER_STYLE, zIndexRange: [20, 10], children: /* @__PURE__ */ jsxs15(
13016
+ return /* @__PURE__ */ jsx24(PanoHtml, { pointerEvents: "none", style: WRAPPER_STYLE, zIndexRange: [20, 10], children: /* @__PURE__ */ jsxs15(
13014
13017
  "div",
13015
13018
  {
13016
13019
  className: "pano-hotspot-tooltip",
13017
13020
  role: "tooltip",
13018
13021
  style: bubbleStyle,
13019
13022
  children: [
13020
- showImage ? /* @__PURE__ */ jsx25(
13023
+ showImage ? /* @__PURE__ */ jsx24(
13021
13024
  "img",
13022
13025
  {
13023
13026
  alt: content.imageAlt ?? content.text ?? "",
@@ -13026,14 +13029,14 @@ function HotspotTooltip({
13026
13029
  src: content.image
13027
13030
  }
13028
13031
  ) : null,
13029
- content.text ? /* @__PURE__ */ jsx25("p", { className: "pano-hotspot-tooltip-text", children: content.text }) : null
13032
+ content.text ? /* @__PURE__ */ jsx24("p", { className: "pano-hotspot-tooltip-text", children: content.text }) : null
13030
13033
  ]
13031
13034
  }
13032
13035
  ) });
13033
13036
  }
13034
13037
 
13035
13038
  // src/hotspot/hotspot-anchor.tsx
13036
- import { jsx as jsx26, jsxs as jsxs16 } from "react/jsx-runtime";
13039
+ import { jsx as jsx25, jsxs as jsxs16 } from "react/jsx-runtime";
13037
13040
  var DEFAULT_FLOATING_DISTANCE = 10;
13038
13041
  var PANORAMA_RADIUS = DEFAULT_PANORAMA_RADIUS;
13039
13042
  var PANORAMA_SURFACE_INSET = 4;
@@ -13680,18 +13683,18 @@ function HotspotAnchor({
13680
13683
  } : void 0,
13681
13684
  onPointerUp: acceptsPointer ? (event) => releasePointer(event, true) : void 0,
13682
13685
  children: [
13683
- focused ? focusContent ?? /* @__PURE__ */ jsx26(
13686
+ focused ? focusContent ?? /* @__PURE__ */ jsx25(
13684
13687
  "lineSegments",
13685
13688
  {
13686
13689
  geometry: focusGeometry,
13687
13690
  position: [0, 0, 0.01],
13688
13691
  renderOrder: renderOrder + 1,
13689
13692
  scale: [1.12, 1.12, 1],
13690
- children: /* @__PURE__ */ jsx26("lineBasicMaterial", { color: "#f5fbfc", depthTest: false })
13693
+ children: /* @__PURE__ */ jsx25("lineBasicMaterial", { color: "#f5fbfc", depthTest: false })
13691
13694
  }
13692
13695
  ) : null,
13693
13696
  children,
13694
- tooltipOpen && tooltipContent ? /* @__PURE__ */ jsx26("group", { ref: tooltipAnchorRef, children: /* @__PURE__ */ jsx26(
13697
+ tooltipOpen && tooltipContent ? /* @__PURE__ */ jsx25("group", { ref: tooltipAnchorRef, children: /* @__PURE__ */ jsx25(
13695
13698
  HotspotTooltip,
13696
13699
  {
13697
13700
  appearance: tooltipAppearance,
@@ -13712,7 +13715,7 @@ import {
13712
13715
  MeshBasicMaterial,
13713
13716
  Vector2 as Vector26
13714
13717
  } from "three";
13715
- import { jsx as jsx27, jsxs as jsxs17 } from "react/jsx-runtime";
13718
+ import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
13716
13719
  var HOTSPOT_ALPHA_CUTOFF = 0.05;
13717
13720
  var SAMPLE_UV = new Vector26();
13718
13721
  var RAYCAST_HITS = [];
@@ -13815,8 +13818,8 @@ function HotspotPlane({
13815
13818
  opacity
13816
13819
  }) {
13817
13820
  return /* @__PURE__ */ jsxs17("mesh", { raycast: hotspotPlaneRaycast, children: [
13818
- /* @__PURE__ */ jsx27("planeGeometry", { args: [1, 1] }),
13819
- /* @__PURE__ */ jsx27(
13821
+ /* @__PURE__ */ jsx26("planeGeometry", { args: [1, 1] }),
13822
+ /* @__PURE__ */ jsx26(
13820
13823
  "meshBasicMaterial",
13821
13824
  {
13822
13825
  alphaTest: HOTSPOT_ALPHA_CUTOFF,
@@ -13832,7 +13835,7 @@ function HotspotPlane({
13832
13835
  }
13833
13836
 
13834
13837
  // src/hotspot/image-hotspot.tsx
13835
- import { jsx as jsx28 } from "react/jsx-runtime";
13838
+ import { jsx as jsx27 } from "react/jsx-runtime";
13836
13839
  function useHotspotImageTexture(src, onLoad, onError) {
13837
13840
  const gl = useThree21((state) => state.gl);
13838
13841
  const [texture, setTexture] = useState15(null);
@@ -13896,7 +13899,7 @@ function ImageHotspot({
13896
13899
  ...anchorProps
13897
13900
  }) {
13898
13901
  const texture = useHotspotImageTexture(src, onLoad, onError);
13899
- return /* @__PURE__ */ jsx28(HotspotAnchor, { ...anchorProps, height, width, children: /* @__PURE__ */ jsx28(HotspotPlane, { map: texture, opacity }) });
13902
+ return /* @__PURE__ */ jsx27(HotspotAnchor, { ...anchorProps, height, width, children: /* @__PURE__ */ jsx27(HotspotPlane, { map: texture, opacity }) });
13900
13903
  }
13901
13904
 
13902
13905
  // src/hotspot/polygon-hotspot.tsx
@@ -13921,7 +13924,7 @@ import {
13921
13924
  PerspectiveCamera as PerspectiveCamera6,
13922
13925
  Vector3 as Vector314
13923
13926
  } from "three";
13924
- import { jsx as jsx29 } from "react/jsx-runtime";
13927
+ import { jsx as jsx28 } from "react/jsx-runtime";
13925
13928
  var LINE_WORLD_POSITION = new Vector314();
13926
13929
  function applyScreenSpaceDashScale(object, camera, viewportHeight) {
13927
13930
  const material = object?.material;
@@ -13967,7 +13970,7 @@ function HotspotStrokeLine({
13967
13970
  }
13968
13971
  applyScreenSpaceDashScale(lineRef.current, state.camera, state.size.height);
13969
13972
  });
13970
- return /* @__PURE__ */ jsx29(
13973
+ return /* @__PURE__ */ jsx28(
13971
13974
  Line,
13972
13975
  {
13973
13976
  ref: lineRef,
@@ -13989,7 +13992,7 @@ function HotspotStrokeLine({
13989
13992
  }
13990
13993
 
13991
13994
  // src/hotspot/polygon-hotspot.tsx
13992
- import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
13995
+ import { jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
13993
13996
  var POLYGON_RADIUS = 990;
13994
13997
  var MAX_FILL_SEGMENT_DEGREES = 7;
13995
13998
  function cloneVertices(vertices) {
@@ -14292,7 +14295,7 @@ function PolygonHotspot({
14292
14295
  draggable,
14293
14296
  interactive,
14294
14297
  useAngularScale: false,
14295
- focusContent: /* @__PURE__ */ jsx30(
14298
+ focusContent: /* @__PURE__ */ jsx29(
14296
14299
  HotspotStrokeLine,
14297
14300
  {
14298
14301
  color: "#75cbd3",
@@ -14314,7 +14317,7 @@ function PolygonHotspot({
14314
14317
  startVerticesRef.current = null;
14315
14318
  },
14316
14319
  children: [
14317
- /* @__PURE__ */ jsx30("mesh", { geometry: fillGeometry, renderOrder, children: /* @__PURE__ */ jsx30(
14320
+ /* @__PURE__ */ jsx29("mesh", { geometry: fillGeometry, renderOrder, children: /* @__PURE__ */ jsx29(
14318
14321
  "meshBasicMaterial",
14319
14322
  {
14320
14323
  color: fill,
@@ -14324,7 +14327,7 @@ function PolygonHotspot({
14324
14327
  transparent: true
14325
14328
  }
14326
14329
  ) }),
14327
- /* @__PURE__ */ jsx30(
14330
+ /* @__PURE__ */ jsx29(
14328
14331
  HotspotStrokeLine,
14329
14332
  {
14330
14333
  color: stroke,
@@ -14349,7 +14352,7 @@ import {
14349
14352
  Quaternion as Quaternion5,
14350
14353
  Vector3 as Vector316
14351
14354
  } from "three";
14352
- import { jsx as jsx31 } from "react/jsx-runtime";
14355
+ import { jsx as jsx30 } from "react/jsx-runtime";
14353
14356
  var POLYLINE_RADIUS = 990;
14354
14357
  var MAX_SEGMENT_DEGREES = 7;
14355
14358
  function cloneVertices2(vertices) {
@@ -14489,7 +14492,7 @@ function PolylineHotspot({
14489
14492
  startPosition: event.startPosition
14490
14493
  });
14491
14494
  };
14492
- return /* @__PURE__ */ jsx31(
14495
+ return /* @__PURE__ */ jsx30(
14493
14496
  HotspotAnchor,
14494
14497
  {
14495
14498
  ...anchorProps,
@@ -14503,7 +14506,7 @@ function PolylineHotspot({
14503
14506
  renderOrder,
14504
14507
  draggable,
14505
14508
  useAngularScale: false,
14506
- focusContent: /* @__PURE__ */ jsx31(
14509
+ focusContent: /* @__PURE__ */ jsx30(
14507
14510
  HotspotStrokeLine,
14508
14511
  {
14509
14512
  color: "#75cbd3",
@@ -14524,7 +14527,7 @@ function PolylineHotspot({
14524
14527
  emitVerticesChange(event, onDragEnd);
14525
14528
  startVerticesRef.current = null;
14526
14529
  },
14527
- children: /* @__PURE__ */ jsx31(
14530
+ children: /* @__PURE__ */ jsx30(
14528
14531
  HotspotStrokeLine,
14529
14532
  {
14530
14533
  color: stroke,
@@ -14549,7 +14552,7 @@ import {
14549
14552
  LinearMipmapLinearFilter as LinearMipmapLinearFilter4,
14550
14553
  SRGBColorSpace as SRGBColorSpace6
14551
14554
  } from "three";
14552
- import { jsx as jsx32 } from "react/jsx-runtime";
14555
+ import { jsx as jsx31 } from "react/jsx-runtime";
14553
14556
  var GRAPHIC_TEXTURE_SIZE = 512;
14554
14557
  function resolveStrokeWidth(value) {
14555
14558
  return Number.isFinite(value) ? Math.max(value, 0) : 8;
@@ -14769,15 +14772,15 @@ function CanvasGraphicHotspot({
14769
14772
  ...anchorProps
14770
14773
  }) {
14771
14774
  const texture = useGraphicTexture(graphic, width, height, onLoad, onError);
14772
- return /* @__PURE__ */ jsx32(HotspotAnchor, { ...anchorProps, height, width, children: /* @__PURE__ */ jsx32(HotspotPlane, { map: texture, opacity }) });
14775
+ return /* @__PURE__ */ jsx31(HotspotAnchor, { ...anchorProps, height, width, children: /* @__PURE__ */ jsx31(HotspotPlane, { map: texture, opacity }) });
14773
14776
  }
14774
14777
  function GraphicHotspot(props) {
14775
14778
  const { graphic, ...restProps } = props;
14776
14779
  if (graphic.kind === "svg") {
14777
14780
  const imageProps = restProps;
14778
- return /* @__PURE__ */ jsx32(ImageHotspot, { ...imageProps, src: graphic.src });
14781
+ return /* @__PURE__ */ jsx31(ImageHotspot, { ...imageProps, src: graphic.src });
14779
14782
  }
14780
- return /* @__PURE__ */ jsx32(CanvasGraphicHotspot, { ...restProps, graphic });
14783
+ return /* @__PURE__ */ jsx31(CanvasGraphicHotspot, { ...restProps, graphic });
14781
14784
  }
14782
14785
 
14783
14786
  // src/hotspot/sequence-hotspot.tsx
@@ -14790,7 +14793,7 @@ import {
14790
14793
  SRGBColorSpace as SRGBColorSpace7,
14791
14794
  TextureLoader as TextureLoader6
14792
14795
  } from "three";
14793
- import { jsx as jsx33 } from "react/jsx-runtime";
14796
+ import { jsx as jsx32 } from "react/jsx-runtime";
14794
14797
  var DEFAULT_SEQUENCE_FPS = 12;
14795
14798
  function resolveFps(value) {
14796
14799
  return Number.isFinite(value) && value > 0 ? value : DEFAULT_SEQUENCE_FPS;
@@ -14966,7 +14969,7 @@ function SequenceHotspot({
14966
14969
  onFrameChangeRef.current?.({ id, index: nextIndex, src });
14967
14970
  }
14968
14971
  });
14969
- return /* @__PURE__ */ jsx33(HotspotAnchor, { ...anchorProps, id, height, width, children: /* @__PURE__ */ jsx33(HotspotPlane, { map: texture, opacity }) });
14972
+ return /* @__PURE__ */ jsx32(HotspotAnchor, { ...anchorProps, id, height, width, children: /* @__PURE__ */ jsx32(HotspotPlane, { map: texture, opacity }) });
14970
14973
  }
14971
14974
 
14972
14975
  // src/hotspot/video-hotspot.tsx
@@ -14980,7 +14983,7 @@ import {
14980
14983
  TextureLoader as TextureLoader7,
14981
14984
  VideoTexture as VideoTexture2
14982
14985
  } from "three";
14983
- import { jsx as jsx34 } from "react/jsx-runtime";
14986
+ import { jsx as jsx33 } from "react/jsx-runtime";
14984
14987
  function clampVolume2(volume) {
14985
14988
  if (!Number.isFinite(volume)) {
14986
14989
  return 1;
@@ -15205,7 +15208,7 @@ function VideoHotspot({
15205
15208
  };
15206
15209
  }, [playing, resource]);
15207
15210
  const activeTexture = resource?.ready ? resource.texture : posterTexture;
15208
- return /* @__PURE__ */ jsx34(HotspotAnchor, { ...anchorProps, id, height, width, children: /* @__PURE__ */ jsx34(HotspotPlane, { map: activeTexture, opacity }) });
15211
+ return /* @__PURE__ */ jsx33(HotspotAnchor, { ...anchorProps, id, height, width, children: /* @__PURE__ */ jsx33(HotspotPlane, { map: activeTexture, opacity }) });
15209
15212
  }
15210
15213
 
15211
15214
  // src/hotspot/audio-hotspot.tsx
@@ -15219,7 +15222,7 @@ import {
15219
15222
  SRGBColorSpace as SRGBColorSpace9,
15220
15223
  TextureLoader as TextureLoader8
15221
15224
  } from "three";
15222
- import { jsx as jsx35 } from "react/jsx-runtime";
15225
+ import { jsx as jsx34 } from "react/jsx-runtime";
15223
15226
  var SPEAKER_TEXTURE_SIZE = 512;
15224
15227
  function paintSpeakerBody(context, center) {
15225
15228
  context.fillStyle = "#f5fbfc";
@@ -15504,7 +15507,7 @@ function AudioHotspot({
15504
15507
  howl.mute(mutedRef.current);
15505
15508
  howl.volume(clampAudioVolume(volumeRef.current) * spatial.gain);
15506
15509
  });
15507
- return /* @__PURE__ */ jsx35(HotspotAnchor, { ...anchorProps, id, height, width, children: marker ? /* @__PURE__ */ jsx35(HotspotPlane, { map: markerTexture, opacity }) : null });
15510
+ return /* @__PURE__ */ jsx34(HotspotAnchor, { ...anchorProps, id, height, width, children: marker ? /* @__PURE__ */ jsx34(HotspotPlane, { map: markerTexture, opacity }) : null });
15508
15511
  }
15509
15512
 
15510
15513
  // src/hotspot/text-hotspot.tsx
@@ -15516,7 +15519,7 @@ import {
15516
15519
  LinearMipmapLinearFilter as LinearMipmapLinearFilter8,
15517
15520
  SRGBColorSpace as SRGBColorSpace10
15518
15521
  } from "three";
15519
- import { jsx as jsx36 } from "react/jsx-runtime";
15522
+ import { jsx as jsx35 } from "react/jsx-runtime";
15520
15523
  var TEXT_TEXTURE_LONG_SIDE = 1024;
15521
15524
  var DEFAULT_FONT_FAMILY = "system-ui, sans-serif";
15522
15525
  var DEFAULT_FONT_SIZE = 96;
@@ -15834,13 +15837,13 @@ function TextHotspot({
15834
15837
  whiteSpace
15835
15838
  };
15836
15839
  const texture = useTextTexture(text, width, height, style, onLoad, onError);
15837
- return /* @__PURE__ */ jsx36(HotspotAnchor, { ...anchorProps, height, width, children: /* @__PURE__ */ jsx36(HotspotPlane, { map: texture, opacity }) });
15840
+ return /* @__PURE__ */ jsx35(HotspotAnchor, { ...anchorProps, height, width, children: /* @__PURE__ */ jsx35(HotspotPlane, { map: texture, opacity }) });
15838
15841
  }
15839
15842
 
15840
15843
  // src/hotspot/iframe-hotspot.tsx
15841
15844
  import { Html as Html2 } from "@react-three/drei";
15842
15845
  import { DoubleSide as DoubleSide6 } from "three";
15843
- import { jsx as jsx37, jsxs as jsxs19 } from "react/jsx-runtime";
15846
+ import { jsx as jsx36, jsxs as jsxs19 } from "react/jsx-runtime";
15844
15847
  var IFRAME_LONG_SIDE = 800;
15845
15848
  var CSS3D_DISTANCE_FACTOR = 400;
15846
15849
  var DEFAULT_SANDBOX = "allow-scripts allow-popups allow-forms";
@@ -15907,8 +15910,8 @@ function IframeHotspot({
15907
15910
  width,
15908
15911
  children: [
15909
15912
  /* @__PURE__ */ jsxs19("mesh", { children: [
15910
- /* @__PURE__ */ jsx37("planeGeometry", { args: [1, 1] }),
15911
- /* @__PURE__ */ jsx37(
15913
+ /* @__PURE__ */ jsx36("planeGeometry", { args: [1, 1] }),
15914
+ /* @__PURE__ */ jsx36(
15912
15915
  "meshBasicMaterial",
15913
15916
  {
15914
15917
  depthWrite: false,
@@ -15919,7 +15922,7 @@ function IframeHotspot({
15919
15922
  }
15920
15923
  )
15921
15924
  ] }),
15922
- /* @__PURE__ */ jsx37(
15925
+ /* @__PURE__ */ jsx36(
15923
15926
  Html2,
15924
15927
  {
15925
15928
  distanceFactor: CSS3D_DISTANCE_FACTOR,
@@ -15934,7 +15937,7 @@ function IframeHotspot({
15934
15937
  },
15935
15938
  transform: true,
15936
15939
  zIndexRange: [10, 0],
15937
- children: /* @__PURE__ */ jsx37(
15940
+ children: /* @__PURE__ */ jsx36(
15938
15941
  "iframe",
15939
15942
  {
15940
15943
  allow,