@product7/product7-js 0.1.0

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.
Files changed (58) hide show
  1. package/README.md +1025 -0
  2. package/dist/README.md +1025 -0
  3. package/dist/product7-js.js +14658 -0
  4. package/dist/product7-js.js.map +1 -0
  5. package/dist/product7-js.min.js +2 -0
  6. package/dist/product7-js.min.js.map +1 -0
  7. package/package.json +114 -0
  8. package/src/api/mock-data/index.js +360 -0
  9. package/src/api/services/ChangelogService.js +28 -0
  10. package/src/api/services/FeedbackService.js +44 -0
  11. package/src/api/services/HelpService.js +50 -0
  12. package/src/api/services/MessengerService.js +279 -0
  13. package/src/api/services/SurveyService.js +127 -0
  14. package/src/api/utils/helpers.js +30 -0
  15. package/src/core/APIService.js +303 -0
  16. package/src/core/BaseAPIService.js +298 -0
  17. package/src/core/EventBus.js +54 -0
  18. package/src/core/Product7.js +812 -0
  19. package/src/core/WebSocketService.js +275 -0
  20. package/src/docs/api.md +226 -0
  21. package/src/docs/example.md +461 -0
  22. package/src/docs/framework-integrations.md +714 -0
  23. package/src/docs/installation.md +281 -0
  24. package/src/index.js +894 -0
  25. package/src/styles/base.js +50 -0
  26. package/src/styles/changelog.js +665 -0
  27. package/src/styles/components.js +553 -0
  28. package/src/styles/design-tokens.js +124 -0
  29. package/src/styles/feedback.js +325 -0
  30. package/src/styles/messenger-components.js +632 -0
  31. package/src/styles/messenger-core.js +233 -0
  32. package/src/styles/messenger-features.js +169 -0
  33. package/src/styles/messenger-views.js +877 -0
  34. package/src/styles/messenger.js +17 -0
  35. package/src/styles/messengerCustomStyles.js +114 -0
  36. package/src/styles/styles.js +26 -0
  37. package/src/styles/survey.js +894 -0
  38. package/src/utils/errors.js +142 -0
  39. package/src/utils/helpers.js +219 -0
  40. package/src/widgets/BaseWidget.js +548 -0
  41. package/src/widgets/ButtonWidget.js +104 -0
  42. package/src/widgets/ChangelogWidget.js +615 -0
  43. package/src/widgets/InlineWidget.js +148 -0
  44. package/src/widgets/MessengerWidget.js +979 -0
  45. package/src/widgets/SurveyWidget.js +1325 -0
  46. package/src/widgets/TabWidget.js +45 -0
  47. package/src/widgets/WidgetFactory.js +70 -0
  48. package/src/widgets/messenger/MessengerState.js +323 -0
  49. package/src/widgets/messenger/components/MessengerLauncher.js +124 -0
  50. package/src/widgets/messenger/components/MessengerPanel.js +111 -0
  51. package/src/widgets/messenger/components/NavigationTabs.js +130 -0
  52. package/src/widgets/messenger/views/ChangelogView.js +167 -0
  53. package/src/widgets/messenger/views/ChatView.js +592 -0
  54. package/src/widgets/messenger/views/ConversationsView.js +244 -0
  55. package/src/widgets/messenger/views/HelpView.js +239 -0
  56. package/src/widgets/messenger/views/HomeView.js +300 -0
  57. package/src/widgets/messenger/views/PreChatFormView.js +109 -0
  58. package/types/index.d.ts +341 -0
