@botonic/react 1.0.0-dev.1 → 1.0.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/lib/components/button.js +2 -0
  2. package/lib/components/button.js.map +1 -1
  3. package/lib/components/components.js +1 -1
  4. package/lib/components/image.js +47 -5
  5. package/lib/components/image.js.map +1 -1
  6. package/lib/components/index.js +6 -6
  7. package/lib/components/markdown.js +1 -1
  8. package/lib/components/multichannel/multichannel-utils.js +8 -6
  9. package/lib/components/multichannel/multichannel-utils.js.map +1 -1
  10. package/lib/components/timestamps.js +1 -1
  11. package/lib/constants.js +2 -1
  12. package/lib/constants.js.map +1 -1
  13. package/lib/dev-app.js +7 -6
  14. package/lib/dev-app.js.map +1 -1
  15. package/lib/index.d.ts +3 -0
  16. package/lib/index.js +20 -20
  17. package/lib/message-utils.js +1 -1
  18. package/lib/util/dom.js +8 -2
  19. package/lib/util/dom.js.map +1 -1
  20. package/lib/util/environment.js +1 -1
  21. package/lib/util/objects.js +1 -1
  22. package/lib/util/react.js +1 -1
  23. package/lib/util/webchat.js +1 -1
  24. package/lib/webchat/actions.js +3 -1
  25. package/lib/webchat/actions.js.map +1 -1
  26. package/lib/webchat/devices/device-adapter.js +14 -4
  27. package/lib/webchat/devices/device-adapter.js.map +1 -1
  28. package/lib/webchat/devices/scrollbar-controller.js +5 -3
  29. package/lib/webchat/devices/scrollbar-controller.js.map +1 -1
  30. package/lib/webchat/header.js +1 -1
  31. package/lib/webchat/hooks.js +14 -4
  32. package/lib/webchat/hooks.js.map +1 -1
  33. package/lib/webchat/index.js +1 -1
  34. package/lib/webchat/webchat-reducer.js +6 -0
  35. package/lib/webchat/webchat-reducer.js.map +1 -1
  36. package/lib/webchat/webchat.js +21 -4
  37. package/lib/webchat/webchat.js.map +1 -1
  38. package/lib/webchat/webview.js +1 -1
  39. package/lib/webchat-app.js +20 -9
  40. package/lib/webchat-app.js.map +1 -1
  41. package/package.json +6 -6
  42. package/src/components/button.jsx +2 -0
  43. package/src/dev-app.jsx +8 -3
  44. package/src/experimental/components/custom-message.jsx +2 -1
  45. package/src/experimental/components/message.jsx +14 -7
  46. package/src/experimental/constants.js +189 -0
  47. package/src/experimental/contexts.jsx +36 -0
  48. package/src/experimental/dev-app.jsx +14 -7
  49. package/src/experimental/index.js +32 -20
  50. package/src/experimental/msg-to-botonic.jsx +9 -9
  51. package/src/experimental/react-bot.jsx +1 -1
  52. package/src/experimental/util/dom.js +55 -0
  53. package/src/experimental/util/objects.js +39 -0
  54. package/src/experimental/util/webchat.js +61 -0
  55. package/src/experimental/webchat/actions.jsx +24 -0
  56. package/src/experimental/webchat/hooks.js +296 -0
  57. package/src/experimental/webchat/messages-reducer.js +86 -0
  58. package/src/experimental/webchat/session-view.jsx +166 -0
  59. package/src/experimental/webchat/webchat-dev.jsx +23 -19
  60. package/src/experimental/webchat/webchat-reducer.js +68 -0
  61. package/src/experimental/webchat/webchat.jsx +107 -75
  62. package/src/experimental/webchat-app.jsx +34 -15
  63. package/src/index.d.ts +1 -0
  64. package/src/util/dom.js +5 -3
  65. package/src/webchat/devices/device-adapter.js +16 -4
  66. package/src/webchat/devices/scrollbar-controller.js +9 -4
  67. package/src/webchat/webchat.jsx +2 -1
  68. package/src/webchat-app.jsx +6 -4
  69. package/lib/experimental/components/audio.js +0 -46
  70. package/lib/experimental/components/audio.js.map +0 -1
  71. package/lib/experimental/components/carousel.js +0 -194
  72. package/lib/experimental/components/carousel.js.map +0 -1
  73. package/lib/experimental/components/custom-message.js +0 -132
  74. package/lib/experimental/components/custom-message.js.map +0 -1
  75. package/lib/experimental/components/document.js +0 -69
  76. package/lib/experimental/components/document.js.map +0 -1
  77. package/lib/experimental/components/image.js +0 -47
  78. package/lib/experimental/components/image.js.map +0 -1
  79. package/lib/experimental/components/index.js +0 -184
  80. package/lib/experimental/components/index.js.map +0 -1
  81. package/lib/experimental/components/location.js +0 -54
  82. package/lib/experimental/components/location.js.map +0 -1
  83. package/lib/experimental/components/markdown.js +0 -103
  84. package/lib/experimental/components/markdown.js.map +0 -1
  85. package/lib/experimental/components/message.js +0 -353
  86. package/lib/experimental/components/message.js.map +0 -1
  87. package/lib/experimental/components/text.js +0 -80
  88. package/lib/experimental/components/text.js.map +0 -1
  89. package/lib/experimental/components/video.js +0 -49
  90. package/lib/experimental/components/video.js.map +0 -1
  91. package/lib/experimental/components/whatsapp-template.js +0 -53
  92. package/lib/experimental/components/whatsapp-template.js.map +0 -1
  93. package/lib/experimental/dev-app.js +0 -240
  94. package/lib/experimental/dev-app.js.map +0 -1
  95. package/lib/experimental/index.js +0 -1022
  96. package/lib/experimental/index.js.map +0 -1
  97. package/lib/experimental/msg-to-botonic.js +0 -162
  98. package/lib/experimental/msg-to-botonic.js.map +0 -1
  99. package/lib/experimental/node-app.js +0 -97
  100. package/lib/experimental/node-app.js.map +0 -1
  101. package/lib/experimental/react-bot.js +0 -167
  102. package/lib/experimental/react-bot.js.map +0 -1
  103. package/lib/experimental/webchat/assets/Inter-VariableFont_slnt,wght.ttf +0 -0
  104. package/lib/experimental/webchat/assets/botonic-logo-white.svg +0 -16
  105. package/lib/experimental/webchat/assets/messenger.svg +0 -10
  106. package/lib/experimental/webchat/assets/open-new-window.svg +0 -3
  107. package/lib/experimental/webchat/assets/open.svg +0 -3
  108. package/lib/experimental/webchat/assets/telegram.svg +0 -10
  109. package/lib/experimental/webchat/assets/webchat.svg +0 -21
  110. package/lib/experimental/webchat/assets/whatsapp.svg +0 -4
  111. package/lib/experimental/webchat/webchat-dev.js +0 -300
  112. package/lib/experimental/webchat/webchat-dev.js.map +0 -1
  113. package/lib/experimental/webchat/webchat.js +0 -1051
  114. package/lib/experimental/webchat/webchat.js.map +0 -1
  115. package/lib/experimental/webchat-app.js +0 -642
  116. package/lib/experimental/webchat-app.js.map +0 -1
package/lib/util/dom.js CHANGED
@@ -3,13 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isShadowDOMSupported = exports.onDOMLoaded = exports.getWebchatElement = exports.scrollToBottom = exports.getScrollableArea = void 0;
6
+ exports.scrollToBottom = exports.onDOMLoaded = exports.isShadowDOMSupported = exports.getWebchatElement = exports.getScrollableContent = exports.getScrollableArea = void 0;
7
7
 
8
8
  var _constants = require("../constants");
9
9
 
