@botonic/react 0.20.1-alpha.1 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/lib/components/image.js +6 -52
  2. package/lib/components/image.js.map +1 -1
  3. package/lib/constants.js +200 -0
  4. package/lib/constants.js.map +1 -0
  5. package/lib/contexts.js +57 -0
  6. package/lib/contexts.js.map +1 -0
  7. package/lib/dev-app.js +241 -0
  8. package/lib/dev-app.js.map +1 -0
  9. package/lib/index.d.ts +239 -0
  10. package/lib/index.js +131 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/message-utils.js +149 -0
  13. package/lib/message-utils.js.map +1 -0
  14. package/lib/msg-to-botonic.js +199 -0
  15. package/lib/msg-to-botonic.js.map +1 -0
  16. package/lib/node-app.js +97 -0
  17. package/lib/node-app.js.map +1 -0
  18. package/lib/react-bot.js +167 -0
  19. package/lib/react-bot.js.map +1 -0
  20. package/lib/util/dom.js +84 -0
  21. package/lib/util/dom.js.map +1 -0
  22. package/lib/util/environment.js +42 -0
  23. package/lib/util/environment.js.map +1 -0
  24. package/lib/util/error-boundary.js +105 -0
  25. package/lib/util/error-boundary.js.map +1 -0
  26. package/lib/util/index.d.ts +9 -0
  27. package/lib/util/index.js +2 -0
  28. package/lib/util/index.js.map +1 -0
  29. package/lib/util/logs.js +28 -0
  30. package/lib/util/logs.js.map +1 -0
  31. package/lib/util/objects.js +60 -0
  32. package/lib/util/objects.js.map +1 -0
  33. package/lib/util/react.js +75 -0
  34. package/lib/util/react.js.map +1 -0
  35. package/lib/util/regexs.js +31 -0
  36. package/lib/util/regexs.js.map +1 -0
  37. package/lib/util/webchat.js +92 -0
  38. package/lib/util/webchat.js.map +1 -0
  39. package/lib/webchat/actions.js +51 -0
  40. package/lib/webchat/actions.js.map +1 -0
  41. package/lib/webchat/components/attachment.js +43 -0
  42. package/lib/webchat/components/attachment.js.map +1 -0
  43. package/lib/webchat/components/common.js +33 -0
  44. package/lib/webchat/components/common.js.map +1 -0
  45. package/lib/webchat/components/emoji-picker.js +58 -0
  46. package/lib/webchat/components/emoji-picker.js.map +1 -0
  47. package/lib/webchat/components/persistent-menu.js +96 -0
  48. package/lib/webchat/components/persistent-menu.js.map +1 -0
  49. package/lib/webchat/components/send-button.js +27 -0
  50. package/lib/webchat/components/send-button.js.map +1 -0
  51. package/lib/webchat/components/styled-scrollbar.js +55 -0
  52. package/lib/webchat/components/styled-scrollbar.js.map +1 -0
  53. package/lib/webchat/components/styled-scrollbar.scss +12 -0
  54. package/lib/webchat/components/typing-indicator.js +27 -0
  55. package/lib/webchat/components/typing-indicator.js.map +1 -0
  56. package/lib/webchat/components/typing-indicator.scss +38 -0
  57. package/lib/webchat/devices/device-adapter.js +82 -0
  58. package/lib/webchat/devices/device-adapter.js.map +1 -0
  59. package/lib/webchat/devices/index.js +32 -0
  60. package/lib/webchat/devices/index.js.map +1 -0
  61. package/lib/webchat/devices/scrollbar-controller.js +152 -0
  62. package/lib/webchat/devices/scrollbar-controller.js.map +1 -0
  63. package/lib/webchat/devices/webchat-resizer.js +76 -0
  64. package/lib/webchat/devices/webchat-resizer.js.map +1 -0
  65. package/lib/webchat/header.js +116 -0
  66. package/lib/webchat/header.js.map +1 -0
  67. package/lib/webchat/hooks.js +350 -0
  68. package/lib/webchat/hooks.js.map +1 -0
  69. package/lib/webchat/index.d.ts +62 -0
  70. package/lib/webchat/index.js +32 -0
  71. package/lib/webchat/index.js.map +1 -0
  72. package/lib/webchat/message-list.js +88 -0
  73. package/lib/webchat/message-list.js.map +1 -0
  74. package/lib/webchat/messages-reducer.js +93 -0
  75. package/lib/webchat/messages-reducer.js.map +1 -0
  76. package/lib/webchat/replies.js +78 -0
  77. package/lib/webchat/replies.js.map +1 -0
  78. package/lib/webchat/session-view.js +106 -0
  79. package/lib/webchat/session-view.js.map +1 -0
  80. package/lib/webchat/use-storage-state-hook.js +29 -0
  81. package/lib/webchat/use-storage-state-hook.js.map +1 -0
  82. package/lib/webchat/webchat-dev.js +109 -0
  83. package/lib/webchat/webchat-dev.js.map +1 -0
  84. package/lib/webchat/webchat-reducer.js +102 -0
  85. package/lib/webchat/webchat-reducer.js.map +1 -0
  86. package/lib/webchat/webchat.js +1041 -0
  87. package/lib/webchat/webchat.js.map +1 -0
  88. package/lib/webchat/webview.js +122 -0
  89. package/lib/webchat/webview.js.map +1 -0
  90. package/lib/webchat-app.js +643 -0
  91. package/lib/webchat-app.js.map +1 -0
  92. package/lib/webchat.template.html +37 -0
  93. package/lib/webview.js +214 -0
  94. package/lib/webview.js.map +1 -0
  95. package/lib/webview.template.html +39 -0
  96. package/package.json +2 -2
  97. package/src/components/image.jsx +3 -37
  98. package/src/index.d.ts +0 -2
  99. package/src/index.js +0 -1
  100. package/src/webchat/actions.jsx +0 -1
  101. package/src/webchat/hooks.js +0 -8
  102. package/src/webchat/webchat-reducer.js +0 -4
  103. package/src/webchat/webchat.jsx +0 -18
  104. package/src/webchat-app.jsx +0 -8
  105. package/src/webchat/components/portal-modal/backdrop.jsx +0 -38
  106. package/src/webchat/components/portal-modal/constants.js +0 -7
  107. package/src/webchat/components/portal-modal/content.jsx +0 -10
  108. package/src/webchat/components/portal-modal/index.js +0 -5
  109. package/src/webchat/components/portal-modal/portal-modal-component.jsx +0 -72
  110. package/src/webchat/components/portal-modal/portal.jsx +0 -21
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/webchat-app.jsx"],"names":["WebchatApp","theme","persistentMenu","coverComponent","blockInputs","enableEmojiPicker","enableAttachments","enableUserInput","enableAnimations","hostId","shadowDOM","defaultDelay","defaultTyping","storage","storageKey","onInit","onOpen","onClose","onMessage","onConnectionChange","appId","visibility","server","Boolean","console","warn","WEBCHAT","DEFAULTS","HOST_ID","webchatRef","host","id","document","getElementById","createElement","body","firstChild","insertBefore","appendChild","attachShadow","mode","node","shadowRoot","args","user","input","from","SENDERS","message","hubtypeService","postMessage","onConnectionRegained","session","messagesJSON","lastMessage","length","lastMessageId","lastMessageUpdateDate","getLastMessageUpdate","HubtypeService","onEvent","event","onServiceEvent","unsentInputs","current","getMessages","filter","msg","ack","unsentInput","action","online","setOnline","updateMessageInfo","type","updateWebchatSettings","data","setTyping","bot","addBotMessage","updateUser","addBotResponse","response","customTypes","customMessageTypes","text","INPUT","TEXT","addUserMessage","payload","POSTBACK","typing","openWebchat","closeWebchat","toggleWebchat","openCoverComponent","closeCoverComponent","toggleCoverComponent","clearMessages","resolveWebchatVisibility","msgId","messageInfo","settings","optionsAtRuntime","webchatOptions","createRootElement","onInitWebchat","onOpenWebchat","onCloseWebchat","onUserInput","webchatState","onStateChange","getWebchatVisibility","status","isOnline","undefined","isWebchatVisible","dest","isVisible","getComponent","getReactMountNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;IAEaA,U;AACX,4BAuBG;AAAA,0BAtBDC,KAsBC;AAAA,QAtBDA,KAsBC,2BAtBO,EAsBP;AAAA,QArBDC,cAqBC,QArBDA,cAqBC;AAAA,QApBDC,cAoBC,QApBDA,cAoBC;AAAA,QAnBDC,WAmBC,QAnBDA,WAmBC;AAAA,QAlBDC,iBAkBC,QAlBDA,iBAkBC;AAAA,QAjBDC,iBAiBC,QAjBDA,iBAiBC;AAAA,QAhBDC,eAgBC,QAhBDA,eAgBC;AAAA,QAfDC,gBAeC,QAfDA,gBAeC;AAAA,QAdDC,MAcC,QAdDA,MAcC;AAAA,QAbDC,SAaC,QAbDA,SAaC;AAAA,QAZDC,YAYC,QAZDA,YAYC;AAAA,QAXDC,aAWC,QAXDA,aAWC;AAAA,QAVDC,OAUC,QAVDA,OAUC;AAAA,QATDC,UASC,QATDA,UASC;AAAA,QARDC,MAQC,QARDA,MAQC;AAAA,QAPDC,MAOC,QAPDA,MAOC;AAAA,QANDC,OAMC,QANDA,OAMC;AAAA,QALDC,SAKC,QALDA,SAKC;AAAA,QAJDC,kBAIC,QAJDA,kBAIC;AAAA,QAHDC,KAGC,QAHDA,KAGC;AAAA,QAFDC,UAEC,QAFDA,UAEC;AAAA,QADDC,MACC,QADDA,MACC;AAAA;AACD,SAAKrB,KAAL,GAAaA,KAAb;AACA,SAAKC,cAAL,GAAsBA,cAAtB;AACA,SAAKC,cAAL,GAAsBA,cAAtB;AACA,SAAKC,WAAL,GAAmBA,WAAnB;AACA,SAAKC,iBAAL,GAAyBA,iBAAzB;AACA,SAAKC,iBAAL,GAAyBA,iBAAzB;AACA,SAAKC,eAAL,GAAuBA,eAAvB;AACA,SAAKC,gBAAL,GAAwBA,gBAAxB;AACA,SAAKE,SAAL,GAAiBa,OAAO,CACtB,OAAOb,SAAP,KAAqB,UAArB,GAAkCA,SAAS,EAA3C,GAAgDA,SAD1B,CAAxB;;AAGA,QAAI,KAAKA,SAAL,IAAkB,CAAC,gCAAvB,EAA+C;AAC7Cc,MAAAA,OAAO,CAACC,IAAR,CAAa,mDAAb;AACA,WAAKf,SAAL,GAAiB,KAAjB;AACD;;AACD,SAAKD,MAAL,GAAcA,MAAM,IAAIiB,mBAAQC,QAAR,CAAiBC,OAAzC;AACA,SAAKjB,YAAL,GAAoBA,YAApB;AACA,SAAKC,aAAL,GAAqBA,aAArB;AACA,SAAKC,OAAL,GAAeA,OAAf;AACA,SAAKC,UAAL,GAAkBA,UAAlB;AACA,SAAKC,MAAL,GAAcA,MAAd;AACA,SAAKC,MAAL,GAAcA,MAAd;AACA,SAAKC,OAAL,GAAeA,OAAf;AACA,SAAKC,SAAL,GAAiBA,SAAjB;AACA,SAAKC,kBAAL,GAA0BA,kBAA1B;AACA,SAAKE,UAAL,GAAkBA,UAAlB;AACA,SAAKC,MAAL,GAAcA,MAAd;AACA,SAAKO,UAAL,gBAAkB,uBAAlB;AACA,SAAKT,KAAL,GAAaA,KAAb;AACD;;;;WAED,2BAAkBU,IAAlB,EAAwB;AACtB;AACA;AACA,UAAIA,IAAJ,EAAU;AACR,YAAIA,IAAI,CAACC,EAAL,IAAW,KAAKtB,MAApB,EAA4B;AAC1B,cAAIqB,IAAI,CAACC,EAAL,IAAW,KAAKtB,MAApB,EAA4B;AAC1Be,YAAAA,OAAO,CAACC,IAAR,+BACwBK,IAAI,CAACC,EAD7B,6CACiE,KAAKtB,MADtE,4BAC8FqB,IAAI,CAACC,EADnG;AAGA,iBAAKtB,MAAL,GAAcqB,IAAI,CAACC,EAAnB;AACD;AACF,SAPD,MAOO,IAAID,IAAI,CAACC,EAAT,EAAa,KAAKtB,MAAL,GAAcqB,IAAI,CAACC,EAAnB,CAAb,KACF,IAAI,KAAKtB,MAAT,EAAiBqB,IAAI,CAACC,EAAL,GAAU,KAAKtB,MAAf;AACvB,OAVD,MAUO;AACLqB,QAAAA,IAAI,GAAGE,QAAQ,CAACC,cAAT,CAAwB,KAAKxB,MAA7B,CAAP;AACD;;AACD,UAAI,CAACqB,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGE,QAAQ,CAACE,aAAT,CAAuB,KAAvB,CAAP;AACAJ,QAAAA,IAAI,CAACC,EAAL,GAAU,KAAKtB,MAAf;AACA,YAAIuB,QAAQ,CAACG,IAAT,CAAcC,UAAlB,EACEJ,QAAQ,CAACG,IAAT,CAAcE,YAAd,CAA2BP,IAA3B,EAAiCE,QAAQ,CAACG,IAAT,CAAcC,UAA/C,EADF,KAEKJ,QAAQ,CAACG,IAAT,CAAcG,WAAd,CAA0BR,IAA1B;AACN;;AACD,WAAKA,IAAL,GAAY,KAAKpB,SAAL,GAAiBoB,IAAI,CAACS,YAAL,CAAkB;AAAEC,QAAAA,IAAI,EAAE;AAAR,OAAlB,CAAjB,GAAuDV,IAAnE;AACD;;;WAED,2BAAkBW,IAAlB,EAAwB;AACtB,UAAI,CAACA,IAAL,EAAWA,IAAI,GAAG,KAAKX,IAAZ;AACX,aAAOW,IAAI,CAACC,UAAL,GAAkBD,IAAI,CAACC,UAAvB,GAAoCD,IAA3C;AACD;;;WAED,yBAAuB;AAAA,wCAANE,IAAM;AAANA,QAAAA,IAAM;AAAA;;AACrB,WAAK5B,MAAL,IAAe,KAAKA,MAAL,cAAY,IAAZ,SAAqB4B,IAArB,EAAf;AACD;;;WAED,yBAAuB;AAAA,yCAANA,IAAM;AAANA,QAAAA,IAAM;AAAA;;AACrB,WAAK3B,MAAL,IAAe,KAAKA,MAAL,cAAY,IAAZ,SAAqB2B,IAArB,EAAf;AACD;;;WAED,0BAAwB;AAAA,yCAANA,IAAM;AAANA,QAAAA,IAAM;AAAA;;AACtB,WAAK1B,OAAL,IAAgB,KAAKA,OAAL,cAAa,IAAb,SAAsB0B,IAAtB,EAAhB;AACD;;;;uGAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoBC,gBAAAA,IAApB,SAAoBA,IAApB,EAA0BC,KAA1B,SAA0BA,KAA1B;AACE,qBAAK3B,SAAL,IACE,KAAKA,SAAL,CAAe,IAAf,EAAqB;AAAE4B,kBAAAA,IAAI,EAAEC,mBAAQH,IAAhB;AAAsBI,kBAAAA,OAAO,EAAEH;AAA/B,iBAArB,CADF;AADF,iDAGS,KAAKI,cAAL,CAAoBC,WAApB,CAAgCN,IAAhC,EAAsCC,KAAtC,CAHT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;gHAMA;AAAA;AAAA;AAAA;AAAA;AAAA,kDACS,KAAKI,cAAL,CAAoBE,oBAApB,EADT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAIA,8BAAmD;AAAA;;AAAA,UAAxBP,IAAwB,SAAnCQ,OAAmC,CAAxBR,IAAwB;AAAA,UAAhBS,YAAgB,SAAhBA,YAAgB;AACjD,UAAMC,WAAW,GAAGD,YAAY,CAACA,YAAY,CAACE,MAAb,GAAsB,CAAvB,CAAhC;AACA,UAAMC,aAAa,GAAGF,WAAW,IAAIA,WAAW,CAACvB,EAAjD;AACA,UAAM0B,qBAAqB,GAAG,KAAKC,oBAAL,EAA9B;;AACA,UAAI,KAAKT,cAAT,EAAyB;AACvB,aAAKA,cAAL,CAAoBO,aAApB,GAAoCA,aAApC;AACA,aAAKP,cAAL,CAAoBQ,qBAApB,GAA4CA,qBAA5C;AACD,OAHD,MAGO,IAAI,CAAC,KAAKR,cAAN,IAAwBL,IAA5B,EAAkC;AACvC,aAAKK,cAAL,GAAsB,IAAIU,oBAAJ,CAAmB;AACvCvC,UAAAA,KAAK,EAAE,KAAKA,KAD2B;AAEvCwB,UAAAA,IAAI,EAAJA,IAFuC;AAGvCY,UAAAA,aAAa,EAAbA,aAHuC;AAIvCC,UAAAA,qBAAqB,EAArBA,qBAJuC;AAKvCG,UAAAA,OAAO,EAAE,iBAAAC,KAAK;AAAA,mBAAI,KAAI,CAACC,cAAL,CAAoBD,KAApB,CAAJ;AAAA,WALyB;AAMvCE,UAAAA,YAAY,EAAE;AAAA,mBACZ,KAAI,CAAClC,UAAL,CAAgBmC,OAAhB,CACGC,WADH,GAEGC,MAFH,CAEU,UAAAC,GAAG;AAAA,qBAAIA,GAAG,CAACC,GAAJ,KAAY,CAAZ,IAAiBD,GAAG,CAACE,WAAzB;AAAA,aAFb,CADY;AAAA,WANyB;AAUvC/C,UAAAA,MAAM,EAAE,KAAKA;AAV0B,SAAnB,CAAtB;AAYD;AACF;;;WAED,wBAAeuC,KAAf,EAAsB;AACpB,UAAIA,KAAK,CAACS,MAAN,KAAiB,kBAArB,EAAyC;AACvC,aAAKnD,kBAAL,IAA2B,KAAKA,kBAAL,CAAwB,IAAxB,EAA8B0C,KAAK,CAACU,MAApC,CAA3B;AACA,aAAK1C,UAAL,CAAgBmC,OAAhB,CAAwBQ,SAAxB,CAAkCX,KAAK,CAACU,MAAxC;AACD,OAHD,MAGO,IAAIV,KAAK,CAACS,MAAN,KAAiB,qBAArB,EACL,KAAKG,iBAAL,CAAuBZ,KAAK,CAACb,OAAN,CAAcjB,EAArC,EAAyC8B,KAAK,CAACb,OAA/C,EADK,KAEF,IAAIa,KAAK,CAACb,OAAN,CAAc0B,IAAd,KAAuB,yBAA3B,EACH,KAAKC,qBAAL,CAA2Bd,KAAK,CAACb,OAAN,CAAc4B,IAAzC,EADG,KAEA,IAAIf,KAAK,CAACb,OAAN,CAAc0B,IAAd,KAAuB,eAA3B,EACH,KAAKG,SAAL,CAAehB,KAAK,CAACb,OAAN,CAAc4B,IAAd,KAAuB,WAAtC,EADG,KAEA;AACH,aAAK1D,SAAL,IACE,KAAKA,SAAL,CAAe,IAAf,EAAqB;AAAE4B,UAAAA,IAAI,EAAEC,mBAAQ+B,GAAhB;AAAqB9B,UAAAA,OAAO,EAAEa,KAAK,CAACb;AAApC,SAArB,CADF;AAEA,aAAK+B,aAAL,CAAmBlB,KAAK,CAACb,OAAzB;AACD;AACF;;;WAED,oBAAWJ,IAAX,EAAiB;AACf,WAAKf,UAAL,CAAgBmC,OAAhB,CAAwBgB,UAAxB,CAAmCpC,IAAnC;AACD;;;WAED,uBAAcI,OAAd,EAAuB;AACrB,WAAKnB,UAAL,CAAgBmC,OAAhB,CAAwBiB,cAAxB,CAAuC;AACrCC,QAAAA,QAAQ,EAAE,gCACRlC,OADQ,EAEP,KAAK/C,KAAL,CAAW+C,OAAX,IAAsB,KAAK/C,KAAL,CAAW+C,OAAX,CAAmBmC,WAA1C,IACE,KAAKlF,KAAL,CAAWmF,kBAHL;AAD2B,OAAvC;AAOD;;;WAED,oBAAWC,IAAX,EAAiB;AACf,WAAKN,aAAL,CAAmB;AAAEL,QAAAA,IAAI,EAAEY,YAAMC,IAAd;AAAoBX,QAAAA,IAAI,EAAES;AAA1B,OAAnB;AACD;;;WAED,wBAAerC,OAAf,EAAwB;AACtB,WAAKnB,UAAL,CAAgBmC,OAAhB,CAAwBwB,cAAxB,CAAuCxC,OAAvC;AACD;;;WAED,qBAAYqC,IAAZ,EAAkB;AAChB,WAAKxD,UAAL,CAAgBmC,OAAhB,CAAwBwB,cAAxB,CAAuC;AAAEd,QAAAA,IAAI,EAAEY,YAAMC,IAAd;AAAoBX,QAAAA,IAAI,EAAES;AAA1B,OAAvC;AACD;;;WAED,wBAAeI,OAAf,EAAwB;AACtB,WAAK5D,UAAL,CAAgBmC,OAAhB,CAAwBwB,cAAxB,CAAuC;AAAEd,QAAAA,IAAI,EAAEY,YAAMI,QAAd;AAAwBD,QAAAA,OAAO,EAAPA;AAAxB,OAAvC;AACD;;;WAED,mBAAUE,MAAV,EAAkB;AAChB,WAAK9D,UAAL,CAAgBmC,OAAhB,CAAwBa,SAAxB,CAAkCc,MAAlC;AACD;;;WAED,gBAAO;AACL,WAAK9D,UAAL,CAAgBmC,OAAhB,CAAwB4B,WAAxB;AACD;;;WAED,iBAAQ;AACN,WAAK/D,UAAL,CAAgBmC,OAAhB,CAAwB6B,YAAxB;AACD;;;WAED,kBAAS;AACP,WAAKhE,UAAL,CAAgBmC,OAAhB,CAAwB8B,aAAxB;AACD;;;WAED,8BAAqB;AACnB,WAAKjE,UAAL,CAAgBmC,OAAhB,CAAwB+B,kBAAxB;AACD;;;WAED,+BAAsB;AACpB,WAAKlE,UAAL,CAAgBmC,OAAhB,CAAwBgC,mBAAxB;AACD;;;WAED,gCAAuB;AACrB,WAAKnE,UAAL,CAAgBmC,OAAhB,CAAwBiC,oBAAxB;AACD;;;WAED,uBAAc;AACZ,aAAO,KAAKpE,UAAL,CAAgBmC,OAAhB,CAAwBC,WAAxB,EAAP;AACD;;;WAED,yBAAgB;AACd,WAAKpC,UAAL,CAAgBmC,OAAhB,CAAwBkC,aAAxB;AACD;;;;yGAED;AAAA;AAAA;AAAA;AAAA;AAAA,kDACS,KAAKC,wBAAL,CAA8B;AACnC/E,kBAAAA,KAAK,EAAE,KAAKA,KADuB;AAEnCC,kBAAAA,UAAU,EAAE,KAAKA;AAFkB,iBAA9B,CADT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAOA,gCAAuB;AACrB,aAAO,KAAKQ,UAAL,CAAgBmC,OAAhB,CAAwBN,oBAAxB,EAAP;AACD;;;WAED,2BAAkB0C,KAAlB,EAAyBC,WAAzB,EAAsC;AACpC,aAAO,KAAKxE,UAAL,CAAgBmC,OAAhB,CAAwBS,iBAAxB,CAA0C2B,KAA1C,EAAiDC,WAAjD,CAAP;AACD;;;WAED,+BAAsBC,QAAtB,EAAgC;AAC9B,aAAO,KAAKzE,UAAL,CAAgBmC,OAAhB,CAAwBW,qBAAxB,CAA8C2B,QAA9C,CAAP;AACD,K,CAED;;;;WACA,sBAAaxE,IAAb,EAA0C;AAAA;;AAAA,UAAvByE,gBAAuB,uEAAJ,EAAI;AACxC,kCAuBIA,gBAvBJ,CACEtG,KADF;AAAA,UACEA,KADF,sCACU,EADV;AAAA,UAEEC,cAFF,GAuBIqG,gBAvBJ,CAEErG,cAFF;AAAA,UAGEC,cAHF,GAuBIoG,gBAvBJ,CAGEpG,cAHF;AAAA,UAIEC,WAJF,GAuBImG,gBAvBJ,CAIEnG,WAJF;AAAA,UAKEE,iBALF,GAuBIiG,gBAvBJ,CAKEjG,iBALF;AAAA,UAMEC,eANF,GAuBIgG,gBAvBJ,CAMEhG,eANF;AAAA,UAOEC,gBAPF,GAuBI+F,gBAvBJ,CAOE/F,gBAPF;AAAA,UAQEH,iBARF,GAuBIkG,gBAvBJ,CAQElG,iBARF;AAAA,UASEM,YATF,GAuBI4F,gBAvBJ,CASE5F,YATF;AAAA,UAUEC,aAVF,GAuBI2F,gBAvBJ,CAUE3F,aAVF;AAAA,UAWEC,OAXF,GAuBI0F,gBAvBJ,CAWE1F,OAXF;AAAA,UAYEC,UAZF,GAuBIyF,gBAvBJ,CAYEzF,UAZF;AAAA,UAaEC,MAbF,GAuBIwF,gBAvBJ,CAaExF,MAbF;AAAA,UAcEC,MAdF,GAuBIuF,gBAvBJ,CAcEvF,MAdF;AAAA,UAeEC,OAfF,GAuBIsF,gBAvBJ,CAeEtF,OAfF;AAAA,UAgBEC,SAhBF,GAuBIqF,gBAvBJ,CAgBErF,SAhBF;AAAA,UAiBEC,kBAjBF,GAuBIoF,gBAvBJ,CAiBEpF,kBAjBF;AAAA,UAkBEC,KAlBF,GAuBImF,gBAvBJ,CAkBEnF,KAlBF;AAAA,UAmBEC,UAnBF,GAuBIkF,gBAvBJ,CAmBElF,UAnBF;AAAA,UAoBEC,MApBF,GAuBIiF,gBAvBJ,CAoBEjF,MApBF;AAAA,UAqBEb,MArBF,GAuBI8F,gBAvBJ,CAqBE9F,MArBF;AAAA,UAsBK+F,cAtBL,6CAuBID,gBAvBJ;AAwBAtG,MAAAA,KAAK,GAAG,wBAAM,KAAKA,KAAX,EAAkBA,KAAlB,CAAR;AACAC,MAAAA,cAAc,GAAGA,cAAc,IAAI,KAAKA,cAAxC;AACAC,MAAAA,cAAc,GAAGA,cAAc,IAAI,KAAKA,cAAxC;AACAC,MAAAA,WAAW,GAAGA,WAAW,IAAI,KAAKA,WAAlC;AACAC,MAAAA,iBAAiB,GAAGA,iBAAiB,IAAI,KAAKA,iBAA9C;AACAC,MAAAA,iBAAiB,GAAGA,iBAAiB,IAAI,KAAKA,iBAA9C;AACAC,MAAAA,eAAe,GAAGA,eAAe,IAAI,KAAKA,eAA1C;AACAC,MAAAA,gBAAgB,GAAGA,gBAAgB,IAAI,KAAKA,gBAA5C;AACAG,MAAAA,YAAY,GAAGA,YAAY,IAAI,KAAKA,YAApC;AACAC,MAAAA,aAAa,GAAGA,aAAa,IAAI,KAAKA,aAAtC;AACAC,MAAAA,OAAO,GAAGA,OAAO,IAAI,KAAKA,OAA1B;AACAC,MAAAA,UAAU,GAAGA,UAAU,IAAI,KAAKA,UAAhC;AACAQ,MAAAA,MAAM,GAAGA,MAAM,IAAI,KAAKA,MAAxB;AACA,WAAKP,MAAL,GAAcA,MAAM,IAAI,KAAKA,MAA7B;AACA,WAAKC,MAAL,GAAcA,MAAM,IAAI,KAAKA,MAA7B;AACA,WAAKC,OAAL,GAAeA,OAAO,IAAI,KAAKA,OAA/B;AACA,WAAKC,SAAL,GAAiBA,SAAS,IAAI,KAAKA,SAAnC;AACA,WAAKC,kBAAL,GAA0BA,kBAAkB,IAAI,KAAKA,kBAArD;AACA,WAAKE,UAAL,GAAkBA,UAAU,IAAI,KAAKA,UAArC;AACA,WAAKD,KAAL,GAAaA,KAAK,IAAI,KAAKA,KAA3B;AACA,WAAKX,MAAL,GAAcA,MAAM,IAAI,KAAKA,MAA7B;AACA,WAAKgG,iBAAL,CAAuB3E,IAAvB;AACA,0BACE,gCAAC,gBAAD,gCACM0E,cADN;AAEE,QAAA,GAAG,EAAE,KAAK3E,UAFZ;AAGE,QAAA,IAAI,EAAE,KAAKC,IAHb;AAIE,QAAA,SAAS,EAAE,KAAKpB,SAJlB;AAKE,QAAA,KAAK,EAAET,KALT;AAME,QAAA,cAAc,EAAEC,cANlB;AAOE,QAAA,cAAc,EAAEC,cAPlB;AAQE,QAAA,WAAW,EAAEC,WARf;AASE,QAAA,iBAAiB,EAAEC,iBATrB;AAUE,QAAA,iBAAiB,EAAEC,iBAVrB;AAWE,QAAA,eAAe,EAAEC,eAXnB;AAYE,QAAA,gBAAgB,EAAEC,gBAZpB;AAaE,QAAA,OAAO,EAAEK,OAbX;AAcE,QAAA,UAAU,EAAEC,UAdd;AAeE,QAAA,YAAY,EAAEH,YAfhB;AAgBE,QAAA,aAAa,EAAEC,aAhBjB;AAiBE,QAAA,MAAM,EAAE;AAAA,iBAAa,MAAI,CAAC8F,aAAL,OAAA,MAAI,YAAjB;AAAA,SAjBV;AAkBE,QAAA,MAAM,EAAE;AAAA,iBAAa,MAAI,CAACC,aAAL,OAAA,MAAI,YAAjB;AAAA,SAlBV;AAmBE,QAAA,OAAO,EAAE;AAAA,iBAAa,MAAI,CAACC,cAAL,OAAA,MAAI,YAAjB;AAAA,SAnBX;AAoBE,QAAA,WAAW,EAAE;AAAA,iBAAa,MAAI,CAACC,WAAL,OAAA,MAAI,YAAjB;AAAA,SApBf;AAqBE,QAAA,aAAa,EAAE,uBAAAC,YAAY;AAAA,iBAAI,MAAI,CAACC,aAAL,CAAmBD,YAAnB,CAAJ;AAAA,SArB7B;AAsBE,QAAA,MAAM,EAAExF;AAtBV,SADF;AA0BD;;;;4GAED;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAyBF,gBAAAA,KAAzB,SAAyBA,KAAzB;AAAA;AAAA;AAAA,uBAE6BuC,qBAAeqD,oBAAf,CAAoC;AAC3D5F,kBAAAA,KAAK,EAALA;AAD2D,iBAApC,CAF7B;;AAAA;AAAA;AAEY6F,gBAAAA,MAFZ,yBAEYA,MAFZ;AAAA,kDAKWA,MAAM,KAAK,GALtB;;AAAA;AAAA;AAAA;AAAA,kDAOW,KAPX;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAWA,oBAAW;AACT,aAAO,KAAKpF,UAAL,CAAgBmC,OAAhB,CAAwBkD,QAAxB,EAAP;AACD;;;;oHAED,kBAA+BX,gBAA/B;AAAA;AAAA;AAAA;AAAA;AAAA;AACQnF,gBAAAA,KADR,GAC8BmF,gBAD9B,CACQnF,KADR,EACeC,UADf,GAC8BkF,gBAD9B,CACelF,UADf;AAEEA,gBAAAA,UAAU,GAAGA,UAAU,IAAI,KAAKA,UAAhC;;AAFF,sBAGMA,UAAU,KAAK8F,SAAf,IAA4B9F,UAAU,KAAK,IAHjD;AAAA;AAAA;AAAA;;AAAA,kDAG8D,IAH9D;;AAAA;AAAA,sBAIM,OAAOA,UAAP,KAAsB,UAAtB,IAAoCA,UAAU,EAJpD;AAAA;AAAA;AAAA;;AAAA,kDAI+D,IAJ/D;;AAAA;AAAA,+BAKMA,UAAU,KAAK,SALrB;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAKyC,KAAK+F,gBAAL,CAAsB;AAAEhG,kBAAAA,KAAK,EAALA;AAAF,iBAAtB,CALzC;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAMW,IANX;;AAAA;AAAA,kDAOS,KAPT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;mGAUA,kBAAaiG,IAAb;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmBd,gBAAAA,gBAAnB,8DAAsC,EAAtC;AACE,kIAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCACc,MAAI,CAACJ,wBAAL,CAA8BI,gBAA9B,CADd;;AAAA;AACJe,0BAAAA,SADI;AAEV,8BAAIA,SAAJ,EACE,sBACE,MAAI,CAACC,YAAL,CAAkBF,IAAlB,EAAwBd,gBAAxB,CADF,EAEE,MAAI,CAACiB,iBAAL,CAAuBH,IAAvB,CAFF;;AAHQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAZ;;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O","sourcesContent":["import { HubtypeService, INPUT } from '@botonic/core'\nimport merge from 'lodash.merge'\nimport React, { createRef } from 'react'\nimport { render } from 'react-dom'\n\nimport { SENDERS, WEBCHAT } from './constants'\nimport { msgToBotonic } from './msg-to-botonic'\nimport { isShadowDOMSupported, onDOMLoaded } from './util/dom'\nimport { Webchat } from './webchat/webchat'\n\nexport class WebchatApp {\n constructor({\n theme = {},\n persistentMenu,\n coverComponent,\n blockInputs,\n enableEmojiPicker,\n enableAttachments,\n enableUserInput,\n enableAnimations,\n hostId,\n shadowDOM,\n defaultDelay,\n defaultTyping,\n storage,\n storageKey,\n onInit,\n onOpen,\n onClose,\n onMessage,\n onConnectionChange,\n appId,\n visibility,\n server,\n }) {\n this.theme = theme\n this.persistentMenu = persistentMenu\n this.coverComponent = coverComponent\n this.blockInputs = blockInputs\n this.enableEmojiPicker = enableEmojiPicker\n this.enableAttachments = enableAttachments\n this.enableUserInput = enableUserInput\n this.enableAnimations = enableAnimations\n this.shadowDOM = Boolean(\n typeof shadowDOM === 'function' ? shadowDOM() : shadowDOM\n )\n if (this.shadowDOM && !isShadowDOMSupported()) {\n console.warn('[botonic] ShadowDOM not supported on this browser')\n this.shadowDOM = false\n }\n this.hostId = hostId || WEBCHAT.DEFAULTS.HOST_ID\n this.defaultDelay = defaultDelay\n this.defaultTyping = defaultTyping\n this.storage = storage\n this.storageKey = storageKey\n this.onInit = onInit\n this.onOpen = onOpen\n this.onClose = onClose\n this.onMessage = onMessage\n this.onConnectionChange = onConnectionChange\n this.visibility = visibility\n this.server = server\n this.webchatRef = createRef()\n this.appId = appId\n }\n\n createRootElement(host) {\n // Create root element <div id='root'> if not exists\n // Create shadowDOM to root element if needed\n if (host) {\n if (host.id && this.hostId) {\n if (host.id != this.hostId) {\n console.warn(\n `[botonic] Host ID \"${host.id}\" don't match 'hostId' option: ${this.hostId}. Using value: ${host.id}.`\n )\n this.hostId = host.id\n }\n } else if (host.id) this.hostId = host.id\n else if (this.hostId) host.id = this.hostId\n } else {\n host = document.getElementById(this.hostId)\n }\n if (!host) {\n host = document.createElement('div')\n host.id = this.hostId\n if (document.body.firstChild)\n document.body.insertBefore(host, document.body.firstChild)\n else document.body.appendChild(host)\n }\n this.host = this.shadowDOM ? host.attachShadow({ mode: 'open' }) : host\n }\n\n getReactMountNode(node) {\n if (!node) node = this.host\n return node.shadowRoot ? node.shadowRoot : node\n }\n\n onInitWebchat(...args) {\n this.onInit && this.onInit(this, ...args)\n }\n\n onOpenWebchat(...args) {\n this.onOpen && this.onOpen(this, ...args)\n }\n\n onCloseWebchat(...args) {\n this.onClose && this.onClose(this, ...args)\n }\n\n async onUserInput({ user, input }) {\n this.onMessage &&\n this.onMessage(this, { from: SENDERS.user, message: input })\n return this.hubtypeService.postMessage(user, input)\n }\n\n async onConnectionRegained() {\n return this.hubtypeService.onConnectionRegained()\n }\n\n onStateChange({ session: { user }, messagesJSON }) {\n const lastMessage = messagesJSON[messagesJSON.length - 1]\n const lastMessageId = lastMessage && lastMessage.id\n const lastMessageUpdateDate = this.getLastMessageUpdate()\n if (this.hubtypeService) {\n this.hubtypeService.lastMessageId = lastMessageId\n this.hubtypeService.lastMessageUpdateDate = lastMessageUpdateDate\n } else if (!this.hubtypeService && user) {\n this.hubtypeService = new HubtypeService({\n appId: this.appId,\n user,\n lastMessageId,\n lastMessageUpdateDate,\n onEvent: event => this.onServiceEvent(event),\n unsentInputs: () =>\n this.webchatRef.current\n .getMessages()\n .filter(msg => msg.ack === 0 && msg.unsentInput),\n server: this.server,\n })\n }\n }\n\n onServiceEvent(event) {\n if (event.action === 'connectionChange') {\n this.onConnectionChange && this.onConnectionChange(this, event.online)\n this.webchatRef.current.setOnline(event.online)\n } else if (event.action === 'update_message_info')\n this.updateMessageInfo(event.message.id, event.message)\n else if (event.message.type === 'update_webchat_settings')\n this.updateWebchatSettings(event.message.data)\n else if (event.message.type === 'sender_action')\n this.setTyping(event.message.data === 'typing_on')\n else {\n this.onMessage &&\n this.onMessage(this, { from: SENDERS.bot, message: event.message })\n this.addBotMessage(event.message)\n }\n }\n\n updateUser(user) {\n this.webchatRef.current.updateUser(user)\n }\n\n addBotMessage(message) {\n this.webchatRef.current.addBotResponse({\n response: msgToBotonic(\n message,\n (this.theme.message && this.theme.message.customTypes) ||\n this.theme.customMessageTypes\n ),\n })\n }\n\n addBotText(text) {\n this.addBotMessage({ type: INPUT.TEXT, data: text })\n }\n\n addUserMessage(message) {\n this.webchatRef.current.addUserMessage(message)\n }\n\n addUserText(text) {\n this.webchatRef.current.addUserMessage({ type: INPUT.TEXT, data: text })\n }\n\n addUserPayload(payload) {\n this.webchatRef.current.addUserMessage({ type: INPUT.POSTBACK, payload })\n }\n\n setTyping(typing) {\n this.webchatRef.current.setTyping(typing)\n }\n\n open() {\n this.webchatRef.current.openWebchat()\n }\n\n close() {\n this.webchatRef.current.closeWebchat()\n }\n\n toggle() {\n this.webchatRef.current.toggleWebchat()\n }\n\n openCoverComponent() {\n this.webchatRef.current.openCoverComponent()\n }\n\n closeCoverComponent() {\n this.webchatRef.current.closeCoverComponent()\n }\n\n toggleCoverComponent() {\n this.webchatRef.current.toggleCoverComponent()\n }\n\n getMessages() {\n return this.webchatRef.current.getMessages()\n }\n\n clearMessages() {\n this.webchatRef.current.clearMessages()\n }\n\n async getVisibility() {\n return this.resolveWebchatVisibility({\n appId: this.appId,\n visibility: this.visibility,\n })\n }\n\n getLastMessageUpdate() {\n return this.webchatRef.current.getLastMessageUpdate()\n }\n\n updateMessageInfo(msgId, messageInfo) {\n return this.webchatRef.current.updateMessageInfo(msgId, messageInfo)\n }\n\n updateWebchatSettings(settings) {\n return this.webchatRef.current.updateWebchatSettings(settings)\n }\n\n // eslint-disable-next-line complexity\n getComponent(host, optionsAtRuntime = {}) {\n let {\n theme = {},\n persistentMenu,\n coverComponent,\n blockInputs,\n enableAttachments,\n enableUserInput,\n enableAnimations,\n enableEmojiPicker,\n defaultDelay,\n defaultTyping,\n storage,\n storageKey,\n onInit,\n onOpen,\n onClose,\n onMessage,\n onConnectionChange,\n appId,\n visibility,\n server,\n hostId,\n ...webchatOptions\n } = optionsAtRuntime\n theme = merge(this.theme, theme)\n persistentMenu = persistentMenu || this.persistentMenu\n coverComponent = coverComponent || this.coverComponent\n blockInputs = blockInputs || this.blockInputs\n enableEmojiPicker = enableEmojiPicker || this.enableEmojiPicker\n enableAttachments = enableAttachments || this.enableAttachments\n enableUserInput = enableUserInput || this.enableUserInput\n enableAnimations = enableAnimations || this.enableAnimations\n defaultDelay = defaultDelay || this.defaultDelay\n defaultTyping = defaultTyping || this.defaultTyping\n storage = storage || this.storage\n storageKey = storageKey || this.storageKey\n server = server || this.server\n this.onInit = onInit || this.onInit\n this.onOpen = onOpen || this.onOpen\n this.onClose = onClose || this.onClose\n this.onMessage = onMessage || this.onMessage\n this.onConnectionChange = onConnectionChange || this.onConnectionChange\n this.visibility = visibility || this.visibility\n this.appId = appId || this.appId\n this.hostId = hostId || this.hostId\n this.createRootElement(host)\n return (\n <Webchat\n {...webchatOptions}\n ref={this.webchatRef}\n host={this.host}\n shadowDOM={this.shadowDOM}\n theme={theme}\n persistentMenu={persistentMenu}\n coverComponent={coverComponent}\n blockInputs={blockInputs}\n enableEmojiPicker={enableEmojiPicker}\n enableAttachments={enableAttachments}\n enableUserInput={enableUserInput}\n enableAnimations={enableAnimations}\n storage={storage}\n storageKey={storageKey}\n defaultDelay={defaultDelay}\n defaultTyping={defaultTyping}\n onInit={(...args) => this.onInitWebchat(...args)}\n onOpen={(...args) => this.onOpenWebchat(...args)}\n onClose={(...args) => this.onCloseWebchat(...args)}\n onUserInput={(...args) => this.onUserInput(...args)}\n onStateChange={webchatState => this.onStateChange(webchatState)}\n server={server}\n />\n )\n }\n\n async isWebchatVisible({ appId }) {\n try {\n const { status } = await HubtypeService.getWebchatVisibility({\n appId,\n })\n return status === 200\n } catch (e) {\n return false\n }\n }\n\n isOnline() {\n return this.webchatRef.current.isOnline()\n }\n\n async resolveWebchatVisibility(optionsAtRuntime) {\n let { appId, visibility } = optionsAtRuntime\n visibility = visibility || this.visibility\n if (visibility === undefined || visibility === true) return true\n if (typeof visibility === 'function' && visibility()) return true\n if (visibility === 'dynamic' && (await this.isWebchatVisible({ appId })))\n return true\n return false\n }\n\n async render(dest, optionsAtRuntime = {}) {\n onDOMLoaded(async () => {\n const isVisible = await this.resolveWebchatVisibility(optionsAtRuntime)\n if (isVisible)\n render(\n this.getComponent(dest, optionsAtRuntime),\n this.getReactMountNode(dest)\n )\n })\n }\n}\n"],"file":"webchat-app.js"}
@@ -0,0 +1,37 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Botonic</title>
7
+ <style>
8
+ html,
9
+ body,
10
+ #root {
11
+ width: 100%;
12
+ height: 100%;
13
+ margin: 0px;
14
+ padding: 0px;
15
+ background-color: #f1f0f0;
16
+ }
17
+ #root {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ }
22
+ body::after {
23
+ content: '';
24
+ width: 200px;
25
+ height: 200px;
26
+ background-color: red;
27
+ }
28
+ </style>
29
+ </head>
30
+ <body>
31
+ <script type="text/javascript">
32
+ document.addEventListener('DOMContentLoaded', function (event) {
33
+ Botonic.render()
34
+ })
35
+ </script>
36
+ </body>
37
+ </html>
package/lib/webview.js ADDED
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.WebviewApp = void 0;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
+
18
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
+
20
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
+
22
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
+
24
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
+
26
+ var _core = require("@botonic/core");
27
+
28
+ var _axios = _interopRequireDefault(require("axios"));
29
+
30
+ var _react = _interopRequireDefault(require("react"));
31
+
32
+ var _reactDom = require("react-dom");
33
+
34
+ var _reactRouterDom = require("react-router-dom");
35
+
36
+ var _contexts = require("./contexts");
37
+
38
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
39
+
40
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
41
+
42
+ var App = /*#__PURE__*/function (_React$Component) {
43
+ (0, _inherits2["default"])(App, _React$Component);
44
+
45
+ var _super = _createSuper(App);
46
+
47
+ function App(props) {
48
+ var _this;
49
+
50
+ (0, _classCallCheck2["default"])(this, App);
51
+ _this = _super.call(this, props);
52
+ var url = new URL(window.location.href);
53
+ var params = Array.from(url.searchParams.entries()).filter(function (_ref) {
54
+ var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
55
+ key = _ref2[0],
56
+ value = _ref2[1];
57
+
58
+ return key != 'context';
59
+ }).reduce(function (o, _ref3) {
60
+ var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
61
+ key = _ref4[0],
62
+ value = _ref4[1];
63
+
64
+ o[key] = value;
65
+ return o;
66
+ }, {});
67
+ var session = JSON.parse(url.searchParams.get('context') || {});
68
+ _this.state = {
69
+ session: session,
70
+ params: params
71
+ };
72
+ return _this;
73
+ }
74
+
75
+ (0, _createClass2["default"])(App, [{
76
+ key: "close",
77
+ value: function () {
78
+ var _close = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(options) {
79
+ var payload, s, baseUrl, resp;
80
+ return _regenerator["default"].wrap(function _callee$(_context) {
81
+ while (1) {
82
+ switch (_context.prev = _context.next) {
83
+ case 0:
84
+ payload = options ? options.payload : null;
85
+ if (options.path) payload = "__PATH_PAYLOAD__".concat(options.path);
86
+
87
+ if (!payload) {
88
+ _context.next = 15;
89
+ break;
90
+ }
91
+
92
+ if (options.params) {
93
+ payload = "".concat(payload, "?").concat((0, _core.params2queryString)(options.params));
94
+ }
95
+
96
+ s = this.state.session;
97
+ _context.prev = 5;
98
+ baseUrl = s._hubtype_api || 'https://api.hubtype.com';
99
+ _context.next = 9;
100
+ return (0, _axios["default"])({
101
+ method: 'post',
102
+ url: "".concat(baseUrl, "/v1/bots/").concat(s.bot.id, "/send_postback/"),
103
+ // eslint-disable-next-line @typescript-eslint/naming-convention
104
+ data: {
105
+ payload: payload,
106
+ chat_id: s.user.id
107
+ }
108
+ });
109
+
110
+ case 9:
111
+ resp = _context.sent;
112
+ _context.next = 15;
113
+ break;
114
+
115
+ case 12:
116
+ _context.prev = 12;
117
+ _context.t0 = _context["catch"](5);
118
+ console.log(_context.t0);
119
+
120
+ case 15:
121
+ if (!(this.state.session.user.provider === _core.PROVIDER.WHATSAPP)) {
122
+ _context.next = 19;
123
+ break;
124
+ }
125
+
126
+ location.href = 'https://wa.me/' + this.state.session.user.imp_id;
127
+ _context.next = 27;
128
+ break;
129
+
130
+ case 19:
131
+ try {
132
+ window.MessengerExtensions.requestCloseBrowser(function () {
133
+ return undefined;
134
+ }, function (err) {
135
+ return console.log(err);
136
+ });
137
+ } catch (e) {}
138
+
139
+ _context.prev = 20;
140
+ _context.next = 23;
141
+ return parent.postMessage('botonicCloseWebview', '*');
142
+
143
+ case 23:
144
+ _context.next = 27;
145
+ break;
146
+
147
+ case 25:
148
+ _context.prev = 25;
149
+ _context.t1 = _context["catch"](20);
150
+
151
+ case 27:
152
+ case "end":
153
+ return _context.stop();
154
+ }
155
+ }
156
+ }, _callee, this, [[5, 12], [20, 25]]);
157
+ }));
158
+
159
+ function close(_x) {
160
+ return _close.apply(this, arguments);
161
+ }
162
+
163
+ return close;
164
+ }()
165
+ }, {
166
+ key: "render",
167
+ value: function render() {
168
+ var _this2 = this;
169
+
170
+ var requestContext = {
171
+ getString: function getString(stringId) {
172
+ return (0, _core.getString)(_this2.props.locales, _this2.state.session.__locale, stringId);
173
+ },
174
+ session: this.state.session || {},
175
+ params: this.state.params || {},
176
+ closeWebview: this.close.bind(this)
177
+ };
178
+ return /*#__PURE__*/_react["default"].createElement(_contexts.RequestContext.Provider, {
179
+ value: requestContext
180
+ }, this.props.webviews.map(function (Webview, i) {
181
+ return /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Route, {
182
+ key: i,
183
+ path: "/".concat(Webview.name),
184
+ component: Webview
185
+ });
186
+ }));
187
+ }
188
+ }]);
189
+ return App;
190
+ }(_react["default"].Component);
191
+
192
+ var WebviewApp = /*#__PURE__*/function () {
193
+ function WebviewApp(_ref5) {
194
+ var webviews = _ref5.webviews,
195
+ locales = _ref5.locales;
196
+ (0, _classCallCheck2["default"])(this, WebviewApp);
197
+ this.webviews = webviews;
198
+ this.locales = locales;
199
+ }
200
+
201
+ (0, _createClass2["default"])(WebviewApp, [{
202
+ key: "render",
203
+ value: function render(dest) {
204
+ (0, _reactDom.render)( /*#__PURE__*/_react["default"].createElement(_reactRouterDom.BrowserRouter, null, /*#__PURE__*/_react["default"].createElement(App, {
205
+ webviews: this.webviews,
206
+ locales: this.locales
207
+ })), dest);
208
+ }
209
+ }]);
210
+ return WebviewApp;
211
+ }();
212
+
213
+ exports.WebviewApp = WebviewApp;
214
+ //# sourceMappingURL=webview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/webview.jsx"],"names":["App","props","url","URL","window","location","href","params","Array","from","searchParams","entries","filter","key","value","reduce","o","session","JSON","parse","get","state","options","payload","path","s","baseUrl","_hubtype_api","method","bot","id","data","chat_id","user","resp","console","log","provider","PROVIDER","WHATSAPP","imp_id","MessengerExtensions","requestCloseBrowser","undefined","err","e","parent","postMessage","requestContext","getString","stringId","locales","__locale","closeWebview","close","bind","webviews","map","Webview","i","name","React","Component","WebviewApp","dest"],"mappings":"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","sourcesContent":["import { getString, params2queryString, PROVIDER } from '@botonic/core'\nimport axios from 'axios'\nimport React from 'react'\nimport { render } from 'react-dom'\nimport { BrowserRouter, Route } from 'react-router-dom'\n\nimport { RequestContext } from './contexts'\n\nclass App extends React.Component {\n constructor(props) {\n super(props)\n const url = new URL(window.location.href)\n const params = Array.from(url.searchParams.entries())\n .filter(([key, value]) => key != 'context')\n .reduce((o, [key, value]) => {\n o[key] = value\n return o\n }, {})\n const session = JSON.parse(url.searchParams.get('context') || {})\n this.state = { session, params }\n }\n\n async close(options) {\n let payload = options ? options.payload : null\n if (options.path) payload = `__PATH_PAYLOAD__${options.path}`\n if (payload) {\n if (options.params) {\n payload = `${payload}?${params2queryString(options.params)}`\n }\n const s = this.state.session\n try {\n const baseUrl = s._hubtype_api || 'https://api.hubtype.com'\n const resp = await axios({\n method: 'post',\n url: `${baseUrl}/v1/bots/${s.bot.id}/send_postback/`,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n data: { payload: payload, chat_id: s.user.id },\n })\n } catch (e) {\n console.log(e)\n }\n }\n if (this.state.session.user.provider === PROVIDER.WHATSAPP) {\n location.href = 'https://wa.me/' + this.state.session.user.imp_id\n } else {\n try {\n window.MessengerExtensions.requestCloseBrowser(\n () => undefined,\n err => console.log(err)\n )\n } catch (e) {}\n try {\n await parent.postMessage('botonicCloseWebview', '*')\n } catch (e) {}\n }\n }\n\n render() {\n const requestContext = {\n getString: stringId =>\n getString(this.props.locales, this.state.session.__locale, stringId),\n session: this.state.session || {},\n params: this.state.params || {},\n closeWebview: this.close.bind(this),\n }\n\n return (\n <RequestContext.Provider value={requestContext}>\n {this.props.webviews.map((Webview, i) => (\n <Route key={i} path={`/${Webview.name}`} component={Webview} />\n ))}\n </RequestContext.Provider>\n )\n }\n}\n\nexport class WebviewApp {\n constructor({ webviews, locales }) {\n this.webviews = webviews\n this.locales = locales\n }\n\n render(dest) {\n render(\n <BrowserRouter>\n <App webviews={this.webviews} locales={this.locales} />\n </BrowserRouter>,\n dest\n )\n }\n}\n"],"file":"webview.js"}
@@ -0,0 +1,39 @@
1
+ <html>
2
+ <head>
3
+ <title></title>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <style>
7
+ html,
8
+ body,
9
+ #root {
10
+ width: 100%;
11
+ height: 100%;
12
+ margin: 0px;
13
+ padding: 0px;
14
+ }
15
+ </style>
16
+ </head>
17
+
18
+ <body>
19
+ <script>
20
+ ;(function (d, s, id) {
21
+ var js,
22
+ fjs = d.getElementsByTagName(s)[0]
23
+ if (d.getElementById(id)) {
24
+ return
25
+ }
26
+ js = d.createElement(s)
27
+ js.id = id
28
+ js.src = 'https://connect.facebook.net/en_US/messenger.Extensions.js'
29
+ fjs.parentNode.insertBefore(js, fjs)
30
+ })(document, 'script', 'Messenger')
31
+ </script>
32
+ <div id="root"></div>
33
+ <script type="text/javascript">
34
+ document.addEventListener('DOMContentLoaded', function (event) {
35
+ BotonicWebview.render(document.getElementById('root'))
36
+ })
37
+ </script>
38
+ </body>
39
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botonic/react",
3
- "version": "0.20.1-alpha.1",
3
+ "version": "0.20.1",
4
4
  "license": "MIT",
