@product7/product7-js 0.3.0 → 0.3.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@product7/product7-js",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "JavaScript SDK for integrating Product7 feedback widgets into any website",
5
5
  "main": "dist/product7-js.js",
6
6
  "module": "src/index.js",
@@ -136,6 +136,11 @@ export const componentsStyles = `
136
136
  transition-duration: 100ms;
137
137
  }
138
138
 
139
+ .sdk-btn-icon:focus-visible {
140
+ outline: 2px solid var(--color-primary);
141
+ outline-offset: 2px;
142
+ }
143
+
139
144
  .sdk-input {
140
145
  width: 100%;
141
146
  height: 40px;
@@ -7,7 +7,7 @@ export const messengerComponentsStyles = `
7
7
  .messenger-message {
8
8
  display: flex;
9
9
  gap: var(--spacing-2);
10
- max-width: 85%;
10
+ max-width: 75%;
11
11
  }
12
12
 
13
13
  .messenger-message-system {
@@ -28,11 +28,11 @@ export const messengerComponentsStyles = `
28
28
  }
29
29
 
30
30
  .messenger-message-system-text {
31
- font-size: 0.6875rem;
32
- color: var(--msg-text-tertiary);
31
+ font-size: 0.875rem;
32
+ font-weight: 500;
33
+ color: var(--msg-text-secondary);
33
34
  white-space: nowrap;
34
35
  padding: 0 var(--spacing-2);
35
- letter-spacing: 0.01em;
36
36
  }
37
37
 
38
38
  /* Rich join/leave system event */
@@ -41,8 +41,8 @@ export const messengerComponentsStyles = `
41
41
  display: flex;
42
42
  flex-direction: column;
43
43
  align-items: center;
44
- gap: var(--spacing-2);
45
- padding: var(--spacing-4) 0;
44
+ gap: 4px;
45
+ padding: var(--spacing-3) 0;
46
46
  width: 100%;
47
47
  text-align: center;
48
48
  }
@@ -51,21 +51,23 @@ export const messengerComponentsStyles = `
51
51
  width: 3rem;
52
52
  height: 3rem;
53
53
  border-radius: var(--radius-full);
54
- border: 2px solid var(--msg-border);
54
+ border: 1px solid var(--msg-border);
55
+ background: var(--msg-bg);
55
56
  display: flex;
56
57
  align-items: center;
57
58
  justify-content: center;
58
59
  font-size: 1.125rem;
59
60
  font-weight: var(--font-weight-semibold);
60
- color: #ffffff;
61
+ color: var(--msg-text);
61
62
  overflow: hidden;
62
63
  flex-shrink: 0;
64
+ margin-bottom: 4px;
63
65
  }
64
66
 
65
67
  .messenger-message-system-event-avatar img {
66
- width: 100%;
67
- height: 100%;
68
- object-fit: cover;
68
+ width: 60%;
69
+ height: 60%;
70
+ object-fit: contain;
69
71
  }
70
72
 
71
73
  .messenger-message-system-event-name {
@@ -172,6 +174,14 @@ export const messengerComponentsStyles = `
172
174
  justify-content: flex-end;
173
175
  }
174
176
 
