@product7/feedback-sdk 1.3.3 → 1.3.4

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 (37) hide show
  1. package/dist/feedback-sdk.js +2321 -3173
  2. package/dist/feedback-sdk.js.map +1 -1
  3. package/dist/feedback-sdk.min.js +1 -1
  4. package/dist/feedback-sdk.min.js.map +1 -1
  5. package/package.json +1 -1
  6. package/src/api/services/MessengerService.js +20 -0
  7. package/src/index.js +2 -3
  8. package/src/styles/base.js +27 -52
  9. package/src/styles/changelog.js +152 -269
  10. package/src/styles/components.js +489 -0
  11. package/src/styles/design-tokens.js +104 -0
  12. package/src/styles/feedback.js +59 -369
  13. package/src/styles/messenger-core.js +390 -0
  14. package/src/styles/messenger-features.js +347 -0
  15. package/src/styles/messenger-help.js +298 -0
  16. package/src/styles/messenger-themes.js +500 -0
  17. package/src/styles/messenger-views.js +618 -0
  18. package/src/styles/messenger.js +558 -0
  19. package/src/styles/styles.js +24 -2
  20. package/src/styles/surveys.js +354 -0
  21. package/src/widgets/BaseWidget.js +25 -58
  22. package/src/widgets/ButtonWidget.js +3 -18
  23. package/src/widgets/ChangelogWidget.js +7 -48
  24. package/src/widgets/InlineWidget.js +16 -13
  25. package/src/widgets/MessengerWidget.js +0 -4
  26. package/src/widgets/SurveyWidget.js +42 -146
  27. package/src/widgets/TabWidget.js +2 -22
  28. package/src/widgets/messenger/components/MessengerLauncher.js +10 -5
  29. package/src/widgets/messenger/components/MessengerPanel.js +5 -27
  30. package/src/widgets/messenger/components/NavigationTabs.js +5 -14
  31. package/src/widgets/messenger/views/ChangelogView.js +13 -14
  32. package/src/widgets/messenger/views/ChatView.js +43 -36
  33. package/src/widgets/messenger/views/ConversationsView.js +16 -21
  34. package/src/widgets/messenger/views/HelpView.js +10 -10
  35. package/src/widgets/messenger/views/HomeView.js +11 -16
  36. package/src/widgets/messenger/views/PreChatFormView.js +18 -30
  37. package/src/styles/messengerStyles.js +0 -2328