10
+ var getScrollableContent = function getScrollableContent(webchatElement) {
11
+ return webchatElement.querySelector(_constants.WEBCHAT.SELECTORS.SCROLLABLE_CONTENT);
12
+ };
13
+
14
+ exports.getScrollableContent = getScrollableContent;
15
+
10
16
  var getScrollableArea = function getScrollableArea(webchatElement) {
11
17
  var getArea = function getArea(area) {
12
- var botonicScrollableContent = webchatElement.querySelector(_constants.WEBCHAT.SELECTORS.SCROLLABLE_CONTENT);
18
+ var botonicScrollableContent = getScrollableContent(webchatElement);
13
19
  var scrollableArea = botonicScrollableContent && botonicScrollableContent.querySelector(area);
14
20
  return scrollableArea;
15
21
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/dom.js"],"names":["getScrollableArea","webchatElement","getArea","area","botonicScrollableContent","querySelector","WEBCHAT","SELECTORS","SCROLLABLE_CONTENT","scrollableArea","full","SIMPLEBAR_CONTENT","visible","SIMPLEBAR_WRAPPER","scrollToBottom","timeout","behavior","host","getWebchatElement","frame","setTimeout","scrollTo","top","scrollHeight","DEFAULTS","ID","onDOMLoaded","callback","test","document","readyState","addEventListener","isShadowDOMSupported","head","createShadowRoot","attachShadow","e"],"mappings":";;;;;;;AAAA;;AAEO,IAAMA,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAC,cAAc,EAAI;AACjD,MAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAC,IAAI,EAAI;AACtB,QAAMC,wBAAwB,GAAGH,cAAc,CAACI,aAAf,CAC/BC,mBAAQC,SAAR,CAAkBC,kBADa,CAAjC;AAGA,QAAMC,cAAc,GAClBL,wBAAwB,IAAIA,wBAAwB,CAACC,aAAzB,CAAuCF,IAAvC,CAD9B;AAEA,WAAOM,cAAP;AACD,GAPD;;AAQA,SAAO;AACLC,IAAAA,IAAI,EAAER,OAAO,CAACI,mBAAQC,SAAR,CAAkBI,iBAAnB,CADR;AAELC,IAAAA,OAAO,EAAEV,OAAO,CAACI,mBAAQC,SAAR,CAAkBM,iBAAnB;AAFX,GAAP;AAID,CAbM;;;;AAeA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,GAInB;AAAA,iFAAP,EAAO;AAAA,0BAHTC,OAGS;AAAA,MAHTA,OAGS,6BAHC,GAGD;AAAA,2BAFTC,QAES;AAAA,MAFTA,QAES,8BAFE,QAEF;AAAA,MADTC,IACS,QADTA,IACS;;AACT,MAAMhB,cAAc,GAAGiB,iBAAiB,CAACD,IAAD,CAAxC;AACA,MAAI,CAAChB,cAAL,EAAqB;AACrB,MAAMkB,KAAK,GAAGnB,iBAAiB,CAACC,cAAD,CAAjB,CAAkCW,OAAhD;;AACA,MAAIO,KAAJ,EAAW;AACTC,IAAAA,UAAU,CACR;AAAA,aAAMD,KAAK,CAACE,QAAN,CAAe;AAAEC,QAAAA,GAAG,EAAEH,KAAK,CAACI,YAAb;AAA2BP,QAAAA,QAAQ,EAAEA;AAArC,OAAf,CAAN;AAAA,KADQ,EAERD,OAFQ,CAAV;AAID;AACF,CAdM;;;;AAgBA,IAAMG,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAD,IAAI;AAAA,SACnCA,IAAI,IAAIA,IAAI,CAACZ,aAAL,YAAuBC,mBAAQkB,QAAR,CAAiBC,EAAxC,EAD2B;AAAA,CAA9B,C,CAGP;;;;;AACO,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAAC,QAAQ,EAAI;AACrC,MAAI,8BAA8BC,IAA9B,CAAmCC,QAAQ,CAACC,UAA5C,CAAJ,EAA6D;AAC3D;AACA;AACAH,IAAAA,QAAQ;AACT,GAJD,MAIO;AACL;AACAE,IAAAA,QAAQ,CAACE,gBAAT,CAA0B,kBAA1B,EAA8CJ,QAA9C,EAAwD,KAAxD;AACD;AACF,CATM;;;;AAWA,IAAMK,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACxC,MAAI;AACF,WAAOH,QAAQ,CAACI,IAAT,CAAcC,gBAAd,IAAkCL,QAAQ,CAACI,IAAT,CAAcE,YAAvD;AACD,GAFD,CAEE,OAAOC,CAAP,EAAU;AACV,WAAO,KAAP;AACD;AACF,CANM","sourcesContent":["import { WEBCHAT } from '../constants'\n\nexport const getScrollableArea = webchatElement => {\n const getArea = area => {\n const botonicScrollableContent = webchatElement.querySelector(\n WEBCHAT.SELECTORS.SCROLLABLE_CONTENT\n )\n const scrollableArea =\n botonicScrollableContent && botonicScrollableContent.querySelector(area)\n return scrollableArea\n }\n return {\n full: getArea(WEBCHAT.SELECTORS.SIMPLEBAR_CONTENT),\n visible: getArea(WEBCHAT.SELECTORS.SIMPLEBAR_WRAPPER),\n }\n}\n\nexport const scrollToBottom = ({\n timeout = 200,\n behavior = 'smooth',\n host,\n} = {}) => {\n const webchatElement = getWebchatElement(host)\n if (!webchatElement) return\n const frame = getScrollableArea(webchatElement).visible\n if (frame) {\n setTimeout(\n () => frame.scrollTo({ top: frame.scrollHeight, behavior: behavior }),\n timeout\n )\n }\n}\n\nexport const getWebchatElement = host =>\n host && host.querySelector(`#${WEBCHAT.DEFAULTS.ID}`)\n\n// https://stackoverflow.com/questions/9457891/how-to-detect-if-domcontentloaded-was-fired\nexport const onDOMLoaded = callback => {\n if (/complete|interactive|loaded/.test(document.readyState)) {\n // In case the document has finished parsing, document's readyState will\n // be one of \"complete\", \"interactive\" or (non-standard) \"loaded\".\n callback()\n } else {\n // The document is not ready yet, so wait for the DOMContentLoaded event\n document.addEventListener('DOMContentLoaded', callback, false)\n }\n}\n\nexport const isShadowDOMSupported = () => {\n try {\n return document.head.createShadowRoot || document.head.attachShadow\n } catch (e) {\n return false\n }\n}\n"],"file":"dom.js"}
1
+ {"version":3,"sources":["../../src/util/dom.js"],"names":["getScrollableContent","webchatElement","querySelector","WEBCHAT","SELECTORS","SCROLLABLE_CONTENT","getScrollableArea","getArea","area","botonicScrollableContent","scrollableArea","full","SIMPLEBAR_CONTENT","visible","SIMPLEBAR_WRAPPER","scrollToBottom","timeout","behavior","host","getWebchatElement","frame","setTimeout","scrollTo","top","scrollHeight","DEFAULTS","ID","onDOMLoaded","callback","test","document","readyState","addEventListener","isShadowDOMSupported","head","createShadowRoot","attachShadow","e"],"mappings":";;;;;;;AAAA;;AAEO,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAuB,CAAAC,cAAc,EAAI;AACpD,SAAOA,cAAc,CAACC,aAAf,CAA6BC,mBAAQC,SAAR,CAAkBC,kBAA/C,CAAP;AACD,CAFM;;;;AAIA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAL,cAAc,EAAI;AACjD,MAAMM,OAAO,GAAG,SAAVA,OAAU,CAAAC,IAAI,EAAI;AACtB,QAAMC,wBAAwB,GAAGT,oBAAoB,CAACC,cAAD,CAArD;AACA,QAAMS,cAAc,GAClBD,wBAAwB,IAAIA,wBAAwB,CAACP,aAAzB,CAAuCM,IAAvC,CAD9B;AAEA,WAAOE,cAAP;AACD,GALD;;AAMA,SAAO;AACLC,IAAAA,IAAI,EAAEJ,OAAO,CAACJ,mBAAQC,SAAR,CAAkBQ,iBAAnB,CADR;AAELC,IAAAA,OAAO,EAAEN,OAAO,CAACJ,mBAAQC,SAAR,CAAkBU,iBAAnB;AAFX,GAAP;AAID,CAXM;;;;AAaA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,GAInB;AAAA,iFAAP,EAAO;AAAA,0BAHTC,OAGS;AAAA,MAHTA,OAGS,6BAHC,GAGD;AAAA,2BAFTC,QAES;AAAA,MAFTA,QAES,8BAFE,QAEF;AAAA,MADTC,IACS,QADTA,IACS;;AACT,MAAMjB,cAAc,GAAGkB,iBAAiB,CAACD,IAAD,CAAxC;AACA,MAAI,CAACjB,cAAL,EAAqB;AACrB,MAAMmB,KAAK,GAAGd,iBAAiB,CAACL,cAAD,CAAjB,CAAkCY,OAAhD;;AACA,MAAIO,KAAJ,EAAW;AACTC,IAAAA,UAAU,CACR;AAAA,aAAMD,KAAK,CAACE,QAAN,CAAe;AAAEC,QAAAA,GAAG,EAAEH,KAAK,CAACI,YAAb;AAA2BP,QAAAA,QAAQ,EAAEA;AAArC,OAAf,CAAN;AAAA,KADQ,EAERD,OAFQ,CAAV;AAID;AACF,CAdM;;;;AAgBA,IAAMG,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAD,IAAI;AAAA,SACnCA,IAAI,IAAIA,IAAI,CAAChB,aAAL,YAAuBC,mBAAQsB,QAAR,CAAiBC,EAAxC,EAD2B;AAAA,CAA9B,C,CAGP;;;;;AACO,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAAC,QAAQ,EAAI;AACrC,MAAI,8BAA8BC,IAA9B,CAAmCC,QAAQ,CAACC,UAA5C,CAAJ,EAA6D;AAC3D;AACA;AACAH,IAAAA,QAAQ;AACT,GAJD,MAIO;AACL;AACAE,IAAAA,QAAQ,CAACE,gBAAT,CAA0B,kBAA1B,EAA8CJ,QAA9C,EAAwD,KAAxD;AACD;AACF,CATM;;;;AAWA,IAAMK,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACxC,MAAI;AACF,WAAOH,QAAQ,CAACI,IAAT,CAAcC,gBAAd,IAAkCL,QAAQ,CAACI,IAAT,CAAcE,YAAvD;AACD,GAFD,CAEE,OAAOC,CAAP,EAAU;AACV,WAAO,KAAP;AACD;AACF,CANM","sourcesContent":["import { WEBCHAT } from '../constants'\n\nexport const getScrollableContent = webchatElement => {\n return webchatElement.querySelector(WEBCHAT.SELECTORS.SCROLLABLE_CONTENT)\n}\n\nexport const getScrollableArea = webchatElement => {\n const getArea = area => {\n const botonicScrollableContent = getScrollableContent(webchatElement)\n const scrollableArea =\n botonicScrollableContent && botonicScrollableContent.querySelector(area)\n return scrollableArea\n }\n return {\n full: getArea(WEBCHAT.SELECTORS.SIMPLEBAR_CONTENT),\n visible: getArea(WEBCHAT.SELECTORS.SIMPLEBAR_WRAPPER),\n }\n}\n\nexport const scrollToBottom = ({\n timeout = 200,\n behavior = 'smooth',\n host,\n} = {}) => {\n const webchatElement = getWebchatElement(host)\n if (!webchatElement) return\n const frame = getScrollableArea(webchatElement).visible\n if (frame) {\n setTimeout(\n () => frame.scrollTo({ top: frame.scrollHeight, behavior: behavior }),\n timeout\n )\n }\n}\n\nexport const getWebchatElement = host =>\n host && host.querySelector(`#${WEBCHAT.DEFAULTS.ID}`)\n\n// https://stackoverflow.com/questions/9457891/how-to-detect-if-domcontentloaded-was-fired\nexport const onDOMLoaded = callback => {\n if (/complete|interactive|loaded/.test(document.readyState)) {\n // In case the document has finished parsing, document's readyState will\n // be one of \"complete\", \"interactive\" or (non-standard) \"loaded\".\n callback()\n } else {\n // The document is not ready yet, so wait for the DOMContentLoaded event\n document.addEventListener('DOMContentLoaded', callback, false)\n }\n}\n\nexport const isShadowDOMSupported = () => {\n try {\n return document.head.createShadowRoot || document.head.attachShadow\n } catch (e) {\n return false\n }\n}\n"],"file":"dom.js"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isURL = exports.resolveImage = exports.staticAsset = exports.isProd = exports.isDev = void 0;
6
+ exports.staticAsset = exports.resolveImage = exports.isURL = exports.isProd = exports.isDev = void 0;
7
7
  var isDev = process.env.NODE_ENV === 'development';
8
8
  exports.isDev = isDev;
9
9
  var isProd = process.env.NODE_ENV === 'production';
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.strToBool = strToBool;
9
8
  exports.mapObject = exports.getProperty = void 0;
9
+ exports.strToBool = strToBool;
10
10
 
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
 
package/lib/util/react.js CHANGED
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.mapObjectNonBooleanValues = exports.hasComplexChildren = exports.deepMapWithIndex = exports.ConditionalWrapper = void 0;
8
9
  exports.renderComponent = renderComponent;
9
- exports.deepMapWithIndex = exports.hasComplexChildren = exports.mapObjectNonBooleanValues = exports.ConditionalWrapper = void 0;
10
10
 
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
 
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getServerErrorMessage = exports.shouldKeepSessionOnReload = exports.initSession = exports.createUser = exports._getThemeProperty = void 0;
8
+ exports.shouldKeepSessionOnReload = exports.initSession = exports.getServerErrorMessage = exports.createUser = exports._getThemeProperty = void 0;
9
9
 
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.UPDATE_JWT = exports.SET_ONLINE = exports.SET_CURRENT_ATTACHMENT = exports.UPDATE_LAST_MESSAGE_DATE = exports.CLEAR_MESSAGES = exports.SET_ERROR = exports.TOGGLE_COVER_COMPONENT = exports.TOGGLE_PERSISTENT_MENU = exports.TOGGLE_EMOJI_PICKER = exports.TOGGLE_WEBCHAT = exports.UPDATE_DEV_SETTINGS = exports.UPDATE_THEME = exports.UPDATE_HANDOFF = exports.UPDATE_LAST_ROUTE_PATH = exports.UPDATE_SESSION = exports.UPDATE_WEBVIEW = exports.UPDATE_TYPING = exports.UPDATE_LATEST_INPUT = exports.UPDATE_REPLIES = exports.UPDATE_MESSAGE = exports.ADD_MESSAGE_COMPONENT = exports.ADD_MESSAGE = void 0;
6
+ exports.UPDATE_WEBVIEW = exports.UPDATE_TYPING = exports.UPDATE_THEME = exports.UPDATE_SESSION = exports.UPDATE_REPLIES = exports.UPDATE_MESSAGE = exports.UPDATE_LATEST_INPUT = exports.UPDATE_LAST_ROUTE_PATH = exports.UPDATE_LAST_MESSAGE_DATE = exports.UPDATE_JWT = exports.UPDATE_HANDOFF = exports.UPDATE_DEV_SETTINGS = exports.TOGGLE_WEBCHAT = exports.TOGGLE_PERSISTENT_MENU = exports.TOGGLE_EMOJI_PICKER = exports.TOGGLE_COVER_COMPONENT = exports.SET_ONLINE = exports.SET_ERROR = exports.SET_CURRENT_ATTACHMENT = exports.DO_RENDER_CUSTOM_COMPONENT = exports.CLEAR_MESSAGES = exports.ADD_MESSAGE_COMPONENT = exports.ADD_MESSAGE = void 0;
7
7
  var ADD_MESSAGE = 'addMessage';
8
8
  exports.ADD_MESSAGE = ADD_MESSAGE;
9
9
  var ADD_MESSAGE_COMPONENT = 'addMessageComponent';
@@ -36,6 +36,8 @@ var TOGGLE_PERSISTENT_MENU = 'togglePersistentMenu';
36
36
  exports.TOGGLE_PERSISTENT_MENU = TOGGLE_PERSISTENT_MENU;
37
37
  var TOGGLE_COVER_COMPONENT = 'toggleCoverComponent';
38
38
  exports.TOGGLE_COVER_COMPONENT = TOGGLE_COVER_COMPONENT;
39
+ var DO_RENDER_CUSTOM_COMPONENT = 'doRenderCustomComponent';
40
+ exports.DO_RENDER_CUSTOM_COMPONENT = DO_RENDER_CUSTOM_COMPONENT;
39
41
  var SET_ERROR = 'setError';
40
42
  exports.SET_ERROR = SET_ERROR;
41
43
  var CLEAR_MESSAGES = 'clearMessages';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/webchat/actions.jsx"],"names":["ADD_MESSAGE","ADD_MESSAGE_COMPONENT","UPDATE_MESSAGE","UPDATE_REPLIES","UPDATE_LATEST_INPUT","UPDATE_TYPING","UPDATE_WEBVIEW","UPDATE_SESSION","UPDATE_LAST_ROUTE_PATH","UPDATE_HANDOFF","UPDATE_THEME","UPDATE_DEV_SETTINGS","TOGGLE_WEBCHAT","TOGGLE_EMOJI_PICKER","TOGGLE_PERSISTENT_MENU","TOGGLE_COVER_COMPONENT","SET_ERROR","CLEAR_MESSAGES","UPDATE_LAST_MESSAGE_DATE","SET_CURRENT_ATTACHMENT","SET_ONLINE","UPDATE_JWT"],"mappings":";;;;;;AAAO,IAAMA,WAAW,GAAG,YAApB;;AACA,IAAMC,qBAAqB,GAAG,qBAA9B;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,mBAAmB,GAAG,mBAA5B;;AACA,IAAMC,aAAa,GAAG,cAAtB;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,sBAAsB,GAAG,qBAA/B;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,YAAY,GAAG,aAArB;;AACA,IAAMC,mBAAmB,GAAG,mBAA5B;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,mBAAmB,GAAG,mBAA5B;;AACA,IAAMC,sBAAsB,GAAG,sBAA/B;;AACA,IAAMC,sBAAsB,GAAG,sBAA/B;;AACA,IAAMC,SAAS,GAAG,UAAlB;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,wBAAwB,GAAG,uBAAjC;;AACA,IAAMC,sBAAsB,GAAG,sBAA/B;;AACA,IAAMC,UAAU,GAAG,WAAnB;;AACA,IAAMC,UAAU,GAAG,WAAnB","sourcesContent":["export const ADD_MESSAGE = 'addMessage'\nexport const ADD_MESSAGE_COMPONENT = 'addMessageComponent'\nexport const UPDATE_MESSAGE = 'updateMessage'\nexport const UPDATE_REPLIES = 'updateReplies'\nexport const UPDATE_LATEST_INPUT = 'updateLatestInput'\nexport const UPDATE_TYPING = 'updateTyping'\nexport const UPDATE_WEBVIEW = 'updateWebview'\nexport const UPDATE_SESSION = 'updateSession'\nexport const UPDATE_LAST_ROUTE_PATH = 'updateLastRoutePath'\nexport const UPDATE_HANDOFF = 'updateHandoff'\nexport const UPDATE_THEME = 'updateTheme'\nexport const UPDATE_DEV_SETTINGS = 'updateDevSettings'\nexport const TOGGLE_WEBCHAT = 'toggleWebchat'\nexport const TOGGLE_EMOJI_PICKER = 'toggleEmojiPicker'\nexport const TOGGLE_PERSISTENT_MENU = 'togglePersistentMenu'\nexport const TOGGLE_COVER_COMPONENT = 'toggleCoverComponent'\nexport const SET_ERROR = 'setError'\nexport const CLEAR_MESSAGES = 'clearMessages'\nexport const UPDATE_LAST_MESSAGE_DATE = 'updateLastMessageDate'\nexport const SET_CURRENT_ATTACHMENT = 'setCurrentAttachment'\nexport const SET_ONLINE = 'setOnline'\nexport const UPDATE_JWT = 'updateJwt'\n"],"file":"actions.js"}
1
+ {"version":3,"sources":["../../src/webchat/actions.jsx"],"names":["ADD_MESSAGE","ADD_MESSAGE_COMPONENT","UPDATE_MESSAGE","UPDATE_REPLIES","UPDATE_LATEST_INPUT","UPDATE_TYPING","UPDATE_WEBVIEW","UPDATE_SESSION","UPDATE_LAST_ROUTE_PATH","UPDATE_HANDOFF","UPDATE_THEME","UPDATE_DEV_SETTINGS","TOGGLE_WEBCHAT","TOGGLE_EMOJI_PICKER","TOGGLE_PERSISTENT_MENU","TOGGLE_COVER_COMPONENT","DO_RENDER_CUSTOM_COMPONENT","SET_ERROR","CLEAR_MESSAGES","UPDATE_LAST_MESSAGE_DATE","SET_CURRENT_ATTACHMENT","SET_ONLINE","UPDATE_JWT"],"mappings":";;;;;;AAAO,IAAMA,WAAW,GAAG,YAApB;;AACA,IAAMC,qBAAqB,GAAG,qBAA9B;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,mBAAmB,GAAG,mBAA5B;;AACA,IAAMC,aAAa,GAAG,cAAtB;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,sBAAsB,GAAG,qBAA/B;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,YAAY,GAAG,aAArB;;AACA,IAAMC,mBAAmB,GAAG,mBAA5B;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,mBAAmB,GAAG,mBAA5B;;AACA,IAAMC,sBAAsB,GAAG,sBAA/B;;AACA,IAAMC,sBAAsB,GAAG,sBAA/B;;AACA,IAAMC,0BAA0B,GAAG,yBAAnC;;AACA,IAAMC,SAAS,GAAG,UAAlB;;AACA,IAAMC,cAAc,GAAG,eAAvB;;AACA,IAAMC,wBAAwB,GAAG,uBAAjC;;AACA,IAAMC,sBAAsB,GAAG,sBAA/B;;AACA,IAAMC,UAAU,GAAG,WAAnB;;AACA,IAAMC,UAAU,GAAG,WAAnB","sourcesContent":["export const ADD_MESSAGE = 'addMessage'\nexport const ADD_MESSAGE_COMPONENT = 'addMessageComponent'\nexport const UPDATE_MESSAGE = 'updateMessage'\nexport const UPDATE_REPLIES = 'updateReplies'\nexport const UPDATE_LATEST_INPUT = 'updateLatestInput'\nexport const UPDATE_TYPING = 'updateTyping'\nexport const UPDATE_WEBVIEW = 'updateWebview'\nexport const UPDATE_SESSION = 'updateSession'\nexport const UPDATE_LAST_ROUTE_PATH = 'updateLastRoutePath'\nexport const UPDATE_HANDOFF = 'updateHandoff'\nexport const UPDATE_THEME = 'updateTheme'\nexport const UPDATE_DEV_SETTINGS = 'updateDevSettings'\nexport const TOGGLE_WEBCHAT = 'toggleWebchat'\nexport const TOGGLE_EMOJI_PICKER = 'toggleEmojiPicker'\nexport const TOGGLE_PERSISTENT_MENU = 'togglePersistentMenu'\nexport const TOGGLE_COVER_COMPONENT = 'toggleCoverComponent'\nexport const DO_RENDER_CUSTOM_COMPONENT = 'doRenderCustomComponent'\nexport const SET_ERROR = 'setError'\nexport const CLEAR_MESSAGES = 'clearMessages'\nexport const UPDATE_LAST_MESSAGE_DATE = 'updateLastMessageDate'\nexport const SET_CURRENT_ATTACHMENT = 'setCurrentAttachment'\nexport const SET_ONLINE = 'setOnline'\nexport const UPDATE_JWT = 'updateJwt'\n"],"file":"actions.js"}
@@ -22,16 +22,23 @@ var _webchatResizer = require("./webchat-resizer");
22
22
  var DeviceAdapter = /*#__PURE__*/function () {
23
23
  function DeviceAdapter() {
24
24
  (0, _classCallCheck2["default"])(this, DeviceAdapter);
25
+ this.currentDevice = this.getCurrentDevice();
25
26
  }
26
27
 
27
28
  (0, _createClass2["default"])(DeviceAdapter, [{
28
29
  key: "init",
29
30
  value: function init(host) {
30
- this.currentDevice = navigator.platform;
31
31
  this.webchatResizer = new _webchatResizer.WebchatResizer(this.currentDevice, host);
32
32
  this.scrollbarController = new _scrollbarController.ScrollbarController(this.currentDevice, host);
33
33
  this.scrollbarController.handleScrollEvents();
34
34
  }
35
+ }, {
36
+ key: "getCurrentDevice",
37
+ value: function getCurrentDevice() {
38
+ // navigator.platform deprecated. Ref: (https://erikmartinjordan.com/navigator-platform-deprecated-alternative)
39
+ if (navigator.userAgentData) return navigator.userAgentData.platform;
40
+ return navigator.platform;
41
+ }
35
42
  }, {
36
43
  key: "onFocus",
37
44
  value: function onFocus(host) {
@@ -45,9 +52,12 @@ var DeviceAdapter = /*#__PURE__*/function () {
45
52
  return;
46
53
  }
47
54
 
48
- this.webchatResizer.onFocus(function () {
49
- return _this.scrollbarController.handleOnTouchMoveEvents();
50
- });
55
+ setTimeout(function () {
56
+ // Place onFocus logic to be run the last on the queue of asynchronous events to give enough time to init method to be called. Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#zero_delays
57
+ _this.webchatResizer.onFocus(function () {
58
+ return _this.scrollbarController.handleOnTouchMoveEvents();
59
+ });
60
+ }, 0);
51
61
  }
52
62
  }, {
53
63
  key: "onBlur",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/webchat/devices/device-adapter.js"],"names":["DeviceAdapter","host","currentDevice","navigator","platform","webchatResizer","WebchatResizer","scrollbarController","ScrollbarController","handleScrollEvents","DEVICES","MOBILE","IPHONE","timeout","onFocus","handleOnTouchMoveEvents","onBlur","defaultFontSize"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;IAEaA,a;;;;;;;WACX,cAAKC,IAAL,EAAW;AACT,WAAKC,aAAL,GAAqBC,SAAS,CAACC,QAA/B;AACA,WAAKC,cAAL,GAAsB,IAAIC,8BAAJ,CAAmB,KAAKJ,aAAxB,EAAuCD,IAAvC,CAAtB;AACA,WAAKM,mBAAL,GAA2B,IAAIC,wCAAJ,CAAwB,KAAKN,aAA7B,EAA4CD,IAA5C,CAA3B;AACA,WAAKM,mBAAL,CAAyBE,kBAAzB;AACD;;;WAED,iBAAQR,IAAR,EAAc;AAAA;;AACZ,UAAI,KAAKC,aAAL,KAAuBQ,UAAQC,MAAR,CAAeC,MAA1C,EAAkD;AAChD,iCAAe;AAAEX,UAAAA,IAAI,EAAJA,IAAF;AAAQY,UAAAA,OAAO,EAAE;AAAjB,SAAf;AACA;AACD;;AACD,WAAKR,cAAL,CAAoBS,OAApB,CAA4B;AAAA,eAC1B,KAAI,CAACP,mBAAL,CAAyBQ,uBAAzB,EAD0B;AAAA,OAA5B;AAGD;;;WAED,kBAAS;AACP,UAAI,KAAKb,aAAL,KAAuBQ,UAAQC,MAAR,CAAeC,MAA1C,EAAkD;AAClD,WAAKP,cAAL,CAAoBW,MAApB;AACA,WAAKT,mBAAL,CAAyBQ,uBAAzB;AACD;;;WAED,oBAA+B;AAAA,UAAtBE,eAAsB,uEAAJ,EAAI;AAC7B,UAAI,KAAKf,aAAL,KAAuBQ,UAAQC,MAAR,CAAeC,MAA1C,EAAkD,OAAOK,eAAP,CADrB,CAE7B;;AACA,aAAO,SAAP;AACD","sourcesContent":["import { scrollToBottom } from '../../util/dom'\nimport { DEVICES } from '.'\nimport { ScrollbarController } from './scrollbar-controller'\nimport { WebchatResizer } from './webchat-resizer'\n\nexport class DeviceAdapter {\n init(host) {\n this.currentDevice = navigator.platform\n this.webchatResizer = new WebchatResizer(this.currentDevice, host)\n this.scrollbarController = new ScrollbarController(this.currentDevice, host)\n this.scrollbarController.handleScrollEvents()\n }\n\n onFocus(host) {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) {\n scrollToBottom({ host, timeout: 800 })\n return\n }\n this.webchatResizer.onFocus(() =>\n this.scrollbarController.handleOnTouchMoveEvents()\n )\n }\n\n onBlur() {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n this.webchatResizer.onBlur()\n this.scrollbarController.handleOnTouchMoveEvents()\n }\n\n fontSize(defaultFontSize = 14) {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return defaultFontSize\n // Disabling auto-zoom on input (iPhone devices): https://stackoverflow.com/a/25614477, https://stackoverflow.com/a/6394497\n return 'initial'\n }\n}\n"],"file":"device-adapter.js"}
1
+ {"version":3,"sources":["../../../src/webchat/devices/device-adapter.js"],"names":["DeviceAdapter","currentDevice","getCurrentDevice","host","webchatResizer","WebchatResizer","scrollbarController","ScrollbarController","handleScrollEvents","navigator","userAgentData","platform","DEVICES","MOBILE","IPHONE","timeout","setTimeout","onFocus","handleOnTouchMoveEvents","onBlur","defaultFontSize"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;IAEaA,a;AACX,2BAAc;AAAA;AACZ,SAAKC,aAAL,GAAqB,KAAKC,gBAAL,EAArB;AACD;;;;WAED,cAAKC,IAAL,EAAW;AACT,WAAKC,cAAL,GAAsB,IAAIC,8BAAJ,CAAmB,KAAKJ,aAAxB,EAAuCE,IAAvC,CAAtB;AACA,WAAKG,mBAAL,GAA2B,IAAIC,wCAAJ,CAAwB,KAAKN,aAA7B,EAA4CE,IAA5C,CAA3B;AACA,WAAKG,mBAAL,CAAyBE,kBAAzB;AACD;;;WAED,4BAAmB;AACjB;AACA,UAAIC,SAAS,CAACC,aAAd,EAA6B,OAAOD,SAAS,CAACC,aAAV,CAAwBC,QAA/B;AAC7B,aAAOF,SAAS,CAACE,QAAjB;AACD;;;WAED,iBAAQR,IAAR,EAAc;AAAA;;AACZ,UAAI,KAAKF,aAAL,KAAuBW,UAAQC,MAAR,CAAeC,MAA1C,EAAkD;AAChD,iCAAe;AAAEX,UAAAA,IAAI,EAAJA,IAAF;AAAQY,UAAAA,OAAO,EAAE;AAAjB,SAAf;AACA;AACD;;AACDC,MAAAA,UAAU,CAAC,YAAM;AACf;AACA,QAAA,KAAI,CAACZ,cAAL,CAAoBa,OAApB,CAA4B;AAAA,iBAC1B,KAAI,CAACX,mBAAL,CAAyBY,uBAAzB,EAD0B;AAAA,SAA5B;AAGD,OALS,EAKP,CALO,CAAV;AAMD;;;WAED,kBAAS;AACP,UAAI,KAAKjB,aAAL,KAAuBW,UAAQC,MAAR,CAAeC,MAA1C,EAAkD;AAClD,WAAKV,cAAL,CAAoBe,MAApB;AACA,WAAKb,mBAAL,CAAyBY,uBAAzB;AACD;;;WAED,oBAA+B;AAAA,UAAtBE,eAAsB,uEAAJ,EAAI;AAC7B,UAAI,KAAKnB,aAAL,KAAuBW,UAAQC,MAAR,CAAeC,MAA1C,EAAkD,OAAOM,eAAP,CADrB,CAE7B;;AACA,aAAO,SAAP;AACD","sourcesContent":["import { scrollToBottom } from '../../util/dom'\nimport { DEVICES } from '.'\nimport { ScrollbarController } from './scrollbar-controller'\nimport { WebchatResizer } from './webchat-resizer'\n\nexport class DeviceAdapter {\n constructor() {\n this.currentDevice = this.getCurrentDevice()\n }\n\n init(host) {\n this.webchatResizer = new WebchatResizer(this.currentDevice, host)\n this.scrollbarController = new ScrollbarController(this.currentDevice, host)\n this.scrollbarController.handleScrollEvents()\n }\n\n getCurrentDevice() {\n // navigator.platform deprecated. Ref: (https://erikmartinjordan.com/navigator-platform-deprecated-alternative)\n if (navigator.userAgentData) return navigator.userAgentData.platform\n return navigator.platform\n }\n\n onFocus(host) {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) {\n scrollToBottom({ host, timeout: 800 })\n return\n }\n setTimeout(() => {\n // Place onFocus logic to be run the last on the queue of asynchronous events to give enough time to init method to be called. Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#zero_delays\n this.webchatResizer.onFocus(() =>\n this.scrollbarController.handleOnTouchMoveEvents()\n )\n }, 0)\n }\n\n onBlur() {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n this.webchatResizer.onBlur()\n this.scrollbarController.handleOnTouchMoveEvents()\n }\n\n fontSize(defaultFontSize = 14) {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return defaultFontSize\n // Disabling auto-zoom on input (iPhone devices): https://stackoverflow.com/a/25614477, https://stackoverflow.com/a/6394497\n return 'initial'\n }\n}\n"],"file":"device-adapter.js"}
@@ -51,7 +51,7 @@ var ScrollbarController = /*#__PURE__*/function () {
51
51
  var _this = this;
52
52
 
53
53
  /*
54
- It handles scroll events for Mobile/Desktop.
54
+ It handles scroll events for Mobile/Desktop.
55
55
  "ontouchmove" is the phone equivalent for "onmouseover"
56
56
  */
57
57
  if ((0, _.isMobileDevice)()) {
@@ -91,12 +91,14 @@ var ScrollbarController = /*#__PURE__*/function () {
91
91
  }, {
92
92
  key: "toggleOnMouseWheelEvents",
93
93
  value: function toggleOnMouseWheelEvents() {
94
+ var scrollableContent = (0, _dom.getScrollableContent)(this.webchat);
95
+
94
96
  if (this.hasScrollbar()) {
95
- this.webchat.onmousewheel = {};
97
+ scrollableContent.onmousewheel = {};
96
98
  return;
97
99
  }
98
100
 
99
- this.webchat.onmousewheel = function (e) {
101
+ scrollableContent.onmousewheel = function (e) {
100
102
  return e.preventDefault();
101
103
  };
102
104
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/webchat/devices/scrollbar-controller.js"],"names":["debounced","delay","fn","timerId","args","clearTimeout","setTimeout","stopAtScrollLimit","element","scrollTop","scrollHeight","clientHeight","ScrollbarController","currentDevice","host","webchat","DEVICES","MOBILE","IPHONE","limitScrollBoundaries","ontouchstart","e","handleOnTouchMoveEvents","ontouchmove","onmouseover","handleOnMouseOverEvents","scrollableArea","isScrollable","visible","full","target","currentTarget","toggleOnMouseWheelEvents","parentNode","hasScrollbar","onmousewheel","preventDefault","toggleOnTouchMoveEvents","frame","dStopAtScrollLimit","window","addEventListener","attachEvent"],"mappings":"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","sourcesContent":["import { getScrollableArea, getWebchatElement } from '../../util/dom'\nimport { DEVICES, isMobileDevice } from '.'\n\nconst debounced = (delay, fn) => {\n let timerId\n return function (...args) {\n if (timerId) {\n clearTimeout(timerId)\n }\n timerId = setTimeout(() => {\n fn(...args)\n timerId = null\n }, delay)\n }\n}\n\nconst stopAtScrollLimit = element => {\n if (element.scrollTop === 0) element.scrollTop = 1\n if (element.scrollHeight - element.scrollTop === element.clientHeight)\n element.scrollTop -= 1\n}\n\nexport class ScrollbarController {\n constructor(currentDevice, host) {\n this.currentDevice = currentDevice\n this.webchat = getWebchatElement(host)\n }\n\n handleScrollEvents() {\n /*\n It handles scroll events for Mobile/Desktop. \n \"ontouchmove\" is the phone equivalent for \"onmouseover\"\n */\n if (isMobileDevice()) {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n this.limitScrollBoundaries()\n this.webchat.ontouchstart = e => {\n this.handleOnTouchMoveEvents(e)\n }\n this.webchat.ontouchmove = e => {\n this.handleOnTouchMoveEvents(e)\n }\n } else {\n this.webchat.onmouseover = e => this.handleOnMouseOverEvents(e)\n }\n }\n\n hasScrollbar() {\n const scrollableArea = getScrollableArea(this.webchat)\n const isScrollable =\n scrollableArea.visible.clientHeight - scrollableArea.full.clientHeight < 0\n return isScrollable\n }\n\n handleOnMouseOverEvents(e) {\n let target = e.currentTarget\n while (target) {\n this.toggleOnMouseWheelEvents()\n target = target.parentNode\n }\n }\n\n toggleOnMouseWheelEvents() {\n if (this.hasScrollbar()) {\n this.webchat.onmousewheel = {}\n return\n }\n this.webchat.onmousewheel = e => e.preventDefault()\n }\n\n handleOnTouchMoveEvents(e) {\n this.toggleOnTouchMoveEvents()\n }\n\n toggleOnTouchMoveEvents() {\n if (this.hasScrollbar()) {\n this.webchat.ontouchmove = {}\n this.webchat.ontouchstart = {}\n return\n }\n this.webchat.ontouchmove = e => e.preventDefault()\n }\n\n limitScrollBoundaries() {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n /*\n It adds a bounce effect when top or bottom limits of the scrollbar are reached for iOS,\n as an alternative of overscroll-behavior (https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior)\n */\n const frame = getScrollableArea(this.webchat).visible\n const dStopAtScrollLimit = debounced(100, stopAtScrollLimit)\n if (frame) {\n if (window.addEventListener) {\n frame.addEventListener('scroll', () => dStopAtScrollLimit(frame), true)\n } else if (window.attachEvent) {\n frame.attachEvent('scroll', () => dStopAtScrollLimit(frame))\n }\n }\n }\n}\n"],"file":"scrollbar-controller.js"}
1
+ {"version":3,"sources":["../../../src/webchat/devices/scrollbar-controller.js"],"names":["debounced","delay","fn","timerId","args","clearTimeout","setTimeout","stopAtScrollLimit","element","scrollTop","scrollHeight","clientHeight","ScrollbarController","currentDevice","host","webchat","DEVICES","MOBILE","IPHONE","limitScrollBoundaries","ontouchstart","e","handleOnTouchMoveEvents","ontouchmove","onmouseover","handleOnMouseOverEvents","scrollableArea","isScrollable","visible","full","target","currentTarget","toggleOnMouseWheelEvents","parentNode","scrollableContent","hasScrollbar","onmousewheel","preventDefault","toggleOnTouchMoveEvents","frame","dStopAtScrollLimit","window","addEventListener","attachEvent"],"mappings":"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","sourcesContent":["import {\n getScrollableArea,\n getScrollableContent,\n getWebchatElement,\n} from '../../util/dom'\nimport { DEVICES, isMobileDevice } from '.'\n\nconst debounced = (delay, fn) => {\n let timerId\n return function (...args) {\n if (timerId) {\n clearTimeout(timerId)\n }\n timerId = setTimeout(() => {\n fn(...args)\n timerId = null\n }, delay)\n }\n}\n\nconst stopAtScrollLimit = element => {\n if (element.scrollTop === 0) element.scrollTop = 1\n if (element.scrollHeight - element.scrollTop === element.clientHeight)\n element.scrollTop -= 1\n}\n\nexport class ScrollbarController {\n constructor(currentDevice, host) {\n this.currentDevice = currentDevice\n this.webchat = getWebchatElement(host)\n }\n\n handleScrollEvents() {\n /*\n It handles scroll events for Mobile/Desktop.\n \"ontouchmove\" is the phone equivalent for \"onmouseover\"\n */\n if (isMobileDevice()) {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n this.limitScrollBoundaries()\n this.webchat.ontouchstart = e => {\n this.handleOnTouchMoveEvents(e)\n }\n this.webchat.ontouchmove = e => {\n this.handleOnTouchMoveEvents(e)\n }\n } else {\n this.webchat.onmouseover = e => this.handleOnMouseOverEvents(e)\n }\n }\n\n hasScrollbar() {\n const scrollableArea = getScrollableArea(this.webchat)\n const isScrollable =\n scrollableArea.visible.clientHeight - scrollableArea.full.clientHeight < 0\n return isScrollable\n }\n\n handleOnMouseOverEvents(e) {\n let target = e.currentTarget\n while (target) {\n this.toggleOnMouseWheelEvents()\n target = target.parentNode\n }\n }\n\n toggleOnMouseWheelEvents() {\n const scrollableContent = getScrollableContent(this.webchat)\n if (this.hasScrollbar()) {\n scrollableContent.onmousewheel = {}\n return\n }\n scrollableContent.onmousewheel = e => e.preventDefault()\n }\n\n handleOnTouchMoveEvents(e) {\n this.toggleOnTouchMoveEvents()\n }\n\n toggleOnTouchMoveEvents() {\n if (this.hasScrollbar()) {\n this.webchat.ontouchmove = {}\n this.webchat.ontouchstart = {}\n return\n }\n this.webchat.ontouchmove = e => e.preventDefault()\n }\n\n limitScrollBoundaries() {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n /*\n It adds a bounce effect when top or bottom limits of the scrollbar are reached for iOS,\n as an alternative of overscroll-behavior (https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior)\n */\n const frame = getScrollableArea(this.webchat).visible\n const dStopAtScrollLimit = debounced(100, stopAtScrollLimit)\n if (frame) {\n if (window.addEventListener) {\n frame.addEventListener('scroll', () => dStopAtScrollLimit(frame), true)\n } else if (window.attachEvent) {\n frame.attachEvent('scroll', () => dStopAtScrollLimit(frame))\n }\n }\n }\n}\n"],"file":"scrollbar-controller.js"}
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.StyledWebchatHeader = exports.WebchatHeader = exports.DefaultHeader = void 0;
10
+ exports.WebchatHeader = exports.StyledWebchatHeader = exports.DefaultHeader = void 0;
11
11
 
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
 
@@ -5,11 +5,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.useWebchat = useWebchat;
9
- exports.useTyping = useTyping;
10
- exports.usePrevious = usePrevious;
11
8
  exports.useComponentVisible = useComponentVisible;
12
- exports.useComponentWillMount = exports.webchatInitialState = void 0;
9
+ exports.useComponentWillMount = void 0;
10
+ exports.usePrevious = usePrevious;
11
+ exports.useTyping = useTyping;
12
+ exports.useWebchat = useWebchat;
13
+ exports.webchatInitialState = void 0;
13
14
 
14
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
16
 
@@ -64,6 +65,7 @@ var webchatInitialState = {
64
65
  isEmojiPickerOpen: false,
65
66
  isPersistentMenuOpen: false,
66
67
  isCoverComponentOpen: false,
68
+ isCustomComponentRendered: false,
67
69
  lastMessageUpdate: undefined,
68
70
  currentAttachment: undefined,
69
71
  jwt: null
@@ -198,6 +200,13 @@ function useWebchat() {
198
200
  });
199
201
  };
200
202
 
203
+ var doRenderCustomComponent = function doRenderCustomComponent(toggle) {
204
+ return webchatDispatch({
205
+ type: _actions.DO_RENDER_CUSTOM_COMPONENT,
206
+ payload: toggle
207
+ });
208
+ };
209
+
201
210
  var setError = function setError(error) {
202
211
  return webchatDispatch({
203
212
  type: _actions.SET_ERROR,
@@ -258,6 +267,7 @@ function useWebchat() {
258
267
  toggleEmojiPicker: toggleEmojiPicker,
259
268
  togglePersistentMenu: togglePersistentMenu,
260
269
  toggleCoverComponent: toggleCoverComponent,
270
+ doRenderCustomComponent: doRenderCustomComponent,
261
271
  setError: setError,
262
272
  setOnline: setOnline,
263
273
  clearMessages: clearMessages,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/webchat/hooks.js"],"names":["webchatInitialState","width","WEBCHAT","DEFAULTS","WIDTH","height","HEIGHT","messagesJSON","messagesComponents","replies","latestInput","typing","webview","webviewParams","session","user","lastRoutePath","handoff","theme","headerTitle","TITLE","brandColor","COLORS","BOTONIC_BLUE","brandImage","LOGO","triggerButtonImage","undefined","textPlaceholder","PLACEHOLDER","style","fontFamily","FONT_FAMILY","themeUpdates","error","online","devSettings","keepSessionOnReload","isWebchatOpen","isEmojiPickerOpen","isPersistentMenuOpen","isCoverComponentOpen","lastMessageUpdate","currentAttachment","jwt","useWebchat","webchatReducer","webchatState","webchatDispatch","addMessage","message","type","ADD_MESSAGE","payload","addMessageComponent","ADD_MESSAGE_COMPONENT","updateMessage","UPDATE_MESSAGE","updateReplies","UPDATE_REPLIES","updateLatestInput","input","UPDATE_LATEST_INPUT","updateTyping","UPDATE_TYPING","updateWebview","params","UPDATE_WEBVIEW","updateSession","UPDATE_SESSION","updateLastRoutePath","path","UPDATE_LAST_ROUTE_PATH","updateHandoff","UPDATE_HANDOFF","updateTheme","UPDATE_THEME","updateDevSettings","settings","UPDATE_DEV_SETTINGS","toggleWebchat","toggle","TOGGLE_WEBCHAT","toggleEmojiPicker","TOGGLE_EMOJI_PICKER","togglePersistentMenu","TOGGLE_PERSISTENT_MENU","toggleCoverComponent","TOGGLE_COVER_COMPONENT","setError","SET_ERROR","setOnline","SET_ONLINE","clearMessages","CLEAR_MESSAGES","updateLastMessageDate","date","UPDATE_LAST_MESSAGE_DATE","setCurrentAttachment","attachment","SET_CURRENT_ATTACHMENT","updateJwt","UPDATE_JWT","useTyping","host","delayTimeout","typingTimeout","nextMsg","filter","m","display","delay","setTimeout","totalDelay","e","clearTimeout","usePrevious","value","ref","current","useComponentVisible","initialIsVisible","onClickOutside","isComponentVisible","setIsComponentVisible","handleClickOutside","event","contains","target","document","addEventListener","removeEventListener","useComponentWillMount","func"],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useReducer, useRef, useState } from 'react'\n\nimport { COLORS, WEBCHAT } from '../constants'\nimport { scrollToBottom } from '../util/dom'\nimport {\n ADD_MESSAGE,\n ADD_MESSAGE_COMPONENT,\n CLEAR_MESSAGES,\n SET_CURRENT_ATTACHMENT,\n SET_ERROR,\n SET_ONLINE,\n TOGGLE_COVER_COMPONENT,\n TOGGLE_EMOJI_PICKER,\n TOGGLE_PERSISTENT_MENU,\n TOGGLE_WEBCHAT,\n UPDATE_DEV_SETTINGS,\n UPDATE_HANDOFF,\n UPDATE_JWT,\n UPDATE_LAST_MESSAGE_DATE,\n UPDATE_LAST_ROUTE_PATH,\n UPDATE_LATEST_INPUT,\n UPDATE_MESSAGE,\n UPDATE_REPLIES,\n UPDATE_SESSION,\n UPDATE_THEME,\n UPDATE_TYPING,\n UPDATE_WEBVIEW,\n} from './actions'\nimport { webchatReducer } from './webchat-reducer'\n\nexport const webchatInitialState = {\n width: WEBCHAT.DEFAULTS.WIDTH,\n height: WEBCHAT.DEFAULTS.HEIGHT,\n messagesJSON: [],\n messagesComponents: [],\n replies: [],\n latestInput: {},\n typing: false,\n webview: null,\n webviewParams: null,\n session: { user: null },\n lastRoutePath: null,\n handoff: false,\n theme: {\n headerTitle: WEBCHAT.DEFAULTS.TITLE,\n brandColor: COLORS.BOTONIC_BLUE,\n brandImage: WEBCHAT.DEFAULTS.LOGO,\n triggerButtonImage: undefined,\n textPlaceholder: WEBCHAT.DEFAULTS.PLACEHOLDER,\n style: {\n fontFamily: WEBCHAT.DEFAULTS.FONT_FAMILY,\n },\n },\n themeUpdates: {},\n error: {},\n online: true,\n devSettings: { keepSessionOnReload: false },\n isWebchatOpen: false,\n isEmojiPickerOpen: false,\n isPersistentMenuOpen: false,\n isCoverComponentOpen: false,\n lastMessageUpdate: undefined,\n currentAttachment: undefined,\n jwt: null,\n}\n\nexport function useWebchat() {\n const [webchatState, webchatDispatch] = useReducer(\n webchatReducer,\n webchatInitialState\n )\n\n const addMessage = message =>\n webchatDispatch({ type: ADD_MESSAGE, payload: message })\n const addMessageComponent = message =>\n webchatDispatch({ type: ADD_MESSAGE_COMPONENT, payload: message })\n const updateMessage = message =>\n webchatDispatch({ type: UPDATE_MESSAGE, payload: message })\n const updateReplies = replies =>\n webchatDispatch({ type: UPDATE_REPLIES, payload: replies })\n const updateLatestInput = input =>\n webchatDispatch({ type: UPDATE_LATEST_INPUT, payload: input })\n const updateTyping = typing =>\n webchatDispatch({ type: UPDATE_TYPING, payload: typing })\n const updateWebview = (webview, params) =>\n webchatDispatch({\n type: UPDATE_WEBVIEW,\n payload: { webview, webviewParams: params },\n })\n const updateSession = session => {\n webchatDispatch({\n type: UPDATE_SESSION,\n payload: session,\n })\n }\n\n const updateLastRoutePath = path =>\n webchatDispatch({\n type: UPDATE_LAST_ROUTE_PATH,\n payload: path,\n })\n const updateHandoff = handoff =>\n webchatDispatch({\n type: UPDATE_HANDOFF,\n payload: handoff,\n })\n const updateTheme = (theme, themeUpdates = undefined) => {\n const payload =\n themeUpdates !== undefined ? { theme, themeUpdates } : { theme }\n webchatDispatch({\n type: UPDATE_THEME,\n payload,\n })\n }\n const updateDevSettings = settings =>\n webchatDispatch({\n type: UPDATE_DEV_SETTINGS,\n payload: settings,\n })\n const toggleWebchat = toggle =>\n webchatDispatch({\n type: TOGGLE_WEBCHAT,\n payload: toggle,\n })\n const toggleEmojiPicker = toggle =>\n webchatDispatch({\n type: TOGGLE_EMOJI_PICKER,\n payload: toggle,\n })\n const togglePersistentMenu = toggle =>\n webchatDispatch({\n type: TOGGLE_PERSISTENT_MENU,\n payload: toggle,\n })\n const toggleCoverComponent = toggle =>\n webchatDispatch({\n type: TOGGLE_COVER_COMPONENT,\n payload: toggle,\n })\n const setError = error =>\n webchatDispatch({\n type: SET_ERROR,\n payload: error,\n })\n const setOnline = online =>\n webchatDispatch({\n type: SET_ONLINE,\n payload: online,\n })\n\n const clearMessages = () => {\n webchatDispatch({\n type: CLEAR_MESSAGES,\n })\n }\n const updateLastMessageDate = date => {\n webchatDispatch({\n type: UPDATE_LAST_MESSAGE_DATE,\n payload: date,\n })\n }\n const setCurrentAttachment = attachment => {\n webchatDispatch({\n type: SET_CURRENT_ATTACHMENT,\n payload: attachment,\n })\n }\n\n const updateJwt = jwt => {\n webchatDispatch({\n type: UPDATE_JWT,\n payload: jwt,\n })\n }\n\n return {\n webchatState,\n webchatDispatch,\n addMessage,\n addMessageComponent,\n updateMessage,\n updateReplies,\n updateLatestInput,\n updateTyping,\n updateWebview,\n updateSession,\n updateLastRoutePath,\n updateHandoff,\n updateTheme,\n updateDevSettings,\n toggleWebchat,\n toggleEmojiPicker,\n togglePersistentMenu,\n toggleCoverComponent,\n setError,\n setOnline,\n clearMessages,\n updateLastMessageDate,\n setCurrentAttachment,\n updateJwt,\n }\n}\n\nexport function useTyping({ webchatState, updateTyping, updateMessage, host }) {\n useEffect(() => {\n let delayTimeout, typingTimeout\n scrollToBottom({ host })\n try {\n const nextMsg = webchatState.messagesJSON.filter(m => !m.display)[0]\n if (nextMsg.delay && nextMsg.typing) {\n delayTimeout = setTimeout(\n () => updateTyping(true),\n nextMsg.delay * 1000\n )\n } else if (nextMsg.typing) updateTyping(true)\n const totalDelay = nextMsg.delay + nextMsg.typing\n if (totalDelay)\n typingTimeout = setTimeout(() => {\n updateMessage({ ...nextMsg, display: true })\n updateTyping(false)\n }, totalDelay * 1000)\n } catch (e) {}\n return () => {\n clearTimeout(delayTimeout)\n clearTimeout(typingTimeout)\n }\n }, [webchatState.messagesJSON, webchatState.typing])\n}\n\nexport function usePrevious(value) {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n })\n return ref.current\n}\n\nexport function useComponentVisible(initialIsVisible, onClickOutside) {\n const [isComponentVisible, setIsComponentVisible] = useState(initialIsVisible)\n const ref = useRef(null)\n const handleClickOutside = event => {\n if (ref.current && !ref.current.contains(event.target)) {\n setIsComponentVisible(false)\n onClickOutside()\n }\n }\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, false)\n return () => {\n document.removeEventListener('click', handleClickOutside, false)\n }\n })\n return { ref, isComponentVisible, setIsComponentVisible }\n}\n\nexport const useComponentWillMount = func => {\n useMemo(func, [])\n}\n"],"file":"hooks.js"}
1
+ {"version":3,"sources":["../../src/webchat/hooks.js"],"names":["webchatInitialState","width","WEBCHAT","DEFAULTS","WIDTH","height","HEIGHT","messagesJSON","messagesComponents","replies","latestInput","typing","webview","webviewParams","session","user","lastRoutePath","handoff","theme","headerTitle","TITLE","brandColor","COLORS","BOTONIC_BLUE","brandImage","LOGO","triggerButtonImage","undefined","textPlaceholder","PLACEHOLDER","style","fontFamily","FONT_FAMILY","themeUpdates","error","online","devSettings","keepSessionOnReload","isWebchatOpen","isEmojiPickerOpen","isPersistentMenuOpen","isCoverComponentOpen","isCustomComponentRendered","lastMessageUpdate","currentAttachment","jwt","useWebchat","webchatReducer","webchatState","webchatDispatch","addMessage","message","type","ADD_MESSAGE","payload","addMessageComponent","ADD_MESSAGE_COMPONENT","updateMessage","UPDATE_MESSAGE","updateReplies","UPDATE_REPLIES","updateLatestInput","input","UPDATE_LATEST_INPUT","updateTyping","UPDATE_TYPING","updateWebview","params","UPDATE_WEBVIEW","updateSession","UPDATE_SESSION","updateLastRoutePath","path","UPDATE_LAST_ROUTE_PATH","updateHandoff","UPDATE_HANDOFF","updateTheme","UPDATE_THEME","updateDevSettings","settings","UPDATE_DEV_SETTINGS","toggleWebchat","toggle","TOGGLE_WEBCHAT","toggleEmojiPicker","TOGGLE_EMOJI_PICKER","togglePersistentMenu","TOGGLE_PERSISTENT_MENU","toggleCoverComponent","TOGGLE_COVER_COMPONENT","doRenderCustomComponent","DO_RENDER_CUSTOM_COMPONENT","setError","SET_ERROR","setOnline","SET_ONLINE","clearMessages","CLEAR_MESSAGES","updateLastMessageDate","date","UPDATE_LAST_MESSAGE_DATE","setCurrentAttachment","attachment","SET_CURRENT_ATTACHMENT","updateJwt","UPDATE_JWT","useTyping","host","delayTimeout","typingTimeout","nextMsg","filter","m","display","delay","setTimeout","totalDelay","e","clearTimeout","usePrevious","value","ref","current","useComponentVisible","initialIsVisible","onClickOutside","isComponentVisible","setIsComponentVisible","handleClickOutside","event","contains","target","document","addEventListener","removeEventListener","useComponentWillMount","func"],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useReducer, useRef, useState } from 'react'\n\nimport { COLORS, WEBCHAT } from '../constants'\nimport { scrollToBottom } from '../util/dom'\nimport {\n ADD_MESSAGE,\n ADD_MESSAGE_COMPONENT,\n CLEAR_MESSAGES,\n DO_RENDER_CUSTOM_COMPONENT,\n SET_CURRENT_ATTACHMENT,\n SET_ERROR,\n SET_ONLINE,\n TOGGLE_COVER_COMPONENT,\n TOGGLE_EMOJI_PICKER,\n TOGGLE_PERSISTENT_MENU,\n TOGGLE_WEBCHAT,\n UPDATE_DEV_SETTINGS,\n UPDATE_HANDOFF,\n UPDATE_JWT,\n UPDATE_LAST_MESSAGE_DATE,\n UPDATE_LAST_ROUTE_PATH,\n UPDATE_LATEST_INPUT,\n UPDATE_MESSAGE,\n UPDATE_REPLIES,\n UPDATE_SESSION,\n UPDATE_THEME,\n UPDATE_TYPING,\n UPDATE_WEBVIEW,\n} from './actions'\nimport { webchatReducer } from './webchat-reducer'\n\nexport const webchatInitialState = {\n width: WEBCHAT.DEFAULTS.WIDTH,\n height: WEBCHAT.DEFAULTS.HEIGHT,\n messagesJSON: [],\n messagesComponents: [],\n replies: [],\n latestInput: {},\n typing: false,\n webview: null,\n webviewParams: null,\n session: { user: null },\n lastRoutePath: null,\n handoff: false,\n theme: {\n headerTitle: WEBCHAT.DEFAULTS.TITLE,\n brandColor: COLORS.BOTONIC_BLUE,\n brandImage: WEBCHAT.DEFAULTS.LOGO,\n triggerButtonImage: undefined,\n textPlaceholder: WEBCHAT.DEFAULTS.PLACEHOLDER,\n style: {\n fontFamily: WEBCHAT.DEFAULTS.FONT_FAMILY,\n },\n },\n themeUpdates: {},\n error: {},\n online: true,\n devSettings: { keepSessionOnReload: false },\n isWebchatOpen: false,\n isEmojiPickerOpen: false,\n isPersistentMenuOpen: false,\n isCoverComponentOpen: false,\n isCustomComponentRendered: false,\n lastMessageUpdate: undefined,\n currentAttachment: undefined,\n jwt: null,\n}\n\nexport function useWebchat() {\n const [webchatState, webchatDispatch] = useReducer(\n webchatReducer,\n webchatInitialState\n )\n\n const addMessage = message =>\n webchatDispatch({ type: ADD_MESSAGE, payload: message })\n const addMessageComponent = message =>\n webchatDispatch({ type: ADD_MESSAGE_COMPONENT, payload: message })\n const updateMessage = message =>\n webchatDispatch({ type: UPDATE_MESSAGE, payload: message })\n const updateReplies = replies =>\n webchatDispatch({ type: UPDATE_REPLIES, payload: replies })\n const updateLatestInput = input =>\n webchatDispatch({ type: UPDATE_LATEST_INPUT, payload: input })\n const updateTyping = typing =>\n webchatDispatch({ type: UPDATE_TYPING, payload: typing })\n const updateWebview = (webview, params) =>\n webchatDispatch({\n type: UPDATE_WEBVIEW,\n payload: { webview, webviewParams: params },\n })\n const updateSession = session => {\n webchatDispatch({\n type: UPDATE_SESSION,\n payload: session,\n })\n }\n\n const updateLastRoutePath = path =>\n webchatDispatch({\n type: UPDATE_LAST_ROUTE_PATH,\n payload: path,\n })\n const updateHandoff = handoff =>\n webchatDispatch({\n type: UPDATE_HANDOFF,\n payload: handoff,\n })\n const updateTheme = (theme, themeUpdates = undefined) => {\n const payload =\n themeUpdates !== undefined ? { theme, themeUpdates } : { theme }\n webchatDispatch({\n type: UPDATE_THEME,\n payload,\n })\n }\n const updateDevSettings = settings =>\n webchatDispatch({\n type: UPDATE_DEV_SETTINGS,\n payload: settings,\n })\n const toggleWebchat = toggle =>\n webchatDispatch({\n type: TOGGLE_WEBCHAT,\n payload: toggle,\n })\n const toggleEmojiPicker = toggle =>\n webchatDispatch({\n type: TOGGLE_EMOJI_PICKER,\n payload: toggle,\n })\n const togglePersistentMenu = toggle =>\n webchatDispatch({\n type: TOGGLE_PERSISTENT_MENU,\n payload: toggle,\n })\n const toggleCoverComponent = toggle =>\n webchatDispatch({\n type: TOGGLE_COVER_COMPONENT,\n payload: toggle,\n })\n const doRenderCustomComponent = toggle =>\n webchatDispatch({\n type: DO_RENDER_CUSTOM_COMPONENT,\n payload: toggle,\n })\n const setError = error =>\n webchatDispatch({\n type: SET_ERROR,\n payload: error,\n })\n const setOnline = online =>\n webchatDispatch({\n type: SET_ONLINE,\n payload: online,\n })\n\n const clearMessages = () => {\n webchatDispatch({\n type: CLEAR_MESSAGES,\n })\n }\n const updateLastMessageDate = date => {\n webchatDispatch({\n type: UPDATE_LAST_MESSAGE_DATE,\n payload: date,\n })\n }\n const setCurrentAttachment = attachment => {\n webchatDispatch({\n type: SET_CURRENT_ATTACHMENT,\n payload: attachment,\n })\n }\n\n const updateJwt = jwt => {\n webchatDispatch({\n type: UPDATE_JWT,\n payload: jwt,\n })\n }\n\n return {\n webchatState,\n webchatDispatch,\n addMessage,\n addMessageComponent,\n updateMessage,\n updateReplies,\n updateLatestInput,\n updateTyping,\n updateWebview,\n updateSession,\n updateLastRoutePath,\n updateHandoff,\n updateTheme,\n updateDevSettings,\n toggleWebchat,\n toggleEmojiPicker,\n togglePersistentMenu,\n toggleCoverComponent,\n doRenderCustomComponent,\n setError,\n setOnline,\n clearMessages,\n updateLastMessageDate,\n setCurrentAttachment,\n updateJwt,\n }\n}\n\nexport function useTyping({ webchatState, updateTyping, updateMessage, host }) {\n useEffect(() => {\n let delayTimeout, typingTimeout\n scrollToBottom({ host })\n try {\n const nextMsg = webchatState.messagesJSON.filter(m => !m.display)[0]\n if (nextMsg.delay && nextMsg.typing) {\n delayTimeout = setTimeout(\n () => updateTyping(true),\n nextMsg.delay * 1000\n )\n } else if (nextMsg.typing) updateTyping(true)\n const totalDelay = nextMsg.delay + nextMsg.typing\n if (totalDelay)\n typingTimeout = setTimeout(() => {\n updateMessage({ ...nextMsg, display: true })\n updateTyping(false)\n }, totalDelay * 1000)\n } catch (e) {}\n return () => {\n clearTimeout(delayTimeout)\n clearTimeout(typingTimeout)\n }\n }, [webchatState.messagesJSON, webchatState.typing])\n}\n\nexport function usePrevious(value) {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n })\n return ref.current\n}\n\nexport function useComponentVisible(initialIsVisible, onClickOutside) {\n const [isComponentVisible, setIsComponentVisible] = useState(initialIsVisible)\n const ref = useRef(null)\n const handleClickOutside = event => {\n if (ref.current && !ref.current.contains(event.target)) {\n setIsComponentVisible(false)\n onClickOutside()\n }\n }\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, false)\n return () => {\n document.removeEventListener('click', handleClickOutside, false)\n }\n })\n return { ref, isComponentVisible, setIsComponentVisible }\n}\n\nexport const useComponentWillMount = func => {\n useMemo(func, [])\n}\n"],"file":"hooks.js"}
@@ -3,7 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getBotonicApp = getBotonicApp;
7
6
  Object.defineProperty(exports, "Webchat", {
8
7
  enumerable: true,
9
8
  get: function get() {
@@ -16,6 +15,7 @@ Object.defineProperty(exports, "WebchatDev", {
16
15
  return _webchatDev.WebchatDev;
17
16
  }
18
17
  });
18
+ exports.getBotonicApp = getBotonicApp;
19
19
 
20
20
  var _webchat = require("./webchat");
21
21
 
@@ -17,6 +17,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
17
17
 
18
18
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
19
19
 
20
+ // eslint-disable-next-line complexity
20
21
  function webchatReducer(state, action) {
21
22
  switch (action.type) {
22
23
  case _actions.UPDATE_WEBVIEW:
@@ -60,6 +61,11 @@ function webchatReducer(state, action) {
60
61
  isCoverComponentOpen: action.payload
61
62
  });
62
63
 
64
+ case _actions.DO_RENDER_CUSTOM_COMPONENT:
65
+ return _objectSpread(_objectSpread({}, state), {}, {
66
+ isCustomComponentRendered: action.payload
67
+ });
68
+
63
69
  case _actions.SET_ERROR:
64
70
  return _objectSpread(_objectSpread({}, state), {}, {
65
71
  error: action.payload || {}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/webchat/webchat-reducer.js"],"names":["webchatReducer","state","action","type","UPDATE_WEBVIEW","payload","UPDATE_SESSION","session","UPDATE_TYPING","typing","UPDATE_THEME","UPDATE_HANDOFF","handoff","TOGGLE_WEBCHAT","isWebchatOpen","TOGGLE_EMOJI_PICKER","isEmojiPickerOpen","TOGGLE_PERSISTENT_MENU","isPersistentMenuOpen","TOGGLE_COVER_COMPONENT","isCoverComponentOpen","SET_ERROR","error","SET_ONLINE","online","UPDATE_DEV_SETTINGS","devSettings","UPDATE_LATEST_INPUT","latestInput","UPDATE_LAST_ROUTE_PATH","lastRoutePath","SET_CURRENT_ATTACHMENT","currentAttachment","UPDATE_JWT","jwt"],"mappings":";;;;;;;;;;;AAAA;;AAkBA;;;;;;AAEO,SAASA,cAAT,CAAwBC,KAAxB,EAA+BC,MAA/B,EAAuC;AAC5C,UAAQA,MAAM,CAACC,IAAf;AACE,SAAKC,uBAAL;AACE,6CAAYH,KAAZ,GAAsBC,MAAM,CAACG,OAA7B;;AACF,SAAKC,uBAAL;AACE,6CAAYL,KAAZ;AAAmBM,QAAAA,OAAO,oBAAOL,MAAM,CAACG,OAAd;AAA1B;;AACF,SAAKG,sBAAL;AACE,6CAAYP,KAAZ;AAAmBQ,QAAAA,MAAM,EAAEP,MAAM,CAACG;AAAlC;;AACF,SAAKK,qBAAL;AACE,6CACKT,KADL,GAEKC,MAAM,CAACG,OAFZ;;AAIF,SAAKM,uBAAL;AACE,6CAAYV,KAAZ;AAAmBW,QAAAA,OAAO,EAAEV,MAAM,CAACG;AAAnC;;AACF,SAAKQ,uBAAL;AACE,6CAAYZ,KAAZ;AAAmBa,QAAAA,aAAa,EAAEZ,MAAM,CAACG;AAAzC;;AACF,SAAKU,4BAAL;AACE,6CAAYd,KAAZ;AAAmBe,QAAAA,iBAAiB,EAAEd,MAAM,CAACG;AAA7C;;AACF,SAAKY,+BAAL;AACE,6CAAYhB,KAAZ;AAAmBiB,QAAAA,oBAAoB,EAAEhB,MAAM,CAACG;AAAhD;;AACF,SAAKc,+BAAL;AACE,6CAAYlB,KAAZ;AAAmBmB,QAAAA,oBAAoB,EAAElB,MAAM,CAACG;AAAhD;;AACF,SAAKgB,kBAAL;AACE,6CAAYpB,KAAZ;AAAmBqB,QAAAA,KAAK,EAAEpB,MAAM,CAACG,OAAP,IAAkB;AAA5C;;AACF,SAAKkB,mBAAL;AACE,6CAAYtB,KAAZ;AAAmBuB,QAAAA,MAAM,EAAEtB,MAAM,CAACG;AAAlC;;AACF,SAAKoB,4BAAL;AACE,6CAAYxB,KAAZ;AAAmByB,QAAAA,WAAW,oBAAOxB,MAAM,CAACG,OAAd;AAA9B;;AACF,SAAKsB,4BAAL;AACE,6CAAY1B,KAAZ;AAAmB2B,QAAAA,WAAW,EAAE1B,MAAM,CAACG;AAAvC;;AACF,SAAKwB,+BAAL;AACE,6CAAY5B,KAAZ;AAAmB6B,QAAAA,aAAa,EAAE5B,MAAM,CAACG;AAAzC;;AACF,SAAK0B,+BAAL;AACE,6CAAY9B,KAAZ;AAAmB+B,QAAAA,iBAAiB,EAAE9B,MAAM,CAACG;AAA7C;;AACF,SAAK4B,mBAAL;AACE,6CAAYhC,KAAZ;AAAmBiC,QAAAA,GAAG,EAAEhC,MAAM,CAACG;AAA/B;;AACF;AACE,aAAO,sCAAgBJ,KAAhB,EAAuBC,MAAvB,CAAP;AArCJ;AAuCD","sourcesContent":["import {\n SET_CURRENT_ATTACHMENT,\n SET_ERROR,\n SET_ONLINE,\n TOGGLE_COVER_COMPONENT,\n TOGGLE_EMOJI_PICKER,\n TOGGLE_PERSISTENT_MENU,\n TOGGLE_WEBCHAT,\n UPDATE_DEV_SETTINGS,\n UPDATE_HANDOFF,\n UPDATE_JWT,\n UPDATE_LAST_ROUTE_PATH,\n UPDATE_LATEST_INPUT,\n UPDATE_SESSION,\n UPDATE_THEME,\n UPDATE_TYPING,\n UPDATE_WEBVIEW,\n} from './actions'\nimport { messagesReducer } from './messages-reducer'\n\nexport function webchatReducer(state, action) {\n switch (action.type) {\n case UPDATE_WEBVIEW:\n return { ...state, ...action.payload }\n case UPDATE_SESSION:\n return { ...state, session: { ...action.payload } }\n case UPDATE_TYPING:\n return { ...state, typing: action.payload }\n case UPDATE_THEME:\n return {\n ...state,\n ...action.payload,\n }\n case UPDATE_HANDOFF:\n return { ...state, handoff: action.payload }\n case TOGGLE_WEBCHAT:\n return { ...state, isWebchatOpen: action.payload }\n case TOGGLE_EMOJI_PICKER:\n return { ...state, isEmojiPickerOpen: action.payload }\n case TOGGLE_PERSISTENT_MENU:\n return { ...state, isPersistentMenuOpen: action.payload }\n case TOGGLE_COVER_COMPONENT:\n return { ...state, isCoverComponentOpen: action.payload }\n case SET_ERROR:\n return { ...state, error: action.payload || {} }\n case SET_ONLINE:\n return { ...state, online: action.payload }\n case UPDATE_DEV_SETTINGS:\n return { ...state, devSettings: { ...action.payload } }\n case UPDATE_LATEST_INPUT:\n return { ...state, latestInput: action.payload }\n case UPDATE_LAST_ROUTE_PATH:\n return { ...state, lastRoutePath: action.payload }\n case SET_CURRENT_ATTACHMENT:\n return { ...state, currentAttachment: action.payload }\n case UPDATE_JWT:\n return { ...state, jwt: action.payload }\n default:\n return messagesReducer(state, action)\n }\n}\n"],"file":"webchat-reducer.js"}
1
+ {"version":3,"sources":["../../src/webchat/webchat-reducer.js"],"names":["webchatReducer","state","action","type","UPDATE_WEBVIEW","payload","UPDATE_SESSION","session","UPDATE_TYPING","typing","UPDATE_THEME","UPDATE_HANDOFF","handoff","TOGGLE_WEBCHAT","isWebchatOpen","TOGGLE_EMOJI_PICKER","isEmojiPickerOpen","TOGGLE_PERSISTENT_MENU","isPersistentMenuOpen","TOGGLE_COVER_COMPONENT","isCoverComponentOpen","DO_RENDER_CUSTOM_COMPONENT","isCustomComponentRendered","SET_ERROR","error","SET_ONLINE","online","UPDATE_DEV_SETTINGS","devSettings","UPDATE_LATEST_INPUT","latestInput","UPDATE_LAST_ROUTE_PATH","lastRoutePath","SET_CURRENT_ATTACHMENT","currentAttachment","UPDATE_JWT","jwt"],"mappings":";;;;;;;;;;;AAAA;;AAmBA;;;;;;AAEA;AACO,SAASA,cAAT,CAAwBC,KAAxB,EAA+BC,MAA/B,EAAuC;AAC5C,UAAQA,MAAM,CAACC,IAAf;AACE,SAAKC,uBAAL;AACE,6CAAYH,KAAZ,GAAsBC,MAAM,CAACG,OAA7B;;AACF,SAAKC,uBAAL;AACE,6CAAYL,KAAZ;AAAmBM,QAAAA,OAAO,oBAAOL,MAAM,CAACG,OAAd;AAA1B;;AACF,SAAKG,sBAAL;AACE,6CAAYP,KAAZ;AAAmBQ,QAAAA,MAAM,EAAEP,MAAM,CAACG;AAAlC;;AACF,SAAKK,qBAAL;AACE,6CACKT,KADL,GAEKC,MAAM,CAACG,OAFZ;;AAIF,SAAKM,uBAAL;AACE,6CAAYV,KAAZ;AAAmBW,QAAAA,OAAO,EAAEV,MAAM,CAACG;AAAnC;;AACF,SAAKQ,uBAAL;AACE,6CAAYZ,KAAZ;AAAmBa,QAAAA,aAAa,EAAEZ,MAAM,CAACG;AAAzC;;AACF,SAAKU,4BAAL;AACE,6CAAYd,KAAZ;AAAmBe,QAAAA,iBAAiB,EAAEd,MAAM,CAACG;AAA7C;;AACF,SAAKY,+BAAL;AACE,6CAAYhB,KAAZ;AAAmBiB,QAAAA,oBAAoB,EAAEhB,MAAM,CAACG;AAAhD;;AACF,SAAKc,+BAAL;AACE,6CAAYlB,KAAZ;AAAmBmB,QAAAA,oBAAoB,EAAElB,MAAM,CAACG;AAAhD;;AACF,SAAKgB,mCAAL;AACE,6CAAYpB,KAAZ;AAAmBqB,QAAAA,yBAAyB,EAAEpB,MAAM,CAACG;AAArD;;AACF,SAAKkB,kBAAL;AACE,6CAAYtB,KAAZ;AAAmBuB,QAAAA,KAAK,EAAEtB,MAAM,CAACG,OAAP,IAAkB;AAA5C;;AACF,SAAKoB,mBAAL;AACE,6CAAYxB,KAAZ;AAAmByB,QAAAA,MAAM,EAAExB,MAAM,CAACG;AAAlC;;AACF,SAAKsB,4BAAL;AACE,6CAAY1B,KAAZ;AAAmB2B,QAAAA,WAAW,oBAAO1B,MAAM,CAACG,OAAd;AAA9B;;AACF,SAAKwB,4BAAL;AACE,6CAAY5B,KAAZ;AAAmB6B,QAAAA,WAAW,EAAE5B,MAAM,CAACG;AAAvC;;AACF,SAAK0B,+BAAL;AACE,6CAAY9B,KAAZ;AAAmB+B,QAAAA,aAAa,EAAE9B,MAAM,CAACG;AAAzC;;AACF,SAAK4B,+BAAL;AACE,6CAAYhC,KAAZ;AAAmBiC,QAAAA,iBAAiB,EAAEhC,MAAM,CAACG;AAA7C;;AACF,SAAK8B,mBAAL;AACE,6CAAYlC,KAAZ;AAAmBmC,QAAAA,GAAG,EAAElC,MAAM,CAACG;AAA/B;;AACF;AACE,aAAO,sCAAgBJ,KAAhB,EAAuBC,MAAvB,CAAP;AAvCJ;AAyCD","sourcesContent":["import {\n DO_RENDER_CUSTOM_COMPONENT,\n SET_CURRENT_ATTACHMENT,\n SET_ERROR,\n SET_ONLINE,\n TOGGLE_COVER_COMPONENT,\n TOGGLE_EMOJI_PICKER,\n TOGGLE_PERSISTENT_MENU,\n TOGGLE_WEBCHAT,\n UPDATE_DEV_SETTINGS,\n UPDATE_HANDOFF,\n UPDATE_JWT,\n UPDATE_LAST_ROUTE_PATH,\n UPDATE_LATEST_INPUT,\n UPDATE_SESSION,\n UPDATE_THEME,\n UPDATE_TYPING,\n UPDATE_WEBVIEW,\n} from './actions'\nimport { messagesReducer } from './messages-reducer'\n\n// eslint-disable-next-line complexity\nexport function webchatReducer(state, action) {\n switch (action.type) {\n case UPDATE_WEBVIEW:\n return { ...state, ...action.payload }\n case UPDATE_SESSION:\n return { ...state, session: { ...action.payload } }\n case UPDATE_TYPING:\n return { ...state, typing: action.payload }\n case UPDATE_THEME:\n return {\n ...state,\n ...action.payload,\n }\n case UPDATE_HANDOFF:\n return { ...state, handoff: action.payload }\n case TOGGLE_WEBCHAT:\n return { ...state, isWebchatOpen: action.payload }\n case TOGGLE_EMOJI_PICKER:\n return { ...state, isEmojiPickerOpen: action.payload }\n case TOGGLE_PERSISTENT_MENU:\n return { ...state, isPersistentMenuOpen: action.payload }\n case TOGGLE_COVER_COMPONENT:\n return { ...state, isCoverComponentOpen: action.payload }\n case DO_RENDER_CUSTOM_COMPONENT:\n return { ...state, isCustomComponentRendered: action.payload }\n case SET_ERROR:\n return { ...state, error: action.payload || {} }\n case SET_ONLINE:\n return { ...state, online: action.payload }\n case UPDATE_DEV_SETTINGS:\n return { ...state, devSettings: { ...action.payload } }\n case UPDATE_LATEST_INPUT:\n return { ...state, latestInput: action.payload }\n case UPDATE_LAST_ROUTE_PATH:\n return { ...state, lastRoutePath: action.payload }\n case SET_CURRENT_ATTACHMENT:\n return { ...state, currentAttachment: action.payload }\n case UPDATE_JWT:\n return { ...state, jwt: action.payload }\n default:\n return messagesReducer(state, action)\n }\n}\n"],"file":"webchat-reducer.js"}
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.Webchat = exports.getParsedAction = void 0;
10
+ exports.getParsedAction = exports.Webchat = void 0;
11
11
 
12
12
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
13
 
@@ -151,6 +151,7 @@ var Webchat = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
151
151
  toggleEmojiPicker = _ref.toggleEmojiPicker,
152
152
  togglePersistentMenu = _ref.togglePersistentMenu,
153
153
  _toggleCoverComponent = _ref.toggleCoverComponent,
154
+ doRenderCustomComponent = _ref.doRenderCustomComponent,
154
155
  setError = _ref.setError,
155
156
  setOnline = _ref.setOnline,
156
157
  _clearMessages = _ref.clearMessages,
@@ -174,6 +175,12 @@ var Webchat = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
174
175
  initialDevSettings = props.initialDevSettings,
175
176
  onStateChange = props.onStateChange;
176
177
  var getThemeProperty = (0, _webchat._getThemeProperty)(theme);
178
+
179
+ var _useState = (0, _react.useState)(null),
180
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
181
+ customComponent = _useState2[0],
182
+ setCustomComponent = _useState2[1];
183
+
177
184
  var storage = props.storage === undefined ? localStorage : props.storage;
178
185
  var storageKey = typeof props.storageKey === 'function' ? props.storageKey() : props.storageKey;
179
186
 
@@ -183,6 +190,7 @@ var Webchat = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
183
190
  saveState = _useStorageState2[1];
184
191
 
185
192
  var host = props.host || document.body;
193
+ var deviceAdapter = new _deviceAdapter.DeviceAdapter();
186
194
 
187
195
  var saveWebchatState = function saveWebchatState(webchatState) {
188
196
  storage && saveState(JSON.parse((0, _regexs.stringifyWithRegexs)({
@@ -195,8 +203,6 @@ var Webchat = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
195
203
  })));
196
204
  };
197
205
 
198
- var deviceAdapter = new _deviceAdapter.DeviceAdapter();
199
-
200
206
  var handleAttachment = function handleAttachment(event) {
201
207
  if (!(0, _messageUtils.isAllowedSize)(event.target.files[0].size)) {
202
208
  throw new Error("The file is too large. A maximum of ".concat(_constants.MAX_ALLOWED_SIZE_MB, "MB is allowed."));
@@ -626,6 +632,13 @@ var Webchat = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
626
632
  closeCoverComponent: function closeCoverComponent() {
627
633
  return _toggleCoverComponent(false);
628
634
  },
635
+ renderCustomComponent: function renderCustomComponent(_customComponent) {
636
+ setCustomComponent(_customComponent);
637
+ doRenderCustomComponent(true);
638
+ },
639
+ unmountCustomComponent: function unmountCustomComponent() {
640
+ return doRenderCustomComponent(false);
641
+ },
629
642
  toggleCoverComponent: function toggleCoverComponent() {
630
643
  return _toggleCoverComponent(!webchatState.isCoverComponentOpen);
631
644
  },
@@ -995,6 +1008,10 @@ var Webchat = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
995
1008
  }), component);
996
1009
  };
997
1010
 
1011
+ var _renderCustomComponent = function _renderCustomComponent() {
1012
+ if (!customComponent) return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null);else return customComponent;
1013
+ };
1014
+
998
1015
  var WebchatComponent = /*#__PURE__*/_react["default"].createElement(_contexts.WebchatContext.Provider, {
999
1016
  value: {
1000
1017
  sendText: sendText,
@@ -1032,7 +1049,7 @@ var Webchat = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
1032
1049
  }
1033
1050
  }), webchatState.error.message && /*#__PURE__*/_react["default"].createElement(ErrorMessageContainer, null, /*#__PURE__*/_react["default"].createElement(ErrorMessage, null, webchatState.error.message)), webchatMessageList(), webchatState.replies && Object.keys(webchatState.replies).length > 0 && webchatReplies(), webchatState.isPersistentMenuOpen && /*#__PURE__*/_react["default"].createElement(DarkenBackground, {
1034
1051
  component: persistentMenu()
1035
- }), !webchatState.handoff && userInputArea(), webchatState.webview && webchatWebview(), webchatState.isCoverComponentOpen && coverComponent()));
1052
+ }), !webchatState.handoff && userInputArea(), webchatState.webview && webchatWebview(), webchatState.isCoverComponentOpen && coverComponent(), webchatState.isCustomComponentRendered && customComponent && _renderCustomComponent()));
1036
1053
 
1037
1054
  return props.shadowDOM ? /*#__PURE__*/_react["default"].createElement(_styledComponents.StyleSheetManager, {
1038
1055
  target: host