177
+ .messenger-message-sent-status {
178
+ color: var(--msg-text-muted);
179
+ }
180
+
181
+ .messenger-message-optimistic .messenger-message-bubble {
182
+ opacity: 0.7;
183
+ }
184
+
175
185
  .messenger-message-image {
176
186
  max-width: 220px;
177
187
  max-height: 200px;
@@ -229,6 +239,48 @@ export const messengerComponentsStyles = `
229
239
  font-weight: var(--font-weight-medium);
230
240
  }
231
241
 
242
+ /* ========================================
243
+ SCROLL PILL & CONNECTION BANNER
244
+ ======================================== */
245
+
246
+ .messenger-scroll-pill {
247
+ position: absolute;
248
+ bottom: 80px;
249
+ left: 50%;
250
+ transform: translateX(-50%);
251
+ display: flex;
252
+ align-items: center;
253
+ gap: var(--spacing-1);
254
+ padding: 6px 14px;
255
+ background: var(--color-primary);
256
+ color: #ffffff;
257
+ font-size: var(--font-size-xs);
258
+ font-weight: 500;
259
+ border-radius: var(--radius-full);
260
+ cursor: pointer;
261
+ box-shadow: var(--shadow-lg);
262
+ z-index: 10;
263
+ white-space: nowrap;
264
+ }
265
+
266
+ .messenger-connection-banner {
267
+ display: flex;
268
+ align-items: center;
269
+ justify-content: center;
270
+ gap: var(--spacing-2);
271
+ padding: 6px var(--spacing-4);
272
+ background: #fef3c7;
273
+ color: #92400e;
274
+ font-size: var(--font-size-xs);
275
+ font-weight: 500;
276
+ flex-shrink: 0;
277
+ }
278
+
279
+ .messenger-widget.theme-dark .messenger-connection-banner {
280
+ background: rgba(245, 158, 11, 0.15);
281
+ color: #fbbf24;
282
+ }
283
+
232
284
  /* ========================================
233
285
  CHAT HEADER
234
286
  ======================================== */
@@ -245,18 +297,20 @@ export const messengerComponentsStyles = `
245
297
  width: 2.25rem;
246
298
  height: 2.25rem;
247
299
  border-radius: var(--radius-lg);
248
- background: var(--color-neutral-100);
300
+ background: var(--msg-bg-surface);
301
+ border: 1px solid var(--msg-border);
249
302
  display: flex;
250
303
  align-items: center;
251
304
  justify-content: center;
252
305
  flex-shrink: 0;
253
306
  overflow: hidden;
307
+ padding: 4px;
254
308
  }
255
309
 
256
310
  .messenger-chat-header-avatar img {
257
311
  width: 100%;
258
312
  height: 100%;
259
- object-fit: cover;
313
+ object-fit: contain;
260
314
  }
261
315
 
262
316
  .messenger-chat-header-avatar svg {
@@ -316,6 +370,24 @@ export const messengerComponentsStyles = `
316
370
  margin-bottom: var(--spacing-4);
317
371
  }
318
372
 
373
+ .messenger-chat-empty-logo {
374
+ width: 48px;
375
+ height: 48px;
376
+ border-radius: var(--radius-xl);
377
+ overflow: hidden;
378
+ margin-bottom: var(--spacing-4);
379
+ display: flex;
380
+ align-items: center;
381
+ justify-content: center;
382
+ background: var(--msg-bg-surface);
383
+ }
384
+
385
+ .messenger-chat-empty-logo img {
386
+ width: 100%;
387
+ height: 100%;
388
+ object-fit: contain;
389
+ }
390
+
319
391
  .messenger-chat-empty h3 {
320
392
  margin: 0 0 var(--spacing-2);
321
393
  font-size: var(--font-size-base);
@@ -323,12 +395,6 @@ export const messengerComponentsStyles = `
323
395
  color: var(--msg-text);
324
396
  }
325
397
 
326
- .messenger-chat-empty p {
327
- margin: 0;
328
- font-size: var(--font-size-base);
329
- color: var(--msg-text-secondary);
330
- max-width: 240px;
331
- }
332
398
 
