@kindly/react-chat 2.36.0 → 2.36.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": "@kindly/react-chat",
3
- "version": "2.36.0",
3
+ "version": "2.36.1",
4
4
  "description": "Kindly Chat react component",
5
5
  "repository": "https://github.com/kindly-ai/kindly-chat/tree/main/packages/react-chat",
6
6
  "main": "dist/index.js",
@@ -15,7 +15,9 @@
15
15
  "build:local": "webpack -p",
16
16
  "prepublishOnly": "npm run build",
17
17
  "test": "jest src",
18
- "update:browserslist": "npx browserslist@latest --update-db"
18
+ "update:browserslist": "npx browserslist@latest --update-db",
19
+ "storybook": "start-storybook -p 6006",
20
+ "build-storybook": "build-storybook"
19
21
  },
20
22
  "browserslist": [
21
23
  "> 1% in NO",
@@ -60,6 +62,15 @@
60
62
  "@babel/plugin-transform-runtime": "^7.18.5",
61
63
  "@babel/preset-env": "^7.18.2",
62
64
  "@babel/preset-react": "^7.17.12",
65
+ "@storybook/addon-actions": "^6.5.9",
66
+ "@storybook/addon-essentials": "^6.5.9",
67
+ "@storybook/addon-interactions": "^6.5.9",
68
+ "@storybook/addon-links": "^6.5.9",
69
+ "@storybook/builder-webpack4": "^6.5.9",
70
+ "@storybook/jest": "^0.0.10",
71
+ "@storybook/manager-webpack4": "^6.5.9",
72
+ "@storybook/react": "^6.5.9",
73
+ "@storybook/testing-library": "^0.0.13",
63
74
  "@testing-library/jest-dom": "^5.16.4",
64
75
  "@testing-library/react": "^11.2.7",
65
76
  "babel-jest": "^26.6.3",
@@ -68,6 +79,7 @@
68
79
  "babel-plugin-transform-react-remove-prop-types": "^0.4.24",
69
80
  "babel-plugin-transform-remove-console": "^6.9.4",
70
81
  "browserslist": "^4.20.4",
82
+ "chromatic": "^6.5.6",
71
83
  "clean-webpack-plugin": "^3.0.0",
72
84
  "compression": "1.7.4",
73
85
  "dotenv": "8.6.0",
@@ -81,6 +93,7 @@
81
93
  "jest-each": "^26.6.2",
82
94
  "jest-junit": "^12.3.0",
83
95
  "jest-webpack-resolver": "^0.3.0",
96
+ "lodash.clonedeep": "^4.5.0",
84
97
  "pusher-js": "^5.1.1",
85
98
  "pusher-redux": "^0.5.0",
86
99
  "react": "^16.14.0",
@@ -88,6 +101,7 @@
88
101
  "react-svg-loader": "^3.0.3",
89
102
  "react-test-renderer": "16.14.0",
90
103
  "resolve-url-loader": "^5.0.0",
104
+ "storybook-addon-mock": "^2.4.1",
91
105
  "url-loader": "2.3.0",
92
106
  "webpack": "^4.46.0",
93
107
  "webpack-bundle-analyzer": "^3.9.0",
@@ -99,5 +113,5 @@
99
113
  "silent": true,
100
114
  "webpackConfig": "./webpack.config.js"
101
115
  },
102
- "gitHead": "81b9fbe6aadac3209a521647ce16e1d466918358"
116
+ "gitHead": "f3a449ac06dd323091262d35750b73a70c541b97"
103
117
  }
