@tmsoft/webphone 3.0.25 → 5.0.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.
@@ -7124,11 +7124,11 @@ var concatArrays = (e, t) => {
7124
7124
  isNumber,
7125
7125
  isArbitraryVariable,
7126
7126
  isArbitraryValue
7127
- ], J = () => [
7127
+ ], Jp = () => [
7128
7128
  isNumber,
7129
7129
  isArbitraryVariable,
7130
7130
  isArbitraryValue
7131
- ], Y = () => [
7131
+ ], J = () => [
7132
7132
  isFraction,
7133
7133
  "full",
7134
7134
  ...O()
@@ -8020,9 +8020,9 @@ var concatArrays = (e, t) => {
8020
8020
  "scale-y": [{ "scale-y": q() }],
8021
8021
  "scale-z": [{ "scale-z": q() }],
8022
8022
  "scale-3d": ["scale-3d"],
8023
- skew: [{ skew: J() }],
8024
- "skew-x": [{ "skew-x": J() }],
8025
- "skew-y": [{ "skew-y": J() }],
8023
+ skew: [{ skew: Jp() }],
8024
+ "skew-x": [{ "skew-x": Jp() }],
8025
+ "skew-y": [{ "skew-y": Jp() }],
8026
8026
  transform: [{ transform: [
8027
8027
  isArbitraryVariable,
8028
8028
  isArbitraryValue,
@@ -8033,10 +8033,10 @@ var concatArrays = (e, t) => {
8033
8033
  ] }],
8034
8034
  "transform-origin": [{ origin: T() }],
8035
8035
  "transform-style": [{ transform: ["3d", "flat"] }],
8036
- translate: [{ translate: Y() }],
8037
- "translate-x": [{ "translate-x": Y() }],
8038
- "translate-y": [{ "translate-y": Y() }],
8039
- "translate-z": [{ "translate-z": Y() }],
8036
+ translate: [{ translate: J() }],
8037
+ "translate-x": [{ "translate-x": J() }],
8038
+ "translate-y": [{ "translate-y": J() }],
8039
+ "translate-z": [{ "translate-z": J() }],
8040
8040
  "translate-none": ["translate-none"],
8041
8041
  accent: [{ accent: B() }],
8042
8042
  appearance: [{ appearance: ["none", "auto"] }],
@@ -8425,8 +8425,61 @@ const createSipService = (e, t = {}) => {
8425
8425
  o.volume = e / 100;
8426
8426
  }, L = async (e) => {
8427
8427
  typeof o.setSinkId == "function" && await o.setSinkId(e);
8428
- }, R = (e) => {
8429
- l.value = e;
8428
+ }, R = async (t) => {
8429
+ if (!t) return;
8430
+ let n = [...a.value.entries()].flatMap(([e, t]) => {
8431
+ let n = t.sessionDescriptionHandler, i = n?.peerConnection?.getSenders().find((e) => e.track?.kind === "audio");
8432
+ return i ? [{
8433
+ channelId: e,
8434
+ session: t,
8435
+ sdh: n,
8436
+ sender: i
8437
+ }] : [];
8438
+ });
8439
+ if (n.length === 0) {
8440
+ l.value = t;
8441
+ return;
8442
+ }
8443
+ let i = [], o = [];
8444
+ try {
8445
+ for (let { sender: e } of n) {
8446
+ let n = await navigator.mediaDevices.getUserMedia(U(!1, t));
8447
+ i.push(n);
8448
+ let [a] = n.getAudioTracks(), s = e.track;
8449
+ if (!a || !s) throw Error("Could not acquire an audio track for the selected microphone");
8450
+ a.enabled = s.enabled, await e.replaceTrack(a), o.push({
8451
+ sender: e,
8452
+ previousTrack: s
8453
+ });
8454
+ }
8455
+ l.value = t, n.forEach(({ channelId: t, session: n, sdh: a, sender: o }, s) => {
8456
+ let l = i[s]?.getAudioTracks()[0];
8457
+ if (!l) return;
8458
+ let u = e.channels.value.find((e) => e.id === t), f = !(u?.isHeld || u?.isMuted);
8459
+ o.track.enabled = f;
8460
+ let p = a.localMediaStream;
8461
+ p && (p.getAudioTracks().forEach((e) => {
8462
+ e !== l && p.removeTrack(e);
8463
+ }), p.getTracks().includes(l) || p.addTrack(l)), e.activeChannelId.value === t && (p ? d.value = p : d.value && (d.value.getAudioTracks().forEach((e) => {
8464
+ e !== l && d.value?.removeTrack(e);
8465
+ }), d.value.getTracks().includes(l) || d.value.addTrack(l)));
8466
+ try {
8467
+ N(n, t);
8468
+ } catch (e) {
8469
+ console.error("[SipJs] Media-ready callback failed after microphone switch:", e);
8470
+ }
8471
+ });
8472
+ let s = new Set([...a.value.values()].flatMap((e) => e.sessionDescriptionHandler?.peerConnection?.getSenders().map((e) => e.track).filter((e) => e?.kind === "audio") ?? []));
8473
+ o.forEach(({ previousTrack: e }) => {
8474
+ s.has(e) || e.stop();
8475
+ }), i.forEach((e, t) => {
8476
+ e.getTracks().forEach((e) => {
8477
+ e !== n[t]?.sender.track && e.stop();
8478
+ });
8479
+ });
8480
+ } catch (e) {
8481
+ await Promise.allSettled(o.map(({ sender: e, previousTrack: t }) => e.replaceTrack(t))), i.forEach((e) => e.getTracks().forEach((e) => e.stop())), console.warn("[SipJs] Failed to switch microphone:", e);
8482
+ }
8430
8483
  }, z = (e, t) => {
8431
8484
  let n = !1, i = e.sessionDescriptionHandler;
8432
8485
  return i?.peerConnection && i.peerConnection.getSenders().forEach((e) => {
@@ -8462,15 +8515,15 @@ const createSipService = (e, t = {}) => {
8462
8515
  } catch (e) {
8463
8516
  console.warn("[SipJs] Failed to recover outbound audio track:", e);
8464
8517
  }
8465
- }, U = (e = !1) => {
8466
- let t = {
8518
+ }, U = (e = !1, t = l.value) => {
8519
+ let n = {
8467
8520
  echoCancellation: { ideal: !0 },
8468
8521
  noiseSuppression: { ideal: !1 },
8469
8522
  autoGainControl: { ideal: !1 },
8470
8523
  channelCount: 1
8471
8524
  };
8472
- return l.value && (t.deviceId = { exact: l.value }), {
8473
- audio: t,
8525
+ return t && (n.deviceId = { exact: t }), {
8526
+ audio: n,
8474
8527
  video: e
8475
8528
  };
8476
8529
  }, W = async () => {
@@ -8613,14 +8666,14 @@ const createSipService = (e, t = {}) => {
8613
8666
  isHeld: !1,
8614
8667
  hasVideo: !1,
8615
8668
  hasEarlyMedia: !1
8616
- }), a.value.delete(i), e.activeChannelId.value === i && nm(), F();
8669
+ }), a.value.delete(i), e.activeChannelId.value === i && rm(), F();
8617
8670
  break;
8618
8671
  }
8619
8672
  case SessionState.Established:
8620
8673
  m.add(i), e.updateChannelState(i, {
8621
8674
  status: "connected",
8622
8675
  startTime: Date.now()
8623
- }), M(i, "connected"), e.activeChannelId.value === i && ($(t), H(t).then(() => N(t, i))), F();
8676
+ }), M(i, "connected"), e.activeChannelId.value === i && (Q(t), H(t).then(() => N(t, i))), F();
8624
8677
  break;
8625
8678
  }
8626
8679
  });
