@product7/product7-js 0.3.9 → 0.4.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.
@@ -3019,7 +3019,7 @@
3019
3019
  --msg-bg-hover: #F9FAFB;
3020
3020
  --msg-bg-input: rgba(255, 255, 255, 0.7);
3021
3021
  --msg-bg-bubble-own: #F3F4F6;
3022
- --msg-bg-bubble-received: rgba(21, 94, 239, 0.06);
3022
+ --msg-bg-bubble-received: #155EEF;
3023
3023
  --msg-bg-header-gradient: linear-gradient(180deg, #e0e7ff 0%, #f0f4ff 35%, #FFFFFF 65%);
3024
3024
  --msg-bg-header-glow1: radial-gradient(circle, rgba(21, 94, 239, 0.08) 0%, transparent 70%);
3025
3025
  --msg-bg-header-glow2: radial-gradient(circle, rgba(139, 92, 246, 0.05) 0%, transparent 70%);
@@ -3551,13 +3551,13 @@
3551
3551
 
3552
3552
  .messenger-message-own .messenger-message-bubble {
3553
3553
  background: var(--msg-bg-bubble-own);
3554
- color: var(--msg-text);
3554
+ color: #111827;
3555
3555
  border-bottom-right-radius: 0.25rem;
3556
3556
  }
3557
3557
 
3558
3558
  .messenger-message-received .messenger-message-bubble {
3559
3559
  background: var(--msg-bg-bubble-received);
3560
- color: var(--msg-text);
3560
+ color: #ffffff;
3561
3561
  border-bottom-left-radius: 0.25rem;
3562
3562
  }
3563
3563
 
@@ -4456,7 +4456,7 @@
4456
4456
  --msg-bg-hover: #232930;
4457
4457
  --msg-bg-input: #1a1e24;
4458
4458
  --msg-bg-bubble-own: #1e2330;
4459
- --msg-bg-bubble-received: rgba(21, 94, 239, 0.12);
4459
+ --msg-bg-bubble-received: #1D4ED8;
4460
4460
  --msg-bg-header-gradient: linear-gradient(180deg, #1a1e2e 0%, #141720 50%, #0f1317 100%);
4461
4461
  --msg-bg-header-glow1: radial-gradient(circle, rgba(21, 94, 239, 0.07) 0%, transparent 70%);
4462
4462
  --msg-bg-header-glow2: radial-gradient(circle, rgba(139, 92, 246, 0.05) 0%, transparent 70%);
@@ -8261,6 +8261,149 @@
8261
8261
  }
8262
8262
  }
8263
8263
 
