@botfabrik/engine-webclient 4.0.1-alpha.7 → 4.0.1-alpha.8

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.
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "files": {
3
- "main.css": "./static/css/main.2b9836cb.chunk.css",
4
- "main.js": "./static/js/main.40572d8f.chunk.js",
5
- "main.js.map": "./static/js/main.40572d8f.chunk.js.map",
3
+ "main.css": "./static/css/main.4e8311d6.chunk.css",
4
+ "main.js": "./static/js/main.59367046.chunk.js",
5
+ "main.js.map": "./static/js/main.59367046.chunk.js.map",
6
6
  "runtime-main.js": "./static/js/runtime-main.f63e6028.js",
7
7
  "runtime-main.js.map": "./static/js/runtime-main.f63e6028.js.map",
8
8
  "static/js/2.573c71be.chunk.js": "./static/js/2.573c71be.chunk.js",
9
9
  "static/js/2.573c71be.chunk.js.map": "./static/js/2.573c71be.chunk.js.map",
10
10
  "index.html": "./index.html",
11
- "precache-manifest.aef080c7696c5d03460edb5f3a543d67.js": "./precache-manifest.aef080c7696c5d03460edb5f3a543d67.js",
11
+ "precache-manifest.50d4f934072c1d42988623c7fc676127.js": "./precache-manifest.50d4f934072c1d42988623c7fc676127.js",
12
12
  "service-worker.js": "./service-worker.js",
13
- "static/css/main.2b9836cb.chunk.css.map": "./static/css/main.2b9836cb.chunk.css.map",
13
+ "static/css/main.4e8311d6.chunk.css.map": "./static/css/main.4e8311d6.chunk.css.map",
14
14
  "static/js/2.573c71be.chunk.js.LICENSE.txt": "./static/js/2.573c71be.chunk.js.LICENSE.txt"
15
15
  },
16
16
  "entrypoints": [
17
17
  "static/js/runtime-main.f63e6028.js",
18
18
  "static/js/2.573c71be.chunk.js",
19
- "static/css/main.2b9836cb.chunk.css",
20
- "static/js/main.40572d8f.chunk.js"
19
+ "static/css/main.4e8311d6.chunk.css",
20
+ "static/js/main.59367046.chunk.js"
21
21
  ]