@@ -8645,7 +8698,7 @@ const createSipService = (e, t = {}) => {
8645
8698
  m.add(o), e.channels.value.find((e) => e.id === o)?.status !== "connected" && (e.updateChannelState(o, {
8646
8699
  status: "connected",
8647
8700
  startTime: Date.now()
8648
- }), M(o, "connected"), $(l), H(l).then(() => N(l, o)), F());
8701
+ }), M(o, "connected"), Q(l), H(l).then(() => N(l, o)), F());
8649
8702
  break;
8650
8703
  case SessionState.Terminated: {
8651
8704
  let n = e.channels.value.find((e) => e.id === o);
@@ -8673,7 +8726,7 @@ const createSipService = (e, t = {}) => {
8673
8726
  startTime: void 0,
8674
8727
  keypadValue: "",
8675
8728
  hasVideo: !1
8676
- }), a.value.delete(o), e.activeChannelId.value === o && nm(), F();
8729
+ }), a.value.delete(o), e.activeChannelId.value === o && rm(), F();
8677
8730
  break;
8678
8731
  }
8679
8732
  }
@@ -8682,41 +8735,44 @@ const createSipService = (e, t = {}) => {
8682
8735
  sessionDescriptionHandlerOptions: { constraints: U(i) },
8683
8736
  requestDelegate: {
8684
8737
  onProgress: (t) => {
8685
- (t.message.statusCode === 180 || t.message.statusCode === 183) && (t.message.body && (e.updateChannelState(o, { hasEarlyMedia: !0 }), $(l)), F());
8738
+ (t.message.statusCode === 180 || t.message.statusCode === 183) && (t.message.body && (e.updateChannelState(o, { hasEarlyMedia: !0 }), Q(l)), F());
8686
8739
  },
8687
8740
  onAccept: (t) => {
8688
8741
  e.channels.value.find((e) => e.id === o)?.status !== "connected" && (m.add(o), e.updateChannelState(o, {
8689
8742
  status: "connected",
8690
8743
  startTime: Date.now()
8691
- }), M(o, "connected"), $(l), H(l).then(() => N(l, o)), F());
8744
+ }), M(o, "connected"), Q(l), H(l).then(() => N(l, o)), F());
8692
8745
  }
8693
8746
  }
8694
8747
  };
8695
8748
  await l.invite(u);