333
399
  /* ========================================
334
400
  COMPOSE AREA
@@ -409,6 +475,15 @@ export const messengerComponentsStyles = `
409
475
  color: var(--msg-text-tertiary);
410
476
  }
411
477
 
478
+ .messenger-compose-input:focus {
479
+ outline: none;
480
+ }
481
+
482
+ .messenger-chat-compose:focus-within {
483
+ border-color: var(--color-primary-border);
484
+ box-shadow: 0 0 0 3px var(--color-primary-light);
485
+ }
486
+
412
487
  .messenger-compose-bottom {
413
488
  display: flex;
414
489
  align-items: center;
@@ -131,6 +131,7 @@ export const messengerCoreStyles = `
131
131
  display: flex;
132
132
  flex-direction: column;
133
133
  overflow: hidden;
134
+ position: relative;
134
135
  }
135
136
 
136
137
  .messenger-avatar-stack {
@@ -85,6 +85,10 @@ export const messengerViewsStyles = `
85
85
  margin-left: var(--spacing-4);
86
86
  }
87
87
 
88
+ .messenger-home-avatars:empty {
89
+ display: none;
90
+ }
91
+
88
92
  .messenger-home-welcome {
89
93
  display: flex;
90
94
  flex-direction: column;
@@ -94,17 +98,19 @@ export const messengerViewsStyles = `
94
98
  }
95
99
 
96
100
  .messenger-home-greeting {
97
- font-size: 34px;
101
+ font-size: clamp(22px, 8vw, 34px);
98
102
  font-weight: var(--font-weight-bold);
99
103
  color: var(--msg-text);
100
104
  line-height: var(--line-height-tight);
105
+ word-break: break-word;
101
106
  }
102
107
 
103
108
  .messenger-home-question {
104
- font-size: 28px;
109
+ font-size: clamp(18px, 6.5vw, 28px);
105
110
  font-weight: var(--font-weight-bold);
106
111
  color: var(--msg-text);
107
112
  line-height: var(--line-height-tight);
113
+ word-break: break-word;
108
114
  }
109
115
 
110
116
  .messenger-home-body {
@@ -114,6 +120,112 @@ export const messengerViewsStyles = `
114
120
  z-index: 2;
115
121
  }
116
122
 
123
+ .messenger-home-recent-card {
124
+ background: var(--msg-bg);
125
+ border: 1px solid var(--msg-border);
126
+ border-radius: 10px;
127
+ padding: var(--spacing-3) var(--spacing-4);
128
+ margin-bottom: var(--spacing-2);
129
+ cursor: pointer;
130
+ transition: background var(--transition-base);
131
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
132
+ }
133
+
134
+ .messenger-home-recent-card:hover {
135
+ background: var(--msg-bg-hover);
136
+ }
137
+
138
+ .messenger-home-recent-card-label {
139
+ font-size: 0.875rem;
140
+ font-weight: 600;
141
+ color: var(--msg-text-tertiary);
142
+ margin-bottom: var(--spacing-2);
143
+ }
144
+
145
+ .messenger-home-recent-card-row {
146
+ display: flex;
147
+ align-items: center;
148
+ gap: var(--spacing-3);
149
+ }
150
+
151
+ .messenger-home-recent-avatar {
152
+ width: 36px;
153
+ height: 36px;
154
+ border-radius: var(--radius-full);
155
+ flex-shrink: 0;
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ font-size: var(--font-size-sm);
160
+ font-weight: var(--font-weight-semibold);
161
+ color: #ffffff;
162
+ overflow: hidden;
163
+ }
164
+
165
+ .messenger-home-recent-avatar img {
166
+ width: 100%;
167
+ height: 100%;
168
+ object-fit: cover;
169
+ }
170
+
171
+ .messenger-home-recent-avatar-logo {
172
+ background: var(--msg-bg-surface);
173
+ border: 1px solid var(--msg-border);
174
+ padding: 4px;
175
+ }
176
+
177
+ .messenger-home-recent-avatar-logo img {
178
+ object-fit: contain;
179
+ }
180
+
181
+ .messenger-home-recent-card-content {
182
+ flex: 1;
183
+ min-width: 0;
184
+ }
185
+
186
+ .messenger-home-recent-card-header {
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: space-between;
190
+ gap: var(--spacing-2);
191
+ margin-bottom: 2px;
192
+ }
193
+
194
+ .messenger-home-recent-card-name {
195
+ font-size: var(--font-size-sm);
196
+ font-weight: var(--font-weight-semibold);
197
+ color: var(--msg-text);
198
+ }
199
+
200
+ .messenger-home-recent-card-time {
201
+ font-size: var(--font-size-xs);
202
+ color: var(--msg-text-tertiary);
203
+ flex-shrink: 0;
204
+ }
205
+
206
+ .messenger-home-recent-card-preview {
207
+ display: flex;
208
+ align-items: center;
209
+ justify-content: space-between;
210
+ gap: var(--spacing-2);
211
+ }
212
+
213
+ .messenger-home-recent-card-message {
214
+ font-size: var(--font-size-sm);
215
+ color: var(--msg-text-secondary);
216
+ white-space: nowrap;
217
+ overflow: hidden;
218
+ text-overflow: ellipsis;
219
+ }
220
+
221
+ .messenger-home-recent-unread-dot {
222
+ width: 8px;
223
+ height: 8px;
224
+ border-radius: var(--radius-full);
225
+ background: var(--color-primary);
226
+ flex-shrink: 0;
227
+ }
228
+
117
229
  .messenger-home-message-btn {
118
230
  width: 100%;
119
231
  display: flex;
@@ -134,13 +246,11 @@ export const messengerViewsStyles = `
134
246
  }
135
247
 
136
248
  .messenger-home-message-btn:hover {
137
- background: var(--msg-bg-elevated);
138
- transform: translateX(4px);
139
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
249
+ background: var(--msg-bg-hover);
140
250
  }
141
251
 
142
252
  .messenger-home-message-btn:active {
143
- transform: translateX(4px) translateY(1px);
253
+ transform: translateY(1px);
144
254
  transition-duration: 100ms;
145
255
  }
146
256
 
@@ -158,14 +268,21 @@ export const messengerViewsStyles = `
158
268
  .messenger-home-continue-info {
159
269
  display: flex;
160
270
  flex-direction: column;
161
- gap: var(--spacing-1);
271
+ gap: 2px;
162
272
  text-align: left;
163
273
  flex: 1;
164
274
  }
165
275
 
166
276
  .messenger-home-continue-label {
167
- font-size: var(--font-size-base);
168
- font-weight: var(--font-weight-normal);
277
+ font-size: 0.875rem;
278
+ font-weight: var(--font-weight-semibold);
279
+ color: var(--msg-text);
280
+ }
281
+
282
+ .messenger-home-message-subtext {
283
+ font-size: var(--font-size-xs);
284
+ font-weight: 400;
285
+ color: var(--msg-text-secondary);
169
286
  }
170
287
 
171
288
  .messenger-home-continue-preview {
@@ -308,6 +425,8 @@ export const messengerViewsStyles = `
308
425
  height: 8px;
309
426
  border-radius: var(--radius-full);
310
427
  flex-shrink: 0;
428
+ align-self: center;
429
+ display: block;
311
430
  }
312
431
 
313
432
  .messenger-availability-online {
@@ -364,7 +483,7 @@ export const messengerViewsStyles = `
364
483
 
365
484
  .messenger-conversation-item {
366
485
  display: flex;
367
- align-items: flex-start;
486
+ align-items: center;
368
487
  gap: var(--spacing-3);
369
488
  padding: 10px var(--spacing-4);
370
489
  cursor: pointer;
@@ -382,31 +501,40 @@ export const messengerViewsStyles = `
382
501
 
383
502
  .messenger-conversation-avatars {
384
503
  flex-shrink: 0;
504
+ display: flex;
505
+ align-items: center;
506
+ align-self: stretch;
385
507
  }
386
508
 
387
509
  .messenger-conversation-content {
388
510
  flex: 1;
389
511
  min-width: 0;
512
+ display: flex;
513
+ flex-direction: column;
514
+ justify-content: center;
390
515
  }
391
516
 
392
517
  .messenger-conversation-header {
393
518
  display: flex;
394
519
  align-items: center;
395
520
  justify-content: space-between;
396
- margin-bottom: var(--spacing-1);
521
+ margin-bottom: 2px;
397
522
  gap: var(--spacing-3);
398
523
  }
399
524
 
400
525
  .messenger-conversation-title {
401
- font-size: var(--font-size-md);
402
- font-weight: var(--font-weight-medium);
526
+ font-size: var(--font-size-sm);
527
+ font-weight: var(--font-weight-semibold);
403
528
  color: var(--msg-text);
404
- line-height: var(--line-height-snug);
529
+ line-height: 1.4;
530
+ white-space: nowrap;
531
+ overflow: hidden;
532
+ text-overflow: ellipsis;
405
533
  }
406
534
 
407
535
  .messenger-conversation-time {
408
536
  font-size: var(--font-size-sm);
409
- color: var(--msg-text-secondary);
537
+ color: var(--msg-text-tertiary);
410
538
  flex-shrink: 0;
411
539
  }
412
540
 
@@ -417,18 +545,18 @@ export const messengerViewsStyles = `
417
545
  }
418
546
 
419
547
  .messenger-conversation-message {
420
- font-size: var(--font-size-base);
421
- font-weight: var(--font-weight-normal);
422
- color: var(--msg-text-tertiary);
548
+ font-size: var(--font-size-sm);
549
+ font-weight: 400;
550
+ color: var(--msg-text-secondary);
423
551
  white-space: nowrap;
424
552
  overflow: hidden;
425
553
  text-overflow: ellipsis;
426
- line-height: var(--line-height-normal);
554
+ line-height: 1.4;
427
555
  }
428
556
 
429
557
  .messenger-conversation-item.unread .messenger-conversation-message {
430
558
  color: var(--msg-text);
431
- font-weight: var(--font-weight-medium);
559
+ font-weight: 500;
432
560
  }
433
561
 
434
562
  .messenger-unread-dot {
@@ -439,35 +567,44 @@ export const messengerViewsStyles = `
439
567
  flex-shrink: 0;
440
568
  }
441
569
 
570
+ .messenger-conversation-item.closed .messenger-conversation-title,
571
+ .messenger-conversation-item.closed .messenger-conversation-message {
572
+ color: var(--msg-text-tertiary);
573
+ }
574
+
575
+ .messenger-conversation-resolved-badge {
576
+ font-size: 0.6875rem;
577
+ font-weight: 500;
578
+ color: var(--color-success-dark);
579
+ background: var(--color-success-light);
580
+ border-radius: var(--radius-full);
581
+ padding: 1px 7px;
582
+ flex-shrink: 0;
583
+ }
584
+
442
585
  .messenger-conversations-footer {
443
- padding: var(--spacing-4);
444
- border-top: none;
586
+ border-top: 1px solid var(--msg-border);
445
587
  }
446
588
 
447
589
  .messenger-new-message-btn {
448
- max-width: 220px;
449
- margin: 0 auto;
590
+ width: 100%;
450
591
  display: flex;
451
592
  align-items: center;
452
- justify-content: space-between;
453
- gap: var(--spacing-2);
454
- padding: var(--spacing-3) var(--spacing-4);
455
- background: var(--msg-bg);
593
+ gap: var(--spacing-3);
594
+ padding: 12px var(--spacing-4);
595
+ background: transparent;
456
596
  border: none;
457
- border-radius: var(--radius-xl);
458
597
  color: var(--msg-text);
459
- font-size: var(--font-size-base);
598
+ font-size: var(--font-size-sm);
460
599
  font-weight: var(--font-weight-medium);
461
600
  cursor: pointer;
462
- transition: all var(--transition-base);
601
+ transition: background var(--transition-base);
463
602
  font-family: inherit;
464
- box-shadow: var(--msg-shadow-card);
603
+ text-align: left;
465
604
  }
466
605
 
467
606
  .messenger-new-message-btn:hover {
468
607
  background: var(--msg-bg-hover);
469
- transform: translateX(4px);
470
- box-shadow: var(--msg-shadow-card-hover);
471
608
  }
472
609
 
473
610
  .messenger-new-message-btn:active {
@@ -61,6 +61,7 @@ export class MessengerWidget extends BaseWidget {
61
61
  changelogUrl: options.changelogUrl || null,
62
62
  helpUrl: options.helpUrl || null,
63
63
  roadmapUrl: options.roadmapUrl || null,
64
+ composePlaceholder: options.composePlaceholder || null,
64
65
  onSendMessage: options.onSendMessage || null,
65
66
  onFeedbackClick: options.onFeedbackClick || null,
66
67
  onArticleClick: options.onArticleClick || null,
@@ -493,6 +494,12 @@ export class MessengerWidget extends BaseWidget {
493
494
  this._wsUnsubscribers.push(
494
495
  this.wsService.on('disconnected', () => {
495
496
  console.log('[MessengerWidget] WebSocket disconnected');
497
+ this.messengerState._notify('connectionChange', { connected: false });
498
+ })
499
+ );
500
+ this._wsUnsubscribers.push(
501
+ this.wsService.on('connected', () => {
502
+ this.messengerState._notify('connectionChange', { connected: true });
496
503
  })
497
504
  );
498
505