5
5
  "description": "Build Chatbots using React",
6
6
  "main": "src/index.js",
@@ -28,7 +28,7 @@
28
28
  "README.md"
29
29
  ],
30
30
  "dependencies": {
31
- "@botonic/core": "~0.20.0",
31
+ "@botonic/core": "^0.20.1",
32
32
  "axios": "^0.24.0",
33
33
  "emoji-picker-react": "^3.2.3",
34
34
  "framer-motion": "^3.1.1",
@@ -1,24 +1,15 @@
1
1
  import { INPUT, isBrowser } from '@botonic/core'
2
- import React, { useState } from 'react'
2
+ import React from 'react'
3
3
  import styled from 'styled-components'
4
4
 
5
5
  import { ROLES } from '../constants'
6
- import { PortalModalComponent } from '../webchat/components/portal-modal'
7
6
  import { Message } from './message'
8
7
 
9
8
  const StyledImage = styled.img`
10
9
  border-radius: 8px;
11
10
  max-width: 150px;
12
11
  max-height: 150px;
13
- margin: -3px -6px;
14
- cursor: ${props => (props.isHovered ? 'pointer' : 'none')};
15
- `
16
-
17
- const StyledPreviewImage = styled.img`
18
- width: 100%;
19
- max-width: 75vw;
20
- max-height: 75vh;
21
- object-fit: contain;
12
+ margin: 10px;
22
13
  `
23
14
 
24
15
  const serialize = imageProps => {
@@ -26,33 +17,8 @@ const serialize = imageProps => {
26
17
  }
27
18
 
28
19
  export const Image = props => {
29
- const [isHovered, setIsHovered] = useState(false)
30
- const [isModalOpen, setIsModalOpen] = useState(false)
31
-
32
20
  let content = props.children
33
-
34
- if (isBrowser()) {
35
- content = (
36
- <>
37
- <StyledImage
38
- src={props.src}
39
- isHovered={isHovered}
40
- onMouseEnter={() => setIsHovered(true)}
41
- onMouseLeave={() => setIsHovered(false)}
42
- onClick={() => setIsModalOpen(true)}
43
- />
44
- {isModalOpen && (
45
- <PortalModalComponent
46
- open={isModalOpen}
47
- onClose={() => setIsModalOpen(false)}
48
- locked={false}
49
- >
50
- <StyledPreviewImage src={props.src} />
51
- </PortalModalComponent>
52
- )}
53
- </>
54
- )
55
- }
21
+ if (isBrowser()) content = <StyledImage src={props.src} />
56
22
  return (
57
23
  <Message
58
24
  role={ROLES.IMAGE_MESSAGE}
package/src/index.d.ts CHANGED
@@ -204,8 +204,6 @@ export class WebchatApp {
204
204
  updateLastMessageDate(date: string): void
205
205
  updateUser(user: core.SessionUser): void
206
206
  updateWebchatSettings(settings: WebchatSettingsProps): void
207
- openModal(customContent: React.ReactNode): void
208
- closeModal(): void
209
207
  }
210
208
 
211
209
  export interface WebchatContextProps {
package/src/index.js CHANGED
@@ -5,7 +5,6 @@ export { DevApp } from './dev-app'
5
5
  export { msgsToBotonic, msgToBotonic } from './msg-to-botonic'
6
6
  export { NodeApp } from './node-app'
7
7
  export { staticAsset } from './util/environment'
8
- export * from './webchat/components/portal-modal'
9
8
  export { getBotonicApp, Webchat } from './webchat/index.js'
10
9
  export { WebchatApp } from './webchat-app'
11
10
  export { WebviewApp } from './webview'
@@ -14,7 +14,6 @@ export const TOGGLE_WEBCHAT = 'toggleWebchat'
14
14
  export const TOGGLE_EMOJI_PICKER = 'toggleEmojiPicker'
15
15
  export const TOGGLE_PERSISTENT_MENU = 'togglePersistentMenu'
16
16
  export const TOGGLE_COVER_COMPONENT = 'toggleCoverComponent'
17
- export const TOGGLE_MODAL = 'toggleModal'
18
17
  export const SET_ERROR = 'setError'
19
18
  export const CLEAR_MESSAGES = 'clearMessages'
20
19
  export const UPDATE_LAST_MESSAGE_DATE = 'updateLastMessageDate'
@@ -11,7 +11,6 @@ import {
11
11
  SET_ONLINE,
12
12
  TOGGLE_COVER_COMPONENT,
13
13
  TOGGLE_EMOJI_PICKER,
14
- TOGGLE_MODAL,
15
14
  TOGGLE_PERSISTENT_MENU,
16
15
  TOGGLE_WEBCHAT,
17
16
  UPDATE_DEV_SETTINGS,
@@ -60,7 +59,6 @@ export const webchatInitialState = {
60
59
  isEmojiPickerOpen: false,
61
60
  isPersistentMenuOpen: false,
62
61
  isCoverComponentOpen: false,
63
- isModalOpen: false,
64
62
  lastMessageUpdate: undefined,
65
63
  currentAttachment: undefined,
66
64
  jwt: null,
@@ -139,11 +137,6 @@ export function useWebchat() {
139
137
  type: TOGGLE_COVER_COMPONENT,
140
138
  payload: toggle,
141
139
  })
142
- const toggleModal = toggle =>
143
- webchatDispatch({
144
- type: TOGGLE_MODAL,
145
- payload: toggle,
146
- })
147
140
  const setError = error =>
148
141
  webchatDispatch({
149
142
  type: SET_ERROR,
@@ -199,7 +192,6 @@ export function useWebchat() {
199
192
  toggleEmojiPicker,
200
193
  togglePersistentMenu,
201
194
  toggleCoverComponent,
202
- toggleModal,
203
195
  setError,
204
196
  setOnline,
205
197
  clearMessages,
@@ -4,7 +4,6 @@ import {
4
4
  SET_ONLINE,
5
5
  TOGGLE_COVER_COMPONENT,
6
6
  TOGGLE_EMOJI_PICKER,
7
- TOGGLE_MODAL,
8
7
  TOGGLE_PERSISTENT_MENU,
9
8
  TOGGLE_WEBCHAT,
10
9
  UPDATE_DEV_SETTINGS,
@@ -19,7 +18,6 @@ import {
19
18
  } from './actions'
20
19
  import { messagesReducer } from './messages-reducer'
21
20
 
22
- // eslint-disable-next-line complexity
23
21
  export function webchatReducer(state, action) {
24
22
  switch (action.type) {
25
23
  case UPDATE_WEBVIEW:
@@ -43,8 +41,6 @@ export function webchatReducer(state, action) {
43
41
  return { ...state, isPersistentMenuOpen: action.payload }
44
42
  case TOGGLE_COVER_COMPONENT:
45
43
  return { ...state, isCoverComponentOpen: action.payload }
46
- case TOGGLE_MODAL:
47
- return { ...state, isModalOpen: action.payload }
48
44
  case SET_ERROR:
49
45
  return { ...state, error: action.payload || {} }
50
46
  case SET_ONLINE:
@@ -6,7 +6,6 @@ import React, {
6
6
  useEffect,
7
7
  useImperativeHandle,
8
8
  useRef,
9
- useState,
10
9
  } from 'react'
11
10
  import Textarea from 'react-textarea-autosize'
12
11
  import styled, { StyleSheetManager } from 'styled-components'
@@ -47,7 +46,6 @@ import {
47
46
  initSession,
48
47
  shouldKeepSessionOnReload,
49
48
  } from '../util/webchat'
50
- import { PortalModalComponent } from '../webchat/components/portal-modal'
51
49
  import { Attachment } from './components/attachment'
52
50
  import { EmojiPicker, OpenedEmojiPicker } from './components/emoji-picker'
53
51
  import {
@@ -185,7 +183,6 @@ export const Webchat = forwardRef((props, ref) => {
185
183
  toggleEmojiPicker,
186
184
  togglePersistentMenu,
187
185
  toggleCoverComponent,
188
- toggleModal,
189
186
  setError,
190
187
  setOnline,
191
188
  clearMessages,
@@ -202,8 +199,6 @@ export const Webchat = forwardRef((props, ref) => {
202
199
  const { initialSession, initialDevSettings, onStateChange } = props
203
200
  const getThemeProperty = _getThemeProperty(theme)
204
201
 
205
- const [customModalContent, setCustomModalContent] = useState(undefined)
206
-
207
202
  const storage = props.storage === undefined ? localStorage : props.storage
208
203
  const storageKey =
209
204
  typeof props.storageKey === 'function'
@@ -564,11 +559,6 @@ export const Webchat = forwardRef((props, ref) => {
564
559
  toggleWebchat: () => toggleWebchat(!webchatState.isWebchatOpen),
565
560
  openCoverComponent: () => toggleCoverComponent(true),
566
561
  closeCoverComponent: () => toggleCoverComponent(false),
567
- openModal: customModalContent => {
568
- setCustomModalContent(customModalContent)
569
- toggleModal(true)
570
- },
571
- closeModal: () => toggleModal(false),
572
562
  toggleCoverComponent: () =>
573
563
  toggleCoverComponent(!webchatState.isCoverComponentOpen),
574
564
  openWebviewApi: component => openWebviewT(component),
@@ -958,14 +948,6 @@ export const Webchat = forwardRef((props, ref) => {
958
948
  {!webchatState.handoff && userInputArea()}
959
949
  {webchatState.webview && webchatWebview()}
960
950
  {webchatState.isCoverComponentOpen && coverComponent()}
961
- {webchatState.isModalOpen && (
962
- <PortalModalComponent
963
- open={webchatState.isModalOpen}
964
- onClose={() => toggleModal(false)}
965
- locked={false}
966
- customContent={customModalContent}
967
- />
968
- )}
969
951
  </StyledWebchat>
970
952
  )}
971
953
  </WebchatContext.Provider>
@@ -211,14 +211,6 @@ export class WebchatApp {
211
211
  this.webchatRef.current.closeCoverComponent()
212
212
  }
213
213
 
214
- openModal(customModalContent) {
215
- this.webchatRef.current.openModal(customModalContent)
216
- }
217
-
218
- closeModal() {
219
- this.webchatRef.current.closeModal()
220
- }
221
-
222
214
  toggleCoverComponent() {
223
215
  this.webchatRef.current.toggleCoverComponent()
224
216
  }
@@ -1,38 +0,0 @@
1
- import styled from 'styled-components'
2
-
3
- import { MODAL_ACTIVE_CLASSNAME, MODAL_CONTENT_CLASSNAME } from './constants'
4
-
5
- export const Backdrop = styled.div`
6
- position: fixed;
7
- top: 0;
8
- right: 0;
9
- bottom: 0;
10
- left: 0;
11
- background-color: rgba(51, 51, 51, 0.3);
12
- backdrop-filter: blur(1px);
13
- opacity: 0;
14
- transition: all 100ms cubic-bezier(0.4, 0, 0.2, 1);
15
- transition-delay: 200ms;
16
- display: flex;
17
- align-items: center;
18
- justify-content: center;
19
-
20
- & .${MODAL_CONTENT_CLASSNAME} {
21
- transform: translateY(100px);
22
- transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1);
23
- opacity: 0;
24
- }
25
-
26
- &.${MODAL_ACTIVE_CLASSNAME} {
27
- transition-duration: 250ms;
28
- transition-delay: 0ms;
29
- opacity: 1;
30
-
31
- & .${MODAL_CONTENT_CLASSNAME} {
32
- transform: translateY(0);
33
- opacity: 1;
34
- transition-delay: 150ms;
35
- transition-duration: 350ms;
36
- }
37
- }
38
- `
@@ -1,7 +0,0 @@
1
- // Portal
2
- export const BOTONIC_PORTAL_CLASS_LIST_NAME = 'botonic-portal-container'
3
-
4
- // Modal
5
- export const MODAL_PORTAL_CLASS_NAME = 'modal-portal'
6
- export const MODAL_CONTENT_CLASSNAME = 'modal-content'
7
- export const MODAL_ACTIVE_CLASSNAME = 'active'
@@ -1,10 +0,0 @@
1
- import styled from 'styled-components'
2
-
3
- export const ModalContent = styled.div`
4
- position: relative;
5
- padding: 4px;
6
- box-sizing: border-box;
7
- box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
8
- background-color: white;
9
- border-radius: 2px;
10
- `