8696
- }, J = async (t = !1) => {
8749
+ }, Jp = async (t = !1) => {
8697
8750
  let n = e.activeChannelId.value, i = a.value.get(n);
8698
8751
  if (i instanceof Invitation && i.state === SessionState.Initial) {
8752
+ T(), e.updateChannelState(n, {
8753
+ status: "connected",
8754
+ startTime: Date.now()
8755
+ }), F();
8699
8756
  for (let [t, n] of a.value.entries()) if (t !== e.activeChannelId.value && n.state === SessionState.Established && !e.channels.value.find((e) => e.id === t)?.isHeld) try {
8700
- await Z(n, !0), e.updateChannelState(t, { isHeld: !0 });
8757
+ await Y(n, !0), e.updateChannelState(t, { isHeld: !0 });
8701
8758
  } catch (e) {
8702
8759
  console.error(`[SipJs] Failed to hold channel ${t}:`, e);
8703
8760
  }
8704
- let o = { sessionDescriptionHandlerOptions: { constraints: U(t) } };
8705
- e.updateChannelState(n, {
8706
- status: "connected",
8707
- startTime: Date.now()
8708
- });
8761
+ let o = { sessionDescriptionHandlerOptions: {
8762
+ constraints: U(t),
8763
+ iceGatheringTimeout: 1e3
8764
+ } };
8709
8765
  try {
8710
- await i.accept(o), await H(i), F();
8766
+ await i.accept(o), F();
8711
8767
  } catch (t) {
8712
8768
  let i = a.value.get(n);
8713
- throw i instanceof Invitation && i.state === SessionState.Initial && e.updateChannelState(n, {
8769
+ throw i instanceof Invitation && i.state === SessionState.Initial && (e.updateChannelState(n, {
8714
8770
  status: "incoming",
8715
8771
  startTime: void 0
8716
- }), t;
8772
+ }), F()), t;
8717
8773
  }
8718
8774
  }
8719
- }, Y = async () => {
8775
+ }, J = async () => {
8720
8776
  let t = a.value.get(e.activeChannelId.value);
8721
8777
  if (t) switch (t.state) {
8722
8778
  case SessionState.Initial:
@@ -8727,35 +8783,35 @@ const createSipService = (e, t = {}) => {
8727
8783
  await t.bye();
8728
8784
  break;
8729
8785
  }
8730
- }, Jp = () => {
8786
+ }, Yp = () => {
8731
8787
  let t = a.value.get(e.activeChannelId.value);
8732
8788
  if (!t) return;
8733
8789
  let n = !e.isMuted.value;
8734
8790
  e.setMuted(n), V(t, e.channels.value.find((t) => t.id === e.activeChannelId.value));
8735
- }, Z = async (e, t) => {
8791
+ }, Y = async (e, t) => {
8736
8792
  let n = { sessionDescriptionHandlerOptions: { hold: t } };
8737
8793
  await e.invite(n);
8738
- }, Yp = async () => {
8794
+ }, Xp = async () => {
8739
8795
  let t = a.value.get(e.activeChannelId.value);
8740
8796
  if (t?.state !== SessionState.Established) return;
8741
8797
  let n = !e.isHeld.value;
8742
8798
  try {
8743
- await Z(t, n), e.setHeld(n), V(t, e.channels.value.find((t) => t.id === e.activeChannelId.value));
8799
+ await Y(t, n), e.setHeld(n), V(t, e.channels.value.find((t) => t.id === e.activeChannelId.value));
8744
8800
  } catch {}
8745
- }, Xp = async (t) => {
8801
+ }, Zp = async (t) => {
8746
8802
  let n = e.activeChannelId.value;
8747
8803
  if (n === t) return;
8748
8804
  let i = a.value.get(n), o = a.value.get(t), s = e.channels.value.find((e) => e.id === n), l = e.channels.value.find((e) => e.id === t);
8749
8805
  if (i && i.state === SessionState.Established && !s?.isHeld) try {
8750
- await Z(i, !0), e.updateChannelState(n, { isHeld: !0 }), V(i, e.channels.value.find((e) => e.id === n));
8806
+ await Y(i, !0), e.updateChannelState(n, { isHeld: !0 }), V(i, e.channels.value.find((e) => e.id === n));
8751
8807
  } catch {}
8752
8808
  if (e.setActiveChannelId(t), F(), o && o.state === SessionState.Established) {
8753
8809
  if (l?.isHeld) try {
8754
- await Z(o, !1), e.updateChannelState(t, { isHeld: !1 });
8810
+ await Y(o, !1), e.updateChannelState(t, { isHeld: !1 });
8755
8811
  } catch {}
8756
- V(o, e.channels.value.find((e) => e.id === t)), $(o);
8757
- } else nm();
8758
- }, Zp = (t) => {
8812
+ V(o, e.channels.value.find((e) => e.id === t)), Q(o);
8813
+ } else rm();
8814
+ }, Qp = (t) => {
8759
8815
  if (!/^[0-9*#]$/.test(t)) return;
8760
8816
  let n = a.value.get(e.activeChannelId.value);
8761
8817
  if (n?.state !== SessionState.Established) return;
@@ -8770,10 +8826,10 @@ const createSipService = (e, t = {}) => {
8770
8826
  contentDisposition: "signal"
8771
8827
  } } };
8772
8828
  n.info(o);
8773
- }, Q = (t, n) => {
8829
+ }, Z = (t, n) => {
8774
8830
  let i = e.channels.value.find((e) => e.id === t);
8775
- !i || i.status !== "connected" || ($(n), V(n, i), H(n), o.play().catch(() => {}));
8776
- }, Qp = async (t) => {
8831
+ !i || i.status !== "connected" || (Q(n), V(n, i), H(n), o.play().catch(() => {}));
8832
+ }, $p = async (t) => {
8777
8833
  console.log("[SipJs] 🔄 transferCall iniciado"), console.log("[SipJs] Target:", t);
8778
8834
  let i = e.activeChannelId.value, o = a.value.get(i);
8779
8835
  if (!o) throw console.error("[SipJs] ❌ No hay sesión activa en el canal", i), Error("No active session to transfer");
@@ -8793,7 +8849,7 @@ const createSipService = (e, t = {}) => {
8793
8849
  },
8794
8850
  onReject: (e) => {
8795
8851
  let t = e.message.statusCode;
8796
- console.error("[SipJs] ❌ Transfer REFER rechazado:", t), console.error("[SipJs] Response completo:", e.message), Q(i, o);
8852
+ console.error("[SipJs] ❌ Transfer REFER rechazado:", t), console.error("[SipJs] Response completo:", e.message), Z(i, o);
8797
8853
  }
8798
8854
  },
8799
8855
  onNotify: (e) => {
@@ -8816,7 +8872,7 @@ const createSipService = (e, t = {}) => {
8816
8872
  487: "Transferencia cancelada",
8817
8873
  503: "Servicio no disponible - el destino puede estar fuera de línea"
8818
8874
  }[t] || `Error en transferencia (código ${t})`;
8819
- console.warn("[SipJs] 💬", e), Q(i, o);
8875
+ console.warn("[SipJs] 💬", e), Z(i, o);
8820
8876
  } else t >= 100 && t < 200 && console.log("[SipJs] 📞 Transferencia en progreso:", t, n);