@@ -0,0 +1,449 @@
1
+ export default {
2
+ style: {
3
+ color_chat_log_elements: '#333333',
4
+ color_button_background: '#0069ff',
5
+ color_button_outline: '#FF0000',
6
+ color_bubble_button_background: '#0069ff',
7
+ color_button_text: '#ffffff',
8
+ color_background: '#ffffff',
9
+ color_header_background: '#0069ff',
10
+ color_header_text: '#ffffff',
11
+ color_input_background: '#edeeef',
12
+ color_input_text: '#333333',
13
+ color_user_message_background: '#0069ff',
14
+ color_user_message_text_color: '#ffffff',
15
+ color_bot_message_background: '#f5f5f5',
16
+ color_bot_message_text_color: '#2c2c2c',
17
+ },
18
+ notifications: {
19
+ tab_notification: true,
20
+ sound_notification: true,
21
+ bubble_notification: true,
22
+ use_push_greetings: true,
23
+ push_greetings: [],
24
+ },
25
+ welcome_page: {
26
+ image: null,
27
+ type: 'COLOR',
28
+ header: {
29
+ en: 'Hi, welcome to our chatbot!',
30
+ nb: 'Hei, velkommen til chatboten vår!',
31
+ nn: 'Hei, velkommen til chatboten vår!',
32
+ sv: 'Hej, välkommen till vår chatbot!',
33
+ },
34
+ text: {
35
+ en: '<p>Our chatbot is trained to answer questions about our product, but is continuously learning.\nTry to make your questions as precise as possible.\nDo not provide the chatbot with any personal information.</p>',
36
+ nb: '<p>Chatboten vår er opplært til å svare på det meste om produktet vårt, og lærer kontinuerlig.\nStill helst korte og presise spørsmål.\nIkke oppgi sensitiv informasjon i chatten.</p>',
37
+ nn: '<p>Chatboten vår er opplært til å svare på det meste om produktet vårt, og lærer kontinuerlig.\nStill helst korte og presise spørsmål.\nIkke oppgi sensitiv informasjon i chatten.</p>',
38
+ sv: '<p>Vår chatbot är tränad för att hjälpa dig med de frågor du har om vår produkt, och lärer kontinuerligt.\nStäll korta och precisa frågor.\nGe inte chatboten personlig information.</p>',
39
+ },
40
+ start_button: {
41
+ en: 'Start chat',
42
+ nb: 'Start chat',
43
+ nn: 'Start chat',
44
+ sv: 'Start chat',
45
+ },
46
+ },
47
+ feedback_form: {
48
+ type: 'EMOJIS',
49
+ freeform_enabled: true,
50
+ binary_headline: {
51
+ en: 'Did you find what you were looking for?',
52
+ nb: 'Fikk du svar på det du lurte på?',
53
+ nn: 'Fekk du svar på det du lurte på?',
54
+ sv: 'Fick du svar på dina frågor?',
55
+ },
56
+ binary_1: {
57
+ en: 'Yes',
58
+ nb: 'Ja',
59
+ nn: 'Ja',
60
+ sv: 'Ja',
61
+ },
62
+ binary_0: {
63
+ en: 'No',
64
+ nb: 'Nei',
65
+ nn: 'Nei',
66
+ sv: 'Nej',
67
+ },
68
+ emoji_headline: {
69
+ en: 'Rate the conversation',
70
+ nb: 'Vurder samtalen',
71
+ nn: 'Vurder samtalen',
72
+ sv: 'Utvärdera samtalet',
73
+ },
74
+ emoji_guideline: {
75
+ en: 'Click on a smiley to give your opinion.',
76
+ nb: 'Klikk på et smilefjes for å gi din tilbakemelding.',
77
+ nn: 'Klikk på eit smilefjes for å gi ei tilbakemelding.',
78
+ sv: 'Klicka på en smiley för att ge din feedback.',
79
+ },
80
+ freeform_description: {
81
+ en: 'We would love to hear your opinion of the conversation, so that we can improve the experience!',
82
+ nb: 'Gi gjerne en tilbakemelding på samtalen, slik at vi kan gjøre opplevelsen bedre!',
83
+ nn: 'Gi gjerne ei tilbakemelding på samtalen, slik at vi kan gjere opplevinga betre!',
84
+ sv: 'Hjälp oss förbättra samtalsupplevelsen. Vi tar gärna emot dina synpunkter.',
85
+ },
86
+ freeform_placeholder: {
87
+ en: 'Write here',
88
+ nb: 'Skriv her',
89
+ nn: 'Skriv her',
90
+ sv: 'Skriv här',
91
+ },
92
+ back: {
93
+ en: 'Back to chat',
94
+ nb: 'Tilbake til chat',
95
+ nn: 'Tilbake til chat',
96
+ sv: 'Tillbaka till chatten',
97
+ },
98
+ send: {
99
+ en: 'Send',
100
+ nb: 'Send',
101
+ nn: 'Send',
102
+ sv: 'Skicka',
103
+ },
104
+ thanks: {
105
+ en: 'Thank you very much!',
106
+ nb: 'Tusen takk for hjelpen!',
107
+ nn: 'Tusen takk for hjelpa!',
108
+ sv: 'Tusen tack för ditt svar!',
109
+ },
110
+ external_link_headline: {
111
+ en: 'Did you find what you were looking for?',
112
+ nb: 'Fikk du svar på det du lurte på?',
113
+ nn: 'Fekk du svar på det du lurte på?',
114
+ sv: 'Fick du svar på det du undrade över?',
115
+ },
116
+ external_link_text: {
117
+ en: 'Give feedback',
118
+ nb: 'Gi tilbakemelding',
119
+ nn: 'Gje tilbakemelding',
120
+ sv: 'Ge synpunkter',
121
+ },
122
+ external_link_url: {},
123
+ },
124
+ chatbubble: {
125
+ domains: ['*'],
126
+ key: 'a74ed93d-2690-4d0c-92bf-7ee84578e43d',
127
+ realtime_analytics: true,
128
+ heartbeat_enabled: false,
129
+ heartbeat_ttl_s: 60,
130
+ persist_state: true,
131
+ persist_state_lifespan_seconds: -1,
132
+ autopopup: false,
133
+ autopopup_time: 10000,
134
+ keep_open: false,
135
+ keep_open_mobile: false,
136
+ input_limit_enabled: true,
137
+ input_limit: 140,
138
+ auth_public_key:
139
+ '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyREU15viox0kxWLPQlv6\n8P0rwpyhO5GDLQLU4SalIFr5mNP7gS+mYiKBhOxfsEBGASWp3GlltxeSKN8YsE9k\nsTUvgA/8fDhTDzZ2B+UYD24ANGj+WzbnqDXWRXEL62Nq6NtLEE0hl7H+56klsqo8\nMqeABV9No35fhhwWAPJNi0HnLoGQonn7QbAMNsOTHvuIZcnyyVWbMz4Y66Rn2LF+\nc+5/oetnEQmUXoc/HF+jo8Dh2I3/6Z0y3QqK+xZbiw7jYyuxkvEeWOP9J94Ql2qT\n1AUsA0cF0/W7sGVv7l84htuFJxdtS1gHu6a53Kmh1qZKMZwPdYoQsLKsIhMj8Omg\nwwIDAQAB\n-----END PUBLIC KEY-----',
140
+ },
141
+ maintenance_alert: {
142
+ alert_enabled: false,
143
+ link_text: {
144
+ en: '',
145
+ nb: '',
146
+ nn: '',
147
+ sv: '',
148
+ },
149
+ link_location: {
150
+ en: '',
151
+ nb: '',
152
+ nn: '',
153
+ sv: '',
154
+ },
155
+ text_content: {
156
+ en: '',
157
+ nb: '',
158
+ nn: '',
159
+ sv: '',
160
+ },
161
+ },
162
+ text: {
163
+ placeholder: {
164
+ en: 'Ask me a question…',
165
+ nb: 'Ask me a question…',
166
+ },
167
+ change_language_button: {
168
+ en: 'Change language',
169
+ nb: 'Endre språk',
170
+ nn: 'Endre språk',
171
+ sv: 'Ändra språk',
172
+ },
173
+ start_over_button: {
174
+ en: 'Start over',
175
+ nb: 'Start på nytt',
176
+ nn: 'Start på nytt',
177
+ sv: 'Börja om',
178
+ },
179
+ download_button: {
180
+ en: 'Download chat',
181
+ nb: 'Last ned samtale',
182
+ nn: 'Last ned samtalen',
183
+ sv: 'Ladda ner samtalet',
184
+ },
185
+ delete_button: {
186
+ en: 'Delete chat log',
187
+ nb: 'Slett chatloggen',
188
+ nn: 'Slett chatloggen',
189
+ sv: 'Radera chatloggen',
190
+ },
191
+ delete_text: {
192
+ en: 'Are you sure you want to delete the chat log?',
193
+ nb: 'Er du sikker på at du vil slette chatloggen?',
194
+ nn: 'Er du sikker på at du vil sletta chatloggen?',
195
+ sv: 'Är du säker på att du vill radera chatloggen?',
196
+ },
197
+ download_format_text: {
198
+ en: 'Select the format best suited for you. Not sure? Choose HTML.',
199
+ nb: 'Velg formatet som passer deg best. Er du usikker, velg HTML.',
200
+ nn: 'Velg formatet som passar deg best. Er du usikker, velg HTML.',
201
+ sv: 'Välj vilket format som passar dig bäst. Är du osäker, välj HTML',
202
+ },
203
+ chat_deleted_header: {
204
+ en: 'Your chat has been deleted.',
205
+ nb: 'Samtalen din er slettet.',
206
+ nn: 'Din samtale er no sletta.',
207
+ sv: 'Ditt samtal är raderat.',
208
+ },
209
+ chat_deleted_text: {
210
+ en: 'The chat closes automatically. Click on the chat bubble to start a new conversation.',
211
+ nb: 'Chatten avsluttes automatisk. Klikk på chatboblen for å starte en ny samtale.',
212
+ nn: 'Chatten blir automatisk avslutta. Klikk på chatbobla for å starte ein ny samtale.',
213
+ sv: 'Chatten avslutas automatiskt. Tryck på chattbubblan för att starta ett nytt samtal.',
214
+ },
215
+ back_to_chat_button: {
216
+ en: 'Return to chat',
217
+ nb: 'Tilbake til chat',
218
+ nn: 'Tilbake til chat',
219
+ sv: 'Tillbaka till chat',
220
+ },
221
+ change_language_text: {
222
+ en: 'The chat will reset when you change the language',
223
+ nb: 'Når du endrer språk, starter samtalen på nytt',
224
+ nn: 'Når du endrer språk, starter samtalen på nytt',
225
+ sv: 'När du ändrar språk, startar samtalet på nytt',
226
+ },
227
+ cancel_chat_text: {
228
+ en: 'Would you like to cancel the chat?',
229
+ nb: 'Vil du avslutte samtalen?',
230
+ nn: 'Vil du avslutta samtalen?',
231
+ sv: 'Vill du avsluta samtalet?',
232
+ },
233
+ cancel_chat_button: {
234
+ en: 'Cancel chat',
235
+ nb: 'Avslutt samtale',
236
+ nn: 'Avslutt samtalen',
237
+ sv: 'Avsluta samtalet',
238
+ },
239
+ confirm_action_button: {
240
+ en: 'Confirm',
241
+ nb: 'Bekreft',
242
+ nn: 'Bekreft',
243
+ sv: 'Bekräfta',
244
+ },
245
+ disabled_input_text: {
246
+ en: 'Select any of the buttons above',
247
+ nb: 'Velg en av knappene over',
248
+ nn: 'Vel ein av knappane over',
249
+ sv: 'Välj en av knapparna över',
250
+ },
251
+ agent_joined_text: {
252
+ en: 'joined the conversation',
253
+ nb: 'har blitt med i samtalen',
254
+ nn: 'har blitt med i samtala',
255
+ sv: 'är med i chatten',
256
+ },
257
+ agent_left_text: {
258
+ en: 'left the conversation',
259
+ nb: 'har forlatt samtalen',
260
+ nn: 'har forlate samtala',
261
+ sv: 'har lämnat chatten',
262
+ },
263
+ handover_queue_text: {
264
+ en: 'Waiting for manual chat',
265
+ nb: 'Venter på manuell chat',
266
+ nn: 'Ventar på manuell chat',
267
+ sv: 'Vänta på manuell chatt',
268
+ },
269
+ handover_queue_link: {
270
+ en: 'Leave queue',
271
+ nb: 'Forlat kø',
272
+ nn: 'Forlat kø',
273
+ sv: 'Lämna chattkön',
274
+ },
275
+ takeover_queue_text: {
276
+ en: 'Waiting for manual chat',
277
+ nb: 'Venter på manuell chat',
278
+ nn: 'Ventar på manuell chat',
279
+ sv: 'Vänta på manuell chatt',
280
+ },
281
+ takeover_queue_link: {
282
+ en: 'Leave queue',
283
+ nb: 'Forlat kø',
284
+ nn: 'Forlat kø',
285
+ sv: 'Lämna chattkön',
286
+ },
287
+ leave_queue_text: {
288
+ en: 'Leaving queue',
289
+ nb: 'Forlater kø',
290
+ nn: 'Forlater kø',
291
+ sv: 'lämnar kö',
292
+ },
293
+ leave_queue_link: {
294
+ en: 'Stay in queue',
295
+ nb: 'Behold plassen i køen',
296
+ nn: 'Behold plassen i køen',
297
+ sv: 'Behåll platsen i chattkön',
298
+ },
299
+ },
300
+ nudges: {
301
+ form_nudges: [
302
+ {
303
+ id: '8b9a745c-d094-4279-8842-a385aeff0b15',
304
+ type: 'Form',
305
+ enabled: { en: true },
306
+ slug: 'form_nudge',
307
+ title: { en: 'Form nudge title' },
308
+ body_text: { en: 'Form nudge body' },
309
+ analytics_completion_page_path: null,
310
+ input_label: { en: 'Enter your email address' },
311
+ input_placeholder: { en: 'Email address' },
312
+ dialogue_id: '076e424b-4752-422a-8781-235df547a6ad',
313
+ webhook: '',
314
+ },
315
+ ],
316
+ product_nudges: [
317
+ {
318
+ id: '9764929d-149a-4fae-ab3a-7a7d6a476ce5',
319
+ type: 'Product',
320
+ enabled: {
321
+ en: true,
322
+ },
323
+ slug: 'product_nudge',
324
+ title: {
325
+ en: 'Product Nudge',
326
+ },
327
+ body_text: {
328
+ en: 'Find the best product for your needs!',
329
+ },
330
+ analytics_completion_page_path: null,
331
+ button_text: {
332
+ en: 'Call to action button',
333
+ },
334
+ button_link: {
335
+ en: 'https://google.com',
336
+ },
337
+ carousel_title: {
338
+ en: 'This is a carousel',
339
+ },
340
+ image_carousel: {
341
+ en: [
342
+ {
343
+ id: '1',
344
+ title: 'Image title',
345
+ alt_text: 'altText',
346
+ description: 'description',
347
+ image_url: 'https://i.imgur.com/wcfVY0C.png',
348
+ product_url: 'https://example.com',
349
+ link_text: 'Find out more',
350
+ link_url: 'https://example.com',
351
+ price: 10,
352
+ },
353
+ {
354
+ id: '2',
355
+ title: 'Image title',
356
+ alt_text: 'altText',
357
+ description: 'description',
358
+ image_url: 'https://i.imgur.com/wcfVY0C.png',
359
+ product_url: 'https://example.com',
360
+ link_text: 'Find out more',
361
+ link_url: 'https://example.com',
362
+ price: 10,
363
+ },
364
+ ],
365
+ },
366
+ },
367
+ ],
368
+ text_nudges: [
369
+ {
370
+ id: '5d9fd22f-5dae-4d18-bd14-fd2aaace1ff4',
371
+ type: 'Text',
372
+ enabled: { en: true },
373
+ slug: 'text_nudge',
374
+ title: { en: 'Text nudge title' },
375
+ body_text: { en: 'Text nudge body' },
376
+ analytics_completion_page_path: null,
377
+ link_text: { en: 'Call to action' },
378
+ link_location: { en: '#' },
379
+ url_trigger: '',
380
+ autopopup_time: 1000,
381
+ },
382
+ ],
383
+ custom_nudges: [
384
+ {
385
+ id: '89bb6609-e272-4810-b041-7239f53e53bb',
386
+ type: 'Custom',
387
+ enabled: { en: true },
388
+ slug: 'custom_nudge',
389
+ title: {},
390
+ body_text: {},
391
+ analytics_completion_page_path: '/order/',
392
+ text_blocks: [
393
+ { value: { en: 'First line' }, slug: 'text' },
394
+ { value: { en: 'Second line' }, slug: 'text2' },
395
+ { value: { en: 'Third line' }, slug: 'text3' },
396
+ ],
397
+ },
398
+ ],
399
+ multiple_choice_nudges: [
400
+ {
401
+ id: 'b4d7134e-88c8-40a1-bed4-d238362cfb08',
402
+ type: 'Multiple choice',
403
+ enabled: { en: true },
404
+ slug: 'multiple_choice_nudge',
405
+ title: { en: 'Multiple choice nudge title' },
406
+ body_text: { en: 'Multiple choice nudge body' },
407
+ analytics_completion_page_path: null,
408
+ button_blocks: [
409
+ { button_text: { en: 'First button' }, dialogue_id: null },
410
+ { button_text: { en: 'Second button' }, dialogue_id: null },
411
+ { button_text: { en: 'Third button' }, dialogue_id: null },
412
+ { button_text: { en: 'Fourth button' }, dialogue_id: null },
413
+ ],
414
+ },
415
+ ],
416
+ },
417
+ settings: {
418
+ id: 2852,
419
+ name: 'Storybook',
420
+ languages: [
421
+ {
422
+ code: 'en',
423
+ name: 'English',
424
+ active: true,
425
+ },
426
+ ],
427
+ avatar: 'https://i.imgur.com/PUWEkan.png',
428
+ bubble_size: 'NORMAL',
429
+ use_bubble_outline: false,
430
+ typing_indicator: true,
431
+ typing_duration: 4260,
432
+ disabled_transports: [],
433
+ user_idle_timeout_seconds: 1200,
434
+ updated_at: '2022-05-23T13:20:48+00:00',
435
+ refreshed_at: '2022-06-01T11:43:52+00:00',
436
+ show_handover_queue: true,
437
+ track_utm: true,
438
+ show_takeover_queue: true,
439
+ seasonal_appearance: null,
440
+ no_feedback_after_handover: false,
441
+ handover_mode: 'PLATFORM',
442
+ chatbubble_heartbeat_enabled: false,
443
+ chatbubble_heartbeat_ttl_s: 60,
444
+ email_enabled: true,
445
+ conversion_page_url: null,
446
+ split_test_enabled: false,
447
+ text_right_to_left: false,
448
+ },
449
+ };
@@ -0,0 +1,13 @@
1
+ import React, { Suspense } from 'react';
2
+
3
+ const withContainer = (Story, options) => {
4
+ return (
5
+ <Suspense fallback="">
6
+ <Story chatSettings={options.parameters.botSettings} />
7
+ </Suspense>
8
+ );
9
+ };
10
+
11
+ withContainer.displayName = 'ContainerDecorator';
12
+
13
+ export default withContainer;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+
3
+ import MockProvider from '../../testing/MockProvider';
4
+
5
+ const withMockProvider = (Story, options) => {
6
+ return (
7
+ <MockProvider
8
+ storeData={{
9
+ botKey: '1234aaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
10
+ settings: options.parameters.botSettings,
11
+ initialStateModifier: options.args.initialStateModifierFromArgs
12
+ ? options.args.initialStateModifierFromArgs(options.args)
13
+ : options.parameters.initialStateModifier,
14
+ persist: false,
15
+ }}
16
+ >
17
+ <Story {...options} />
18
+ </MockProvider>
19
+ );
20
+ };
21
+
22
+ export default withMockProvider;