customer-chat-sdk 1.1.19 → 1.1.20

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.
@@ -1 +1 @@
1
- {"version":3,"file":"CustomerSDK.d.ts","sourceRoot":"","sources":["../../src/core/CustomerSDK.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAKpC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,KAAK,CAAiB;;IAI9B;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C5C;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAM7B;;OAEG;IACH,mBAAmB,IAAI;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE;IAI7C;;OAEG;IACH,gBAAgB,CAAC,UAAU,GAAE,MAAM,GAAG,MAAU,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,IAAI;IAsB7G;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,OAAO,IAAI,IAAI;IAYf;;OAEG;YACW,WAAW;IA8BzB;;OAEG;IACH,OAAO,CAAC,cAAc;CAgCvB"}
1
+ {"version":3,"file":"CustomerSDK.d.ts","sourceRoot":"","sources":["../../src/core/CustomerSDK.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAKpC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,KAAK,CAAiB;;IAI9B;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C5C;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAM7B;;OAEG;IACH,mBAAmB,IAAI;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE;IAI7C;;OAEG;IACH,gBAAgB,CAAC,UAAU,GAAE,MAAM,GAAG,MAAU,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,IAAI;IAsB7G;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,OAAO,IAAI,IAAI;IAYf;;OAEG;YACW,WAAW;IA8BzB;;OAEG;IACH,OAAO,CAAC,cAAc;CAiCvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"IconManager.d.ts","sourceRoot":"","sources":["../../src/core/IconManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IconManager.d.ts","sourceRoot":"","sources":["../../src/core/IconManager.ts"],"names":[],"mappings":"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"}
@@ -626,23 +626,54 @@ class IconManager {
626
626
  return;
627
627
  const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;
628
628
  const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;
629
- // PC 模式下,如果 SDK iframe 打开,禁止拖动图标
630
- if (this.isSDKIframeOpen()) {
629
+ // PC 模式下,如果 SDK iframe 打开,禁止拖动图标,但允许点击
630
+ const isSDKOpen = this.isSDKIframeOpen();
631
+ if (isSDKOpen) {
631
632
  if (this.debug) {
632
- console.log('[IconManager] [PC+iframe] SDK iframe is open, icon dragging disabled');
633
+ console.log('[IconManager] [PC+iframe] SDK iframe is open, icon dragging disabled, but click is allowed');
634
+ }
635
+ // 虽然禁止拖动,但需要添加 mouseup 监听器以支持点击
636
+ // 记录点击开始时间和位置,用于后续判断是否是点击
637
+ this.touchStartTime = Date.now();
638
+ this.lastTouchPosition.x = clientX;
639
+ this.lastTouchPosition.y = clientY;
640
+ this.hasMoved = false;
641
+ this.dragIntent = false;
642
+ this.dragStarted = false;
643
+ this.isDragging = false;
644
+ // 添加 mouseup 监听器,用于检测点击
645
+ if (this.stopDragHandler) {
646
+ document.addEventListener('mouseup', this.stopDragHandler);
647
+ document.addEventListener('touchend', this.stopDragHandler);
633
648
  }
649
+ // 直接返回,不进行拖动相关操作
634
650
  return;
635
651
  }
636
- // PC 模式下,如果鼠标在任何 iframe 上(排除 SDK 自己的 iframe),禁止拖动图标
652
+ // PC 模式下,如果鼠标在任何 iframe 上(排除 SDK 自己的 iframe),禁止拖动图标,但允许点击
637
653
  const isPC = window.innerWidth > 768;
638
654
  if (isPC && this.isMouseOverIframe(clientX, clientY)) {
639
655
  if (this.debug) {
640
- console.log('[IconManager] [PC+iframe] Mouse is over iframe, icon dragging disabled', {
656
+ console.log('[IconManager] [PC+iframe] Mouse is over iframe, icon dragging disabled, but click is allowed', {
641
657
  clientX,
642
658
  clientY,
643
659
  isPC
644
660
  });
645
661
  }
662
+ // 虽然禁止拖动,但需要添加 mouseup 监听器以支持点击
663
+ // 记录点击开始时间和位置,用于后续判断是否是点击
664
+ this.touchStartTime = Date.now();
665
+ this.lastTouchPosition.x = clientX;
666
+ this.lastTouchPosition.y = clientY;
667
+ this.hasMoved = false;
668
+ this.dragIntent = false;
669
+ this.dragStarted = false;
670
+ this.isDragging = false;
671
+ // 添加 mouseup 监听器,用于检测点击
672
+ if (this.stopDragHandler) {
673
+ document.addEventListener('mouseup', this.stopDragHandler);
674
+ document.addEventListener('touchend', this.stopDragHandler);
675
+ }
676
+ // 直接返回,不进行拖动相关操作
646
677
  return;
647
678
  }
648
679
  // 清除自动吸附定时器(用户开始拖动)
@@ -1490,12 +1521,24 @@ class IconManager {
1490
1521
  }
1491
1522
  return;
1492
1523
  }
1493
- // 如果已经停止且没有相关资源,直接返回
1524
+ // 检查是否是点击(即使没有开始拖动,也可能是点击)
1525
+ // 如果 touchStartTime 有值,说明至少有一个 mousedown/touchstart 事件
1526
+ const hasTouchStart = this.touchStartTime > 0;
1527
+ const isPotentialClick = hasTouchStart && !this.isDragging && !this.dragStarted && !this.hasMoved;
1528
+ // 如果已经停止且没有相关资源,但可能是点击,仍然需要处理
1494
1529
  if (!this.isDragging && !this.dragStarted && !this.dragTimeoutId && !this.activeDetectionRafId) {
1495
- if (this.debug) {
1496
- console.warn('[IconManager] stopDrag called but not dragging, ignoring');
1530
+ // 如果是潜在的点击(SDK iframe 打开时的点击),继续处理;否则直接返回
1531
+ if (!isPotentialClick) {
1532
+ if (this.debug) {
1533
+ console.warn('[IconManager] stopDrag called but not dragging and not a click, ignoring');
1534
+ }
1535
+ // 清理可能残留的监听器
1536
+ if (this.stopDragHandler) {
1537
+ document.removeEventListener('mouseup', this.stopDragHandler);
1538
+ document.removeEventListener('touchend', this.stopDragHandler);
1539
+ }
1540
+ return;
1497
1541
  }
1498
- return;
1499
1542
  }
1500
1543
  this.isStoppingDrag = true;
1501
1544
  // 在 iframe 上时,如果 mouseup 事件存在,从事件中获取鼠标位置并更新图标位置
@@ -22646,7 +22689,7 @@ class CustomerServiceSDK {
22646
22689
  const initResult = {
22647
22690
  deviceId,
22648
22691
  iframeUrl,
22649
- referrer: config.referrer || document.referrer || document.location.href,
22692
+ referrer: this.getReferrer(config),
22650
22693
  agent: config.agent,
22651
22694
  timestamp: Date.now()
22652
22695
  };
@@ -23055,6 +23098,12 @@ class CustomerServiceSDK {
23055
23098
  }
23056
23099
  return positionChanged || targetChanged;
23057
23100
  }
23101
+ /**
23102
+ * 获取 referrer(统一获取逻辑)
23103
+ */
23104
+ getReferrer(config) {
23105
+ return config.referrer || document.referrer || document.location.href;
23106
+ }
23058
23107
  /**
23059
23108
  * 构建iframe URL(带用户参数和设备ID)
23060
23109
  */
@@ -23072,7 +23121,7 @@ class CustomerServiceSDK {
23072
23121
  url.searchParams.set('Authorization', config.token);
23073
23122
  }
23074
23123
  url.searchParams.set('DeviceSign', deviceId);
23075
- url.searchParams.set('Referrer', config.referrer || document.referrer || document.location.href);
23124
+ url.searchParams.set('Referrer', this.getReferrer(config));
23076
23125
  return url.toString();
23077
23126
  }
23078
23127
  }
@@ -622,23 +622,54 @@ class IconManager {
622
622
  return;
623
623
  const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;
624
624
  const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;
625
- // PC 模式下,如果 SDK iframe 打开,禁止拖动图标
626
- if (this.isSDKIframeOpen()) {
625
+ // PC 模式下,如果 SDK iframe 打开,禁止拖动图标,但允许点击
626
+ const isSDKOpen = this.isSDKIframeOpen();
627
+ if (isSDKOpen) {
627
628
  if (this.debug) {
628
- console.log('[IconManager] [PC+iframe] SDK iframe is open, icon dragging disabled');
629
+ console.log('[IconManager] [PC+iframe] SDK iframe is open, icon dragging disabled, but click is allowed');
630
+ }
631
+ // 虽然禁止拖动,但需要添加 mouseup 监听器以支持点击
632
+ // 记录点击开始时间和位置,用于后续判断是否是点击
633
+ this.touchStartTime = Date.now();
634
+ this.lastTouchPosition.x = clientX;
635
+ this.lastTouchPosition.y = clientY;
636
+ this.hasMoved = false;
637
+ this.dragIntent = false;
638
+ this.dragStarted = false;
639
+ this.isDragging = false;
640
+ // 添加 mouseup 监听器,用于检测点击
641
+ if (this.stopDragHandler) {
642
+ document.addEventListener('mouseup', this.stopDragHandler);
643
+ document.addEventListener('touchend', this.stopDragHandler);
629
644
  }
645
+ // 直接返回,不进行拖动相关操作
630
646
  return;
631
647
  }
632
- // PC 模式下,如果鼠标在任何 iframe 上(排除 SDK 自己的 iframe),禁止拖动图标
648
+ // PC 模式下,如果鼠标在任何 iframe 上(排除 SDK 自己的 iframe),禁止拖动图标,但允许点击
633
649
  const isPC = window.innerWidth > 768;
634
650
  if (isPC && this.isMouseOverIframe(clientX, clientY)) {
635
651
  if (this.debug) {
636
- console.log('[IconManager] [PC+iframe] Mouse is over iframe, icon dragging disabled', {
652
+ console.log('[IconManager] [PC+iframe] Mouse is over iframe, icon dragging disabled, but click is allowed', {
637
653
  clientX,
638
654
  clientY,
639
655
  isPC
640
656
  });
641
657
  }
658
+ // 虽然禁止拖动,但需要添加 mouseup 监听器以支持点击
659
+ // 记录点击开始时间和位置,用于后续判断是否是点击
660
+ this.touchStartTime = Date.now();
661
+ this.lastTouchPosition.x = clientX;
662
+ this.lastTouchPosition.y = clientY;
663
+ this.hasMoved = false;
664
+ this.dragIntent = false;
665
+ this.dragStarted = false;
666
+ this.isDragging = false;
667
+ // 添加 mouseup 监听器,用于检测点击
668
+ if (this.stopDragHandler) {
669
+ document.addEventListener('mouseup', this.stopDragHandler);
670
+ document.addEventListener('touchend', this.stopDragHandler);
671
+ }
672
+ // 直接返回,不进行拖动相关操作
642
673
  return;
643
674
  }
644
675
  // 清除自动吸附定时器(用户开始拖动)
@@ -1486,12 +1517,24 @@ class IconManager {
1486
1517
  }
1487
1518
  return;
1488
1519
  }
1489
- // 如果已经停止且没有相关资源,直接返回
1520
+ // 检查是否是点击(即使没有开始拖动,也可能是点击)
1521
+ // 如果 touchStartTime 有值,说明至少有一个 mousedown/touchstart 事件
1522
+ const hasTouchStart = this.touchStartTime > 0;
1523
+ const isPotentialClick = hasTouchStart && !this.isDragging && !this.dragStarted && !this.hasMoved;
1524
+ // 如果已经停止且没有相关资源,但可能是点击,仍然需要处理
1490
1525
  if (!this.isDragging && !this.dragStarted && !this.dragTimeoutId && !this.activeDetectionRafId) {
1491
- if (this.debug) {
1492
- console.warn('[IconManager] stopDrag called but not dragging, ignoring');
1526
+ // 如果是潜在的点击(SDK iframe 打开时的点击),继续处理;否则直接返回
1527
+ if (!isPotentialClick) {
1528
+ if (this.debug) {
1529
+ console.warn('[IconManager] stopDrag called but not dragging and not a click, ignoring');
1530
+ }
1531
+ // 清理可能残留的监听器
1532
+ if (this.stopDragHandler) {
1533
+ document.removeEventListener('mouseup', this.stopDragHandler);
1534
+ document.removeEventListener('touchend', this.stopDragHandler);
1535
+ }
1536
+ return;
1493
1537
  }
1494
- return;
1495
1538
  }
1496
1539
  this.isStoppingDrag = true;
1497
1540
  // 在 iframe 上时,如果 mouseup 事件存在,从事件中获取鼠标位置并更新图标位置
@@ -22642,7 +22685,7 @@ class CustomerServiceSDK {
22642
22685
  const initResult = {
22643
22686
  deviceId,
22644
22687
  iframeUrl,
22645
- referrer: config.referrer || document.referrer || document.location.href,
22688
+ referrer: this.getReferrer(config),
22646
22689
  agent: config.agent,
22647
22690
  timestamp: Date.now()
22648
22691
  };
@@ -23051,6 +23094,12 @@ class CustomerServiceSDK {
23051
23094
  }
23052
23095
  return positionChanged || targetChanged;
23053
23096
  }
23097
+ /**
23098
+ * 获取 referrer(统一获取逻辑)
23099
+ */
23100
+ getReferrer(config) {
23101
+ return config.referrer || document.referrer || document.location.href;
23102
+ }
23054
23103
  /**
23055
23104
  * 构建iframe URL(带用户参数和设备ID)
23056
23105
  */
@@ -23068,7 +23117,7 @@ class CustomerServiceSDK {
23068
23117
  url.searchParams.set('Authorization', config.token);
23069
23118
  }
23070
23119
  url.searchParams.set('DeviceSign', deviceId);
23071
- url.searchParams.set('Referrer', config.referrer || document.referrer || document.location.href);
23120
+ url.searchParams.set('Referrer', this.getReferrer(config));
23072
23121
  return url.toString();
23073
23122
  }
23074
23123
  }