8821
8877
  } else console.warn("[SipJs] ⚠️ No se pudo extraer el código de estado del NOTIFY body");
8822
8878
  } else console.warn("[SipJs] ⚠️ NOTIFY sin body");
@@ -8825,14 +8881,14 @@ const createSipService = (e, t = {}) => {
8825
8881
  } catch (e) {
8826
8882
  throw console.error("[SipJs] ❌ Error en transferCall:", e), console.error("[SipJs] Error type:", e?.constructor?.name), console.error("[SipJs] Error message:", e instanceof Error ? e.message : String(e)), console.error("[SipJs] Error stack:", e instanceof Error ? e.stack : "N/A"), e;
8827
8883
  }
8828
- }, $p = async (t) => {
8884
+ }, em = async (t) => {
8829
8885
  console.log("[SipJs] 🔄 startAttendedTransfer iniciado"), console.log("[SipJs] Target:", t);
8830
8886
  let n = e.activeChannelId.value, i = a.value.get(n);
8831
8887
  if (console.log("[SipJs] Canal original:", n), console.log("[SipJs] Sesión original:", i?.state), !i || i.state !== SessionState.Established) throw console.error("[SipJs] ❌ No hay llamada establecida para transferir"), Error("No established call to transfer");
8832
8888
  let o = e.channels.value.find((e) => e.status === "idle");
8833
8889
  if (console.log("[SipJs] Canal de consulta encontrado:", o?.id), !o) throw console.error("[SipJs] ❌ No hay canales disponibles para llamada de consulta"), Error("No available channel for consultation call");
8834
8890
  try {
8835
- console.log("[SipJs] 🔇 Poniendo llamada original en hold..."), await Z(i, !0), e.updateChannelState(n, { isHeld: !0 }), console.log("[SipJs] ✅ Llamada original en hold");
8891
+ console.log("[SipJs] 🔇 Poniendo llamada original en hold..."), await Y(i, !0), e.updateChannelState(n, { isHeld: !0 }), console.log("[SipJs] ✅ Llamada original en hold");
8836
8892
  } catch (e) {
8837
8893
  throw console.error("[SipJs] ❌ Failed to hold original call:", e), Error("Failed to put call on hold");
8838
8894
  }
@@ -8844,9 +8900,9 @@ const createSipService = (e, t = {}) => {
8844
8900
  targetNumber: t
8845
8901
  }), console.log("[SipJs] 📋 Transferencia en progreso registrada");
8846
8902
  } catch (t) {
8847
- throw console.error("[SipJs] ❌ Failed to start consultation call:", t), console.log("[SipJs] 🔄 Volviendo al canal original y quitando hold..."), e.setActiveChannelId(n), await Z(i, !1).catch(() => {}), e.updateChannelState(n, { isHeld: !1 }), Error("Failed to initiate consultation call");
8903
+ throw console.error("[SipJs] ❌ Failed to start consultation call:", t), console.log("[SipJs] 🔄 Volviendo al canal original y quitando hold..."), e.setActiveChannelId(n), await Y(i, !1).catch(() => {}), e.updateChannelState(n, { isHeld: !1 }), Error("Failed to initiate consultation call");
8848
8904
  }
8849
- }, em = async () => {
8905
+ }, tm = async () => {
8850
8906
  console.log("[SipJs] 🔄 completeAttendedTransfer iniciado");
8851
8907
  let t = e.transferInProgress.value;
8852
8908
  if (!t) throw console.error("[SipJs] ❌ No hay transferencia en progreso"), Error("No transfer in progress");
@@ -8889,7 +8945,7 @@ const createSipService = (e, t = {}) => {
8889
8945
  } catch (e) {
8890
8946
  throw console.error("[SipJs] Attended transfer failed:", e), e;
8891
8947
  }
8892
- }, tm = async () => {
8948
+ }, nm = async () => {
8893
8949
  let t = e.transferInProgress.value;
8894
8950
  if (!t) throw Error("No transfer in progress");
8895
8951
  console.log("[SipJs] Canceling attended transfer...");
@@ -8900,12 +8956,12 @@ const createSipService = (e, t = {}) => {
8900
8956
  console.warn("[SipJs] Error ending consultation:", e);
8901
8957
  }
8902
8958
  if (n) try {
8903
- e.setActiveChannelId(t.originalChannelId), await Z(n, !1), e.updateChannelState(t.originalChannelId, { isHeld: !1 }), console.log("[SipJs] Returned to original call");
8959
+ e.setActiveChannelId(t.originalChannelId), await Y(n, !1), e.updateChannelState(t.originalChannelId, { isHeld: !1 }), console.log("[SipJs] Returned to original call");
8904
8960
  } catch (e) {
8905
8961
  console.warn("[SipJs] Error resuming original call:", e);
8906
8962
  }
8907
8963
  e.setTransferInProgress(null);
8908
- }, $ = (e) => {
8964
+ }, Q = (e) => {
8909
8965
  let t = e.sessionDescriptionHandler;
8910
8966
  if (!t) {
8911
8967
  console.error("[SipJs] setupRemoteMedia: no sessionDescriptionHandler");
@@ -8936,23 +8992,23 @@ const createSipService = (e, t = {}) => {
8936
8992
  }, { signal: _.signal });
8937
8993
  let [s] = n.getTracks();
8938
8994
  s && (o.srcObject = n, a(s), i && N(e, i.id));
8939
- }, nm = () => {
8995
+ }, rm = () => {
8940
8996
  v?.abort(), v = null, _?.abort(), _ = null, o.pause(), o.srcObject = null, u.value = null, d.value = null;
8941
8997
  };
