@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,325 @@
1
+ export const feedbackStyles = `
2
+ .feedback-widget-button {
3
+ position: fixed;
4
+ z-index: var(--z-notification);
5
+ }
6
+
7
+ .feedback-widget-button.position-right {
8
+ bottom: var(--spacing-5);
9
+ right: var(--spacing-5);
10
+ }
11
+
12
+ .feedback-widget-button.position-left {
13
+ bottom: var(--spacing-5);
14
+ left: var(--spacing-5);
15
+ }
16
+
17
+ .feedback-trigger-btn {
18
+ position: relative;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ gap: var(--spacing-2);
23
+ height: 48px;
24
+ border-radius: var(--radius-full);
25
+ border: none;
26
+ padding: var(--spacing-3) var(--spacing-5);
27
+ font-size: var(--font-size-base);
28
+ font-weight: var(--font-weight-medium);
29
+ font-family: inherit;
30
+ cursor: pointer;
31
+ transition: all var(--transition-slow);
32
+ color: #ffffff;
33
+ background: var(--color-primary);
34
+ box-shadow: var(--shadow-md);
35
+ width: fit-content;
36
+ touch-action: manipulation;
37
+ -webkit-tap-highlight-color: transparent;
38
+ }
39
+
40
+ .feedback-trigger-btn:hover:not(:disabled) {
41
+ box-shadow: var(--shadow-lg);
42
+ }
43
+
44
+ .feedback-trigger-btn:active:not(:disabled) {
45
+ transform: translateY(1px);
46
+ box-shadow: var(--shadow-md);
47
+ transition-duration: 100ms;
48
+ }
49
+
50
+ .feedback-trigger-btn:disabled {
51
+ opacity: 0.7;
52
+ cursor: not-allowed;
53
+ }
54
+
55
+ .feedback-trigger-btn:focus-visible {
56
+ outline: 2px solid var(--color-primary);
57
+ outline-offset: 2px;
58
+ }
59
+
60
+ .feedback-icon {
61
+ flex-shrink: 0;
62
+ }
63
+
64
+ .feedback-minimize-icon,
65
+ .feedback-expand-icon {
66
+ position: absolute;
67
+ top: -6px;
68
+ right: -6px;
69
+ width: 24px;
70
+ height: 24px;
71
+ padding: var(--spacing-1);
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: center;
75
+ background: var(--color-white);
76
+ border-radius: var(--radius-full);
77
+ opacity: 0;
78
+ transition: opacity var(--transition-base);
79
+ box-shadow: var(--shadow-sm);
80
+ cursor: pointer;
81
+ pointer-events: none;
82
+ }
83
+
84
+ .feedback-minimize-icon svg,
85
+ .feedback-expand-icon svg {
86
+ width: 16px;
87
+ height: 16px;
88
+ display: block;
89
+ fill: var(--color-primary);
90
+ }
91
+
92
+ .feedback-widget-button:not(.minimized) .feedback-trigger-btn:hover .feedback-minimize-icon {
93
+ opacity: 1;
94
+ pointer-events: auto;
95
+ }
96
+
97
+ .feedback-widget-button.minimized .feedback-trigger-btn {
98
+ padding: var(--spacing-3);
99
+ width: 48px;
100
+ height: 48px;
101
+ justify-content: center;
102
+ }
103
+
104
+ .feedback-widget-button.minimized .feedback-text {
105
+ display: none;
106
+ }
107
+
108
+ .feedback-widget-button.minimized .feedback-minimize-icon {
109
+ display: none;
110
+ }
111
+
112
+ .feedback-widget-button.minimized .feedback-trigger-btn:hover .feedback-expand-icon {
113
+ opacity: 1;
114
+ pointer-events: auto;
115
+ }
116
+
117
+ .feedback-panel,
118
+ .feedback-modal {
119
+ box-sizing: border-box;
120
+ }
121
+
122
+ .feedback-panel *,
123
+ .feedback-panel *::before,
124
+ .feedback-panel *::after,
125
+ .feedback-modal *,
126
+ .feedback-modal *::before,
127
+ .feedback-modal *::after {
128
+ box-sizing: border-box;
129
+ }
130
+
131
+ .feedback-panel {
132
+ position: fixed;
133
+ bottom: 80px;
134
+ right: var(--spacing-6);
135
+ width: 420px;
136
+ max-height: 500px;
137
+ z-index: var(--z-popover);
138
+ border-radius: 12px;
139
+ overflow: hidden;
140
+ opacity: 0;
141
+ transform: translateX(calc(100% + 24px));
142
+ transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s ease;
143
+ font-family: inherit;
144
+ box-shadow: var(--shadow-lg);
145
+ }
146
+
147
+ .feedback-panel.open {
148
+ transform: translateX(0);
149
+ opacity: 1;
150
+ }
151
+
152
+ .feedback-panel.panel-from-left {
153
+ right: auto;
154
+ left: var(--spacing-6);
155
+ transform: translateX(calc(-100% - 24px));
156
+ }
157
+
158
+ .feedback-panel.panel-from-left.open {
159
+ transform: translateX(0);
160
+ }
161
+
162
+ .feedback-modal {
163
+ position: fixed;
164
+ top: 50%;
165
+ left: 50%;
166
+ border-radius: 12px;
167
+ overflow: hidden;
168
+ opacity: 0;
169
+ transform: translate(-50%, -50%) scale(0.96);
170
+ width: min(460px, calc(100vw - (var(--spacing-5) * 2)));
171
+ max-height: min(560px, calc(100vh - (var(--spacing-6) * 2)));
172
+ z-index: var(--z-popover);
173
+ transition: transform var(--transition-slow), opacity var(--transition-slow);
174
+ font-family: inherit;
175
+ box-shadow: var(--shadow-xl);
176
+ }
177
+
178
+ .feedback-modal.open {
179
+ transform: translate(-50%, -50%) scale(1);
180
+ opacity: 1;
181
+ }
182
+
183
+ .feedback-panel-content {
184
+ background: var(--feedback-panel-bg, var(--color-white));
185
+ color: var(--feedback-panel-text, var(--color-text-primary));
186
+ height: 100%;
187
+ display: flex;
188
+ flex-direction: column;
189
+ }
190
+
191
+ .feedback-panel-header {
192
+ display: flex;
193
+ align-items: center;
194
+ justify-content: space-between;
195
+ padding: var(--spacing-4) var(--spacing-6);
196
+ border-bottom: 1px solid var(--color-border);
197
+ flex-shrink: 0;
198
+ }
199
+
200
+ .feedback-panel-header h3 {
201
+ margin: 0;
202
+ font-size: var(--font-size-xl);
203
+ font-weight: var(--font-weight-semibold);
204
+ color: var(--feedback-panel-text, var(--color-text-primary));
205
+ }
206
+
207
+ .feedback-panel-body {
208
+ flex: 1;
209
+ overflow-y: auto;
210
+ overflow-x: hidden;
211
+ padding: var(--spacing-6);
212
+ }
213
+
214
+ .feedback-form {
215
+ display: flex;
216
+ flex-direction: column;
217
+ height: 100%;
218
+ }
219
+
220
+ .feedback-form-actions {
221
+ display: flex;
222
+ flex-direction: column;
223
+ gap: var(--spacing-3);
224
+ margin-top: auto;
225
+ padding-top: var(--spacing-6);
226
+ }
227
+
228
+ .feedback-error {
229
+ color: #ffffff;
230
+ font-size: var(--font-size-base);
231
+ font-weight: var(--font-weight-normal);
232
+ margin-top: var(--spacing-2);
233
+ padding: var(--spacing-3);
234
+ background: #D13212;
235
+ border-radius: var(--radius-md);
236
+ display: none;
237
+ }
238
+
239
+ .feedback-error.show {
240
+ display: block;
241
+ }
242
+
243
+ /* ========================================
244
+ DARK THEME — scoped variable overrides
245
+ ======================================== */
246
+
247
+ .feedback-panel.theme-dark,
248
+ .feedback-modal.theme-dark {
249
+ /* Aligned with messenger dark theme */
250
+ --color-white: #0f1317;
251
+ --color-background: #0f1317;
252
+ --color-surface: #1a1e24;
253
+ --color-border: #232930;
254
+ --color-neutral-50: #1a1e24;
255
+ --color-neutral-100: #1a1e24;
256
+ --color-neutral-200: #232930;
257
+ --color-neutral-300: #2d343c;
258
+ --color-neutral-400: #555555;
259
+ --color-neutral-500: #777777;
260
+ --color-neutral-900: #e8e8e8;
261
+ --color-text-primary: #e8e8e8;
262
+ --color-text-secondary: #999999;
263
+ --color-text-tertiary: #666666;
264
+ --feedback-panel-bg: #1a1e24;
265
+ --feedback-panel-text: #e8e8e8;
266
+ }
267
+
268
+ @media (max-width: 768px) {
269
+ .feedback-widget-button {
270
+ bottom: var(--spacing-4);
271
+ right: var(--spacing-4);
272
+ }
273
+
274
+ .feedback-widget-button.position-left {
275
+ left: var(--spacing-4);
276
+ }
277
+
278
+ .feedback-minimize-icon,
279
+ .feedback-expand-icon {
280
+ top: -4px;
281
+ right: -4px;
282
+ width: 20px;
283
+ height: 20px;
284
+ }
285
+
286
+ .feedback-minimize-icon svg,
287
+ .feedback-expand-icon svg {
288
+ width: 14px;
289
+ height: 14px;
290
+ }
291
+
292
+ .feedback-panel {
293
+ width: min(420px, calc(100vw - (var(--spacing-4) * 2)));
294
+ max-height: min(500px, calc(100vh - 88px));
295
+ top: auto;
296
+ bottom: 72px;
297
+ right: var(--spacing-4);
298
+ left: auto;
299
+ transform: translateX(calc(100% + 24px));
300
+ border-radius: var(--radius-2xl);
301
+ }
302
+
303
+ .feedback-panel.panel-from-left {
304
+ right: auto;
305
+ left: var(--spacing-4);
306
+ transform: translateX(calc(-100% - 24px));
307
+ }
308
+
309
+ .feedback-panel.open {
310
+ transform: translateX(0);
311
+ }
312
+
313
+ .feedback-panel-header {
314
+ padding: var(--spacing-4) var(--spacing-6);
315
+ }
316
+
317
+ .feedback-panel-body {
318
+ padding: var(--spacing-6);
319
+ }
320
+
321
+ .feedback-form-group textarea {
322
+ min-height: 120px;
323
+ }
324
+ }
325
+ `;