22
22
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Botfabrik Chat Client</title><link href="./static/css/main.2b9836cb.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><link rel="stylesheet" href="./custom.css"><script>!function(e){function t(t){for(var n,l,i=t[0],f=t[1],a=t[2],p=0,s=[];p<i.length;p++)l=i[p],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(c&&c(t);s.length;)s.shift()();return u.push.apply(u,a||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,i=1;i<r.length;i++){var f=r[i];0!==o[f]&&(n=!1)}n&&(u.splice(t--,1),e=l(l.s=r[0]))}return e}var n={},o={1:0},u=[];function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="./";var i=this.webpackJsonpclient=this.webpackJsonpclient||[],f=i.push.bind(i);i.push=t,i=i.slice();for(var a=0;a<i.length;a++)t(i[a]);var c=f;r()}([])</script><script src="./static/js/2.573c71be.chunk.js"></script><script src="./static/js/main.40572d8f.chunk.js"></script></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Botfabrik Chat Client</title><link href="./static/css/main.4e8311d6.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><link rel="stylesheet" href="./custom.css"><script>!function(e){function t(t){for(var n,l,i=t[0],f=t[1],a=t[2],p=0,s=[];p<i.length;p++)l=i[p],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(c&&c(t);s.length;)s.shift()();return u.push.apply(u,a||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,i=1;i<r.length;i++){var f=r[i];0!==o[f]&&(n=!1)}n&&(u.splice(t--,1),e=l(l.s=r[0]))}return e}var n={},o={1:0},u=[];function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="./";var i=this.webpackJsonpclient=this.webpackJsonpclient||[],f=i.push.bind(i);i.push=t,i=i.slice();for(var a=0;a<i.length;a++)t(i[a]);var c=f;r()}([])</script><script src="./static/js/2.573c71be.chunk.js"></script><script src="./static/js/main.59367046.chunk.js"></script></body></html>
@@ -1,11 +1,11 @@
1
1
  self.__precacheManifest = (self.__precacheManifest || []).concat([
2
2
  {
3
- "revision": "dfa32043a256d1cc6363faf16e4f2000",
3
+ "revision": "b92f791bfed4bb1546ea412f9c6480fe",
4
4
  "url": "./index.html"
5
5
  },
6
6
  {
7
- "revision": "05d0319d084415e9b604",
8
- "url": "./static/css/main.2b9836cb.chunk.css"
7
+ "revision": "e07d3fdc7061211f9891",
8
+ "url": "./static/css/main.4e8311d6.chunk.css"
9
9
  },
10
10
  {
11
11
  "revision": "822f166aeb601ecbcef4",
@@ -16,8 +16,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
16
16
  "url": "./static/js/2.573c71be.chunk.js.LICENSE.txt"
17
17
  },
18
18
  {
19
- "revision": "05d0319d084415e9b604",
20
- "url": "./static/js/main.40572d8f.chunk.js"
19
+ "revision": "e07d3fdc7061211f9891",
20
+ "url": "./static/js/main.59367046.chunk.js"
21
21
  },
22
22
  {
23
23
  "revision": "f35dbb30bb93cebd5c82",
@@ -14,7 +14,7 @@
14
14
  importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
15
15
 
16
16
  importScripts(
17
- "./precache-manifest.aef080c7696c5d03460edb5f3a543d67.js"
17
+ "./precache-manifest.50d4f934072c1d42988623c7fc676127.js"
18
18
  );
19
19
 
20
20
  self.addEventListener('message', (event) => {
@@ -0,0 +1,2 @@
1
+ @import url(//fonts.googleapis.com/css?family=Roboto:400,300,700,500,100,200);html{font-family:"Roboto",sans-serif}body{margin:0}.Client_chatPage__126Ne{display:flex;flex-direction:column;height:100vh}@media (min-width:36rem){.Client_chatPage__126Ne{flex-direction:row}}.Chat_chatwindow__2gTsn{display:flex;flex-flow:column nowrap;width:100%;height:100vh;max-width:48rem;margin-left:auto;margin-right:auto}@media (min-width:36rem){.Chat_chatwindow__2gTsn{padding-right:1rem}}@media (min-height:14rem){.Chat_chatwindow__2gTsn{background-color:#fff}}.InputContainer_inputContainer__3uWNo{width:100%;background-color:#fff;padding:0 1rem 1rem}@media (max-height:14rem){.InputContainer_inputContainer__3uWNo{background-color:transparent;font-size:.8rem;padding:0 1rem}}.Global_button__33oEy{display:inline-block;font-family:Roboto,sans-serif;font-size:1em;padding:.5em 1em;border-radius:.2rem;background-color:#fff;border:2px solid #fff;color:#008fd7;cursor:pointer;transition:all .2s linear;text-align:center}.Global_button__33oEy:hover{color:#fff;background-color:#008fd7}svg{fill:currentColor}.QuickReplies_quickReplies__26tJr{display:flex;flex-flow:row wrap;justify-content:flex-end;padding-bottom:.4rem;margin:0 -.3rem}.QuickReplies_quickReply__PrklG{margin-top:.5em;margin-right:.5em;background-color:#eee;color:#717171;border:0}.QuickReplies_more__2X1pI{display:none}@media (max-height:14rem){.QuickReplies_quickReplies__26tJr{flex-flow:row nowrap}.QuickReplies_quickReply__PrklG{padding:.6rem .8rem}.QuickReplies_more__2X1pI{padding:.3rem .6rem;font-size:1rem;font-weight:900;line-height:1.5;color:#eee;background-color:#4a4a4a;border:1px solid #eee}}@media (min-width:40rem){.QuickReplies_quickReplies__26tJr{font-size:1.2rem}.QuickReplies_quickReply__PrklG{padding-left:1.5em;padding-right:1.5em}}.AudioRecorder_audioRecorder__37BQJ{display:flex}.AudioRecorder_recordButton__3-QeV{display:block;margin:0;border:0;background-color:#fff;color:#717171}.AudioRecorder_recordButton__3-QeV:hover{background-color:#008fd7;color:#fff}.AudioRecorder_submitButton__10pVF{display:block;margin:0;border:0;background-color:#fff;color:#008fd7}.AudioRecorder_submitButton__10pVF:hover{background-color:#008fd7;color:#fff}.AudioRecorder_cancelButton__64CTn{display:block;margin:0;border:0;background-color:#fff;color:#008fd7}.AudioRecorder_cancelButton__64CTn:hover{background-color:#008fd7;color:#fff}.AudioRecorder_recorderIcon__2o4Ov{width:1.3em;height:1.3em;border-radius:50%;-webkit-animation:AudioRecorder_pulse__3Xsbm 2s infinite;animation:AudioRecorder_pulse__3Xsbm 2s infinite;margin:auto .6em}@-webkit-keyframes AudioRecorder_pulse__3Xsbm{0%{background-color:#fff}40%{background-color:red}60%{background-color:red}to{background-color:#fff}}@keyframes AudioRecorder_pulse__3Xsbm{0%{background-color:#fff}40%{background-color:red}60%{background-color:red}to{background-color:#fff}}.AudioRecorder_spinning__1hO3P{display:block;margin:auto;color:#717171;-webkit-animation:AudioRecorder_spin__3bMw- 1.2s linear infinite;animation:AudioRecorder_spin__3bMw- 1.2s linear infinite}@-webkit-keyframes AudioRecorder_spin__3bMw-{to{transform:rotate(1turn)}}@keyframes AudioRecorder_spin__3bMw-{to{transform:rotate(1turn)}}.TextInput_inputWrapper__1fIyq{display:flex;line-height:0}@media (max-height:14rem){.TextInput_inputWrapper__1fIyq{display:none}}.TextInput_messageInputWrapper__6KJHK{flex:1 1;border-radius:.2rem;border:2px solid #bcbdc0;margin-right:.5rem}.TextInput_messageInput__2fCF7{font-size:1rem;border:none;height:100%;box-sizing:border-box;width:100%;outline-width:0;padding:.8rem 1rem;text-overflow:ellipsis;color:grey}.TextInput_sendMessage__2OtPU{margin:0;background-color:#008fd7;border-color:#008fd7;color:#fff}.TextInput_sendMessage__2OtPU svg{height:1.4rem;width:2.2rem;fill:currentColor}.TextInput_sendMessage__2OtPU:hover{color:#008fd7;background-color:#fff}.Upload_upload__20XMq{display:flex;flex-direction:row;justify-content:flex-end;padding-top:.4rem}.Upload_upload__20XMq span+span{margin-left:.3rem;margin-top:0}.Upload_upload__button__1CRlu{display:flex;align-items:center;height:3.4rem;width:100%;max-width:24rem;padding:2px 5px;margin:2px;color:#fff;background-color:#008fd7;border:2px solid #008fd7;border-radius:.2rem;cursor:pointer}.Upload_upload__button__1CRlu input[type=file]{position:fixed;top:-1000px}.Upload_upload__button__1CRlu svg{height:2rem;width:2rem;margin:.8rem;fill:currentColor}.Upload_upload__button__1CRlu:hover{background-color:#fff;color:#008fd7}.Upload_upload__button__1CRlu:active{background:#ccc;color:#008fd7}.Upload_upload__button__1CRlu:invalid+span{color:#a44}.Upload_upload__button__1CRlu:valid+span{color:#4a4}.Upload_upload__button__1CRlu.Upload_uploading__2pmWz{color:#fff;background:#ccc;border-color:#ccc;cursor:auto}.Upload_upload__button__1CRlu.Upload_uploading__2pmWz svg{position:relative;-webkit-animation:Upload_MoveUpDown__3z7Hm 1s ease-in infinite;animation:Upload_MoveUpDown__3z7Hm 1s ease-in infinite}@-webkit-keyframes Upload_MoveUpDown__3z7Hm{0%{bottom:0}to{bottom:3px}}@keyframes Upload_MoveUpDown__3z7Hm{0%{bottom:0}to{bottom:3px}}*{box-sizing:border-box}.Message_messageBot__3cmFc,.Message_messageUser__1PbuM{display:flex;margin-bottom:1.2rem;transition:all .5s linear}.Message_messageUser__1PbuM{justify-content:flex-end}.Message_avatar__1GG1t{width:3.75rem;height:3.75rem}@media only screen and (max-width:767px){.Message_messageBot__3cmFc,.Message_messageUser__1PbuM{margin-bottom:.7rem}.Message_avatar__1GG1t{width:2.5rem;height:2.5rem}}.Message_textWrapper__1ZhSM{display:inline-block;padding:.9em 1.3em;border-radius:6px;width:calc(100% - 5.3rem);min-width:6.25rem;max-width:30rem;position:relative}@media (max-height:14rem){.Message_textWrapper__1ZhSM{width:100%;max-height:3.2rem;margin-top:.3rem;padding:.4em .8em}.Message_avatar__1GG1t{margin-top:.3rem}}.Message_textWrapper__1ZhSM:before{top:1.1rem;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:.8rem solid transparent}@media only screen and (max-width:767px){.Message_textWrapper__1ZhSM:before{top:.5rem}}@media (max-height:14rem){.Message_text__hBn5S iframe{display:none}.Message_textWrapper__1ZhSM:before{top:.7rem}}.Message_leftTextWrapper__eSCQv{background-color:#008fd7;margin-left:1.25rem}.Message_leftTextWrapper__eSCQv:before{right:100%;border-right-color:#008fd7}.Message_leftText__1KoBc{color:#fff}.Message_leftText__1KoBc a{color:#fff!important}.Message_rightTextWrapper__2CSGi{background-color:#eee;margin-right:1.25rem}.Message_rightTextWrapper__2CSGi:before{left:100%;border-left-color:#eee}.Message_rightText__3RrIO,.Message_rightText__3RrIO a{color:#717171}.DetailMessage_image__2Gyth img{width:100%;position:relative}.DetailMessage_image_container__8LsJu{position:relative;text-align:center;color:#fff}.DetailMessage_play_button__1PWeA{width:15%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.DetailMessage_title__1RlQT{font-weight:700}.DetailMessage_subtitle__18WDj{margin-top:1rem}.DetailMessage_button__2eSMw{font-size:.9em;margin-top:.5em;margin-right:.5em}@media (max-height:14rem){.DetailMessage_image__2Gyth,.DetailMessage_title__1RlQT{display:none}.DetailMessage_subtitle__18WDj{margin-top:0}.DetailMessage_button__2eSMw{display:none}}@media only screen and (max-width:767px){.DetailMessage_title__1RlQT{font-size:1.1rem}}.DetailMessage_video_container__7lOBq{position:relative;width:100%;height:0;padding-bottom:56.25%}.DetailMessage_video__3VEwq{position:absolute;top:0;left:0;width:100%;height:100%}.Text_text__1zaFO{overflow-wrap:break-word}.MarkdownMessage_markdownMessage__15Vr7 *>:first-child{margin-top:0}.MarkdownMessage_markdownMessage__15Vr7 *>:last-child{margin-bottom:0}.MarkdownMessage_markdownMessage__15Vr7 table{width:100%}.MarkdownMessage_markdownMessage__15Vr7 img{max-width:100%;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0}.MarkdownMessage_markdownMessage__15Vr7 td:not(:last-child){padding-right:1rem}.MarkdownMessage_markdownMessage__15Vr7 ul{padding:0 0 0 1.1em}.MarkdownMessage_markdownMessage__15Vr7 ul>li{list-style-type:disc}.MarkdownMessage_markdownMessage__15Vr7 ol{padding:0 0 0 1.1em}.MarkdownMessage_markdownMessage__15Vr7 ol>li{list-style-type:decimal}.MessageContainer_messageContainer__1AKXT{flex:1 1;overflow-y:auto;padding-top:1rem;position:relative;-webkit-overflow-scrolling:touch}.MessageContainer_messages__2GeSj{position:relative;list-style:none;font-size:.9rem;line-height:1.4;padding:0 1rem;margin:0;overflow-wrap:break-word;word-wrap:break-word}@media (min-width:36rem){.MessageContainer_messageContainer__1AKXT{padding-top:2rem}.MessageContainer_messages__2GeSj{font-size:1rem;line-height:1.8}}@media (max-height:14rem){.MessageContainer_messageContainer__1AKXT{padding:0;overflow-y:unset;flex:0 0 auto}.MessageContainer_messageContainer__1AKXT li:not(:last-child){display:none}.MessageContainer_messageContainer__1AKXT li{margin-bottom:0!important}.MessageContainer_messages__2GeSj{padding:0 1rem;line-height:1.2rem}}.TypingIndicator_typingIndicator__1YwyE{background-color:#008fd7;width:auto;border-radius:5px;padding:1rem;display:table;margin-left:6rem;margin-bottom:.2rem;position:relative}.TypingIndicator_typingIndicator__1YwyE span{height:.25rem;width:.25rem;float:left;margin:0 1px;background-color:#fff;display:block;border-radius:50%;opacity:.3}.TypingIndicator_typingIndicator__1YwyE span:first-of-type{-webkit-animation:TypingIndicator_blink__3akB9 1s .3333s infinite;animation:TypingIndicator_blink__3akB9 1s .3333s infinite}@-webkit-keyframes TypingIndicator_blink__3akB9{50%{opacity:1}}.TypingIndicator_typingIndicator__1YwyE span:nth-of-type(2){-webkit-animation:TypingIndicator_blink__3akB9 1s .6666s infinite;animation:TypingIndicator_blink__3akB9 1s .6666s infinite}.TypingIndicator_typingIndicator__1YwyE span:nth-of-type(3){-webkit-animation:TypingIndicator_blink__3akB9 1s .9999s infinite;animation:TypingIndicator_blink__3akB9 1s .9999s infinite}@keyframes TypingIndicator_blink__3akB9{50%{opacity:1}}@media (max-width:767px){.TypingIndicator_typingIndicator__1YwyE{margin-left:4.8rem}}@media (max-height:14rem){.TypingIndicator_typingIndicator__1YwyE{display:none}}
2
+ /*# sourceMappingURL=main.4e8311d6.chunk.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["main.4e8311d6.chunk.css","Client.module.scss","Chat.module.scss","InputContainer.module.scss","Global.module.scss","_variables.scss","QuickReplies.module.scss","../../../_variables.scss","AudioRecorder.module.scss","TextInput.module.scss","Upload.module.scss","Message.module.scss","DetailMessage.module.scss","Text.module.scss","MarkdownMessage.module.scss","MessageContainer.module.scss","TypingIndicator.module.scss"],"names":[],"mappings":"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","file":"main.4e8311d6.chunk.css","sourcesContent":["@import url(//fonts.googleapis.com/css?family=Roboto:400,300,700,500,100,200);\nhtml{font-family:'Roboto', sans-serif}body{margin:0}.Client_chatPage__126Ne{display:flex;flex-direction:column;height:100vh}@media (min-width: 36rem){.Client_chatPage__126Ne{flex-direction:row}}\n\n.Chat_chatwindow__2gTsn{display:flex;flex-flow:column nowrap;width:100%;height:100vh;max-width:48rem;margin-left:auto;margin-right:auto}@media (min-width: 36rem){.Chat_chatwindow__2gTsn{padding-right:1rem}}@media (min-height: 14rem){.Chat_chatwindow__2gTsn{background-color:white}}\n\n*{box-sizing:border-box}.InputContainer_inputContainer__3uWNo{width:100%;background-color:#fff;padding:0 1rem 1rem 1rem}@media (max-height: 14rem){.InputContainer_inputContainer__3uWNo{background-color:transparent;font-size:0.8rem;padding:0 1rem}}\n\n.Global_button__33oEy{display:inline-block;font-family:Roboto, sans-serif;font-size:1em;padding:0.5em 1em;border-radius:0.2rem;background-color:white;border:2px solid white;color:#008fd7;cursor:pointer;transition:all 0.2s linear;text-align:center}.Global_button__33oEy:hover{color:#fff;background-color:#008fd7}svg{fill:currentColor}\n\n.QuickReplies_quickReplies__26tJr{display:flex;flex-flow:row wrap;justify-content:flex-end;padding-bottom:0.4rem;margin:0 -0.3rem}.QuickReplies_quickReply__PrklG{margin-top:0.5em;margin-right:0.5em;background-color:#eee;color:#717171;border:0}.QuickReplies_more__2X1pI{display:none}@media (max-height: 14rem){.QuickReplies_quickReplies__26tJr{flex-flow:row nowrap}.QuickReplies_quickReply__PrklG{padding:0.6rem 0.8rem}.QuickReplies_more__2X1pI{padding:0.3rem 0.6rem;font-size:1rem;font-weight:900;line-height:1.5;color:#eee;background-color:#4a4a4a;border:1px solid #eee}}@media (min-width: 40rem){.QuickReplies_quickReplies__26tJr{font-size:1.2rem}.QuickReplies_quickReply__PrklG{padding-left:1.5em;padding-right:1.5em}}\n\n*{box-sizing:border-box}.AudioRecorder_audioRecorder__37BQJ{display:flex}.AudioRecorder_recordButton__3-QeV{display:block;margin:0;border:0;background-color:#fff;color:#717171}.AudioRecorder_recordButton__3-QeV:hover{background-color:#008fd7;color:#fff}.AudioRecorder_submitButton__10pVF{display:block;margin:0;border:0;background-color:#fff;color:#008fd7}.AudioRecorder_submitButton__10pVF:hover{background-color:#008fd7;color:#fff}.AudioRecorder_cancelButton__64CTn{display:block;margin:0;border:0;background-color:#fff;color:#008fd7}.AudioRecorder_cancelButton__64CTn:hover{background-color:#008fd7;color:#fff}.AudioRecorder_recorderIcon__2o4Ov{width:1.3em;height:1.3em;border-radius:50%;-webkit-animation:AudioRecorder_pulse__3Xsbm 2s infinite;animation:AudioRecorder_pulse__3Xsbm 2s infinite;margin:auto 0.6em}@-webkit-keyframes AudioRecorder_pulse__3Xsbm{0%{background-color:white}40%{background-color:red}60%{background-color:red}100%{background-color:white}}@keyframes AudioRecorder_pulse__3Xsbm{0%{background-color:white}40%{background-color:red}60%{background-color:red}100%{background-color:white}}.AudioRecorder_spinning__1hO3P{display:block;margin:auto;color:#717171;-webkit-animation:AudioRecorder_spin__3bMw- 1.2s linear infinite;animation:AudioRecorder_spin__3bMw- 1.2s linear infinite}@-webkit-keyframes AudioRecorder_spin__3bMw-{100%{transform:rotate(360deg)}}@keyframes AudioRecorder_spin__3bMw-{100%{transform:rotate(360deg)}}\n\n*{box-sizing:border-box}.TextInput_inputWrapper__1fIyq{display:flex;line-height:0}@media (max-height: 14rem){.TextInput_inputWrapper__1fIyq{display:none}}.TextInput_messageInputWrapper__6KJHK{flex:1 1;border-radius:0.2rem;border:2px solid #bcbdc0;margin-right:0.5rem}.TextInput_messageInput__2fCF7{font-size:1rem;border:none;height:100%;box-sizing:border-box;width:100%;outline-width:0;padding:0.8rem 1rem;text-overflow:ellipsis;color:gray}.TextInput_sendMessage__2OtPU{margin:0;background-color:#008fd7;border-color:#008fd7;color:#fff}.TextInput_sendMessage__2OtPU svg{height:1.4rem;width:2.2rem;fill:currentColor}.TextInput_sendMessage__2OtPU:hover{color:#008fd7;background-color:#fff}\n\n.Upload_upload__20XMq{display:flex;flex-direction:row;justify-content:flex-end;padding-top:0.4rem}.Upload_upload__20XMq span+span{margin-left:0.3rem;margin-top:0}.Upload_upload__button__1CRlu{display:flex;align-items:center;height:3.4rem;width:100%;max-width:24rem;padding:2px 5px;margin:2px;color:white;background-color:#008fd7;border:2px solid #008fd7;border-radius:0.2rem;cursor:pointer}.Upload_upload__button__1CRlu input[type='file']{position:fixed;top:-1000px}.Upload_upload__button__1CRlu svg{height:2rem;width:2rem;margin:0.8rem;fill:currentColor}.Upload_upload__button__1CRlu:hover{background-color:white;color:#008fd7}.Upload_upload__button__1CRlu:active{background:#ccc;color:#008fd7}.Upload_upload__button__1CRlu:invalid+span{color:#a44}.Upload_upload__button__1CRlu:valid+span{color:#4a4}.Upload_upload__button__1CRlu.Upload_uploading__2pmWz{color:white;background:#ccc;border-color:#ccc;cursor:auto}.Upload_upload__button__1CRlu.Upload_uploading__2pmWz svg{position:relative;-webkit-animation:Upload_MoveUpDown__3z7Hm 1s ease-in infinite;animation:Upload_MoveUpDown__3z7Hm 1s ease-in infinite}@-webkit-keyframes Upload_MoveUpDown__3z7Hm{0%{bottom:0}100%{bottom:3px}}@keyframes Upload_MoveUpDown__3z7Hm{0%{bottom:0}100%{bottom:3px}}\n\n*{box-sizing:border-box}.Message_messageBot__3cmFc{display:flex;margin-bottom:1.2rem;transition:all 0.5s linear}.Message_messageUser__1PbuM{display:flex;justify-content:flex-end;margin-bottom:1.2rem;transition:all 0.5s linear}.Message_avatar__1GG1t{width:3.75rem;height:3.75rem}@media only screen and (max-width: 767px){.Message_messageBot__3cmFc{margin-bottom:0.7rem}.Message_messageUser__1PbuM{margin-bottom:0.7rem}.Message_avatar__1GG1t{width:2.5rem;height:2.5rem}}.Message_textWrapper__1ZhSM{display:inline-block;padding:0.9em 1.3em;border-radius:6px;width:calc(100% - 5.3rem);min-width:6.25rem;max-width:30rem;position:relative}@media (max-height: 14rem){.Message_textWrapper__1ZhSM{width:100%;max-height:3.2rem;margin-top:0.3rem;padding:0.4em 0.8em}.Message_avatar__1GG1t{margin-top:0.3rem}}.Message_textWrapper__1ZhSM::before{top:1.1rem;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none;border-width:0.8rem}@media only screen and (max-width: 767px){.Message_textWrapper__1ZhSM::before{top:0.5rem}}@media (max-height: 14rem){.Message_text__hBn5S iframe{display:none}.Message_textWrapper__1ZhSM::before{top:0.7rem}}.Message_leftTextWrapper__eSCQv{background-color:#008fd7;margin-left:1.25rem}.Message_leftTextWrapper__eSCQv::before{right:100%;border-right-color:#008fd7}.Message_leftText__1KoBc{color:white}.Message_leftText__1KoBc a{color:white !important}.Message_rightTextWrapper__2CSGi{background-color:#eee;margin-right:1.25rem}.Message_rightTextWrapper__2CSGi::before{left:100%;border-left-color:#eee}.Message_rightText__3RrIO{color:#717171}.Message_rightText__3RrIO a{color:#717171}\n\n.DetailMessage_image__2Gyth img{width:100%;position:relative}.DetailMessage_image_container__8LsJu{position:relative;text-align:center;color:white}.DetailMessage_play_button__1PWeA{width:15%;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.DetailMessage_title__1RlQT{font-weight:bold}.DetailMessage_subtitle__18WDj{margin-top:1rem}.DetailMessage_button__2eSMw{font-size:0.9em;margin-top:0.5em;margin-right:0.5em}@media (max-height: 14rem){.DetailMessage_title__1RlQT{display:none}.DetailMessage_image__2Gyth{display:none}.DetailMessage_subtitle__18WDj{margin-top:0}.DetailMessage_button__2eSMw{display:none}}@media only screen and (max-width: 767px){.DetailMessage_title__1RlQT{font-size:1.1rem}}.DetailMessage_video_container__7lOBq{position:relative;width:100%;height:0;padding-bottom:56.25%}.DetailMessage_video__3VEwq{position:absolute;top:0;left:0;width:100%;height:100%}\n\n.Text_text__1zaFO{overflow-wrap:break-word}\n\n.MarkdownMessage_markdownMessage__15Vr7 *>:first-child{margin-top:0}.MarkdownMessage_markdownMessage__15Vr7 *>:last-child{margin-bottom:0}.MarkdownMessage_markdownMessage__15Vr7 table{width:100%}.MarkdownMessage_markdownMessage__15Vr7 img{max-width:100%;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0}.MarkdownMessage_markdownMessage__15Vr7 td:not(:last-child){padding-right:1rem}.MarkdownMessage_markdownMessage__15Vr7 ul{padding:0 0 0 1.1em}.MarkdownMessage_markdownMessage__15Vr7 ul>li{list-style-type:disc}.MarkdownMessage_markdownMessage__15Vr7 ol{padding:0 0 0 1.1em}.MarkdownMessage_markdownMessage__15Vr7 ol>li{list-style-type:decimal}\n\n\n.MessageContainer_messageContainer__1AKXT{flex:1 1;overflow-y:auto;padding-top:1rem;position:relative;-webkit-overflow-scrolling:touch}.MessageContainer_messages__2GeSj{position:relative;list-style:none;font-size:0.9rem;line-height:1.4;padding:0 1rem;margin:0;overflow-wrap:break-word;word-wrap:break-word}@media (min-width: 36rem){.MessageContainer_messageContainer__1AKXT{padding-top:2rem}.MessageContainer_messages__2GeSj{font-size:1rem;line-height:1.8}}@media (max-height: 14rem){.MessageContainer_messageContainer__1AKXT{padding:0;overflow-y:unset;flex:0 0 auto}.MessageContainer_messageContainer__1AKXT li:not(:last-child){display:none}.MessageContainer_messageContainer__1AKXT li{margin-bottom:0 !important}.MessageContainer_messages__2GeSj{padding:0 1rem;line-height:1.2rem}}\n\n.TypingIndicator_typingIndicator__1YwyE{background-color:#008fd7;width:auto;border-radius:5px;padding:1rem;display:table;margin-left:6rem;margin-bottom:0.2rem;position:relative}.TypingIndicator_typingIndicator__1YwyE span{height:0.25rem;width:0.25rem;float:left;margin:0 1px;background-color:white;display:block;border-radius:50%;opacity:0.3}.TypingIndicator_typingIndicator__1YwyE span:nth-of-type(1){-webkit-animation:TypingIndicator_blink__3akB9 1s infinite .3333s;animation:TypingIndicator_blink__3akB9 1s infinite .3333s}@-webkit-keyframes TypingIndicator_blink__3akB9{50%{opacity:1}}@keyframes TypingIndicator_blink__3akB9{50%{opacity:1}}.TypingIndicator_typingIndicator__1YwyE span:nth-of-type(2){-webkit-animation:TypingIndicator_blink__3akB9 1s infinite .6666s;animation:TypingIndicator_blink__3akB9 1s infinite .6666s}@keyframes TypingIndicator_blink__3akB9{50%{opacity:1}}.TypingIndicator_typingIndicator__1YwyE span:nth-of-type(3){-webkit-animation:TypingIndicator_blink__3akB9 1s infinite .9999s;animation:TypingIndicator_blink__3akB9 1s infinite .9999s}@keyframes TypingIndicator_blink__3akB9{50%{opacity:1}}@media (max-width: 767px){.TypingIndicator_typingIndicator__1YwyE{margin-left:4.8rem}}@media (max-height: 14rem){.TypingIndicator_typingIndicator__1YwyE{display:none}}\n\n","@import \"./_variables.scss\";\n@import url(//fonts.googleapis.com/css?family=Roboto:400,300,700,500,100,200);\n\nhtml {\n font-family: 'Roboto', sans-serif;\n}\n\nbody {\n margin: 0;\n}\n\n.chatPage {\n display: flex;\n flex-direction: column;\n height: 100vh;\n}\n\n@media (min-width: 36rem) {\n .chatPage {\n flex-direction: row;\n }\n}\n","@import \"./../_variables.scss\";\n\n.chatwindow {\n display: flex;\n flex-flow: column nowrap;\n width: 100%;\n height: 100vh;\n max-width: 48rem;\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 36rem) {\n .chatwindow {\n padding-right: 1rem;\n }\n}\n\n@media (min-height: $collapsed) {\n .chatwindow {\n background-color: white;\n }\n}\n","@import '../../_variables.scss';\n\n* {\n box-sizing: border-box;\n}\n\n.inputContainer {\n width: 100%;\n background-color: #fff;\n padding: 0 1rem 1rem 1rem;\n}\n\n@media (max-height: $collapsed) {\n .inputContainer {\n background-color: transparent;\n font-size: 0.8rem;\n padding: 0 1rem;\n }\n}\n","@import \"./_variables.scss\";\n\n.button {\n display: inline-block;\n font-family: Roboto, sans-serif;\n font-size: 1em;\n padding: 0.5em 1em;\n border-radius: 0.2rem;\n background-color: white;\n border: 2px solid white;\n color: $brand-primary;\n cursor: pointer;\n transition: all 0.2s linear;\n text-align: center;\n \n &:hover {\n color: #fff;\n background-color: $brand-primary;\n }\n}\n\n:global(svg) {\n fill: currentColor;\n}","$enable-flex: true;\n\n$brand-primary: #008fd7 !default;\n\n$lighter-gray: #eee;\n$gray: #717171;\n\n$text: $gray;\n$bg-gray: $lighter-gray;\n$collapsed: 14rem;\n","@import '../../../_variables.scss';\n\n.quickReplies {\n display: flex;\n flex-flow: row wrap;\n justify-content: flex-end;\n padding-bottom: 0.4rem;\n margin: 0 -0.3rem;\n}\n\n.quickReply {\n margin-top: 0.5em;\n margin-right: 0.5em;\n background-color: $bg-gray;\n color: $text;\n border: 0;\n}\n\n.more {\n display: none;\n}\n\n@media (max-height: $collapsed) {\n .quickReplies {\n flex-flow: row nowrap;\n }\n\n .quickReply {\n padding: 0.6rem 0.8rem;\n }\n\n .more {\n padding: 0.3rem 0.6rem;\n font-size: 1rem;\n font-weight: 900;\n line-height: 1.5;\n color: #eee;\n background-color: #4a4a4a;\n border: 1px solid #eee;\n }\n}\n\n@media (min-width: 40rem) {\n .quickReplies {\n font-size: 1.2rem;\n }\n .quickReply {\n padding-left: 1.5em;\n padding-right: 1.5em;\n }\n}\n","$enable-flex: true;\n\n$brand-primary: #008fd7 !default;\n\n$lighter-gray: #eee;\n$gray: #717171;\n\n$text: $gray;\n$bg-gray: $lighter-gray;\n$collapsed: 14rem;\n","@import '../../../_variables.scss';\n\n* {\n box-sizing: border-box;\n}\n\n.audioRecorder {\n display: flex;\n}\n\n@mixin audioButton {\n display: block;\n margin: 0;\n border: 0;\n background-color: #fff;\n\n &:hover {\n background-color: $brand-primary;\n color: #fff;\n }\n}\n\n.recordButton {\n @include audioButton();\n color: $gray;\n}\n\n.submitButton {\n @include audioButton();\n color: $brand-primary;\n}\n\n.cancelButton {\n @include audioButton();\n color: $brand-primary;\n}\n\n.recorderIcon {\n width: 1.3em;\n height: 1.3em;\n border-radius: 50%;\n animation: pulse 2s infinite;\n margin: auto 0.6em;\n}\n\n@keyframes pulse {\n 0% {\n background-color: white;\n }\n 40% {\n background-color: red;\n }\n 60% {\n background-color: red;\n }\n 100% {\n background-color: white;\n }\n}\n\n.spinning {\n display: block;\n margin: auto;\n color: $gray;\n animation: spin 1.2s linear infinite;\n}\n\n@keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n}\n","@import '../../../_variables.scss';\n\n* {\n box-sizing: border-box;\n}\n\n.inputWrapper {\n display: flex;\n line-height: 0;\n}\n@media (max-height: $collapsed) {\n .inputWrapper {\n display: none;\n }\n}\n\n.messageInputWrapper {\n flex: 1;\n border-radius: 0.2rem;\n border: 2px solid #bcbdc0;\n margin-right: 0.5rem;\n}\n\n.messageInput {\n font-size: 1rem;\n border: none;\n height: 100%;\n box-sizing: border-box;\n width: 100%;\n outline-width: 0;\n padding: 0.8rem 1rem;\n text-overflow: ellipsis;\n color: gray;\n}\n\n.sendMessage {\n margin: 0;\n background-color: $brand-primary;\n border-color: $brand-primary;\n color: #fff;\n\n svg {\n height: 1.4rem;\n width: 2.2rem;\n fill: currentColor;\n }\n}\n\n.sendMessage:hover {\n color: $brand-primary;\n background-color: #fff;\n}\n","@import '../../../_variables.scss';\n\n.upload {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n padding-top: 0.4rem;\n\n span + span {\n margin-left: 0.3rem;\n margin-top: 0;\n }\n}\n\n.upload__button {\n input[type='file'] {\n position: fixed;\n top: -1000px;\n }\n\n display: flex;\n align-items: center;\n height: 3.4rem;\n width: 100%;\n max-width: 24rem;\n padding: 2px 5px;\n margin: 2px;\n color: white;\n background-color: $brand-primary;\n border: 2px solid $brand-primary;\n border-radius: 0.2rem;\n cursor: pointer;\n\n svg {\n height: 2rem;\n width: 2rem;\n margin: 0.8rem;\n fill: currentColor;\n }\n\n &:hover {\n background-color: white;\n color: $brand-primary;\n }\n\n &:active {\n background: #ccc;\n color: $brand-primary;\n }\n\n &:invalid + span {\n color: #a44;\n }\n\n &:valid + span {\n color: #4a4;\n }\n\n &.uploading {\n color: white;\n background: #ccc;\n border-color: #ccc;\n cursor: auto;\n svg {\n position: relative;\n animation: MoveUpDown 1s ease-in infinite;\n }\n }\n}\n\n@keyframes MoveUpDown {\n 0% {\n bottom: 0;\n }\n 100% {\n bottom: 3px;\n }\n}\n","@import '../../../_variables.scss';\n\n* {\n box-sizing: border-box;\n}\n\n.messageBot {\n display: flex;\n margin-bottom: 1.2rem;\n transition: all 0.5s linear;\n}\n\n.messageUser {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 1.2rem;\n transition: all 0.5s linear;\n}\n.avatar {\n width: 3.75rem;\n height: 3.75rem;\n}\n@media only screen and (max-width: 767px) {\n .messageBot {\n margin-bottom: 0.7rem;\n }\n .messageUser {\n margin-bottom: 0.7rem;\n }\n .avatar {\n width: 2.5rem;\n height: 2.5rem;\n }\n}\n\n.textWrapper {\n display: inline-block;\n padding: 0.9em 1.3em;\n border-radius: 6px;\n width: calc(100% - 5.3rem);\n min-width: 6.25rem;\n max-width: 30rem;\n position: relative;\n}\n\n@media (max-height: $collapsed) {\n .textWrapper {\n width: 100%;\n max-height: 3.2rem;\n margin-top: 0.3rem;\n padding: 0.4em 0.8em;\n }\n .avatar {\n margin-top: 0.3rem;\n }\n}\n\n.textWrapper::before {\n top: 1.1rem;\n border: solid transparent;\n content: ' ';\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n border-width: 0.8rem;\n}\n\n@media only screen and (max-width: 767px) {\n .textWrapper::before {\n top: 0.5rem;\n }\n}\n\n@media (max-height: $collapsed) {\n .text {\n iframe {\n display: none;\n }\n }\n .textWrapper::before {\n top: 0.7rem;\n }\n}\n\n.leftTextWrapper {\n background-color: $brand-primary;\n margin-left: 1.25rem;\n}\n.leftTextWrapper::before {\n right: 100%;\n border-right-color: $brand-primary;\n}\n.leftText {\n color: white;\n\n a {\n color: white !important;\n }\n}\n\n.rightTextWrapper {\n background-color: $lighter-gray;\n margin-right: 1.25rem;\n}\n.rightTextWrapper::before {\n left: 100%;\n border-left-color: $lighter-gray;\n}\n\n.rightText {\n color: $text;\n\n a {\n color: $text;\n }\n}\n","@import './../../../../_variables.scss';\n\n.image img {\n width: 100%;\n position: relative;\n}\n\n.image_container {\n position: relative;\n text-align: center;\n color: white;\n}\n\n.play_button {\n width: 15%;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n\n.title {\n font-weight: bold;\n}\n\n.subtitle {\n margin-top: 1rem;\n}\n\n.button {\n font-size: 0.9em;\n margin-top: 0.5em;\n margin-right: 0.5em;\n}\n\n@media (max-height: $collapsed) {\n .title {\n display: none;\n }\n .image {\n display: none;\n }\n .subtitle {\n margin-top: 0;\n }\n .button {\n display: none;\n }\n}\n@media only screen and (max-width: 767px) {\n .title {\n font-size: 1.1rem;\n }\n}\n\n.video_container {\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 56.25%;\n}\n.video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n","@import '../../../_variables.scss';\n\n.text {\n overflow-wrap: break-word;\n}\n","@import '../../../../_variables.scss';\n\n.markdownMessage {\n * > :first-child {\n margin-top: 0;\n }\n * > :last-child {\n margin-bottom: 0;\n }\n\n table {\n width: 100%;\n }\n\n img {\n max-width: 100%;\n margin-block-start: 0;\n margin-block-end: 0;\n }\n\n td:not(:last-child) {\n padding-right: 1rem;\n }\n\n ul {\n padding: 0 0 0 1.1em;\n > li {\n list-style-type: disc;\n }\n }\n\n ol {\n padding: 0 0 0 1.1em;\n > li {\n list-style-type: decimal;\n }\n }\n}\n","@import '../../_variables.scss';\n\n.messageContainer {\n flex: 1;\n overflow-y: auto;\n padding-top: 1rem;\n\n // required for react-scroll\n position: relative;\n\n // iPhone smooth scrolling\n -webkit-overflow-scrolling: touch;\n}\n\n.messages {\n position: relative;\n list-style: none;\n font-size: 0.9rem;\n line-height: 1.4;\n padding: 0 1rem;\n margin: 0;\n\n // Break long words (like links) that would otherwise overflow the message bubble\n overflow-wrap: break-word;\n word-wrap: break-word;\n}\n\n@media (min-width: 36rem) {\n .messageContainer {\n padding-top: 2rem;\n }\n .messages {\n font-size: 1rem;\n line-height: 1.8;\n }\n}\n\n@media (max-height: $collapsed) {\n .messageContainer {\n padding: 0;\n overflow-y: unset;\n flex: 0 0 auto;\n\n li:not(:last-child) {\n display: none;\n }\n li {\n margin-bottom: 0 !important;\n }\n }\n .messages {\n padding: 0 1rem;\n line-height: 1.2rem;\n }\n}\n","@import '../../../_variables.scss';\n\n@mixin blinkMixin($i) {\n animation: blink 1s infinite ($i * 0.3333s);\n\n @keyframes blink {\n 50% {\n opacity: 1;\n }\n }\n}\n\n.typingIndicator {\n $ti-color-bg: $brand-primary;\n background-color: $ti-color-bg;\n width: auto;\n border-radius: 5px;\n padding: 1rem;\n display: table;\n margin-left: 6rem;\n margin-bottom: 0.2rem;\n position: relative;\n span {\n height: 0.25rem;\n width: 0.25rem;\n float: left;\n margin: 0 1px;\n background-color: white;\n display: block;\n border-radius: 50%;\n opacity: 0.3;\n @for $i from 1 through 3 {\n &:nth-of-type(#{$i}) {\n @include blinkMixin($i);\n }\n }\n }\n}\n\n@media (max-width: 767px) {\n .typingIndicator {\n margin-left: 4.8rem;\n }\n}\n\n@media (max-height: $collapsed) {\n .typingIndicator {\n display: none;\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- (this.webpackJsonpclient=this.webpackJsonpclient||[]).push([[0],{138:function(e,t,n){e.exports={chatPage:"Client_chatPage__126Ne"}},140:function(e,t,n){e.exports={chatwindow:"Chat_chatwindow__2gTsn"}},141:function(e,t,n){e.exports={inputContainer:"InputContainer_inputContainer__2LEmG"}},144:function(e,t,n){e.exports={text:"Text_text__2JaXU"}},147:function(e,t,n){e.exports={markdownMessage:"MarkdownMessage_markdownMessage__hSbUt"}},148:function(e,t,n){},149:function(e,t,n){e.exports={typingIndicator:"TypingIndicator_typingIndicator__2vRCR",blink:"TypingIndicator_blink__3wJ7S"}},154:function(e,t,n){e.exports=n(318)},21:function(e,t,n){e.exports={audioRecorder:"AudioRecorder_audioRecorder__9e24N",recordButton:"AudioRecorder_recordButton__104a6",submitButton:"AudioRecorder_submitButton__kX6gE",cancelButton:"AudioRecorder_cancelButton__379d9",recorderIcon:"AudioRecorder_recorderIcon__2e6S0",pulse:"AudioRecorder_pulse__2JaAb",spinning:"AudioRecorder_spinning__26mEm",spin:"AudioRecorder_spin__3IqEo"}},277:function(e,t,n){var a={"./de.json":278,"./en.json":279,"./fr.json":280,"./it.json":281};function r(e){var t=i(e);return n(t)}function i(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}r.keys=function(){return Object.keys(a)},r.resolve=i,e.exports=r,r.id=277},278:function(e){e.exports=JSON.parse('{"Enter chat message":"Nachricht eingeben ..."}')},279:function(e){e.exports=JSON.parse('{"Enter chat message":"Enter chat message ..."}')},280:function(e){e.exports=JSON.parse('{"Enter chat message":"Entrez un message chat ..."}')},281:function(e){e.exports=JSON.parse('{"Enter chat message":"Inserisci messaggio chat ..."}')},315:function(e,t){},318:function(e,t,n){"use strict";n.r(t);n(155);var a,r,i=n(0),o=n.n(i),s=n(25),c=n.n(s),l=n(54),u=n(138),d=n.n(u),p=n(13),m=n(1),g=function(e){return{type:"MESSAGE_TO_PARENT_PAGE",message:{type:"webclient.change.url",url:e}}},E=n(89),_=n.n(E),f=n(90),h=n.n(f),v=n(320),S=function(e,t,n){return{type:"CONNECT",sessionId:e,userId:t,querystrings:n}},b=n(140),T=n.n(b),N=n(2),C=n.n(N),k=n(141),O=n.n(k),R=n(8),y=n.n(R),w=n(35),I=n.n(w),A=function(e){var t=e.quickReplies,n=e.onQuickReplyClick,a=e.onShowMore;return o.a.createElement("div",{className:I.a.quickReplies},t.map((function(e){return o.a.createElement("span",{key:e.label,className:C()(I.a.quickReply,y.a.button),onClick:function(){return n(e)}},e.label)})),o.a.createElement("span",{key:"more",className:C()(I.a.quickReply,I.a.more),onClick:function(){return a()}},"..."))},x=n(153),M=n(52),U=n(53),D=n(15),G=n(56),j=n(55),B=n(21),q=n.n(B),L=function(e){Object(G.a)(n,e);var t=Object(j.a)(n);function n(e){var a;return Object(M.a)(this,n),(a=t.call(this,e)).audioInput=null,a.volume=null,a.leftchannel=[],a.recorder=null,a.recordingLength=0,a.sampleRate=null,a.mediaStream=null,a.state={recordingState:"none"},a.triggerAudioRecording=a.triggerAudioRecording.bind(Object(D.a)(a)),a.triggerAudioRecordingSuccess=a.triggerAudioRecordingSuccess.bind(Object(D.a)(a)),a.initRecording=a.initRecording.bind(Object(D.a)(a)),a.processRecordingInput=a.processRecordingInput.bind(Object(D.a)(a)),a.handleClickSubmitAudio=a.handleClickSubmitAudio.bind(Object(D.a)(a)),a.handleClickStopAudio=a.handleClickStopAudio.bind(Object(D.a)(a)),a}return Object(U.a)(n,[{key:"triggerAudioRecording",value:function(){this.setState({recordingState:"connecting"}),navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(this.triggerAudioRecordingSuccess)}},{key:"triggerAudioRecordingSuccess",value:function(e){this.mediaStream=e,this.leftchannel.length=0,this.recordingLength=0,this.initRecording(e)}},{key:"initRecording",value:function(e){var t=new(window.AudioContext||window.webkitAudioContext);this.sampleRate=t.sampleRate,this.volume=t.createGain(),this.audioInput=t.createMediaStreamSource(e),this.audioInput.connect(this.volume),this.recorder=t.createScriptProcessor(2048,1,1),this.recorder.onaudioprocess=this.processRecordingInput,this.volume.connect(this.recorder),this.recorder.connect(t.destination)}},{key:"processRecordingInput",value:function(e){if("connecting"===this.state.recordingState&&this.setState({recordingState:"recording"}),"none"!==this.state.recordingState){var t=e.inputBuffer.getChannelData(0);this.leftchannel.push(new Float32Array(t)),this.recordingLength+=2048}}},{key:"handleClickSubmitAudio",value:function(){var e=W(this.leftchannel,this.recordingLength),t=H(e,this.sampleRate||0),n=F(t);this.props.onAudioRecorded(n),this.handleClickStopAudio()}},{key:"handleClickStopAudio",value:function(){var e,t,n,a;(this.setState({recordingState:"none"}),null===(e=this.audioInput)||void 0===e||e.disconnect(),null===(t=this.volume)||void 0===t||t.disconnect(),null===(n=this.recorder)||void 0===n||n.disconnect(),this.mediaStream)&&(null===(a=this.mediaStream)||void 0===a||a.getAudioTracks().forEach((function(e){e.stop()})))}},{key:"render",value:function(){return o.a.createElement("div",{className:q.a.audioRecorder},"none"===this.state.recordingState&&o.a.createElement("button",{className:C()(y.a.button,q.a.recordButton),type:"submit",onClick:this.triggerAudioRecording},o.a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},o.a.createElement("path",{d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),o.a.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))),"connecting"===this.state.recordingState&&o.a.createElement("svg",{className:q.a.spinning,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},o.a.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),o.a.createElement("path",{d:"M0 0h24v24H0z",fill:"none"})),"recording"===this.state.recordingState&&o.a.createElement("div",{className:q.a.audioRecorder},o.a.createElement("button",{className:C()(y.a.button,q.a.cancelButton),onClick:this.handleClickStopAudio},o.a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},o.a.createElement("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),o.a.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))),o.a.createElement("div",{className:q.a.recorderIcon}),o.a.createElement("button",{className:C()(y.a.button,q.a.submitButton),type:"submit",onClick:this.handleClickSubmitAudio},o.a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},o.a.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),o.a.createElement("path",{d:"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"})))))}}]),n}(o.a.Component),F=function(e){var t=new ArrayBuffer(44+2*e.length),n=new DataView(t);P(n,0,"RIFF"),n.setUint32(4,44+2*e.length,!0),P(n,8,"WAVE"),P(n,12,"fmt "),n.setUint32(16,16,!0),n.setUint16(20,1,!0),n.setUint16(22,1,!0),n.setUint32(24,16e3,!0),n.setUint32(28,64e3,!0),n.setUint16(32,4,!0),n.setUint16(34,16,!0),P(n,36,"data"),n.setUint32(40,2*e.length,!0);for(var a=e.length,r=44,i=0;i<a;i++)n.setInt16(r,32767*e[i],!0),r+=2;return new Blob([n],{type:"audio/wav"})},P=function(e,t,n){for(var a=0;a<n.length;a++)e.setUint8(t+a,n.charCodeAt(a))},W=function(e,t){for(var n=new Float32Array(t),a=0,r=e.length,i=0;i<r;i++){var o=e[i];n.set(o,a),a+=o.length}return n},H=function(e,t){if(16e3===t)return e;for(var n=t/16e3,a=Math.round(e.length/n),r=new Float32Array(a),i=0,o=0;i<r.length;){for(var s=Math.round((i+1)*n),c=0,l=0,u=o;u<s&&u<e.length;u++)c+=e[u],l++;r[i]=c/l,i++,o=s}return r},J=n(36),z=n.n(J),V=function(e){var t=e.speechSupport,n=e.translate,a=e.onTextInput,r=e.onAudioRecorded,s=Object(i.useState)(!1),c=Object(x.a)(s,2),l=c[0],u=c[1],d=Object(i.useRef)(null);return o.a.createElement("form",{className:z.a.inputWrapper,onSubmit:function(e){e.preventDefault();var t=d.current;t&&t.value.trim().length>=1&&(a(t.value.trim()),t.value="",u(!1),t.focus())}},o.a.createElement("div",{className:z.a.messageInputWrapper},o.a.createElement("input",{className:z.a.messageInput,placeholder:n("Enter chat message"),ref:d,onChange:function(e){var t=e.target.value.trim();u(t.length>0)}})),l||!t||void 0===navigator.mediaDevices?o.a.createElement("button",{className:C()(z.a.sendMessage,y.a.button),type:"submit"},o.a.createElement("svg",{width:"100%",height:"100%",viewBox:"0 0 232 168"},o.a.createElement("path",{d:"M227.514,84.044l-224,-80l48,80l-48,80l224,-80Z"}))):t&&void 0!==navigator.mediaDevices&&o.a.createElement(L,{onAudioRecorded:r}))},Q=n(93),Y=n(37),X=n.n(Y),K=function(e){return"pending"===e?X.a.upload__button:"uploading"===e?C()(X.a.upload__button,X.a.uploading):""},Z=function(e){var t=e.uploadRequest,n=(t=void 0===t?{}:t).uploadState,a=t.label,r=void 0===a?"":a,i=t.payload,s=void 0===i?{}:i,c=e.onUploadFile;return o.a.createElement("div",{className:X.a.upload},r&&o.a.createElement("label",{className:K(n)},n===m.UploadStateEnum.PENDING&&o.a.createElement("div",null,o.a.createElement("input",{type:"file",onChange:function(e){var t,n,a=null===(t=e.target)||void 0===t||null===(n=t.files)||void 0===n?void 0:n.item(0);if(a){var r=new FileReader;r.onload=function(e){c(a.name,e.target.result,s)},r.readAsDataURL(a)}}}),o.a.createElement(Q.a,null),o.a.createElement("span",null,r)),n===m.UploadStateEnum.UPLOADING&&o.a.createElement("div",null,o.a.createElement(Q.b,null),o.a.createElement("span",null,"".concat(r," wird hochgeladen")))))},$=function(e){var t=e.quickReplies,n=e.uploadRequest,a=e.speechSupport,r=e.translate,i=e.onTextInput,s=e.onQuickReplyClick,c=e.onShowMore,l=e.onUploadFile,u=e.onAudioRecorded;return o.a.createElement("div",{className:C()(O.a.inputContainer)},o.a.createElement(Z,{uploadRequest:n,onUploadFile:l}),o.a.createElement(A,{quickReplies:t,onQuickReplyClick:s,onShowMore:c}),o.a.createElement(V,{translate:r,onTextInput:i,onAudioRecorded:u,speechSupport:a}))},ee=n(91),te=n.n(ee),ne=n(5),ae=n.n(ne),re=function(e){var t=e.sender,n=e.children;return o.a.createElement("li",{className:ae.a.messageBot},o.a.createElement("img",{className:ae.a.avatar,src:"".concat(t.avatar),alt:t.type===m.UserType.BOT?"Bot":"Agent"}),o.a.createElement("div",{className:C()(ae.a.textWrapper,ae.a.leftTextWrapper)},o.a.createElement("div",{className:C()(ae.a.text,ae.a.leftText)},n)))},ie=n(28),oe=n.n(ie),se=n(14),ce=n.n(se),le=n(9),ue=n.n(le),de=function(e){var t=e.buttons,n=e.onButtonClick;return o.a.createElement("div",null,t.map((function(e,t){return o.a.createElement("button",{key:t,className:C()(ue.a.button,y.a.button),onClick:function(){return n(e)}},e.title)})))},pe=function(e){var t=e.alt,n=e.imageUrl,a=e.itemUrl;return n?o.a.createElement("div",{className:ue.a.image},a?a.includes("youtube.com")?o.a.createElement("div",{className:ue.a.video_container},o.a.createElement("iframe",{className:ue.a.video,title:"Youtube",width:"100%",src:a+"?rel=0",frameBorder:"0",allowFullScreen:!0})):o.a.createElement("a",{href:a,target:"_blank",rel:"noopener noreferrer"},o.a.createElement("img",{src:n,alt:t})):o.a.createElement("img",{src:n,alt:t})):null},me=n(142),ge=n.n(me),Ee=n(143),_e=n.n(Ee),fe=n(144),he=n.n(fe),ve=function(e){var t=e.text,n=e.onLinkClick,a=function(e,t,a){return o.a.createElement("a",{key:a,onClick:(r=e,function(e){return e.preventDefault(),r&&n(r),!1})},t);var r};return o.a.createElement("div",null,t.split("\n").map((function(e,t){return o.a.createElement("span",{key:t,className:he.a.text},o.a.createElement(_e.a,{componentDecorator:a},ge.a.emojify(e)),o.a.createElement("br",null))})))},Se=function(e){var t=e.subtitle,n=e.onLinkClick;return t?o.a.createElement("div",{className:ue.a.subtitle},o.a.createElement(ve,{text:t,onLinkClick:n})):null},be=function(e){var t=e.title;return t?o.a.createElement("h2",{className:ue.a.title},t):null},Te=function(e){var t=e.title,n=e.subtitle,a=e.imageUrl,r=e.itemUrl,i=e.buttons,s=e.onButtonClick,c=e.onLinkClick;return o.a.createElement("div",null,o.a.createElement(ce.a,{query:"(max-height: 150px)"},o.a.createElement(oe.a,{clamp:2},o.a.createElement(Se,{subtitle:n,onLinkClick:c}))),o.a.createElement(ce.a,{query:"(min-height: 151px)"},o.a.createElement(be,{title:t}),o.a.createElement(pe,{imageUrl:a,itemUrl:r,alt:t||n}),o.a.createElement(Se,{subtitle:n,onLinkClick:c}),o.a.createElement(de,{buttons:i,onButtonClick:s})))},Ne=n(145),Ce=n(147),ke=n.n(Ce),Oe=function(e){var t=e.markdown,n=e.excerpt,a=e.className,r=e.onLinkClick,i=function(e){return function(t){return t.preventDefault(),e&&r(e),!1}};return o.a.createElement("div",{className:C()(ke.a.markdownMessage,a)},o.a.createElement(ce.a,{query:"(max-height: 150px)"},o.a.createElement(oe.a,{clamp:2},o.a.createElement(ve,{text:n,onLinkClick:r}))),o.a.createElement(ce.a,{query:"(min-height: 151px)"},o.a.createElement(Ne.a,{options:{overrides:{a:function(e){var t=e.title,n=e.href,a=e.children;return 0===n.indexOf("newtab#")?o.a.createElement("a",{href:n.slice("newtab#".length),title:t,target:"_blank",rel:"noopener noreferrer"},a):o.a.createElement("a",{onClick:i(n),title:t},a)}}}},t)))},Re=n(148),ye=n.n(Re),we=function(e){var t=e.text,n=e.onLinkClick;return o.a.createElement("div",{className:ye.a.text},o.a.createElement(ce.a,{query:"(max-height: 150px)"},o.a.createElement(oe.a,{clamp:2},o.a.createElement(ve,{text:t,onLinkClick:n}))),o.a.createElement(ce.a,{query:"(min-height: 151px)"},o.a.createElement(ve,{text:t,onLinkClick:n})))},Ie=function(e){var t=e.children;return o.a.createElement("li",{className:ae.a.messageUser},o.a.createElement("div",{className:C()(ae.a.textWrapper,ae.a.rightTextWrapper)},o.a.createElement("div",{className:C()(ae.a.text,ae.a.rightText)},t)),o.a.createElement("img",{className:ae.a.avatar,alt:"Guest",src:"visitor.svg"}))},Ae=function(e,t,n){switch(e.type){case m.MessageTypeEnum.TEXT:var a=e;return o.a.createElement(we,{text:a.text,onLinkClick:n});case m.MessageTypeEnum.DETAIL:var r=e;return o.a.createElement(Te,{title:r.title,subtitle:r.subtitle,imageUrl:r.imageUrl,itemUrl:r.itemUrl,buttons:r.buttons,onButtonClick:t,onLinkClick:n});case m.MessageTypeEnum.MARKDOWN:var i=e;return o.a.createElement(Oe,{markdown:i.markdown,excerpt:i.excerpt,className:i.className,onLinkClick:n})}},xe=function(e){var t=e.message,n=e.onButtonClick,a=e.onLinkClick,r=Ae(t,n,a);switch(t.sender.type){case m.UserType.GUEST:return o.a.createElement(Ie,null,r);default:return o.a.createElement(re,{sender:t.sender},r)}},Me=n(92),Ue=n.n(Me),De=n(149),Ge=n.n(De),je=function(e){var t=e.isTyping;return void 0!==t&&t?o.a.createElement("div",{className:Ge.a.typingIndicator},o.a.createElement("span",null),o.a.createElement("span",null),o.a.createElement("span",null)):null},Be=te.a.Element,qe=function(e){Object(G.a)(n,e);var t=Object(j.a)(n);function n(){return Object(M.a)(this,n),t.apply(this,arguments)}return Object(U.a)(n,[{key:"scrollToBottom",value:function(e,t){te.a.scroller.scrollTo("ScrollToElement",{duration:e,delay:t,smooth:!0,containerId:"MessageContainer"})}},{key:"componentDidMount",value:function(){this.scrollToBottom(0,0)}},{key:"componentDidUpdate",value:function(e){var t=this;if(0===e.messages.length&&this.props.messages.length>0)this.scrollToBottom(0,0);else{var n=this.props.isBotTyping,a=e.messages.length!==this.props.messages.length&&e.messages.length>1;(n||a)&&setTimeout((function(){return t.scrollToBottom(700,20)}),10)}}},{key:"render",value:function(){var e=this.props,t=e.messages,n=e.isBotTyping,a=e.onButtonClick,r=e.onLinkClick;return o.a.createElement("div",{className:Ue.a.messageContainer,id:"MessageContainer"},o.a.createElement("ul",{className:Ue.a.messages},t.map((function(e,t){return o.a.createElement(xe,{key:t,message:e,onButtonClick:a,onLinkClick:r})}))),o.a.createElement(je,{isTyping:n}),o.a.createElement(Be,{name:"ScrollToElement"}))}}]),n}(o.a.Component),Le="TRIGGER_ACTION",Fe="TRIGGER_STORY",Pe="CHAT_MESSAGE_FROM_GUEST",We="ON_CHAT_WINDOW_OPEN",He="ON_CHAT_WINDOW_CLOSE",Je=Object(l.b)((function(e){var t=e.chat;return{messages:t.messages,quickReplies:t.quickReplies,uploadRequest:t.uploadRequest,isBotTyping:t.isBotTyping,speechSupport:t.speechSupport,translate:Object(p.b)(e.locale)}}),(function(e){return{onConnect:function(t){return e(function(e){return function(t,n){var a=h.a.parse(e),r=n().connection,i=r.sessionId;void 0===i&&(i=Object(v.a)());var o=r.userId;if(void 0===o){var s=_.a.get("bf-webclient-userId");o=s||Object(v.a)(),_.a.set("bf-webclient-userId",o)}return a.sessionId=i,a.userId=o,t(S(i,o,h.a.stringify(a)))}}(t))},onMessageFromUser:function(t){return e(function(e){return Object(m.receiveTextMessageFromGuest)(e)}(t))},onAudioRecorded:function(t){return e(function(e){return{type:"AUDIO_MESSAGE_FROM_USER",buffer:e}}(t))},onActionFromUser:function(t){return e(t)},onQuickReplyClick:function(t){return e(function(e){return function(t){return e.payload.type!==m.ActionTypes.MESSAGE_FROM_GUEST&&t(Object(m.receiveTextMessageWithoutAnalysisFromGuest)(e.label)),t(e.payload)}}(t))},onNluEvent:function(t){return e(function(e){return Object(m.requestNLUEvent)(e)}(t))},onButtonClick:function(t){return e(function(e){switch(e.type){case m.ButtonTypeEnum.WEB_URL:return g(e.url);case m.ButtonTypeEnum.POSTBACK:return e.payload;default:throw new Error("unknown button type ".concat(e.type))}}(t))},onLinkClick:function(t){return e(function(e){return g(e)}(t))},onShowMore:function(){return e({type:"MESSAGE_TO_PARENT_PAGE",message:{type:"webclient.show.more"}})},onUploadFile:function(t,n,a){return e(function(e,t,n){return Object(m.receiveFileFromGuest)(e,t,n)}(t,n,a))}}}))((function(e){var t=e.messages,n=e.quickReplies,a=e.uploadRequest,r=e.isBotTyping,s=e.speechSupport,c=e.translate,l=e.onConnect,u=e.onNluEvent,d=e.onMessageFromUser,p=e.onQuickReplyClick,m=e.onButtonClick,g=e.onLinkClick,E=e.onUploadFile,_=e.onShowMore,f=e.onAudioRecorded,h=e.onActionFromUser;return Object(i.useEffect)((function(){var e=function(e){switch(e.data.type){case Le:h(e.data.action);break;case Fe:u(e.data.story);break;case We:h({type:"webclient.chatwindow.opened"});break;case He:h({type:"webclient.chatwindow.closed"});break;case Pe:d(e.data.text)}};return l(window.location.search),window.addEventListener("message",(function(t){return e(t)}),!1),function(){return window.removeEventListener("message",e)}}),[l,h,d,u]),o.a.createElement("div",{className:T.a.chatwindow},o.a.createElement(qe,{messages:t,isBotTyping:r,onButtonClick:m,onLinkClick:g}),o.a.createElement($,{quickReplies:n,uploadRequest:a,speechSupport:s,translate:c,onQuickReplyClick:p,onTextInput:d,onShowMore:_,onUploadFile:E,onAudioRecorded:f}))})),ze=n(150),Ve=n.n(ze),Qe=n(20),Ye=n(151);!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTED=2]="RECONNECTED",e[e.DISCONNECTED=3]="DISCONNECTED"}(a||(a={})),function(e){e.GUEST="GUEST",e.BOT="BOT",e.PERSON="PERSON"}(r||(r={}));var Xe={connectionState:a.DISCONNECTED,sessionId:void 0,userId:void 0},Ke=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Xe,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"CONNECT":return Object.assign({},e,{sessionId:t.sessionId,userId:t.userId});case"CONNECTING":return Object.assign({},e,{connectionState:a.CONNECTING});case"CONNECTED":return Object.assign({},e,{connectionState:a.CONNECTED});case"DISCONNECTED":return Object.assign({},e,{connectionState:a.DISCONNECTED});case"RECONNECTED":return Object.assign({},e,{connectionState:a.RECONNECTED});case"RESTORE_SESSION_ID":return Object.assign({},e,{sessionId:t.sessionId});default:return e}},Ze=function(e,t){return Object.assign({},e,{messages:e.messages.concat([t]),quickReplies:[]})},$e=function(e){et()?window.top.postMessage(e,"*"):"webclient.change.url"===e.type&&window.open(e.url)},et=function(){return"undefined"!==typeof window&&window.self!==window.top},tt={messages:[],quickReplies:[],isBotTyping:!1,speechSupport:!1},nt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:tt,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case m.ActionTypes.TYPING_ON:return Object.assign({},e,{isBotTyping:!0});case m.ActionTypes.TYPING_OFF:return Object.assign({},e,{isBotTyping:!1});case m.ActionTypes.MESSAGE_FROM_GUEST:case m.ActionTypes.MESSAGE_WITHOUT_ANALYSIS_FROM_GUEST:return Ze(e,t.message);case m.ActionTypes.MESSAGE_TO_GUEST:$e(t);var n=Object.assign({},t.message,{_id:t.meta.actionId}),a=e.messages.filter((function(e){return e._id===t.meta.actionId})).length>0;return Object.assign({},e,{messages:a?e.messages:e.messages.concat([n]),quickReplies:n.quickReplies?n.quickReplies:[],uploadRequest:n.uploadRequest?n.uploadRequest:{}});case"RESTORE_PREVIOUS_CHAT_MESSAGES":var r=t.messages;if(r.length>0){var i=r[r.length-1];return Object.assign({},tt,{messages:r,quickReplies:i.quickReplies?i.quickReplies:[],uploadRequest:i.uploadRequest?i.uploadRequest:{}})}return tt;case m.ActionTypes.FILE_FROM_GUEST:var o=Object.assign({},e.uploadRequest,{uploadState:"uploading"});return Object.assign({},e,{uploadRequest:o});case"MESSAGE_TO_PARENT_PAGE":return $e(t.message),e;case m.ActionTypes.EVENT_TO_GUEST:return $e(t.event),e;case"webclient.expand.window":return $e(t),e;case"ENABLE_SPEECH_SUPPORT":return Object.assign({},e,{speechSupport:!0});case"RECEIVE_SPEECH_TRANSCRIPTION":var s=new m.TextMessage(t.transcription,new m.GuestUser);return Ze(e,s);default:return e}},at=Object(Qe.c)({chat:nt,connection:Ke,locale:p.d}),rt=function(e){if(null===e)return!1;var t=new Date(e);return t.setHours(t.getHours()+12),new Date>t},it=n(152),ot=n.n(it),st=["CONNECT","CONNECTING","CONNECTED","DISCONNECTED","RECONNECTED","RESTORE_SESSION_ID",m.ActionTypes.MESSAGE_TO_GUEST,m.ActionTypes.EVENT_TO_GUEST,m.ActionTypes.TYPING_ON,m.ActionTypes.TYPING_OFF,"RESTORE_PREVIOUS_CHAT_MESSAGES","@@localize/SET_ACTIVE_LANGUAGE"],ct=function(e){var t=e.dispatch;return function(e){var n=null;return function(a){var r=e(a);if("CONNECT"===a.type)null!=n&&n.disconnect(),t({type:"CONNECTING"}),(n=ot()("/bf-webclient?"+a.querystrings)).on("action",t),n.on("connect",(function(){return t({type:"CONNECTED"})})),n.on("disconnect",(function(){return t({type:"DISCONNECTED"})})),n.on("reconnect",(function(){return t({type:"RECONNECTED"})})),n.on("set-active-language",(function(e){return t(Object(p.e)(e))})),n.on("enable-speech-support",(function(){return t({type:"ENABLE_SPEECH_SUPPORT"})})),n.on("speech-transcription",(function(e){return t(function(e){return{type:"RECEIVE_SPEECH_TRANSCRIPTION",transcription:e}}(e))})),n.on("restore-client-state",(function(e){n.io.uri=n.io.uri.replace(a.sessionId,e.sessionId),t({type:"RESTORE_SESSION_ID",sessionId:e.sessionId}),t({type:"RESTORE_PREVIOUS_CHAT_MESSAGES",messages:e.messages})})),n.on("file-uploaded",(function(){return console.log("webclient socket middle ware: file-uploaded")})),n.on("expand-window",(function(){return t({type:"webclient.expand.window"})}));else if("webclient.get.started"===a.type){var i;null===(i=n)||void 0===i||i.emit("get-started",JSON.stringify(a))}else if(a.type===m.ActionTypes.FILE_FROM_GUEST){var o;null===(o=n)||void 0===o||o.emit("file-from-guest",JSON.stringify(a))}else if("AUDIO_MESSAGE_FROM_USER"===a.type){var s;null===(s=n)||void 0===s||s.emit("audio-message",a.buffer)}else-1===st.indexOf(a.type)&&n&&n.emit("action",JSON.stringify(a));return r}}},lt=function(){var e=function(){try{if("undefined"===typeof localStorage)return;var e=localStorage.getItem("bf-webclient-state-last-saved-at");if(rt(e))return;var t=localStorage.getItem("bf-webclient-state");if(null===t)return;return JSON.parse(t)}catch(n){return void console.error(n)}}(),t=Object(Qe.d)(Object(Qe.a)(Ye.a,ct))(Qe.e)(at,e);return t.subscribe(Ve()((function(){!function(e){try{var t=JSON.stringify(e);localStorage.setItem("bf-webclient-state",t);var n=(new Date).toISOString();localStorage.setItem("bf-webclient-state-last-saved-at",n)}catch(a){console.error(a)}}({connection:t.getState().connection})}),1e3)),t}();!function(e){var t=["de","en","fr","it"];e(Object(p.c)({languages:t,options:{defaultLanguage:"de",renderToStaticMarkup:!1}})),t.forEach((function(t){var a=n(277)("./".concat(t,".json"));e(Object(p.a)(a,t))}))}(lt.dispatch),c.a.render(o.a.createElement(l.a,{store:lt},o.a.createElement("div",{className:d.a.chatPage},o.a.createElement(Je,null))),document.getElementById("root"))},35:function(e,t,n){e.exports={quickReplies:"QuickReplies_quickReplies__3s_Fe",quickReply:"QuickReplies_quickReply__1ALDF",more:"QuickReplies_more__1NmDD"}},36:function(e,t,n){e.exports={inputWrapper:"TextInput_inputWrapper__3g5RY",messageInputWrapper:"TextInput_messageInputWrapper__3kX2Z",messageInput:"TextInput_messageInput__1wtyj",sendMessage:"TextInput_sendMessage__1PytH"}},37:function(e,t,n){e.exports={upload:"Upload_upload__115Jj",upload__button:"Upload_upload__button__38-Um",uploading:"Upload_uploading__3ox9F",MoveUpDown:"Upload_MoveUpDown__127MH"}},5:function(e,t,n){e.exports={messageBot:"Message_messageBot__1UGxS",messageUser:"Message_messageUser__3kL5s",avatar:"Message_avatar__3lDSz",textWrapper:"Message_textWrapper__2QTuM",text:"Message_text__3bVsr",leftTextWrapper:"Message_leftTextWrapper__T6JdA",leftText:"Message_leftText__3KRO6",rightTextWrapper:"Message_rightTextWrapper__3N8Sq",rightText:"Message_rightText__1PbWT"}},8:function(e,t,n){e.exports={button:"Global_button__33oEy"}},9:function(e,t,n){e.exports={image:"DetailMessage_image__1zbE4",image_container:"DetailMessage_image_container__30r15",play_button:"DetailMessage_play_button__2Hboo",title:"DetailMessage_title__A_inP",subtitle:"DetailMessage_subtitle__1ND_J",button:"DetailMessage_button__3wrCB",video_container:"DetailMessage_video_container__29xT4",video:"DetailMessage_video__2ChW3"}},92:function(e,t,n){e.exports={messageContainer:"MessageContainer_messageContainer__1JbXm",messages:"MessageContainer_messages__1EfQ1"}}},[[154,1,2]]]);
2
- //# sourceMappingURL=main.40572d8f.chunk.js.map
1
+ (this.webpackJsonpclient=this.webpackJsonpclient||[]).push([[0],{138:function(e,t,n){e.exports={chatPage:"Client_chatPage__126Ne"}},140:function(e,t,n){e.exports={chatwindow:"Chat_chatwindow__2gTsn"}},141:function(e,t,n){e.exports={inputContainer:"InputContainer_inputContainer__3uWNo"}},144:function(e,t,n){e.exports={text:"Text_text__1zaFO"}},147:function(e,t,n){e.exports={markdownMessage:"MarkdownMessage_markdownMessage__15Vr7"}},148:function(e,t,n){},149:function(e,t,n){e.exports={typingIndicator:"TypingIndicator_typingIndicator__1YwyE",blink:"TypingIndicator_blink__3akB9"}},154:function(e,t,n){e.exports=n(318)},21:function(e,t,n){e.exports={audioRecorder:"AudioRecorder_audioRecorder__37BQJ",recordButton:"AudioRecorder_recordButton__3-QeV",submitButton:"AudioRecorder_submitButton__10pVF",cancelButton:"AudioRecorder_cancelButton__64CTn",recorderIcon:"AudioRecorder_recorderIcon__2o4Ov",pulse:"AudioRecorder_pulse__3Xsbm",spinning:"AudioRecorder_spinning__1hO3P",spin:"AudioRecorder_spin__3bMw-"}},277:function(e,t,n){var a={"./de.json":278,"./en.json":279,"./fr.json":280,"./it.json":281};function r(e){var t=i(e);return n(t)}function i(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}r.keys=function(){return Object.keys(a)},r.resolve=i,e.exports=r,r.id=277},278:function(e){e.exports=JSON.parse('{"Enter chat message":"Nachricht eingeben ..."}')},279:function(e){e.exports=JSON.parse('{"Enter chat message":"Enter chat message ..."}')},280:function(e){e.exports=JSON.parse('{"Enter chat message":"Entrez un message chat ..."}')},281:function(e){e.exports=JSON.parse('{"Enter chat message":"Inserisci messaggio chat ..."}')},315:function(e,t){},318:function(e,t,n){"use strict";n.r(t);n(155);var a,r,i=n(0),o=n.n(i),s=n(25),c=n.n(s),l=n(54),u=n(138),d=n.n(u),p=n(13),m=n(1),g=function(e){return{type:"MESSAGE_TO_PARENT_PAGE",message:{type:"webclient.change.url",url:e}}},E=n(89),f=n.n(E),_=n(90),h=n.n(_),v=n(320),S=function(e,t,n){return{type:"CONNECT",sessionId:e,userId:t,querystrings:n}},T=n(140),b=n.n(T),C=n(2),N=n.n(C),O=n(141),k=n.n(O),R=n(8),y=n.n(R),w=n(35),I=n.n(w),A=function(e){var t=e.quickReplies,n=e.onQuickReplyClick,a=e.onShowMore;return o.a.createElement("div",{className:I.a.quickReplies},t.map((function(e){return o.a.createElement("span",{key:e.label,className:N()(I.a.quickReply,y.a.button),onClick:function(){return n(e)}},e.label)})),o.a.createElement("span",{key:"more",className:N()(I.a.quickReply,I.a.more),onClick:function(){return a()}},"..."))},x=n(153),M=n(52),U=n(53),D=n(15),G=n(56),B=n(55),j=n(21),q=n.n(j),L=function(e){Object(G.a)(n,e);var t=Object(B.a)(n);function n(e){var a;return Object(M.a)(this,n),(a=t.call(this,e)).audioInput=null,a.volume=null,a.leftchannel=[],a.recorder=null,a.recordingLength=0,a.sampleRate=null,a.mediaStream=null,a.state={recordingState:"none"},a.triggerAudioRecording=a.triggerAudioRecording.bind(Object(D.a)(a)),a.triggerAudioRecordingSuccess=a.triggerAudioRecordingSuccess.bind(Object(D.a)(a)),a.initRecording=a.initRecording.bind(Object(D.a)(a)),a.processRecordingInput=a.processRecordingInput.bind(Object(D.a)(a)),a.handleClickSubmitAudio=a.handleClickSubmitAudio.bind(Object(D.a)(a)),a.handleClickStopAudio=a.handleClickStopAudio.bind(Object(D.a)(a)),a}return Object(U.a)(n,[{key:"triggerAudioRecording",value:function(){this.setState({recordingState:"connecting"}),navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(this.triggerAudioRecordingSuccess)}},{key:"triggerAudioRecordingSuccess",value:function(e){this.mediaStream=e,this.leftchannel.length=0,this.recordingLength=0,this.initRecording(e)}},{key:"initRecording",value:function(e){var t=new(window.AudioContext||window.webkitAudioContext);this.sampleRate=t.sampleRate,this.volume=t.createGain(),this.audioInput=t.createMediaStreamSource(e),this.audioInput.connect(this.volume),this.recorder=t.createScriptProcessor(2048,1,1),this.recorder.onaudioprocess=this.processRecordingInput,this.volume.connect(this.recorder),this.recorder.connect(t.destination)}},{key:"processRecordingInput",value:function(e){if("connecting"===this.state.recordingState&&this.setState({recordingState:"recording"}),"none"!==this.state.recordingState){var t=e.inputBuffer.getChannelData(0);this.leftchannel.push(new Float32Array(t)),this.recordingLength+=2048}}},{key:"handleClickSubmitAudio",value:function(){var e=W(this.leftchannel,this.recordingLength),t=H(e,this.sampleRate||0),n=F(t);this.props.onAudioRecorded(n),this.handleClickStopAudio()}},{key:"handleClickStopAudio",value:function(){var e,t,n,a;(this.setState({recordingState:"none"}),null===(e=this.audioInput)||void 0===e||e.disconnect(),null===(t=this.volume)||void 0===t||t.disconnect(),null===(n=this.recorder)||void 0===n||n.disconnect(),this.mediaStream)&&(null===(a=this.mediaStream)||void 0===a||a.getAudioTracks().forEach((function(e){e.stop()})))}},{key:"render",value:function(){return o.a.createElement("div",{className:q.a.audioRecorder},"none"===this.state.recordingState&&o.a.createElement("button",{className:N()(y.a.button,q.a.recordButton),type:"submit",onClick:this.triggerAudioRecording},o.a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},o.a.createElement("path",{d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),o.a.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))),"connecting"===this.state.recordingState&&o.a.createElement("svg",{className:q.a.spinning,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},o.a.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),o.a.createElement("path",{d:"M0 0h24v24H0z",fill:"none"})),"recording"===this.state.recordingState&&o.a.createElement("div",{className:q.a.audioRecorder},o.a.createElement("button",{className:N()(y.a.button,q.a.cancelButton),onClick:this.handleClickStopAudio},o.a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},o.a.createElement("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),o.a.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))),o.a.createElement("div",{className:q.a.recorderIcon}),o.a.createElement("button",{className:N()(y.a.button,q.a.submitButton),type:"submit",onClick:this.handleClickSubmitAudio},o.a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},o.a.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),o.a.createElement("path",{d:"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"})))))}}]),n}(o.a.Component),F=function(e){var t=new ArrayBuffer(44+2*e.length),n=new DataView(t);P(n,0,"RIFF"),n.setUint32(4,44+2*e.length,!0),P(n,8,"WAVE"),P(n,12,"fmt "),n.setUint32(16,16,!0),n.setUint16(20,1,!0),n.setUint16(22,1,!0),n.setUint32(24,16e3,!0),n.setUint32(28,64e3,!0),n.setUint16(32,4,!0),n.setUint16(34,16,!0),P(n,36,"data"),n.setUint32(40,2*e.length,!0);for(var a=e.length,r=44,i=0;i<a;i++)n.setInt16(r,32767*e[i],!0),r+=2;return new Blob([n],{type:"audio/wav"})},P=function(e,t,n){for(var a=0;a<n.length;a++)e.setUint8(t+a,n.charCodeAt(a))},W=function(e,t){for(var n=new Float32Array(t),a=0,r=e.length,i=0;i<r;i++){var o=e[i];n.set(o,a),a+=o.length}return n},H=function(e,t){if(16e3===t)return e;for(var n=t/16e3,a=Math.round(e.length/n),r=new Float32Array(a),i=0,o=0;i<r.length;){for(var s=Math.round((i+1)*n),c=0,l=0,u=o;u<s&&u<e.length;u++)c+=e[u],l++;r[i]=c/l,i++,o=s}return r},V=n(36),J=n.n(V),z=function(e){var t=e.speechSupport,n=e.translate,a=e.onTextInput,r=e.onAudioRecorded,s=Object(i.useState)(!1),c=Object(x.a)(s,2),l=c[0],u=c[1],d=Object(i.useRef)(null);return o.a.createElement("form",{className:J.a.inputWrapper,onSubmit:function(e){e.preventDefault();var t=d.current;t&&t.value.trim().length>=1&&(a(t.value.trim()),t.value="",u(!1),t.focus())}},o.a.createElement("div",{className:J.a.messageInputWrapper},o.a.createElement("input",{className:J.a.messageInput,placeholder:n("Enter chat message"),ref:d,onChange:function(e){var t=e.target.value.trim();u(t.length>0)}})),l||!t||void 0===navigator.mediaDevices?o.a.createElement("button",{className:N()(J.a.sendMessage,y.a.button),type:"submit"},o.a.createElement("svg",{width:"100%",height:"100%",viewBox:"0 0 232 168"},o.a.createElement("path",{d:"M227.514,84.044l-224,-80l48,80l-48,80l224,-80Z"}))):t&&void 0!==navigator.mediaDevices&&o.a.createElement(L,{onAudioRecorded:r}))},Q=n(93),Y=n(37),K=n.n(Y),X=function(e){return"pending"===e?K.a.upload__button:"uploading"===e?N()(K.a.upload__button,K.a.uploading):""},Z=function(e){var t=e.uploadRequest,n=(t=void 0===t?{}:t).uploadState,a=t.label,r=void 0===a?"":a,i=t.payload,s=void 0===i?{}:i,c=e.onUploadFile;return o.a.createElement("div",{className:K.a.upload},r&&o.a.createElement("label",{className:X(n)},n===m.UploadStateEnum.PENDING&&o.a.createElement("div",null,o.a.createElement("input",{type:"file",onChange:function(e){var t,n,a=null===(t=e.target)||void 0===t||null===(n=t.files)||void 0===n?void 0:n.item(0);if(a){var r=new FileReader;r.onload=function(e){c(a.name,e.target.result,s)},r.readAsDataURL(a)}}}),o.a.createElement(Q.a,null),o.a.createElement("span",null,r)),n===m.UploadStateEnum.UPLOADING&&o.a.createElement("div",null,o.a.createElement(Q.b,null),o.a.createElement("span",null,"".concat(r," wird hochgeladen")))))},$=function(e){var t=e.quickReplies,n=e.uploadRequest,a=e.speechSupport,r=e.translate,i=e.onTextInput,s=e.onQuickReplyClick,c=e.onShowMore,l=e.onUploadFile,u=e.onAudioRecorded;return o.a.createElement("div",{className:N()(k.a.inputContainer)},o.a.createElement(Z,{uploadRequest:n,onUploadFile:l}),o.a.createElement(A,{quickReplies:t,onQuickReplyClick:s,onShowMore:c}),o.a.createElement(z,{translate:r,onTextInput:i,onAudioRecorded:u,speechSupport:a}))},ee=n(91),te=n.n(ee),ne=n(5),ae=n.n(ne),re=function(e){var t=e.sender,n=e.children;return o.a.createElement("li",{className:ae.a.messageBot},o.a.createElement("img",{className:ae.a.avatar,src:"".concat(t.avatar),alt:t.type===m.UserType.BOT?"Bot":"Agent"}),o.a.createElement("div",{className:N()(ae.a.textWrapper,ae.a.leftTextWrapper)},o.a.createElement("div",{className:N()(ae.a.text,ae.a.leftText)},n)))},ie=n(28),oe=n.n(ie),se=n(14),ce=n.n(se),le=n(9),ue=n.n(le),de=function(e){var t=e.buttons,n=e.onButtonClick;return o.a.createElement("div",null,t.map((function(e,t){return o.a.createElement("button",{key:t,className:N()(ue.a.button,y.a.button),onClick:function(){return n(e)}},e.title)})))},pe=function(e){var t=e.alt,n=e.imageUrl,a=e.itemUrl;return n?o.a.createElement("div",{className:ue.a.image},a?a.includes("youtube.com")?o.a.createElement("div",{className:ue.a.video_container},o.a.createElement("iframe",{className:ue.a.video,title:"Youtube",width:"100%",src:a+"?rel=0",frameBorder:"0",allowFullScreen:!0})):o.a.createElement("a",{href:a,target:"_blank",rel:"noopener noreferrer"},o.a.createElement("img",{src:n,alt:t})):o.a.createElement("img",{src:n,alt:t})):null},me=n(142),ge=n.n(me),Ee=n(143),fe=n.n(Ee),_e=n(144),he=n.n(_e),ve=function(e){var t=e.text,n=e.onLinkClick,a=function(e,t,a){return o.a.createElement("a",{key:a,onClick:(r=e,function(e){return e.preventDefault(),r&&n(r),!1})},t);var r};return o.a.createElement("div",null,t.split("\n").map((function(e,t){return o.a.createElement("span",{key:t,className:he.a.text},o.a.createElement(fe.a,{componentDecorator:a},ge.a.emojify(e)),o.a.createElement("br",null))})))},Se=function(e){var t=e.subtitle,n=e.onLinkClick;return t?o.a.createElement("div",{className:ue.a.subtitle},o.a.createElement(ve,{text:t,onLinkClick:n})):null},Te=function(e){var t=e.title;return t?o.a.createElement("h2",{className:ue.a.title},t):null},be=function(e){var t=e.title,n=e.subtitle,a=e.imageUrl,r=e.itemUrl,i=e.buttons,s=e.onButtonClick,c=e.onLinkClick;return o.a.createElement("div",null,o.a.createElement(ce.a,{query:"(max-height: 150px)"},o.a.createElement(oe.a,{clamp:2},o.a.createElement(Se,{subtitle:n,onLinkClick:c}))),o.a.createElement(ce.a,{query:"(min-height: 151px)"},o.a.createElement(Te,{title:t}),o.a.createElement(pe,{imageUrl:a,itemUrl:r,alt:t||n}),o.a.createElement(Se,{subtitle:n,onLinkClick:c}),o.a.createElement(de,{buttons:i,onButtonClick:s})))},Ce=n(145),Ne=n(147),Oe=n.n(Ne),ke=function(e){var t=e.markdown,n=e.excerpt,a=e.className,r=e.onLinkClick,i=function(e){return function(t){return t.preventDefault(),e&&r(e),!1}};return o.a.createElement("div",{className:N()(Oe.a.markdownMessage,a)},o.a.createElement(ce.a,{query:"(max-height: 150px)"},o.a.createElement(oe.a,{clamp:2},o.a.createElement(ve,{text:n,onLinkClick:r}))),o.a.createElement(ce.a,{query:"(min-height: 151px)"},o.a.createElement(Ce.a,{options:{overrides:{a:function(e){var t=e.title,n=e.href,a=e.children;return 0===n.indexOf("newtab#")?o.a.createElement("a",{href:n.slice("newtab#".length),title:t,target:"_blank",rel:"noopener noreferrer"},a):o.a.createElement("a",{onClick:i(n),title:t},a)}}}},t)))},Re=n(148),ye=n.n(Re),we=function(e){var t=e.text,n=e.onLinkClick;return o.a.createElement("div",{className:ye.a.text},o.a.createElement(ce.a,{query:"(max-height: 150px)"},o.a.createElement(oe.a,{clamp:2},o.a.createElement(ve,{text:t,onLinkClick:n}))),o.a.createElement(ce.a,{query:"(min-height: 151px)"},o.a.createElement(ve,{text:t,onLinkClick:n})))},Ie=function(e){var t=e.children;return o.a.createElement("li",{className:ae.a.messageUser},o.a.createElement("div",{className:N()(ae.a.textWrapper,ae.a.rightTextWrapper)},o.a.createElement("div",{className:N()(ae.a.text,ae.a.rightText)},t)),o.a.createElement("img",{className:ae.a.avatar,alt:"Guest",src:"visitor.svg"}))},Ae=function(e,t,n){switch(e.type){case m.MessageTypeEnum.TEXT:var a=e;return o.a.createElement(we,{text:a.text,onLinkClick:n});case m.MessageTypeEnum.DETAIL:var r=e;return o.a.createElement(be,{title:r.title,subtitle:r.subtitle,imageUrl:r.imageUrl,itemUrl:r.itemUrl,buttons:r.buttons,onButtonClick:t,onLinkClick:n});case m.MessageTypeEnum.MARKDOWN:var i=e;return o.a.createElement(ke,{markdown:i.markdown,excerpt:i.excerpt,className:i.className,onLinkClick:n})}},xe=function(e){var t=e.message,n=e.onButtonClick,a=e.onLinkClick,r=Ae(t,n,a);switch(t.sender.type){case m.UserType.GUEST:return o.a.createElement(Ie,null,r);default:return o.a.createElement(re,{sender:t.sender},r)}},Me=n(92),Ue=n.n(Me),De=n(149),Ge=n.n(De),Be=function(e){var t=e.isTyping;return void 0!==t&&t?o.a.createElement("div",{className:Ge.a.typingIndicator},o.a.createElement("span",null),o.a.createElement("span",null),o.a.createElement("span",null)):null},je=te.a.Element,qe=function(e){Object(G.a)(n,e);var t=Object(B.a)(n);function n(){return Object(M.a)(this,n),t.apply(this,arguments)}return Object(U.a)(n,[{key:"scrollToBottom",value:function(e,t){te.a.scroller.scrollTo("ScrollToElement",{duration:e,delay:t,smooth:!0,containerId:"MessageContainer"})}},{key:"componentDidMount",value:function(){this.scrollToBottom(0,0)}},{key:"componentDidUpdate",value:function(e){var t=this;if(0===e.messages.length&&this.props.messages.length>0)this.scrollToBottom(0,0);else{var n=this.props.isBotTyping,a=e.messages.length!==this.props.messages.length&&e.messages.length>1;(n||a)&&setTimeout((function(){return t.scrollToBottom(700,20)}),10)}}},{key:"render",value:function(){var e=this.props,t=e.messages,n=e.isBotTyping,a=e.onButtonClick,r=e.onLinkClick;return o.a.createElement("div",{className:Ue.a.messageContainer,id:"MessageContainer"},o.a.createElement("ul",{className:Ue.a.messages},t.map((function(e,t){return o.a.createElement(xe,{key:t,message:e,onButtonClick:a,onLinkClick:r})}))),o.a.createElement(Be,{isTyping:n}),o.a.createElement(je,{name:"ScrollToElement"}))}}]),n}(o.a.Component),Le="TRIGGER_ACTION",Fe="TRIGGER_STORY",Pe="CHAT_MESSAGE_FROM_GUEST",We="ON_CHAT_WINDOW_OPEN",He="ON_CHAT_WINDOW_CLOSE",Ve=Object(l.b)((function(e){var t=e.chat;return{messages:t.messages,quickReplies:t.quickReplies,uploadRequest:t.uploadRequest,isBotTyping:t.isBotTyping,speechSupport:t.speechSupport,translate:Object(p.b)(e.locale)}}),(function(e){return{onConnect:function(t){return e(function(e){return function(t,n){var a=h.a.parse(e),r=n().connection,i=r.sessionId;void 0===i&&(i=Object(v.a)());var o=r.userId;if(void 0===o){var s=f.a.get("bf-webclient-userId");o=s||Object(v.a)(),f.a.set("bf-webclient-userId",o)}return a.sessionId=i,a.userId=o,t(S(i,o,h.a.stringify(a)))}}(t))},onMessageFromUser:function(t){return e(function(e){return Object(m.receiveTextMessageFromGuest)(e)}(t))},onAudioRecorded:function(t){return e(function(e){return{type:"AUDIO_MESSAGE_FROM_USER",buffer:e}}(t))},onActionFromUser:function(t){return e(t)},onQuickReplyClick:function(t){return e(function(e){return function(t){return e.payload.type!==m.ActionTypes.MESSAGE_FROM_GUEST&&t(Object(m.receiveTextMessageWithoutAnalysisFromGuest)(e.label)),t(e.payload)}}(t))},onNluEvent:function(t){return e(function(e){return Object(m.requestNLUEvent)(e)}(t))},onButtonClick:function(t){return e(function(e){switch(e.type){case m.ButtonTypeEnum.WEB_URL:return g(e.url);case m.ButtonTypeEnum.POSTBACK:return e.payload;default:throw new Error("unknown button type ".concat(e.type))}}(t))},onLinkClick:function(t){return e(function(e){return g(e)}(t))},onShowMore:function(){return e({type:"MESSAGE_TO_PARENT_PAGE",message:{type:"webclient.show.more"}})},onUploadFile:function(t,n,a){return e(function(e,t,n){return Object(m.receiveFileFromGuest)(e,t,n)}(t,n,a))}}}))((function(e){var t=e.messages,n=e.quickReplies,a=e.uploadRequest,r=e.isBotTyping,s=e.speechSupport,c=e.translate,l=e.onConnect,u=e.onNluEvent,d=e.onMessageFromUser,p=e.onQuickReplyClick,m=e.onButtonClick,g=e.onLinkClick,E=e.onUploadFile,f=e.onShowMore,_=e.onAudioRecorded,h=e.onActionFromUser;return Object(i.useEffect)((function(){var e=function(e){switch(e.data.type){case Le:h(e.data.action);break;case Fe:u(e.data.story);break;case We:h({type:"webclient.chatwindow.opened"});break;case He:h({type:"webclient.chatwindow.closed"});break;case Pe:d(e.data.text)}};return l(window.location.search),window.addEventListener("message",(function(t){return e(t)}),!1),function(){return window.removeEventListener("message",e)}}),[l,h,d,u]),o.a.createElement("div",{className:b.a.chatwindow},o.a.createElement(qe,{messages:t,isBotTyping:r,onButtonClick:m,onLinkClick:g}),o.a.createElement($,{quickReplies:n,uploadRequest:a,speechSupport:s,translate:c,onQuickReplyClick:p,onTextInput:d,onShowMore:f,onUploadFile:E,onAudioRecorded:_}))})),Je=n(150),ze=n.n(Je),Qe=n(20),Ye=n(151);!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTED=2]="RECONNECTED",e[e.DISCONNECTED=3]="DISCONNECTED"}(a||(a={})),function(e){e.GUEST="GUEST",e.BOT="BOT",e.PERSON="PERSON"}(r||(r={}));var Ke={connectionState:a.DISCONNECTED,sessionId:void 0,userId:void 0},Xe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ke,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"CONNECT":return Object.assign({},e,{sessionId:t.sessionId,userId:t.userId});case"CONNECTING":return Object.assign({},e,{connectionState:a.CONNECTING});case"CONNECTED":return Object.assign({},e,{connectionState:a.CONNECTED});case"DISCONNECTED":return Object.assign({},e,{connectionState:a.DISCONNECTED});case"RECONNECTED":return Object.assign({},e,{connectionState:a.RECONNECTED});case"RESTORE_SESSION_ID":return Object.assign({},e,{sessionId:t.sessionId});default:return e}},Ze=function(e,t){return Object.assign({},e,{messages:e.messages.concat([t]),quickReplies:[]})},$e=function(e){et()?window.top.postMessage(e,"*"):"webclient.change.url"===e.type&&window.open(e.url)},et=function(){return"undefined"!==typeof window&&window.self!==window.top},tt={messages:[],quickReplies:[],isBotTyping:!1,speechSupport:!1},nt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:tt,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case m.ActionTypes.TYPING_ON:return Object.assign({},e,{isBotTyping:!0});case m.ActionTypes.TYPING_OFF:return Object.assign({},e,{isBotTyping:!1});case m.ActionTypes.MESSAGE_FROM_GUEST:case m.ActionTypes.MESSAGE_WITHOUT_ANALYSIS_FROM_GUEST:return Ze(e,t.message);case m.ActionTypes.MESSAGE_TO_GUEST:$e(t);var n=Object.assign({},t.message,{_id:t.meta.actionId}),a=e.messages.filter((function(e){return e._id===t.meta.actionId})).length>0;return Object.assign({},e,{messages:a?e.messages:e.messages.concat([n]),quickReplies:n.quickReplies?n.quickReplies:[],uploadRequest:n.uploadRequest?n.uploadRequest:{}});case"RESTORE_PREVIOUS_CHAT_MESSAGES":var r=t.messages;if(r.length>0){var i=r[r.length-1];return Object.assign({},tt,{messages:r,quickReplies:i.quickReplies?i.quickReplies:[],uploadRequest:i.uploadRequest?i.uploadRequest:{}})}return tt;case m.ActionTypes.FILE_FROM_GUEST:var o=Object.assign({},e.uploadRequest,{uploadState:"uploading"});return Object.assign({},e,{uploadRequest:o});case"MESSAGE_TO_PARENT_PAGE":return $e(t.message),e;case m.ActionTypes.EVENT_TO_GUEST:return $e(t.event),e;case"webclient.expand.window":return $e(t),e;case"ENABLE_SPEECH_SUPPORT":return Object.assign({},e,{speechSupport:!0});case"RECEIVE_SPEECH_TRANSCRIPTION":var s=new m.TextMessage(t.transcription,new m.GuestUser);return Ze(e,s);default:return e}},at=Object(Qe.c)({chat:nt,connection:Xe,locale:p.d}),rt=function(e){if(null===e)return!1;var t=new Date(e);return t.setHours(t.getHours()+12),new Date>t},it=n(152),ot=n.n(it),st=["CONNECT","CONNECTING","CONNECTED","DISCONNECTED","RECONNECTED","RESTORE_SESSION_ID",m.ActionTypes.MESSAGE_TO_GUEST,m.ActionTypes.EVENT_TO_GUEST,m.ActionTypes.TYPING_ON,m.ActionTypes.TYPING_OFF,"RESTORE_PREVIOUS_CHAT_MESSAGES","@@localize/SET_ACTIVE_LANGUAGE"],ct=function(e){var t=e.dispatch;return function(e){var n=null;return function(a){var r=e(a);if("CONNECT"===a.type)null!=n&&n.disconnect(),t({type:"CONNECTING"}),(n=ot()("/bf-webclient?"+a.querystrings)).on("action",t),n.on("connect",(function(){return t({type:"CONNECTED"})})),n.on("disconnect",(function(){return t({type:"DISCONNECTED"})})),n.on("reconnect",(function(){return t({type:"RECONNECTED"})})),n.on("set-active-language",(function(e){return t(Object(p.e)(e))})),n.on("enable-speech-support",(function(){return t({type:"ENABLE_SPEECH_SUPPORT"})})),n.on("speech-transcription",(function(e){return t(function(e){return{type:"RECEIVE_SPEECH_TRANSCRIPTION",transcription:e}}(e))})),n.on("restore-client-state",(function(e){n.io.uri=n.io.uri.replace(a.sessionId,e.sessionId),t({type:"RESTORE_SESSION_ID",sessionId:e.sessionId}),t({type:"RESTORE_PREVIOUS_CHAT_MESSAGES",messages:e.messages})})),n.on("file-uploaded",(function(){return console.log("webclient socket middle ware: file-uploaded")})),n.on("expand-window",(function(){return t({type:"webclient.expand.window"})}));else if("webclient.get.started"===a.type){var i;null===(i=n)||void 0===i||i.emit("get-started",JSON.stringify(a))}else if(a.type===m.ActionTypes.FILE_FROM_GUEST){var o;null===(o=n)||void 0===o||o.emit("file-from-guest",JSON.stringify(a))}else if("AUDIO_MESSAGE_FROM_USER"===a.type){var s;null===(s=n)||void 0===s||s.emit("audio-message",a.buffer)}else-1===st.indexOf(a.type)&&n&&n.emit("action",JSON.stringify(a));return r}}},lt=function(){var e=function(){try{if("undefined"===typeof localStorage)return;var e=localStorage.getItem("bf-webclient-state-last-saved-at");if(rt(e))return;var t=localStorage.getItem("bf-webclient-state");if(null===t)return;return JSON.parse(t)}catch(n){return void console.error(n)}}(),t=Object(Qe.d)(Object(Qe.a)(Ye.a,ct))(Qe.e)(at,e);return t.subscribe(ze()((function(){!function(e){try{var t=JSON.stringify(e);localStorage.setItem("bf-webclient-state",t);var n=(new Date).toISOString();localStorage.setItem("bf-webclient-state-last-saved-at",n)}catch(a){console.error(a)}}({connection:t.getState().connection})}),1e3)),t}();!function(e){var t=["de","en","fr","it"];e(Object(p.c)({languages:t,options:{defaultLanguage:"de",renderToStaticMarkup:!1}})),t.forEach((function(t){var a=n(277)("./".concat(t,".json"));e(Object(p.a)(a,t))}))}(lt.dispatch),c.a.render(o.a.createElement(l.a,{store:lt},o.a.createElement("div",{className:d.a.chatPage},o.a.createElement(Ve,null))),document.getElementById("root"))},35:function(e,t,n){e.exports={quickReplies:"QuickReplies_quickReplies__26tJr",quickReply:"QuickReplies_quickReply__PrklG",more:"QuickReplies_more__2X1pI"}},36:function(e,t,n){e.exports={inputWrapper:"TextInput_inputWrapper__1fIyq",messageInputWrapper:"TextInput_messageInputWrapper__6KJHK",messageInput:"TextInput_messageInput__2fCF7",sendMessage:"TextInput_sendMessage__2OtPU"}},37:function(e,t,n){e.exports={upload:"Upload_upload__20XMq",upload__button:"Upload_upload__button__1CRlu",uploading:"Upload_uploading__2pmWz",MoveUpDown:"Upload_MoveUpDown__3z7Hm"}},5:function(e,t,n){e.exports={messageBot:"Message_messageBot__3cmFc",messageUser:"Message_messageUser__1PbuM",avatar:"Message_avatar__1GG1t",textWrapper:"Message_textWrapper__1ZhSM",text:"Message_text__hBn5S",leftTextWrapper:"Message_leftTextWrapper__eSCQv",leftText:"Message_leftText__1KoBc",rightTextWrapper:"Message_rightTextWrapper__2CSGi",rightText:"Message_rightText__3RrIO"}},8:function(e,t,n){e.exports={button:"Global_button__33oEy"}},9:function(e,t,n){e.exports={image:"DetailMessage_image__2Gyth",image_container:"DetailMessage_image_container__8LsJu",play_button:"DetailMessage_play_button__1PWeA",title:"DetailMessage_title__1RlQT",subtitle:"DetailMessage_subtitle__18WDj",button:"DetailMessage_button__2eSMw",video_container:"DetailMessage_video_container__7lOBq",video:"DetailMessage_video__3VEwq"}},92:function(e,t,n){e.exports={messageContainer:"MessageContainer_messageContainer__1AKXT",messages:"MessageContainer_messages__2GeSj"}}},[[154,1,2]]]);
2
+ //# sourceMappingURL=main.59367046.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Client.module.scss","components/Chat.module.scss","components/user-input/InputContainer.module.scss","components/conversation/message/Text.module.scss","components/conversation/message/markdown-message/MarkdownMessage.module.scss","components/conversation/typing-indicator/TypingIndicator.module.scss","components/user-input/input/AudioRecorder.module.scss","locales sync /^/.//.*/.json$","types.ts","actions/index.ts","actions/connectionActions.ts","components/user-input/quick-replies/index.tsx","components/user-input/input/audio-recorder.tsx","components/user-input/input/index.tsx","components/user-input/file-upload/index.tsx","components/user-input/index.tsx","components/conversation/message/bot-message/index.tsx","components/conversation/message/detail-message/Buttons.tsx","components/conversation/message/detail-message/Image.tsx","components/conversation/message/Text.tsx","components/conversation/message/detail-message/Subtitle.tsx","components/conversation/message/detail-message/Title.tsx","components/conversation/message/detail-message/index.tsx","components/conversation/message/markdown-message/index.tsx","components/conversation/message/text-message/index.tsx","components/conversation/message/user-message/index.tsx","components/conversation/message/index.tsx","components/conversation/typing-indicator/index.tsx","components/conversation/index.tsx","components/Chat.tsx","reducers/backendConnectionReducer.ts","reducers/chatReducer.ts","reducers/index.ts","store/localStorage.ts","store/socketMiddleware.ts","store/index.ts","store/configureStore.ts","locales/initialize.ts","index.tsx","components/user-input/quick-replies/QuickReplies.module.scss","components/user-input/input/TextInput.module.scss","components/user-input/file-upload/Upload.module.scss","components/conversation/message/Message.module.scss","Global.module.scss","components/conversation/message/detail-message/DetailMessage.module.scss","components/conversation/MessageContainer.module.scss"],"names":["module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","ConnectionStateEnum","UserType","notifyParentToChangePath","url","type","message","doConnect","sessionId","userId","querystrings","QuickReplies","quickReplies","onQuickReplyClick","onShowMore","className","styles","reply","key","label","classNames","quickReply","globalStyles","button","onClick","more","AudioRecorder","props","audioInput","volume","leftchannel","recorder","recordingLength","sampleRate","mediaStream","state","recordingState","triggerAudioRecording","bind","triggerAudioRecordingSuccess","initRecording","processRecordingInput","handleClickSubmitAudio","handleClickStopAudio","this","setState","navigator","mediaDevices","getUserMedia","audio","video","then","stream","length","context","window","AudioContext","webkitAudioContext","createGain","createMediaStreamSource","connect","createScriptProcessor","onaudioprocess","destination","left","inputBuffer","getChannelData","push","Float32Array","leftBuffer","mergeBuffers","downsampledBuffer","downsampleBuffer","blob","createWav","onAudioRecorded","disconnect","getAudioTracks","forEach","track","stop","audioRecorder","recordButton","xmlns","width","height","viewBox","d","fill","spinning","cancelButton","recorderIcon","submitButton","React","Component","buffer","ArrayBuffer","view","DataView","writeUTFBytes","setUint32","setUint16","OUTPUT_SAMPLE_RATE","lng","index","i","setInt16","Blob","offset","val","setUint8","charCodeAt","channelBuffer","result","set","sampleRateRatio","newLength","Math","round","offsetResult","offsetBuffer","nextOffsetBuffer","accum","count","TextInput","speechSupport","translate","onTextInput","useState","hasText","setHasText","userTextInput","useRef","inputWrapper","onSubmit","event","preventDefault","currentUserInput","current","value","trim","focus","messageInputWrapper","messageInput","placeholder","ref","onChange","target","undefined","sendMessage","buttonStyle","upload__button","uploading","Upload","uploadRequest","uploadState","payload","onUploadFile","upload","UploadStateEnum","PENDING","file","files","item","reader","FileReader","onload","evt","name","readAsDataURL","UPLOADING","UserInput","inputContainer","BotMessage","sender","children","messageBot","avatar","src","alt","BOT","textWrapper","leftTextWrapper","text","leftText","Buttons","buttons","onButtonClick","title","Image","imageUrl","itemUrl","image","includes","video_container","frameBorder","allowFullScreen","href","rel","Text","onLinkClick","componentDecorator","decoratedHref","decoratedText","split","Emoji","emojify","Subtitle","subtitle","Title","DetailMessage","query","clamp","MarkdownMessage","markdown","excerpt","handleOnLinkClick","markdownMessage","options","overrides","a","indexOf","slice","TextMessage","UserMessage","messageUser","rightTextWrapper","rightText","getMessageCmp","MessageTypeEnum","TEXT","textMessage","DETAIL","detailMessage","MARKDOWN","Message","msgCmp","GUEST","TypingIndicator","isTyping","typingIndicator","Element","Scroll","Conversation","duration","delay","scroller","scrollTo","smooth","containerId","scrollToBottom","prevProps","messages","isBotTyping","hasNewMessages","setTimeout","messageContainer","msg","INCOMMING_EVENTS","wrappedComponent","reduxConnect","chat","getTranslate","locale","dispatch","onConnect","getState","parsedQuerystrings","queryString","parse","connectionState","connection","uuid","userIdCookie","Cookies","get","stringify","onMessageFromUser","coreReceiveTextMessageFromGuest","sendMessageFromUser","sendAudioMessageFromUser","onActionFromUser","action","ActionTypes","MESSAGE_FROM_GUEST","receiveTextMessageWithoutAnalysisFromGuest","handleQuickReplyClick","onNluEvent","coreRequestNLUEvent","requestNLUEvent","ButtonTypeEnum","WEB_URL","POSTBACK","handleButtonClick","handleLinkClick","filename","receiveFileFromGuest","sendUploadFileFromUser","useEffect","handleOnMessageFromOutside","data","story","location","search","addEventListener","removeEventListener","chatwindow","initialState","DISCONNECTED","backendConnectionReducer","assign","CONNECTING","CONNECTED","RECONNECTED","appendMessageFromGuestToState","concat","sendToParentPage","isIframe","top","postMessage","open","self","chatReducer","TYPING_ON","TYPING_OFF","MESSAGE_WITHOUT_ANALYSIS_FROM_GUEST","MESSAGE_TO_GUEST","_id","meta","actionId","alreadyAdded","filter","m","lastMessage","FILE_FROM_GUEST","EVENT_TO_GUEST","transcription","GuestUser","rootReducer","combineReducers","localizeReducer","isExpired","lastSavedAt","expiresAt","Date","setHours","getHours","blacklist","socketMiddleware","next","socket","io","on","language","setActiveLanguage","ChatActions","uri","replace","console","log","emit","JSON","store","persistedState","localStorage","getItem","serializedState","err","error","loadState","compose","applyMiddleware","thunk","createStore","reducer","subscribe","throttle","setItem","now","toISOString","saveState","configureStore","languages","initialize","defaultLanguage","renderToStaticMarkup","json","require","addTranslationForLanguage","initTranslations","ReactDOM","render","chatPage","document","getElementById"],"mappings":"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","file":"static/js/main.59367046.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"chatPage\":\"Client_chatPage__126Ne\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"chatwindow\":\"Chat_chatwindow__2gTsn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputContainer\":\"InputContainer_inputContainer__3uWNo\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"text\":\"Text_text__1zaFO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"markdownMessage\":\"MarkdownMessage_markdownMessage__15Vr7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"typingIndicator\":\"TypingIndicator_typingIndicator__1YwyE\",\"blink\":\"TypingIndicator_blink__3akB9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"audioRecorder\":\"AudioRecorder_audioRecorder__37BQJ\",\"recordButton\":\"AudioRecorder_recordButton__3-QeV\",\"submitButton\":\"AudioRecorder_submitButton__10pVF\",\"cancelButton\":\"AudioRecorder_cancelButton__64CTn\",\"recorderIcon\":\"AudioRecorder_recorderIcon__2o4Ov\",\"pulse\":\"AudioRecorder_pulse__3Xsbm\",\"spinning\":\"AudioRecorder_spinning__1hO3P\",\"spin\":\"AudioRecorder_spin__3bMw-\"};","var map = {\n\t\"./de.json\": 278,\n\t\"./en.json\": 279,\n\t\"./fr.json\": 280,\n\t\"./it.json\": 281\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 277;","import { Message, QuickReply, UploadRequest } from '@botfabrik/engine-domain';\nimport { LocalizeState } from 'react-localize-redux';\n\nexport interface RootState {\n chat: ChatState;\n connection: ConnectionState;\n locale: LocalizeState;\n}\n\nexport interface ChatState {\n isBotTyping: boolean;\n messages: Message[];\n quickReplies: QuickReply[];\n uploadRequest?: UploadRequest;\n speechSupport: boolean;\n}\n\nexport enum ConnectionStateEnum {\n CONNECTING,\n CONNECTED,\n RECONNECTED,\n DISCONNECTED,\n}\n\nexport interface ConnectionState {\n connectionState: ConnectionStateEnum;\n sessionId: string | undefined;\n userId: string | undefined;\n}\n\nexport interface Sender {\n avatar: string;\n type: UserType;\n}\n\nexport enum UserType {\n GUEST = 'GUEST',\n BOT = 'BOT',\n PERSON = 'PERSON',\n}\n","import {\n ActionTypes,\n Button,\n ButtonTypeEnum,\n Message,\n PostbackButton,\n QuickReply,\n receiveFileFromGuest,\n receiveTextMessageFromGuest as coreReceiveTextMessageFromGuest,\n receiveTextMessageWithoutAnalysisFromGuest,\n requestNLUEvent as coreRequestNLUEvent,\n UrlButton,\n} from '@botfabrik/engine-domain';\nimport { AnyAction, Dispatch } from 'redux';\n\nexport const MESSAGE_TO_PARENT_PAGE = 'MESSAGE_TO_PARENT_PAGE';\nexport const RESTORE_PREVIOUS_CHAT_MESSAGES = 'RESTORE_PREVIOUS_CHAT_MESSAGES';\nexport const AUDIO_MESSAGE_FROM_USER = 'AUDIO_MESSAGE_FROM_USER';\nexport const ENABLE_SPEECH_SUPPORT = 'ENABLE_SPEECH_SUPPORT';\nexport const RECEIVE_SPEECH_TRANSCRIPTION = 'RECEIVE_SPEECH_TRANSCRIPTION';\n\nexport const GET_STARTED = 'webclient.get.started';\nexport const EXPAND_WINDOW = 'webclient.expand.window';\n\n/**\n * Informiere den Store, dass der Benutzer eine neue Nachricht gesendet hat.\n */\nexport const sendMessageFromUser = (text: string) => coreReceiveTextMessageFromGuest(text);\n\nexport const sendAudioMessageFromUser = (blob: Blob) => ({\n type: AUDIO_MESSAGE_FROM_USER,\n buffer: blob,\n});\n\nexport const enableSpeechSupport = () => ({\n type: ENABLE_SPEECH_SUPPORT,\n});\n\nexport const receiveSpeechTranscription = (transcription: string) => ({\n type: RECEIVE_SPEECH_TRANSCRIPTION,\n transcription,\n});\n\n/**\n * Führt einen NLU Event aus.\n */\nexport const requestNLUEvent = (event: string) => coreRequestNLUEvent(event);\n\nexport const restorePreviousChatMessages = (messages: Message[]) => ({\n type: RESTORE_PREVIOUS_CHAT_MESSAGES,\n messages,\n});\n\nexport const handleQuickReplyClick = (reply: QuickReply) => {\n return (dispatch: Dispatch<AnyAction>) => {\n if ((reply.payload as any).type !== ActionTypes.MESSAGE_FROM_GUEST) {\n dispatch(receiveTextMessageWithoutAnalysisFromGuest(reply.label));\n }\n return dispatch(reply.payload as AnyAction);\n };\n};\n\nexport const handleButtonClick = (button: Button) => {\n switch (button.type) {\n case ButtonTypeEnum.WEB_URL:\n const urlButton = button as UrlButton;\n return notifyParentToChangePath(urlButton.url);\n case ButtonTypeEnum.POSTBACK:\n const postbackButton = button as PostbackButton;\n return postbackButton.payload;\n default:\n throw new Error(`unknown button type ${button.type}`);\n }\n};\n\nexport const handleLinkClick = (url: string) => notifyParentToChangePath(url);\n\nexport const getStarted = () => ({\n type: GET_STARTED,\n});\n\nexport const notifyParentToChangePath = (url: string) => ({\n type: MESSAGE_TO_PARENT_PAGE,\n message: {\n type: 'webclient.change.url',\n url,\n },\n});\n\nexport const showMore = () => ({\n type: MESSAGE_TO_PARENT_PAGE,\n message: {\n type: 'webclient.show.more',\n },\n});\n\nexport const sendUploadFileFromUser = (filename: string, blob: Blob, payload: object) =>\n receiveFileFromGuest(filename, blob, payload);\n","import Cookies from 'js-cookie';\nimport queryString from 'query-string';\nimport { AnyAction, Dispatch } from 'redux';\nimport { v4 as uuid } from 'uuid';\nimport { RootState } from '../types';\n\nexport const CONNECT = 'CONNECT';\nexport const CONNECTING = 'CONNECTING';\nexport const CONNECTED = 'CONNECTED';\nexport const DISCONNECTED = 'DISCONNECTED';\nexport const RECONNECTED = 'RECONNECTED';\nexport const RESTORE_SESSION_ID = 'RESTORE_SESSION_ID';\n\n/**\n * Erstelle eine Verbindung mit dem Backend Server\n */\nexport const connect = (querystrings: string) => {\n return (dispatch: Dispatch<AnyAction>, getState: () => RootState) => {\n const parsedQuerystrings = queryString.parse(querystrings);\n const connectionState = getState().connection;\n\n // get session id\n let sessionId = connectionState.sessionId;\n if (sessionId === undefined) {\n sessionId = uuid();\n }\n\n // get user id\n let userId = connectionState.userId;\n if (userId === undefined) {\n const userIdCookie = Cookies.get('bf-webclient-userId');\n userId = userIdCookie ? userIdCookie : uuid();\n Cookies.set('bf-webclient-userId', userId!);\n }\n\n parsedQuerystrings.sessionId = sessionId;\n parsedQuerystrings.userId = userId;\n\n return dispatch(doConnect(sessionId!, userId!, queryString.stringify(parsedQuerystrings)));\n };\n};\n\nconst doConnect = (sessionId: string, userId: string, querystrings: string) => ({\n type: CONNECT,\n sessionId,\n userId,\n querystrings,\n});\n\nexport const restoreSessionId = (sessionId: string) => ({\n type: RESTORE_SESSION_ID,\n sessionId,\n});\n\n/**\n * Informiere den Store, dass wir eine Verbindung mit dem Server aufbauen.\n */\nexport const connecting = () => ({\n type: CONNECTING,\n});\n\n/**\n * Informiere den Store, dass wir mit dem Server verbunden sind.\n */\nexport const connected = () => ({\n type: CONNECTED,\n});\n\n/**\n * Informiere den Store, dass die Verbindung mit dem Server getrennt wurde.\n */\nexport const disconnected = () => ({\n type: DISCONNECTED,\n});\n\n/**\n * Informiere den Store, dass die Verbindung mit dem Server wiederhergestellt wurde.\n */\nexport const reconnected = () => ({\n type: RECONNECTED,\n});\n","import { QuickReply } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport globalStyles from '../../../Global.module.scss';\nimport styles from './QuickReplies.module.scss';\n\ninterface Props {\n quickReplies: QuickReply[];\n onQuickReplyClick: (reply: QuickReply) => void;\n onShowMore: () => void;\n}\n\nconst QuickReplies: React.FC<Props> = ({ quickReplies, onQuickReplyClick, onShowMore }) => (\n <div className={styles.quickReplies}>\n {quickReplies.map((reply) => (\n <span\n key={reply.label}\n className={classNames(styles.quickReply, globalStyles.button)}\n onClick={() => onQuickReplyClick(reply)}\n >\n {reply.label}\n </span>\n ))}\n <span key=\"more\" className={classNames(styles.quickReply, styles.more)} onClick={() => onShowMore()}>\n ...\n </span>\n </div>\n);\n\nexport default QuickReplies;\n","import classNames from 'classnames';\nimport React from 'react';\nimport globalStyles from '../../../Global.module.scss';\nimport styles from './AudioRecorder.module.scss';\n\nconst BUFFER_SIZE = 2048;\nconst OUTPUT_SAMPLE_RATE = 16000;\n\n/**\n * The implementation of the AudioRecorder was inspired by the following blogpost:\n * https://typedarray.org/from-microphone-to-wav-with-getusermedia-and-web-audio/\n */\n\ninterface Props {\n onAudioRecorded: (blob: Blob) => void;\n}\n\ninterface State {\n recordingState: string;\n}\n\nexport default class AudioRecorder extends React.Component<Props, State> {\n private audioInput: MediaStreamAudioSourceNode | null = null;\n private volume: GainNode | null = null;\n private leftchannel: Float32Array[] = [];\n private recorder: ScriptProcessorNode | null = null;\n private recordingLength: number = 0;\n private sampleRate: number | null = null;\n private mediaStream: MediaStream | null = null;\n\n constructor(props: Props) {\n super(props);\n this.state = { recordingState: 'none' };\n\n this.triggerAudioRecording = this.triggerAudioRecording.bind(this);\n this.triggerAudioRecordingSuccess = this.triggerAudioRecordingSuccess.bind(this);\n this.initRecording = this.initRecording.bind(this);\n this.processRecordingInput = this.processRecordingInput.bind(this);\n this.handleClickSubmitAudio = this.handleClickSubmitAudio.bind(this);\n this.handleClickStopAudio = this.handleClickStopAudio.bind(this);\n }\n\n triggerAudioRecording() {\n this.setState({ recordingState: 'connecting' });\n navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(this.triggerAudioRecordingSuccess);\n }\n\n triggerAudioRecordingSuccess(stream: MediaStream) {\n this.mediaStream = stream;\n this.leftchannel.length = 0;\n this.recordingLength = 0;\n\n this.initRecording(stream);\n }\n\n initRecording(stream: MediaStream) {\n var AudioContext = window.AudioContext || (window as any).webkitAudioContext;\n var context = new AudioContext();\n // we query the context sample rate (varies depending on platforms)\n this.sampleRate = context.sampleRate;\n // creates a gain node which adjusts the volume on audio streams\n this.volume = context.createGain();\n // creates an audio node from the microphone incoming stream\n this.audioInput = context.createMediaStreamSource(stream);\n // connect the stream to the gain node\n this.audioInput.connect(this.volume);\n this.recorder = context.createScriptProcessor(BUFFER_SIZE, 1, 1);\n this.recorder.onaudioprocess = this.processRecordingInput;\n // we connect the recorder\n this.volume.connect(this.recorder);\n this.recorder.connect(context.destination);\n }\n\n processRecordingInput(e: AudioProcessingEvent) {\n if (this.state.recordingState === 'connecting') {\n this.setState({ recordingState: 'recording' });\n }\n if (this.state.recordingState !== 'none') {\n const left = e.inputBuffer.getChannelData(0);\n // we clone the samples\n this.leftchannel.push(new Float32Array(left));\n this.recordingLength += BUFFER_SIZE;\n }\n }\n\n handleClickSubmitAudio() {\n // we flat the left channel down\n const leftBuffer = mergeBuffers(this.leftchannel, this.recordingLength);\n const downsampledBuffer = downsampleBuffer(leftBuffer, this.sampleRate || 0);\n\n // we create our wav file\n const blob = createWav(downsampledBuffer);\n this.props.onAudioRecorded(blob);\n\n // For debugging purpose: Set link to state so you can display a button on the UI to download the audio file:\n // var url = (window.URL || window.webkitURL).createObjectURL(blob);\n // this.setState({url});\n\n this.handleClickStopAudio();\n }\n\n handleClickStopAudio() {\n this.setState({ recordingState: 'none' });\n this.audioInput?.disconnect();\n this.volume?.disconnect();\n this.recorder?.disconnect();\n if (this.mediaStream) {\n this.mediaStream?.getAudioTracks().forEach((track: MediaStreamTrack) => {\n track.stop();\n });\n }\n }\n\n render() {\n return (\n <div className={styles.audioRecorder}>\n {this.state.recordingState === 'none' && (\n <button\n className={classNames(globalStyles.button, styles.recordButton)}\n type=\"submit\"\n onClick={this.triggerAudioRecording}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n </button>\n )}\n\n {this.state.recordingState === 'connecting' && (\n <svg\n className={styles.spinning}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n )}\n\n {this.state.recordingState === 'recording' && (\n <div className={styles.audioRecorder}>\n <button\n className={classNames(globalStyles.button, styles.cancelButton)}\n onClick={this.handleClickStopAudio}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n </button>\n <div className={styles.recorderIcon} />\n <button\n className={classNames(globalStyles.button, styles.submitButton)}\n type=\"submit\"\n onClick={this.handleClickSubmitAudio}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nconst createWav = (downsampledBuffer: Float32Array) => {\n const buffer = new ArrayBuffer(44 + downsampledBuffer.length * 2);\n const view = new DataView(buffer);\n\n // RIFF chunk descriptor\n writeUTFBytes(view, 0, 'RIFF');\n view.setUint32(4, 44 + downsampledBuffer.length * 2, true);\n writeUTFBytes(view, 8, 'WAVE');\n\n // FMT sub-chunk\n writeUTFBytes(view, 12, 'fmt ');\n view.setUint32(16, 16, true);\n view.setUint16(20, 1, true);\n\n // mono - 1 channel\n view.setUint16(22, 1, true);\n view.setUint32(24, OUTPUT_SAMPLE_RATE, true);\n view.setUint32(28, OUTPUT_SAMPLE_RATE * 4, true);\n view.setUint16(32, 4, true);\n view.setUint16(34, 16, true);\n\n // data sub-chunk\n writeUTFBytes(view, 36, 'data');\n view.setUint32(40, downsampledBuffer.length * 2, true);\n\n // write the PCM samples\n const lng = downsampledBuffer.length;\n let index = 44;\n const volume = 1;\n for (var i = 0; i < lng; i++) {\n view.setInt16(index, downsampledBuffer[i] * (0x7fff * volume), true);\n index += 2;\n }\n\n // our final binary blob\n return new Blob([view], { type: 'audio/wav' });\n};\n\nconst writeUTFBytes = (view: DataView, offset: number, val: string) => {\n for (var i = 0; i < val.length; i++) {\n view.setUint8(offset + i, val.charCodeAt(i));\n }\n};\n\nconst mergeBuffers = (channelBuffer: Float32Array[], recordingLength: number) => {\n const result = new Float32Array(recordingLength);\n let offset = 0;\n const lng = channelBuffer.length;\n for (var i = 0; i < lng; i++) {\n const buffer = channelBuffer[i];\n result.set(buffer, offset);\n offset += buffer.length;\n }\n return result;\n};\n\nconst downsampleBuffer = (buffer: Float32Array, sampleRate: number) => {\n if (OUTPUT_SAMPLE_RATE === sampleRate) {\n return buffer;\n }\n const sampleRateRatio = sampleRate / OUTPUT_SAMPLE_RATE;\n const newLength = Math.round(buffer.length / sampleRateRatio);\n const result = new Float32Array(newLength);\n let offsetResult = 0;\n let offsetBuffer = 0;\n while (offsetResult < result.length) {\n let nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);\n let accum = 0,\n count = 0;\n for (var i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {\n accum += buffer[i];\n count++;\n }\n result[offsetResult] = accum / count;\n offsetResult++;\n offsetBuffer = nextOffsetBuffer;\n }\n return result;\n};\n","import classNames from 'classnames';\nimport React, { useRef, useState } from 'react';\nimport { TranslateFunction } from 'react-localize-redux';\nimport globalStyles from '../../../Global.module.scss';\nimport AudioRecorder from './audio-recorder';\nimport styles from './TextInput.module.scss';\n\ninterface Props {\n speechSupport: boolean;\n translate: TranslateFunction;\n onTextInput: (input: string) => void;\n onAudioRecorded: (blob: Blob) => void;\n}\n\nconst TextInput: React.FC<Props> = ({ speechSupport, translate, onTextInput, onAudioRecorded }) => {\n const [hasText, setHasText] = useState(false);\n const userTextInput = useRef<HTMLInputElement>(null);\n\n const handleClickSubmitButton = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const currentUserInput = userTextInput.current;\n if (currentUserInput && currentUserInput.value.trim().length >= 1) {\n onTextInput(currentUserInput.value.trim());\n currentUserInput.value = '';\n setHasText(false);\n currentUserInput.focus();\n }\n };\n\n const handleOnInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value.trim();\n setHasText(value.length > 0);\n };\n\n return (\n <form className={styles.inputWrapper} onSubmit={handleClickSubmitButton}>\n <div className={styles.messageInputWrapper}>\n <input\n className={styles.messageInput}\n placeholder={translate('Enter chat message') as string}\n ref={userTextInput}\n onChange={handleOnInputChange}\n />\n </div>\n {hasText || !speechSupport || navigator.mediaDevices === undefined ? (\n <button className={classNames(styles.sendMessage, globalStyles.button)} type=\"submit\">\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 232 168\">\n <path d=\"M227.514,84.044l-224,-80l48,80l-48,80l224,-80Z\" />\n </svg>\n </button>\n ) : (\n speechSupport &&\n navigator.mediaDevices !== undefined && <AudioRecorder onAudioRecorded={onAudioRecorded} />\n )}\n </form>\n );\n};\n\nexport default TextInput;\n","import { UploadRequest, UploadStateEnum } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { FaPaperclip, FaUpload } from 'react-icons/fa';\nimport styles from './Upload.module.scss';\n\ninterface Props {\n uploadRequest?: UploadRequest;\n onUploadFile: (filename: string, result: any, payload: object) => void;\n}\n\nconst Upload: React.FC<Props> = ({ uploadRequest: { uploadState, label = '', payload = {} } = {}, onUploadFile }) => {\n const handleUploadFile = (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target?.files?.item(0);\n if (file) {\n const reader = new FileReader();\n reader.onload = (evt: any) => {\n onUploadFile(file.name, evt.target.result, payload);\n };\n reader.readAsDataURL(file);\n }\n };\n\n return (\n <div className={styles.upload}>\n {label && (\n <label className={buttonStyle(uploadState)}>\n {uploadState === UploadStateEnum.PENDING && (\n <div>\n <input type=\"file\" onChange={handleUploadFile} />\n <FaPaperclip />\n <span>{label}</span>\n </div>\n )}\n {uploadState === UploadStateEnum.UPLOADING && (\n <div>\n <FaUpload />\n <span>{`${label} wird hochgeladen`}</span>\n </div>\n )}\n </label>\n )}\n </div>\n );\n};\n\nconst buttonStyle = (state: UploadStateEnum | undefined) =>\n state === 'pending'\n ? styles.upload__button\n : state === 'uploading'\n ? classNames(styles.upload__button, styles.uploading)\n : '';\n\nexport default Upload;\n","import { QuickReply, UploadRequest } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { TranslateFunction } from 'react-localize-redux';\nimport styles from './InputContainer.module.scss';\nimport QuickReplies from './quick-replies';\nimport Input from './input';\nimport Upload from './file-upload';\n\ninterface Props {\n quickReplies: QuickReply[];\n speechSupport: boolean;\n uploadRequest?: UploadRequest;\n translate: TranslateFunction;\n onTextInput: (text: string) => void;\n onQuickReplyClick: (reply: QuickReply) => void;\n onShowMore: () => void;\n onUploadFile: (filename: string, blob: Blob, payload: any) => void;\n onAudioRecorded: (blob: Blob) => void;\n}\n\nconst UserInput: React.FC<Props> = ({\n quickReplies,\n uploadRequest,\n speechSupport,\n translate,\n onTextInput,\n onQuickReplyClick,\n onShowMore,\n onUploadFile,\n onAudioRecorded,\n}) => (\n <div className={classNames(styles.inputContainer)}>\n <Upload uploadRequest={uploadRequest} onUploadFile={onUploadFile} />\n <QuickReplies quickReplies={quickReplies} onQuickReplyClick={onQuickReplyClick} onShowMore={onShowMore} />\n <Input\n translate={translate}\n onTextInput={onTextInput}\n onAudioRecorded={onAudioRecorded}\n speechSupport={speechSupport}\n />\n </div>\n);\n\nexport default UserInput;\n","import { UserType } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { Sender } from '../../../../types';\nimport styles from '../Message.module.scss';\n\ninterface Props {\n sender: Sender;\n}\n\nconst BotMessage: React.FC<Props> = ({ sender, children }) => (\n <li className={styles.messageBot}>\n <img className={styles.avatar} src={`${sender.avatar}`} alt={sender.type === UserType.BOT ? 'Bot' : 'Agent'} />\n <div className={classNames(styles.textWrapper, styles.leftTextWrapper)}>\n <div className={classNames(styles.text, styles.leftText)}>{children}</div>\n </div>\n </li>\n);\n\nexport default BotMessage;\n","import { Button } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport globalStyles from '../../../../Global.module.scss';\nimport styles from './DetailMessage.module.scss';\n\ninterface Props {\n buttons: Button[];\n onButtonClick: (button: Button) => void;\n}\n\nconst Buttons: React.FC<Props> = ({ buttons, onButtonClick }) => (\n <div>\n {buttons.map((button, index) => (\n <button\n key={index}\n className={classNames(styles.button, globalStyles.button)}\n onClick={() => onButtonClick(button)}\n >\n {button.title}\n </button>\n ))}\n </div>\n);\n\nexport default Buttons;\n","import React from 'react';\nimport styles from './DetailMessage.module.scss';\n\ninterface Props {\n alt: string;\n imageUrl?: string;\n itemUrl?: string;\n}\n\nconst Image: React.FC<Props> = ({ alt, imageUrl, itemUrl }) =>\n imageUrl ? (\n <div className={styles.image}>\n {itemUrl ? (\n itemUrl.includes('youtube.com') ? (\n <div className={styles.video_container}>\n <iframe\n className={styles.video}\n title=\"Youtube\"\n width=\"100%\"\n src={itemUrl + '?rel=0'}\n frameBorder=\"0\"\n allowFullScreen\n />\n </div>\n ) : (\n <a href={itemUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n <img src={imageUrl} alt={alt} />\n </a>\n )\n ) : (\n <img src={imageUrl} alt={alt} />\n )}\n </div>\n ) : null;\n\nexport default Image;\n","import Emoji from 'node-emoji';\nimport React from 'react';\nimport Linkify from 'react-linkify';\nimport styles from './Text.module.scss';\n\ninterface Props {\n text: string;\n onLinkClick: (href: string) => void;\n}\n\nconst Text: React.FC<Props> = ({ text, onLinkClick }) => {\n const handleOnLinkClick = (href: string) => (event: any) => {\n event.preventDefault();\n if (href) {\n onLinkClick(href);\n }\n return false;\n };\n\n // TODO: Linus\n // - Button anstelle von a verwenden\n const componentDecorator = (decoratedHref: string, decoratedText: string, key: number) => (\n <a key={key} onClick={handleOnLinkClick(decoratedHref)}>\n {decoratedText}\n </a>\n );\n\n return (\n <div>\n {text.split('\\n').map((item, key) => (\n <span key={key} className={styles.text}>\n <Linkify componentDecorator={componentDecorator}>{Emoji.emojify(item)}</Linkify>\n <br />\n </span>\n ))}\n </div>\n );\n};\n\nexport default Text;\n","import React from 'react';\nimport Text from '../Text';\nimport styles from './DetailMessage.module.scss';\n\ninterface Props {\n subtitle: string | undefined;\n onLinkClick: (href: string) => void;\n}\n\nconst Subtitle: React.FC<Props> = ({ subtitle, onLinkClick }) =>\n subtitle ? (\n <div className={styles.subtitle}>\n <Text text={subtitle} onLinkClick={onLinkClick} />\n </div>\n ) : null;\n\nexport default Subtitle;\n","import React from 'react';\nimport styles from './DetailMessage.module.scss';\n\ninterface Props {\n title: string | undefined;\n}\n\nconst Title: React.FC<Props> = ({ title }) => (title ? <h2 className={styles.title}>{title}</h2> : null);\n\nexport default Title;\n","import { Button } from '@botfabrik/engine-domain';\nimport React from 'react';\nimport Dotdotdot from 'react-dotdotdot';\nimport MediaQuery from 'react-responsive';\nimport Buttons from './Buttons';\nimport Image from './Image';\nimport Subtitle from './Subtitle';\nimport Title from './Title';\n\ninterface Props {\n title?: string;\n subtitle: string;\n imageUrl?: string;\n itemUrl?: string;\n buttons: Button[];\n onButtonClick: (button: Button) => void;\n onLinkClick: (href: string) => void;\n}\n\nconst DetailMessage: React.FC<Props> = ({\n title,\n subtitle,\n imageUrl,\n itemUrl,\n buttons,\n onButtonClick,\n onLinkClick,\n}) => (\n <div>\n <MediaQuery query=\"(max-height: 150px)\">\n <Dotdotdot clamp={2}>\n <Subtitle subtitle={subtitle} onLinkClick={onLinkClick} />\n </Dotdotdot>\n </MediaQuery>\n <MediaQuery query=\"(min-height: 151px)\">\n <Title title={title} />\n <Image imageUrl={imageUrl} itemUrl={itemUrl} alt={title || subtitle} />\n <Subtitle subtitle={subtitle} onLinkClick={onLinkClick} />\n <Buttons buttons={buttons} onButtonClick={onButtonClick} />\n </MediaQuery>\n </div>\n);\n\nexport default DetailMessage;\n","import classNames from 'classnames';\nimport Markdown from 'markdown-to-jsx';\nimport React from 'react';\nimport Dotdotdot from 'react-dotdotdot';\nimport MediaQuery from 'react-responsive';\nimport styles from './MarkdownMessage.module.scss';\nimport Text from '../Text';\n\nconst OPEN_LINK_IN_NEW_TAB_INDICATOR = 'newtab#';\n\ninterface Props {\n markdown: string;\n excerpt: string;\n className: string;\n onLinkClick: (href: string) => void;\n}\n\nconst MarkdownMessage: React.FC<Props> = ({ markdown, excerpt, className, onLinkClick }) => {\n const handleOnLinkClick = (href: string) => (event: any) => {\n event.preventDefault();\n if (href) {\n onLinkClick(href);\n }\n return false;\n };\n\n const Link: React.FC<{ title: string; href: string; children: React.ReactChildren }> = ({\n title,\n href,\n children,\n }) => {\n const openInNewTab = href.indexOf(OPEN_LINK_IN_NEW_TAB_INDICATOR) === 0;\n return openInNewTab ? (\n <a href={href.slice(OPEN_LINK_IN_NEW_TAB_INDICATOR.length)} title={title} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n ) : (\n // TODO: Linus\n // - Button anstelle von a verwenden\n <a onClick={handleOnLinkClick(href)} title={title}>\n {children}\n </a>\n );\n };\n\n return (\n <div className={classNames(styles.markdownMessage, className)}>\n <MediaQuery query=\"(max-height: 150px)\">\n <Dotdotdot clamp={2}>\n <Text text={excerpt} onLinkClick={onLinkClick} />\n </Dotdotdot>\n </MediaQuery>\n <MediaQuery query=\"(min-height: 151px)\">\n <Markdown\n options={{\n overrides: {\n a: Link,\n },\n }}\n >\n {markdown}\n </Markdown>\n </MediaQuery>\n </div>\n );\n};\n\nexport default MarkdownMessage;\n","import React from 'react';\nimport Dotdotdot from 'react-dotdotdot';\nimport MediaQuery from 'react-responsive';\nimport Text from '../Text';\nimport styles from './TextMessage.module.scss';\n\ninterface Props {\n text: string;\n onLinkClick: (href: string) => void;\n}\nconst TextMessage: React.FC<Props> = ({ text, onLinkClick }) => (\n <div className={styles.text}>\n <MediaQuery query=\"(max-height: 150px)\">\n <Dotdotdot clamp={2}>\n <Text text={text} onLinkClick={onLinkClick} />\n </Dotdotdot>\n </MediaQuery>\n <MediaQuery query=\"(min-height: 151px)\">\n <Text text={text} onLinkClick={onLinkClick} />\n </MediaQuery>\n </div>\n);\n\nexport default TextMessage;\n","import classNames from 'classnames';\nimport React from 'react';\nimport styles from '../Message.module.scss';\n\nconst UserMessage: React.FC = ({ children }) => (\n <li className={styles.messageUser}>\n <div className={classNames(styles.textWrapper, styles.rightTextWrapper)}>\n <div className={classNames(styles.text, styles.rightText)}>{children}</div>\n </div>\n <img className={styles.avatar} alt=\"Guest\" src=\"visitor.svg\" />\n </li>\n);\n\nexport default UserMessage;\n","import {\n Button,\n DetailMessage as DetailMessageType,\n MarkdownMessage as MarkdownMessageType,\n Message as MessageType,\n MessageTypeEnum,\n TextMessage as TextMessageType,\n UserType,\n} from '@botfabrik/engine-domain';\nimport React from 'react';\nimport BotMessage from './bot-message';\nimport DetailMessage from './detail-message';\nimport MarkdownMessage from './markdown-message';\nimport TextMessage from './text-message';\nimport UserMessage from './user-message';\n\ninterface Props {\n message: MessageType;\n onButtonClick: (button: Button) => void;\n onLinkClick: (href: string) => void;\n}\n\nconst Message: React.FC<Props> = ({ message, onButtonClick, onLinkClick }) => {\n const msgCmp = getMessageCmp(message, onButtonClick, onLinkClick);\n switch (message.sender.type) {\n case UserType.GUEST:\n return <UserMessage>{msgCmp}</UserMessage>;\n default:\n return <BotMessage sender={message.sender}>{msgCmp}</BotMessage>;\n }\n};\n\nconst getMessageCmp = (\n message: MessageType,\n onButtonClick: (button: Button) => void,\n onLinkClick: (href: string) => void\n) => {\n switch (message.type) {\n case MessageTypeEnum.TEXT:\n const textMessage = message as TextMessageType;\n return <TextMessage text={textMessage.text} onLinkClick={onLinkClick} />;\n case MessageTypeEnum.DETAIL:\n const detailMessage = message as DetailMessageType;\n return (\n <DetailMessage\n title={detailMessage.title}\n subtitle={detailMessage.subtitle}\n imageUrl={detailMessage.imageUrl}\n itemUrl={detailMessage.itemUrl}\n buttons={detailMessage.buttons}\n onButtonClick={onButtonClick}\n onLinkClick={onLinkClick}\n />\n );\n case MessageTypeEnum.MARKDOWN:\n const markdownMessage = message as MarkdownMessageType;\n return (\n <MarkdownMessage\n markdown={markdownMessage.markdown}\n excerpt={markdownMessage.excerpt}\n className={markdownMessage.className}\n onLinkClick={onLinkClick}\n />\n );\n }\n};\n\nexport default Message;\n","import React from 'react';\nimport styles from './TypingIndicator.module.scss';\n\ninterface Props {\n isTyping?: boolean;\n}\n\nconst TypingIndicator: React.FC<Props> = ({ isTyping = false }) =>\n isTyping ? (\n <div className={styles.typingIndicator}>\n <span />\n <span />\n <span />\n </div>\n ) : null;\n\nexport default TypingIndicator;\n","import { Button, Message as MessageType } from '@botfabrik/engine-domain';\nimport React from 'react';\nimport Scroll from 'react-scroll';\nimport Message from './message';\nimport styles from './MessageContainer.module.scss';\nimport TypingIndicator from './typing-indicator';\n\nconst Element = Scroll.Element;\n\ninterface Props {\n messages: MessageType[];\n isBotTyping: boolean;\n onButtonClick: (button: Button) => void;\n onLinkClick: (href: string) => void;\n}\n\nclass Conversation extends React.Component<Props> {\n scrollToBottom(duration: number, delay: number) {\n const scroller = Scroll.scroller;\n scroller.scrollTo('ScrollToElement', {\n duration: duration,\n delay: delay,\n smooth: true,\n containerId: 'MessageContainer',\n });\n }\n\n componentDidMount() {\n this.scrollToBottom(0, 0);\n }\n\n componentDidUpdate(prevProps: Props) {\n const isRestored = prevProps.messages.length === 0;\n if (isRestored && this.props.messages.length > 0) {\n this.scrollToBottom(0, 0);\n } else {\n const isBotTyping = this.props.isBotTyping;\n const hasNewMessages =\n prevProps.messages.length !== this.props.messages.length && prevProps.messages.length > 1;\n if (isBotTyping || hasNewMessages) {\n // call scrollToBottom asynchronously to prevent flickering\n setTimeout(() => this.scrollToBottom(700, 20), 10);\n }\n }\n }\n\n render() {\n const { messages, isBotTyping, onButtonClick, onLinkClick } = this.props;\n return (\n <div className={styles.messageContainer} id=\"MessageContainer\">\n <ul className={styles.messages}>\n {messages.map((msg, index) => (\n <Message key={index} message={msg} onButtonClick={onButtonClick} onLinkClick={onLinkClick} />\n ))}\n </ul>\n <TypingIndicator isTyping={isBotTyping} />\n <Element name=\"ScrollToElement\" />\n </div>\n );\n }\n}\n\nexport default Conversation;\n","import { Button, Message, QuickReply, UploadRequest } from '@botfabrik/engine-domain';\nimport React, { useEffect } from 'react';\nimport { getTranslate, TranslateFunction } from 'react-localize-redux';\nimport { connect as reduxConnect } from 'react-redux';\nimport { AnyAction } from 'redux';\nimport {\n handleButtonClick,\n handleLinkClick,\n handleQuickReplyClick,\n requestNLUEvent,\n sendAudioMessageFromUser,\n sendMessageFromUser,\n sendUploadFileFromUser,\n showMore,\n} from '../actions';\nimport { connect } from '../actions/connectionActions';\nimport { RootState } from '../types';\nimport styles from './Chat.module.scss';\nimport UserInput from './user-input';\nimport Conversation from './conversation';\n\n/**\n * Events von der Wordpress Seite\n */\nconst INCOMMING_EVENTS = {\n TRIGGER_ACTION: 'TRIGGER_ACTION',\n TRIGGER_STORY: 'TRIGGER_STORY',\n CHAT_MESSAGE_FROM_GUEST: 'CHAT_MESSAGE_FROM_GUEST',\n ON_CHAT_WINDOW_OPEN: 'ON_CHAT_WINDOW_OPEN',\n ON_CHAT_WINDOW_CLOSE: 'ON_CHAT_WINDOW_CLOSE',\n};\n\ninterface Props {\n messages: Message[];\n quickReplies: QuickReply[];\n isBotTyping: boolean;\n speechSupport: boolean;\n uploadRequest?: UploadRequest;\n translate: TranslateFunction;\n onConnect: (querystrings: string) => void;\n onMessageFromUser: (text: string) => void;\n onActionFromUser: (action: AnyAction) => void;\n onQuickReplyClick: (reply: QuickReply) => void;\n onNluEvent: (event: string) => void;\n onButtonClick: (button: Button) => void;\n onLinkClick: (url: string) => void;\n onShowMore: () => void;\n onUploadFile: (filename: string, blob: Blob, payload: any) => void;\n onAudioRecorded: (blob: Blob) => void;\n}\n\nconst Chat: React.FC<Props> = ({\n messages,\n quickReplies,\n uploadRequest,\n isBotTyping,\n speechSupport,\n translate,\n onConnect,\n onNluEvent,\n onMessageFromUser,\n onQuickReplyClick,\n onButtonClick,\n onLinkClick,\n onUploadFile,\n onShowMore,\n onAudioRecorded,\n onActionFromUser,\n}) => {\n useEffect(() => {\n /**\n * Meldung von ausserhalb (z.B. vom Wordpress Content-Bereich)\n */\n const handleOnMessageFromOutside = (event: any) => {\n switch (event.data.type) {\n case INCOMMING_EVENTS.TRIGGER_ACTION:\n onActionFromUser(event.data.action);\n break;\n case INCOMMING_EVENTS.TRIGGER_STORY:\n onNluEvent(event.data.story);\n break;\n case INCOMMING_EVENTS.ON_CHAT_WINDOW_OPEN:\n onActionFromUser({ type: 'webclient.chatwindow.opened' });\n break;\n case INCOMMING_EVENTS.ON_CHAT_WINDOW_CLOSE:\n onActionFromUser({ type: 'webclient.chatwindow.closed' });\n break;\n case INCOMMING_EVENTS.CHAT_MESSAGE_FROM_GUEST:\n onMessageFromUser(event.data.text);\n break;\n }\n };\n\n onConnect(window.location.search);\n window.addEventListener('message', (event) => handleOnMessageFromOutside(event), false);\n return () => window.removeEventListener('message', handleOnMessageFromOutside);\n }, [onConnect, onActionFromUser, onMessageFromUser, onNluEvent]);\n\n return (\n <div className={styles.chatwindow}>\n <Conversation\n messages={messages}\n isBotTyping={isBotTyping}\n onButtonClick={onButtonClick}\n onLinkClick={onLinkClick}\n />\n <UserInput\n quickReplies={quickReplies}\n uploadRequest={uploadRequest}\n speechSupport={speechSupport}\n translate={translate}\n onQuickReplyClick={onQuickReplyClick}\n onTextInput={onMessageFromUser}\n onShowMore={onShowMore}\n onUploadFile={onUploadFile}\n onAudioRecorded={onAudioRecorded}\n />\n </div>\n );\n};\n\nconst mapStateToProps = (state: RootState) => {\n const { messages, quickReplies, uploadRequest, isBotTyping, speechSupport } = state.chat;\n return {\n messages,\n quickReplies,\n uploadRequest,\n isBotTyping,\n speechSupport,\n translate: getTranslate(state.locale),\n };\n};\n\nconst bindAction = (dispatch: any) => {\n return {\n onConnect: (querystrings: string) => dispatch(connect(querystrings)),\n onMessageFromUser: (text: string) => dispatch(sendMessageFromUser(text)),\n onAudioRecorded: (blob: Blob) => dispatch(sendAudioMessageFromUser(blob)),\n onActionFromUser: (action: AnyAction) => dispatch(action),\n onQuickReplyClick: (reply: any) => dispatch(handleQuickReplyClick(reply)),\n onNluEvent: (event: string) => dispatch(requestNLUEvent(event)),\n onButtonClick: (button: any) => dispatch(handleButtonClick(button)),\n onLinkClick: (url: any) => dispatch(handleLinkClick(url)),\n onShowMore: () => dispatch(showMore()),\n onUploadFile: (filename: string, blob: Blob, payload: any) =>\n dispatch(sendUploadFileFromUser(filename, blob, payload)),\n };\n};\n\nconst wrappedComponent = reduxConnect(mapStateToProps, bindAction)(Chat);\nexport default wrappedComponent;\n","import { AnyAction } from 'redux';\nimport * as ConnectionActions from '../actions/connectionActions';\nimport { ConnectionState, ConnectionStateEnum } from '../types';\n\nconst backendConnectionReducer = (state = initialState, action: AnyAction): ConnectionState => {\n switch (action.type) {\n case ConnectionActions.CONNECT:\n return Object.assign({}, state, {\n sessionId: action.sessionId,\n userId: action.userId,\n });\n\n case ConnectionActions.CONNECTING:\n return Object.assign({}, state, {\n connectionState: ConnectionStateEnum.CONNECTING,\n });\n\n case ConnectionActions.CONNECTED:\n return Object.assign({}, state, {\n connectionState: ConnectionStateEnum.CONNECTED,\n });\n\n case ConnectionActions.DISCONNECTED:\n return Object.assign({}, state, {\n connectionState: ConnectionStateEnum.DISCONNECTED,\n });\n\n case ConnectionActions.RECONNECTED:\n return Object.assign({}, state, {\n connectionState: ConnectionStateEnum.RECONNECTED,\n });\n\n case ConnectionActions.RESTORE_SESSION_ID:\n return Object.assign({}, state, {\n sessionId: action.sessionId,\n });\n\n default:\n return state;\n }\n};\n\nconst initialState: ConnectionState = {\n connectionState: ConnectionStateEnum.DISCONNECTED,\n sessionId: undefined,\n userId: undefined,\n};\n\nexport default backendConnectionReducer;\n","import { ActionTypes, GuestUser, Message, TextMessage } from '@botfabrik/engine-domain';\nimport { AnyAction } from 'redux';\nimport * as ClientActions from '../actions';\nimport { ChatState } from '../types';\n\ninterface MessageWithId extends Message {\n _id: string;\n}\n\nconst chatReducer = (state = initialState, action: AnyAction) => {\n switch (action.type) {\n case ActionTypes.TYPING_ON:\n return Object.assign({}, state, {\n isBotTyping: true,\n });\n\n case ActionTypes.TYPING_OFF:\n return Object.assign({}, state, {\n isBotTyping: false,\n });\n\n case ActionTypes.MESSAGE_FROM_GUEST:\n case ActionTypes.MESSAGE_WITHOUT_ANALYSIS_FROM_GUEST:\n return appendMessageFromGuestToState(state, action.message);\n\n case ActionTypes.MESSAGE_TO_GUEST:\n // Informiere das Top Window (z.B. unser Wordpress-Blog) über das eintreffen einer neuen Nachricht\n sendToParentPage(action);\n\n // id hinzufügen, damit wir nicht zweimal die selbe meldung im state haben\n const message: MessageWithId = Object.assign({}, action.message, { _id: action.meta.actionId });\n const alreadyAdded = state.messages.filter((m: any) => m._id === action.meta.actionId).length > 0;\n\n return Object.assign({}, state, {\n messages: alreadyAdded ? state.messages : state.messages.concat([message]),\n quickReplies: message.quickReplies ? message.quickReplies : [],\n uploadRequest: message.uploadRequest ? message.uploadRequest : {},\n });\n\n case ClientActions.RESTORE_PREVIOUS_CHAT_MESSAGES:\n const messages = action.messages;\n if (messages.length > 0) {\n const lastMessage = messages[messages.length - 1];\n return Object.assign({}, initialState, {\n messages,\n quickReplies: lastMessage.quickReplies ? lastMessage.quickReplies : [],\n uploadRequest: lastMessage.uploadRequest ? lastMessage.uploadRequest : {},\n });\n } else {\n return initialState;\n }\n\n case ActionTypes.FILE_FROM_GUEST:\n const uploadRequest = Object.assign({}, state.uploadRequest, { uploadState: 'uploading' });\n return Object.assign({}, state, { uploadRequest });\n\n case ClientActions.MESSAGE_TO_PARENT_PAGE:\n sendToParentPage(action.message);\n return state;\n\n case ActionTypes.EVENT_TO_GUEST:\n sendToParentPage(action.event);\n return state;\n\n case ClientActions.EXPAND_WINDOW:\n sendToParentPage(action);\n return state;\n\n case ClientActions.ENABLE_SPEECH_SUPPORT:\n return Object.assign({}, state, { speechSupport: true });\n\n case ClientActions.RECEIVE_SPEECH_TRANSCRIPTION:\n const msg = new TextMessage(action.transcription, new GuestUser());\n return appendMessageFromGuestToState(state, msg);\n\n default:\n return state;\n }\n};\n\nconst appendMessageFromGuestToState = (state: ChatState, message: Message) => {\n return Object.assign({}, state, {\n messages: state.messages.concat([message]),\n quickReplies: [],\n });\n};\n\nconst sendToParentPage = (action: any) => {\n if (isIframe()) {\n window.top.postMessage(action, '*');\n } else if (action.type === 'webclient.change.url') {\n window.open(action.url);\n }\n};\n\nconst isIframe = () => typeof window !== 'undefined' && window.self !== window.top;\n\nconst initialState: ChatState = {\n messages: [],\n quickReplies: [],\n isBotTyping: false,\n speechSupport: false,\n};\n\nexport default chatReducer;\n","import { localizeReducer } from 'react-localize-redux';\nimport { combineReducers } from 'redux';\nimport backendConnectionReducer from './backendConnectionReducer';\nimport chatReducer from './chatReducer';\n\nconst rootReducer = combineReducers({\n chat: chatReducer,\n connection: backendConnectionReducer,\n locale: localizeReducer,\n});\n\nexport default rootReducer;\n","import { RootState } from '../types';\n\nconst LOCAL_STORAGE_LAST_SAVED_ITEM_NAME = 'bf-webclient-state-last-saved-at';\nconst LOCAL_STORAGE_STATE_ITEM_NAME = 'bf-webclient-state';\n\nexport const loadState = () => {\n try {\n if (typeof localStorage === 'undefined') {\n return undefined;\n }\n\n // get last save time\n const lastSavedAt = localStorage.getItem(LOCAL_STORAGE_LAST_SAVED_ITEM_NAME);\n if (isExpired(lastSavedAt)) {\n return undefined;\n } else {\n // load persisted state\n const serializedState = localStorage.getItem(LOCAL_STORAGE_STATE_ITEM_NAME);\n if (serializedState === null) {\n return undefined;\n }\n return JSON.parse(serializedState);\n }\n } catch (err) {\n console.error(err);\n return undefined;\n }\n};\n\nexport const saveState = (state: Partial<RootState>) => {\n try {\n // save state\n const serializedState = JSON.stringify(state);\n localStorage.setItem(LOCAL_STORAGE_STATE_ITEM_NAME, serializedState);\n\n // save current date\n let now = new Date().toISOString();\n localStorage.setItem(LOCAL_STORAGE_LAST_SAVED_ITEM_NAME, now);\n } catch (err) {\n // ignorieren\n console.error(err);\n }\n};\n\nconst isExpired = (lastSavedAt: string | null): boolean => {\n if (lastSavedAt === null) {\n return false;\n }\n let expiresAt = new Date(lastSavedAt);\n expiresAt.setHours(expiresAt.getHours() + 12);\n\n let now = new Date();\n\n return now > expiresAt;\n};\n","import { ActionTypes } from '@botfabrik/engine-domain';\nimport { setActiveLanguage } from 'react-localize-redux';\nimport { AnyAction, Dispatch, Middleware, MiddlewareAPI } from 'redux';\nimport io from 'socket.io-client';\nimport * as ChatActions from '../actions';\nimport * as ClientActions from '../actions';\nimport * as ConnectionActions from '../actions/connectionActions';\n\n// Blacklisted actions are not forwarded to the server\nconst blacklist = [\n ConnectionActions.CONNECT,\n ConnectionActions.CONNECTING,\n ConnectionActions.CONNECTED,\n ConnectionActions.DISCONNECTED,\n ConnectionActions.RECONNECTED,\n ConnectionActions.RESTORE_SESSION_ID,\n ActionTypes.MESSAGE_TO_GUEST,\n ActionTypes.EVENT_TO_GUEST,\n ActionTypes.TYPING_ON,\n ActionTypes.TYPING_OFF,\n ChatActions.RESTORE_PREVIOUS_CHAT_MESSAGES,\n '@@localize/SET_ACTIVE_LANGUAGE',\n];\n\nconst socketMiddleware: Middleware = ({ dispatch }: MiddlewareAPI) => (next: Dispatch<AnyAction>) => {\n let socket: SocketIOClient.Socket | null = null;\n\n return (action: AnyAction) => {\n let result = next(action);\n\n if (action.type === ConnectionActions.CONNECT) {\n if (socket != null) {\n socket.disconnect();\n }\n dispatch(ConnectionActions.connecting());\n\n socket = io('/bf-webclient?' + action.querystrings);\n\n socket.on('action', dispatch);\n socket.on('connect', () => dispatch(ConnectionActions.connected()));\n socket.on('disconnect', () => dispatch(ConnectionActions.disconnected()));\n socket.on('reconnect', () => dispatch(ConnectionActions.reconnected()));\n socket.on('set-active-language', (language: string) => dispatch(setActiveLanguage(language)));\n socket.on('enable-speech-support', () => dispatch(ChatActions.enableSpeechSupport()));\n socket.on('speech-transcription', (transcription: string) =>\n dispatch(ChatActions.receiveSpeechTranscription(transcription))\n );\n socket.on('restore-client-state', (state: any) => {\n socket!.io.uri = socket!.io.uri.replace(action.sessionId, state.sessionId);\n dispatch(ConnectionActions.restoreSessionId(state.sessionId));\n dispatch(ChatActions.restorePreviousChatMessages(state.messages));\n });\n socket.on('file-uploaded', () => console.log('webclient socket middle ware: file-uploaded'));\n socket.on('expand-window', () => dispatch({ type: ClientActions.EXPAND_WINDOW }));\n } else if (action.type === ChatActions.GET_STARTED) {\n socket?.emit('get-started', JSON.stringify(action));\n } else if (action.type === ActionTypes.FILE_FROM_GUEST) {\n socket?.emit('file-from-guest', JSON.stringify(action));\n } else if (action.type === ChatActions.AUDIO_MESSAGE_FROM_USER) {\n socket?.emit('audio-message', action.buffer);\n } else if (blacklist.indexOf(action.type) === -1) {\n // Foreward all other actions to the server\n if (socket) {\n socket.emit('action', JSON.stringify(action));\n } else {\n // TODO: wenn socket undefined ist, diese sammeln und später abarbeiten\n }\n }\n\n return result;\n };\n};\n\nexport default socketMiddleware;\n","import configureStore from './configureStore';\n\nconst store = configureStore();\n\nexport default store;\n","import throttle from 'lodash/throttle';\nimport { applyMiddleware, compose, createStore } from 'redux';\nimport thunk from 'redux-thunk';\nimport reducer from '../reducers';\nimport { loadState, saveState } from './localStorage';\nimport socketMiddleware from './socketMiddleware';\n\nconst configureStore = () => {\n const persistedState = loadState();\n const store = compose(applyMiddleware(thunk, socketMiddleware))(createStore)(reducer, persistedState);\n\n store.subscribe(\n throttle(() => {\n let state = store.getState();\n saveState({\n connection: state.connection,\n });\n }, 1000)\n );\n\n return store;\n};\n\nexport default configureStore;\n","import { addTranslationForLanguage, initialize } from 'react-localize-redux';\nimport { Dispatch, AnyAction } from 'redux';\n\nexport default (dispatch: Dispatch<AnyAction>) => {\n const languages = ['de', 'en', 'fr', 'it'];\n dispatch(initialize({ languages, options: { defaultLanguage: 'de', renderToStaticMarkup: false } }));\n\n languages.forEach((language) => {\n const json = require(`./${language}.json`);\n dispatch(addTranslationForLanguage(json, language));\n });\n};\n","import 'react-app-polyfill/ie11';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport styles from './Client.module.scss';\nimport Chat from './components/Chat';\nimport initTranslations from './locales/initialize';\nimport store from './store';\n\ninitTranslations(store.dispatch);\n\nReactDOM.render(\n <Provider store={store}>\n <div className={styles.chatPage}>\n <Chat />\n </div>\n </Provider>,\n document.getElementById('root')\n);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"quickReplies\":\"QuickReplies_quickReplies__26tJr\",\"quickReply\":\"QuickReplies_quickReply__PrklG\",\"more\":\"QuickReplies_more__2X1pI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputWrapper\":\"TextInput_inputWrapper__1fIyq\",\"messageInputWrapper\":\"TextInput_messageInputWrapper__6KJHK\",\"messageInput\":\"TextInput_messageInput__2fCF7\",\"sendMessage\":\"TextInput_sendMessage__2OtPU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"upload\":\"Upload_upload__20XMq\",\"upload__button\":\"Upload_upload__button__1CRlu\",\"uploading\":\"Upload_uploading__2pmWz\",\"MoveUpDown\":\"Upload_MoveUpDown__3z7Hm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"messageBot\":\"Message_messageBot__3cmFc\",\"messageUser\":\"Message_messageUser__1PbuM\",\"avatar\":\"Message_avatar__1GG1t\",\"textWrapper\":\"Message_textWrapper__1ZhSM\",\"text\":\"Message_text__hBn5S\",\"leftTextWrapper\":\"Message_leftTextWrapper__eSCQv\",\"leftText\":\"Message_leftText__1KoBc\",\"rightTextWrapper\":\"Message_rightTextWrapper__2CSGi\",\"rightText\":\"Message_rightText__3RrIO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"Global_button__33oEy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"image\":\"DetailMessage_image__2Gyth\",\"image_container\":\"DetailMessage_image_container__8LsJu\",\"play_button\":\"DetailMessage_play_button__1PWeA\",\"title\":\"DetailMessage_title__1RlQT\",\"subtitle\":\"DetailMessage_subtitle__18WDj\",\"button\":\"DetailMessage_button__2eSMw\",\"video_container\":\"DetailMessage_video_container__7lOBq\",\"video\":\"DetailMessage_video__3VEwq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"messageContainer\":\"MessageContainer_messageContainer__1AKXT\",\"messages\":\"MessageContainer_messages__2GeSj\"};"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botfabrik/engine-webclient",
3
- "version": "4.0.1-alpha.7",
3
+ "version": "4.0.1-alpha.8",
4
4
  "description": "Webclient for Botfabriks Bot Engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,5 +32,5 @@
32
32
  "express": "^4.17.1",
33
33
  "uuid": "^8.1.0"
34
34
  },
35
- "gitHead": "6415e5ff849e103a8c4592cb05efc275aee3a607"
35
+ "gitHead": "09ed13049fabcfb9610e01cebeda5bca1d4417af"
36
36
  }
@@ -1,2 +0,0 @@
1
- @import url(//fonts.googleapis.com/css?family=Roboto:400,300,700,500,100,200);html{font-family:"Roboto",sans-serif}body{margin:0}.Client_chatPage__126Ne{display:flex;flex-direction:column;height:100vh}@media (min-width:36rem){.Client_chatPage__126Ne{flex-direction:row}}.Chat_chatwindow__2gTsn{display:flex;flex-flow:column nowrap;width:100%;height:100vh;max-width:48rem;margin-left:auto;margin-right:auto}@media (min-width:36rem){.Chat_chatwindow__2gTsn{padding-right:1rem}}@media (min-height:14rem){.Chat_chatwindow__2gTsn{background-color:#fff}}.InputContainer_inputContainer__2LEmG{width:100%;background-color:#fff;padding:0 1rem 1rem}@media (max-height:14rem){.InputContainer_inputContainer__2LEmG{background-color:transparent;font-size:.8rem;padding:0 1rem}}.Global_button__33oEy{display:inline-block;font-family:Roboto,sans-serif;font-size:1em;padding:.5em 1em;border-radius:.2rem;background-color:#fff;border:2px solid #fff;color:#008fd7;cursor:pointer;transition:all .2s linear;text-align:center}.Global_button__33oEy:hover{color:#fff;background-color:#008fd7}svg{fill:currentColor}.QuickReplies_quickReplies__3s_Fe{display:flex;flex-flow:row wrap;justify-content:flex-end;padding-bottom:.4rem;margin:0 -.3rem}.QuickReplies_quickReply__1ALDF{margin-top:.5em;margin-right:.5em;background-color:#eee;color:#717171;border:0}.QuickReplies_more__1NmDD{display:none}@media (max-height:14rem){.QuickReplies_quickReplies__3s_Fe{flex-flow:row nowrap}.QuickReplies_quickReply__1ALDF{padding:.6rem .8rem}.QuickReplies_more__1NmDD{padding:.3rem .6rem;font-size:1rem;font-weight:900;line-height:1.5;color:#eee;background-color:#4a4a4a;border:1px solid #eee}}@media (min-width:40rem){.QuickReplies_quickReplies__3s_Fe{font-size:1.2rem}.QuickReplies_quickReply__1ALDF{padding-left:1.5em;padding-right:1.5em}}.AudioRecorder_audioRecorder__9e24N{display:flex}.AudioRecorder_recordButton__104a6{display:block;margin:0;border:0;background-color:#fff;color:#717171}.AudioRecorder_recordButton__104a6:hover{background-color:#008fd7;color:#fff}.AudioRecorder_submitButton__kX6gE{display:block;margin:0;border:0;background-color:#fff;color:#008fd7}.AudioRecorder_submitButton__kX6gE:hover{background-color:#008fd7;color:#fff}.AudioRecorder_cancelButton__379d9{display:block;margin:0;border:0;background-color:#fff;color:#008fd7}.AudioRecorder_cancelButton__379d9:hover{background-color:#008fd7;color:#fff}.AudioRecorder_recorderIcon__2e6S0{width:1.3em;height:1.3em;border-radius:50%;-webkit-animation:AudioRecorder_pulse__2JaAb 2s infinite;animation:AudioRecorder_pulse__2JaAb 2s infinite;margin:auto .6em}@-webkit-keyframes AudioRecorder_pulse__2JaAb{0%{background-color:#fff}40%{background-color:red}60%{background-color:red}to{background-color:#fff}}@keyframes AudioRecorder_pulse__2JaAb{0%{background-color:#fff}40%{background-color:red}60%{background-color:red}to{background-color:#fff}}.AudioRecorder_spinning__26mEm{display:block;margin:auto;color:#717171;-webkit-animation:AudioRecorder_spin__3IqEo 1.2s linear infinite;animation:AudioRecorder_spin__3IqEo 1.2s linear infinite}@-webkit-keyframes AudioRecorder_spin__3IqEo{to{transform:rotate(1turn)}}@keyframes AudioRecorder_spin__3IqEo{to{transform:rotate(1turn)}}.TextInput_inputWrapper__3g5RY{display:flex;line-height:0}@media (max-height:14rem){.TextInput_inputWrapper__3g5RY{display:none}}.TextInput_messageInputWrapper__3kX2Z{flex:1 1;border-radius:.2rem;border:2px solid #bcbdc0;margin-right:.5rem}.TextInput_messageInput__1wtyj{font-size:1rem;border:none;height:100%;box-sizing:border-box;width:100%;outline-width:0;padding:.8rem 1rem;text-overflow:ellipsis;color:grey}.TextInput_sendMessage__1PytH{margin:0;background-color:#008fd7;border-color:#008fd7;color:#fff}.TextInput_sendMessage__1PytH svg{height:1.4rem;width:2.2rem;fill:currentColor}.TextInput_sendMessage__1PytH:hover{color:#008fd7;background-color:#fff}.Upload_upload__115Jj{display:flex;flex-direction:row;justify-content:flex-end;padding-top:.4rem}.Upload_upload__115Jj span+span{margin-left:.3rem;margin-top:0}.Upload_upload__button__38-Um{display:flex;align-items:center;height:3.4rem;width:100%;max-width:24rem;padding:2px 5px;margin:2px;color:#fff;background-color:#008fd7;border:2px solid #008fd7;border-radius:.2rem;cursor:pointer}.Upload_upload__button__38-Um input[type=file]{position:fixed;top:-1000px}.Upload_upload__button__38-Um svg{height:2rem;width:2rem;margin:.8rem;fill:currentColor}.Upload_upload__button__38-Um:hover{background-color:#fff;color:#008fd7}.Upload_upload__button__38-Um:active{background:#ccc;color:#008fd7}.Upload_upload__button__38-Um:invalid+span{color:#a44}.Upload_upload__button__38-Um:valid+span{color:#4a4}.Upload_upload__button__38-Um.Upload_uploading__3ox9F{color:#fff;background:#ccc;border-color:#ccc;cursor:auto}.Upload_upload__button__38-Um.Upload_uploading__3ox9F svg{position:relative;-webkit-animation:Upload_MoveUpDown__127MH 1s ease-in infinite;animation:Upload_MoveUpDown__127MH 1s ease-in infinite}@-webkit-keyframes Upload_MoveUpDown__127MH{0%{bottom:0}to{bottom:3px}}@keyframes Upload_MoveUpDown__127MH{0%{bottom:0}to{bottom:3px}}*{box-sizing:border-box}.Message_messageBot__1UGxS,.Message_messageUser__3kL5s{display:flex;margin-bottom:1.2rem;transition:all .5s linear}.Message_messageUser__3kL5s{justify-content:flex-end}.Message_avatar__3lDSz{width:3.75rem;height:3.75rem}@media only screen and (max-width:767px){.Message_messageBot__1UGxS,.Message_messageUser__3kL5s{margin-bottom:.7rem}.Message_avatar__3lDSz{width:2.5rem;height:2.5rem}}.Message_textWrapper__2QTuM{display:inline-block;padding:.9em 1.3em;border-radius:6px;width:calc(100% - 5.3rem);min-width:6.25rem;max-width:30rem;position:relative}@media (max-height:14rem){.Message_textWrapper__2QTuM{width:100%;max-height:3.2rem;margin-top:.3rem;padding:.4em .8em}.Message_avatar__3lDSz{margin-top:.3rem}}.Message_textWrapper__2QTuM:before{top:1.1rem;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:.8rem solid transparent}@media only screen and (max-width:767px){.Message_textWrapper__2QTuM:before{top:.5rem}}@media (max-height:14rem){.Message_text__3bVsr iframe{display:none}.Message_textWrapper__2QTuM:before{top:.7rem}}.Message_leftTextWrapper__T6JdA{background-color:#008fd7;margin-left:1.25rem}.Message_leftTextWrapper__T6JdA:before{right:100%;border-right-color:#008fd7}.Message_leftText__3KRO6{color:#fff}.Message_leftText__3KRO6 a{color:#fff!important}.Message_rightTextWrapper__3N8Sq{background-color:#eee;margin-right:1.25rem}.Message_rightTextWrapper__3N8Sq:before{left:100%;border-left-color:#eee}.Message_rightText__1PbWT,.Message_rightText__1PbWT a{color:#717171}.DetailMessage_image__1zbE4 img{width:100%;position:relative}.DetailMessage_image_container__30r15{position:relative;text-align:center;color:#fff}.DetailMessage_play_button__2Hboo{width:15%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.DetailMessage_title__A_inP{font-weight:700}.DetailMessage_subtitle__1ND_J{margin-top:1rem}.DetailMessage_button__3wrCB{font-size:.9em;margin-top:.5em;margin-right:.5em}@media (max-height:14rem){.DetailMessage_image__1zbE4,.DetailMessage_title__A_inP{display:none}.DetailMessage_subtitle__1ND_J{margin-top:0}.DetailMessage_button__3wrCB{display:none}}@media only screen and (max-width:767px){.DetailMessage_title__A_inP{font-size:1.1rem}}.DetailMessage_video_container__29xT4{position:relative;width:100%;height:0;padding-bottom:56.25%}.DetailMessage_video__2ChW3{position:absolute;top:0;left:0;width:100%;height:100%}.Text_text__2JaXU{overflow-wrap:break-word}.MarkdownMessage_markdownMessage__hSbUt *>:first-child{margin-top:0}.MarkdownMessage_markdownMessage__hSbUt *>:last-child{margin-bottom:0}.MarkdownMessage_markdownMessage__hSbUt table{width:100%}.MarkdownMessage_markdownMessage__hSbUt img{max-width:100%;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0}.MarkdownMessage_markdownMessage__hSbUt td:not(:last-child){padding-right:1rem}.MarkdownMessage_markdownMessage__hSbUt ul{padding:0 0 0 1.1em}.MarkdownMessage_markdownMessage__hSbUt ul>li{list-style-type:disc}.MarkdownMessage_markdownMessage__hSbUt ol{padding:0 0 0 1.1em}.MarkdownMessage_markdownMessage__hSbUt ol>li{list-style-type:decimal}.MessageContainer_messageContainer__1JbXm{flex:1 1;overflow-y:auto;padding-top:1rem;position:relative;-webkit-overflow-scrolling:touch}.MessageContainer_messages__1EfQ1{position:relative;list-style:none;font-size:.9rem;line-height:1.4;padding:0 1rem;margin:0;overflow-wrap:break-word;word-wrap:break-word}@media (min-width:36rem){.MessageContainer_messageContainer__1JbXm{padding-top:2rem}.MessageContainer_messages__1EfQ1{font-size:1rem;line-height:1.8}}@media (max-height:14rem){.MessageContainer_messageContainer__1JbXm{padding:0;overflow-y:unset;flex:0 0 auto}.MessageContainer_messageContainer__1JbXm li:not(:last-child){display:none}.MessageContainer_messageContainer__1JbXm li{margin-bottom:0!important}.MessageContainer_messages__1EfQ1{padding:0 1rem;line-height:1.2rem}}.TypingIndicator_typingIndicator__2vRCR{background-color:#008fd7;width:auto;border-radius:5px;padding:1rem;display:table;margin-left:6rem;margin-bottom:.2rem;position:relative}.TypingIndicator_typingIndicator__2vRCR span{height:.25rem;width:.25rem;float:left;margin:0 1px;background-color:#fff;display:block;border-radius:50%;opacity:.3}.TypingIndicator_typingIndicator__2vRCR span:first-of-type{-webkit-animation:TypingIndicator_blink__3wJ7S 1s .3333s infinite;animation:TypingIndicator_blink__3wJ7S 1s .3333s infinite}@-webkit-keyframes TypingIndicator_blink__3wJ7S{50%{opacity:1}}.TypingIndicator_typingIndicator__2vRCR span:nth-of-type(2){-webkit-animation:TypingIndicator_blink__3wJ7S 1s .6666s infinite;animation:TypingIndicator_blink__3wJ7S 1s .6666s infinite}.TypingIndicator_typingIndicator__2vRCR span:nth-of-type(3){-webkit-animation:TypingIndicator_blink__3wJ7S 1s .9999s infinite;animation:TypingIndicator_blink__3wJ7S 1s .9999s infinite}@keyframes TypingIndicator_blink__3wJ7S{50%{opacity:1}}@media (max-width:767px){.TypingIndicator_typingIndicator__2vRCR{margin-left:4.8rem}}@media (max-height:14rem){.TypingIndicator_typingIndicator__2vRCR{display:none}}
2
- /*# sourceMappingURL=main.2b9836cb.chunk.css.map */
@@ -1 +0,0 @@
1
- {"version":3,"sources":["main.2b9836cb.chunk.css","Client.module.scss","Chat.module.scss","InputContainer.module.scss","Global.module.scss","_variables.scss","QuickReplies.module.scss","../_variables.scss","AudioRecorder.module.scss","TextInput.module.scss","Upload.module.scss","Message.module.scss","DetailMessage.module.scss","Text.module.scss","MarkdownMessage.module.scss","MessageContainer.module.scss","TypingIndicator.module.scss"],"names":[],"mappings":"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","file":"main.2b9836cb.chunk.css","sourcesContent":["@import url(//fonts.googleapis.com/css?family=Roboto:400,300,700,500,100,200);\nhtml{font-family:'Roboto', sans-serif}body{margin:0}.Client_chatPage__126Ne{display:flex;flex-direction:column;height:100vh}@media (min-width: 36rem){.Client_chatPage__126Ne{flex-direction:row}}\n\n.Chat_chatwindow__2gTsn{display:flex;flex-flow:column nowrap;width:100%;height:100vh;max-width:48rem;margin-left:auto;margin-right:auto}@media (min-width: 36rem){.Chat_chatwindow__2gTsn{padding-right:1rem}}@media (min-height: 14rem){.Chat_chatwindow__2gTsn{background-color:white}}\n\n*{box-sizing:border-box}.InputContainer_inputContainer__2LEmG{width:100%;background-color:#fff;padding:0 1rem 1rem 1rem}@media (max-height: 14rem){.InputContainer_inputContainer__2LEmG{background-color:transparent;font-size:0.8rem;padding:0 1rem}}\n\n.Global_button__33oEy{display:inline-block;font-family:Roboto, sans-serif;font-size:1em;padding:0.5em 1em;border-radius:0.2rem;background-color:white;border:2px solid white;color:#008fd7;cursor:pointer;transition:all 0.2s linear;text-align:center}.Global_button__33oEy:hover{color:#fff;background-color:#008fd7}svg{fill:currentColor}\n\n.QuickReplies_quickReplies__3s_Fe{display:flex;flex-flow:row wrap;justify-content:flex-end;padding-bottom:0.4rem;margin:0 -0.3rem}.QuickReplies_quickReply__1ALDF{margin-top:0.5em;margin-right:0.5em;background-color:#eee;color:#717171;border:0}.QuickReplies_more__1NmDD{display:none}@media (max-height: 14rem){.QuickReplies_quickReplies__3s_Fe{flex-flow:row nowrap}.QuickReplies_quickReply__1ALDF{padding:0.6rem 0.8rem}.QuickReplies_more__1NmDD{padding:0.3rem 0.6rem;font-size:1rem;font-weight:900;line-height:1.5;color:#eee;background-color:#4a4a4a;border:1px solid #eee}}@media (min-width: 40rem){.QuickReplies_quickReplies__3s_Fe{font-size:1.2rem}.QuickReplies_quickReply__1ALDF{padding-left:1.5em;padding-right:1.5em}}\n\n*{box-sizing:border-box}.AudioRecorder_audioRecorder__9e24N{display:flex}.AudioRecorder_recordButton__104a6{display:block;margin:0;border:0;background-color:#fff;color:#717171}.AudioRecorder_recordButton__104a6:hover{background-color:#008fd7;color:#fff}.AudioRecorder_submitButton__kX6gE{display:block;margin:0;border:0;background-color:#fff;color:#008fd7}.AudioRecorder_submitButton__kX6gE:hover{background-color:#008fd7;color:#fff}.AudioRecorder_cancelButton__379d9{display:block;margin:0;border:0;background-color:#fff;color:#008fd7}.AudioRecorder_cancelButton__379d9:hover{background-color:#008fd7;color:#fff}.AudioRecorder_recorderIcon__2e6S0{width:1.3em;height:1.3em;border-radius:50%;-webkit-animation:AudioRecorder_pulse__2JaAb 2s infinite;animation:AudioRecorder_pulse__2JaAb 2s infinite;margin:auto 0.6em}@-webkit-keyframes AudioRecorder_pulse__2JaAb{0%{background-color:white}40%{background-color:red}60%{background-color:red}100%{background-color:white}}@keyframes AudioRecorder_pulse__2JaAb{0%{background-color:white}40%{background-color:red}60%{background-color:red}100%{background-color:white}}.AudioRecorder_spinning__26mEm{display:block;margin:auto;color:#717171;-webkit-animation:AudioRecorder_spin__3IqEo 1.2s linear infinite;animation:AudioRecorder_spin__3IqEo 1.2s linear infinite}@-webkit-keyframes AudioRecorder_spin__3IqEo{100%{transform:rotate(360deg)}}@keyframes AudioRecorder_spin__3IqEo{100%{transform:rotate(360deg)}}\n\n*{box-sizing:border-box}.TextInput_inputWrapper__3g5RY{display:flex;line-height:0}@media (max-height: 14rem){.TextInput_inputWrapper__3g5RY{display:none}}.TextInput_messageInputWrapper__3kX2Z{flex:1 1;border-radius:0.2rem;border:2px solid #bcbdc0;margin-right:0.5rem}.TextInput_messageInput__1wtyj{font-size:1rem;border:none;height:100%;box-sizing:border-box;width:100%;outline-width:0;padding:0.8rem 1rem;text-overflow:ellipsis;color:gray}.TextInput_sendMessage__1PytH{margin:0;background-color:#008fd7;border-color:#008fd7;color:#fff}.TextInput_sendMessage__1PytH svg{height:1.4rem;width:2.2rem;fill:currentColor}.TextInput_sendMessage__1PytH:hover{color:#008fd7;background-color:#fff}\n\n.Upload_upload__115Jj{display:flex;flex-direction:row;justify-content:flex-end;padding-top:0.4rem}.Upload_upload__115Jj span+span{margin-left:0.3rem;margin-top:0}.Upload_upload__button__38-Um{display:flex;align-items:center;height:3.4rem;width:100%;max-width:24rem;padding:2px 5px;margin:2px;color:white;background-color:#008fd7;border:2px solid #008fd7;border-radius:0.2rem;cursor:pointer}.Upload_upload__button__38-Um input[type='file']{position:fixed;top:-1000px}.Upload_upload__button__38-Um svg{height:2rem;width:2rem;margin:0.8rem;fill:currentColor}.Upload_upload__button__38-Um:hover{background-color:white;color:#008fd7}.Upload_upload__button__38-Um:active{background:#ccc;color:#008fd7}.Upload_upload__button__38-Um:invalid+span{color:#a44}.Upload_upload__button__38-Um:valid+span{color:#4a4}.Upload_upload__button__38-Um.Upload_uploading__3ox9F{color:white;background:#ccc;border-color:#ccc;cursor:auto}.Upload_upload__button__38-Um.Upload_uploading__3ox9F svg{position:relative;-webkit-animation:Upload_MoveUpDown__127MH 1s ease-in infinite;animation:Upload_MoveUpDown__127MH 1s ease-in infinite}@-webkit-keyframes Upload_MoveUpDown__127MH{0%{bottom:0}100%{bottom:3px}}@keyframes Upload_MoveUpDown__127MH{0%{bottom:0}100%{bottom:3px}}\n\n*{box-sizing:border-box}.Message_messageBot__1UGxS{display:flex;margin-bottom:1.2rem;transition:all 0.5s linear}.Message_messageUser__3kL5s{display:flex;justify-content:flex-end;margin-bottom:1.2rem;transition:all 0.5s linear}.Message_avatar__3lDSz{width:3.75rem;height:3.75rem}@media only screen and (max-width: 767px){.Message_messageBot__1UGxS{margin-bottom:0.7rem}.Message_messageUser__3kL5s{margin-bottom:0.7rem}.Message_avatar__3lDSz{width:2.5rem;height:2.5rem}}.Message_textWrapper__2QTuM{display:inline-block;padding:0.9em 1.3em;border-radius:6px;width:calc(100% - 5.3rem);min-width:6.25rem;max-width:30rem;position:relative}@media (max-height: 14rem){.Message_textWrapper__2QTuM{width:100%;max-height:3.2rem;margin-top:0.3rem;padding:0.4em 0.8em}.Message_avatar__3lDSz{margin-top:0.3rem}}.Message_textWrapper__2QTuM::before{top:1.1rem;border:solid transparent;content:' ';height:0;width:0;position:absolute;pointer-events:none;border-width:0.8rem}@media only screen and (max-width: 767px){.Message_textWrapper__2QTuM::before{top:0.5rem}}@media (max-height: 14rem){.Message_text__3bVsr iframe{display:none}.Message_textWrapper__2QTuM::before{top:0.7rem}}.Message_leftTextWrapper__T6JdA{background-color:#008fd7;margin-left:1.25rem}.Message_leftTextWrapper__T6JdA::before{right:100%;border-right-color:#008fd7}.Message_leftText__3KRO6{color:white}.Message_leftText__3KRO6 a{color:white !important}.Message_rightTextWrapper__3N8Sq{background-color:#eee;margin-right:1.25rem}.Message_rightTextWrapper__3N8Sq::before{left:100%;border-left-color:#eee}.Message_rightText__1PbWT{color:#717171}.Message_rightText__1PbWT a{color:#717171}\n\n.DetailMessage_image__1zbE4 img{width:100%;position:relative}.DetailMessage_image_container__30r15{position:relative;text-align:center;color:white}.DetailMessage_play_button__2Hboo{width:15%;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.DetailMessage_title__A_inP{font-weight:bold}.DetailMessage_subtitle__1ND_J{margin-top:1rem}.DetailMessage_button__3wrCB{font-size:0.9em;margin-top:0.5em;margin-right:0.5em}@media (max-height: 14rem){.DetailMessage_title__A_inP{display:none}.DetailMessage_image__1zbE4{display:none}.DetailMessage_subtitle__1ND_J{margin-top:0}.DetailMessage_button__3wrCB{display:none}}@media only screen and (max-width: 767px){.DetailMessage_title__A_inP{font-size:1.1rem}}.DetailMessage_video_container__29xT4{position:relative;width:100%;height:0;padding-bottom:56.25%}.DetailMessage_video__2ChW3{position:absolute;top:0;left:0;width:100%;height:100%}\n\n.Text_text__2JaXU{overflow-wrap:break-word}\n\n.MarkdownMessage_markdownMessage__hSbUt *>:first-child{margin-top:0}.MarkdownMessage_markdownMessage__hSbUt *>:last-child{margin-bottom:0}.MarkdownMessage_markdownMessage__hSbUt table{width:100%}.MarkdownMessage_markdownMessage__hSbUt img{max-width:100%;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0}.MarkdownMessage_markdownMessage__hSbUt td:not(:last-child){padding-right:1rem}.MarkdownMessage_markdownMessage__hSbUt ul{padding:0 0 0 1.1em}.MarkdownMessage_markdownMessage__hSbUt ul>li{list-style-type:disc}.MarkdownMessage_markdownMessage__hSbUt ol{padding:0 0 0 1.1em}.MarkdownMessage_markdownMessage__hSbUt ol>li{list-style-type:decimal}\n\n\n.MessageContainer_messageContainer__1JbXm{flex:1 1;overflow-y:auto;padding-top:1rem;position:relative;-webkit-overflow-scrolling:touch}.MessageContainer_messages__1EfQ1{position:relative;list-style:none;font-size:0.9rem;line-height:1.4;padding:0 1rem;margin:0;overflow-wrap:break-word;word-wrap:break-word}@media (min-width: 36rem){.MessageContainer_messageContainer__1JbXm{padding-top:2rem}.MessageContainer_messages__1EfQ1{font-size:1rem;line-height:1.8}}@media (max-height: 14rem){.MessageContainer_messageContainer__1JbXm{padding:0;overflow-y:unset;flex:0 0 auto}.MessageContainer_messageContainer__1JbXm li:not(:last-child){display:none}.MessageContainer_messageContainer__1JbXm li{margin-bottom:0 !important}.MessageContainer_messages__1EfQ1{padding:0 1rem;line-height:1.2rem}}\n\n.TypingIndicator_typingIndicator__2vRCR{background-color:#008fd7;width:auto;border-radius:5px;padding:1rem;display:table;margin-left:6rem;margin-bottom:0.2rem;position:relative}.TypingIndicator_typingIndicator__2vRCR span{height:0.25rem;width:0.25rem;float:left;margin:0 1px;background-color:white;display:block;border-radius:50%;opacity:0.3}.TypingIndicator_typingIndicator__2vRCR span:nth-of-type(1){-webkit-animation:TypingIndicator_blink__3wJ7S 1s infinite .3333s;animation:TypingIndicator_blink__3wJ7S 1s infinite .3333s}@-webkit-keyframes TypingIndicator_blink__3wJ7S{50%{opacity:1}}@keyframes TypingIndicator_blink__3wJ7S{50%{opacity:1}}.TypingIndicator_typingIndicator__2vRCR span:nth-of-type(2){-webkit-animation:TypingIndicator_blink__3wJ7S 1s infinite .6666s;animation:TypingIndicator_blink__3wJ7S 1s infinite .6666s}@keyframes TypingIndicator_blink__3wJ7S{50%{opacity:1}}.TypingIndicator_typingIndicator__2vRCR span:nth-of-type(3){-webkit-animation:TypingIndicator_blink__3wJ7S 1s infinite .9999s;animation:TypingIndicator_blink__3wJ7S 1s infinite .9999s}@keyframes TypingIndicator_blink__3wJ7S{50%{opacity:1}}@media (max-width: 767px){.TypingIndicator_typingIndicator__2vRCR{margin-left:4.8rem}}@media (max-height: 14rem){.TypingIndicator_typingIndicator__2vRCR{display:none}}\n\n","@import \"./_variables.scss\";\n@import url(//fonts.googleapis.com/css?family=Roboto:400,300,700,500,100,200);\n\nhtml {\n font-family: 'Roboto', sans-serif;\n}\n\nbody {\n margin: 0;\n}\n\n.chatPage {\n display: flex;\n flex-direction: column;\n height: 100vh;\n}\n\n@media (min-width: 36rem) {\n .chatPage {\n flex-direction: row;\n }\n}\n","@import \"./../_variables.scss\";\n\n.chatwindow {\n display: flex;\n flex-flow: column nowrap;\n width: 100%;\n height: 100vh;\n max-width: 48rem;\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 36rem) {\n .chatwindow {\n padding-right: 1rem;\n }\n}\n\n@media (min-height: $collapsed) {\n .chatwindow {\n background-color: white;\n }\n}\n","@import './../_variables.scss';\n\n* {\n box-sizing: border-box;\n}\n\n.inputContainer {\n width: 100%;\n background-color: #fff;\n padding: 0 1rem 1rem 1rem;\n}\n\n@media (max-height: $collapsed) {\n .inputContainer {\n background-color: transparent;\n font-size: 0.8rem;\n padding: 0 1rem;\n }\n}\n","@import \"./_variables.scss\";\n\n.button {\n display: inline-block;\n font-family: Roboto, sans-serif;\n font-size: 1em;\n padding: 0.5em 1em;\n border-radius: 0.2rem;\n background-color: white;\n border: 2px solid white;\n color: $brand-primary;\n cursor: pointer;\n transition: all 0.2s linear;\n text-align: center;\n \n &:hover {\n color: #fff;\n background-color: $brand-primary;\n }\n}\n\n:global(svg) {\n fill: currentColor;\n}","$enable-flex: true;\n\n$brand-primary: #008fd7 !default;\n$brand-success: #4fb703 !default;\n$brand-info: hsla(200, 100%, 72%, 1) !default;\n$brand-warning: #ff7d00 !default;\n$brand-danger: #d9534f !default;\n\n$lighter-gray: #eee;\n$light-gray: #b3b3b3;\n$mid-gray: #a0a0a0;\n$gray: #717171;\n$dark-gray: #2b2b2b;\n\n$text: $gray;\n$reduced-text: $light-gray;\n$info-text: $mid-gray;\n\n$bg-gray: $lighter-gray;\n$info-bg: $dark-gray;\n\n$collapsed: 14rem;\n\n// bootstrap variables\n// @import './../../node_modules/bootstrap/scss/functions';\n// @import './../../node_modules/bootstrap/scss/variables';\n","@import './../_variables.scss';\n\n.quickReplies {\n display: flex;\n flex-flow: row wrap;\n justify-content: flex-end;\n padding-bottom: 0.4rem;\n margin: 0 -0.3rem;\n}\n\n.quickReply {\n margin-top: 0.5em;\n margin-right: 0.5em;\n background-color: $bg-gray;\n color: $text;\n border: 0;\n}\n\n.more {\n display: none;\n}\n\n@media (max-height: $collapsed) {\n .quickReplies {\n flex-flow: row nowrap;\n }\n\n .quickReply {\n padding: 0.6rem 0.8rem;\n }\n\n .more {\n padding: 0.3rem 0.6rem;\n font-size: 1rem;\n font-weight: 900;\n line-height: 1.5;\n color: #eee;\n background-color: #4a4a4a;\n border: 1px solid #eee;\n }\n}\n\n@media (min-width: 40rem) {\n .quickReplies {\n font-size: 1.2rem;\n }\n .quickReply {\n padding-left: 1.5em;\n padding-right: 1.5em;\n }\n}\n","$enable-flex: true;\n\n$brand-primary: #008fd7 !default;\n$brand-success: #4fb703 !default;\n$brand-info: hsla(200, 100%, 72%, 1) !default;\n$brand-warning: #ff7d00 !default;\n$brand-danger: #d9534f !default;\n\n$lighter-gray: #eee;\n$light-gray: #b3b3b3;\n$mid-gray: #a0a0a0;\n$gray: #717171;\n$dark-gray: #2b2b2b;\n\n$text: $gray;\n$reduced-text: $light-gray;\n$info-text: $mid-gray;\n\n$bg-gray: $lighter-gray;\n$info-bg: $dark-gray;\n\n$collapsed: 14rem;\n\n// bootstrap variables\n// @import './../../node_modules/bootstrap/scss/functions';\n// @import './../../node_modules/bootstrap/scss/variables';\n","@import '../_variables.scss';\n\n* {\n box-sizing: border-box;\n}\n\n.audioRecorder {\n display: flex;\n}\n\n@mixin audioButton {\n display: block;\n margin: 0;\n border: 0;\n background-color: #fff;\n\n &:hover {\n background-color: $brand-primary;\n color: #fff;\n }\n}\n\n.recordButton {\n @include audioButton();\n color: $gray;\n}\n\n.submitButton {\n @include audioButton();\n color: $brand-primary;\n}\n\n.cancelButton {\n @include audioButton();\n color: $brand-primary;\n}\n\n.recorderIcon {\n width: 1.3em;\n height: 1.3em;\n border-radius: 50%;\n animation: pulse 2s infinite;\n margin: auto 0.6em;\n}\n\n@keyframes pulse {\n 0% {\n background-color: white;\n }\n 40% {\n background-color: red;\n }\n 60% {\n background-color: red;\n }\n 100% {\n background-color: white;\n }\n}\n\n.spinning {\n display: block;\n margin: auto;\n color: $gray;\n animation: spin 1.2s linear infinite;\n}\n\n@keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n}\n","@import './../_variables.scss';\n\n* {\n box-sizing: border-box;\n}\n\n.inputWrapper {\n display: flex;\n line-height: 0;\n}\n@media (max-height: $collapsed) {\n .inputWrapper {\n display: none;\n }\n}\n\n.messageInputWrapper {\n flex: 1;\n border-radius: 0.2rem;\n border: 2px solid #bcbdc0;\n margin-right: 0.5rem;\n}\n\n.messageInput {\n font-size: 1rem;\n border: none;\n height: 100%;\n box-sizing: border-box;\n width: 100%;\n outline-width: 0;\n padding: 0.8rem 1rem;\n text-overflow: ellipsis;\n color: gray;\n}\n\n.sendMessage {\n margin: 0;\n background-color: $brand-primary;\n border-color: $brand-primary;\n color: #fff;\n\n svg {\n height: 1.4rem;\n width: 2.2rem;\n fill: currentColor;\n }\n}\n\n.sendMessage:hover {\n color: $brand-primary;\n background-color: #fff;\n}\n","@import './../_variables.scss';\n\n.upload {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n padding-top: 0.4rem;\n\n span + span {\n margin-left: 0.3rem;\n margin-top: 0;\n }\n}\n\n.upload__button {\n input[type='file'] {\n position: fixed;\n top: -1000px;\n }\n\n display: flex;\n align-items: center;\n height: 3.4rem;\n width: 100%;\n max-width: 24rem;\n padding: 2px 5px;\n margin: 2px;\n color: white;\n background-color: $brand-primary;\n border: 2px solid $brand-primary;\n border-radius: 0.2rem;\n cursor: pointer;\n\n svg {\n height: 2rem;\n width: 2rem;\n margin: 0.8rem;\n fill: currentColor;\n }\n\n &:hover {\n background-color: white;\n color: $brand-primary;\n }\n\n &:active {\n background: #ccc;\n color: $brand-primary;\n }\n\n &:invalid + span {\n color: #a44;\n }\n\n &:valid + span {\n color: #4a4;\n }\n\n &.uploading {\n color: white;\n background: #ccc;\n border-color: #ccc;\n cursor: auto;\n svg {\n position: relative;\n animation: MoveUpDown 1s ease-in infinite;\n }\n }\n}\n\n@keyframes MoveUpDown {\n 0% {\n bottom: 0;\n }\n 100% {\n bottom: 3px;\n }\n}\n","@import './../_variables.scss';\n\n* {\n box-sizing: border-box;\n}\n\n.messageBot {\n display: flex;\n margin-bottom: 1.2rem;\n transition: all 0.5s linear;\n}\n\n.messageUser {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 1.2rem;\n transition: all 0.5s linear;\n}\n.avatar {\n width: 3.75rem;\n height: 3.75rem;\n}\n@media only screen and (max-width: 767px) {\n .messageBot {\n margin-bottom: 0.7rem;\n }\n .messageUser {\n margin-bottom: 0.7rem;\n }\n .avatar {\n width: 2.5rem;\n height: 2.5rem;\n }\n}\n\n.textWrapper {\n display: inline-block;\n padding: 0.9em 1.3em;\n border-radius: 6px;\n width: calc(100% - 5.3rem);\n min-width: 6.25rem;\n max-width: 30rem;\n position: relative;\n}\n\n@media (max-height: $collapsed) {\n .textWrapper {\n width: 100%;\n max-height: 3.2rem;\n margin-top: 0.3rem;\n padding: 0.4em 0.8em;\n }\n .avatar {\n margin-top: 0.3rem;\n }\n}\n\n.textWrapper::before {\n top: 1.1rem;\n border: solid transparent;\n content: ' ';\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n border-width: 0.8rem;\n}\n\n@media only screen and (max-width: 767px) {\n .textWrapper::before {\n top: 0.5rem;\n }\n}\n\n@media (max-height: $collapsed) {\n .text {\n iframe {\n display: none;\n }\n }\n .textWrapper::before {\n top: 0.7rem;\n }\n}\n\n.leftTextWrapper {\n background-color: $brand-primary;\n margin-left: 1.25rem;\n}\n.leftTextWrapper::before {\n right: 100%;\n border-right-color: $brand-primary;\n}\n.leftText {\n color: white;\n\n a {\n color: white !important;\n }\n}\n\n.rightTextWrapper {\n background-color: $lighter-gray;\n margin-right: 1.25rem;\n}\n.rightTextWrapper::before {\n left: 100%;\n border-left-color: $lighter-gray;\n}\n\n.rightText {\n color: $text;\n\n a {\n color: $text;\n }\n}\n","@import './../../_variables.scss';\n\n.image img {\n width: 100%;\n position: relative;\n}\n\n.image_container {\n position: relative;\n text-align: center;\n color: white;\n}\n\n.play_button {\n width: 15%;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n\n.title {\n font-weight: bold;\n}\n\n.subtitle {\n margin-top: 1rem;\n}\n\n.button {\n font-size: 0.9em;\n margin-top: 0.5em;\n margin-right: 0.5em;\n}\n\n@media (max-height: $collapsed) {\n .title {\n display: none;\n }\n .image {\n display: none;\n }\n .subtitle {\n margin-top: 0;\n }\n .button {\n display: none;\n }\n}\n@media only screen and (max-width: 767px) {\n .title {\n font-size: 1.1rem;\n }\n}\n\n.video_container {\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 56.25%;\n}\n.video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n","@import './../_variables.scss';\n\n.text {\n overflow-wrap: break-word;\n}\n","@import './../_variables.scss';\n\n.markdownMessage {\n * > :first-child {\n margin-top: 0;\n }\n * > :last-child {\n margin-bottom: 0;\n }\n\n table {\n width: 100%;\n }\n\n img {\n max-width: 100%;\n margin-block-start: 0;\n margin-block-end: 0;\n }\n\n td:not(:last-child) {\n padding-right: 1rem;\n }\n\n ul {\n padding: 0 0 0 1.1em;\n > li {\n list-style-type: disc;\n }\n }\n\n ol {\n padding: 0 0 0 1.1em;\n > li {\n list-style-type: decimal;\n }\n }\n}\n","@import './../_variables.scss';\n\n.messageContainer {\n flex: 1;\n overflow-y: auto;\n padding-top: 1rem;\n\n // required for react-scroll\n position: relative;\n\n // iPhone smooth scrolling\n -webkit-overflow-scrolling: touch;\n}\n\n.messages {\n position: relative;\n list-style: none;\n font-size: 0.9rem;\n line-height: 1.4;\n padding: 0 1rem;\n margin: 0;\n\n // Break long words (like links) that would otherwise overflow the message bubble\n overflow-wrap: break-word;\n word-wrap: break-word;\n}\n\n@media (min-width: 36rem) {\n .messageContainer {\n padding-top: 2rem;\n }\n .messages {\n font-size: 1rem;\n line-height: 1.8;\n }\n}\n\n@media (max-height: $collapsed) {\n .messageContainer {\n padding: 0;\n overflow-y: unset;\n flex: 0 0 auto;\n\n li:not(:last-child) {\n display: none;\n }\n li {\n margin-bottom: 0 !important;\n }\n }\n .messages {\n padding: 0 1rem;\n line-height: 1.2rem;\n }\n}\n","@import './../_variables.scss';\n\n@mixin blinkMixin($i) {\n animation: blink 1s infinite ($i * 0.3333s);\n\n @keyframes blink {\n 50% {\n opacity: 1;\n }\n }\n}\n\n.typingIndicator {\n $ti-color-bg: $brand-primary;\n background-color: $ti-color-bg;\n width: auto;\n border-radius: 5px;\n padding: 1rem;\n display: table;\n margin-left: 6rem;\n margin-bottom: 0.2rem;\n position: relative;\n span {\n height: 0.25rem;\n width: 0.25rem;\n float: left;\n margin: 0 1px;\n background-color: white;\n display: block;\n border-radius: 50%;\n opacity: 0.3;\n @for $i from 1 through 3 {\n &:nth-of-type(#{$i}) {\n @include blinkMixin($i);\n }\n }\n }\n}\n\n@media (max-width: 767px) {\n .typingIndicator {\n margin-left: 4.8rem;\n }\n}\n\n@media (max-height: $collapsed) {\n .typingIndicator {\n display: none;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["Client.module.scss","components/Chat.module.scss","components/InputContainer.module.scss","components/Text.module.scss","components/MarkdownMessage.module.scss","components/TypingIndicator.module.scss","components/AudioRecorder.module.scss","locales sync /^/.//.*/.json$","types.ts","actions/index.ts","actions/connectionActions.ts","components/QuickReplies.tsx","components/AudioRecorder.tsx","components/TextInput.tsx","components/Upload.tsx","components/InputContainer.tsx","components/BotMessage.tsx","components/detail-message/Buttons.tsx","components/detail-message/Image.tsx","components/Text.tsx","components/detail-message/Subtitle.tsx","components/detail-message/Title.tsx","components/detail-message/index.tsx","components/MarkdownMessage.tsx","components/TextMessage.tsx","components/UserMessage.tsx","components/Message.tsx","components/TypingIndicator.tsx","components/MessageContainer.tsx","components/Chat.tsx","reducers/backendConnectionReducer.ts","reducers/chatReducer.ts","reducers/index.ts","store/localStorage.ts","store/socketMiddleware.ts","store/index.ts","store/configureStore.ts","locales/initialize.ts","index.tsx","components/QuickReplies.module.scss","components/TextInput.module.scss","components/Upload.module.scss","components/Message.module.scss","Global.module.scss","components/detail-message/DetailMessage.module.scss","components/MessageContainer.module.scss"],"names":["module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","ConnectionStateEnum","UserType","notifyParentToChangePath","url","type","message","doConnect","sessionId","userId","querystrings","QuickReplies","quickReplies","onQuickReplyClick","onShowMore","className","styles","reply","key","label","classNames","quickReply","globalStyles","button","onClick","more","AudioRecorder","props","audioInput","volume","leftchannel","recorder","recordingLength","sampleRate","mediaStream","state","recordingState","triggerAudioRecording","bind","triggerAudioRecordingSuccess","initRecording","processRecordingInput","handleClickSubmitAudio","handleClickStopAudio","this","setState","navigator","mediaDevices","getUserMedia","audio","video","then","stream","length","context","window","AudioContext","webkitAudioContext","createGain","createMediaStreamSource","connect","createScriptProcessor","onaudioprocess","destination","left","inputBuffer","getChannelData","push","Float32Array","leftBuffer","mergeBuffers","downsampledBuffer","downsampleBuffer","blob","createWav","onAudioRecorded","disconnect","getAudioTracks","forEach","track","stop","audioRecorder","recordButton","xmlns","width","height","viewBox","d","fill","spinning","cancelButton","recorderIcon","submitButton","React","Component","buffer","ArrayBuffer","view","DataView","writeUTFBytes","setUint32","setUint16","OUTPUT_SAMPLE_RATE","lng","index","i","setInt16","Blob","offset","val","setUint8","charCodeAt","channelBuffer","result","set","sampleRateRatio","newLength","Math","round","offsetResult","offsetBuffer","nextOffsetBuffer","accum","count","TextInput","speechSupport","translate","onTextInput","useState","hasText","setHasText","userTextInput","useRef","inputWrapper","onSubmit","event","preventDefault","currentUserInput","current","value","trim","focus","messageInputWrapper","messageInput","placeholder","ref","onChange","target","undefined","sendMessage","buttonStyle","upload__button","uploading","Upload","uploadRequest","uploadState","payload","onUploadFile","upload","UploadStateEnum","PENDING","file","files","item","reader","FileReader","onload","evt","name","readAsDataURL","UPLOADING","InputContainer","inputContainer","BotMessage","sender","children","messageBot","avatar","src","alt","BOT","textWrapper","leftTextWrapper","text","leftText","Buttons","buttons","onButtonClick","title","Image","imageUrl","itemUrl","image","includes","video_container","frameBorder","allowFullScreen","href","rel","Text","onLinkClick","componentDecorator","decoratedHref","decoratedText","split","Emoji","emojify","Subtitle","subtitle","Title","DetailMessage","query","clamp","MarkdownMessage","markdown","excerpt","handleOnLinkClick","markdownMessage","options","overrides","a","indexOf","slice","TextMessage","UserMessage","messageUser","rightTextWrapper","rightText","getMessageCmp","MessageTypeEnum","TEXT","textMessage","DETAIL","detailMessage","MARKDOWN","Message","msgCmp","GUEST","TypingIndicator","isTyping","typingIndicator","Element","Scroll","MessageContainer","duration","delay","scroller","scrollTo","smooth","containerId","scrollToBottom","prevProps","messages","isBotTyping","hasNewMessages","setTimeout","messageContainer","msg","INCOMMING_EVENTS","wrappedComponent","reduxConnect","chat","getTranslate","locale","dispatch","onConnect","getState","parsedQuerystrings","queryString","parse","connectionState","connection","uuid","userIdCookie","Cookies","get","stringify","onMessageFromUser","coreReceiveTextMessageFromGuest","sendMessageFromUser","sendAudioMessageFromUser","onActionFromUser","action","ActionTypes","MESSAGE_FROM_GUEST","receiveTextMessageWithoutAnalysisFromGuest","handleQuickReplyClick","onNluEvent","coreRequestNLUEvent","requestNLUEvent","ButtonTypeEnum","WEB_URL","POSTBACK","handleButtonClick","handleLinkClick","filename","receiveFileFromGuest","sendUploadFileFromUser","useEffect","handleOnMessageFromOutside","data","story","location","search","addEventListener","removeEventListener","chatwindow","initialState","DISCONNECTED","backendConnectionReducer","assign","CONNECTING","CONNECTED","RECONNECTED","appendMessageFromGuestToState","concat","sendToParentPage","isIframe","top","postMessage","open","self","chatReducer","TYPING_ON","TYPING_OFF","MESSAGE_WITHOUT_ANALYSIS_FROM_GUEST","MESSAGE_TO_GUEST","_id","meta","actionId","alreadyAdded","filter","m","lastMessage","FILE_FROM_GUEST","EVENT_TO_GUEST","transcription","GuestUser","rootReducer","combineReducers","localizeReducer","isExpired","lastSavedAt","expiresAt","Date","setHours","getHours","blacklist","socketMiddleware","next","socket","io","on","language","setActiveLanguage","ChatActions","uri","replace","console","log","emit","JSON","store","persistedState","localStorage","getItem","serializedState","err","error","loadState","compose","applyMiddleware","thunk","createStore","reducer","subscribe","throttle","setItem","now","toISOString","saveState","configureStore","languages","initialize","defaultLanguage","renderToStaticMarkup","json","require","addTranslationForLanguage","initTranslations","ReactDOM","render","chatPage","document","getElementById"],"mappings":"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","file":"static/js/main.40572d8f.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"chatPage\":\"Client_chatPage__126Ne\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"chatwindow\":\"Chat_chatwindow__2gTsn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputContainer\":\"InputContainer_inputContainer__2LEmG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"text\":\"Text_text__2JaXU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"markdownMessage\":\"MarkdownMessage_markdownMessage__hSbUt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"typingIndicator\":\"TypingIndicator_typingIndicator__2vRCR\",\"blink\":\"TypingIndicator_blink__3wJ7S\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"audioRecorder\":\"AudioRecorder_audioRecorder__9e24N\",\"recordButton\":\"AudioRecorder_recordButton__104a6\",\"submitButton\":\"AudioRecorder_submitButton__kX6gE\",\"cancelButton\":\"AudioRecorder_cancelButton__379d9\",\"recorderIcon\":\"AudioRecorder_recorderIcon__2e6S0\",\"pulse\":\"AudioRecorder_pulse__2JaAb\",\"spinning\":\"AudioRecorder_spinning__26mEm\",\"spin\":\"AudioRecorder_spin__3IqEo\"};","var map = {\n\t\"./de.json\": 278,\n\t\"./en.json\": 279,\n\t\"./fr.json\": 280,\n\t\"./it.json\": 281\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 277;","import { Message, QuickReply, UploadRequest } from '@botfabrik/engine-domain';\nimport { LocalizeState } from 'react-localize-redux';\n\nexport interface RootState {\n chat: ChatState;\n connection: ConnectionState;\n locale: LocalizeState;\n}\n\nexport interface ChatState {\n isBotTyping: boolean;\n messages: Message[];\n quickReplies: QuickReply[];\n uploadRequest?: UploadRequest;\n speechSupport: boolean;\n}\n\nexport enum ConnectionStateEnum {\n CONNECTING,\n CONNECTED,\n RECONNECTED,\n DISCONNECTED,\n}\n\nexport interface ConnectionState {\n connectionState: ConnectionStateEnum;\n sessionId: string | undefined;\n userId: string | undefined;\n}\n\nexport interface Sender {\n avatar: string;\n type: UserType;\n}\n\nexport enum UserType {\n GUEST = 'GUEST',\n BOT = 'BOT',\n PERSON = 'PERSON',\n}\n","import {\n ActionTypes,\n Button,\n ButtonTypeEnum,\n Message,\n PostbackButton,\n QuickReply,\n receiveFileFromGuest,\n receiveTextMessageFromGuest as coreReceiveTextMessageFromGuest,\n receiveTextMessageWithoutAnalysisFromGuest,\n requestNLUEvent as coreRequestNLUEvent,\n UrlButton,\n} from '@botfabrik/engine-domain';\nimport { AnyAction, Dispatch } from 'redux';\n\nexport const MESSAGE_TO_PARENT_PAGE = 'MESSAGE_TO_PARENT_PAGE';\nexport const RESTORE_PREVIOUS_CHAT_MESSAGES = 'RESTORE_PREVIOUS_CHAT_MESSAGES';\nexport const AUDIO_MESSAGE_FROM_USER = 'AUDIO_MESSAGE_FROM_USER';\nexport const ENABLE_SPEECH_SUPPORT = 'ENABLE_SPEECH_SUPPORT';\nexport const RECEIVE_SPEECH_TRANSCRIPTION = 'RECEIVE_SPEECH_TRANSCRIPTION';\n\nexport const GET_STARTED = 'webclient.get.started';\nexport const EXPAND_WINDOW = 'webclient.expand.window';\n\n/**\n * Informiere den Store, dass der Benutzer eine neue Nachricht gesendet hat.\n */\nexport const sendMessageFromUser = (text: string) => coreReceiveTextMessageFromGuest(text);\n\nexport const sendAudioMessageFromUser = (blob: Blob) => ({\n type: AUDIO_MESSAGE_FROM_USER,\n buffer: blob,\n});\n\nexport const enableSpeechSupport = () => ({\n type: ENABLE_SPEECH_SUPPORT,\n});\n\nexport const receiveSpeechTranscription = (transcription: string) => ({\n type: RECEIVE_SPEECH_TRANSCRIPTION,\n transcription,\n});\n\n/**\n * Führt einen NLU Event aus.\n */\nexport const requestNLUEvent = (event: string) => coreRequestNLUEvent(event);\n\nexport const restorePreviousChatMessages = (messages: Message[]) => ({\n type: RESTORE_PREVIOUS_CHAT_MESSAGES,\n messages,\n});\n\nexport const handleQuickReplyClick = (reply: QuickReply) => {\n return (dispatch: Dispatch<AnyAction>) => {\n if ((reply.payload as any).type !== ActionTypes.MESSAGE_FROM_GUEST) {\n dispatch(receiveTextMessageWithoutAnalysisFromGuest(reply.label));\n }\n return dispatch(reply.payload as AnyAction);\n };\n};\n\nexport const handleButtonClick = (button: Button) => {\n switch (button.type) {\n case ButtonTypeEnum.WEB_URL:\n const urlButton = button as UrlButton;\n return notifyParentToChangePath(urlButton.url);\n case ButtonTypeEnum.POSTBACK:\n const postbackButton = button as PostbackButton;\n return postbackButton.payload;\n default:\n throw new Error(`unknown button type ${button.type}`);\n }\n};\n\nexport const handleLinkClick = (url: string) => notifyParentToChangePath(url);\n\nexport const getStarted = () => ({\n type: GET_STARTED,\n});\n\nexport const notifyParentToChangePath = (url: string) => ({\n type: MESSAGE_TO_PARENT_PAGE,\n message: {\n type: 'webclient.change.url',\n url,\n },\n});\n\nexport const showMore = () => ({\n type: MESSAGE_TO_PARENT_PAGE,\n message: {\n type: 'webclient.show.more',\n },\n});\n\nexport const sendUploadFileFromUser = (filename: string, blob: Blob, payload: object) =>\n receiveFileFromGuest(filename, blob, payload);\n","import Cookies from 'js-cookie';\nimport queryString from 'query-string';\nimport { AnyAction, Dispatch } from 'redux';\nimport { v4 as uuid } from 'uuid';\nimport { RootState } from '../types';\n\nexport const CONNECT = 'CONNECT';\nexport const CONNECTING = 'CONNECTING';\nexport const CONNECTED = 'CONNECTED';\nexport const DISCONNECTED = 'DISCONNECTED';\nexport const RECONNECTED = 'RECONNECTED';\nexport const RESTORE_SESSION_ID = 'RESTORE_SESSION_ID';\n\n/**\n * Erstelle eine Verbindung mit dem Backend Server\n */\nexport const connect = (querystrings: string) => {\n return (dispatch: Dispatch<AnyAction>, getState: () => RootState) => {\n const parsedQuerystrings = queryString.parse(querystrings);\n const connectionState = getState().connection;\n\n // get session id\n let sessionId = connectionState.sessionId;\n if (sessionId === undefined) {\n sessionId = uuid();\n }\n\n // get user id\n let userId = connectionState.userId;\n if (userId === undefined) {\n const userIdCookie = Cookies.get('bf-webclient-userId');\n userId = userIdCookie ? userIdCookie : uuid();\n Cookies.set('bf-webclient-userId', userId!);\n }\n\n parsedQuerystrings.sessionId = sessionId;\n parsedQuerystrings.userId = userId;\n\n return dispatch(doConnect(sessionId!, userId!, queryString.stringify(parsedQuerystrings)));\n };\n};\n\nconst doConnect = (sessionId: string, userId: string, querystrings: string) => ({\n type: CONNECT,\n sessionId,\n userId,\n querystrings,\n});\n\nexport const restoreSessionId = (sessionId: string) => ({\n type: RESTORE_SESSION_ID,\n sessionId,\n});\n\n/**\n * Informiere den Store, dass wir eine Verbindung mit dem Server aufbauen.\n */\nexport const connecting = () => ({\n type: CONNECTING,\n});\n\n/**\n * Informiere den Store, dass wir mit dem Server verbunden sind.\n */\nexport const connected = () => ({\n type: CONNECTED,\n});\n\n/**\n * Informiere den Store, dass die Verbindung mit dem Server getrennt wurde.\n */\nexport const disconnected = () => ({\n type: DISCONNECTED,\n});\n\n/**\n * Informiere den Store, dass die Verbindung mit dem Server wiederhergestellt wurde.\n */\nexport const reconnected = () => ({\n type: RECONNECTED,\n});\n","import { QuickReply } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport globalStyles from '../Global.module.scss';\nimport styles from './QuickReplies.module.scss';\n\ninterface Props {\n quickReplies: QuickReply[];\n onQuickReplyClick: (reply: QuickReply) => void;\n onShowMore: () => void;\n}\n\nconst QuickReplies: React.FC<Props> = ({ quickReplies, onQuickReplyClick, onShowMore }) => (\n <div className={styles.quickReplies}>\n {quickReplies.map((reply) => (\n <span\n key={reply.label}\n className={classNames(styles.quickReply, globalStyles.button)}\n onClick={() => onQuickReplyClick(reply)}\n >\n {reply.label}\n </span>\n ))}\n <span key=\"more\" className={classNames(styles.quickReply, styles.more)} onClick={() => onShowMore()}>\n ...\n </span>\n </div>\n);\n\nexport default QuickReplies;\n","import classNames from 'classnames';\nimport React from 'react';\nimport globalStyles from '../Global.module.scss';\nimport styles from './AudioRecorder.module.scss';\n\nconst BUFFER_SIZE = 2048;\nconst OUTPUT_SAMPLE_RATE = 16000;\n\n/**\n * The implementation of the AudioRecorder was inspired by the following blogpost:\n * https://typedarray.org/from-microphone-to-wav-with-getusermedia-and-web-audio/\n */\n\ninterface Props {\n onAudioRecorded: (blob: Blob) => void;\n}\n\ninterface State {\n recordingState: string;\n}\n\nexport default class AudioRecorder extends React.Component<Props, State> {\n private audioInput: MediaStreamAudioSourceNode | null = null;\n private volume: GainNode | null = null;\n private leftchannel: Float32Array[] = [];\n private recorder: ScriptProcessorNode | null = null;\n private recordingLength: number = 0;\n private sampleRate: number | null = null;\n private mediaStream: MediaStream | null = null;\n\n constructor(props: Props) {\n super(props);\n this.state = { recordingState: 'none' };\n\n this.triggerAudioRecording = this.triggerAudioRecording.bind(this);\n this.triggerAudioRecordingSuccess = this.triggerAudioRecordingSuccess.bind(this);\n this.initRecording = this.initRecording.bind(this);\n this.processRecordingInput = this.processRecordingInput.bind(this);\n this.handleClickSubmitAudio = this.handleClickSubmitAudio.bind(this);\n this.handleClickStopAudio = this.handleClickStopAudio.bind(this);\n }\n\n triggerAudioRecording() {\n this.setState({ recordingState: 'connecting' });\n navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(this.triggerAudioRecordingSuccess);\n }\n\n triggerAudioRecordingSuccess(stream: MediaStream) {\n this.mediaStream = stream;\n this.leftchannel.length = 0;\n this.recordingLength = 0;\n\n this.initRecording(stream);\n }\n\n initRecording(stream: MediaStream) {\n var AudioContext = window.AudioContext || (window as any).webkitAudioContext;\n var context = new AudioContext();\n // we query the context sample rate (varies depending on platforms)\n this.sampleRate = context.sampleRate;\n // creates a gain node which adjusts the volume on audio streams\n this.volume = context.createGain();\n // creates an audio node from the microphone incoming stream\n this.audioInput = context.createMediaStreamSource(stream);\n // connect the stream to the gain node\n this.audioInput.connect(this.volume);\n this.recorder = context.createScriptProcessor(BUFFER_SIZE, 1, 1);\n this.recorder.onaudioprocess = this.processRecordingInput;\n // we connect the recorder\n this.volume.connect(this.recorder);\n this.recorder.connect(context.destination);\n }\n\n processRecordingInput(e: AudioProcessingEvent) {\n if (this.state.recordingState === 'connecting') {\n this.setState({ recordingState: 'recording' });\n }\n if (this.state.recordingState !== 'none') {\n const left = e.inputBuffer.getChannelData(0);\n // we clone the samples\n this.leftchannel.push(new Float32Array(left));\n this.recordingLength += BUFFER_SIZE;\n }\n }\n\n handleClickSubmitAudio() {\n // we flat the left channel down\n const leftBuffer = mergeBuffers(this.leftchannel, this.recordingLength);\n const downsampledBuffer = downsampleBuffer(leftBuffer, this.sampleRate || 0);\n\n // we create our wav file\n const blob = createWav(downsampledBuffer);\n this.props.onAudioRecorded(blob);\n\n // For debugging purpose: Set link to state so you can display a button on the UI to download the audio file:\n // var url = (window.URL || window.webkitURL).createObjectURL(blob);\n // this.setState({url});\n\n this.handleClickStopAudio();\n }\n\n handleClickStopAudio() {\n this.setState({ recordingState: 'none' });\n this.audioInput?.disconnect();\n this.volume?.disconnect();\n this.recorder?.disconnect();\n if (this.mediaStream) {\n this.mediaStream?.getAudioTracks().forEach((track: MediaStreamTrack) => {\n track.stop();\n });\n }\n }\n\n render() {\n return (\n <div className={styles.audioRecorder}>\n {this.state.recordingState === 'none' && (\n <button\n className={classNames(globalStyles.button, styles.recordButton)}\n type=\"submit\"\n onClick={this.triggerAudioRecording}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n </button>\n )}\n\n {this.state.recordingState === 'connecting' && (\n <svg\n className={styles.spinning}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n )}\n\n {this.state.recordingState === 'recording' && (\n <div className={styles.audioRecorder}>\n <button\n className={classNames(globalStyles.button, styles.cancelButton)}\n onClick={this.handleClickStopAudio}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n </svg>\n </button>\n <div className={styles.recorderIcon} />\n <button\n className={classNames(globalStyles.button, styles.submitButton)}\n type=\"submit\"\n onClick={this.handleClickSubmitAudio}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nconst createWav = (downsampledBuffer: Float32Array) => {\n const buffer = new ArrayBuffer(44 + downsampledBuffer.length * 2);\n const view = new DataView(buffer);\n\n // RIFF chunk descriptor\n writeUTFBytes(view, 0, 'RIFF');\n view.setUint32(4, 44 + downsampledBuffer.length * 2, true);\n writeUTFBytes(view, 8, 'WAVE');\n\n // FMT sub-chunk\n writeUTFBytes(view, 12, 'fmt ');\n view.setUint32(16, 16, true);\n view.setUint16(20, 1, true);\n\n // mono - 1 channel\n view.setUint16(22, 1, true);\n view.setUint32(24, OUTPUT_SAMPLE_RATE, true);\n view.setUint32(28, OUTPUT_SAMPLE_RATE * 4, true);\n view.setUint16(32, 4, true);\n view.setUint16(34, 16, true);\n\n // data sub-chunk\n writeUTFBytes(view, 36, 'data');\n view.setUint32(40, downsampledBuffer.length * 2, true);\n\n // write the PCM samples\n const lng = downsampledBuffer.length;\n let index = 44;\n const volume = 1;\n for (var i = 0; i < lng; i++) {\n view.setInt16(index, downsampledBuffer[i] * (0x7fff * volume), true);\n index += 2;\n }\n\n // our final binary blob\n return new Blob([view], { type: 'audio/wav' });\n};\n\nconst writeUTFBytes = (view: DataView, offset: number, val: string) => {\n for (var i = 0; i < val.length; i++) {\n view.setUint8(offset + i, val.charCodeAt(i));\n }\n};\n\nconst mergeBuffers = (channelBuffer: Float32Array[], recordingLength: number) => {\n const result = new Float32Array(recordingLength);\n let offset = 0;\n const lng = channelBuffer.length;\n for (var i = 0; i < lng; i++) {\n const buffer = channelBuffer[i];\n result.set(buffer, offset);\n offset += buffer.length;\n }\n return result;\n};\n\nconst downsampleBuffer = (buffer: Float32Array, sampleRate: number) => {\n if (OUTPUT_SAMPLE_RATE === sampleRate) {\n return buffer;\n }\n const sampleRateRatio = sampleRate / OUTPUT_SAMPLE_RATE;\n const newLength = Math.round(buffer.length / sampleRateRatio);\n const result = new Float32Array(newLength);\n let offsetResult = 0;\n let offsetBuffer = 0;\n while (offsetResult < result.length) {\n let nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);\n let accum = 0,\n count = 0;\n for (var i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {\n accum += buffer[i];\n count++;\n }\n result[offsetResult] = accum / count;\n offsetResult++;\n offsetBuffer = nextOffsetBuffer;\n }\n return result;\n};\n","import classNames from 'classnames';\nimport React, { useRef, useState } from 'react';\nimport { TranslateFunction } from 'react-localize-redux';\nimport globalStyles from '../Global.module.scss';\nimport AudioRecorder from './AudioRecorder';\nimport styles from './TextInput.module.scss';\n\ninterface Props {\n speechSupport: boolean;\n translate: TranslateFunction;\n onTextInput: (input: string) => void;\n onAudioRecorded: (blob: Blob) => void;\n}\n\nconst TextInput: React.FC<Props> = ({ speechSupport, translate, onTextInput, onAudioRecorded }) => {\n const [hasText, setHasText] = useState(false);\n const userTextInput = useRef<HTMLInputElement>(null);\n\n const handleClickSubmitButton = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const currentUserInput = userTextInput.current;\n if (currentUserInput && currentUserInput.value.trim().length >= 1) {\n onTextInput(currentUserInput.value.trim());\n currentUserInput.value = '';\n setHasText(false);\n currentUserInput.focus();\n }\n };\n\n const handleOnInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value.trim();\n setHasText(value.length > 0);\n };\n\n return (\n <form className={styles.inputWrapper} onSubmit={handleClickSubmitButton}>\n <div className={styles.messageInputWrapper}>\n <input\n className={styles.messageInput}\n placeholder={translate('Enter chat message') as string}\n ref={userTextInput}\n onChange={handleOnInputChange}\n />\n </div>\n {hasText || !speechSupport || navigator.mediaDevices === undefined ? (\n <button className={classNames(styles.sendMessage, globalStyles.button)} type=\"submit\">\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 232 168\">\n <path d=\"M227.514,84.044l-224,-80l48,80l-48,80l224,-80Z\" />\n </svg>\n </button>\n ) : (\n speechSupport &&\n navigator.mediaDevices !== undefined && <AudioRecorder onAudioRecorded={onAudioRecorded} />\n )}\n </form>\n );\n};\n\nexport default TextInput;\n","import { UploadRequest, UploadStateEnum } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { FaPaperclip, FaUpload } from 'react-icons/fa';\nimport styles from './Upload.module.scss';\n\ninterface Props {\n uploadRequest?: UploadRequest;\n onUploadFile: (filename: string, result: any, payload: object) => void;\n}\n\nconst Upload: React.FC<Props> = ({ uploadRequest: { uploadState, label = '', payload = {} } = {}, onUploadFile }) => {\n const handleUploadFile = (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target?.files?.item(0);\n if (file) {\n const reader = new FileReader();\n reader.onload = (evt: any) => {\n onUploadFile(file.name, evt.target.result, payload);\n };\n reader.readAsDataURL(file);\n }\n };\n\n return (\n <div className={styles.upload}>\n {label && (\n <label className={buttonStyle(uploadState)}>\n {uploadState === UploadStateEnum.PENDING && (\n <div>\n <input type=\"file\" onChange={handleUploadFile} />\n <FaPaperclip />\n <span>{label}</span>\n </div>\n )}\n {uploadState === UploadStateEnum.UPLOADING && (\n <div>\n <FaUpload />\n <span>{`${label} wird hochgeladen`}</span>\n </div>\n )}\n </label>\n )}\n </div>\n );\n};\n\nconst buttonStyle = (state: UploadStateEnum | undefined) =>\n state === 'pending'\n ? styles.upload__button\n : state === 'uploading'\n ? classNames(styles.upload__button, styles.uploading)\n : '';\n\nexport default Upload;\n","import { QuickReply, UploadRequest } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { TranslateFunction } from 'react-localize-redux';\nimport styles from './InputContainer.module.scss';\nimport QuickReplies from './QuickReplies';\nimport TextInput from './TextInput';\nimport Upload from './Upload';\n\ninterface Props {\n quickReplies: QuickReply[];\n speechSupport: boolean;\n uploadRequest?: UploadRequest;\n translate: TranslateFunction;\n onTextInput: (text: string) => void;\n onQuickReplyClick: (reply: QuickReply) => void;\n onShowMore: () => void;\n onUploadFile: (filename: string, blob: Blob, payload: any) => void;\n onAudioRecorded: (blob: Blob) => void;\n}\n\nconst InputContainer: React.FC<Props> = ({\n quickReplies,\n uploadRequest,\n speechSupport,\n translate,\n onTextInput,\n onQuickReplyClick,\n onShowMore,\n onUploadFile,\n onAudioRecorded,\n}) => (\n <div className={classNames(styles.inputContainer)}>\n <Upload uploadRequest={uploadRequest} onUploadFile={onUploadFile} />\n <QuickReplies quickReplies={quickReplies} onQuickReplyClick={onQuickReplyClick} onShowMore={onShowMore} />\n <TextInput\n translate={translate}\n onTextInput={onTextInput}\n onAudioRecorded={onAudioRecorded}\n speechSupport={speechSupport}\n />\n </div>\n);\n\nexport default InputContainer;\n","import { UserType } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { Sender } from '../types';\nimport styles from './Message.module.scss';\n\ninterface Props {\n sender: Sender;\n}\n\nconst BotMessage: React.FC<Props> = ({ sender, children }) => (\n <li className={styles.messageBot}>\n <img className={styles.avatar} src={`${sender.avatar}`} alt={sender.type === UserType.BOT ? 'Bot' : 'Agent'} />\n <div className={classNames(styles.textWrapper, styles.leftTextWrapper)}>\n <div className={classNames(styles.text, styles.leftText)}>{children}</div>\n </div>\n </li>\n);\n\nexport default BotMessage;\n","import { Button } from '@botfabrik/engine-domain';\nimport classNames from 'classnames';\nimport React from 'react';\nimport globalStyles from '../../Global.module.scss';\nimport styles from './DetailMessage.module.scss';\n\ninterface Props {\n buttons: Button[];\n onButtonClick: (button: Button) => void;\n}\n\nconst Buttons: React.FC<Props> = ({ buttons, onButtonClick }) => (\n <div>\n {buttons.map((button, index) => (\n <button\n key={index}\n className={classNames(styles.button, globalStyles.button)}\n onClick={() => onButtonClick(button)}\n >\n {button.title}\n </button>\n ))}\n </div>\n);\n\nexport default Buttons;\n","import React from 'react';\nimport styles from './DetailMessage.module.scss';\n\ninterface Props {\n alt: string;\n imageUrl?: string;\n itemUrl?: string;\n}\n\nconst Image: React.FC<Props> = ({ alt, imageUrl, itemUrl }) =>\n imageUrl ? (\n <div className={styles.image}>\n {itemUrl ? (\n itemUrl.includes('youtube.com') ? (\n <div className={styles.video_container}>\n <iframe\n className={styles.video}\n title=\"Youtube\"\n width=\"100%\"\n src={itemUrl + '?rel=0'}\n frameBorder=\"0\"\n allowFullScreen\n />\n </div>\n ) : (\n <a href={itemUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n <img src={imageUrl} alt={alt} />\n </a>\n )\n ) : (\n <img src={imageUrl} alt={alt} />\n )}\n </div>\n ) : null;\n\nexport default Image;\n","import Emoji from 'node-emoji';\nimport React from 'react';\nimport Linkify from 'react-linkify';\nimport styles from './Text.module.scss';\n\ninterface Props {\n text: string;\n onLinkClick: (href: string) => void;\n}\n\nconst Text: React.FC<Props> = ({ text, onLinkClick }) => {\n const handleOnLinkClick = (href: string) => (event: any) => {\n event.preventDefault();\n if (href) {\n onLinkClick(href);\n }\n return false;\n };\n\n // TODO: Linus\n // - Button anstelle von a verwenden\n const componentDecorator = (decoratedHref: string, decoratedText: string, key: number) => (\n <a key={key} onClick={handleOnLinkClick(decoratedHref)}>\n {decoratedText}\n </a>\n );\n\n return (\n <div>\n {text.split('\\n').map((item, key) => (\n <span key={key} className={styles.text}>\n <Linkify componentDecorator={componentDecorator}>{Emoji.emojify(item)}</Linkify>\n <br />\n </span>\n ))}\n </div>\n );\n};\n\nexport default Text;\n","import React from 'react';\nimport Text from '../Text';\nimport styles from './DetailMessage.module.scss';\n\ninterface Props {\n subtitle: string | undefined;\n onLinkClick: (href: string) => void;\n}\n\nconst Subtitle: React.FC<Props> = ({ subtitle, onLinkClick }) =>\n subtitle ? (\n <div className={styles.subtitle}>\n <Text text={subtitle} onLinkClick={onLinkClick} />\n </div>\n ) : null;\n\nexport default Subtitle;\n","import React from 'react';\nimport styles from './DetailMessage.module.scss';\n\ninterface Props {\n title: string | undefined;\n}\n\nconst Title: React.FC<Props> = ({ title }) => (title ? <h2 className={styles.title}>{title}</h2> : null);\n\nexport default Title;\n","import { Button } from '@botfabrik/engine-domain';\nimport React from 'react';\nimport Dotdotdot from 'react-dotdotdot';\nimport MediaQuery from 'react-responsive';\nimport Buttons from './Buttons';\nimport Image from './Image';\nimport Subtitle from './Subtitle';\nimport Title from './Title';\n\ninterface Props {\n title?: string;\n subtitle: string;\n imageUrl?: string;\n itemUrl?: string;\n buttons: Button[];\n onButtonClick: (button: Button) => void;\n onLinkClick: (href: string) => void;\n}\n\nconst DetailMessage: React.FC<Props> = ({\n title,\n subtitle,\n imageUrl,\n itemUrl,\n buttons,\n onButtonClick,\n onLinkClick,\n}) => (\n <div>\n <MediaQuery query=\"(max-height: 150px)\">\n <Dotdotdot clamp={2}>\n <Subtitle subtitle={subtitle} onLinkClick={onLinkClick} />\n </Dotdotdot>\n </MediaQuery>\n <MediaQuery query=\"(min-height: 151px)\">\n <Title title={title} />\n <Image imageUrl={imageUrl} itemUrl={itemUrl} alt={title || subtitle} />\n <Subtitle subtitle={subtitle} onLinkClick={onLinkClick} />\n <Buttons buttons={buttons} onButtonClick={onButtonClick} />\n </MediaQuery>\n </div>\n);\n\nexport default DetailMessage;\n","import classNames from 'classnames';\nimport Markdown from 'markdown-to-jsx';\nimport React from 'react';\nimport Dotdotdot from 'react-dotdotdot';\nimport MediaQuery from 'react-responsive';\nimport styles from './MarkdownMessage.module.scss';\nimport Text from './Text';\n\nconst OPEN_LINK_IN_NEW_TAB_INDICATOR = 'newtab#';\n\ninterface Props {\n markdown: string;\n excerpt: string;\n className: string;\n onLinkClick: (href: string) => void;\n}\n\nconst MarkdownMessage: React.FC<Props> = ({ markdown, excerpt, className, onLinkClick }) => {\n const handleOnLinkClick = (href: string) => (event: any) => {\n event.preventDefault();\n if (href) {\n onLinkClick(href);\n }\n return false;\n };\n\n const Link: React.FC<{ title: string; href: string; children: React.ReactChildren }> = ({\n title,\n href,\n children,\n }) => {\n const openInNewTab = href.indexOf(OPEN_LINK_IN_NEW_TAB_INDICATOR) === 0;\n return openInNewTab ? (\n <a href={href.slice(OPEN_LINK_IN_NEW_TAB_INDICATOR.length)} title={title} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n ) : (\n // TODO: Linus\n // - Button anstelle von a verwenden\n <a onClick={handleOnLinkClick(href)} title={title}>\n {children}\n </a>\n );\n };\n\n return (\n <div className={classNames(styles.markdownMessage, className)}>\n <MediaQuery query=\"(max-height: 150px)\">\n <Dotdotdot clamp={2}>\n <Text text={excerpt} onLinkClick={onLinkClick} />\n </Dotdotdot>\n </MediaQuery>\n <MediaQuery query=\"(min-height: 151px)\">\n <Markdown\n options={{\n overrides: {\n a: Link,\n },\n }}\n >\n {markdown}\n </Markdown>\n </MediaQuery>\n </div>\n );\n};\n\nexport default MarkdownMessage;\n","import React from 'react';\nimport Dotdotdot from 'react-dotdotdot';\nimport MediaQuery from 'react-responsive';\nimport Text from './Text';\nimport styles from './TextMessage.module.scss';\n\ninterface Props {\n text: string;\n onLinkClick: (href: string) => void;\n}\nconst TextMessage: React.FC<Props> = ({ text, onLinkClick }) => (\n <div className={styles.text}>\n <MediaQuery query=\"(max-height: 150px)\">\n <Dotdotdot clamp={2}>\n <Text text={text} onLinkClick={onLinkClick} />\n </Dotdotdot>\n </MediaQuery>\n <MediaQuery query=\"(min-height: 151px)\">\n <Text text={text} onLinkClick={onLinkClick} />\n </MediaQuery>\n </div>\n);\n\nexport default TextMessage;\n","import classNames from 'classnames';\nimport React from 'react';\nimport styles from './Message.module.scss';\n\nconst UserMessage: React.FC = ({ children }) => (\n <li className={styles.messageUser}>\n <div className={classNames(styles.textWrapper, styles.rightTextWrapper)}>\n <div className={classNames(styles.text, styles.rightText)}>{children}</div>\n </div>\n <img className={styles.avatar} alt=\"Guest\" src=\"visitor.svg\" />\n </li>\n);\n\nexport default UserMessage;\n","import {\n Button,\n DetailMessage as DetailMessageType,\n MarkdownMessage as MarkdownMessageType,\n Message as MessageType,\n MessageTypeEnum,\n TextMessage as TextMessageType,\n UserType,\n} from '@botfabrik/engine-domain';\nimport React from 'react';\nimport BotMessage from './BotMessage';\nimport DetailMessage from './detail-message';\nimport MarkdownMessage from './MarkdownMessage';\nimport TextMessage from './TextMessage';\nimport UserMessage from './UserMessage';\n\ninterface Props {\n message: MessageType;\n onButtonClick: (button: Button) => void;\n onLinkClick: (href: string) => void;\n}\n\nconst Message: React.FC<Props> = ({ message, onButtonClick, onLinkClick }) => {\n const msgCmp = getMessageCmp(message, onButtonClick, onLinkClick);\n switch (message.sender.type) {\n case UserType.GUEST:\n return <UserMessage>{msgCmp}</UserMessage>;\n default:\n return <BotMessage sender={message.sender}>{msgCmp}</BotMessage>;\n }\n};\n\nconst getMessageCmp = (\n message: MessageType,\n onButtonClick: (button: Button) => void,\n onLinkClick: (href: string) => void\n) => {\n switch (message.type) {\n case MessageTypeEnum.TEXT:\n const textMessage = message as TextMessageType;\n return <TextMessage text={textMessage.text} onLinkClick={onLinkClick} />;\n case MessageTypeEnum.DETAIL:\n const detailMessage = message as DetailMessageType;\n return (\n <DetailMessage\n title={detailMessage.title}\n subtitle={detailMessage.subtitle}\n imageUrl={detailMessage.imageUrl}\n itemUrl={detailMessage.itemUrl}\n buttons={detailMessage.buttons}\n onButtonClick={onButtonClick}\n onLinkClick={onLinkClick}\n />\n );\n case MessageTypeEnum.MARKDOWN:\n const markdownMessage = message as MarkdownMessageType;\n return (\n <MarkdownMessage\n markdown={markdownMessage.markdown}\n excerpt={markdownMessage.excerpt}\n className={markdownMessage.className}\n onLinkClick={onLinkClick}\n />\n );\n }\n};\n\nexport default Message;\n","import React from 'react';\nimport styles from './TypingIndicator.module.scss';\n\ninterface Props {\n isTyping?: boolean;\n}\n\nconst TypingIndicator: React.FC<Props> = ({ isTyping = false }) =>\n isTyping ? (\n <div className={styles.typingIndicator}>\n <span />\n <span />\n <span />\n </div>\n ) : null;\n\nexport default TypingIndicator;\n","import { Button, Message as MessageType } from '@botfabrik/engine-domain';\nimport React from 'react';\nimport Scroll from 'react-scroll';\nimport Message from './Message';\nimport styles from './MessageContainer.module.scss';\nimport TypingIndicator from './TypingIndicator';\n\nconst Element = Scroll.Element;\n\ninterface Props {\n messages: MessageType[];\n isBotTyping: boolean;\n onButtonClick: (button: Button) => void;\n onLinkClick: (href: string) => void;\n}\n\nclass MessageContainer extends React.Component<Props> {\n scrollToBottom(duration: number, delay: number) {\n const scroller = Scroll.scroller;\n scroller.scrollTo('ScrollToElement', {\n duration: duration,\n delay: delay,\n smooth: true,\n containerId: 'MessageContainer',\n });\n }\n\n componentDidMount() {\n this.scrollToBottom(0, 0);\n }\n\n componentDidUpdate(prevProps: Props) {\n const isRestored = prevProps.messages.length === 0;\n if (isRestored && this.props.messages.length > 0) {\n this.scrollToBottom(0, 0);\n } else {\n const isBotTyping = this.props.isBotTyping;\n const hasNewMessages =\n prevProps.messages.length !== this.props.messages.length && prevProps.messages.length > 1;\n if (isBotTyping || hasNewMessages) {\n // call scrollToBottom asynchronously to prevent flickering\n setTimeout(() => this.scrollToBottom(700, 20), 10);\n }\n }\n }\n\n render() {\n const { messages, isBotTyping, onButtonClick, onLinkClick } = this.props;\n return (\n <div className={styles.messageContainer} id=\"MessageContainer\">\n <ul className={styles.messages}>\n {messages.map((msg, index) => (\n <Message key={index} message={msg} onButtonClick={onButtonClick} onLinkClick={onLinkClick} />\n ))}\n </ul>\n <TypingIndicator isTyping={isBotTyping} />\n <Element name=\"ScrollToElement\" />\n </div>\n );\n }\n}\n\nexport default MessageContainer;\n","import { Button, Message, QuickReply, UploadRequest } from '@botfabrik/engine-domain';\nimport React, { useEffect } from 'react';\nimport { getTranslate, TranslateFunction } from 'react-localize-redux';\nimport { connect as reduxConnect } from 'react-redux';\nimport { AnyAction } from 'redux';\nimport {\n handleButtonClick,\n handleLinkClick,\n handleQuickReplyClick,\n requestNLUEvent,\n sendAudioMessageFromUser,\n sendMessageFromUser,\n sendUploadFileFromUser,\n showMore,\n} from '../actions';\nimport { connect } from '../actions/connectionActions';\nimport { RootState } from '../types';\nimport styles from './Chat.module.scss';\nimport InputContainer from './InputContainer';\nimport MessageContainer from './MessageContainer';\n\n/**\n * Events von der Wordpress Seite\n */\nconst INCOMMING_EVENTS = {\n TRIGGER_ACTION: 'TRIGGER_ACTION',\n TRIGGER_STORY: 'TRIGGER_STORY',\n CHAT_MESSAGE_FROM_GUEST: 'CHAT_MESSAGE_FROM_GUEST',\n ON_CHAT_WINDOW_OPEN: 'ON_CHAT_WINDOW_OPEN',\n ON_CHAT_WINDOW_CLOSE: 'ON_CHAT_WINDOW_CLOSE',\n};\n\ninterface Props {\n messages: Message[];\n quickReplies: QuickReply[];\n isBotTyping: boolean;\n speechSupport: boolean;\n uploadRequest?: UploadRequest;\n translate: TranslateFunction;\n onConnect: (querystrings: string) => void;\n onMessageFromUser: (text: string) => void;\n onActionFromUser: (action: AnyAction) => void;\n onQuickReplyClick: (reply: QuickReply) => void;\n onNluEvent: (event: string) => void;\n onButtonClick: (button: Button) => void;\n onLinkClick: (url: string) => void;\n onShowMore: () => void;\n onUploadFile: (filename: string, blob: Blob, payload: any) => void;\n onAudioRecorded: (blob: Blob) => void;\n}\n\nconst Chat: React.FC<Props> = ({\n messages,\n quickReplies,\n uploadRequest,\n isBotTyping,\n speechSupport,\n translate,\n onConnect,\n onNluEvent,\n onMessageFromUser,\n onQuickReplyClick,\n onButtonClick,\n onLinkClick,\n onUploadFile,\n onShowMore,\n onAudioRecorded,\n onActionFromUser,\n}) => {\n useEffect(() => {\n /**\n * Meldung von ausserhalb (z.B. vom Wordpress Content-Bereich)\n */\n const handleOnMessageFromOutside = (event: any) => {\n switch (event.data.type) {\n case INCOMMING_EVENTS.TRIGGER_ACTION:\n onActionFromUser(event.data.action);\n break;\n case INCOMMING_EVENTS.TRIGGER_STORY:\n onNluEvent(event.data.story);\n break;\n case INCOMMING_EVENTS.ON_CHAT_WINDOW_OPEN:\n onActionFromUser({ type: 'webclient.chatwindow.opened' });\n break;\n case INCOMMING_EVENTS.ON_CHAT_WINDOW_CLOSE:\n onActionFromUser({ type: 'webclient.chatwindow.closed' });\n break;\n case INCOMMING_EVENTS.CHAT_MESSAGE_FROM_GUEST:\n onMessageFromUser(event.data.text);\n break;\n }\n };\n\n onConnect(window.location.search);\n window.addEventListener('message', (event) => handleOnMessageFromOutside(event), false);\n return () => window.removeEventListener('message', handleOnMessageFromOutside);\n }, [onConnect, onActionFromUser, onMessageFromUser, onNluEvent]);\n\n return (\n <div className={styles.chatwindow}>\n <MessageContainer\n messages={messages}\n isBotTyping={isBotTyping}\n onButtonClick={onButtonClick}\n onLinkClick={onLinkClick}\n />\n <InputContainer\n quickReplies={quickReplies}\n uploadRequest={uploadRequest}\n speechSupport={speechSupport}\n translate={translate}\n onQuickReplyClick={onQuickReplyClick}\n onTextInput={onMessageFromUser}\n onShowMore={onShowMore}\n onUploadFile={onUploadFile}\n onAudioRecorded={onAudioRecorded}\n />\n </div>\n );\n};\n\nconst mapStateToProps = (state: RootState) => {\n const { messages, quickReplies, uploadRequest, isBotTyping, speechSupport } = state.chat;\n return {\n messages,\n quickReplies,\n uploadRequest,\n isBotTyping,\n speechSupport,\n translate: getTranslate(state.locale),\n };\n};\n\nconst bindAction = (dispatch: any) => {\n return {\n onConnect: (querystrings: string) => dispatch(connect(querystrings)),\n onMessageFromUser: (text: string) => dispatch(sendMessageFromUser(text)),\n onAudioRecorded: (blob: Blob) => dispatch(sendAudioMessageFromUser(blob)),\n onActionFromUser: (action: AnyAction) => dispatch(action),\n onQuickReplyClick: (reply: any) => dispatch(handleQuickReplyClick(reply)),\n onNluEvent: (event: string) => dispatch(requestNLUEvent(event)),\n onButtonClick: (button: any) => dispatch(handleButtonClick(button)),\n onLinkClick: (url: any) => dispatch(handleLinkClick(url)),\n onShowMore: () => dispatch(showMore()),\n onUploadFile: (filename: string, blob: Blob, payload: any) =>\n dispatch(sendUploadFileFromUser(filename, blob, payload)),\n };\n};\n\nconst wrappedComponent = reduxConnect(mapStateToProps, bindAction)(Chat);\nexport default wrappedComponent;\n","import { AnyAction } from 'redux';\nimport * as ConnectionActions from '../actions/connectionActions';\nimport { ConnectionState, ConnectionStateEnum } from '../types';\n\nconst backendConnectionReducer = (state = initialState, action: AnyAction): ConnectionState => {\n switch (action.type) {\n case ConnectionActions.CONNECT:\n return Object.assign({}, state, {\n sessionId: action.sessionId,\n userId: action.userId,\n });\n\n case ConnectionActions.CONNECTING:\n return Object.assign({}, state, {\n connectionState: ConnectionStateEnum.CONNECTING,\n });\n\n case ConnectionActions.CONNECTED:\n return Object.assign({}, state, {\n connectionState: ConnectionStateEnum.CONNECTED,\n });\n\n case ConnectionActions.DISCONNECTED:\n return Object.assign({}, state, {\n connectionState: ConnectionStateEnum.DISCONNECTED,\n });\n\n case ConnectionActions.RECONNECTED:\n return Object.assign({}, state, {\n connectionState: ConnectionStateEnum.RECONNECTED,\n });\n\n case ConnectionActions.RESTORE_SESSION_ID:\n return Object.assign({}, state, {\n sessionId: action.sessionId,\n });\n\n default:\n return state;\n }\n};\n\nconst initialState: ConnectionState = {\n connectionState: ConnectionStateEnum.DISCONNECTED,\n sessionId: undefined,\n userId: undefined,\n};\n\nexport default backendConnectionReducer;\n","import { ActionTypes, GuestUser, Message, TextMessage } from '@botfabrik/engine-domain';\nimport { AnyAction } from 'redux';\nimport * as ClientActions from '../actions';\nimport { ChatState } from '../types';\n\ninterface MessageWithId extends Message {\n _id: string;\n}\n\nconst chatReducer = (state = initialState, action: AnyAction) => {\n switch (action.type) {\n case ActionTypes.TYPING_ON:\n return Object.assign({}, state, {\n isBotTyping: true,\n });\n\n case ActionTypes.TYPING_OFF:\n return Object.assign({}, state, {\n isBotTyping: false,\n });\n\n case ActionTypes.MESSAGE_FROM_GUEST:\n case ActionTypes.MESSAGE_WITHOUT_ANALYSIS_FROM_GUEST:\n return appendMessageFromGuestToState(state, action.message);\n\n case ActionTypes.MESSAGE_TO_GUEST:\n // Informiere das Top Window (z.B. unser Wordpress-Blog) über das eintreffen einer neuen Nachricht\n sendToParentPage(action);\n\n // id hinzufügen, damit wir nicht zweimal die selbe meldung im state haben\n const message: MessageWithId = Object.assign({}, action.message, { _id: action.meta.actionId });\n const alreadyAdded = state.messages.filter((m: any) => m._id === action.meta.actionId).length > 0;\n\n return Object.assign({}, state, {\n messages: alreadyAdded ? state.messages : state.messages.concat([message]),\n quickReplies: message.quickReplies ? message.quickReplies : [],\n uploadRequest: message.uploadRequest ? message.uploadRequest : {},\n });\n\n case ClientActions.RESTORE_PREVIOUS_CHAT_MESSAGES:\n const messages = action.messages;\n if (messages.length > 0) {\n const lastMessage = messages[messages.length - 1];\n return Object.assign({}, initialState, {\n messages,\n quickReplies: lastMessage.quickReplies ? lastMessage.quickReplies : [],\n uploadRequest: lastMessage.uploadRequest ? lastMessage.uploadRequest : {},\n });\n } else {\n return initialState;\n }\n\n case ActionTypes.FILE_FROM_GUEST:\n const uploadRequest = Object.assign({}, state.uploadRequest, { uploadState: 'uploading' });\n return Object.assign({}, state, { uploadRequest });\n\n case ClientActions.MESSAGE_TO_PARENT_PAGE:\n sendToParentPage(action.message);\n return state;\n\n case ActionTypes.EVENT_TO_GUEST:\n sendToParentPage(action.event);\n return state;\n\n case ClientActions.EXPAND_WINDOW:\n sendToParentPage(action);\n return state;\n\n case ClientActions.ENABLE_SPEECH_SUPPORT:\n return Object.assign({}, state, { speechSupport: true });\n\n case ClientActions.RECEIVE_SPEECH_TRANSCRIPTION:\n const msg = new TextMessage(action.transcription, new GuestUser());\n return appendMessageFromGuestToState(state, msg);\n\n default:\n return state;\n }\n};\n\nconst appendMessageFromGuestToState = (state: ChatState, message: Message) => {\n return Object.assign({}, state, {\n messages: state.messages.concat([message]),\n quickReplies: [],\n });\n};\n\nconst sendToParentPage = (action: any) => {\n if (isIframe()) {\n window.top.postMessage(action, '*');\n } else if (action.type === 'webclient.change.url') {\n window.open(action.url);\n }\n};\n\nconst isIframe = () => typeof window !== 'undefined' && window.self !== window.top;\n\nconst initialState: ChatState = {\n messages: [],\n quickReplies: [],\n isBotTyping: false,\n speechSupport: false,\n};\n\nexport default chatReducer;\n","import { localizeReducer } from 'react-localize-redux';\nimport { combineReducers } from 'redux';\nimport backendConnectionReducer from './backendConnectionReducer';\nimport chatReducer from './chatReducer';\n\nconst rootReducer = combineReducers({\n chat: chatReducer,\n connection: backendConnectionReducer,\n locale: localizeReducer,\n});\n\nexport default rootReducer;\n","import { RootState } from '../types';\n\nconst LOCAL_STORAGE_LAST_SAVED_ITEM_NAME = 'bf-webclient-state-last-saved-at';\nconst LOCAL_STORAGE_STATE_ITEM_NAME = 'bf-webclient-state';\n\nexport const loadState = () => {\n try {\n if (typeof localStorage === 'undefined') {\n return undefined;\n }\n\n // get last save time\n const lastSavedAt = localStorage.getItem(LOCAL_STORAGE_LAST_SAVED_ITEM_NAME);\n if (isExpired(lastSavedAt)) {\n return undefined;\n } else {\n // load persisted state\n const serializedState = localStorage.getItem(LOCAL_STORAGE_STATE_ITEM_NAME);\n if (serializedState === null) {\n return undefined;\n }\n return JSON.parse(serializedState);\n }\n } catch (err) {\n console.error(err);\n return undefined;\n }\n};\n\nexport const saveState = (state: Partial<RootState>) => {\n try {\n // save state\n const serializedState = JSON.stringify(state);\n localStorage.setItem(LOCAL_STORAGE_STATE_ITEM_NAME, serializedState);\n\n // save current date\n let now = new Date().toISOString();\n localStorage.setItem(LOCAL_STORAGE_LAST_SAVED_ITEM_NAME, now);\n } catch (err) {\n // ignorieren\n console.error(err);\n }\n};\n\nconst isExpired = (lastSavedAt: string | null): boolean => {\n if (lastSavedAt === null) {\n return false;\n }\n let expiresAt = new Date(lastSavedAt);\n expiresAt.setHours(expiresAt.getHours() + 12);\n\n let now = new Date();\n\n return now > expiresAt;\n};\n","import { ActionTypes } from '@botfabrik/engine-domain';\nimport { setActiveLanguage } from 'react-localize-redux';\nimport { AnyAction, Dispatch, Middleware, MiddlewareAPI } from 'redux';\nimport io from 'socket.io-client';\nimport * as ChatActions from '../actions';\nimport * as ClientActions from '../actions';\nimport * as ConnectionActions from '../actions/connectionActions';\n\n// Blacklisted actions are not forwarded to the server\nconst blacklist = [\n ConnectionActions.CONNECT,\n ConnectionActions.CONNECTING,\n ConnectionActions.CONNECTED,\n ConnectionActions.DISCONNECTED,\n ConnectionActions.RECONNECTED,\n ConnectionActions.RESTORE_SESSION_ID,\n ActionTypes.MESSAGE_TO_GUEST,\n ActionTypes.EVENT_TO_GUEST,\n ActionTypes.TYPING_ON,\n ActionTypes.TYPING_OFF,\n ChatActions.RESTORE_PREVIOUS_CHAT_MESSAGES,\n '@@localize/SET_ACTIVE_LANGUAGE',\n];\n\nconst socketMiddleware: Middleware = ({ dispatch }: MiddlewareAPI) => (next: Dispatch<AnyAction>) => {\n let socket: SocketIOClient.Socket | null = null;\n\n return (action: AnyAction) => {\n let result = next(action);\n\n if (action.type === ConnectionActions.CONNECT) {\n if (socket != null) {\n socket.disconnect();\n }\n dispatch(ConnectionActions.connecting());\n\n socket = io('/bf-webclient?' + action.querystrings);\n\n socket.on('action', dispatch);\n socket.on('connect', () => dispatch(ConnectionActions.connected()));\n socket.on('disconnect', () => dispatch(ConnectionActions.disconnected()));\n socket.on('reconnect', () => dispatch(ConnectionActions.reconnected()));\n socket.on('set-active-language', (language: string) => dispatch(setActiveLanguage(language)));\n socket.on('enable-speech-support', () => dispatch(ChatActions.enableSpeechSupport()));\n socket.on('speech-transcription', (transcription: string) =>\n dispatch(ChatActions.receiveSpeechTranscription(transcription))\n );\n socket.on('restore-client-state', (state: any) => {\n socket!.io.uri = socket!.io.uri.replace(action.sessionId, state.sessionId);\n dispatch(ConnectionActions.restoreSessionId(state.sessionId));\n dispatch(ChatActions.restorePreviousChatMessages(state.messages));\n });\n socket.on('file-uploaded', () => console.log('webclient socket middle ware: file-uploaded'));\n socket.on('expand-window', () => dispatch({ type: ClientActions.EXPAND_WINDOW }));\n } else if (action.type === ChatActions.GET_STARTED) {\n socket?.emit('get-started', JSON.stringify(action));\n } else if (action.type === ActionTypes.FILE_FROM_GUEST) {\n socket?.emit('file-from-guest', JSON.stringify(action));\n } else if (action.type === ChatActions.AUDIO_MESSAGE_FROM_USER) {\n socket?.emit('audio-message', action.buffer);\n } else if (blacklist.indexOf(action.type) === -1) {\n // Foreward all other actions to the server\n if (socket) {\n socket.emit('action', JSON.stringify(action));\n } else {\n // TODO: wenn socket undefined ist, diese sammeln und später abarbeiten\n }\n }\n\n return result;\n };\n};\n\nexport default socketMiddleware;\n","import configureStore from './configureStore';\n\nconst store = configureStore();\n\nexport default store;\n","import throttle from 'lodash/throttle';\nimport { applyMiddleware, compose, createStore } from 'redux';\nimport thunk from 'redux-thunk';\nimport reducer from '../reducers';\nimport { loadState, saveState } from './localStorage';\nimport socketMiddleware from './socketMiddleware';\n\nconst configureStore = () => {\n const persistedState = loadState();\n const store = compose(applyMiddleware(thunk, socketMiddleware))(createStore)(reducer, persistedState);\n\n store.subscribe(\n throttle(() => {\n let state = store.getState();\n saveState({\n connection: state.connection,\n });\n }, 1000)\n );\n\n return store;\n};\n\nexport default configureStore;\n","import { addTranslationForLanguage, initialize } from 'react-localize-redux';\nimport { Dispatch, AnyAction } from 'redux';\n\nexport default (dispatch: Dispatch<AnyAction>) => {\n const languages = ['de', 'en', 'fr', 'it'];\n dispatch(initialize({ languages, options: { defaultLanguage: 'de', renderToStaticMarkup: false } }));\n\n languages.forEach((language) => {\n const json = require(`./${language}.json`);\n dispatch(addTranslationForLanguage(json, language));\n });\n};\n","import 'react-app-polyfill/ie11';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport styles from './Client.module.scss';\nimport Chat from './components/Chat';\nimport initTranslations from './locales/initialize';\nimport store from './store';\n\ninitTranslations(store.dispatch);\n\nReactDOM.render(\n <Provider store={store}>\n <div className={styles.chatPage}>\n <Chat />\n </div>\n </Provider>,\n document.getElementById('root')\n);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"quickReplies\":\"QuickReplies_quickReplies__3s_Fe\",\"quickReply\":\"QuickReplies_quickReply__1ALDF\",\"more\":\"QuickReplies_more__1NmDD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputWrapper\":\"TextInput_inputWrapper__3g5RY\",\"messageInputWrapper\":\"TextInput_messageInputWrapper__3kX2Z\",\"messageInput\":\"TextInput_messageInput__1wtyj\",\"sendMessage\":\"TextInput_sendMessage__1PytH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"upload\":\"Upload_upload__115Jj\",\"upload__button\":\"Upload_upload__button__38-Um\",\"uploading\":\"Upload_uploading__3ox9F\",\"MoveUpDown\":\"Upload_MoveUpDown__127MH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"messageBot\":\"Message_messageBot__1UGxS\",\"messageUser\":\"Message_messageUser__3kL5s\",\"avatar\":\"Message_avatar__3lDSz\",\"textWrapper\":\"Message_textWrapper__2QTuM\",\"text\":\"Message_text__3bVsr\",\"leftTextWrapper\":\"Message_leftTextWrapper__T6JdA\",\"leftText\":\"Message_leftText__3KRO6\",\"rightTextWrapper\":\"Message_rightTextWrapper__3N8Sq\",\"rightText\":\"Message_rightText__1PbWT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"Global_button__33oEy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"image\":\"DetailMessage_image__1zbE4\",\"image_container\":\"DetailMessage_image_container__30r15\",\"play_button\":\"DetailMessage_play_button__2Hboo\",\"title\":\"DetailMessage_title__A_inP\",\"subtitle\":\"DetailMessage_subtitle__1ND_J\",\"button\":\"DetailMessage_button__3wrCB\",\"video_container\":\"DetailMessage_video_container__29xT4\",\"video\":\"DetailMessage_video__2ChW3\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"messageContainer\":\"MessageContainer_messageContainer__1JbXm\",\"messages\":\"MessageContainer_messages__1EfQ1\"};"],"sourceRoot":""}