8264
+ var BUNDLED_SOUND = "data:audio/mpeg;base64,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BeaJKOtqtegdfu08KKta9TmppaKVKbNRgAAdr/tXGB6CSCPl1Lelt7XW7T01ifVk2zjE1bLW839346gs//uAZPGAAtMh2Hn4GlhT52rfPeJdDAirVe28aaE2Dmr9tY0siLho4mUCDpWMFgQGgu42pLnLawWb/bpWNprQxluj9TNaXJSgOIMS1KzM0TRIAAAABFakEh3cgBQEGVwwSAstoCBiYpGhkVAplAwJmPAkYLCBkEDgYHpEhgdJRk+AeYkqaA6eReiyrxNIvmnxxStER14EjE2/9hljaO2siCoAhzKnpuRt269O0veD7Pq/uNbdzt6jfydzch/Kkpf1/dcqV6ta/y3Y1MWIft8iMqtZzUahrWPO71nqvG43fsROXu5Y3KZJGnRZbEH1clnOWX//OZ/+2WTnxeAH4ZfTSxQdl7ovLbXkoM0tW5UzXqqe3b9bPWP/+H7q59vrHa/P1WVuvIHDdeijc/LKqG114l3Joq5VSQSsRUcUBhEnmWs49v5f///////////////y/mff///////////////3Ad21LEZyZxNSU0SUaZb/+8Bk6AADBiBVfWGgCEbieq+nmAEjzhFJ+cyQBEdCKT85gkCgwCAAAAA6AP0AywXlGoy0hpYVBKCMGkNVAtKWyXWFQkQg10C3jJ4dCWsMS6ezji0j3yF6W6MVa5lLJbaXvIFSNMi8Vdp4aejr0kYgJ/IpLXJpq0lmN4S38scPty+3K4brc1En1pL+vzx/k/bwt3IYllNldscl0R/HlzH9/zJ2IEd+3kzt34vWlVWVWqbn5Z/njz8O/+aXAXCHDZovNNc0AZypebBMlXypavJwV2u4yFL1vG4qA//93+9d/ff/Fg5dCKWEFHZcd41TwOim499QNk7qNZnHhm2uvA4NA5XIelTssq//5////////////////KFL24Op////////////////I3ifN9VM55RBBXv+tQAA8aAYzpLaSOxTi1EgJ6SJFPyUphVqcwGS1LvW/Hx+27zX1/f7Y2w5rdPTwuJkLERYGnMZHg0LksCgqGoKvEWkqYTKtOnRLvoGgFPadXgqdiKxbu2ws92sNCIOHN0xkAtG+saAAuK4rNZxyl0v8x2rfuXaCm7ruwZLSEFAQkKru7B2WMZy0qeUZjNZr5eXDP+8VVSOR/5cly6S3120bi5SXY5P/1/U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";
8265
+
8266
+ /**
8267
+ * NotificationSound — plays a soft ping when a new agent message arrives.
8268
+ *
8269
+ * Default: the bundled notification-sound.mp3 (inlined as base64 at build time).
8270
+ * Falls back to a Web Audio API synthetic chime if the file was not bundled.
8271
+ * Override: pass `soundUrl` (MP3/OGG/WAV URL or base64 data URI) to use a different file.
8272
+ */
8273
+
8274
+ class NotificationSound {
8275
+ constructor({ soundUrl = BUNDLED_SOUND, volume = 0.4 } = {}) {
8276
+ this._soundUrl = soundUrl;
8277
+ this._volume = Math.min(1, Math.max(0, volume));
8278
+ this._enabled = true;
8279
+ this._audioCtx = null;
8280
+ this._audioBuffer = null;
8281
+ this._loadPromise = null;
8282
+
8283
+ if (soundUrl) {
8284
+ this._loadPromise = this._loadAudioFile(soundUrl);
8285
+ }
8286
+ }
8287
+
8288
+ setEnabled(enabled) {
8289
+ this._enabled = Boolean(enabled);
8290
+ }
8291
+
8292
+ setVolume(volume) {
8293
+ this._volume = Math.min(1, Math.max(0, volume));
8294
+ }
8295
+
8296
+ async play() {
8297
+ if (!this._enabled) return;
8298
+ if (typeof window === 'undefined') return;
8299
+
8300
+ try {
8301
+ if (this._soundUrl) {
8302
+ await this._playFile();
8303
+ } else {
8304
+ this._playSynthetic();
8305
+ }
8306
+ } catch {
8307
+ /* autoplay policy or context suspended — silent fail */
8308
+ }
8309
+ }
8310
+
8311
+ // ── Private ────────────────────────────────────────────────────────────────
8312
+
8313
+ _getAudioContext() {
8314
+ if (!this._audioCtx || this._audioCtx.state === 'closed') {
8315
+ const AudioContext = window.AudioContext || window.webkitAudioContext;
8316
+ if (!AudioContext) return null;
8317
+ this._audioCtx = new AudioContext();
8318
+ }
8319
+ return this._audioCtx;
8320
+ }
8321
+
8322
+ /**
8323
+ * Synthetic two-tone chime via Web Audio API — no file required.
8324
+ * • First tone: 880 Hz, 0–80 ms
8325
+ * • Second tone: 1100 Hz, 60–160 ms
8326
+ * Sounds like a gentle message ping.
8327
+ */
8328
+ _playSynthetic() {
8329
+ const ctx = this._getAudioContext();
8330
+ if (!ctx) return;
8331
+
8332
+ if (ctx.state === 'suspended') {
8333
+ ctx.resume().catch(() => {});
8334
+ }
8335
+
8336
+ const now = ctx.currentTime;
8337
+ const vol = this._volume;
8338
+
8339
+ const tones = [
8340
+ { freq: 880, start: 0, end: 0.08 },
8341
+ { freq: 1100, start: 0.06, end: 0.16 },
8342
+ ];
8343
+
8344
+ tones.forEach(({ freq, start, end }) => {
8345
+ const osc = ctx.createOscillator();
8346
+ const gain = ctx.createGain();
8347
+
8348
+ osc.type = 'sine';
8349
+ osc.frequency.value = freq;
8350
+
8351
+ gain.gain.setValueAtTime(0, now + start);
8352
+ gain.gain.linearRampToValueAtTime(vol, now + start + 0.01);
8353
+ gain.gain.linearRampToValueAtTime(0, now + end);
8354
+
8355
+ osc.connect(gain);
8356
+ gain.connect(ctx.destination);
8357
+
8358
+ osc.start(now + start);
8359
+ osc.stop(now + end + 0.01);
8360
+ });
8361
+ }
8362
+
8363
+ async _loadAudioFile(url) {
8364
+ try {
8365
+ const ctx = this._getAudioContext();
8366
+ if (!ctx) return;
8367
+
8368
+ const response = await fetch(url);
8369
+ const arrayBuffer = await response.arrayBuffer();
8370
+ this._audioBuffer = await ctx.decodeAudioData(arrayBuffer);
8371
+ } catch {
8372
+ /* failed to load — fall back to synthetic */
8373
+ this._soundUrl = null;
8374
+ }
8375
+ }
8376
+
8377
+ async _playFile() {
8378
+ if (this._loadPromise) {
8379
+ await this._loadPromise;
8380
+ this._loadPromise = null;
8381
+ }
8382
+
8383
+ if (!this._audioBuffer) {
8384
+ this._playSynthetic();
8385
+ return;
8386
+ }
8387
+
8388
+ const ctx = this._getAudioContext();
8389
+ if (!ctx) return;
8390
+
8391
+ if (ctx.state === 'suspended') {
8392
+ await ctx.resume();
8393
+ }
8394
+
8395
+ const source = ctx.createBufferSource();
8396
+ const gain = ctx.createGain();
8397
+
8398
+ source.buffer = this._audioBuffer;
8399
+ gain.gain.value = this._volume;
8400
+
8401
+ source.connect(gain);
8402
+ gain.connect(ctx.destination);
8403
+ source.start();
8404
+ }
8405
+ }
8406
+
8264
8407
  /**
8265
8408
  * WebSocketService - Real-time communication for messenger widget
8266
8409
  */