@@ -0,0 +1,632 @@
1
+ export const messengerComponentsStyles = `
2
+
3
+ /* ========================================
4
+ MESSAGES
5
+ ======================================== */
6
+
7
+ .messenger-message {
8
+ display: flex;
9
+ gap: var(--spacing-2);
10
+ max-width: 85%;
11
+ }
12
+
13
+ .messenger-message-own {
14
+ align-self: flex-end;
15
+ flex-direction: column;
16
+ align-items: flex-end;
17
+ }
18
+
19
+ .messenger-message-received {
20
+ align-self: flex-start;
21
+ flex-direction: column;
22
+ }
23
+
24
+ .messenger-message-row {
25
+ display: flex;
26
+ align-items: flex-end;
27
+ gap: var(--spacing-2);
28
+ }
29
+
30
+ .messenger-message-wrapper {
31
+ display: flex;
32
+ flex-direction: column;
33
+ }
34
+
35
+ .messenger-message-avatar {
36
+ display: none;
37
+ }
38
+
39
+ .messenger-message-sender {
40
+ font-size: var(--font-size-xs);
41
+ font-weight: var(--font-weight-medium);
42
+ color: var(--msg-text-secondary);
43
+ margin-bottom: 2px;
44
+ margin-left: 0;
45
+ }
46
+
47
+ .messenger-message-bubble {
48
+ padding: var(--spacing-3) var(--spacing-4);
49
+ border-radius: 1.25rem;
50
+ word-wrap: break-word;
51
+ max-width: 100%;
52
+ }
53
+
54
+ .messenger-message-own .messenger-message-bubble {
55
+ background: var(--msg-bg-bubble-own);
56
+ color: var(--msg-text);
57
+ border: 1px solid var(--msg-border-bubble);
58
+ border-bottom-right-radius: 0.25rem;
59
+ }
60
+
61
+ .messenger-message-received .messenger-message-bubble {
62
+ background: var(--msg-bg-bubble-received);
63
+ color: var(--msg-text);
64
+ border-bottom-left-radius: 0.25rem;
65
+ }
66
+
67
+ .messenger-message-content {
68
+ font-size: var(--font-size-base);
69
+ line-height: var(--line-height-relaxed);
70
+ }
71
+
72
+ .messenger-message-content p {
73
+ margin: 0 0 0.5rem;
74
+ }
75
+
76
+ .messenger-message-content p:last-child {
77
+ margin-bottom: 0;
78
+ }
79
+
80
+ .messenger-message-time {
81
+ font-size: var(--font-size-xs);
82
+ color: var(--msg-text-tertiary);
83
+ margin-top: 0.25rem;
84
+ padding: 0 var(--spacing-1);
85
+ }
86
+
87
+ .messenger-message-meta {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 0.375rem;
91
+ font-size: var(--font-size-xs);
92
+ color: var(--msg-text-tertiary);
93
+ margin-top: 0.375rem;
94
+ padding: 0 var(--spacing-1);
95
+ }
96
+
97
+ .messenger-message-image {
98
+ max-width: 220px;
99
+ max-height: 200px;
100
+ width: auto;
101
+ height: auto;
102
+ border-radius: var(--radius-lg);
103
+ margin-top: var(--spacing-1);
104
+ cursor: pointer;
105
+ object-fit: contain;
106
+ display: block;
107
+ }
108
+
109
+ .messenger-message-file {
110
+ display: inline-flex;
111
+ align-items: center;
112
+ gap: var(--spacing-2);
113
+ margin-top: var(--spacing-1);
114
+ padding: var(--spacing-2) var(--spacing-3);
115
+ border-radius: var(--radius-lg);
116
+ background: var(--color-neutral-100);
117
+ color: var(--color-primary);
118
+ text-decoration: none;
119
+ font-size: var(--font-size-sm);
120
+ transition: background var(--transition-base);
121
+ max-width: 100%;
122
+ word-break: break-all;
123
+ cursor: pointer;
124
+ }
125
+
126
+ .messenger-message-file:hover {
127
+ background: var(--color-neutral-200);
128
+ }
129
+
130
+ .messenger-file-download-icon {
131
+ margin-left: auto;
132
+ opacity: 0.5;
133
+ flex-shrink: 0;
134
+ }
135
+
136
+ .messenger-message-file:hover .messenger-file-download-icon {
137
+ opacity: 1;
138
+ }
139
+
140
+ .messenger-closed-banner {
141
+ display: flex;
142
+ align-items: center;
143
+ justify-content: center;
144
+ gap: var(--spacing-2);
145
+ padding: var(--spacing-3) var(--spacing-4);
146
+ margin: var(--spacing-4);
147
+ background: var(--color-success-light);
148
+ color: var(--color-success-dark);
149
+ border-radius: var(--radius-xl);
150
+ font-size: var(--font-size-sm);
151
+ font-weight: var(--font-weight-medium);
152
+ }
153
+
154
+ /* ========================================
155
+ CHAT HEADER
156
+ ======================================== */
157
+
158
+ .messenger-chat-header {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: var(--spacing-2);
162
+ padding: var(--spacing-3) var(--spacing-4);
163
+ border-bottom: 1px solid var(--msg-border);
164
+ }
165
+
166
+ .messenger-chat-header-avatar {
167
+ width: 2.25rem;
168
+ height: 2.25rem;
169
+ border-radius: var(--radius-lg);
170
+ background: var(--color-neutral-100);
171
+ display: flex;
172
+ align-items: center;
173
+ justify-content: center;
174
+ flex-shrink: 0;
175
+ overflow: hidden;
176
+ }
177
+
178
+ .messenger-chat-header-avatar img {
179
+ width: 100%;
180
+ height: 100%;
181
+ object-fit: cover;
182
+ }
183
+
184
+ .messenger-chat-header-avatar svg {
185
+ width: 1.25rem;
186
+ height: 1.25rem;
187
+ color: var(--msg-text-secondary);
188
+ }
189
+
190
+ .messenger-chat-header-info {
191
+ flex: 1;
192
+ display: flex;
193
+ flex-direction: column;
194
+ gap: 0;
195
+ min-width: 0;
196
+ }
197
+
198
+ .messenger-chat-title {
199
+ font-size: var(--font-size-base);
200
+ font-weight: var(--font-weight-semibold);
201
+ color: var(--msg-text);
202
+ line-height: 1.4;
203
+ }
204
+
205
+ .messenger-chat-subtitle {
206
+ font-size: var(--font-size-sm);
207
+ color: var(--msg-text-secondary);
208
+ line-height: 1.4;
209
+ }
210
+
211
+ .messenger-chat-header-actions {
212
+ display: flex;
213
+ align-items: center;
214
+ gap: var(--spacing-1);
215
+ flex-shrink: 0;
216
+ }
217
+
218
+ .messenger-chat-messages {
219
+ flex: 1;
220
+ overflow-y: auto;
221
+ padding: var(--spacing-5) var(--spacing-4);
222
+ display: flex;
223
+ flex-direction: column;
224
+ gap: var(--spacing-4);
225
+ }
226
+
227
+ .messenger-chat-empty {
228
+ flex: 1;
229
+ display: flex;
230
+ flex-direction: column;
231
+ align-items: center;
232
+ justify-content: center;
233
+ text-align: center;
234
+ padding: var(--spacing-10);
235
+ }
236
+
237
+ .messenger-chat-empty-avatars {
238
+ margin-bottom: var(--spacing-4);
239
+ }
240
+
241
+ .messenger-chat-empty h3 {
242
+ margin: 0 0 var(--spacing-2);
243
+ font-size: var(--font-size-xl);
244
+ font-weight: var(--font-weight-semibold);
245
+ color: var(--msg-text);
246
+ }
247
+
248
+ .messenger-chat-empty p {
249
+ margin: 0;
250
+ font-size: var(--font-size-base);
251
+ color: var(--msg-text-secondary);
252
+ max-width: 240px;
253
+ }
254
+
255
+ /* ========================================
256
+ COMPOSE AREA
257
+ ======================================== */
258
+
259
+ .messenger-chat-compose {
260
+ display: flex;
261
+ flex-direction: column;
262
+ padding: var(--spacing-3) var(--spacing-4);
263
+ background: var(--msg-bg);
264
+ margin: 0 var(--spacing-3) var(--spacing-3);
265
+ border: 1px solid var(--msg-border);
266
+ border-radius: var(--radius-xl);
267
+ }
268
+
269
+ .messenger-compose-input-wrapper {
270
+ width: 100%;
271
+ }
272
+
273
+ .messenger-compose-input {
274
+ width: 100%;
275
+ background: transparent;
276
+ border: none;
277
+ outline: none;
278
+ color: var(--msg-text);
279
+ font-size: var(--font-size-base);
280
+ line-height: var(--line-height-relaxed);
281
+ resize: none;
282
+ max-height: 120px;
283
+ font-family: inherit;
284
+ padding: var(--spacing-1) 0;
285
+ }
286
+
287
+ .messenger-compose-input::placeholder {
288
+ color: var(--msg-text-tertiary);
289
+ }
290
+
291
+ .messenger-compose-bottom {
292
+ display: flex;
293
+ align-items: center;
294
+ justify-content: space-between;
295
+ margin-top: var(--spacing-2);
296
+ }
297
+
298
+ .messenger-compose-actions {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: var(--spacing-1);
302
+ }
303
+
304
+ .messenger-compose-send {
305
+ width: 2.25rem;
306
+ height: 2.25rem;
307
+ background: transparent;
308
+ border: 1px solid var(--msg-border);
309
+ border-radius: var(--radius-full);
310
+ color: var(--msg-text-secondary);
311
+ cursor: pointer;
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: center;
315
+ transition: all var(--transition-base);
316
+ flex-shrink: 0;
317
+ }
318
+
319
+ .messenger-compose-send:hover:not(:disabled) {
320
+ background: var(--color-primary);
321
+ border-color: var(--color-primary);
322
+ color: var(--msg-bg);
323
+ }
324
+
325
+ .messenger-compose-send:active:not(:disabled) {
326
+ transform: translateY(1px);
327
+ transition-duration: 100ms;
328
+ }
329
+
330
+ .messenger-compose-send:disabled {
331
+ color: var(--color-neutral-300);
332
+ border-color: var(--color-neutral-200);
333
+ cursor: not-allowed;
334
+ }
335
+
336
+ .messenger-compose-send svg {
337
+ color: inherit;
338
+ }
339
+
340
+ .messenger-compose-file-input {
341
+ display: none;
342
+ }
343
+
344
+ .messenger-compose-attach {
345
+ width: 2rem;
346
+ height: 2rem;
347
+ flex-shrink: 0;
348
+ color: var(--msg-text-secondary);
349
+ }
350
+
351
+ .messenger-compose-attach:hover {
352
+ color: var(--msg-text);
353
+ }
354
+
355
+ .messenger-compose-attach svg {
356
+ width: 1.25rem;
357
+ height: 1.25rem;
358
+ }
359
+
360
+ /* ========================================
361
+ TYPING INDICATOR
362
+ ======================================== */
363
+
364
+ .messenger-typing-indicator {
365
+ display: none;
366
+ align-items: center;
367
+ gap: var(--spacing-2);
368
+ padding: var(--spacing-2) var(--spacing-3);
369
+ margin: var(--spacing-1) 0;
370
+ }
371
+
372
+ .messenger-typing-dots {
373
+ display: flex;
374
+ align-items: center;
375
+ gap: 4px;
376
+ background: var(--color-neutral-100);
377
+ padding: var(--spacing-2) var(--spacing-3);
378
+ border-radius: var(--radius-2xl);
379
+ }
380
+
381
+ .messenger-typing-dots span {
382
+ width: 6px;
383
+ height: 6px;
384
+ background: var(--color-neutral-400);
385
+ border-radius: var(--radius-full);
386
+ animation: messenger-typing-bounce 1.4s infinite ease-in-out;
387
+ }
388
+
389
+ .messenger-typing-dots span:nth-child(1) { animation-delay: -0.32s; }
390
+ .messenger-typing-dots span:nth-child(2) { animation-delay: -0.16s; }
391
+ .messenger-typing-dots span:nth-child(3) { animation-delay: 0s; }
392
+
393
+ .messenger-typing-text {
394
+ font-size: var(--font-size-xs);
395
+ color: var(--msg-text-tertiary);
396
+ }
397
+
398
+ /* ========================================
399
+ NAVIGATION TABS
400
+ ======================================== */
401
+
402
+ .messenger-panel-nav {
403
+ border-top: 1px solid var(--msg-border);
404
+ background: var(--msg-bg);
405
+ }
406
+
407
+ .messenger-nav-tabs {
408
+ display: flex;
409
+ padding: var(--spacing-1) var(--spacing-2) 0;
410
+ gap: var(--spacing-1);
411
+ }
412
+
413
+ .messenger-nav-footer {
414
+ padding: 2px var(--spacing-2) var(--spacing-2);
415
+ text-align: center;
416
+ }
417
+
418
+ .messenger-powered-by {
419
+ display: inline-flex;
420
+ align-items: center;
421
+ gap: 4px;
422
+ font-size: 10px;
423
+ color: var(--msg-text-tertiary);
424
+ text-decoration: none;
425
+ transition: color var(--transition-base);
426
+ }
427
+
428
+ .messenger-powered-by:hover {
429
+ color: var(--msg-text-secondary);
430
+ }
431
+
432
+ .messenger-powered-by svg {
433
+ width: 12px;
434
+ height: 14px;
435
+ }
436
+
437
+ .messenger-powered-by strong {
438
+ font-weight: var(--font-weight-semibold);
439
+ }
440
+
441
+ .messenger-nav-tab {
442
+ flex: 1;
443
+ display: flex;
444
+ flex-direction: column;
445
+ align-items: center;
446
+ gap: 2px;
447
+ padding: var(--spacing-1) var(--spacing-1);
448
+ background: none;
449
+ border: none;
450
+ cursor: pointer;
451
+ border-radius: 8px;
452
+ transition: all var(--transition-base);
453
+ position: relative;
454
+ }
455
+
456
+ .messenger-nav-tab:hover {
457
+ background: transparent;
458
+ }
459
+
460
+ .messenger-nav-tab:active {
461
+ transform: translateY(1px);
462
+ transition-duration: 100ms;
463
+ }
464
+
465
+ .messenger-nav-tab:hover .messenger-nav-icon,
466
+ .messenger-nav-tab:hover .messenger-nav-label {
467
+ color: var(--msg-text);
468
+ }
469
+
470
+ .messenger-nav-icon {
471
+ color: var(--msg-text-secondary);
472
+ transition: color var(--transition-base);
473
+ display: flex;
474
+ align-items: center;
475
+ justify-content: center;
476
+ width: 26px;
477
+ height: 26px;
478
+ }
479
+
480
+ .messenger-nav-icon svg {
481
+ width: 26px;
482
+ height: 26px;
483
+ display: block;
484
+ }
485
+
486
+ .messenger-nav-label {
487
+ font-size: var(--font-size-sm);
488
+ font-weight: var(--font-weight-medium);
489
+ color: var(--msg-text-secondary);
490
+ transition: color var(--transition-base);
491
+ }
492
+
493
+ .messenger-nav-tab.active .messenger-nav-icon,
494
+ .messenger-nav-tab.active .messenger-nav-label {
495
+ color: var(--color-primary);
496
+ }
497
+
498
+ .messenger-nav-badge {
499
+ position: absolute;
500
+ top: var(--spacing-1);
501
+ right: calc(50% - 16px);
502
+ min-width: 16px;
503
+ height: 16px;
504
+ background: var(--color-error);
505
+ color: var(--msg-bg);
506
+ font-size: 10px;
507
+ font-weight: var(--font-weight-semibold);
508
+ border-radius: var(--radius-full);
509
+ display: flex;
510
+ align-items: center;
511
+ justify-content: center;
512
+ padding: 0 var(--spacing-1);
513
+ }
514
+
515
+ /* ========================================
516
+ PRECHAT
517
+ ======================================== */
518
+
519
+ .messenger-prechat-view {
520
+ position: relative;
521
+ }
522
+
523
+ .messenger-prechat-overlay {
524
+ position: absolute;
525
+ top: 0;
526
+ left: 0;
527
+ right: 0;
528
+ bottom: 0;
529
+ background: rgba(0, 0, 0, 0.45);
530
+ display: flex;
531
+ align-items: center;
532
+ justify-content: center;
533
+ padding: var(--spacing-5);
534
+ z-index: var(--z-popover);
535
+ backdrop-filter: blur(2px);
536
+ }
537
+
538
+ .messenger-prechat-card {
539
+ background: var(--msg-bg);
540
+ border-radius: var(--radius-xl);
541
+ padding: var(--spacing-6) var(--spacing-6) var(--spacing-5);
542
+ width: 100%;
543
+ max-width: 320px;
544
+ box-shadow: var(--shadow-xl);
545
+ border: 1px solid var(--msg-border);
546
+ text-align: center;
547
+ }
548
+
549
+ .messenger-prechat-icon {
550
+ display: flex;
551
+ align-items: center;
552
+ justify-content: center;
553
+ width: 60px;
554
+ height: 60px;
555
+ border-radius: var(--radius-full);
556
+ background: var(--color-primary-light);
557
+ color: var(--color-primary);
558
+ margin: 0 auto var(--spacing-4);
559
+ }
560
+
561
+ .messenger-prechat-title {
562
+ margin: 0 0 var(--spacing-2);
563
+ font-size: var(--font-size-lg);
564
+ font-weight: var(--font-weight-semibold);
565
+ color: var(--msg-text);
566
+ }
567
+
568
+ .messenger-prechat-subtitle {
569
+ margin: 0 0 var(--spacing-5);
570
+ font-size: var(--font-size-sm);
571
+ color: var(--msg-text-secondary);
572
+ line-height: var(--line-height-relaxed);
573
+ }
574
+
575
+ .messenger-prechat-actions {
576
+ display: flex;
577
+ flex-direction: column;
578
+ gap: var(--spacing-2);
579
+ }
580
+
581
+ .messenger-prechat-yes,
582
+ .messenger-prechat-no {
583
+ display: flex;
584
+ align-items: center;
585
+ justify-content: center;
586
+ gap: var(--spacing-2);
587
+ padding: var(--spacing-3) var(--spacing-4);
588
+ border-radius: var(--radius-md);
589
+ font-size: var(--font-size-sm);
590
+ font-weight: var(--font-weight-medium);
591
+ font-family: inherit;
592
+ cursor: pointer;
593
+ transition: all var(--transition-fast);
594
+ border: none;
595
+ width: 100%;
596
+ }
597
+
598
+ .messenger-prechat-yes {
599
+ background: var(--color-primary);
600
+ color: #ffffff;
601
+ }
602
+
603
+ .messenger-prechat-yes:hover {
604
+ background: var(--color-primary-hover);
605
+ }
606
+
607
+ .messenger-prechat-yes:active {
608
+ transform: translateY(1px);
609
+ transition-duration: 100ms;
610
+ }
611
+
612
+ .messenger-prechat-yes:disabled {
613
+ opacity: 0.7;
614
+ cursor: not-allowed;
615
+ }
616
+
617
+ .messenger-prechat-no {
618
+ background: var(--msg-bg-surface);
619
+ color: var(--msg-text-secondary);
620
+ border: 1px solid var(--msg-border);
621
+ }
622
+
623
+ .messenger-prechat-no:hover {
624
+ background: var(--msg-bg-hover);
625
+ color: var(--msg-text);
626
+ }
627
+
628
+ .messenger-prechat-no:active {
629
+ transform: translateY(1px);
630
+ transition-duration: 100ms;
631
+ }
632
+ `;