8942
8998
  return {
8943
8999
  initUserAgent: Wp,
8944
9000
  stop: Kp,
8945
9001
  makeCall: q,
8946
- answerCall: J,
8947
- hangupCall: Y,
8948
- toggleMute: Jp,
8949
- toggleHold: Yp,
8950
- sendDTMF: Zp,
8951
- transferCall: Qp,
8952
- startAttendedTransfer: $p,
8953
- completeAttendedTransfer: em,
8954
- cancelAttendedTransfer: tm,
8955
- switchChannel: Xp,
9002
+ answerCall: Jp,
9003
+ hangupCall: J,
9004
+ toggleMute: Yp,
9005
+ toggleHold: Xp,
9006
+ sendDTMF: Qp,
9007
+ transferCall: $p,
9008
+ startAttendedTransfer: em,
9009
+ completeAttendedTransfer: tm,
9010
+ cancelAttendedTransfer: nm,
9011
+ switchChannel: Zp,
8956
9012
  extension: S,
8957
9013
  setVolume: I,
8958
9014
  setNotificationVolume: O,
@@ -16371,12 +16427,12 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
16371
16427
  if (!e) return "";
16372
16428
  let t = e.trim(), n = t.startsWith("+"), i = t.replace(/[^\d]/g, "");
16373
16429
  return n ? `+${i}` : i;
16374
- }, H = computed(() => {
16430
+ }, H = (e) => /\d/.test(e) && /^[+\d\s().*#-]+$/.test(e.trim()), U = computed(() => {
16375
16431
  let e = p.value, t = e?.remoteNumber || e?.keypadValue, n = e?.remoteDisplayName;
16376
16432
  if (!t) return "Unknown";
16377
16433
  let i = B(t), a = o.contacts?.find((e) => B(e.number) === i);
16378
- return a ? a.name : n && n !== t ? n : o.maskNumber ? maskPhoneNumber(t) : t;
16379
- }), U = computed(() => {
16434
+ return a ? a.name : n && n !== t ? o.maskNumber && H(n) ? B(n) === i ? maskPhoneNumber(t) : maskPhoneNumber(n) : n : o.maskNumber ? maskPhoneNumber(t) : t;
16435
+ }), W = computed(() => {
16380
16436
  let e = p.value, t = e?.remoteNumber || e?.keypadValue || "";
16381
16437
  return o.maskNumber ? maskPhoneNumber(t) : t;
16382
16438
  });