@@ -9802,9 +9945,25 @@
9802
9945
  `;
9803
9946
  }
9804
9947
 
9948
+ // Render automated/bot messages as a proper received chat bubble
9949
+ const teamName = this.state.teamName || 'Support';
9950
+ const logoUrl = this.options.logoUrl;
9951
+ const avatarHtml = logoUrl
9952
+ ? `<div class="sdk-avatar sdk-avatar-sm"><img src="${this._escapeHtml(logoUrl)}" alt="${this._escapeHtml(teamName)}" /></div>`
9953
+ : `<div class="sdk-avatar sdk-avatar-sm">${teamName.charAt(0).toUpperCase()}</div>`;
9954
+ const timeStr = this._formatMessageTime(message.timestamp);
9955
+
9805
9956
  return `
9806
- <div class="messenger-message-system">
9807
- <span class="messenger-message-system-text">${this._escapeHtml(content)}</span>
9957
+ <div class="messenger-message messenger-message-received">
9958
+ <div class="messenger-message-row">
9959
+ <div class="messenger-message-avatar">${avatarHtml}</div>
9960
+ <div class="messenger-message-wrapper">
9961
+ <div class="messenger-message-bubble">
9962
+ <div class="messenger-message-content">${this._formatMessageContent(content)}</div>
9963
+ </div>
9964
+ </div>
9965
+ </div>
9966
+ ${timeStr ? `<div class="messenger-message-meta"><span>${timeStr}</span></div>` : ''}
9808
9967
  </div>
9809
9968
  `;
9810
9969
  }
@@ -11365,6 +11524,19 @@
11365
11524
  this._wsUnsubscribers = [];
11366
11525
  this._feedbackWidget = null;
11367
11526
 
11527
+ const notificationSoundOption = options.notificationSound !== undefined
11528
+ ? options.notificationSound
11529
+ : true;
11530
+
11531
+ this._notificationSound = new NotificationSound({
11532
+ soundUrl: typeof notificationSoundOption === 'string' ? notificationSoundOption : null,
11533
+ volume: options.notificationVolume ?? 0.4,
11534
+ });
11535
+
11536
+ if (notificationSoundOption === false) {
11537
+ this._notificationSound.setEnabled(false);
11538
+ }
11539
+
11368
11540
  this._handleOpenChange = this._handleOpenChange.bind(this);
11369
11541
  this._handleWebSocketMessage = this._handleWebSocketMessage.bind(this);
11370
11542
  this._handleTypingStarted = this._handleTypingStarted.bind(this);
@@ -11689,6 +11861,18 @@
11689
11861
  optimisticMatchWindowMs: 30000,
11690
11862
  });
11691
11863
 
11864
+ const isOwnMessage = message.sender_type === 'customer';
11865
+
11866
+ if (!isOwnMessage) {
11867
+ const panelOpenOnThisConversation =
11868
+ this.messengerState.isOpen &&
11869
+ this.messengerState.activeConversationId === conversation_id;
11870
+
11871
+ if (!panelOpenOnThisConversation) {
11872
+ this._notificationSound.play();
11873
+ }
11874
+ }
11875
+
11692
11876
  if (
11693
11877
  !this.messengerState.isOpen ||
11694
11878
  this.messengerState.activeConversationId !== conversation_id