@@ -0,0 +1,489 @@
1
+ export const componentsStyles = `
2
+ .sdk-btn {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ gap: var(--spacing-2);
7
+ border-radius: var(--radius-md);
8
+ border: none;
9
+ font-size: var(--font-size-md);
10
+ font-weight: var(--font-weight-medium);
11
+ font-family: inherit;
12
+ cursor: pointer;
13
+ transition: all var(--transition-base);
14
+ outline: none;
15
+ }
16
+
17
+ .sdk-btn:disabled {
18
+ opacity: 0.6;
19
+ cursor: not-allowed;
20
+ }
21
+
22
+ .sdk-btn:focus-visible {
23
+ outline: 2px solid var(--color-primary);
24
+ outline-offset: 2px;
25
+ }
26
+
27
+ .sdk-btn-primary {
28
+ background: var(--color-primary);
29
+ color: var(--color-white);
30
+ height: 44px;
31
+ padding: 10px 18px;
32
+ }
33
+
34
+ .sdk-btn-primary:hover:not(:disabled) {
35
+ background: var(--color-primary-hover);
36
+ }
37
+
38
+ .sdk-btn-primary:active:not(:disabled) {
39
+ background: var(--color-primary-active);
40
+ }
41
+
42
+ .sdk-btn-secondary {
43
+ background: transparent;
44
+ color: var(--color-neutral-600);
45
+ border: 1px solid var(--color-border);
46
+ height: 44px;
47
+ padding: 10px 18px;
48
+ }
49
+
50
+ .sdk-btn-secondary:hover:not(:disabled) {
51
+ background: var(--color-neutral-50);
52
+ border-color: var(--color-neutral-400);
53
+ color: var(--color-neutral-700);
54
+ }
55
+
56
+ .sdk-btn-ghost {
57
+ background: transparent;
58
+ color: var(--color-neutral-600);
59
+ }
60
+
61
+ .sdk-btn-ghost:hover:not(:disabled) {
62
+ background: var(--color-neutral-100);
63
+ color: var(--color-neutral-700);
64
+ }
65
+
66
+ .sdk-btn-sm {
67
+ height: 36px;
68
+ padding: 8px 14px;
69
+ font-size: var(--font-size-base);
70
+ }
71
+
72
+ .sdk-btn-lg {
73
+ height: 48px;
74
+ padding: 12px 20px;
75
+ font-size: var(--font-size-lg);
76
+ }
77
+
78
+ .sdk-btn-pill {
79
+ border-radius: var(--radius-full);
80
+ }
81
+
82
+ .sdk-btn-block {
83
+ width: 100%;
84
+ }
85
+
86
+ .sdk-btn-icon {
87
+ width: 36px;
88
+ height: 36px;
89
+ padding: 0;
90
+ border-radius: var(--radius-md);
91
+ }
92
+
93
+ .sdk-input {
94
+ width: 100%;
95
+ height: 44px;
96
+ border-radius: var(--radius-md);
97
+ border: 1px solid var(--color-border);
98
+ padding: 10px 14px;
99
+ font-size: var(--font-size-md);
100
+ font-weight: var(--font-weight-normal);
101
+ line-height: var(--line-height-relaxed);
102
+ color: var(--color-text-primary);
103
+ font-family: inherit;
104
+ outline: none;
105
+ transition: all var(--transition-base);
106
+ background: var(--color-white);
107
+ }
108
+
109
+ .sdk-input::placeholder {
110
+ color: var(--color-text-tertiary);
111
+ }
112
+
113
+ .sdk-input:focus {
114
+ border-color: var(--color-primary);
115
+ box-shadow: 0 0 0 3px var(--color-primary-light);
116
+ }
117
+
118
+ .sdk-input:disabled {
119
+ background: var(--color-neutral-50);
120
+ cursor: not-allowed;
121
+ }
122
+
123
+ .sdk-textarea {
124
+ width: 100%;
125
+ min-height: 120px;
126
+ resize: vertical;
127
+ border-radius: var(--radius-md);
128
+ border: 1px solid var(--color-border);
129
+ padding: 10px 14px;
130
+ font-size: var(--font-size-md);
131
+ font-weight: var(--font-weight-normal);
132
+ line-height: var(--line-height-relaxed);
133
+ color: var(--color-text-primary);
134
+ font-family: inherit;
135
+ outline: none;
136
+ transition: all var(--transition-base);
137
+ background: var(--color-white);
138
+ }
139
+
140
+ .sdk-textarea::placeholder {
141
+ color: var(--color-text-tertiary);
142
+ }
143
+
144
+ .sdk-textarea:focus {
145
+ border-color: var(--color-primary);
146
+ box-shadow: 0 0 0 3px var(--color-primary-light);
147
+ }
148
+
149
+ .sdk-select {
150
+ width: 100%;
151
+ height: 44px;
152
+ border-radius: var(--radius-md);
153
+ border: 1px solid var(--color-border);
154
+ padding: 10px 14px;
155
+ font-size: var(--font-size-md);
156
+ color: var(--color-text-primary);
157
+ font-family: inherit;
158
+ outline: none;
159
+ transition: all var(--transition-base);
160
+ background: var(--color-white);
161
+ cursor: pointer;
162
+ }
163
+
164
+ .sdk-select:focus {
165
+ border-color: var(--color-primary);
166
+ box-shadow: 0 0 0 3px var(--color-primary-light);
167
+ }
168
+
169
+ .sdk-label {
170
+ display: block;
171
+ font-size: var(--font-size-base);
172
+ font-weight: var(--font-weight-medium);
173
+ line-height: var(--line-height-tight);
174
+ color: var(--color-neutral-700);
175
+ margin-bottom: var(--spacing-2);
176
+ }
177
+
178
+ .sdk-form-group {
179
+ display: flex;
180
+ flex-direction: column;
181
+ margin-bottom: var(--spacing-5);
182
+ }
183
+
184
+ .sdk-form-group:last-child {
185
+ margin-bottom: 0;
186
+ }
187
+
188
+ .sdk-card {
189
+ background: var(--color-white);
190
+ border-radius: var(--radius-xl);
191
+ box-shadow: var(--shadow-base);
192
+ overflow: hidden;
193
+ }
194
+
195
+ .sdk-card-header {
196
+ padding: var(--spacing-6);
197
+ border-bottom: 1px solid var(--color-border);
198
+ }
199
+
200
+ .sdk-card-body {
201
+ padding: var(--spacing-6);
202
+ }
203
+
204
+ .sdk-card-footer {
205
+ padding: var(--spacing-6);
206
+ border-top: 1px solid var(--color-border);
207
+ }
208
+
209
+ .sdk-modal-backdrop {
210
+ position: fixed;
211
+ top: 0;
212
+ left: 0;
213
+ right: 0;
214
+ bottom: 0;
215
+ background: rgba(0, 0, 0, 0.5);
216
+ opacity: 0;
217
+ transition: opacity var(--transition-slow);
218
+ pointer-events: none;
219
+ z-index: var(--z-modal-backdrop);
220
+ }
221
+
222
+ .sdk-modal-backdrop.show {
223
+ opacity: 1;
224
+ pointer-events: auto;
225
+ }
226
+
227
+ .sdk-modal {
228
+ position: fixed;
229
+ top: 0;
230
+ left: 0;
231
+ right: 0;
232
+ bottom: 0;
233
+ z-index: var(--z-modal);
234
+ display: flex;
235
+ align-items: center;
236
+ justify-content: center;
237
+ padding: var(--spacing-5);
238
+ pointer-events: none;
239
+ }
240
+
241
+ .sdk-modal.open {
242
+ pointer-events: auto;
243
+ }
244
+
245
+ .sdk-modal-container {
246
+ position: relative;
247
+ width: 100%;
248
+ max-width: 580px;
249
+ max-height: 90vh;
250
+ background: var(--color-white);
251
+ border-radius: var(--radius-4xl);
252
+ overflow: hidden;
253
+ box-shadow: var(--shadow-2xl);
254
+ transform: scale(0.95) translateY(20px);
255
+ opacity: 0;
256
+ transition: all var(--transition-slow);
257
+ }
258
+
259
+ .sdk-modal.open .sdk-modal-container {
260
+ transform: scale(1) translateY(0);
261
+ opacity: 1;
262
+ }
263
+
264
+ .sdk-modal-header {
265
+ display: flex;
266
+ align-items: center;
267
+ justify-content: space-between;
268
+ padding: var(--spacing-6);
269
+ border-bottom: 1px solid var(--color-border);
270
+ }
271
+
272
+ .sdk-modal-title {
273
+ margin: 0;
274
+ font-size: var(--font-size-xl);
275
+ font-weight: var(--font-weight-semibold);
276
+ color: var(--color-text-primary);
277
+ }
278
+
279
+ .sdk-modal-body {
280
+ overflow-y: auto;
281
+ max-height: calc(90vh - 120px);
282
+ }
283
+
284
+ .sdk-close-btn {
285
+ background: none;
286
+ border: none;
287
+ padding: var(--spacing-2);
288
+ cursor: pointer;
289
+ color: var(--color-neutral-500);
290
+ display: flex;
291
+ align-items: center;
292
+ justify-content: center;
293
+ border-radius: var(--radius-md);
294
+ transition: all var(--transition-base);
295
+ line-height: 1;
296
+ }
297
+
298
+ .sdk-close-btn:hover {
299
+ background: var(--color-neutral-100);
300
+ color: var(--color-neutral-900);
301
+ }
302
+
303
+ .sdk-avatar {
304
+ display: flex;
305
+ align-items: center;
306
+ justify-content: center;
307
+ background: var(--color-primary);
308
+ color: var(--color-white);
309
+ font-weight: var(--font-weight-semibold);
310
+ border-radius: var(--radius-full);
311
+ overflow: hidden;
312
+ flex-shrink: 0;
313
+ }
314
+
315
+ .sdk-avatar-sm {
316
+ width: 24px;
317
+ height: 24px;
318
+ font-size: var(--font-size-xs);
319
+ }
320
+
321
+ .sdk-avatar-md {
322
+ width: 32px;
323
+ height: 32px;
324
+ font-size: var(--font-size-sm);
325
+ }
326
+
327
+ .sdk-avatar-lg {
328
+ width: 40px;
329
+ height: 40px;
330
+ font-size: var(--font-size-base);
331
+ }
332
+
333
+ .sdk-avatar img {
334
+ width: 100%;
335
+ height: 100%;
336
+ object-fit: cover;
337
+ }
338
+
339
+ .sdk-badge {
340
+ display: inline-flex;
341
+ align-items: center;
342
+ justify-content: center;
343
+ padding: 2px var(--spacing-2);
344
+ border-radius: var(--radius-full);
345
+ font-size: var(--font-size-xs);
346
+ font-weight: var(--font-weight-semibold);
347
+ line-height: 1;
348
+ }
349
+
350
+ .sdk-badge-primary {
351
+ background: var(--color-primary-light);
352
+ color: var(--color-primary);
353
+ }
354
+
355
+ .sdk-badge-success {
356
+ background: var(--color-success-light);
357
+ color: var(--color-success-dark);
358
+ }
359
+
360
+ .sdk-badge-error {
361
+ background: var(--color-error-light);
362
+ color: var(--color-error-dark);
363
+ }
364
+
365
+ .sdk-badge-dot {
366
+ width: 8px;
367
+ height: 8px;
368
+ border-radius: var(--radius-full);
369
+ position: absolute;
370
+ top: -2px;
371
+ right: -2px;
372
+ }
373
+
374
+ .sdk-badge-dot.primary {
375
+ background: var(--color-primary);
376
+ }
377
+
378
+ .sdk-badge-dot.error {
379
+ background: var(--color-error);
380
+ border: 2px solid var(--color-white);
381
+ }
382
+
383
+ .sdk-notification {
384
+ position: fixed;
385
+ top: var(--spacing-6);
386
+ right: var(--spacing-6);
387
+ z-index: var(--z-notification);
388
+ background: var(--color-white);
389
+ border-radius: var(--radius-xl);
390
+ box-shadow: var(--shadow-lg);
391
+ min-width: 320px;
392
+ animation: slideInRight 0.3s cubic-bezier(0.4, 0, 0.2, 1);
393
+ }
394
+
395
+ .sdk-notification-content {
396
+ display: flex;
397
+ align-items: center;
398
+ padding: var(--spacing-4) var(--spacing-5);
399
+ gap: var(--spacing-3);
400
+ }
401
+
402
+ .sdk-notification-success {
403
+ border: 1px solid var(--color-success-light);
404
+ }
405
+
406
+ .sdk-notification-success .sdk-notification-icon {
407
+ width: 20px;
408
+ height: 20px;
409
+ border-radius: var(--radius-full);
410
+ background: var(--color-success);
411
+ color: var(--color-white);
412
+ display: flex;
413
+ align-items: center;
414
+ justify-content: center;
415
+ font-size: var(--font-size-sm);
416
+ font-weight: var(--font-weight-semibold);
417
+ flex-shrink: 0;
418
+ }
419
+
420
+ .sdk-notification-text {
421
+ color: var(--color-success-dark);
422
+ font-weight: var(--font-weight-medium);
423
+ font-size: var(--font-size-base);
424
+ flex: 1;
425
+ }
426
+
427
+ .sdk-notification .sdk-close-btn {
428
+ flex-shrink: 0;
429
+ }
430
+
431
+ .sdk-spinner {
432
+ width: 32px;
433
+ height: 32px;
434
+ border: 3px solid var(--color-neutral-200);
435
+ border-top-color: var(--color-primary);
436
+ border-radius: var(--radius-full);
437
+ animation: spin 0.8s linear infinite;
438
+ }
439
+
440
+ .sdk-spinner-sm {
441
+ width: 20px;
442
+ height: 20px;
443
+ border-width: 2px;
444
+ }
445
+
446
+ @keyframes spin {
447
+ to {
448
+ transform: rotate(360deg);
449
+ }
450
+ }
451
+
452
+ @keyframes slideInRight {
453
+ from {
454
+ transform: translateX(400px);
455
+ opacity: 0;
456
+ }
457
+ to {
458
+ transform: translateX(0);
459
+ opacity: 1;
460
+ }
461
+ }
462
+
463
+ @keyframes fadeIn {
464
+ from {
465
+ opacity: 0;
466
+ }
467
+ to {
468
+ opacity: 1;
469
+ }
470
+ }
471
+
472
+ @media (max-width: 768px) {
473
+ .sdk-modal {
474
+ padding: var(--spacing-4);
475
+ }
476
+
477
+ .sdk-modal-container {
478
+ max-width: 100%;
479
+ border-radius: var(--spacing-5);
480
+ }
481
+
482
+ .sdk-notification {
483
+ top: var(--spacing-4);
484
+ right: var(--spacing-4);
485
+ left: var(--spacing-4);
486
+ min-width: auto;
487
+ }
488
+ }
489
+ `;
@@ -0,0 +1,104 @@
1
+ export const designTokens = `
2
+ :root {
3
+ --color-primary: #155EEF;
4
+ --color-primary-hover: #1249CA;
5
+ --color-primary-active: #0D3A9F;
6
+ --color-primary-light: rgba(21, 94, 239, 0.1);
7
+ --color-primary-border: rgba(21, 94, 239, 0.3);
8
+
9
+ --color-success: #10B981;
10
+ --color-success-hover: #059669;
11
+ --color-success-light: #D1FAE5;
12
+ --color-success-dark: #065F46;
13
+
14
+ --color-error: #EF4444;
15
+ --color-error-hover: #DC2626;
16
+ --color-error-light: #FEE2E2;
17
+ --color-error-dark: #991B1B;
18
+ --color-error-border: #FECACA;
19
+
20
+ --color-warning: #F59E0B;
21
+ --color-warning-light: #FEF3C7;
22
+
23
+ --color-neutral-50: #F9FAFB;
24
+ --color-neutral-100: #F3F4F6;
25
+ --color-neutral-200: #E5E7EB;
26
+ --color-neutral-300: #D1D5DB;
27
+ --color-neutral-400: #9CA3AF;
28
+ --color-neutral-500: #6B7280;
29
+ --color-neutral-600: #4B5563;
30
+ --color-neutral-700: #374151;
31
+ --color-neutral-800: #1F2937;
32
+ --color-neutral-900: #111827;
33
+
34
+ --color-white: #FFFFFF;
35
+ --color-black: #000000;
36
+
37
+ --color-background: #FFFFFF;
38
+ --color-surface: #F9FAFB;
39
+ --color-border: #E5E7EB;
40
+ --color-text-primary: #111827;
41
+ --color-text-secondary: #6B7280;
42
+ --color-text-tertiary: #9CA3AF;
43
+
44
+ --spacing-1: 4px;
45
+ --spacing-2: 8px;
46
+ --spacing-3: 12px;
47
+ --spacing-4: 16px;
48
+ --spacing-5: 20px;
49
+ --spacing-6: 24px;
50
+ --spacing-7: 28px;
51
+ --spacing-8: 32px;
52
+ --spacing-10: 40px;
53
+ --spacing-12: 48px;
54
+
55
+ --font-size-xs: 11px;
56
+ --font-size-sm: 12px;
57
+ --font-size-base: 14px;
58
+ --font-size-md: 15px;
59
+ --font-size-lg: 16px;
60
+ --font-size-xl: 18px;
61
+ --font-size-2xl: 20px;
62
+ --font-size-3xl: 24px;
63
+
64
+ --font-weight-normal: 400;
65
+ --font-weight-medium: 500;
66
+ --font-weight-semibold: 600;
67
+ --font-weight-bold: 700;
68
+
69
+ --line-height-tight: 1.25;
70
+ --line-height-snug: 1.3;
71
+ --line-height-normal: 1.4;
72
+ --line-height-relaxed: 1.5;
73
+ --line-height-loose: 1.6;
74
+
75
+ --radius-sm: 6px;
76
+ --radius-md: 8px;
77
+ --radius-lg: 10px;
78
+ --radius-xl: 12px;
79
+ --radius-2xl: 16px;
80
+ --radius-3xl: 20px;
81
+ --radius-4xl: 24px;
82
+ --radius-full: 9999px;
83
+
84
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
85
+ --shadow-base: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
86
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
87
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
88
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
89
+ --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
90
+
91
+ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
92
+ --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
93
+ --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
94
+
95
+ --z-dropdown: 1000;
96
+ --z-sticky: 1020;
97
+ --z-fixed: 1030;
98
+ --z-modal-backdrop: 999998;
99
+ --z-modal: 999999;
100
+ --z-popover: 1000000;
101
+ --z-tooltip: 1000001;
102
+ --z-notification: 1000002;
103
+ }
104
+ `;