@@ -16473,7 +16529,7 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
16473
16529
  })) : (openBlock(), createBlock(unref(CircleUser), {
16474
16530
  key: 4,
16475
16531
  class: "wp:w-3 wp:h-3"
16476
- }))], 2), createElementVNode("div", _hoisted_9$4, [createElementVNode("span", _hoisted_10$3, toDisplayString(e.name), 1), createElementVNode("span", _hoisted_11$3, toDisplayString(e.number), 1)])], 40, _hoisted_8$4))), 128))], 512), [[vShow, v.value && E.value && (O.value.length > 0 || D.value)]])], 512)])) : (p.value?.status || "idle") === "connected" ? (openBlock(), createElementBlock("div", _hoisted_12$3, [createElementVNode("div", _hoisted_13$1, [createElementVNode("div", _hoisted_14$1, " En llamada con " + toDisplayString(H.value), 1), H.value === U.value ? createCommentVNode("", !0) : (openBlock(), createElementBlock("div", _hoisted_15$1, toDisplayString(U.value), 1))])])) : (p.value?.status || "idle") === "idle" ? createCommentVNode("", !0) : (openBlock(), createElementBlock("div", _hoisted_16$1, [createElementVNode("div", _hoisted_17$1, [createElementVNode("div", _hoisted_18, [createElementVNode("div", _hoisted_19, toDisplayString(H.value), 1), H.value === U.value ? createCommentVNode("", !0) : (openBlock(), createElementBlock("div", _hoisted_20, toDisplayString(U.value), 1))]), createVNode(unref(TooltipProvider_default), null, {
16532
+ }))], 2), createElementVNode("div", _hoisted_9$4, [createElementVNode("span", _hoisted_10$3, toDisplayString(e.name), 1), createElementVNode("span", _hoisted_11$3, toDisplayString(e.number), 1)])], 40, _hoisted_8$4))), 128))], 512), [[vShow, v.value && E.value && (O.value.length > 0 || D.value)]])], 512)])) : (p.value?.status || "idle") === "connected" ? (openBlock(), createElementBlock("div", _hoisted_12$3, [createElementVNode("div", _hoisted_13$1, [createElementVNode("div", _hoisted_14$1, " En llamada con " + toDisplayString(U.value), 1), U.value === W.value ? createCommentVNode("", !0) : (openBlock(), createElementBlock("div", _hoisted_15$1, toDisplayString(W.value), 1))])])) : (p.value?.status || "idle") === "idle" ? createCommentVNode("", !0) : (openBlock(), createElementBlock("div", _hoisted_16$1, [createElementVNode("div", _hoisted_17$1, [createElementVNode("div", _hoisted_18, [createElementVNode("div", _hoisted_19, toDisplayString(U.value), 1), U.value === W.value ? createCommentVNode("", !0) : (openBlock(), createElementBlock("div", _hoisted_20, toDisplayString(W.value), 1))]), createVNode(unref(TooltipProvider_default), null, {
16477
16533
  default: withCtx(() => [createVNode(unref(Tooltip_default), null, {
16478
16534
  default: withCtx(() => [createVNode(unref(TooltipTrigger_default), { "as-child": "" }), createVNode(unref(TooltipContent_default), { class: "wp:flex wp:items-center wp:gap-2" }, {
16479
16535
  default: withCtx(() => [createElementVNode("span", null, toDisplayString(unref(t).isKeypadVisible ? "Ocultar" : "Mostrar") + " teclado", 1), createVNode(unref(Kbd_default), null, {
@@ -17656,59 +17712,59 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17656
17712
  }), qp = computed(() => {
17657
17713
  let e = Gp.value?.remoteNumber || x.remoteNumber;
17658
17714
  return o.maskNumber ? maskPhoneNumber(e) : e;
17659
- }), q = computed(() => (W.value, !!Gp.value?.hasVideo || G(E.value) || G(D.value))), { isOnline: J } = useNetwork(), Y = computed(() => !J.value), Z = ref(null), Q = ref(!1), em = computed(() => o.enablePictureInPicture), tm = () => {
17660
- em.value && Z.value?.toggle();
17661
- }, $ = async (e, t) => {
17715
+ }), q = computed(() => (W.value, !!Gp.value?.hasVideo || G(E.value) || G(D.value))), { isOnline: Jp } = useNetwork(), J = computed(() => !Jp.value), Y = ref(null), Z = ref(!1), tm = computed(() => o.enablePictureInPicture), nm = () => {
17716
+ tm.value && Y.value?.toggle();
17717
+ }, Q = async (e, t) => {
17662
17718
  try {
17663
17719
  t === "blind" ? await S.transferCall(e) : await S.startAttendedTransfer(e);
17664
17720
  } catch (e) {
17665
17721
  console.error("[WebPhone] Transfer error:", e), alert(e instanceof Error ? e.message : "Transfer failed. Please try again.");
17666
17722
  }
17667
- }, nm = async () => {
17723
+ }, rm = async () => {
17668
17724
  try {
17669
17725
  await S.completeAttendedTransfer();
17670
17726
  } catch (e) {
17671
17727
  console.error("[WebPhone] Complete transfer error:", e), alert(e instanceof Error ? e.message : "Failed to complete transfer.");
17672
17728
  }
17673
- }, rm = async () => {
17729
+ }, im = async () => {
17674
17730
  try {
17675
17731
  await S.cancelAttendedTransfer();
17676
17732
  } catch (e) {
17677
17733
  console.error("[WebPhone] Cancel transfer error:", e), alert(e instanceof Error ? e.message : "Failed to cancel transfer.");
17678
17734
  }
17679
- }, im = (e) => {
17680
- x.keypadValue = e, S.makeCall(e);
17681
17735
  }, am = (e) => {
17736
+ x.keypadValue = e, S.makeCall(e);
17737
+ }, om = (e) => {
17682
17738
  if (o.onAnswer) {
17683
17739
  o.onAnswer(e);
17684
17740
  return;
17685
17741
  }
17686
17742
  S.answerCall(e);
17687
- }, om = () => {
17743
+ }, sm = () => {
17688
17744
  if (o.onHangup) {
17689
17745
  o.onHangup();
17690
17746
  return;
17691
17747
  }
17692
17748
  S.hangupCall();
17693
- }, sm = () => {
17749
+ }, cm = () => {
17694
17750
  if (o.onReject) {
17695
17751
  o.onReject();
17696
17752
  return;
17697
17753
  }
17698
17754
  S.hangupCall();
17699
- }, cm = () => {
17700
- j.value = !0, Z.value?.close(), window.focus();
17701
17755
  }, lm = () => {
17702
- if (!em.value) return !1;
17703
- let e = x.callStatus !== "idle", t = document.hidden || !document.hasFocus();
17704
- return e && t && !Q.value;
17756
+ j.value = !0, Y.value?.close(), window.focus();
17705
17757
  }, um = () => {
17758
+ if (!tm.value) return !1;
17759
+ let e = x.callStatus !== "idle", t = document.hidden || !document.hasFocus();
17760
+ return e && t && !Z.value;
17761
+ }, $ = () => {
17706
17762
  window.setTimeout(() => {
17707
- lm() && Z.value?.open();
17763
+ um() && Y.value?.open();
17708
17764
  }, 150);
17709
17765
  };
17710
17766
  watchEffect(() => {
17711
- F.value && (Q.value || !E.value ? F.value.srcObject = null : F.value.srcObject = E.value), L.value && (Q.value || !D.value ? L.value.srcObject = null : L.value.srcObject = D.value);
17767
+ F.value && (Z.value || !E.value ? F.value.srcObject = null : F.value.srcObject = E.value), L.value && (Z.value || !D.value ? L.value.srcObject = null : L.value.srcObject = D.value);
17712
17768
  });
17713
17769
  let dm = (e) => {
17714
17770
  if (!e || typeof e.addEventListener != "function" || typeof e.removeEventListener != "function") return () => {};
@@ -17775,7 +17831,7 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17775
17831
  ], vm = ref(!1), ym = computed({
17776
17832
  get: () => x.activeChannelId.toString(),
17777
17833
  set: async (e) => {
17778
- if (!Y.value && e && !vm.value) {
17834
+ if (!J.value && e && !vm.value) {
17779
17835
  vm.value = !0;
17780
17836
  try {
17781
17837
  await T(parseInt(e));
@@ -17791,9 +17847,9 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17791
17847
  let t = x.channels.find((t) => t.id === e);
17792
17848
  return t ? t.isHeld || t.status === "held" : !1;
17793
17849
  }, Sm = (e) => {
17794
- Y.value || (ym.value = e.toString());
17850
+ J.value || (ym.value = e.toString());
17795
17851
  }, Cm = (e) => {
17796
- if (!Y.value && ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "h" && (e.preventDefault(), k.value = !0), (e.metaKey || e.ctrlKey) && e.key === "," && (e.preventDefault(), O.value = !0), (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k" && (e.preventDefault(), x.toggleKeypad()), (e.metaKey || e.ctrlKey) && [
17852
+ if (!J.value && ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "h" && (e.preventDefault(), k.value = !0), (e.metaKey || e.ctrlKey) && e.key === "," && (e.preventDefault(), O.value = !0), (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k" && (e.preventDefault(), x.toggleKeypad()), (e.metaKey || e.ctrlKey) && [
17797
17853
  "1",
17798
17854
  "2",
17799
17855
  "3"
@@ -17806,14 +17862,14 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17806
17862
  }
17807
17863
  };
17808
17864
  watch(() => x.callStatus, () => {
17809
- lm() && um();
17865
+ um() && $();
17810
17866
  }), watch(() => x.isConnected, (e) => {
17811
17867
  v.value && a.set(v.value, e);
17812
- }, { immediate: !0 }), watch(em, (e) => {
17813
- !e && Q.value && Z.value?.close();
17868
+ }, { immediate: !0 }), watch(tm, (e) => {
17869
+ !e && Z.value && Y.value?.close();
17814
17870
  });
17815
17871
  let wm = ref(!1), Tm = async () => {
17816
- wm.value || Y.value || !o.host || !o.extension || !o.password || (await w({
17872
+ wm.value || J.value || !o.host || !o.extension || !o.password || (await w({
17817
17873
  uri: `sip:${o.extension}@${o.host}`,
17818
17874
  transportOptions: { server: _.value },
17819
17875
  authorizationUsername: o.extension,
@@ -17828,22 +17884,22 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17828
17884
  await S.stop(), wm.value = !1;
17829
17885
  }
17830
17886
  }), onMounted(async () => {
17831
- window.addEventListener("keydown", Cm), document.addEventListener("visibilitychange", um), window.addEventListener("blur", um), window.addEventListener("pagehide", um), !(o.mode === "webcall" && (!o.to || !o.logo)) && await Tm();
17832
- }), watch(() => J.value, async (e) => {
17887
+ window.addEventListener("keydown", Cm), document.addEventListener("visibilitychange", $), window.addEventListener("blur", $), window.addEventListener("pagehide", $), !(o.mode === "webcall" && (!o.to || !o.logo)) && await Tm();
17888
+ }), watch(() => Jp.value, async (e) => {
17833
17889
  e && await Tm();
17834
17890
  }), onUnmounted(() => {
17835
- S.stop(), window.removeEventListener("keydown", Cm), document.removeEventListener("visibilitychange", um), window.removeEventListener("blur", um), window.removeEventListener("pagehide", um);
17891
+ S.stop(), window.removeEventListener("keydown", Cm), document.removeEventListener("visibilitychange", $), window.removeEventListener("blur", $), window.removeEventListener("pagehide", $);
17836
17892
  }), (e, t) => (openBlock(), createElementBlock(Fragment, null, [
17837
17893
  createElementVNode("div", {
17838
17894
  ref_key: "phoneRef",
17839
17895
  ref: N,
17840
17896
  style: normalizeStyle(unref(gm)),
17841
- class: normalizeClass(["webphone webphone-container wp:bg-white wp:dark:bg-neutral-800 wp:rounded-lg wp:shadow-sm wp:inset-shadow-2xs wp:w-[min(92vw,330px)] wp:fixed wp:z-50 wp:select-none wp:[&_button]:cursor-pointer wp:**:[[role=button]]:cursor-pointer", Y.value ? "wp:opacity-70" : ""]),
17897
+ class: normalizeClass(["webphone webphone-container wp:bg-white wp:dark:bg-neutral-800 wp:rounded-lg wp:shadow-sm wp:inset-shadow-2xs wp:w-[min(92vw,330px)] wp:fixed wp:z-50 wp:select-none wp:[&_button]:cursor-pointer wp:**:[[role=button]]:cursor-pointer", J.value ? "wp:opacity-70" : ""]),
17842
17898
  "data-mode": o.mode,
17843
17899
  "data-call-status": x.callStatus,
17844
- "data-network-status": Y.value ? "offline" : "online"
17900
+ "data-network-status": J.value ? "offline" : "online"
17845
17901
  }, [
17846
- q.value && !Q.value ? (openBlock(), createElementBlock("div", _hoisted_2, [createElementVNode("video", {
17902
+ q.value && !Z.value ? (openBlock(), createElementBlock("div", _hoisted_2, [createElementVNode("video", {
17847
17903
  ref_key: "remoteVideoRef",
17848
17904
  ref: F,
17849
17905
  autoplay: "",
@@ -17864,7 +17920,7 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17864
17920
  type: "button",
17865
17921
  role: "radio",
17866
17922
  "aria-checked": ym.value === e.value.toString(),
17867
- disabled: Y.value,
17923
+ disabled: J.value,
17868
17924
  title: `${e.label} (${unref(H)}${e.value + 1})`,
17869
17925
  class: normalizeClass(["webphone__channel-button wp:flex wp:items-center wp:gap-1 wp:px-2 wp:py-2 wp:rounded-lg wp:transition-colors wp:duration-200 wp:outline-none wp:focus-visible:ring-2 wp:focus-visible:ring-[var(--p-primary-color)] wp:focus-visible:ring-offset-2 wp:focus-visible:ring-offset-white wp:dark:focus-visible:ring-offset-neutral-900", xm(e.value) ? "wp:bg-status-hold/12 hover:wp:bg-status-hold/18" : bm(e.value) ? "wp:bg-[var(--color-red)]/12 hover:wp:bg-[var(--color-red)]/18" : ym.value === e.value.toString() ? "wp:bg-[var(--p-primary-color)]/12" : "wp:hover:bg-neutral-100 wp:dark:hover:bg-neutral-800/80"]),
17870
17926
  "data-channel-id": e.value,
@@ -17881,9 +17937,9 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17881
17937
  default: withCtx(() => [createVNode(unref(Button_default), {
17882
17938
  variant: "ghost",
17883
17939
  size: "icon",
17884
- class: normalizeClass(["wp:h-8 wp:w-8 wp:rounded-full", Q.value ? "wp:text-primary" : ""]),
17940
+ class: normalizeClass(["wp:h-8 wp:w-8 wp:rounded-full", Z.value ? "wp:text-primary" : ""]),
17885
17941
  title: "Picture-in-Picture",
17886
- onClick: tm
17942
+ onClick: nm
17887
17943
  }, {
17888
17944
  default: withCtx(() => [createVNode(unref(PictureInPicture2), { class: "wp:w-4 wp:h-4 wp:text-[var(--color-settings)]" })]),
17889
17945
  _: 1
@@ -17927,7 +17983,7 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17927
17983
  "channel-id": e.id,
17928
17984
  "allow-input": !U.value,
17929
17985
  "is-web-call": U.value,
17930
- "is-online": unref(J),
17986
+ "is-online": unref(Jp),
17931
17987
  contacts: o.contacts,
17932
17988
  user: o.extension,
17933
17989
  "mask-number": o.maskNumber
@@ -17946,15 +18002,15 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17946
18002
  }, [createVNode(KeyPad_default)], 10, _hoisted_10),
17947
18003
  createVNode(CallActions_default, {
17948
18004
  class: "webphone__actions",
17949
- style: normalizeStyle(Y.value ? "pointer-events: none;" : void 0),
18005
+ style: normalizeStyle(J.value ? "pointer-events: none;" : void 0),
17950
18006
  destination: U.value ? o.to : void 0,
17951
18007
  "is-video": o.mode === "video",
17952
18008
  "on-answer": o.onAnswer,
17953
18009
  "on-hangup": o.onHangup,
17954
18010
  "on-reject": o.onReject,
17955
18011
  onTransfer: t[1] ||= (e) => j.value = !0,
17956
- onCompleteTransfer: nm,
17957
- onCancelTransfer: rm
18012
+ onCompleteTransfer: rm,
18013
+ onCancelTransfer: im
17958
18014
  }, null, 8, [
17959
18015
  "style",
17960
18016
  "destination",
@@ -17964,7 +18020,7 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17964
18020
  "on-reject"
17965
18021
  ])
17966
18022
  ]),
17967
- Y.value ? (openBlock(), createElementBlock("div", _hoisted_11, [...t[10] ||= [createElementVNode("span", { class: "wp:text-sm wp:font-semibold wp:text-status-disconnected" }, "Sin internet", -1)]])) : createCommentVNode("", !0),
18023
+ J.value ? (openBlock(), createElementBlock("div", _hoisted_11, [...t[10] ||= [createElementVNode("span", { class: "wp:text-sm wp:font-semibold wp:text-status-disconnected" }, "Sin internet", -1)]])) : createCommentVNode("", !0),
17968
18024
  U.value ? (openBlock(), createElementBlock("div", _hoisted_12, [...t[11] ||= [createElementVNode("div", { class: "webphone__footer-label wp:text-[10px] wp:text-primary" }, "Powered By", -1), createElementVNode("div", { class: "webphone__footer-content wp:flex wp:items-center wp:gap-2" }, [createElementVNode("a", {
17969
18025
  href: "https://www.nebula123.com",
17970
18026
  target: "_blank",
@@ -17979,20 +18035,20 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
17979
18035
  visible: k.value,
17980
18036
  "onUpdate:visible": t[3] ||= (e) => k.value = e,
17981
18037
  contacts: o.contacts,
17982
- onCall: im
18038
+ onCall: am
17983
18039
  }, null, 8, ["visible", "contacts"]),
17984
18040
  createVNode(TransferDialog_default, {
17985
18041
  visible: j.value,
17986
18042
  "onUpdate:visible": t[4] ||= (e) => j.value = e,
17987
18043
  contacts: o.contacts,
17988
- onTransfer: $
18044
+ onTransfer: Q
17989
18045
  }, null, 8, ["visible", "contacts"]),
17990
18046
  createVNode(DocumentPip_default, {
17991
18047
  ref_key: "documentPipRef",
17992
- ref: Z,
17993
- active: Q.value,
17994
- "onUpdate:active": t[5] ||= (e) => Q.value = e,
17995
- "auto-open-on-blur": em.value,
18048
+ ref: Y,
18049
+ active: Z.value,
18050
+ "onUpdate:active": t[5] ||= (e) => Z.value = e,
18051
+ "auto-open-on-blur": tm.value,
17996
18052
  "is-connected": x.isConnected,
17997
18053
  "remote-number": qp.value,
17998
18054
  "caller-name": Kp.value,
@@ -18004,11 +18060,11 @@ var icon_phone_default = { render }, Tooltip_default = /* @__PURE__ */ defineCom
18004
18060
  "call-status": x.callStatus,
18005
18061
  "is-muted": x.isMuted,
18006
18062
  "is-held": x.isHeld,
18007
- onTransfer: cm,
18008
- onTransferRequest: $,
18009
- onHangup: om,
18010
- onReject: sm,
18011
- onAnswer: am,
18063
+ onTransfer: lm,
18064
+ onTransferRequest: Q,
18065
+ onHangup: sm,
18066
+ onReject: cm,
18067
+ onAnswer: om,
18012
18068
  onToggleMute: t[6] ||= (e) => unref(S).toggleMute(),
18013
18069
  onToggleHold: t[7] ||= (e) => unref(S).toggleHold()
18014
18070
  }, null, 8, [