@botonic/react 0.20.1-alpha.1 → 0.20.3

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 (128) hide show
  1. package/lib/app.js +4 -3
  2. package/lib/app.js.map +1 -1
  3. package/lib/components/button.js +22 -2
  4. package/lib/components/button.js.map +1 -1
  5. package/lib/components/buttons-disabler.js +2 -2
  6. package/lib/components/carousel.js +2 -2
  7. package/lib/components/custom-message.js +2 -2
  8. package/lib/components/document.js +2 -2
  9. package/lib/components/image.js +28 -32
  10. package/lib/components/image.js.map +1 -1
  11. package/lib/components/message.js +2 -2
  12. package/lib/components/multichannel/facebook/facebook.js +2 -2
  13. package/lib/components/reply.js +2 -2
  14. package/lib/components/subtitle.js +2 -2
  15. package/lib/components/text.js +2 -2
  16. package/lib/components/timestamps.js +2 -2
  17. package/lib/components/title.js +2 -2
  18. package/lib/constants.js +201 -0
  19. package/lib/constants.js.map +1 -0
  20. package/lib/contexts.js +57 -0
  21. package/lib/contexts.js.map +1 -0
  22. package/lib/dev-app.js +241 -0
  23. package/lib/dev-app.js.map +1 -0
  24. package/lib/index.d.ts +241 -0
  25. package/lib/index.js +131 -0
  26. package/lib/index.js.map +1 -0
  27. package/lib/message-utils.js +149 -0
  28. package/lib/message-utils.js.map +1 -0
  29. package/lib/msg-to-botonic.js +199 -0
  30. package/lib/msg-to-botonic.js.map +1 -0
  31. package/lib/node-app.js +97 -0
  32. package/lib/node-app.js.map +1 -0
  33. package/lib/react-bot.js +167 -0
  34. package/lib/react-bot.js.map +1 -0
  35. package/lib/util/dom.js +84 -0
  36. package/lib/util/dom.js.map +1 -0
  37. package/lib/util/environment.js +42 -0
  38. package/lib/util/environment.js.map +1 -0
  39. package/lib/util/error-boundary.js +105 -0
  40. package/lib/util/error-boundary.js.map +1 -0
  41. package/lib/util/index.d.ts +9 -0
  42. package/lib/util/index.js +2 -0
  43. package/lib/util/index.js.map +1 -0
  44. package/lib/util/logs.js +28 -0
  45. package/lib/util/logs.js.map +1 -0
  46. package/lib/util/objects.js +60 -0
  47. package/lib/util/objects.js.map +1 -0
  48. package/lib/util/react.js +75 -0
  49. package/lib/util/react.js.map +1 -0
  50. package/lib/util/regexs.js +31 -0
  51. package/lib/util/regexs.js.map +1 -0
  52. package/lib/util/webchat.js +92 -0
  53. package/lib/util/webchat.js.map +1 -0
  54. package/lib/webchat/actions.js +53 -0
  55. package/lib/webchat/actions.js.map +1 -0
  56. package/lib/webchat/components/attachment.js +43 -0
  57. package/lib/webchat/components/attachment.js.map +1 -0
  58. package/lib/webchat/components/common.js +33 -0
  59. package/lib/webchat/components/common.js.map +1 -0
  60. package/lib/webchat/components/emoji-picker.js +58 -0
  61. package/lib/webchat/components/emoji-picker.js.map +1 -0
  62. package/lib/webchat/components/persistent-menu.js +96 -0
  63. package/lib/webchat/components/persistent-menu.js.map +1 -0
  64. package/lib/webchat/components/send-button.js +27 -0
  65. package/lib/webchat/components/send-button.js.map +1 -0
  66. package/lib/webchat/components/styled-scrollbar.js +55 -0
  67. package/lib/webchat/components/styled-scrollbar.js.map +1 -0
  68. package/lib/webchat/components/styled-scrollbar.scss +12 -0
  69. package/lib/webchat/components/typing-indicator.js +27 -0
  70. package/lib/webchat/components/typing-indicator.js.map +1 -0
  71. package/lib/webchat/components/typing-indicator.scss +38 -0
  72. package/lib/webchat/devices/device-adapter.js +82 -0
  73. package/lib/webchat/devices/device-adapter.js.map +1 -0
  74. package/lib/webchat/devices/index.js +32 -0
  75. package/lib/webchat/devices/index.js.map +1 -0
  76. package/lib/webchat/devices/scrollbar-controller.js +152 -0
  77. package/lib/webchat/devices/scrollbar-controller.js.map +1 -0
  78. package/lib/webchat/devices/webchat-resizer.js +76 -0
  79. package/lib/webchat/devices/webchat-resizer.js.map +1 -0
  80. package/lib/webchat/header.js +116 -0
  81. package/lib/webchat/header.js.map +1 -0
  82. package/lib/webchat/hooks.js +359 -0
  83. package/lib/webchat/hooks.js.map +1 -0
  84. package/lib/webchat/index.d.ts +62 -0
  85. package/lib/webchat/index.js +32 -0
  86. package/lib/webchat/index.js.map +1 -0
  87. package/lib/webchat/message-list.js +88 -0
  88. package/lib/webchat/message-list.js.map +1 -0
  89. package/lib/webchat/messages-reducer.js +93 -0
  90. package/lib/webchat/messages-reducer.js.map +1 -0
  91. package/lib/webchat/replies.js +78 -0
  92. package/lib/webchat/replies.js.map +1 -0
  93. package/lib/webchat/session-view.js +106 -0
  94. package/lib/webchat/session-view.js.map +1 -0
  95. package/lib/webchat/use-storage-state-hook.js +29 -0
  96. package/lib/webchat/use-storage-state-hook.js.map +1 -0
  97. package/lib/webchat/webchat-dev.js +109 -0
  98. package/lib/webchat/webchat-dev.js.map +1 -0
  99. package/lib/webchat/webchat-reducer.js +108 -0
  100. package/lib/webchat/webchat-reducer.js.map +1 -0
  101. package/lib/webchat/webchat.js +1059 -0
  102. package/lib/webchat/webchat.js.map +1 -0
  103. package/lib/webchat/webview.js +122 -0
  104. package/lib/webchat/webview.js.map +1 -0
  105. package/lib/webchat-app.js +653 -0
  106. package/lib/webchat-app.js.map +1 -0
  107. package/lib/webchat.template.html +37 -0
  108. package/lib/webview.js +214 -0
  109. package/lib/webview.js.map +1 -0
  110. package/lib/webview.template.html +39 -0
  111. package/package.json +2 -2
  112. package/src/components/button.jsx +21 -1
  113. package/src/components/image.jsx +22 -27
  114. package/src/components/index.d.ts +5 -1
  115. package/src/constants.js +1 -0
  116. package/src/index.d.ts +3 -7
  117. package/src/index.js +0 -1
  118. package/src/webchat/actions.jsx +1 -1
  119. package/src/webchat/hooks.js +5 -5
  120. package/src/webchat/webchat-reducer.js +3 -3
  121. package/src/webchat/webchat.jsx +20 -17
  122. package/src/webchat-app.jsx +4 -4
  123. package/src/webchat/components/portal-modal/backdrop.jsx +0 -38
  124. package/src/webchat/components/portal-modal/constants.js +0 -7
  125. package/src/webchat/components/portal-modal/content.jsx +0 -10
  126. package/src/webchat/components/portal-modal/index.js +0 -5
  127. package/src/webchat/components/portal-modal/portal-modal-component.jsx +0 -72
  128. 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","_customComponent","renderCustomComponent","unmountCustomComponent","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":"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","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 renderCustomComponent(_customComponent) {\n this.webchatRef.current.renderCustomComponent(_customComponent)\n }\n\n unmountCustomComponent() {\n this.webchatRef.current.unmountCustomComponent()\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.3",
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.2",
32
32
  "axios": "^0.24.0",
33
33
  "emoji-picker-react": "^3.2.3",
34
34
  "framer-motion": "^3.1.1",
@@ -85,6 +85,25 @@ export const Button = props => {
85
85
  }
86
86
  }
87
87
 
88
+ const getClassName = (isCustom = false) => {
89
+ if (isCustom) {
90
+ return 'button-custom'
91
+ }
92
+ if (props.payload) {
93
+ return 'button-payload'
94
+ }
95
+ if (props.url) {
96
+ return 'button-url'
97
+ }
98
+ if (props.webview) {
99
+ return 'button-webview'
100
+ }
101
+ if (props.path) {
102
+ return 'button-path'
103
+ }
104
+ return ''
105
+ }
106
+
88
107
  const renderBrowser = () => {
89
108
  const buttonStyle = getThemeProperty(WEBCHAT.CUSTOM_PROPERTIES.buttonStyle)
90
109
  const CustomButton = getThemeProperty(
@@ -92,7 +111,7 @@ export const Button = props => {
92
111
  )
93
112
  if (CustomButton) {
94
113
  return (
95
- <div onClick={e => handleClick(e)}>
114
+ <div className={getClassName(true)} onClick={e => handleClick(e)}>
96
115
  <CustomButton>{props.children}</CustomButton>
97
116
  </div>
98
117
  )
@@ -119,6 +138,7 @@ export const Button = props => {
119
138
 
120
139
  return (
121
140
  <StyledButton
141
+ className={getClassName()}
122
142
  theme={theme}
123
143
  onMouseEnter={() => setHover(true)}
124
144
  onMouseLeave={() => setHover(false)}
@@ -1,9 +1,9 @@
1
1
  import { INPUT, isBrowser } from '@botonic/core'
2
- import React, { useState } from 'react'
2
+ import React, { useContext, useState } from 'react'
3
3
  import styled from 'styled-components'
4
4
 
5
- import { ROLES } from '../constants'
6
- import { PortalModalComponent } from '../webchat/components/portal-modal'
5
+ import { ROLES, WEBCHAT } from '../constants'
6
+ import { WebchatContext } from '../contexts'
7
7
  import { Message } from './message'
8
8
 
9
9
  const StyledImage = styled.img`
@@ -11,14 +11,7 @@ const StyledImage = styled.img`
11
11
  max-width: 150px;
12
12
  max-height: 150px;
13
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;
14
+ cursor: ${({ hasPreviewer }) => (hasPreviewer ? 'pointer' : 'auto')};
22
15
  `
23
16
 
24
17
  const serialize = imageProps => {
@@ -26,30 +19,32 @@ const serialize = imageProps => {
26
19
  }
27
20
 
28
21
  export const Image = props => {
29
- const [isHovered, setIsHovered] = useState(false)
30
- const [isModalOpen, setIsModalOpen] = useState(false)
31
-
32
22
  let content = props.children
33
23
 
24
+ const [isPreviewerOpened, setIsPreviewerOpened] = useState(false)
25
+ const openPreviewer = () => setIsPreviewerOpened(true)
26
+ const closePreviewer = () => setIsPreviewerOpened(false)
27
+
28
+ const { getThemeProperty } = useContext(WebchatContext)
29
+ const imagePreviewer = getThemeProperty(
30
+ WEBCHAT.CUSTOM_PROPERTIES.imagePreviewer,
31
+ null
32
+ )
34
33
  if (isBrowser()) {
35
34
  content = (
36
35
  <>
37
36
  <StyledImage
38
37
  src={props.src}
39
- isHovered={isHovered}
40
- onMouseEnter={() => setIsHovered(true)}
41
- onMouseLeave={() => setIsHovered(false)}
42
- onClick={() => setIsModalOpen(true)}
38
+ onClick={openPreviewer}
39
+ hasPreviewer={Boolean(imagePreviewer)}
43
40
  />
44
- {isModalOpen && (
45
- <PortalModalComponent
46
- open={isModalOpen}
47
- onClose={() => setIsModalOpen(false)}
48
- locked={false}
49
- >
50
- <StyledPreviewImage src={props.src} />
51
- </PortalModalComponent>
52
- )}
41
+ {imagePreviewer &&
42
+ imagePreviewer({
43
+ src: props.src,
44
+ isPreviewerOpened,
45
+ openPreviewer,
46
+ closePreviewer,
47
+ })}
53
48
  </>
54
49
  )
55
50
  }
@@ -102,7 +102,11 @@ export interface PersistentMenuProps {
102
102
  options: any
103
103
  }
104
104
 
105
- export type BlockInputOption = { match: RegExp[]; message: string }
105
+ export type BlockInputOption = {
106
+ preprocess?: (message: string) => string
107
+ match: RegExp[]
108
+ message: string
109
+ }
106
110
 
107
111
  export interface BlobProps {
108
112
  blobTick?: boolean
package/src/constants.js CHANGED
@@ -65,6 +65,7 @@ export const WEBCHAT = {
65
65
  enableAnimations: 'animations.enable',
66
66
  markdownStyle: 'markdownStyle',
67
67
  scrollbar: 'scrollbar',
68
+ imagePreviewer: 'imagePreviewer',
68
69
  // Mobile
69
70
  mobileBreakpoint: 'mobileBreakpoint',
70
71
  mobileStyle: 'mobileStyle',
package/src/index.d.ts CHANGED
@@ -25,10 +25,6 @@ export interface Route extends core.Route {
25
25
  }
26
26
  type Routes = core.Routes<Route>
27
27
 
28
- export interface BotOptions extends core.BotOptions {
29
- routes: Routes
30
- }
31
-
32
28
  export class ReactBot extends core.CoreBot {
33
29
  renderReactActions({
34
30
  actions,
@@ -37,7 +33,7 @@ export class ReactBot extends core.CoreBot {
37
33
  }
38
34
 
39
35
  export class NodeApp {
40
- constructor(options: Omit<BotOptions, 'renderer'>)
36
+ constructor(options: Omit<core.CoreBotConfig, 'renderer'>)
41
37
  bot: ReactBot
42
38
  input(request: core.BotRequest): Promise<BotResponse>
43
39
  renderNode(args): string
@@ -204,8 +200,8 @@ export class WebchatApp {
204
200
  updateLastMessageDate(date: string): void
205
201
  updateUser(user: core.SessionUser): void
206
202
  updateWebchatSettings(settings: WebchatSettingsProps): void
207
- openModal(customContent: React.ReactNode): void
208
- closeModal(): void
203
+ renderCustomComponent(customComponent: React.ReactNode): void
204
+ unmountCustomComponent(): void
209
205
  }
210
206
 
211
207
  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,7 @@ 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'
17
+ export const DO_RENDER_CUSTOM_COMPONENT = 'doRenderCustomComponent'
18
18
  export const SET_ERROR = 'setError'
19
19
  export const CLEAR_MESSAGES = 'clearMessages'
20
20
  export const UPDATE_LAST_MESSAGE_DATE = 'updateLastMessageDate'
@@ -6,12 +6,12 @@ import {
6
6
  ADD_MESSAGE,
7
7
  ADD_MESSAGE_COMPONENT,
8
8
  CLEAR_MESSAGES,
9
+ DO_RENDER_CUSTOM_COMPONENT,
9
10
  SET_CURRENT_ATTACHMENT,
10
11
  SET_ERROR,
11
12
  SET_ONLINE,
12
13
  TOGGLE_COVER_COMPONENT,
13
14
  TOGGLE_EMOJI_PICKER,
14
- TOGGLE_MODAL,
15
15
  TOGGLE_PERSISTENT_MENU,
16
16
  TOGGLE_WEBCHAT,
17
17
  UPDATE_DEV_SETTINGS,
@@ -60,7 +60,7 @@ export const webchatInitialState = {
60
60
  isEmojiPickerOpen: false,
61
61
  isPersistentMenuOpen: false,
62
62
  isCoverComponentOpen: false,
63
- isModalOpen: false,
63
+ isCustomComponentRendered: false,
64
64
  lastMessageUpdate: undefined,
65
65
  currentAttachment: undefined,
66
66
  jwt: null,
@@ -139,9 +139,9 @@ export function useWebchat() {
139
139
  type: TOGGLE_COVER_COMPONENT,
140
140
  payload: toggle,
141
141
  })
142
- const toggleModal = toggle =>
142
+ const doRenderCustomComponent = toggle =>
143
143
  webchatDispatch({
144
- type: TOGGLE_MODAL,
144
+ type: DO_RENDER_CUSTOM_COMPONENT,
145
145
  payload: toggle,
146
146
  })
147
147
  const setError = error =>
@@ -199,7 +199,7 @@ export function useWebchat() {
199
199
  toggleEmojiPicker,
200
200
  togglePersistentMenu,
201
201
  toggleCoverComponent,
202
- toggleModal,
202
+ doRenderCustomComponent,
203
203
  setError,
204
204
  setOnline,
205
205
  clearMessages,
@@ -1,10 +1,10 @@
1
1
  import {
2
+ DO_RENDER_CUSTOM_COMPONENT,
2
3
  SET_CURRENT_ATTACHMENT,
3
4
  SET_ERROR,
4
5
  SET_ONLINE,
5
6
  TOGGLE_COVER_COMPONENT,
6
7
  TOGGLE_EMOJI_PICKER,
7
- TOGGLE_MODAL,
8
8
  TOGGLE_PERSISTENT_MENU,
9
9
  TOGGLE_WEBCHAT,
10
10
  UPDATE_DEV_SETTINGS,
@@ -43,8 +43,8 @@ export function webchatReducer(state, action) {
43
43
  return { ...state, isPersistentMenuOpen: action.payload }
44
44
  case TOGGLE_COVER_COMPONENT:
45
45
  return { ...state, isCoverComponentOpen: action.payload }
46
- case TOGGLE_MODAL:
47
- return { ...state, isModalOpen: action.payload }
46
+ case DO_RENDER_CUSTOM_COMPONENT:
47
+ return { ...state, isCustomComponentRendered: action.payload }
48
48
  case SET_ERROR:
49
49
  return { ...state, error: action.payload || {} }
50
50
  case SET_ONLINE: